harperdb 4.2.2 → 4.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,18 +1,18 @@
1
- "use strict";var OH=Object.create;var Na=Object.defineProperty;var NH=Object.getOwnPropertyDescriptor;var bH=Object.getOwnPropertyNames;var yH=Object.getPrototypeOf,IH=Object.prototype.hasOwnProperty;var a=(e,t)=>Na(e,"name",{value:t,configurable:!0});var Te=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),qe=(e,t)=>{for(var r in t)Na(e,r,{get:t[r],enumerable:!0})},RR=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of bH(t))!IH.call(e,n)&&n!==r&&Na(e,n,{get:()=>t[n],enumerable:!(s=NH(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?OH(yH(e)):{},RR(t||!e||!e.__esModule?Na(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>RR(Na({},"__esModule",{value:!0}),e);var NR=T((zse,OR)=>{var wH=require("fast-glob"),{statSync:dE,existsSync:fE,readFileSync:CH,writeFileSync:LH}=require("fs"),{spawnSync:DH,spawn:UH,execFileSync:Qse}=require("child_process"),{isMainThread:MH}=require("worker_threads"),{join:Mn,relative:AR}=require("path"),{PACKAGE_ROOT:ts}=y(),{tmpdir:PH,platform:vH}=require("os");require("source-map-support").install();var BH=["resources","server","dataLayer","components"],ba="ts-build",EE,HH=__filename.endsWith("tsBuild.js");if(HH){if(MH){let r;try{dE(Mn(ts,ba)),r=!0}catch{}if(r)for(let s of wH.sync(BH.map(n=>n+"/**/*.ts"),{cwd:ts})){let n=0,i=0;try{n=dE(Mn(ts,s)).mtimeMs-5e3,i=dE(Mn(ts,ba,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),EE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),EE=!0;if(EE){let s=Mn(ts,"node_modules/.bin/tsc");vH()==="win32"&&(s+=".cmd");let n=DH(s,{cwd:ts});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Mn(PH(),"harperdb-tsc.pid"),o;if(fE(i))try{process.kill(+CH(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=UH(s,["--watch"],{cwd:ts,detached:!0,stdio:"ignore"});LH(i,c.pid.toString()),c.unref()}}}}let e=OR.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(ts)&&!s[0].includes("node_modules")){let i=AR(ts,s[0]),o;i.startsWith(ba)?o=Mn(ts,AR(ba,i)):o=Mn(ts,ba,i);let c=Mn(o,r),u=c+".js";if(fE(u))return u;if(c.includes(".")&&fE(c))return c}return t(r,s,n)}}});var y=T((jse,qR)=>{"use strict";var Mr=require("path"),qH=require("fs"),{relative:Jse,join:Xse}=Mr,{existsSync:FH}=qH;function GH(){let e=__dirname;for(;!FH(Mr.join(e,"package.json"));){let t=Mr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(GH,"getHDBPackageRoot");var Pn=GH(),bR="js",el=bR,xH="harperdb-config.yaml",kH="defaultConfig.yaml",VH="hdb",yR=`harperdb.${el}`,IR=`customFunctionsServer.${el}`,$H=`restartHdb.${el}`,mE="HarperDB",Zu="Custom Functions",tl="Clustering Hub",rl="Clustering Leaf",YH="Clustering Ingest Service",KH="Clustering Reply Service",WH="foreground.pid",QH="hdb.pid",zH="data",JH={HDB:mE,CLUSTERING_HUB:tl,CLUSTERING_LEAF:rl,CLUSTERING_INGEST_SERVICE:YH,CLUSTERING_REPLY_SERVICE:KH,CUSTOM_FUNCTIONS:Zu,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"},XH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},jH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},ZH={harperdb:mE,"clustering hub":tl,"clustering leaf":rl,"custom functions":Zu,custom_functions:Zu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},eq={CLUSTERING_HUB_PROC_DESCRIPTOR:tl,CLUSTERING_LEAF_PROC_DESCRIPTOR:rl},hE={HDB:Mr.join(Pn,"server/harperdb"),CUSTOM_FUNCTIONS:Mr.join(Pn,"server/customFunctions"),CLUSTERING_HUB:Mr.join(Pn,"server/nats"),CLUSTERING_LEAF:Mr.join(Pn,"server/nats")},tq={HDB:Mr.join(hE.HDB,yR),CUSTOM_FUNCTIONS:Mr.join(hE.CUSTOM_FUNCTIONS,IR)},rq={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Mr.join(Pn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Mr.join(Pn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Mr.join(Pn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},sq={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},wR="support@harperdb.io",nq="customer-success@harperdb.io",CR=1,iq=4141,LR="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",oq="https://www.harperdb.io/product",aq=`For support, please submit a request at ${LR} or contact ${wR}`,DR=`For license support, please contact ${nq}`,cq="None of the specified records were found.",uq="hash attribute not found",lq=`Your current license only supports ${CR} role. ${DR}`,_q="Your current license only supports 3 connections to a node.",dq="127.0.0.1",fq=1,Eq=/^\.$/,hq=/^\.\.$/,mq="U+002E",pq=/\//g,Sq="U+002F",Tq=/U\+002F/g,gq=/^U\+002E$/,Rq=/^U\+002EU\+002E$/,Aq="d",Oq=999999,Nq="*",bq="--max-old-space-size=",yq="system",Iq="__hdb_hash",wq=".harperdb",Cq=".hdb",Lq="keys",Dq="hdb_boot_properties.file",Uq=".updateConfig.json",Mq="SIGTSTP",Pq=24,vq=6e4,Bq=448,Hq="blob",qq="trash",Fq="database",Gq="schema",xq="transactions",kq=".count",Vq="id",$q="PROCESS_NAME",UR={SETTINGS_PATH_KEY:"settings_path"},MR=require("lodash"),Yq={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",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},Kq={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},Wq={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Qq={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"},zq={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"},dr="hdb_internal:",Jq={CREATE_SCHEMA:dr+"create_schema",CREATE_TABLE:dr+"create_table",CREATE_ATTRIBUTE:dr+"create_attribute",ADD_USER:dr+"add_user",ALTER_USER:dr+"alter_user",DROP_USER:dr+"drop_user",HDB_NODES:dr+"hdb_nodes",HDB_USERS:dr+"hdb_users",HDB_WORKERS:dr+"hdb_workers",CATCHUP:dr+"catchup",SCHEMA_CATCHUP:dr+"schema_catchup",WORKER_ROOM:dr+"cluster_workers"},Xq={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"},jq="060493.ks",Zq=".license",eF={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",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"},tF={CSV:".csv",JSON:".json"},rF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},sF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},ya={};ya[J.INSERT]=J.INSERT;ya[J.UPDATE]=J.UPDATE;ya[J.UPSERT]=J.UPSERT;ya[J.DELETE]=J.DELETE;var ye=Object.create(null);ye[J.DESCRIBE_ALL]=J.DESCRIBE_ALL;ye[J.DESCRIBE_TABLE]=J.DESCRIBE_TABLE;ye[J.DESCRIBE_SCHEMA]=J.DESCRIBE_SCHEMA;ye[J.READ_LOG]=J.READ_LOG;ye[J.ADD_NODE]=J.ADD_NODE;ye[J.LIST_USERS]=J.LIST_USERS;ye[J.LIST_ROLES]=J.LIST_ROLES;ye[J.USER_INFO]=J.USER_INFO;ye[J.SQL]=J.SQL;ye[J.GET_JOB]=J.GET_JOB;ye[J.SEARCH_JOBS_BY_START_DATE]=J.SEARCH_JOBS_BY_START_DATE;ye[J.DELETE_FILES_BEFORE]=J.DELETE_FILES_BEFORE;ye[J.EXPORT_LOCAL]=J.EXPORT_LOCAL;ye[J.EXPORT_TO_S3]=J.EXPORT_TO_S3;ye[J.CLUSTER_STATUS]=J.CLUSTER_STATUS;ye[J.REMOVE_NODE]=J.REMOVE_NODE;ye[J.RESTART]=J.RESTART;ye[J.CUSTOM_FUNCTIONS_STATUS]=J.CUSTOM_FUNCTIONS_STATUS;ye[J.GET_CUSTOM_FUNCTIONS]=J.GET_CUSTOM_FUNCTIONS;ye[J.GET_CUSTOM_FUNCTION]=J.GET_CUSTOM_FUNCTION;ye[J.SET_CUSTOM_FUNCTION]=J.SET_CUSTOM_FUNCTION;ye[J.DROP_CUSTOM_FUNCTION]=J.DROP_CUSTOM_FUNCTION;ye[J.ADD_CUSTOM_FUNCTION_PROJECT]=J.ADD_CUSTOM_FUNCTION_PROJECT;ye[J.DROP_CUSTOM_FUNCTION_PROJECT]=J.DROP_CUSTOM_FUNCTION_PROJECT;ye[J.PACKAGE_CUSTOM_FUNCTION_PROJECT]=J.PACKAGE_CUSTOM_FUNCTION_PROJECT;ye[J.DEPLOY_CUSTOM_FUNCTION_PROJECT]=J.DEPLOY_CUSTOM_FUNCTION_PROJECT;var nF={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},iF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},PR={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"},oF=MR.invert(PR),aF={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"},N={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",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_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",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_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority"},vR={settings_path:UR.SETTINGS_PATH_KEY,hdb_root_key:N.ROOTPATH,hdb_root:N.ROOTPATH,rootpath:N.ROOTPATH,server_port_key:N.OPERATIONSAPI_NETWORK_PORT,server_port:N.OPERATIONSAPI_NETWORK_PORT,cert_key:N.TLS_CERTIFICATE,certificate:N.TLS_CERTIFICATE,private_key_key:N.TLS_PRIVATEKEY,private_key:N.TLS_PRIVATEKEY,http_secure_enabled_key:N.OPERATIONSAPI_NETWORK_HTTPS,https_on:N.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:N.OPERATIONSAPI_NETWORK_CORS,cors_on:N.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:N.LOGGING_LEVEL,log_level:N.LOGGING_LEVEL,log_path_key:N.LOGGING_ROOT,log_path:N.LOGGING_ROOT,clustering_node_name_key:N.CLUSTERING_NODENAME,node_name:N.CLUSTERING_NODENAME,clustering_enabled_key:N.CLUSTERING_ENABLED,clustering:N.CLUSTERING_ENABLED,max_http_threads:N.THREADS,max_hdb_processes:N.THREADS,server_timeout_key:N.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:N.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:N.LOGGING_AUDITLOG,disable_transaction_log:N.LOGGING_AUDITLOG,operation_token_timeout_key:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:N.HTTP_PORT,custom_functions_port:N.HTTP_PORT,custom_functions_directory_key:N.COMPONENTSROOT,custom_functions_directory:N.COMPONENTSROOT,max_custom_function_processes:N.THREADS,log_to_file:N.LOGGING_FILE,log_to_stdstreams:N.LOGGING_STDSTREAMS,local_studio_on:N.LOCALSTUDIO_ENABLED,clustering_port:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:N.CLUSTERING_USER,clustering_enabled:N.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:N.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:N.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:N.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:N.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:N.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:N.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:N.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:N.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:N.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:N.CLUSTERING_NODENAME,clustering_tls_certificate:N.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:N.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:N.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:N.CLUSTERING_TLS_INSECURE,clustering_tls_verify:N.CLUSTERING_TLS_VERIFY,clustering_loglevel:N.CLUSTERING_LOGLEVEL,clustering_republishmessages:N.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:N.CLUSTERING_DATABASELEVEL,customfunctions_network_port:N.HTTP_PORT,customfunctions_tls_certificate:N.TLS_CERTIFICATE,customfunctions_network_cors:N.HTTP_CORS,customfunctions_network_corsaccesslist:N.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:N.HTTP_HEADERSTIMEOUT,customfunctions_network_https:N.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:N.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:N.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:N.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:N.HTTP_TIMEOUT,http_threads:N.THREADS,threads:N.THREADS,http_session_affinity:N.HTTP_SESSIONAFFINITY,http_compressionthreshold:N.HTTP_COMPRESSIONTHRESHOLD,http_cors:N.HTTP_CORS,http_corsaccesslist:N.HTTP_CORSACCESSLIST,http_headerstimeout:N.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:N.HTTP_KEEPALIVETIMEOUT,http_timeout:N.HTTP_TIMEOUT,http_port:N.HTTP_PORT,http_secureport:N.HTTP_SECUREPORT,customfunctions_processes:N.THREADS,customfunctions_root:N.COMPONENTSROOT,localstudio_enabled:N.LOCALSTUDIO_ENABLED,logging_file:N.LOGGING_FILE,logging_level:N.LOGGING_LEVEL,logging_root:N.LOGGING_ROOT,logging_rotation_enabled:N.LOGGING_ROTATION_ENABLED,logging_rotation_compress:N.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:N.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:N.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:N.LOGGING_ROTATION_PATH,logging_stdstreams:N.LOGGING_STDSTREAMS,logging_auditlog:N.LOGGING_AUDITLOG,logging_auditretention:N.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:N.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:N.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:N.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:N.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:N.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:N.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:N.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:N.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:N.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:N.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:N.ROOTPATH,databases:N.DATABASES,storage_path:N.STORAGE_PATH,ignorescripts:N.IGNORE_SCRIPTS,mqtt_network_port:N.MQTT_NETWORK_PORT,mqtt_websocket:N.MQTT_WEBSOCKET,mqtt_network_secureport:N.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:N.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:N.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:N.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:N.AUTHENTICATION_CACHETTL,authentication_enablesessions:N.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:N.COMPONENTSROOT,tls_certificate:N.TLS_CERTIFICATE,tls_privatekey:N.TLS_PRIVATEKEY,tls_certificateauthority:N.TLS_CERTIFICATEAUTHORITY};for(let e in N){let t=N[e];vR[t.toLowerCase()]=t}var cF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},uF={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"},lF={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"},_F={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},dF={VERSION_DEFAULT:"2.2.0"},fF={DEVELOPMENT:8192,DEFAULT:512},EF={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"},hF={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"},mF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},BR={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},pF=Symbol("metadata"),SF="__clustering__",TF=Object.values(BR),gF=15984864e5,HR={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},RF=MR.invert(HR),AF={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"},OF=111,NF=`\r
2
- `,bF={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},yF=["*","%"],IF="unauthorized_access",wF="func_val",CF={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},LF={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},DF={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"},UF={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},MF={HTTP:"http"},PF={STOPPED:"stopped",ONLINE:"online"},vF="3.x.x",BF={SUCCESS:"success",FAILURE:"failure"},HF={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};qR.exports={LOCAL_HARPERDB_OPERATIONS:ye,HDB_SUPPORT_ADDRESS:wR,HDB_SUPPORT_URL:LR,HDB_PRICING_URL:oq,SUPPORT_HELP_MSG:aq,LICENSE_HELP_MSG:DR,HDB_PROC_NAME:yR,HDB_PROC_DESCRIPTOR:mE,CLUSTERING_LEAF_PROC_DESCRIPTOR:rl,CLUSTERING_HUB_PROC_DESCRIPTOR:tl,SYSTEM_SCHEMA_NAME:yq,HASH_FOLDER_NAME:Iq,HDB_HOME_DIR_NAME:wq,UPDATE_FILE_NAME:Uq,LICENSE_KEY_DIR_NAME:Lq,BOOT_PROPS_FILE_NAME:Dq,JOB_TYPE_ENUM:uF,JOB_STATUS_ENUM:eF,SYSTEM_TABLE_NAMES:Qq,SYSTEM_TABLE_HASH_ATTRIBUTES:zq,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:tF,S3_BUCKET_AUTH_KEYS:rF,VALID_SQL_OPS_ENUM:sF,GEO_CONVERSION_ENUM:iF,HDB_SETTINGS_NAMES:PR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:oF,SERVICE_ACTIONS_ENUM:nF,CLUSTER_MESSAGE_TYPE_ENUM:lF,CLUSTER_CONNECTION_DIRECTION_ENUM:_F,CLUSTER_EVENTS_DEFS_ENUM:EF,PERIOD_REGEX:Eq,DOUBLE_PERIOD_REGEX:hq,UNICODE_PERIOD:mq,FORWARD_SLASH_REGEX:pq,UNICODE_FORWARD_SLASH:Sq,ESCAPED_FORWARD_SLASH_REGEX:Tq,ESCAPED_PERIOD_REGEX:gq,ESCAPED_DOUBLE_PERIOD_REGEX:Rq,REG_KEY_FILE_NAME:jq,RESTART_TIMEOUT_MS:vq,HDB_FILE_PERMISSIONS:Bq,DATABASES_DIR_NAME:Fq,LEGACY_DATABASES_DIR_NAME:Gq,TRANSACTIONS_DIR_NAME:xq,LIMIT_COUNT_NAME:kq,ID_ATTRIBUTE_STRING:Vq,INSERT_MODULE_ENUM:Kq,UPGRADE_JSON_FIELD_NAMES_ENUM:Wq,RESTART_CODE:Mq,RESTART_CODE_NUM:Pq,CLUSTER_OPERATIONS:ya,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:Xq,HDB_INTERNAL_SC_CHANNEL_PREFIX:dr,INTERNAL_SC_CHANNELS:Jq,CLUSTERING_MESSAGE_TYPES:AF,HDB_FILE_SUFFIX:Cq,BLOB_FOLDER_NAME:Hq,HDB_TRASH_DIR:qq,ORIGINATOR_SET_VALUE:OF,LICENSE_VALUES:dF,RAM_ALLOCATION_ENUM:fF,TIME_STAMP_NAMES_ENUM:BR,TIME_STAMP_NAMES:TF,PERMS_UPDATE_RELEASE_TIMESTAMP:gF,SEARCH_NOT_FOUND_MESSAGE:cq,SEARCH_ATTRIBUTE_NOT_FOUND:uq,LICENSE_ROLE_DENIED_RESPONSE:lq,LICENSE_MAX_CONNS_REACHED:_q,BASIC_LICENSE_MAX_NON_CU_ROLES:CR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:iq,VALUE_SEARCH_COMPARATORS:HR,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:RF,LICENSE_FILE_NAME:Zq,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:hF,NEW_LINE:NF,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:fq,MOMENT_DAYS_TAG:Aq,API_TURNOVER_SEC:Oq,LOOPBACK:dq,CODE_EXTENSION:el,WILDCARD_SEARCH_VALUE:Nq,NODE_ERROR_CODES:mF,JAVASCRIPT_EXTENSION:bR,PERMS_CRUD_ENUM:bF,UNAUTHORIZED_PERMISSION_NAME:IF,SEARCH_WILDCARDS:yF,FUNC_VAL:wF,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:CF,JWT_ENUM:LF,CLUSTERING_FLAG:SF,ITC_EVENT_TYPES:DF,CUSTOM_FUNCTION_PROC_NAME:IR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Zu,SERVICES:UF,THREAD_TYPES:MF,MEM_SETTING_KEY:bq,HDB_RESTART_SCRIPT:$H,PROCESS_DESCRIPTORS:JH,SERVICE_SERVERS:tq,SERVICE_SERVERS_CWD:hE,PROCESS_DESCRIPTORS_VALIDATE:ZH,LAUNCH_SERVICE_SCRIPTS:rq,LOG_LEVELS:jH,PROCESS_NAME_ENV_PROP:$q,LOG_NAMES:XH,PM2_PROCESS_STATUSES:PF,CONFIG_PARAM_MAP:vR,CONFIG_PARAMS:N,HDB_CONFIG_FILE:xH,HDB_DEFAULT_CONFIG_FILE:kH,ROLE_TYPES_ENUM:sq,BOOT_PROP_PARAMS:UR,INSTALL_PROMPTS:Yq,HDB_ROOT_DIR_NAME:VH,CLUSTERING_PROCESSES:eq,FOREGROUND_PID_FILE:WH,PACKAGE_ROOT:Pn,PRE_4_0_0_VERSION:vF,DATABASES_PARAM_CONFIG:cF,METADATA_PROPERTY:pF,AUTH_AUDIT_STATUS:BF,AUTH_AUDIT_TYPES:HF,HDB_PID_FILE:QH,DEFAULT_DATABASE_NAME:zH,LEGACY_CONFIG_PARAMS:aF};NR()});var pE=T((ene,xR)=>{"use strict";var FR=require("minimist");xR.exports=qF;function qF(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=GR(process.env),s=GR(FR(process.argv))):(r=process.env,s=FR(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(qF,"assignCMDENVVariables");function GR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(GR,"objKeysToLowerCase")});var G=T((rne,NE)=>{"use strict";var _i=require("fs-extra"),{workerData:FF,threadId:GF}=require("worker_threads"),Zs=require("path"),$R=require("yaml"),YR=require("properties-reader"),ct=y(),kR=pE(),xF=require("os"),{PACKAGE_ROOT:TE}=y(),{_assignPackageExport:kF}=require("../../index"),wa={};for(let e in console)wa[e]||(wa[e]=console[e]);var Kt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},KR={STDOUT:"stdOut",STDERR:"stdErr"},VF=Zs.join(TE,"logs"),$F=Zs.join(TE,"config/yaml/",ct.HDB_DEFAULT_CONFIG_FILE),YF=1e4,js,ys,Yt,sl,nl,Ca,so,Ia;Ia===void 0&&WR();NE.exports={notify:JR,fatal:XR,error:La,warn:OE,info:il,debug:AE,trace:RE,setLogLevel:jF,log_level:Yt,loggerWithTag:KF,suppressLogging:WF,initLogSettings:WR,setupConsoleLogging:QR,logCustomLevel:JF,closeLogFile:gE,getLogFilePath:()=>Ca,OUTPUTS:KR,AuthAuditLog:tG};kF("logger",NE.exports);function WR(e=!1){try{if(Ia===void 0||e){gE();let t=XF(),r=kR(["ROOTPATH"]);try{Ia=YR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!_i.pathExistsSync(Zs.join(r.ROOTPATH,ct.HDB_CONFIG_FILE)))throw s}({level:Yt,config_log_path:nl,to_file:js,to_stream:ys}=ZF(r.ROOTPATH?Zs.join(r.ROOTPATH,ct.HDB_CONFIG_FILE):Ia.get("settings_path"))),sl=ct.LOG_NAMES.HDB,Ca=Zs.join(nl,sl)}}catch(t){if(Ia=void 0,t.code===ct.NODE_ERROR_CODES.ENOENT){let r=kR(Object.keys(ct.CONFIG_PARAM_MAP),!0);for(let o in r){let c=ct.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===ct.CONFIG_PARAMS.LOGGING_LEVEL){Yt=u;continue}if(c===ct.CONFIG_PARAMS.LOGGING_STDSTREAMS){ys=u;continue}c===ct.CONFIG_PARAMS.LOGGING_FILE&&(js=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=eG();js=js===void 0?n:js,js=VR(js),ys=ys===void 0?i:ys,ys=VR(ys),Yt=Yt===void 0?s:Yt,nl=VF,sl=ct.LOG_NAMES.INSTALL,Ca=Zs.join(nl,sl);return}throw La("Error initializing log settings"),La(t),t}process.env.DEV_MODE&&(ys=!0),QR()}a(WR,"initLogSettings");var SE=!0;function QR(){ro("error",La),ro("warn",OE),ro("log",il),ro("info",il),ro("debug",AE),ro("trace",RE)}a(QR,"setupConsoleLogging");function ro(e,t){console[e]=function(...r){if(SE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return wa[e](...r)}}a(ro,"logConsole");function KF(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(JR),fatal:r(XR),error:r(La),warn:r(OE),info:r(il),debug:r(AE),trace:r(RE)};function r(s){return function(...n){return s(t,...n)}}}a(KF,"loggerWithTag");function WF(e){try{SE=!1,e()}finally{SE=!0}}a(WF,"suppressLogging");var QF=FF?.name?.replace(/ /g,"-")||"main";function en(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-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||QF+"/"+GF);c<n;c++){let _=t[c];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
3
- `}a(en,"createLogRecord");function Da(e){js&&zR(e),ys&&process.stdout.write(e)}a(Da,"logStdOut");function ol(e){js&&zR(e),ys&&process.stderr.write(e)}a(ol,"logStdErr");function zR(e){zF(),so?_i.appendFileSync(so,e):wa.log(e)}a(zR,"logToFile");function gE(){try{_i.closeSync(so)}catch{}so=null}a(gE,"closeLogFile");function zF(){if(!so){try{if(!Ca)debugger;so=_i.openSync(Ca,"a")}catch(e){wa.error(e)}setTimeout(()=>{gE()},YF).unref()}}a(zF,"openLogFile");function il(...e){Kt[Yt]<=Kt.info&&Da(en("info",e))}a(il,"info");function RE(...e){Kt[Yt]<=Kt.trace&&Da(en("trace",e))}a(RE,"trace");function La(...e){Kt[Yt]<=Kt.error&&ol(en("error",e))}a(La,"error");function AE(...e){Kt[Yt]<=Kt.debug&&Da(en("debug",e))}a(AE,"debug");function JR(...e){Kt[Yt]<=Kt.notify&&Da(en("notify",e))}a(JR,"notify");function XR(...e){Kt[Yt]<=Kt.fatal&&ol(en("fatal",e))}a(XR,"fatal");function OE(...e){Kt[Yt]<=Kt.warn&&ol(en("warn",e))}a(OE,"warn");function JF(e,t,...r){t===KR.STDERR?ol(en(e,r)):Da(en(e,r))}a(JF,"logCustomLevel");function XF(){let e;try{e=xF.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Zs.join(e,ct.HDB_HOME_DIR_NAME,ct.BOOT_PROPS_FILE_NAME);return _i.existsSync(t)||(t=Zs.join(TE,"utility/hdb_boot_properties.file")),t}a(XF,"getPropsFilePath");function jF(e){Yt=e}a(jF,"setLogLevel");function VR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(VR,"autoCastBoolean");function ZF(e){try{if(e.includes("config/settings.js")){let o=YR(e);return{level:o.get(ct.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Zs.dirname(o.get(ct.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(ct.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(ct.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=$R.parseDocument(_i.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===ct.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(ZF,"getLogConfig");function eG(){try{let e=$R.parseDocument(_i.readFileSync($F,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(eG,"getDefaultConfig");function tG(e,t,r,s,n,i){this.username=e,this.status=t,this.type=r,this.originating_ip=s,this.request_method=n,this.path=i}a(tG,"AuthAuditLog")});var ZR=T((nne,jR)=>{"use strict";var rG=require("util"),sG=require("path"),nG=require("child_process"),iG=rG.promisify(nG.execFile),oG=1e3*1e3*10;jR.exports={findPs:aG};async function aG(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await iG("ps",["wwxo",`pid,${r}`],{maxBuffer:oG});for(let n of s.trim().split(`
4
- `).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.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,s])=>({pid:Number.parseInt(r,10),name:sG.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(aG,"findPs")});var ze=T((one,tA)=>{"use strict";var cG="__dbis__",uG="__txns__",lG="__environment_name__",_G="__dbi_defintion__",dG={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"},fG=["__createdtime__","__updatedtime__"],EG="\uFFFF",eA={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},hG=Object.values(eA);tA.exports={AUDIT_STORE_NAME:uG,INTERNAL_DBIS_NAME:cG,DBI_DEFINITION_NAME:_G,SEARCH_TYPES:dG,TIMESTAMP_NAMES:fG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:lG,TRANSACTIONS_DBI_NAMES_ENUM:eA,TRANSACTIONS_DBIS:hG,OVERFLOW_MARKER:EG}});var fr=T((ane,lA)=>{"use strict";var rA=y(),sA=ze(),nA={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},iA=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),oA={500:iA("There was an error processing your request."),400:"Invalid request"},mG=oA[nA.INTERNAL_SERVER_ERROR],pG={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.`},SG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},TG={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"},gG={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 ${sA.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${sA.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"},RG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${rA.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 ${rA.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"},aA={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"},AG={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."},OG={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`},NG={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"},bG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},yG={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`},cA={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.`},uA={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}`},IG={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."},wG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},CG={...aA,...TG,...pG,...AG,...OG,...NG,...bG,...yG,...RG,...cA,...uA,...IG,...wG,...SG};lA.exports={CHECK_LOGS_WRAPPER:iA,HDB_ERROR_MSGS:CG,DEFAULT_ERROR_MSGS:oA,DEFAULT_ERROR_RESP:mG,HTTP_STATUS_CODES:nA,LMDB_ERRORS_ENUM:gG,AUTHENTICATION_ERROR_MSGS:aA,VALIDATION_ERROR_MSGS:cA,ITC_ERRORS:uA}});var j=T((une,fA)=>{"use strict";var no=fr(),LG=G(),DG=y(),al=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,_A),this.statusCode=s||no.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(no.DEFAULT_ERROR_MSGS[s]?no.DEFAULT_ERROR_MSGS[s]:no.DEFAULT_ERROR_MSGS[no.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&LG[n](i)}},bE=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}},yE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function _A(e,t,r,s=DG.LOG_LEVELS.ERROR,n=null,i=!1){if(dA(e))return e;let o=new al(e,t,r,s,n);return i&&delete o.stack,o}a(_A,"handleHDBError");function dA(e){return e.__proto__.constructor.name===al.name}a(dA,"isHDBError");fA.exports={isHDBError:dA,handleHDBError:_A,ClientError:bE,ServerError:yE,hdb_errors:no}});var ve=T((_ne,gA)=>{"use strict";var Ba=y(),UG=$(),Wt=X(),Ha=require("path"),MG=require("minimist"),EA=require("fs-extra"),hA=require("lodash");Wt.initSync();var{CONFIG_PARAMS:vn,DATABASES_PARAM_CONFIG:Ua,SYSTEM_SCHEMA_NAME:cl}=Ba,Ma,Pa,va;function mA(){if(Ma!==void 0)return Ma;if(Wt.getHdbBasePath()!==void 0)return Ma=Wt.get(vn.STORAGE_PATH)||Ha.join(Wt.getHdbBasePath(),Ba.DATABASES_DIR_NAME),Ma}a(mA,"getBaseSchemaPath");function pA(){if(Pa!==void 0)return Pa;if(Wt.getHdbBasePath()!==void 0)return Pa=TA(cl),Pa}a(pA,"getSystemSchemaPath");function SA(){if(va!==void 0)return va;if(Wt.getHdbBasePath()!==void 0)return va=Wt.get(Ba.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Ha.join(Wt.getHdbBasePath(),Ba.TRANSACTIONS_DIR_NAME),va}a(SA,"getTransactionAuditStoreBasePath");function PG(e,t){let r=Wt.get(vn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Ha.join(SA(),e.toString())}a(PG,"getTransactionAuditStorePath");function TA(e,t){e=e.toString(),t=t&&t.toString();let r=Wt.get(Ba.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Ha.join(mA(),e)}a(TA,"getSchemaPath");function vG(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,MG(process.argv));let s=r[vn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!UG.isObject(s))throw o;i=s}for(let o of i){let c=o[cl];if(!c)continue;let u=Wt.get(vn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Ua.PATH];if(_)return hA.set(u,[cl,Ua.TABLES,t,Ua.PATH],_),Wt.setProperty(vn.DATABASES,u),_;let l=c?.[Ua.PATH];if(l)return hA.set(u,[cl,Ua.PATH],l),Wt.setProperty(vn.DATABASES,u),l}}let n=r[vn.STORAGE_PATH.toUpperCase()];if(n){if(!EA.pathExistsSync(n))throw new Error(n+" does not exist");let i=Ha.join(n,e);return EA.mkdirsSync(i),Wt.setProperty(vn.STORAGE_PATH,n),i}return pA()}a(vG,"initSystemSchemaPaths");function BG(){Ma=void 0,Pa=void 0,va=void 0}a(BG,"resetPaths");gA.exports={getBaseSchemaPath:mA,getSystemSchemaPath:pA,getTransactionAuditStorePath:PG,getTransactionAuditStoreBasePath:SA,getSchemaPath:TA,initSystemSchemaPaths:vG,resetPaths:BG}});var Er=T((hne,bA)=>{"use strict";var HG=fr().LMDB_ERRORS_ENUM,fne=require("lmdb"),qG=ze(),Ene=require("buffer").Buffer,{OVERFLOW_MARKER:RA,MAX_SEARCH_KEY_LENGTH:ul}=qG,AA=["number","string","symbol","boolean","bigint"];function FG(e){if(e=e?.primaryStore||e,!e)throw new Error(HG.ENV_REQUIRED)}a(FG,"validateEnv");function GG(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(GG,"stringifyData");function xG(e){return e instanceof Date?e.valueOf():e}a(xG,"convertKeyValueToWrite");function kG(e){if(e==null)return;if(AA.includes(typeof e))return e.length>ul?[e.slice(0,ul)+RA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(AA.includes(typeof n))n.length>ul?t.push(n.slice(0,ul)+RA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(kG,"getIndexedValues");var ll=0,OA=0;function NA(){OA=Date.now()-performance.now()}a(NA,"adjustStartTime");NA();var VG=6e4;setInterval(NA,VG).unref();function $G(){let e=performance.now()+OA;return e>ll?(ll=e,e):(ll+=488e-6,ll)}a($G,"getNextMonotonicTime");bA.exports={validateEnv:FG,stringifyData:GG,convertKeyValueToWrite:xG,getNextMonotonicTime:$G,getIndexedValues:kG}});var yA,rs,IE,qa=Te(()=>{yA=require("events"),rs=class extends yA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new IE;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)}},IE=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}}}});function Pr(e){return e[Ht]||(e[Ht]=Object.create(null))}function El(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u;switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new ss.ClientError(`${c} must be a string, attempt to assign ${l}`);Pr(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 ss.ClientError(`${c} must be a string, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new ss.ClientError(`${c} must be a number, attempt to assign ${l}`);Pr(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 ss.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Pr(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 ss.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new ss.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Pr(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 ss.ClientError(`${c} must be a Date, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new ss.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Pr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new ss.ClientError(`${c} must be an object, attempt to assign ${l}`);Pr(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Ht];if(l&&c in l)return l[c];let d=this[ge]?.[c];if(d&&typeof d=="object"){let f=IA(d,o);if(f)return l||(l=this[Ht]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0};_.get.isAttribute=!0,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Ht];return u?.[o]!==void 0?u[o]:this[ge]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new ss.ClientError("Can not add a property to a sealed table schema");Pr(this)[o]=c}),i("deleteProperty",function(o){Pr(this)[o]=void 0}),i("toJSON",function(){let o=this[Ht],c;for(let _ in o)c||(c=Object.assign({},this[ge])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ge])),Object.assign(c,this)),c||this[ge]}),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 IA(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[ge]=n}},El(r,t)),new r(e)):new _l(e);case Array:let s=new fl(e.length);s[ge]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=IA(o,t?.elements)),s[n]=o}return s}}function hl(e){let t=e[Ht],r;for(let n in t){r||(r=Object.assign({},e[ge]));let i=t[n];i&&typeof i=="object"&&(i=hl(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ge])),Object.assign(r,e)),r||e[ge]}function Fa(e){let t;if(e[ge]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=Fa(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Ht];for(let s in r){t||(t=Object.assign({},e[ge]));let n=r[s];n&&typeof n=="object"&&(n=Fa(n)),t[s]=n}return t?Object.freeze(t):e[ge]||(e.buffer?e:Object.freeze(e))}function dl(e){let t=e[ge];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[di]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[ge]===n){if(dl(i))return!0}else return!0}}else{let r=e[Ht];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ge]===i){if(dl(n))return!0}else return!0}else return!0}}return!1}var ss,Ht,_l,di,fl,ml=Te(()=>{ns();ss=D(j()),Ht=Symbol("own-data");a(Pr,"getChanges");a(El,"assignTrackedAccessors");a(IA,"trackObject");_l=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ge]=t}};El(_l,{});a(hl,"collapseData");a(Fa,"deepFreeze");a(dl,"hasChanges");di=Symbol.for("has-array-changes"),fl=class extends Array{static{a(this,"TrackedArray")}[di];constructor(t){super(t)}splice(...t){return this[di]=!0,super.splice(...t)}push(...t){return this[di]=!0,super.push(...t)}pop(){return this[di]=!0,super.pop()}unshift(...t){return this[di]=!0,super.unshift(...t)}shift(){return this[di]=!0,super.shift()}};fl.prototype.constructor=Array});function QG(){WG=setInterval(function(){for(let e of wE)if(e.stale){let t=e[me]?.url;wA.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},KG).unref()}var CE,wA,YG,wE,fi,pl,KG,WG,LE=Te(()=>{CE=D(Er()),wA=D(G());ns();YG=100,wE=new Set,fi=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;validated=0;timestamp=0;open=!0;getReadTxn(){return this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn?this.readTxn:(this.readTxn=this.lmdbDb.useReadTransaction(),wE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(wE.delete(this),this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,CE.getNextMonotonicTime)());let s=t.retries||0;if(this.resetReadSnapshot(),this.validated<this.writes.length){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()=>{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 R=S();E?E.push?E.push(R):E=[E,R]:E=R}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}t?.close&&(this.open=!1);let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<YG>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return n.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=s+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(){this.resetReadSnapshot(),this.writes=[]}},pl=class extends fi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,CE.getNextMonotonicTime)())}getReadTxn(){}},KG=3e4;a(QG,"startMonitoringTxns");QG()});function Ge(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new fi;e.timestamp&&(s.timestamp=e.timestamp),s[me]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({close:!0});return u.then?u.then(()=>(r?.resetTransaction&&(e.transaction=null),c)):(r?.resetTransaction&&(e.transaction=null),c)}function o(c){throw s.abort(),r?.resetTransaction&&(e.transaction=null),c}}var CA,Ei=Te(()=>{CA=require("../../index");ns();LE();a(Ge,"transaction");(0,CA._assignPackageExport)("transaction",Ge);Ge.commit=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ge.abort=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function UE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;if(l==null)throw new io.ClientError("Invalid value provided for query, must be non-null value");l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(UA[d]||d){case"lt":o=!0,c=l;break;case"le":o=!0,c=l,u=!0;break;case"gt":o=l,_=!0;break;case"ge":o=l;break;case"prefix":o=l,c=l.slice(0),c[c.length-1]=ws.MAXIMUM_KEY;break;case"starts_with":o=l.toString(),c=l+String.fromCharCode(65535);break;case"between":o=l[0],o instanceof Date&&(o=o.getTime()),c=l[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case ht.SEARCH_TYPES.EQUALS:case void 0:o=l,c=l,u=!0;break;case"ne":case"contains":case"ends_with":f=!0;break;default:throw new io.ClientError(`Unknown query comparator "${d}"`)}if(r){let S=o;o=c,c=S,S=!_,_=!u,u=S}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new io.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=ME(e);if(!S)throw new io.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:R,value:b})=>new Promise((O,Y)=>setImmediate(()=>{try{O(b&&S(b)?R:DA.SKIP)}catch(Q){Y(Q)}})))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:_,values:!E,transaction:t,reverse:r};return E?h.getRange(p):h.getRange(p).map(({value:S})=>S)}function ME(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),UA[t]||t){case ht.SEARCH_TYPES.EQUALS:case void 0:return Is(r,n=>n===s);case ht.SEARCH_TYPES.CONTAINS:return Is(r,n=>n?.toString().includes(s));case ht.SEARCH_TYPES.ENDS_WITH:case ht.SEARCH_TYPES._ENDS_WITH:return Is(r,n=>n?.toString().endsWith(s));case ht.SEARCH_TYPES.STARTS_WITH:case ht.SEARCH_TYPES._STARTS_WITH:return Is(r,n=>typeof n=="string"&&n.startsWith(s));case ht.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),Is(r,n=>(0,ws.compareKeys)(n,s[0])>=0&&(0,ws.compareKeys)(n,s[1])<=0);case"gt":case ht.SEARCH_TYPES.GREATER_THAN:case ht.SEARCH_TYPES._GREATER_THAN:return Is(r,n=>(0,ws.compareKeys)(n,s)>0);case"ge":case ht.SEARCH_TYPES.GREATER_THAN_EQUAL:case ht.SEARCH_TYPES._GREATER_THAN_EQUAL:return Is(r,n=>(0,ws.compareKeys)(n,s)>=0);case ht.SEARCH_TYPES.LESS_THAN:case"lt":case ht.SEARCH_TYPES._LESS_THAN:return Is(r,n=>(0,ws.compareKeys)(n,s)<0);case"le":case ht.SEARCH_TYPES.LESS_THAN_EQUAL:case ht.SEARCH_TYPES._LESS_THAN_EQUAL:return Is(r,n=>(0,ws.compareKeys)(n,s)<=0);case"ne":return Is(r,n=>(0,ws.compareKeys)(n,s)!==0);default:throw new io.ClientError(`Unknown query comparator "${t}"`)}}function Is(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function Sl(e){if(!e)return;let t=new DE,r,s,n,i,o,c=LA;for(;r=c.exec(e);){i=c.lastIndex;let[,u,_]=r;switch(_){case")":case")&":switch(o){case"limit":if(u.indexOf(",")>-1){let[l,d]=u.split(",");t.offset=+l,t.limit=d-t.offset}else t.limit=+u;break;case"select":if(u[0]==="["){if(u[u.length-1]!=="]")throw new Error("Unmatched brackets");t.select=u.slice(1,-1).split(","),t.select.asArray=!0}else u.indexOf(",")>-1?t.select=(u.endsWith(",")?u.slice(0,-1):u).split(","):t.select=u;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=u.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}s=void 0;break;case"(":o=u;break;case"=":s?u.length<=2&&(n=u):(n="equals",s=decodeURIComponent(u));break;case"!=":case"<":case"<=":case">":case">=":n=zG[_],s=decodeURIComponent(u);break;case"=*":n="ends_with",s=decodeURIComponent(u);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(u)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${_} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(u)}),s=void 0;break;default:throw new Error(`Unknown operator ${_} in query ${e}`)}c=s?JG:LA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var io,ht,ws,DA,zG,UA,LA,JG,DE,Tl=Te(()=>{io=D(j()),ht=D(ze()),ws=require("ordered-binary"),DA=require("lmdb"),zG={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(UE,"idsForCondition");UA={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(ME,"filterByType");a(Is,"attributeComparator");LA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,JG=/([^&|*=]+)([&|*=]*)/g;a(Sl,"parseQuery");DE=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 s=this.conditions[r];if(s.attribute===t)return s.value}}}});var BE={};qe(BE,{CONTEXT:()=>me,ID_PROPERTY:()=>Ie,IS_COLLECTION:()=>is,RECORD_PROPERTY:()=>ge,Resource:()=>Ot,SAVE_UPDATES_PROPERTY:()=>qA,snake_case:()=>jG});function jG(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function MA(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new vE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function vr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_;if(r?o?(_=i,o=o[me]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[me]||i):_=i:(_=n,c=_[Ie]??_[this.primaryKey]??null):i?o=i[me]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let f of n){if(typeof f=="object"&&f)break;c.push(f)}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)))}else{if(typeof(c=n.url)=="string"){let f=c.indexOf("?");if(f>-1){let h=this.parseQuery(c.slice(f+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,f)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let l;if(u?.ensureLoaded!=null||u?.async?(l=Object.assign({},t),u?.ensureLoaded!=null&&(l.ensureLoaded=u.ensureLoaded),u.async&&(l.async=u.async)):l=t,o.transaction){let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)}else return Ge(o,()=>{let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)},l);function d(f){if(t.type==="read"&&(f[qA]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,u,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,_,o):f.allowUpdate(o.user,_,o):t.type==="create"?f.allowCreate(o.user,_,o):f.allowDelete(o.user,u,o);if(E?.then)return E.then(h=>{if(!h)throw new gl(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new gl(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function Br(e,t){let r=new HA.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function PE(e){let t=e[ge];if(t){let r=e[Ht];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function PA(e){if(typeof e=="string")return t=>PE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=PE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=PE(r);for(let i of e){let o=n(i);o===void 0&&t&&(o=null),s[i]=o}return s}}else throw new Error("Invalid select argument type "+typeof e)}var vA,BA,HA,me,Ie,is,qA,ge,XG,Ot,gl,vE,ns=Te(()=>{vA=require("crypto");qa();BA=require("../../index"),HA=D(j());ml();Ei();Tl();me=Symbol.for("context"),Ie=Symbol.for("primary-key"),is=Symbol("is-collection"),qA=Symbol("save-updates"),ge=Symbol("stored-record"),XG={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Ot=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ie]=t;let s=r?.[me];this[me]=s!==void 0?s:r||null}static get=vr(function(t,r,s,n){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){let _=PA(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=vr(function(t,r,s,n){if(Array.isArray(n)&&t[is]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):Br(t,"put")},{hasContent:!0,type:"update"});static delete=vr(function(t,r,s,n){return t.delete?t.delete(r):Br(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,vA.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Ge(s,()=>{let i=new this(n,s),o=i.put?i.put(r):Br(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=vr(function(t,r,s,n){return t.invalidate?t.invalidate(r):Br(t,"delete")},{hasContent:!1,type:"update"});static post=vr(function(t,r,s,n){return t[Ie]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=vr(function(t,r,s,n){return t.connect?t.connect(n,r):Br(t,"connect")},{hasContent:!0,type:"read"});static subscribe=vr(function(t,r,s,n){return t.subscribe?t.subscribe(r):Br(t,"subscribe")},{type:"read"});static publish=vr(function(t,r,s,n){return t[Ie]!=null&&t.update?.(),t.publish?t.publish(n,r):Br(t,"publish")},{hasContent:!0,type:"create"});static search=vr(function(t,r,s,n){let i=t.search?t.search(r):Br(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=PA(o);return i.map(c)}return i},{type:"read"});static query=vr(function(t,r,s,n){return t.search?t.search(n,r):Br(t,"search")},{hasContent:!0,type:"read"});static copy=vr(function(t,r,s,n){return t.copy?t.copy(n,r):Br(t,"copy")},{type:"create"});static move=vr(function(t,r,s,n){return t.move?t.move(n,r):Br(t,"move")},{type:"delete"});post(t){if(this[is])return this.constructor.create(this[Ie],t,this[me]);Br(this,"post")}static isCollection(t){return t?.[is]}static coerceId(t){return t}static parseQuery(t){return Sl(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&XG[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:MA(t,this)}}return MA(t,this)}static getResource(t,r,s){let n,i=r[me],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;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(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[Ie]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Ie],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[is]=!0),n}subscribe(t){return new rs}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new rs}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[Ie]}getContext(){return this[me]}};Ot.prototype[me]=null;(0,BA._assignPackageExport)("Resource",Ot);a(jG,"snake_case");gl=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(MA,"pathToId");vE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(vr,"transactional");a(Br,"missingMethod");a(PE,"selectFromObject");a(PA,"transformForSelect")});var hi={};qe(hi,{server:()=>ut});var FA,ut,hr=Te(()=>{FA=require("../../index"),ut={};(0,FA._assignPackageExport)("server",ut)});var qE={};qe(qE,{loadGQLSchema:()=>tx,start:()=>HE,startOnMainThread:()=>ex});function HE({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let Q=function(F){if(F.kind==="NonNullType"){let B=Q(F.type);return B.nullable=!1,B}if(F.kind==="ListType")return{type:"array",elements:Q(F.type)};let K={type:F.name?.value};return Object.defineProperty(K,"location",{value:F.loc.startToken}),K};a(Q,"getProperty");let R=S.name.value,b=[],O={table:null,database:null,properties:b};f.set(R,O);for(let F of S.directives){if(F.name.value==="table"){for(let w of F.arguments)O[w.name.value]=w.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=R),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,E.push(O)}if(F.name.value==="sealed"&&(O.sealed=!0),F.name.value==="export"){O.export=!0;for(let w of F.arguments)w.name.value==="name"&&(O.export={name:w.value.value})}}let Y=!1;for(let F of S.fields){let w=Q(F.type);w.name=F.name.value,b.push(w);for(let K of F.directives)if(K.name.value==="primaryKey")Y?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,Y=!0);else if(K.name.value==="indexed")w.indexed=!0;else if(K.name.value==="createdTime")w.assignCreatedTime=!0;else if(K.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(K.name.value==="expiresAt")w.expiresAt=!0;else if(K.name.value==="allow"){let B=w.authorizedRoles=[];for(let x of K.arguments)x.name.value==="role"&&B.push(x.value.value)}}O.typeName=R,R==="Query"&&(h=O)}function p(S){let R=f.get(S.type);R?S.properties=R.properties:S.type==="array"?p(S.elements):ZG.includes(S.type)||(0,GA.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let S of f.values())for(let R of S.properties)p(R);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Rl.dirname)(s),S.tableClass):i.set((0,Rl.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass));if(h)for(let S of h.properties){let R=f.get(S.type);if(!R)throw new Error(`${S.type} was not found as a Query export`);i.set((0,Rl.dirname)(s)+"/"+S.name,R.tableClass)}}}var Rl,GA,ZG,ex,tx,xA=Te(()=>{Rl=require("path");fe();GA=D(Je()),ZG=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(HE,"start");ex=HE,tx=HE({ensureTable:et}).handleFile});async function Al(e){return rx?(Ga||(Ga=sx(ix)),(await(await Ga).import(e)).namespace):import(e)}async function sx(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ga=new Compartment({console,Math,Date,fetch:nx,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,VA.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:Ot,tables:mr,databases:xe})}};let s=await(0,kA.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Ga}function nx(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 ix(){return{Resource:Ot,tables:mr}}var kA,VA,rx,Ga,FE=Te(()=>{ns();fe();kA=require("fs/promises"),VA=require("path"),rx=!1;a(Al,"secureImport");a(sx,"getCompartment");a(nx,"secureOnlyFetch");a(ix,"getGlobalVars")});var xE={};qe(xE,{handleFile:()=>ox});async function ox(e,t,r,s){let n=new Map,i=(0,$A.pathToFileURL)(r).toString(),o=await Al(i);u(o.default)&&s.set((0,GE.dirname)(t),o.default),c(o,(0,GE.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.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"),n}var $A,GE,YA=Te(()=>{$A=require("url");FE();GE=require("path");a(ox,"handleFile")});var VE={};qe(VE,{start:()=>ax});function ax({resources:e}){e.set("login",kE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var kE,KA=Te(()=>{ns();a(ax,"start");kE=class extends Ot{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var YE=T((Wne,zA)=>{"use strict";var{Readable:cx}=require("stream"),ux=1e4;zA.exports={streamAsJSON(e){return new $E({value:e})}};var $E=class extends cx{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],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(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 n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),WA)}catch(n){yield WA(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);QA(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>ux?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 QA(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))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 s of this.activeIterators)t?s.throw(t):s.return();r()}};function WA(e){return console.error(e),JSON.stringify(e.toString())}a(WA,"handleError");function QA(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(QA,"when")});var cO=T((Jne,aO)=>{"use strict";var KE=require("recursive-iterator"),lx=require("alasql"),WE=require("clone"),JA=$(),{handleHDBError:XA,hdb_errors:_x}=j(),{HDB_ERROR_MSGS:jA,HTTP_STATUS_CODES:ZA}=_x,{getDatabases:dx}=(fe(),Z(Ce)),fx=["DISTINCT_ARRAY"],eO=Symbol("validateTables"),QE=Symbol("validateTable"),zne=Symbol("getAllColumns"),tO=Symbol("validateAllColumns"),Ol=Symbol("findColumn"),rO=Symbol("validateOrderBy"),xa=Symbol("validateSegment"),zE=Symbol("validateColumn"),sO=Symbol("setColumnsForTable"),nO=Symbol("checkColumnsForAsterisk"),iO=Symbol("validateGroupBy"),oO=Symbol("hasColumns"),JE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[eO](),this[nO](),this[tO]()}[eO](){if(this[oO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[QE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[QE](t.table)})}}[oO](){let t=!1,r=new KE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[QE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=dx();if(!r[t.databaseid])throw XA(new Error,jA.SCHEMA_NOT_FOUND(t.databaseid),ZA.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw XA(new Error,jA.TABLE_NOT_FOUND(t.databaseid,t.tableid),ZA.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=WE(n);i.table=WE(t),this.attributes.push(i)})}[Ol](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)}[nO](){let t=new KE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[sO](r.tableid)}[sO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new lx.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[tO](){this[xa](this.statement.columns,!1),this[xa](this.statement.joins,!1),this[xa](this.statement.where,!1),this[iO](this.statement.group,!1),this[xa](this.statement.order,!0)}[xa](t,r){if(!t)return;let s=new KE(t),n=[];for(let{node:i,path:o}of s)!JA.isEmpty(i)&&!JA.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[rO](i):n.push(this[zE](i)));return n}[iO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&fx.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=WE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Ol](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[Ol](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.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`}[rO](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[zE](t)}[zE](t){let r=this[Ol](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};aO.exports=JE});var lO=T((jne,uO)=>{"use strict";var XE=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")}};uO.exports=XE});var dO=T((eie,_O)=>{"use strict";var jE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};_O.exports=jE});var NO={};qe(NO,{AUDIT_STORE_OPTIONS:()=>AO,createAuditEntry:()=>yl,openAuditStore:()=>bl,readAuditEntry:()=>pr,setAuditRetention:()=>Ex,transactionKeyEncoder:()=>RO});function bl(e){let t=e.auditStore=e.openDB(pO.AUDIT_STORE_NAME,AO);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,TO.getWorkerIndex)()===0&&e.on("aftercommit",()=>{ka||(ka=setTimeout(()=>{if(ka=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-ZE})){if((n[0]&15)===th){let i=pr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},ZE/10).unref())}),t}function Ex(e){clearTimeout(ka),ka=null,ZE=e}function yl(e,t,r,s,n,i,o){let c=OO[i],u=1;s&&(s>1?oo.setFloat64(0,s):Hr.set(nh),u=9),f(0),f(t),d(r),oo.setFloat64(u,e),u+=8,n?d(n):Hr[u++]=0,Hr[s?8:0]=c;let l=Hr.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,ao.writeKey)(E,Hr,u);let p=u-h-1;p>127?p>16383?(sh.error("Key or username was too large for audit entry",E),u=h+1,Hr[h]=0):(Hr.copyWithin(h+2,h+1,u),oo.setUint16(h,p|32768),u++):Hr[h]=p}function f(E){E<128?Hr[u++]=E:E<16384?(oo.setUint16(u,E|32768),u+=2):E<1056964608?(oo.setUint32(u,E|3221225472),u+=4):(Hr[u]=255,oo.setUint32(u+1,E),u+=5)}}function pr(e){try{let t=e.dataView||(e.dataView=new rh(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=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:OO[s&7],tableId:i,get recordId(){return mO(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?mO(e,l,d):void 0},getValue(f){return s&eh?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return sh.error("Reading audit entry error",e),{}}}function mO(e,t,r){let s=e.subarray(t,r);return(0,ao.readKey)(s,0,r-t)}var ao,Nl,pO,SO,TO,gO,sh,Hr,oo,RO,AO,ZE,ka,eh,fO,th,EO,hO,OO,rh,co=Te(()=>{ao=require("ordered-binary"),Nl=D(X()),pO=D(ze()),SO=D(y()),TO=D(Je()),gO=D($());$a();sh=D(G());(0,Nl.initSync)();Hr=Buffer.alloc(1024),oo=new DataView(Hr.buffer,Hr.byteOffset,1024),RO={writeKey(e,t,r){return e===Va?(t.set(Va,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,ao.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,ao.readKey)(e,t,r)}},AO={encoding:"binary",keyEncoder:RO},ZE=(0,gO.convertToMS)((0,Nl.get)(SO.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,ka=null;a(bl,"openAuditStore");a(Ex,"setAuditRetention");eh=16,fO=1,th=2,EO=3,hO=4,OO={put:fO|eh,[fO]:"put",delete:th,[th]:"delete",message:EO|eh,[EO]:"message",invalidate:hO,[hO]:"invalidate"};a(yl,"createAuditEntry");a(pr,"readAuditEntry");rh=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(mO,"readKeySafely")});var LO={};qe(LO,{HAS_EXPIRATION:()=>lh,LAST_TIMESTAMP_PLACEHOLDER:()=>Va,LOCAL_TIMESTAMP:()=>hx,METADATA:()=>Ya,NO_TIMESTAMP:()=>ih,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>nh,RecordEncoder:()=>uh,TIMESTAMP_ASSIGN_LAST:()=>px,TIMESTAMP_ASSIGN_NEW:()=>IO,TIMESTAMP_ASSIGN_PREVIOUS:()=>wO,TIMESTAMP_PLACEHOLDER:()=>Il,TIMESTAMP_RECORD_PREVIOUS:()=>oh,getUpdateRecord:()=>_h,handleLocalTimeForGets:()=>Ll});function CO(){return lo[0]=lo[0]^64,mx.getFloat64(0)}function Ll(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[Ya];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[Ya]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.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[Ya];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=Sx.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(lo,0,d),l.timestampBytes=null,l.localTime=CO())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,mi.push(new WeakRef(this))),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();(!_||_===this||_.isDone||_.isCommitted)&&mi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function _h(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?uo=i?.localTime?oh|wO:ih:uo=u?i?.localTime?oh|16384:IO|16384:ih,l>0&&(c|=lh),Cl=c,ch=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:uo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(e.cache&&S.result!==!1){let R=e.cache.get(s);R&&(c>=0?R.metadataFlags=c:R.metadataFlags>=0&&(R.metadataFlags=void 0),(l||!R.expiresAt)&&(R.expiresAt=l),h.instructedWrite&&(R.localTime||(R.localTime=1),R.timestampBytes=ah,R.timestampOffset=ah.start||0))}if(u){let R=_?.user?.username;if(E&&(wl=e.encoder.encode(E)),f&&i?.localTime){let b=i?.localTime,O=r.get(b);if(O){let Y=pr(O).previousLocalTime;return r.put(b,yl(o,t,s,Y,R,d,wl),{ifVersion:p}),S}}r.put(Va,yl(o,t,s,i?.localTime?1:0,R,d,wl),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var bO,yO,Il,Va,nh,hx,Ya,lo,mx,ih,IO,px,wO,oh,lh,ah,wl,uo,Cl,ch,uh,Sx,mi,$a=Te(()=>{bO=require("msgpackr");co();yO=D(G()),Il=new Uint8Array([1,1,1,1,4,64,0,0]),Va=new Uint8Array([1,1,1,1,1,0,0,0]),nh=new Uint8Array([1,1,1,1,3,64,0,0]),hx=Symbol("local-timestamp"),Ya=Symbol("metadata"),lo=new Uint8Array(8),mx=new DataView(lo.buffer,0,8),ih=0,IO=0,px=1,wO=3,oh=4,lh=16,uo=0,Cl=-1,ch=0,uh=class extends bO.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(uo||Cl>=0){let i=0,o=uo;o&&(i+=8,uo=0);let c=Cl,u=ch;c>=0&&(i+=2,Cl=-1,u&&(i+=8,ch=0));let _=ah=r.call(this,s,n|2048|i);wl=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(Il[4]=o,Il[5]=o>>8,_.set(Il,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,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(lo,0,c),c+=8;else for(let d=0;d<8;d++)lo[d]=t[c++];u=CO(),i=t[c]}let _;i<32&&(o=i,c+=2,o&lh&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[Ya]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(CO,"getTimestamp");Sx=Map.prototype.get;a(Ll,"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&&yO.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 Dl=T((oie,DO)=>{"use strict";var fh=X(),Eh=y(),{RecordEncoder:Tx}=($a(),Z(LO));fh.initSync();var gx=fh.get(Eh.CONFIG_PARAMS.STORAGE_COMPRESSION),Rx=fh.get(Eh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Ax=Eh.UPDATES_PROPERTY,dh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=gx&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Rx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:Tx},this.alwaysLazyProperty=s=>s===Ax)}};DO.exports=dh});var Ml=T((cie,MO)=>{"use strict";var _o=X(),Ka=y();_o.initSync();var Ox=_o.get(Ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||_o.get(Ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||_o.get(Ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",UO=_o.get(Ka.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),Nx=_o.get(Ka.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Ul=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=Ox,this.noFSAccess=!0,UO!==void 0&&(this.overlappingSync=UO),this.noReadAhead=Nx}};MO.exports=Ul;Ul.MAX_DBS=1e4});var Ue=T((lie,VO)=>{"use strict";var mh=require("lmdb"),os=require("fs-extra"),Sr=require("path"),Pl=Er(),BO=G(),Qt=fr().LMDB_ERRORS_ENUM,vl=dO(),ph=Dl(),HO=Ml(),Bn=ze(),PO=y(),{table:bx,resetDatabases:yx}=(fe(),Z(Ce)),vO=X(),as=Bn.INTERNAL_DBIS_NAME,qO=Bn.DBI_DEFINITION_NAME,Ix="data.mdb",wx="lock.mdb",Wa=".mdb",Cx="-lock",hh=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=qr(t,r),this.key_type=this.dbi[Bn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Bn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new mh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Bl(e,t){if(e===void 0)throw new Error(Qt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Qt.ENV_NAME_REQUIRED)}a(Bl,"pathEnvNameValidation");async function Sh(e,t,r=!0){try{await os.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Qt.INVALID_BASE_PATH):s}try{let s=Sr.join(e,t+Wa);return await os.access(s,os.constants.R_OK|os.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await os.access(Sr.join(e,t,Ix),os.constants.R_OK|os.constants.F_OK),Sr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Qt.INVALID_ENVIRONMENT)}else throw new Error(Qt.INVALID_ENVIRONMENT);throw s}}a(Sh,"validateEnvironmentPath");function Hl(e,t){if(Pl.validateEnv(e),t===void 0)throw new Error(Qt.DBI_NAME_REQUIRED)}a(Hl,"validateEnvDBIName");async function Lx(e,t,r=!1,s=!1){Bl(e,t);let n=Sr.basename(e);t=t.toString();let i=vO.get(PO.CONFIG_PARAMS.DATABASES);i||vO.setProperty(PO.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await Sh(e,t,s),FO(e,t,r)}catch(o){if(o.message===Qt.INVALID_ENVIRONMENT){let c=Sr.join(e,t);await os.mkdirp(s?c:e);let u=new HO(s?c:c+Wa,!1),_=mh.open(u);_.dbis=Object.create(null);let l=new ph(!1);_.openDB(as,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Th(e,t,r);return _[Bn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(Lx,"createEnvironment");async function Dx(e,t,r,s=!0){Bl(e,t),t=t.toString();let n=Sr.join(e,t);return bx({table:t,database:Sr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(Dx,"copyEnvironment");async function FO(e,t,r=!1){Bl(e,t),t=t.toString();let s=Th(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await Sh(e,t),i=Sr.join(e,t+Wa),o=n!=i,c=new HO(n,o),u=mh.open(c);u.dbis=Object.create(null);let _=xO(u);for(let l=0;l<_.length;l++)qr(u,_[l]);return u[Bn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(FO,"openEnvironment");async function Ux(e,t,r=!1){Bl(e,t),t=t.toString();let s=Sr.join(e,t+Wa),n=await Sh(e,t);if(global.lmdb_map!==void 0){let i=Th(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await GO(o),delete global.lmdb_map[i]}}await os.remove(n),await os.remove(n===s?n+Cx:Sr.join(Sr.dirname(n),wx))}a(Ux,"deleteEnvironment");async function GO(e){Pl.validateEnv(e);let t=e[Bn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(GO,"closeEnvironment");function Th(e,t,r=!1){let n=`${Sr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Th,"getCachedEnvironmentName");function Mx(e){Pl.validateEnv(e);let t=Object.create(null),r=qr(e,as);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==as)try{t[s]=Object.assign(new vl,n)}catch{BO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(Mx,"listDBIDefinitions");function xO(e){Pl.validateEnv(e);let t=[],r=qr(e,as);for(let{key:s}of r.getRange({start:!1}))s!==as&&t.push(s);return t}a(xO,"listDBIs");function Px(e,t){let s=qr(e,as).getEntry(t),n=new vl;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{BO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(Px,"getDBIDefinition");function kO(e,t,r,s=!r){if(Hl(e,t),t=t.toString(),t===as)throw new Error(Qt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return qr(e,t)}catch(n){if(n.message===Qt.DBI_DOES_NOT_EXIST){let i=new ph(r,s===!0),o=e.openDB(t,i),c=new vl(r===!0,s);return o[qO]=c,qr(e,as).putSync(t,c),e.dbis[t]=o,o}throw n}}a(kO,"createDBI");function qr(e,t){if(Hl(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==as?r=Px(e,t):r=new vl,r===void 0)throw new Error(Qt.DBI_DOES_NOT_EXIST);let s;try{let n=new ph(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(Qt.DBI_DOES_NOT_EXIST):n}return s[qO]=r,e.dbis[t]=s,s}a(qr,"openDBI");function vx(e,t){Hl(e,t),t=t.toString();let r=qr(e,t),s=r.getStats();return r[Bn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(vx,"statDBI");async function Bx(e,t){try{let r=Sr.join(e,t+Wa);return(await os.stat(r)).size}catch{throw new Error(Qt.INVALID_ENVIRONMENT)}}a(Bx,"environmentDataSize");function Hx(e,t){if(Hl(e,t),t=t.toString(),t===as)throw new Error(Qt.CANNOT_DROP_INTERNAL_DBIS_NAME);qr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],qr(e,as).removeSync(t)}a(Hx,"dropDBI");function qx(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{qr(e,i)}catch(o){if(o.message===Qt.DBI_DOES_NOT_EXIST)kO(e,i,i!==t,i===t),s=!0;else throw o}}s&&yx()}a(qx,"initializeDBIs");VO.exports={openDBI:qr,openEnvironment:FO,createEnvironment:Lx,listDBIs:xO,listDBIDefinitions:Mx,createDBI:kO,dropDBI:Hx,statDBI:vx,deleteEnvironment:Ux,initializeDBIs:qx,TransactionCursor:hh,environmentDataSize:Bx,copyEnvironment:Dx,closeEnvironment:GO}});var YO=T((die,$O)=>{"use strict";var gh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};$O.exports=gh});var WO=T((Eie,KO)=>{"use strict";var Rh=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};KO.exports=Rh});var zO=T((mie,QO)=>{"use strict";var Ah=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};QO.exports=Ah});var fo=T((Rie,jO)=>{"use strict";var Fx=Ue(),Gx=YO(),xx=WO(),kx=zO(),Cs=Er(),Qa=fr().LMDB_ERRORS_ENUM,Vx=ze(),tn=y(),$x=$(),Yx=require("uuid"),Sie=require("lmdb"),{handleHDBError:Kx,hdb_errors:Wx}=j(),{OVERFLOW_MARKER:Tie,MAX_SEARCH_KEY_LENGTH:gie}=Vx,JO=X();JO.initSync();var ql=JO.get(tn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Oh=tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,pi=tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Qx(e,t,r,s,n=Cs.getNextMonotonicTime()){Ih(e,t,r,s),Nh(e,t,r);let i=new Gx,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];XO(_,!0,n);let l=zx(e,t,r,_),d=_[t];o.push(l),c.push(d)}return bh(o,c,s,i,n)}a(Qx,"insertRecords");function zx(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][tn.FUNC_VAL],s[o]=c)}let u=Cs.getIndexedValues(c),_=e.dbis[o];if(u){ql&&_.prefetch(u.map(l=>({key:l,value:n})),Fl);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}ql&&e.dbis[t].prefetch([n],Fl),e.dbis[t].put(n,s,s[pi])})}a(zx,"insertRecord");function Jx(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Jx,"removeSkippedRecords");function XO(e,t,r){let s=r>0;(s||!Number.isInteger(e[pi]))&&(e[pi]=r||(r=Cs.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Oh]))&&(e[Oh]=r||Cs.getNextMonotonicTime()):delete e[Oh]}a(XO,"setTimestamps");function Nh(e,t,r){r.indexOf(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Fx.initializeDBIs(e,t,r)}a(Nh,"initializeTransaction");async function Xx(e,t,r,s,n=Cs.getNextMonotonicTime()){Ih(e,t,r,s),Nh(e,t,r);let i=new xx,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=yh(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return bh(c,u,s,i,n,o)}a(Xx,"updateRecords");async function jx(e,t,r,s,n=Cs.getNextMonotonicTime()){try{Ih(e,t,r,s)}catch(u){throw Kx(u,u.message,Wx.HTTP_STATUS_CODES.BAD_REQUEST)}Nh(e,t,r);let i=new kx,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;$x.isEmpty(_[t])?(l=Yx.v4(),_[t]=l):l=_[t];let d=yh(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return bh(o,c,s,i,n)}a(jx,"upsertRecords");async function bh(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Cs.getNextMonotonicTime(),Jx(r,i),s}a(bh,"finalizeWrite");function yh(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(XO(r,!l,o),Number.isInteger(r[pi])&&_[pi]>r[pi])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let R=_[h];if(typeof p=="function"){let O=p([[_]]);Array.isArray(O)&&(p=O[0][tn.FUNC_VAL],r[h]=p)}if(p===R)continue;let b=Cs.getIndexedValues(R);if(b){ql&&S.prefetch(b.map(O=>({key:O,value:s})),Fl);for(let O=0,Y=b.length;O<Y;O++)S.remove(b[O],s)}if(b=Cs.getIndexedValues(p),b){ql&&S.prefetch(b.map(O=>({key:O,value:s})),Fl);for(let O=0,Y=b.length;O<Y;O++)S.put(b[O],s)}}let E=Object.assign({},_,r);c.put(s,E,E[pi])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:yh(e,t,r,s,n,i,o))}a(yh,"updateUpsertRecord");function Zx(e,t,r){if(Cs.validateEnv(e),t===void 0)throw new Error(Qa.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Qa.WRITE_ATTRIBUTES_REQUIRED):new Error(Qa.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Zx,"validateBasic");function Ih(e,t,r,s){if(Zx(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Qa.RECORDS_REQUIRED):new Error(Qa.RECORDS_MUST_BE_ARRAY)}a(Ih,"validateWrite");function Fl(){}a(Fl,"noop");jO.exports={insertRecords:Qx,updateRecords:Xx,upsertRecords:jx}});var Si=T((Oie,ek)=>{ek.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Ls=T((Nie,tN)=>{"use strict";var eN=$(),ZO=y(),Eo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,rn=require("joi"),Hn={schema_format:{pattern:Eo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},tk=rn.alternatives(rn.string().min(1).max(Hn.schema_length.maximum).pattern(Eo).messages({"string.pattern.base":"{:#label} "+Hn.schema_format.message}),rn.number()).required(),rk=rn.alternatives(rn.string().min(1).max(Hn.schema_length.maximum).pattern(Eo).messages({"string.pattern.base":"{:#label} "+Hn.schema_format.message}),rn.number()),sk=rn.alternatives(rn.string().min(1).max(Hn.schema_length.maximum).pattern(Eo).messages({"string.pattern.base":"{:#label} "+Hn.schema_format.message}),rn.number()).required();function nk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Hn.schema_length.maximum?`'${e}' maximum of 250 characters`:Eo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(nk,"checkValidTable");function ik(e,t){return eN.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(ik,"validateSchemaExists");function ok(e,t){let r=t.state.ancestors[0].schema;return eN.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(ok,"validateTableExists");function ak(e,t){return e.toLowerCase()===ZO.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${ZO.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(ak,"validateSchemaName");tN.exports={common_validators:Hn,schema_regex:Eo,hdb_schema_table:tk,validateSchemaExists:ik,validateTableExists:ok,validateSchemaName:ak,checkValidTable:nk,hdb_database:rk,hdb_table:sk}});var ke=T((yie,rN)=>{"use strict";var zt=require("validate.js");zt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||zt.validators.type.checks[t](e)?null:` must be a '${t}' value`};zt.validators.type.checks={Object:function(e){return zt.isObject(e)&&!zt.isArray(e)},Array:zt.isArray,Integer:zt.isInteger,Number:zt.isNumber,String:zt.isString,Date:zt.isDate,Boolean:function(e){return typeof e=="boolean"}};zt.validators.hasValidFileExt=function(e,t){return zt.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};rN.exports={validateObject:ck,validateObjectAsync:uk,validateBySchema:lk};function ck(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=zt(e,t,{format:"flat"});return r?new Error(r):null}a(ck,"validateObject");async function uk(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await zt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(uk,"validateObjectAsync");function lk(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(lk,"validateBySchema")});var Gl=T((wie,sN)=>{var{common_validators:Ds}=Ls(),Ja=ke(),za="is required",tt={database:{presence:!1,format:Ds.schema_format,length:Ds.schema_length},schema:{presence:!1,format:Ds.schema_format,length:Ds.schema_length},table:{presence:!0,format:Ds.schema_format,length:Ds.schema_length},attribute:{presence:!0,format:Ds.schema_format,length:Ds.schema_length},hash_attribute:{presence:!0,format:Ds.schema_format,length:Ds.schema_length}};function Xa(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(Xa,"makeAttributesStrings");function _k(e){return e=Xa(e),tt.table.presence=!1,tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ja.validateObject(e,tt)}a(_k,"schema_object");function dk(e){return e=Xa(e),tt.table.presence={message:za},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ja.validateObject(e,tt)}a(dk,"table_object");function fk(e){return e=Xa(e),tt.table.presence={message:za},tt.attribute.presence=!1,Ja.validateObject(e,tt)}a(fk,"create_table_object");function Ek(e){return e=Xa(e),tt.table.presence={message:za},tt.attribute.presence={message:za},tt.hash_attribute.presence=!1,Ja.validateObject(e,tt)}a(Ek,"attribute_object");function hk(e){return e=Xa(e),tt.table.presence={message:za},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ja.validateObject(e,tt)}a(hk,"describe_table");function mk(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(mk,"validateTableResidence");sN.exports={schema_object:_k,create_table_object:fk,table_object:dk,attribute_object:Ek,describe_table:hk,validateTableResidence:mk}});var iN=T((Lie,nN)=>{"use strict";var pk=require("uuid"),wh=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||pk.v4(),this.schema_table=`${this.schema}.${this.table}`}};nN.exports=wh});var xl=T((Uie,oN)=>{"use strict";var Sk=iN(),Ch=class extends Sk{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};oN.exports=Ch});var cN=T((Pie,aN)=>{"use strict";aN.exports=gk;var Tk="inserted";function gk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Tk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(gk,"returnObject")});var kl=T((Bie,fN)=>{"use strict";var Rk=y(),Lh=Ue(),Ak=fo(),{getSystemSchemaPath:Ok,getSchemaPath:Nk}=ve(),bk=Si(),yk=Gl(),Ik=xl(),wk=cN(),{handleHDBError:uN,hdb_errors:_N}=j(),lN=$(),{HTTP_STATUS_CODES:Ck}=_N,Dh=bk.hdb_attribute,dN=[];for(let e=0;e<Dh.attributes.length;e++)dN.push(Dh.attributes[e].attribute);var Lk="inserted";fN.exports=Dk;async function Dk(e){let t=yk.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,Ck.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=lN.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new Ik(e.schema,e.table,e.attribute,e.id);try{let i=await Lh.openEnvironment(Nk(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}`);Lh.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Lh.openEnvironment(Ok(),Rk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Ak.insertRecords(o,Dh.hash_attribute,dN,[n]);return wk(Lk,c,{records:[n]},u)}catch(i){throw i}}a(Dk,"lmdbCreateAttribute")});var Mh=T((qie,hN)=>{var{hdb_table:Uk,hdb_database:EN}=Ls(),Mk=ke(),Uh=require("joi"),Pk={undefined:"undefined",null:"null"},vk=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||Pk[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),Bk=Uh.object({database:EN,schema:EN,table:Uk,records:Uh.array().items(Uh.object().custom(vk)).required()});hN.exports=function(e){return Mk.validateBySchema(e,Bk)}});var ja=T((xie,pN)=>{"use strict";var sn=$(),mN=G(),Gie=Mh(),{getDatabases:Hk}=(fe(),Z(Ce)),{ClientError:Ti}=j();pN.exports=qk;function qk(e){if(sn.isEmpty(e))throw new Ti("invalid update parameters defined.");if(sn.isEmptyOrZeroLength(e.schema))throw new Ti("invalid schema specified.");if(sn.isEmptyOrZeroLength(e.table))throw new Ti("invalid table specified.");if(!Array.isArray(e.records))throw new Ti("records must be an array");let t=Hk()[e.schema]?.[e.table];if(sn.isEmpty(t))throw new Ti(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&sn.isEmptyOrZeroLength(o[r]))throw mN.error("a valid hash attribute must be provided with update record:",o),new Ti("a valid hash attribute must be provided with update record, check log for more info");if(!sn.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 Ti(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!sn.isEmpty(o[r])&&o[r]!==""&&s.has(sn.autoCast(o[r]))&&(o.skip=!0),s.add(sn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(qk,"insertUpdateValidate")});var Za=T((Vie,SN)=>{"use strict";var Fk=y().OPERATIONS_ENUM,Ph=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=Fk.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};SN.exports=Ph});var sc=T((Kie,TN)=>{"use strict";var Yie=Za(),Vl=y(),Bh=$(),vh=G(),Gk=require("uuid"),{handleHDBError:ec,hdb_errors:xk}=j(),{HDB_ERROR_MSGS:tc,HTTP_STATUS_CODES:rc}=xk;TN.exports=kk;function kk(e,t,r){for(let n=0;n<t.length;n++)Vk(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];$k(i,r,e.operation)}}a(kk,"processRows");function Vk(e){if(Buffer.byteLength(String(e))>Vl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ec(new Error,tc.ATTR_NAME_LENGTH_ERR(e),rc.BAD_REQUEST,void 0,void 0,!0);if(Bh.isEmptyOrZeroLength(e)||Bh.isEmpty(e.trim()))throw ec(new Error,tc.ATTR_NAME_NULLISH_ERR,rc.BAD_REQUEST,void 0,void 0,!0)}a(Vk,"validateAttribute");function $k(e,t,r){if(!e.hasOwnProperty(t)||Bh.isEmptyOrZeroLength(e[t])){if(r===Vl.OPERATIONS_ENUM.INSERT||r===Vl.OPERATIONS_ENUM.UPSERT){e[t]=Gk.v4();return}throw vh.error("Update transaction aborted due to record with no hash value:",e),ec(new Error,tc.RECORD_MISSING_HASH_ERR,rc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Vl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw vh.error(e),ec(new Error,tc.HASH_VAL_LENGTH_ERR,rc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw vh.error(e),ec(new Error,tc.INVALID_FORWARD_SLASH_IN_HASH_ERR,rc.BAD_REQUEST,void 0,void 0,!0)}a($k,"validateHash")});var RN=T((Qie,gN)=>{"use strict";var Hh=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};gN.exports=Hh});var NN=T((Jie,ON)=>{"use strict";var qh=Ue(),Yk=G(),AN=fr().LMDB_ERRORS_ENUM;ON.exports=Kk;async function Kk(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 qh.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==AN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await qh.closeEnvironment(global.lmdb_map[s]),await qh.closeEnvironment(global.lmdb_map[n])}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){Yk.error(t)}}a(Kk,"cleanLMDBMap")});var nn=T((jie,wN)=>{"use strict";var nc=require("crypto"),Wk=X(),{CONFIG_PARAMS:Qk}=y(),yN="aes-256-cbc",zk=32,Jk=16,Fh=64,IN=32,Xk=Fh+IN,bN=new Map;wN.exports={encrypt:jk,decrypt:Zk,createNatsTableStreamName:eV};function jk(e){let t=nc.randomBytes(zk),r=nc.randomBytes(Jk),s=nc.createCipheriv(yN,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(jk,"encrypt");function Zk(e){let t=e.substr(0,Fh),r=e.substr(Fh,IN),s=e.substr(Xk,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=nc.createDecipheriv(yN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Zk,"decrypt");function eV(e,t){let r=Wk.get(Qk.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=bN.get(r);return s||(s=nc.createHash("md5").update(r).digest("hex"),bN.set(r,s)),s}a(eV,"createNatsTableStreamName")});var gi=T((toe,LN)=>{"use strict";var eoe=Fr(),$l=G(),CN=Gl(),tV=nn(),Yl=$(),{handleHDBError:Kl,hdb_errors:rV}=j(),{HDB_ERROR_MSGS:Wl,HTTP_STATUS_CODES:Gh}=rV,sV=X();sV.initSync();var{getDatabases:xh}=(fe(),Z(Ce));LN.exports={describeAll:nV,describeTable:Ql,describeSchema:iV};async function nV(e){try{let t=Yl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=xh(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await Ql({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 Ql({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){$l.error(E)}}let _={};for(let l in c)t||s?(_[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||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return $l.error("Got an error in describeAll"),$l.error(t),Kl(new Error,Wl.DESCRIBE_ALL_ERR)}}a(nV,"describeAll");async function Ql(e,t){Yl.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=CN.describe_table(e);if(i)throw i;let c=xh()[r];if(!c)throw Kl(new Error,Wl.SCHEMA_NOT_FOUND(e.schema),Gh.NOT_FOUND);let u=c[s];if(!u)throw Kl(new Error,Wl.TABLE_NOT_FOUND(e.schema,e.table),Gh.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(n){let f={};n.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=tV.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){$l.warn(`unable to stat table dbi due to ${f}`)}return d}a(Ql,"descTable");async function iV(e){Yl.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 s=e.schema.toString(),i=xh()[s];if(!i)throw Kl(new Error,Wl.SCHEMA_NOT_FOUND(e.schema),Gh.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Yl.isEmpty(u)||u.describe){let _=await Ql({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(iV,"describeSchema")});var qn=T((ioe,vN)=>{var oV=Si(),{callbackify:UN,promisify:aV}=require("util"),{getDatabases:MN}=(fe(),Z(Ce));vN.exports={setSchemaDataToGlobal:DN,getTableSchema:cV,getSystemSchema:uV,setSchemaDataToGlobalAsync:aV(DN)};var PN=gi(),soe=UN(PN.describeAll),noe=UN(PN.describeTable);function DN(e){global.hdb_schema=MN(),e&&e()}a(DN,"setSchemaDataToGlobal");function cV(e,t,r){let s=MN()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(cV,"getTableSchema");function uV(){return oV}a(uV,"getSystemSchema")});var Gr=T((aoe,FN)=>{"use strict";var Jl=Mh(),Nt=$(),lV=require("util"),Xl=cs(),_V=qn(),BN=G(),{handleHDBError:Ri,hdb_errors:dV}=j(),{HTTP_STATUS_CODES:Ai}=dV,fV=lV.promisify(_V.getTableSchema),EV="updated",HN="inserted",qN="upserted";FN.exports={insert:mV,update:pV,upsert:SV,validation:hV,flush:TV};async function hV(e){if(Nt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Nt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Nt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await fV(e.schema,e.table),r=Jl(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Nt.isEmptyOrZeroLength(c[s]))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(!Nt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw BN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Nt.isEmpty(c[s])&&c[s]!==""&&n.has(Nt.autoCast(c[s]))&&(c.skip=!0),n.add(Nt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(hV,"validation");async function mV(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Jl(e);if(t)throw Ri(new Error,t.message,Ai.BAD_REQUEST);Nt.transformReq(e);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ri(new Error,r,Ai.BAD_REQUEST);let s=await Xl.createRecords(e);return zl(HN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(mV,"insertData");async function pV(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Jl(e);if(t)throw Ri(new Error,t.message,Ai.BAD_REQUEST);Nt.transformReq(e);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ri(new Error,r,Ai.BAD_REQUEST);let s=await Xl.updateRecords(e);return Nt.isEmpty(s.existing_rows)?zl(EV,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):zl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(pV,"updateData");async function SV(e){if(e.operation!=="upsert")throw Ri(new Error,"invalid operation, must be upsert",Ai.INTERNAL_SERVER_ERROR);let t=Jl(e);if(t)throw Ri(new Error,t.message,Ai.BAD_REQUEST);Nt.transformReq(e);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ri(new Error,r,Ai.BAD_REQUEST);let s=await Xl.upsertRecords(e);return zl(qN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(SV,"upsertData");function zl(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===HN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===qN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(zl,"returnObject");function TV(e){return Nt.transformReq(e),Xl.flush(e.schema,e.table)}a(TV,"flush")});var Vh=T((uoe,kN)=>{var gV=ke(),kh=require("joi"),{hdb_table:RV,hdb_database:GN}=Ls(),xN={schema:GN,database:GN,table:RV},AV={date:kh.date().iso().required()},OV={timestamp:kh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};kN.exports=function(e,t){let r=t==="timestamp"?{...xN,...OV}:{...xN,...AV},s=kh.object(r);return gV.validateBySchema(e,s)}});var YN=T((loe,$N)=>{var NV=ke(),$h=require("joi"),{hdb_table:bV,hdb_database:VN}=Ls(),yV=$h.object({schema:VN,database:VN,table:bV,hash_values:$h.array().required(),ids:$h.array()});$N.exports=function(e){return NV.validateBySchema(e,yV)}});var WN=T((_oe,KN)=>{"use strict";var Yh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},Kh=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},Wh=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};KN.exports={InsertObject:Yh,NoSQLSeachObject:Kh,DeleteResponseObject:Wh}});var bi=T((foe,jN)=>{"use strict";var zN=Vh(),IV=YN(),Oi=$(),QN=require("moment"),JN=G(),{promisify:wV,callbackify:CV}=require("util"),Ni=y(),LV=qn(),Qh=wV(LV.getTableSchema),zh=cs(),{DeleteResponseObject:DV}=WN(),{handleHDBError:Fn,hdb_errors:UV}=j(),{HDB_ERROR_MSGS:jl,HTTP_STATUS_CODES:Gn}=UV,MV="records successfully deleted",PV=CV(XN);jN.exports={delete:PV,deleteRecord:XN,deleteFilesBefore:vV,deleteAuditLogsBefore:BV};async function vV(e){let t=zN(e,"date");if(t)throw Fn(t,t.message,Gn.BAD_REQUEST,void 0,void 0,!0);if(Oi.transformReq(e),!QN(e.date,QN.ISO_8601).isValid())throw Fn(new Error,jl.INVALID_DATE,Gn.BAD_REQUEST,Ni.LOG_LEVELS.ERROR,jl.INVALID_DATE,!0);let s=Oi.checkSchemaTableExist(e.schema,e.table);if(s)throw Fn(new Error,s,Gn.NOT_FOUND,Ni.LOG_LEVELS.ERROR,s,!0);let n=await zh.deleteRecordsBefore(e);if(await Qh(e.schema,e.table),JN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(vV,"deleteFilesBefore");async function BV(e){let t=zN(e,"timestamp");if(t)throw Fn(t,t.message,Gn.BAD_REQUEST,void 0,void 0,!0);if(Oi.transformReq(e),isNaN(e.timestamp))throw Fn(new Error,jl.INVALID_VALUE("Timestamp"),Gn.BAD_REQUEST,Ni.LOG_LEVELS.ERROR,jl.INVALID_VALUE("Timestamp"),!0);let r=Oi.checkSchemaTableExist(e.schema,e.table);if(r)throw Fn(new Error,r,Gn.NOT_FOUND,Ni.LOG_LEVELS.ERROR,r,!0);let s=await zh.deleteAuditLogsBefore(e);return await Qh(e.schema,e.table),JN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(BV,"deleteAuditLogsBefore");async function XN(e){e.ids&&(e.hash_values=e.ids);let t=IV(e);if(t)throw Fn(t,t.message,Gn.BAD_REQUEST,void 0,void 0,!0);Oi.transformReq(e);let r=Oi.checkSchemaTableExist(e.schema,e.table);if(r)throw Fn(new Error,r,Gn.NOT_FOUND,Ni.LOG_LEVELS.ERROR,r,!0);try{await Qh(e.schema,e.table);let s=await zh.deleteRecords(e);return Oi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${MV}`),s}catch(s){if(s.message===Ni.SEARCH_NOT_FOUND_MESSAGE){let n=new DV;return n.message=Ni.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(XN,"deleteRecord")});var Zl=T((hoe,tb)=>{var HV=require("crypto"),ZN=9;function qV(e){let t=GV(ZN),r=eb(e+t);return t+r}a(qV,"createHash");function FV(e,t){let r=e.substr(0,ZN),s=r+eb(t+r);return e===s}a(FV,"validateHash");function GV(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(GV,"generateSalt");function eb(e){return HV.createHash("md5").update(e).digest("hex")}a(eb,"md5");tb.exports={hash:qV,validate:FV}});var sb=T((poe,rb)=>{var Jh=ke(),qt={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 xV(e){return qt.password.presence=!0,qt.username.presence=!0,qt.role.presence=!0,qt.active.presence=!0,Jh.validateObject(e,qt)}a(xV,"addUserValidation");function kV(e){return qt.password.presence=!1,qt.username.presence=!0,qt.role.presence=!1,qt.active.presence=!1,Jh.validateObject(e,qt)}a(kV,"alterUserValidation");function VV(e){return qt.password.presence=!1,qt.username.presence=!0,qt.role.presence=!1,qt.active.presence=!1,Jh.validateObject(e,qt)}a(VV,"dropUserValidation");rb.exports={addUserValidation:xV,alterUserValidation:kV,dropUserValidation:VV}});var Ve=T((goe,ib)=>{"use strict";var{platform:Toe}=require("os"),$V="nats-server.zip",Xh="nats-server",YV=process.platform==="win32"?`${Xh}.exe`:Xh,jh="HDB",KV=/^[^\s.,*>]+$/,nb="__request__",WV=a(e=>`${e}.${nb}`,"REQUEST_SUBJECT"),QV={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},zV={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},JV={HUB:"hub.pid",LEAF:"leaf.pid"},XV={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},jV={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:jh,deliver_subject:"__HDB__.WORKQUEUE"},ZV={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:jh,deliver_subject:"HDB.SCHEMAQUEUE"},e$={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:jh,deliver_subject:"HDB.USERQUEUE"},t$={SUCCESS:"success",ERROR:"error"},r$={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},s$={TXN:"txn",MSGID:"msgid"},ho={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},n$={[ho.ERR]:1,[ho.WRN]:2,[ho.INF]:3,[ho.DBG]:4,[ho.TRC]:5},i$={debug:"-D",trace:"-DVV"};ib.exports={NATS_SERVER_ZIP:$V,NATS_SERVER_NAME:Xh,NATS_BINARY_NAME:YV,PID_FILES:JV,NATS_CONFIG_FILES:zV,SERVER_SUFFIX:XV,WORK_QUEUE_CONSUMER_NAMES:jV,SCHEMA_QUEUE_CONSUMER_NAMES:ZV,USER_QUEUE_CONSUMER_NAMES:e$,NATS_TERM_CONSTRAINTS_RX:KV,REQUEST_SUFFIX:nb,UPDATE_REMOTE_RESPONSE_STATUSES:t$,CLUSTER_STATUS_STATUSES:r$,REQUEST_SUBJECT:WV,SUBJECT_PREFIXES:s$,MSG_HEADERS:QV,LOG_LEVELS:ho,LOG_LEVEL_FLAGS:i$,LOG_LEVEL_HIERARCHY:n$}});var ab=T((Aoe,ob)=>{"use strict";var o$={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,String.fromCharCode(13,10)),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,String.fromCharCode(13,10))},a$="certificate.pem",c$="privateKey.pem",u$="ca.pem";ob.exports={CERTIFICATE_VALUES:o$,CERTIFICATE_PEM_NAME:a$,PRIVATEKEY_PEM_NAME:c$,CA_PEM_NAME:u$}});var em=T((Noe,db)=>{"use strict";var _b=require("fs-extra"),ue=require("joi"),l$=require("os"),{boolean:we,string:Us,number:bt,array:Zh}=ue.types(),{totalmem:cb}=require("os"),mo=require("path"),_$=G(),t_=$(),Ooe=ab(),ub=y(),d$=ke(),lb="log",f$="components",E$="Invalid logging.rotation.maxSize unit. Available units are G, M or K",h$="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",m$="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",p$="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",S$="rootPath config parameter is undefined",T$="clustering.enabled config parameter is undefined",yi=bt.min(0).required(),r_=Zh.items({host:Us.required(),port:yi}).empty(null),on;db.exports={configValidator:g$,routesValidator:y$,route_constraints:r_};function g$(e){if(on=e.rootPath,t_.isEmpty(on))throw S$;let t=we.required(),r=bt.min(0).max(1e3).empty(null).default(b$),s=Us.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(e_),n=Us.optional().empty(null),i=Us.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ue.string().empty(null).default(e_),c=ue.custom(A$).empty(null).default(e_),u=e.clustering?.enabled;if(t_.isEmpty(u))throw T$;let _;return u===!0?_=ue.object({enabled:t,hubServer:ue.object({cluster:ue.object({name:ue.required().empty(null),network:ue.object({port:yi,routes:r_}).required()}).required(),leafNodes:ue.object({network:ue.object({port:yi}).required()}).required(),network:ue.object({port:yi}).required()}).required(),leafServer:ue.object({network:ue.object({port:yi,routes:r_}).required(),streams:ue.object({maxAge:bt.min(120).allow(null).optional(),maxBytes:bt.min(1).allow(null).optional(),maxMsgs:bt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ue.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:we.optional(),databaseLevel:we.optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:we.required(),verify:we.optional()}),user:Us.optional().empty(null)}).required():_=ue.object({enabled:t,tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:we.required()})}).required(),ue.object({authentication:ue.object({authorizeLocal:we,cacheTTL:bt.required(),enableSessions:we}),analytics:ue.object({aggregatePeriod:bt}),componentsRoot:s.optional(),clustering:_,localStudio:ue.object({enabled:t}).required(),logging:ue.object({auditAuthEvents:ue.object({logFailed:we,logSuccessful:we}),file:we.required(),level:ue.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ue.object({enabled:we.optional(),compress:we.optional(),interval:Us.custom(N$).optional().empty(null),maxSize:Us.custom(O$).optional().empty(null),path:Us.optional().empty(null).default(e_)}).required(),root:s,stdStreams:we.required(),auditLog:we.required()}).required(),operationsApi:ue.object({network:ue.object({cors:we.optional(),corsAccessList:Zh.optional(),headersTimeout:bt.min(1).optional(),keepAliveTimeout:bt.min(1).optional(),port:bt.optional().empty(null),securePort:bt.optional().empty(null),timeout:bt.min(1).optional()}).optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:Us.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ue.object({network:ue.object({port:yi,securePort:yi}).required(),webSocket:we.optional(),requireAuthentication:we.optional()}),http:ue.object({compressionThreshold:bt.optional(),cors:we.optional(),corsAccessList:Zh.optional(),headersTimeout:bt.min(1).optional(),port:bt.min(0).optional().empty(null),securePort:bt.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:ue.object({writeAsync:we.required(),overlappingSync:we.optional(),caching:we.optional(),compression:we.optional(),noReadAhead:we.optional(),path:c,prefetchWrites:we.optional()}).required(),ignoreScripts:we.optional(),tls:ue.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(g$,"configValidator");function R$(e){return _b.existsSync(e)?null:`Specified path ${e} does not exist.`}a(R$,"doesPathExist");function A$(e,t){ue.assert(e,Us.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=R$(e);if(r)return t.message(r)}a(A$,"validatePath");function O$(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(E$);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(m$):e}a(O$,"validateRotationMaxSize");function N$(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(h$);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(p$):e}a(N$,"validateRotationInterval");function b$(e,t){let r=t.state.path.join("."),s=l$.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||cb();return i=Math.round(Math.min(i,cb())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),_$.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(b$,"setDefaultThreads");function e_(e,t){if(!t_.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(t_.isEmpty(on))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return mo.join(on,f$);case"logging.root":return mo.join(on,lb);case"clustering.leafServer.streams.path":return mo.join(on,"clustering","leaf");case"storage.path":let s=mo.join(on,ub.LEGACY_DATABASES_DIR_NAME);return _b.existsSync(s)?s:mo.join(on,ub.DATABASES_DIR_NAME);case"logging.rotation.path":return mo.join(on,lb);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(e_,"setDefaultRoot");function y$(e){let t=ue.object({routes:r_});return d$.validateBySchema({routes:e},t)}a(y$,"routesValidator")});var gr=T((Ioe,Rb)=>{"use strict";var Tr=y(),mt=$(),lt=G(),{configValidator:I$,routesValidator:fb}=em(),Jt=require("fs-extra"),w$=require("yaml"),us=require("path"),C$=require("is-number"),hb=require("properties-reader"),L$=require("lodash"),{handleHDBError:D$}=j(),{HTTP_STATUS_CODES:U$,HDB_ERROR_MSGS:s_}=fr(),yoe=require("minimist"),{server:M$}=(hr(),Z(hi)),{DATABASES_PARAM_CONFIG:ic,CONFIG_PARAMS:an,CONFIG_PARAM_MAP:ls}=Tr,P$="Unable to get config value because config is uninitialized",v$="Config successfully initialized",B$="Error backing up config file",H$="Empty parameter sent to getConfigValue",mb=us.join(Tr.PACKAGE_ROOT,"config","yaml",Tr.HDB_DEFAULT_CONFIG_FILE),q$="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Eb={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"},n_,yt,i_;Rb.exports={createConfigFile:F$,getDefaultConfig:G$,getConfigValue:Sb,initConfig:rm,flattenConfig:po,updateConfigValue:Tb,updateConfigObject:k$,getConfiguration:Y$,setConfiguration:K$,readConfigFile:nm,getClusteringRoutes:W$,initOldConfig:gb,getConfigFromFile:Q$,getConfigFilePath:Ii,addConfig:z$,deleteConfigFromFile:J$,getConfigObj:X$};function F$(e){let t=xn(mb);n_=po(t.toJSON());let r;for(let o in e){let c=ls[o.toLowerCase()];if(c===an.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=tm(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){lt.error(l)}}}r&&pb(t,r),sm(t);let s=t.toJSON();yt=po(s);let n=t.getIn(["rootPath"]),i=us.join(n,Tr.HDB_CONFIG_FILE);Jt.createFileSync(i),Jt.writeFileSync(i,String(t)),lt.trace(`Config file written to ${i}`)}a(F$,"createConfigFile");function pb(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!mt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(ic.TABLES))for(let i in s[n][ic.TABLES])for(let o in s[n][ic.TABLES][i]){let c=s[n][ic.TABLES][i][o],u=[an.DATABASES,n,ic.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[an.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){lt.error("Error parsing schemas CLI/env config arguments",s)}}a(pb,"setSchemasConfig");function G$(e){if(n_===void 0){let r=xn(mb);n_=po(r.toJSON())}let t=ls[e.toLowerCase()];if(t!==void 0)return n_[t.toLowerCase()]}a(G$,"getDefaultConfig");function Sb(e){if(e==null){lt.error(H$);return}if(yt===void 0){lt.trace(P$);return}let t=ls[e.toLowerCase()];if(t!==void 0)return yt[t.toLowerCase()]}a(Sb,"getConfigValue");function Ii(e=mt.getPropsFilePath()){let t=mt.getEnvCliRootPath();return t?us.join(t,Tr.HDB_CONFIG_FILE):hb(e).get(Tr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Ii,"getConfigFilePath");function rm(e=!1){if(yt===void 0||e){let t;if(!mt.noBootFile()){t=mt.getPropsFilePath();try{Jt.accessSync(t,Jt.constants.F_OK|Jt.constants.R_OK)}catch(i){throw lt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Ii(t),s;if(r.includes("config/settings.js"))try{gb(r);return}catch(i){if(i.code!==Tr.NODE_ERROR_CODES.ENOENT)throw i}try{s=xn(r)}catch(i){if(i.code===Tr.NODE_ERROR_CODES.ENOENT){lt.trace(`HarperDB config file not found at ${r}.
5
- This can occur during early stages of install where the config file has not yet been created`);return}else throw lt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}x$(s,r),sm(s);let n=s.toJSON();if(M$.config=n,yt=po(n),yt.logging_rotation_rotate)for(let i in Eb)yt[i]&&lt.error(`Config ${Eb[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);lt.trace(v$)}}a(rm,"initConfig");function x$(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],us.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],us.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],us.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(lt.trace("Updating config file with missing config params"),Jt.writeFileSync(t,String(e)))}a(x$,"checkForUpdatedConfig");function sm(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=I$(t);if(r.error)throw s_.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)}a(sm,"validateConfig");function k$(e,t){yt===void 0&&(yt={});let r=ls[e.toLowerCase()];if(r===void 0){lt.trace(`Unable to update config object because config param '${e}' does not exist`);return}yt[r.toLowerCase()]=t}a(k$,"updateConfigObject");function Tb(e,t,r=void 0,s=!1,n=!1,i=!1){yt===void 0&&rm();let o=Sb(ls.hdb_root),c=us.join(o,Tr.HDB_CONFIG_FILE),u=xn(c),_;if(r===void 0&&e.toLowerCase()===an.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ls[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=tm(f,t);u.setIn([...E],h)}else for(let f in r){let E=ls[f.toLowerCase()];if(E===an.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Tr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=tm(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(R){lt.error(R)}}}_&&pb(u,_),sm(u);let l=u.getIn(["rootPath"]),d=us.join(l,Tr.HDB_CONFIG_FILE);s===!0&&V$(c,l),Jt.writeFileSync(d,String(u)),n&&(yt=po(u.toJSON())),lt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Tb,"updateConfigValue");function V$(e,t){try{let r=us.join(t,"backup",`${Tr.HDB_CONFIG_FILE}.bak`);Jt.copySync(e,r),lt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){lt.error(B$),lt.error(r)}}a(V$,"backupConfigFile");var $$=["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)),i_=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i))if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!$$.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!an[u.toUpperCase()]&&ls[u]&&(n[ls[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(po,"flattenConfig");function tm(e,t){if(e===an.CLUSTERING_NODENAME||e===an.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(C$(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||mt.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 mt.autoCast(t)}a(tm,"castConfigValue");function Y$(){let e=mt.getPropsFilePath(),t=Ii(e);return xn(t).toJSON()}a(Y$,"getConfiguration");async function K$(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Tb(void 0,void 0,n,!0),q$}catch(i){throw typeof i=="string"||i instanceof String?D$(i,i,U$.BAD_REQUEST,void 0,void 0,!0):i}}a(K$,"setConfiguration");function nm(){let e=mt.getPropsFilePath();try{Jt.accessSync(e,Jt.constants.F_OK|Jt.constants.R_OK)}catch(s){if(!mt.noBootFile())throw lt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Ii(e);return xn(t).toJSON()}a(nm,"readConfigFile");function xn(e){return w$.parseDocument(Jt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(xn,"parseYamlDoc");function W$(){let e=nm(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=mt.isEmptyOrZeroLength(t)?[]:t;let r=fb(t);if(r)throw s_.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=mt.isEmptyOrZeroLength(s)?[]:s;let n=fb(s);if(n)throw s_.CONFIG_VALIDATION(n.message);if(!mt.isEmptyOrZeroLength(s)&&!mt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!mt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw s_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(W$,"getClusteringRoutes");function gb(e){let t=hb(e);yt={};for(let r in ls){let s=t.get(r.toUpperCase());if(mt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=ls[r].toLowerCase();n===an.LOGGING_ROOT?yt[n]=us.dirname(s):yt[n]=s}return yt}a(gb,"initOldConfig");function Q$(e){let t=nm();return L$.get(t,e.replaceAll("_","."))}a(Q$,"getConfigFromFile");async function z$(e,t){let r=xn(Ii());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Jt.writeFile(Ii(),String(r))}a(z$,"addConfig");function J$(e){let t=Ii(mt.getPropsFilePath()),r=xn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=us.join(s,Tr.HDB_CONFIG_FILE);Jt.writeFileSync(n,String(r))}a(J$,"deleteConfigFromFile");function X$(){return i_||(rm(),i_)}a(X$,"getConfigObj")});var Ob=T((Coe,Ab)=>{"use strict";var o_=y(),a_=class{static{a(this,"BaseLicense")}constructor(t=0,r=o_.RAM_ALLOCATION_ENUM.DEFAULT,s=o_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},im=class extends a_{static{a(this,"ExtendedLicense")}constructor(t=0,r=o_.RAM_ALLOCATION_ENUM.DEFAULT,s=o_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};Ab.exports={BaseLicense:a_,ExtendedLicense:im}});var oc=T((Doe,Cb)=>{"use strict";var To=require("fs-extra"),Nb=Zl(),bb=require("crypto"),j$=require("moment"),Z$=require("uuid").v4,Ft=G(),am=require("path"),eY=$(),kn=y(),tY=Ob().ExtendedLicense,So="invalid license key format",rY="061183",sY="mofi25",nY="aes-256-cbc",iY=16,oY=32,yb=X();yb.initSync();var om;Cb.exports={validateLicense:Ib,generateFingerPrint:cY,licenseSearch:wb,getLicense:_Y};function cm(){return am.join(yb.getHdbBasePath(),kn.LICENSE_KEY_DIR_NAME,kn.LICENSE_FILE_NAME)}a(cm,"getLicenseDirPath");function aY(){let e=cm();return am.join(e,kn.LICENSE_FILE_NAME)}a(aY,"getLicenseFilePath");function um(){let e=cm();return am.join(e,kn.REG_KEY_FILE_NAME)}a(um,"getFingerPrintFilePath");async function cY(){let e=um();try{return await To.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await uY();throw Ft.error(`Error writing fingerprint file to ${e}`),Ft.error(t),new Error("There was an error generating the fingerprint")}}a(cY,"generateFingerPrint");async function uY(){let e=Z$(),t=Nb.hash(e),r=um();try{await To.mkdirp(cm()),await To.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ft.error(`Error writing fingerprint file to ${r}`),Ft.error(s),new Error("There was an error generating the fingerprint")}return t}a(uY,"writeFingerprint");function Ib(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:kn.RAM_ALLOCATION_ENUM.DEFAULT,version:kn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ft.error("empty license key passed to validate."),r;let s=um(),n=!1;try{n=To.statSync(s)}catch(i){Ft.error(i)}if(n){let i;try{i=To.readFileSync(s,"utf8")}catch{Ft.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(sY),c=o[1];c=Buffer.concat([Buffer.from(c)],iY);let u=Buffer.concat([Buffer.from(i)],oY),_=bb.createDecipheriv(nY,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=lY(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(So),Ft.error(So),new Error(So)}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(So),Ft.error(So),new Error(So)}else r.exp_date=l;r.exp_date<j$().valueOf()&&(r.valid_date=!1),Nb.validate(o[1],`${rY}${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||Ft.error("Invalid licence"),r}a(Ib,"validateLicense");function lY(e,t){try{let r=bb.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ft.warn("Check old license failed")}}a(lY,"checkOldLicense");function wb(){let e=new tY,t=[];try{t=To.readFileSync(aY(),"utf-8").split(kn.NEW_LINE)}catch(r){r.code==="ENOENT"?Ft.info("no license file found"):Ft.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(eY.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=Ib(n.license_key,n.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(n){Ft.error("There was an error parsing the license string."),Ft.error(n),e.ram_allocation=kn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return om=e,e}a(wb,"licenseSearch");async function _Y(){return om||await wb(),om}a(_Y,"getLicense")});var xr=T((Boe,Yb)=>{"use strict";var Mb="username is required",Pb="nothing to update, must supply active, role or password to update",vb="password cannot be an empty string",Bb="If role is specified, it cannot be empty.",Hb="active must be true or false";Yb.exports={addUser:gY,alterUser:RY,dropUser:OY,getSuperUser:IY,userInfo:NY,listUsers:u_,listUsersExternal:bY,setUsersToGlobal:Ro,findAndValidateUser:Vb,getClusterUser:wY,USERNAME_REQUIRED:Mb,ALTERUSER_NOTHING_TO_UPDATE:Pb,EMPTY_PASSWORD:vb,EMPTY_ROLE:Bb,ACTIVE_BOOLEAN:Hb};var qb=Gr(),dY=bi(),dm=Zl(),Fb=sb(),Gb=Fr(),fm=cn(),Rr=$(),xb=require("validate.js"),_e=G(),{promisify:fY}=require("util"),Em=nn(),Lb=y(),Db=Ve(),EY=gr(),Moe=X(),Poe=oc(),hY=Si(),{table:voe}=(fe(),Z(Ce)),{handleHDBError:Ms,hdb_errors:mY}=j(),{HTTP_STATUS_CODES:Ps,AUTHENTICATION_ERROR_MSGS:lm,HDB_ERROR_MSGS:go}=mY,{UserEventMsg:hm}=_s(),_m=require("lodash"),{server:mm}=(hr(),Z(hi)),pY=G();mm.getUser=Vb;var kb={username:!0,active:!0,role:!0,password:!0},Ub=new Map,c_=Gb.searchByValue,SY=Gb.searchByHash,TY=fY(dY.delete);async function gY(e){let t=xb.cleanAttributes(e,kb),r=Fb.addUserValidation(t);if(r)throw Ms(new Error,r.message,Ps.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await c_(s),n=n&&Array.from(n)}catch(u){throw _e.error("There was an error searching for a role in add user"),_e.error(u),u}if(!n||n.length<1)throw Ms(new Error,go.ROLE_NAME_NOT_FOUND(t.role),Ps.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Ms(new Error,go.DUP_ROLES_FOUND(t.role),Ps.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Em.encrypt(t.password)),t.password=dm.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await qb.insert(i)}catch(u){throw _e.error("There was an error searching for a user."),_e.error(u),u}_e.debug(o);try{await Ro()}catch(u){throw _e.error("Got an error setting users to global"),_e.error(u),u}if(o.skipped_hashes.length===1)throw Ms(new Error,go.USER_ALREADY_EXISTS(t.username),Ps.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],fm.signalUserChange(new hm(process.pid)),`${c.username} successfully added`}a(gY,"addUser");async function RY(e){let t=xb.cleanAttributes(e,kb);if(Rr.isEmptyOrZeroLength(t.username))throw new Error(Mb);if(Rr.isEmptyOrZeroLength(t.password)&&Rr.isEmptyOrZeroLength(t.role)&&Rr.isEmptyOrZeroLength(t.active))throw new Error(Pb);if(!Rr.isEmpty(t.password)&&Rr.isEmptyOrZeroLength(t.password.trim()))throw new Error(vb);if(!Rr.isEmpty(t.active)&&!Rr.isBoolean(t.active))throw new Error(Hb);let r=AY(t.username);if(!Rr.isEmpty(t.password)&&!Rr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Em.encrypt(t.password)),t.password=dm.hash(t.password)),t.role==="")throw new Error(Bb);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 c_(i)||[])}catch(c){throw _e.error("Got an error searching for a role."),_e.error(c),c}if(!o||o.length===0){let c=go.ALTER_USER_ROLE_NOT_FOUND(t.role);throw _e.error(c),Ms(new Error,c,Ps.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=go.ALTER_USER_DUP_ROLES(t.role);throw _e.error(c),Ms(new Error,c,Ps.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await qb.update(s)}catch(i){throw _e.error("Error during update."),_e.error(i),i}try{await Ro()}catch(i){throw _e.error("Got an error setting users to global"),_e.error(i),i}return fm.signalUserChange(new hm(process.pid)),n}a(RY,"alterUser");function AY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(AY,"isClusterUser");async function OY(e){try{let t=Fb.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Rr.isEmpty(global.hdb_users.get(e.username)))throw Ms(new Error,go.USER_NOT_EXIST(e.username),Ps.NOT_FOUND,void 0,void 0,!0);let s;try{s=await TY(r)}catch(n){throw _e.error("Got an error deleting a user."),_e.error(n),n}_e.debug(s);try{await Ro()}catch(n){throw _e.error("Got an error setting users to global."),_e.error(n),n}return fm.signalUserChange(new hm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(OY,"dropUser");async function NY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=_m.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await SY(r)}catch(n){throw _e.error("Got an error searching for a role."),_e.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw _e.error(r),r}return t}a(NY,"userInfo");async function bY(){let e;try{e=await u_()}catch(t){throw _e.error("Got an error listing users."),_e.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(bY,"listUsersExternal");async function u_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await c_(e)}catch(o){throw _e.error("Got an error searching for roles."),_e.error(o),o}let r={};for(let o of t)r[o.id]=_m.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await c_(s)}catch(o){throw _e.error("Got an error searching for users."),_e.error(o),o}let i=new Map;for(let o of n)o=_m.cloneDeep(o),o.role=r[o.role],yY(o.role),i.set(o.username,o);return i}catch(e){throw _e.error("got an error listing users"),_e.error(e),Rr.errorizeMessage(e)}return null}a(u_,"listUsers");function yY(e){try{if(!e){_e.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(hY)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){_e.error("Got an error trying to set system permissions."),_e.error(t)}}a(yY,"appendSystemTablesToRole");async function Ro(){try{let e=await u_();global.hdb_users=e}catch(e){throw _e.error(e),e}}a(Ro,"setUsersToGlobal");async function Vb(e,t,r=!0){global.hdb_users||await Ro();let s=global.hdb_users.get(e);if(!s)throw Ms(new Error,lm.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Ms(new Error,lm.USER_INACTIVE,Ps.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(Ub.get(t)===s.password)return n;if(dm.validate(s.password,t))Ub.set(t,s.password);else throw Ms(new Error,lm.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Vb,"findAndValidateUser");async function IY(){global.hdb_users||await Ro();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(IY,"getSuperUser");async function wY(){let e=await u_(),t=EY.getConfigFromFile(Lb.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Rr.isEmpty(r)&&r?.role?.role===Lb.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Em.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Db.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Db.SERVER_SUFFIX.ADMIN,r}a(wY,"getClusterUser");var $b=[];mm.invalidateUser=function(e){for(let t of $b)try{t(e)}catch(r){pY.error("Error invalidating user",r)}};mm.onInvalidatedUser=function(e){$b.push(e)}});var cc=T((Goe,zb)=>{"use strict";var wi=G(),Ar=y(),CY=NN(),qoe=qn(),Foe=gi(),LY=xr(),{validateEvent:Kb}=_s(),ac=cs(),DY=require("process"),{resetDatabases:UY}=(fe(),Z(Ce)),MY={[Ar.ITC_EVENT_TYPES.SCHEMA]:PY,[Ar.ITC_EVENT_TYPES.USER]:Qb};async function PY(e){let t=Kb(e);if(t){wi.error(t);return}wi.trace("ITC schemaHandler received schema event:",e),await CY(e.message),await vY(e.message)}a(PY,"schemaHandler");async function vY(e){try{ac.resetReadTxn(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ac.resetReadTxn(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ac.resetReadTxn(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=UY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){wi.error(t)}}a(vY,"syncSchemaMetadata");var Wb=[];async function Qb(e){try{try{ac.resetReadTxn(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ac.resetReadTxn(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){wi.warn(r)}let t=Kb(e);if(t){wi.error(t);return}wi.trace(`ITC userHandler ${Ar.HDB_ITC_CLIENT_PREFIX}${DY.pid} received user event:`,e),await LY.setUsersToGlobal();for(let r of Wb)r()}catch(t){wi.error(t)}}a(Qb,"userHandler");Qb.addListener=function(e){Wb.push(e)};zb.exports=MY});var _s=T((Koe,Xb)=>{"use strict";var koe=G(),pm=$(),BY=y(),{ITC_ERRORS:uc}=fr(),{parentPort:Voe,threadId:HY,isMainThread:qY,workerData:$oe}=require("worker_threads"),{onMessageFromWorkers:FY,broadcast:Yoe,broadcastWithAcknowledgement:GY}=Je();Xb.exports={sendItcEvent:xY,validateEvent:Jb,SchemaEventMsg:kY,UserEventMsg:VY};var l_;FY(async(e,t)=>{l_=l_||cc(),Jb(e),l_[e.type]&&await l_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function xY(e){return!qY&&e.message&&(e.message.originator=HY),GY(e)}a(xY,"sendItcEvent");function Jb(e){if(typeof e!="object")return uc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||pm.isEmpty(e.type))return uc.MISSING_TYPE;if(!e.hasOwnProperty("message")||pm.isEmpty(e.message))return uc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||pm.isEmpty(e.message.originator))return uc.MISSING_ORIGIN;if(BY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return uc.INVALID_EVENT(e.type)}a(Jb,"validateEvent");function kY(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(kY,"SchemaEventMsg");function VY(e){this.originator=e}a(VY,"UserEventMsg")});var cn=T((zoe,ty)=>{"use strict";var jb=y(),Qoe=$(),__=G(),Zb=RN(),Ao,{sendItcEvent:ey}=_s();function $Y(e){try{__.trace("signalSchemaChange called with message:",e),Ao=Ao||cc();let t=new Zb(jb.ITC_EVENT_TYPES.SCHEMA,e);return Ao.schema(t),ey(t)}catch(t){__.error(t)}}a($Y,"signalSchemaChange");function YY(e){try{__.trace("signalUserChange called with message:",e),Ao=Ao||cc();let t=new Zb(jb.ITC_EVENT_TYPES.USER,e);return Ao.user(t),ey(t)}catch(t){__.error(t)}}a(YY,"signalUserChange");ty.exports={signalSchemaChange:$Y,signalUserChange:YY}});var d_=T((Xoe,sy)=>{"use strict";var ry=$(),KY=y(),WY=G(),QY=kl(),zY=xl(),JY=cn(),{SchemaEventMsg:XY}=_s(),jY="already exists in";sy.exports=ZY;async function ZY(e,t,r){if(ry.isEmptyOrZeroLength(r))return r;let s=[];ry.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await e1(e,t.schema,t.name,i)})),n}a(ZY,"lmdbCheckForNewAttributes");async function e1(e,t,r,s){let n=new zY(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await t1(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(jY))WY.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(e1,"createNewAttribute");async function t1(e){let t;return t=await QY(e),JY.signalSchemaChange(new XY(process.pid,KY.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(t1,"createAttribute")});var Oo=T((Zoe,ny)=>{"use strict";var Sm=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};ny.exports=Sm});var oy=T((tae,iy)=>{"use strict";var r1=Oo(),s1=y().OPERATIONS_ENUM,Tm=class extends r1{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(s1.INSERT,r,s,n,i),this.records=t}};iy.exports=Tm});var cy=T((sae,ay)=>{"use strict";var n1=Oo(),i1=y().OPERATIONS_ENUM,gm=class extends n1{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(i1.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};ay.exports=gm});var ly=T((iae,uy)=>{"use strict";var o1=Oo(),a1=y().OPERATIONS_ENUM,Rm=class extends o1{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(a1.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};uy.exports=Rm});var dy=T((aae,_y)=>{"use strict";var c1=Oo(),u1=y().OPERATIONS_ENUM,Am=class extends c1{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(u1.DELETE,s,n,t,i),this.original_records=r}};_y.exports=Am});var lc=T((lae,my)=>{"use strict";var uae=require("path"),fy=Ue(),l1=oy(),_1=cy(),d1=ly(),f1=dy(),No=ze(),Ey=$(),{CONFIG_PARAMS:E1}=y(),hy=X();hy.initSync();var f_=y().OPERATIONS_ENUM,{getTransactionAuditStorePath:h1}=ve();my.exports=m1;async function m1(e,t){if(hy.get(E1.LOGGING_AUDITLOG)===!1)return;let r=h1(e.schema,e.table),s=await fy.openEnvironment(r,e.table,!0),n=p1(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){fy.initializeDBIs(s,No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,No.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Ey.isEmpty(n.user_name)||s.dbis[No.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[No.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(m1,"writeTransaction");function p1(e,t){let r=Ey.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===f_.INSERT)return new l1(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===f_.UPDATE)return new _1(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===f_.UPSERT)return new d1(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===f_.DELETE)return new f1(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(p1,"createTransactionObject")});var Om=T((fae,py)=>{"use strict";var S1=ja(),dae=Za(),_c=y(),T1=sc(),g1=fo().insertRecords,R1=Ue(),A1=G(),O1=d_(),{getSchemaPath:N1}=ve(),b1=lc();py.exports=y1;async function y1(e){try{let{schema_table:t,attributes:r}=S1(e);T1(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 s=await O1(e.hdb_auth_header,t,r),n=N1(e.schema,e.table),i=await R1.openEnvironment(n,e.table),o=await g1(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await b1(e,o)}catch(c){A1.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:s,txn_time:o.txn_time}}catch(t){throw t}}a(y1,"lmdbCreateRecords")});var gy=T((hae,Ty)=>{"use strict";var Sy=y(),I1=Om(),w1=Za(),C1=require("fs-extra"),{getSchemaPath:L1}=ve();Ty.exports=D1;async function D1(e){let t=[{name:e.schema,createddate:Date.now()}],r=new w1(Sy.SYSTEM_SCHEMA_NAME,Sy.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await I1(r),await C1.mkdirp(L1(e.schema))}a(D1,"lmdbCreateSchema")});var Ay=T((pae,Ry)=>{"use strict";var Nm=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};Ry.exports=Nm});var yy=T((Aae,by)=>{"use strict";var Oy=Ue(),bm=Er(),ym=fr().LMDB_ERRORS_ENUM,U1=ze(),Ny=G(),Tae=$(),M1=require("lmdb"),P1=Ay(),v1=y(),{OVERFLOW_MARKER:gae,MAX_SEARCH_KEY_LENGTH:Rae}=U1,B1=v1.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function H1(e,t,r,s){if(bm.validateEnv(e),t===void 0)throw new Error(ym.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ym.IDS_REQUIRED):new Error(ym.IDS_MUST_BE_ITERABLE);try{let n=Oy.listDBIs(e);Oy.initializeDBIs(e,t,n);let i=new P1,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||s&&h[B1]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,M1.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let R=n[S];if(!h.hasOwnProperty(R)||R===t)continue;let b=e.dbis[R],O=h[R];if(O!=null)try{let Y=bm.getIndexedValues(O);if(Y)for(let Q=0,F=Y.length;Q<F;Q++)b.remove(Y[Q],o)}catch{Ny.warn(`cannot delete from attribute: ${R}, ${O}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){Ny.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=bm.getNextMonotonicTime(),i}catch(n){throw n}}a(H1,"deleteRecords");by.exports={deleteRecords:H1}});var dc=T((Nae,wy)=>{"use strict";var bo=$(),q1=yy(),F1=Ue(),{getSchemaPath:G1}=ve(),x1=lc(),k1=G();wy.exports=V1;async function V1(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(bo.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(bo.isEmptyOrZeroLength(e.hash_values)&&!bo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];bo.isEmpty(u)||e.hash_values.push(u)}}if(bo.isEmptyOrZeroLength(e.hash_values))return Iy([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(bo.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=G1(e.schema,e.table),i=await F1.openEnvironment(n,e.table),o=await q1.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await x1(e,o)}catch(c){k1.error(`unable to write transaction due to ${c.message}`)}return Iy(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(V1,"lmdbDeleteRecords");function Iy(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(Iy,"createDeleteResponse")});var wm=T((Iae,Cy)=>{"use strict";var $1=y(),yae=Er();function Im(e,t){let r=Object.create(null);if(t.length===1&&$1.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Im,"parseRow");function Y1(e,t,r,s){let n=Im(r,e);s.push(n)}a(Y1,"searchAll");function K1(e,t,r,s){let n=Im(r,e);s[t]=n}a(K1,"searchAllToMap");function W1(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(W1,"iterateDBI");function Ci(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(Ci,"pushResults");function Q1(e,t,r,s,n,i){t.toString().endsWith(e)&&Ci(t,r,s,n,i)}a(Q1,"endsWith");function z1(e,t,r,s,n,i){t.toString().includes(e)&&Ci(t,r,s,n,i)}a(z1,"contains");function J1(e,t,r,s,n,i){t>e&&Ci(t,r,s,n,i)}a(J1,"greaterThanCompare");function X1(e,t,r,s,n,i){t>=e&&Ci(t,r,s,n,i)}a(X1,"greaterThanEqualCompare");function j1(e,t,r,s,n,i){t<e&&Ci(t,r,s,n,i)}a(j1,"lessThanCompare");function Z1(e,t,r,s,n,i){t<=e&&Ci(t,r,s,n,i)}a(Z1,"lessThanEqualCompare");Cy.exports={parseRow:Im,searchAll:Y1,searchAllToMap:K1,iterateDBI:W1,endsWith:Q1,contains:z1,greaterThanCompare:J1,greaterThanEqualCompare:X1,lessThanCompare:j1,lessThanEqualCompare:Z1,pushResults:Ci}});var yo=T((Uae,By)=>{"use strict";var Vn=Ue(),Cae=G(),Or=Er(),E_=ze(),Xe=fr().LMDB_ERRORS_ENUM,Lae=$(),eK=y(),h_=wm(),{parseRow:tK}=h_,Dae=require("lmdb"),{OVERFLOW_MARKER:Ly,MAX_SEARCH_KEY_LENGTH:rK}=E_;function Dy(e,t,r,s=!1,n=void 0,i=void 0){return Li(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(Dy,"iterateFullIndex");function fc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Li(e,t,r,(l,d,f,E)=>{let b={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(b.values=!1,d.getRange(b).map(O=>({value:O}))):d.getRange(b)})}a(fc,"iterateRangeBetween");function Li(e,t,r,s){let n=e.database||e,i=Vn.openDBI(n,r);i[E_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Vn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Li,"setupTransaction");function Uy(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(Ly)){if(!n)if(r)n=Vn.openDBI(e,r);else{let u=Vn.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=Vn.openDBI(e,u[_]),!n[E_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(Uy,"getOverflowCheck");function sK(e,t,r,s=!1,n=void 0,i=void 0){if(Or.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);return Li(e,t,t,(o,c,u)=>(m_(r),r=Ec(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>tK(_.value,r))))}a(sK,"searchAll");function nK(e,t,r,s=!1,n=void 0,i=void 0){if(Or.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);m_(r),r=Ec(e.database||e,r);let o=new Map;for(let{key:c,value:u}of Dy(e,t,t,s,n,i))o.set(c,h_.parseRow(u,r));return o}a(nK,"searchAllToMap");function iK(e,t,r=!1,s=void 0,n=void 0){if(Or.validateEnv(e),t===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=Dy(e,void 0,t,r,s,n),c=o.transaction,u=Uy(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(iK,"iterateDBI");function oK(e,t){if(Or.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);return Vn.statDBI(e,t).entryCount}a(oK,"countAll");function aK(e,t,r,s,n=!1,i=void 0,o=void 0){return $n(e,r,s),Li(e,t,r,(c,u,_,l)=>(s=Or.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(aK,"equals");function cK(e,t,r){return $n(e,t,r),Vn.openDBI(e,t).getValuesCount(r)}a(cK,"count");function uK(e,t,r,s,n=!1,i=void 0,o=void 0){return $n(e,r,s),Li(e,null,r,(c,u)=>{s=Or.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(uK,"startsWith");function lK(e,t,r,s,n=!1,i=void 0,o=void 0){return My(e,t,r,s,n,i,o,!0)}a(lK,"endsWith");function My(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return $n(e,r,s),Li(e,null,r,(u,_,l,d)=>{let f=Uy(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(Ly)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[E_.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(My,"contains");function _K(e,t,r,s,n=!1,i=void 0,o=void 0){$n(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),fc(e,t,r,s,u,n,i,o,!0,!1)}a(_K,"greaterThan");function dK(e,t,r,s,n=!1,i=void 0,o=void 0){$n(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),fc(e,t,r,s,u,n,i,o,!1,!1)}a(dK,"greaterThanEqual");function fK(e,t,r,s,n=!1,i=void 0,o=void 0){$n(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),fc(e,t,r,u,s,n,i,o,!1,!0)}a(fK,"lessThan");function EK(e,t,r,s,n=!1,i=void 0,o=void 0){$n(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),fc(e,t,r,u,s,n,i,o,!1,!1)}a(EK,"lessThanEqual");function hK(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Or.validateEnv(e),r===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Xe.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Xe.END_VALUE_REQUIRED);if(s=Or.convertKeyValueToWrite(s),n=Or.convertKeyValueToWrite(n),s>n)throw new Error(Xe.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return fc(e,t,r,s,n,i,o,c)}a(hK,"between");function mK(e,t,r,s){Or.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(m_(r),r=Ec(n,r),s===void 0)throw new Error(Xe.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=h_.parseRow(c,r)),o}a(mK,"searchByHash");function pK(e,t,r){Or.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Xe.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(pK,"checkHashExists");function SK(e,t,r,s,n=[]){return vy(e,t,r,s,n),Py(e,t,r,s,n).map(i=>i[1])}a(SK,"batchSearchByHash");function TK(e,t,r,s,n=[]){vy(e,t,r,s,n);let i=new Map;for(let[o,c]of Py(e,t,r,s,n))i.set(o,c);return i}a(TK,"batchSearchByHashToMap");function Py(e,t,r,s,n=[]){return Li(e,t,t,(i,o,c)=>{r=Ec(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,h_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(Py,"batchHashSearch");function vy(e,t,r,s,n){if(Or.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(m_(r),s==null)throw new Error(Xe.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Xe.IDS_MUST_BE_ITERABLE)}a(vy,"initializeBatchSearchByHash");function m_(e){if(!Array.isArray(e))throw e===void 0?new Error(Xe.FETCH_ATTRIBUTES_REQUIRED):new Error(Xe.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(m_,"validateFetchAttributes");function $n(e,t,r){if(Or.validateEnv(e),t===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Xe.SEARCH_VALUE_REQUIRED);if(r?.length>rK)throw new Error(Xe.SEARCH_VALUE_TOO_LARGE)}a($n,"validateComparisonFunctions");function Ec(e,t){return t.length===1&&eK.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Vn.listDBIs(e)),t}a(Ec,"setGetWholeRowAttributes");By.exports={searchAll:sK,searchAllToMap:nK,count:cK,countAll:oK,equals:aK,startsWith:uK,endsWith:lK,contains:My,searchByHash:mK,setGetWholeRowAttributes:Ec,batchSearchByHash:SK,batchSearchByHashToMap:TK,checkHashExists:pK,iterateDBI:iK,greaterThan:_K,greaterThanEqual:dK,lessThan:fK,lessThanEqual:EK,between:hK}});var Io=T((Pae,xy)=>{var Hy=require("lodash"),qy=ke(),Be=require("joi"),gK=$(),{hdb_schema_table:p_,checkValidTable:Fy,hdb_table:Gy,hdb_database:S_}=Ls(),{handleHDBError:RK,hdb_errors:AK}=j(),{getDatabases:OK}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:NK}=AK,bK=Be.object({database:S_,schema:S_,table:Gy,search_attribute:p_,search_value:Be.any().required(),get_attributes:Be.array().min(1).items(p_).optional(),desc:Be.bool(),limit:Be.number().integer().min(1),offset:Be.number().integer().min(0)}),yK=Be.object({database:S_,schema:S_,table:Gy,operator:Be.string().valid("and","or").default("and").lowercase(),offset:Be.number().integer().min(0),limit:Be.number().integer().min(1),get_attributes:Be.array().min(1).items(p_).optional(),conditions:Be.array().min(1).items(Be.object({search_attribute:p_,search_type:Be.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").optional(),search_value:Be.when("search_type",{switch:[{is:"equals",then:Be.any()},{is:"between",then:Be.array().items(Be.alternatives([Be.string(),Be.number()])).length(2)}],otherwise:Be.alternatives(Be.string(),Be.number())}).required()})).required()});xy.exports=function(e,t){let r=null;switch(t){case"value":r=qy.validateBySchema(e,bK);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Fy("database",e.schema)),i(Fy("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"),n&&(r=new Error(n.trim()));break;case"conditions":r=qy.validateBySchema(e,yK);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=gK.checkGlobalSchemaTable(e.schema,e.table);if(n)return RK(new Error,n,NK.NOT_FOUND);let o=OK()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let _=0,l=e.conditions.length;_<l;_++){let d=e.conditions[_];c.push(d.search_attribute)}let u=Hy.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!Hy.some(o,l=>l===_||l.attribute===_||l.attribute===_.attribute));if(u&&u.length>0){let _=u.join(", ");return _=_.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${_}'`)}}return r}});var Cm=T((Bae,ky)=>{"use strict";var IK=Ue(),wK=Io(),{getSchemaPath:CK}=ve();ky.exports=LK;function LK(e){let t=wK(e,"hashes");if(t)throw t;let r=CK(e.schema,e.table);return IK.openEnvironment(r,e.table)}a(LK,"initialize")});var Lm=T((qae,Vy)=>{"use strict";var DK=yo(),UK=Cm();Vy.exports=MK;async function MK(e){let t=await UK(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return DK.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(MK,"lmdbGetDataByHash")});var wo=T((Gae,$y)=>{"use strict";var Dm=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};$y.exports=Dm});var Ky=T((Vae,Yy)=>{"use strict";var kae=wo(),PK=yo(),vK=Cm();Yy.exports=BK;async function BK(e){let t=await vK(e),r=global.hdb_schema[e.schema][e.table];return PK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(BK,"lmdbSearchByHash")});var vs=T((Yae,Wy)=>{"use strict";var Um=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};Wy.exports=Um});var T_=T((Wae,Zy)=>{"use strict";var Gt=yo(),HK=Ue(),qK=$(),ae=ze(),Di=y(),FK=Si(),Qy=fr().LMDB_ERRORS_ENUM,{getSchemaPath:GK}=ve(),un=Di.SEARCH_WILDCARDS;async function xK(e,t,r){let s;e.schema===Di.SYSTEM_SCHEMA_NAME?s=FK[e.table]:s=global.hdb_schema[e.schema][e.table];let n=jy(e,s.hash_attribute,r,t);return Jy(e,n,s.hash_attribute,r)}a(xK,"prepSearch");async function Jy(e,t,r,s){let n=GK(e.schema,e.table),i=await HK.openEnvironment(n,e.table),o=Xy(i,e,t,r),c=o.transaction||i;if([ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ae.SEARCH_TYPES.SEARCH_ALL,ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(kK(e,r)===!1){let l=e.search_attribute;if(l===r)return s?zy(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?zy(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Gt.batchSearchByHashToMap(c,r,e.get_attributes,_):Gt.batchSearchByHash(c,r,e.get_attributes,_)}a(Jy,"executeSearch");function Xy(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<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 ae.SEARCH_TYPES.EQUALS:n=Gt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.CONTAINS:n=Gt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.ENDS_WITH:case ae.SEARCH_TYPES._ENDS_WITH:n=Gt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.STARTS_WITH:case ae.SEARCH_TYPES._STARTS_WITH:n=Gt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Gt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Gt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.SEARCH_ALL:return Gt.searchAll(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Gt.searchAllToMap(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.BETWEEN:n=Gt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN:case ae.SEARCH_TYPES._GREATER_THAN:n=Gt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN_EQUAL:case ae.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Gt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.LESS_THAN:case ae.SEARCH_TYPES._LESS_THAN:n=Gt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.LESS_THAN_EQUAL:case ae.SEARCH_TYPES._LESS_THAN_EQUAL:n=Gt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Xy,"searchByType");function zy(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(zy,"createMapFromIterable");function kK(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 s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(kK,"checkToFetchMore");function jy(e,t,r,s){if(qK.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),un.indexOf(n)>-1)return r===!0?ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ae.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(un[0])<0&&n.indexOf(un[1])<0)return c===!0?r===!0?ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ae.SEARCH_TYPES.EQUALS;if(un.indexOf(i)>=0&&un.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ae.SEARCH_TYPES.CONTAINS;if(un.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ae.SEARCH_TYPES.ENDS_WITH;if(un.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ae.SEARCH_TYPES.STARTS_WITH;if(n.includes(un[0])||n.includes(un[1]))return ae.SEARCH_TYPES.EQUALS;throw new Error(Qy.UNKNOWN_SEARCH_TYPE)}else switch(s){case Di.VALUE_SEARCH_COMPARATORS.BETWEEN:return ae.SEARCH_TYPES.BETWEEN;case Di.VALUE_SEARCH_COMPARATORS.GREATER:return ae.SEARCH_TYPES.GREATER_THAN;case Di.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ae.SEARCH_TYPES.GREATER_THAN_EQUAL;case Di.VALUE_SEARCH_COMPARATORS.LESS:return ae.SEARCH_TYPES.LESS_THAN;case Di.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ae.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Qy.UNKNOWN_SEARCH_TYPE)}}a(jy,"createSearchTypeFromSearchObject");Zy.exports={executeSearch:Jy,createSearchTypeFromSearchObject:jy,prepSearch:xK,searchByType:Xy}});var tI=T((Jae,eI)=>{"use strict";var zae=vs(),VK=Io(),$K=$(),YK=y(),KK=T_();eI.exports=WK;function WK(e,t){if(!$K.isEmpty(t)&&YK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=VK(e,"value");if(s)throw s;let n=!0;return KK.prepSearch(e,t,n)}a(WK,"lmdbGetDataByValue")});var hc=T((Zae,rI)=>{"use strict";var jae=vs(),QK=Io(),zK=$(),JK=y(),XK=T_();rI.exports=jK;async function jK(e,t){if(!zK.isEmpty(t)&&JK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=QK(e,"value");if(s)throw s;return XK.prepSearch(e,t,!1)}a(jK,"lmdbSearchByValue")});var nI=T((rce,sI)=>{"use strict";var tce=ze(),Mm=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},Pm=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},vm=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};sI.exports={SearchByConditionsObject:Mm,SearchCondition:Pm,SortAttribute:vm}});var uI=T((oce,cI)=>{"use strict";var nce=nI().SearchByConditionsObject,ZK=vs(),eW=Io(),Bm=yo(),g_=ze(),{Resource:ice}=(ns(),Z(BE)),aI=T_(),tW=wm(),rW=require("lodash"),{getSchemaPath:sW}=ve(),iI=Ue(),{handleHDBError:nW,hdb_errors:iW}=j(),{HTTP_STATUS_CODES:oW}=iW,aW=1e8;cI.exports=cW;async function cW(e){let t=eW(e,"conditions");if(t)throw nW(t,t.message,oW.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=sW(e.schema,e.table),s=await iI.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)iI.openDBI(s,_.search_attribute);let i=rW.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===g_.SEARCH_TYPES.EQUALS?_.estimated_count=Bm.count(s,_.search_attribute,_.search_value):l===g_.SEARCH_TYPES.CONTAINS||l===g_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=aW}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await oI(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(aI.filterByType),d=l.length,f=Bm.setGetWholeRowAttributes(s,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=>tW.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await oI(o,e,f,n.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=Bm.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(cW,"lmdbSearchByConditions");async function oI(e,t,r,s){let n=new ZK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===g_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,aI.searchByType(e,n,i,s).map(o=>o.value)}a(oI,"executeConditionSearch")});var mc=T((cce,lI)=>{"use strict";var uW=y().OPERATIONS_ENUM,Hm=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=uW.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};lI.exports=Hm});var qm=T((lce,SI)=>{"use strict";var EI=vs(),hI=mc(),mI=hc(),pI=dc(),Xt=y(),_I=$(),dI=Ue(),{getTransactionAuditStorePath:lW,getSchemaPath:_W}=ve(),fI=G();SI.exports=dW;async function dW(e){try{if(_I.isEmpty(global.hdb_schema[e.schema])||_I.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await fW(e),await EW(e);let t=_W(e.schema,e.table);try{await dI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")fI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=lW(e.schema,e.table);await dI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")fI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(dW,"lmdbDropTable");async function fW(e){let t=new EI(Xt.SYSTEM_SCHEMA_NAME,Xt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Xt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Xt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await mI(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new hI(Xt.SYSTEM_SCHEMA_NAME,Xt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await pI(n)}a(fW,"deleteAttributesFromSystem");async function EW(e){let t=new EI(Xt.SYSTEM_SCHEMA_NAME,Xt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Xt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Xt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Xt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Xt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await mI(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&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new hI(Xt.SYSTEM_SCHEMA_NAME,Xt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await pI(n)}catch(i){throw i}}a(EW,"dropTableFromSystem")});var gI=T((dce,TI)=>{"use strict";var hW=require("fs-extra"),mW=vs(),pW=wo(),SW=mc(),TW=qm(),gW=dc(),RW=Lm(),AW=hc(),ln=y(),{getSchemaPath:OW}=ve(),{handleHDBError:NW,hdb_errors:bW}=j(),{HDB_ERROR_MSGS:yW,HTTP_STATUS_CODES:IW}=bW;TI.exports=wW;async function wW(e){let t;try{t=await CW(e.schema);let r=new mW(ln.SYSTEM_SCHEMA_NAME,ln.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await AW(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await TW(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new SW(ln.SYSTEM_SCHEMA_NAME,ln.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await gW(n);let i=OW(t);await hW.remove(i)}catch(r){throw r}}a(wW,"lmdbDropSchema");async function CW(e){let t=new pW(ln.SYSTEM_SCHEMA_NAME,ln.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await RW(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw NW(new Error,yW.SCHEMA_NOT_FOUND(e),IW.NOT_FOUND,void 0,void 0,!0);return s}a(CW,"validateDropSchema")});var Gm=T((Ece,RI)=>{"use strict";var Fm=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};RI.exports=Fm});var OI=T((pce,AI)=>{"use strict";var LW=require("fs-extra"),R_=Ue(),{getTransactionAuditStorePath:DW}=ve(),xm=ze(),mce=Gm();AI.exports=UW;async function UW(e){let t;try{let r=DW(e.schema,e.table);await LW.mkdirp(r),t=await R_.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{R_.createDBI(t,xm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),R_.createDBI(t,xm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),R_.createDBI(t,xm.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(UW,"createTransactionsAuditEnvironment")});var II=T((Tce,yI)=>{"use strict";var km=y(),NI=Ue(),MW=fo(),{getSystemSchemaPath:PW,getSchemaPath:vW}=ve(),BW=Si(),HW=kl(),Vm=xl(),qW=G(),FW=OI(),Ym=BW.hdb_table,bI=[];for(let e=0;e<Ym.attributes.length;e++)bI.push(Ym.attributes[e].attribute);yI.exports=GW;async function GW(e,t){let r=vW(t.schema,t.table),s=new Vm(t.schema,t.table,km.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Vm(t.schema,t.table,km.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Vm(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await NI.createEnvironment(r,t.table),e!==void 0){let o=await NI.openEnvironment(PW(),km.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await MW.insertRecords(o,Ym.hash_attribute,bI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await $m(s),await $m(n),await $m(i)}await FW(t)}catch(o){throw o}}a(GW,"lmdbCreateTable");async function $m(e){try{await HW(e)}catch(t){qW.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a($m,"createAttribute")});var CI=T((Rce,wI)=>{"use strict";var xW=ja(),kW=sc(),VW=d_(),pc=y(),$W=fo().updateRecords,YW=Ue(),{getSchemaPath:KW}=ve(),WW=lc(),QW=G();wI.exports=zW;async function zW(e){try{let{schema_table:t,attributes:r}=xW(e);kW(e,r,t.hash_attribute),e.schema!==pc.SYSTEM_SCHEMA_NAME&&(r.includes(pc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(pc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(pc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(pc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await VW(e.hdb_auth_header,t,r),n=KW(e.schema,e.table),i=await YW.openEnvironment(n,e.table),o=await $W(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await WW(e,o)}catch(c){QW.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:s,txn_time:o.txn_time}}catch(t){throw t}}a(zW,"lmdbUpdateRecords")});var DI=T((Oce,LI)=>{"use strict";var JW=y().OPERATIONS_ENUM,Km=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=JW.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};LI.exports=Km});var MI=T((yce,UI)=>{"use strict";var bce=DI(),XW=ja(),jW=sc(),ZW=d_(),Sc=y(),eQ=fo().upsertRecords,tQ=Ue(),{getSchemaPath:rQ}=ve(),sQ=lc(),nQ=G(),{handleHDBError:iQ,hdb_errors:oQ}=j();UI.exports=aQ;async function aQ(e){let t;try{t=XW(e)}catch(u){throw iQ(u,u.message,oQ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;jW(e,s,r.hash_attribute),e.schema!==Sc.SYSTEM_SCHEMA_NAME&&(s.includes(Sc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Sc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Sc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Sc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await ZW(e.hdb_auth_header,r,s),i=rQ(e.schema,e.table),o=await tQ.openEnvironment(i,e.table),c=await eQ(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await sQ(e,c)}catch(u){nQ.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(aQ,"lmdbUpsertRecords")});var vI=T((wce,PI)=>{"use strict";var Wm=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};PI.exports=Wm});var HI=T((Lce,BI)=>{"use strict";var Qm=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};BI.exports=Qm});var GI=T((Mce,FI)=>{"use strict";var zm=Ue(),{getTransactionAuditStorePath:cQ}=ve(),Uce=vI(),Tc=ze(),uQ=$(),qI=HI(),lQ=require("util").promisify,_Q=lQ(setTimeout),dQ=1e4,fQ=100;FI.exports=EQ;async function EQ(e){let t=cQ(e.schema,e.table),r=await zm.openEnvironment(t,e.table,!0),s=zm.listDBIs(r);zm.initializeDBIs(r,Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new qI;do n=await hQ(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await _Q(fQ);while(n.transactions_deleted>0);return i}a(EQ,"deleteAuditLogsBefore");async function hQ(e,t){let r=new qI;try{let s=e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Tc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];uQ.isEmpty(c)||(n=e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>dQ)break}return await n,r}catch(s){throw s}}a(hQ,"deleteTransactions")});var kI=T((vce,xI)=>{"use strict";var Jm=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};xI.exports=Jm});var $I=T((qce,VI)=>{"use strict";var mQ=vs(),pQ=mc(),Hce=kI(),Bs=y(),SQ=$(),Xm=Ue(),TQ=Si(),gQ=hc(),RQ=dc(),{getSchemaPath:AQ}=ve();VI.exports=OQ;async function OQ(e,t=!0){let r;e.schema===Bs.SYSTEM_SCHEMA_NAME?r=TQ[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await bQ(e),n=AQ(e.schema,e.table),i=await Xm.openEnvironment(n,e.table);return t===!0&&await NQ(e,i,r.hash_attribute),Xm.dropDBI(i,e.attribute),s}a(OQ,"lmdbDropAttribute");async function NQ(e,t,r){let s=Xm.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(NQ,"removeAttributeFromAllObjects");async function bQ(e){let t=new mQ(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await gQ(t)).filter(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(SQ.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new pQ(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return RQ(i)}a(bQ,"dropAttributeFromSystem")});var JI=T((xce,zI)=>{"use strict";var jm=Ue(),Co=ze(),Gce=Er(),Zm=y(),YI=$(),{getTransactionAuditStorePath:yQ}=ve(),IQ=yo(),A_=Oo(),wQ=G();zI.exports=CQ;async function CQ(e){let t=yQ(e.schema,e.table),r=await jm.openEnvironment(t,e.table,!0),s=jm.listDBIs(r);jm.initializeDBIs(r,Co.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Zm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return KI(r,e.search_values);case Zm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,DQ(r,e.search_values,n);case Zm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return LQ(r,e.search_values);default:return KI(r)}}a(CQ,"readAuditLog");function KI(e,t=[0,Date.now()]){YI.isEmpty(t[0])&&(t[0]=0),YI.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Co.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new A_,n))}a(KI,"searchTransactionsByTimestamp");function LQ(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[Co.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,QI(e,i))}return Object.fromEntries(r)}a(LQ,"searchTransactionsByUsername");function DQ(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=IQ.equals(e,Co.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Co.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=QI(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);WI(u,"records",r,l,o),WI(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(DQ,"searchTransactionsByHashValues");function WI(e,t,r,s,n){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(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new A_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new A_(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(WI,"loopRecords");function QI(e,t){let r=[];try{let s=e.dbis[Co.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new A_,i);r.push(o)}}catch(i){wQ.warn(i)}return r}catch(s){throw s}}a(QI,"batchSearchTransactions")});var jI=T((Yce,XI)=>{"use strict";var{getSchemaPath:Vce}=ve(),$ce=Ue(),{database:UQ}=(fe(),Z(Ce));XI.exports={writeTransaction:MQ};async function MQ(e,t,r){return UQ({database:e,table:t}).transaction(r)}a(MQ,"writeTransaction")});var rw=T((Wce,tw)=>{"use strict";var{getSchemaPath:ZI}=ve(),ew=Ue();tw.exports={flush:PQ,resetReadTxn:vQ};async function PQ(e,t){return(await ew.openEnvironment(ZI(e,t),t.toString())).flushed}a(PQ,"flush");async function vQ(e,t){try{(await ew.openEnvironment(ZI(e,t),t.toString())).resetReadTxn()}catch{}}a(vQ,"resetReadTxn")});var ow=T((zce,iw)=>{"use strict";var{Readable:BQ}=require("stream"),{getDatabases:HQ}=(fe(),Z(Ce)),{readSync:qQ,openSync:FQ,createReadStream:sw}=require("fs"),{open:GQ}=require("lmdb"),nw=Dl(),xQ=Ml(),{AUDIT_STORE_OPTIONS:kQ}=(co(),Z(NO)),{INTERNAL_DBIS_NAME:VQ,AUDIT_STORE_NAME:$Q}=ze();iw.exports=KQ;var ep=32768,YQ=100;async function KQ(e){let t=e.database||e.schema||"data",r=HQ()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=GQ({noSync:!0,maxDbs:xQ.MAX_DBS}),f,E=d.openDB(VQ,new nw(!1)),h=l.useReadTransaction(),p=0,S=a(async function(b,O){O.encoding="binary",O.encoder=void 0;let Y=d.openDB(b,O),Q=l.openDB(b,O);for(let{key:F,version:w,value:K}of Q.getRange({transaction:h,versions:Q.useVersions}))f=Y.put(F,K,w),p++%YQ===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:b,value:O}of l.getRange({transaction:h,start:!1}))if(n.some(Y=>b.startsWith?.(Y+"/"))){E.put(b,O);let[,Y]=b.split("/"),Q=!Y,F=new nw(!Q,Q);await S(b,F)}e.include_audit&&await S($Q,Object.assign({},kQ)),await f;let R=sw(d.path);return R.headers=u(),R.on("close",()=>{h.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=FQ(o.path);return o.transaction(()=>{let _=Buffer.alloc(ep);qQ(c,_,0,ep),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=sw(null,{fd:c,start:ep}),f=new BQ.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",s),_}}a(KQ,"getBackup")});var uw=T((Xce,cw)=>{"use strict";var WQ=G(),{handleHDBError:QQ}=j(),zQ=lO(),JQ=kl(),XQ=Om(),jQ=gy(),ZQ=dc(),ez=Lm(),tz=Ky(),rz=tI(),sz=hc(),nz=uI(),iz=gI(),oz=II(),az=CI(),cz=MI(),uz=GI(),lz=qm(),_z=$I(),dz=JI(),fz=jI(),aw=rw(),Ez=ow(),tp=class extends zQ{static{a(this,"LMDBBridge")}async searchByConditions(t){return nz(t)}async getDataByHash(t){return await ez(t)}async searchByHash(t){return await tz(t)}async getDataByValue(t,r){return await rz(t,r)}async searchByValue(t){return await sz(t)}async createSchema(t){return await jQ(t)}async dropSchema(t){return await iz(t)}async createTable(t,r){return await oz(t,r)}async dropTable(t){return await lz(t)}async createAttribute(t){return await JQ(t)}async createRecords(t){return await XQ(t)}async updateRecords(t){return await az(t)}async upsertRecords(t){try{return await cz(t)}catch(r){throw QQ(r,null,null,WQ.ERR,r)}}async deleteRecords(t){return await ZQ(t)}async dropAttribute(t){return await _z(t)}async deleteAuditLogsBefore(t){return await uz(t)}async readAuditLog(t){return await dz(t)}writeTransaction(t,r,s){return fz.writeTransaction(t,r,s)}flush(t,r){return aw.flush(t,r)}resetReadTxn(t,r){return aw.resetReadTxn(t,r)}getBackup(t){return Ez(t)}};cw.exports=tp});var Sw={};qe(Sw,{ResourceBridge:()=>np});function ip({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 _w(e,t){let r=Hs(e),s=ip(e,r);if(!r)throw new ds.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;Ge(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:n,select:s},i);return l=l&&hl(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 Hs(e){let t=e.database||e.schema||mz,r=Es()[t];if(!r)throw(0,ds.handleHDBError)(new Error,hz.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function dw(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*fw(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var Ew,O_,ds,hw,mw,hs,rp,sp,pw,hz,mz,pz,Sz,lw,np,Tw=Te(()=>{"use strict";Ew=D(uw()),O_=D(Io()),ds=D(j());fe();hw=D(ja()),mw=D(sc()),hs=D(y()),rp=D(cn()),sp=D(_s()),pw=D($());Ei();ml();({HDB_ERROR_MSGS:hz}=ds.hdb_errors),mz="data",pz=1e4,Sz=10,np=class extends Ew.default{static{a(this,"ResourceBridge")}constructor(t){super(t),lw=this}async searchByConditions(t){let r=(0,O_.default)(t,"conditions");if(r)throw(0,ds.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=Hs(t);if(!s)throw new ds.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:ip(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new ds.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}et({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await Hs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Hs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],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}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Hs(t).dropTable()}createSchema(t){return gc({database:t.schema,table:null}),rp.signalSchemaChange(new sp.SchemaEventMsg(process.pid,hs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await op(t.schema),rp.signalSchemaChange(new sp.SchemaEventMsg(process.pid,hs.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,lw.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,hw.default)(t);(0,mw.default)(t,s,r.primaryKey);let n,i=Es()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ge(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.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=hl(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:n,skipped_hashes:_}})}async deleteRecords(t){let r=Es()[t.schema][t.table],s={user:t.hdb_user};return Ge(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return dw(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Es()[t.schema][t.table];if(!r.createdTimeProperty)throw new ds.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:hs.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!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,pw.async_set_timeout)(Sz),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%pz===0&&await _();return u.length>0&&await _(),n?dw(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,O_.default)(t,"hashes");if(r)throw r;return _w(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of _w(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&hs.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,O_.default)(t,"value");if(s)throw s;let n=Hs(t);if(!n)throw new ds.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===hs.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:ip(t,n)})}async getDataByValue(t,r){let s=new Map,n=Hs(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){Hs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Hs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Hs(t),s={};switch(t.search_type){case hs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[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 s;case hs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of fw(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return fw(r,t.search_values?.[0],t.search_values?.[1])}}};a(ip,"getSelect");a(_w,"getRecords");a(Hs,"getTable");a(dw,"createDeleteResponse");a(fw,"groupRecordsInHistory")});var cs=T((sue,gw)=>{"use strict";var{ResourceBridge:Tz}=(Tw(),Z(Sw)),gz=X();gz.initSync();var N_;function Rz(){return N_||(N_=new Tz,N_)}a(Rz,"getBridge");gw.exports=Rz()});var Nw=T((iue,Ow)=>{"use strict";var Rw=require("lodash"),Rc=require("mathjs"),Az=require("jsonata"),Aw=$();Ow.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Rw.uniqWith(e,Rw.isEqual):e,searchJSON:Oz,mad:Ac.bind(null,Rc.mad),mean:Ac.bind(null,Rc.mean),mode:Ac.bind(null,Rc.mode),prod:Ac.bind(null,Rc.prod),median:Ac.bind(null,Rc.median)};function Ac(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Ac,"aggregateFunction");function Oz(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(Aw.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Aw.isEmpty(this.__ala__.res[r])){let s=Az(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(Oz,"searchJSON")});var yw=T((aue,bw)=>{"use strict";var rt=require("moment"),ap="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;bw.exports={current_date:()=>rt().utc().format("YYYY-MM-DD"),current_time:()=>rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return rt(e).utc().format("YYYY");case"month":return rt(e).utc().format("MM");case"day":return rt(e).utc().format("DD");case"hour":return rt(e).utc().format("HH");case"minute":return rt(e).utc().format("mm");case"second":return rt(e).utc().format("ss");case"millisecond":return rt(e).utc().format("SSS");default:break}},date:e=>rt(e).utc().format(ap),date_format:(e,t)=>rt(e).utc().format(t),date_add:(e,t,r)=>rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=rt(e).utc(),n=rt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>rt().utc().valueOf(),get_server_time:()=>rt().format(ap),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(ap)}});var Lw=T((cue,Cw)=>{"use strict";var Nz=require("@turf/area"),bz=require("@turf/length"),yz=require("@turf/circle"),Iz=require("@turf/difference"),wz=require("@turf/distance"),Cz=require("@turf/boolean-contains"),Lz=require("@turf/boolean-equal"),Dz=require("@turf/boolean-disjoint"),Uz=require("@turf/helpers"),Iw=y(),de=$();Cw.exports={geoArea:Mz,geoLength:Pz,geoCircle:vz,geoDifference:Bz,geoDistance:ww,geoNear:Hz,geoContains:qz,geoEqual:Fz,geoCrosses:Gz,geoConvert:xz};var cp="geo1 is required",up="geo2 is required";function Mz(e){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),Nz.default(e)}a(Mz,"geoArea");function Pz(e,t){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),bz.default(e,{units:t||"kilometers"})}a(Pz,"geoLength");function vz(e,t,r){if(de.isEmpty(e))throw new Error("point is required");if(de.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),yz.default(e,t,{units:r||"kilometers"})}a(vz,"geoCircle");function Bz(e,t){if(de.isEmpty(e))throw new Error("poly1 is required");if(de.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),Iz(e,t)}a(Bz,"geoDifference");function ww(e,t,r){if(de.isEmpty(e))throw new Error("point1 is required");if(de.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),wz.default(e,t,{units:r||"kilometers"})}a(ww,"geoDistance");function Hz(e,t,r,s){if(de.isEmpty(e))throw new Error("point1 is required");if(de.isEmpty(t))throw new Error("point2 is required");if(de.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return ww(e,t,s)<=r}a(Hz,"geoNear");function qz(e,t){if(de.isEmpty(e))throw new Error(cp);if(de.isEmpty(e))throw new Error(up);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),Cz.default(e,t)}a(qz,"geoContains");function Fz(e,t){if(de.isEmpty(e))throw new Error(cp);if(de.isEmpty(e))throw new Error(up);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),Lz.default(e,t)}a(Fz,"geoEqual");function Gz(e,t){if(de.isEmpty(e))throw new Error(cp);if(de.isEmpty(e))throw new Error(up);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),!Dz.default(e,t)}a(Gz,"geoCrosses");function xz(e,t,r){if(de.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(de.isEmpty(t))throw new Error("geo_type is required");if(de.isEmpty(Iw.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Iw.GEO_CONVERSION_ENUM).join(",")}`);return Uz[t](e,r)}a(xz,"geoConvert")});var b_=T((lue,Dw)=>{var Ui=Nw(),Nr=yw(),qs=Lw();Dw.exports=e=>{e.aggr.mad=e.aggr.MAD=Ui.mad,e.aggr.mean=e.aggr.MEAN=Ui.mean,e.aggr.mode=e.aggr.MODE=Ui.mode,e.aggr.prod=e.aggr.PROD=Ui.prod,e.aggr.median=e.aggr.MEDIAN=Ui.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ui.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ui.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Nr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Nr.current_time,e.fn.extract=e.fn.EXTRACT=Nr.extract,e.fn.date=e.fn.DATE=Nr.date,e.fn.date_format=e.fn.DATE_FORMAT=Nr.date_format,e.fn.date_add=e.fn.DATE_ADD=Nr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Nr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Nr.date_diff,e.fn.now=e.fn.NOW=Nr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Nr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Nr.get_server_time,e.fn.getdate=e.fn.GETDATE=Nr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Nr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=qs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=qs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=qs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=qs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=qs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=qs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=qs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=qs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=qs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=qs.geoNear}});var vw=T((_ue,Pw)=>{"use strict";var Oc=require("lodash"),It=require("alasql");It.options.cache=!1;var kz=b_(),Uw=require("clone"),y_=require("recursive-iterator"),re=G(),ie=$(),Lo=cs(),Vz=y(),{hdb_errors:$z}=j(),{getDatabases:Mw}=(fe(),Z(Ce)),Yz="IS NULL",ms="There was a problem performing this search. Please check the logs and try again.";kz(It);var lp=class{static{a(this,"SQLSearch")}constructor(t,r){if(ie.isEmpty(t))throw re.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(),ie.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ie.isEmptyOrZeroLength(s))return re.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw re.error("Error thrown from checkEmptySQL in SQLSearch class method search."),re.error(s),new Error(ms)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw re.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),re.error(s),new Error(ms)}if(Object.keys(this.data).length===0)return re.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw re.error("Error thrown from processJoins in SQLSearch class method search."),re.error(s),new Error(ms)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw re.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),re.error(s),new Error(ms)}try{return t=await this._finalSQL(),t}catch(s){throw re.error("Error thrown from finalSQL in SQLSearch class method search."),re.error(s),new Error(ms)}}_getColumns(){let t=new y_(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(Uw(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Oc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=Mw()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ie.isEmpty(this.statement.where)){re.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new y_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ie.isEmpty(r)&&r.right)if(ie.isNotEmptyAndHasValue(r.right.value)){let s=ie.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new It.yy.LogicValue({value:s}):r.right instanceof It.yy.StringValue&&!ie.isEmpty(s)&&ie.autoCasterIsNumberCheck(s.toString())&&(r.right=new It.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ie.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new It.yy.LogicValue({value:i}):s instanceof It.yy.StringValue&&ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new It.yy.NumValue({value:i}))});if(t){re.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new y_(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!ie.isEmpty(Vz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ie.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ie.isEmptyOrZeroLength(r.left.columnid)||ie.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(ie.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"=":!ie.isEmpty(r.right.value)||!ie.isEmpty(r.left.value)?s.add(ie.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)s.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,...s])}}}_setAliasesForColumns(){if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&ie.isEmptyOrZeroLength(this.statement.from)&&ie.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Oc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(ie.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ie.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&!ie.isEmptyOrZeroLength(this.columns.columns))return t;if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&ie.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await It.promise(r)}catch(r){throw re.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),re.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(Uw(s))})}_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,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(ie.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(Yz)>-1&&this.tables.forEach(n=>{let i={columnid:Mw()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Oc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ie.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!ie.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await Lo.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(ms)}else try{c.search_attribute=n.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 Lo.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(E)))}))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(ms)}else if(!ie.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!ie.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 Lo.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,ie.autoCast(p)));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(p)))}}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),re.error(l),new Error(ms)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await Lo.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ie.autoCast(d)));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(d)))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),re.error(l),new Error(ms)}}}_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 It.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(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.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 s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new It.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new It.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 n=t.is_func?new It.yy.FuncValue:new It.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.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={};n.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:"",_="";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&&(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,n);f=await It.promise(h,t),t=null}catch(E){throw re.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),re.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=Oc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,R=p.length;S<R;S++){let b=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[b]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new y_(this.columns);for(let{node:i}of n)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)&&s.push(o)}}s=Oc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw re.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),re.error(i),new Error(ms)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await Lo.getDataByHash(c),_=n.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=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getData."),re.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(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.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 n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();re.trace(`Final SQL: ${n}`),s=await It.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),re.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw re.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),re.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return re.error($z.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),re.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${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=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await Lo.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw re.error("There was an error when processing this SQL operation. Check your logs"),re.error(o),new Error(ms)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Pw.exports=lp});var Fr=T((fue,Bw)=>{"use strict";var Kz=cO();Bw.exports={searchByConditions:Qz,searchByHash:zz,searchByValue:Jz,search:Xz};var _p=cs(),{transformReq:dp}=$(),Wz=vw();async function Qz(e){return dp(e),_p.searchByConditions(e)}a(Qz,"searchByConditions");async function zz(e){dp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of _p.searchByHash(e))r&&t.push(r);return t}a(zz,"searchByHash");async function Jz(e){dp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of _p.searchByValue(e))t.push(r);return t}a(Jz,"searchByValue");function Xz(e,t){try{let r=new Kz(e);r.validate(),new Wz(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(Xz,"search")});var I_=T((hue,Hw)=>{"use strict";var jz=cs();Hw.exports={writeTransaction:Zz};function Zz(e,t,r){return jz.writeTransaction(e,t,r)}a(Zz,"writeTransaction")});var xw=T((Sue,Gw)=>{"use strict";var e2=Fr(),t2=qn(),qw=G(),r2=Gr(),pue=I_(),s2=require("clone"),Ep=require("alasql"),n2=b_(),Fw=require("util"),i2=Fw.promisify(t2.getTableSchema),o2=Fw.promisify(e2.search),a2=y(),fp=$();n2(Ep);Gw.exports={update:u2};var c2="There was a problem performing this update. Please check the logs and try again.";async function u2({statement:e,hdb_user:t}){let r=await i2(e.table.databaseid,e.table.tableid),s=l2(e.columns);fp.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=s2(n),c=fp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=Ep.parse(u).statements[0],l=await o2(_),d=_2(s,l);return d2(o,d,t)}a(u2,"update");function l2(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Ep.compile(`SELECT ${r.expression.toString()} AS [${a2.FUNC_VAL}] FROM ?`)}),t}catch(t){throw qw.error(t),new Error(c2)}}a(l2,"createUpdateRecord");function _2(e,t){return fp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(_2,"buildUpdateRecords");async function d2(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await r2.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){qw.error(`Error delete new_attributes from update response: ${i}`)}return n}a(d2,"updateRecords")});var Vw=T((Aue,kw)=>{var f2=require("alasql"),E2=Fr(),h2=G(),m2=cs(),mp=require("util"),hp=$(),p2=y(),S2=qn(),gue=I_(),Rue=Gr(),T2="record",g2="successfully deleted",R2=mp.callbackify(b2),A2=mp.promisify(E2.search),O2=mp.promisify(S2.getTableSchema);kw.exports={convertDelete:R2};function N2(e){return`${e.deleted_hashes.length} ${T2}${e.deleted_hashes.length===1?"":"s"} ${g2}`}a(N2,"generateReturnMessage");async function b2({statement:e,hdb_user:t}){let r=await O2(e.table.databaseid,e.table.tableid);hp.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=hp.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=f2.parse(o).statements[0],u={operation:p2.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await A2(c);let _=await m2.deleteRecords(u);return hp.isEmptyOrZeroLength(_.message)&&(_.message=N2(_)),delete _.txn_time,_}catch(_){throw h2.error(_),_.hdb_code?_.message:_}}a(b2,"convertDelete")});var Qw=T((Nue,Ww)=>{"use strict";var y2=gi(),{hdb_errors:$w}=j(),{getDatabases:Yw}=(fe(),Z(Ce));Ww.exports={checkSchemaExists:Kw,checkSchemaTableExists:I2,schema_describe:y2};async function Kw(e){if(!Yw()[e])return $w.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Kw,"checkSchemaExists");async function I2(e,t){let r=await Kw(e);if(r)return r;if(!Yw()[e][t])return $w.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(I2,"checkSchemaTableExists")});var Nc=T((yue,w2)=>{w2.exports={name:"harperdb",version:"4.2.2",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: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: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:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","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.425.0","@aws-sdk/lib-storage":"3.418.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.4.0","@fastify/static":"~6.11.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","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.23.2","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.8.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.0-beta.2",lodash:"4.17.21",mathjs:"11.11.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.9",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.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.6",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"^8.14.1",yaml:"2.3.2"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"0.27.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.2.2","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 wc={};qe(wc,{addAnalyticsListener:()=>Ic,recordAction:()=>br,recordActionBinary:()=>kr,setAnalyticsEnabled:()=>C2});function C2(e){nC=e}function br(e,t,r,s,n){if(!nC)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=L_.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:s,type:n},L_.set(i,o)}w_||L2()}function kr(e,t,r,s,n){br(!!e,t,r,s,n)}function Ic(e){aC.push(e)}function L2(){w_=performance.now(),setTimeout(async()=>{let e=performance.now()-w_;w_=0;let t=[],r={time:Date.now(),period:e,threadId:Mi.threadId,metrics:t};for(let[n,i]of L_){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 cC){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 uC()}let s=process.memoryUsage();t.push({metric:"memory",threadId:Mi.threadId,byThread:!0,...s});for(let n of aC)n(t);L_=new Map,Mi.parentPort?Mi.parentPort.postMessage({type:oC,report:r}):dC({report:r})},iC).unref()}async function D2(e,t=6e4){let r=Tp(),s=lC(),n;for(let h of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){n=h.value.time;break}if(Date.now()-t<n)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:R}=p;for(let b of S||[]){let{path:O,method:Y,type:Q,metric:F,count:w,total:K,distribution:B,threads:x,...te}=b;w||(w=1);let be=F+(O?"-"+O:"");Y!==void 0&&(be+="-"+Y),Q!==void 0&&(be+="-"+Q);let se=o.get(be);if(se){if(se.threads){let Pe=se.threads[R];if(Pe)se=Pe;else{se.threads[R]=Object.assign({},te);continue}}se.count||(se.count=1);let vt=se.count;for(let Pe in te){let At=te[Pe];typeof At=="number"&&(se[Pe]=(se[Pe]*vt+At*w)/(vt+w))}se.count+=w,K>=0&&(se.total+=K,se.ratio=se.total/se.count)}else se=Object.assign({period:t},b),delete se.distribution,o.set(be,se),se.byThread&&(se.threads=[],se.threads[R]=Object.assign({},te),u.push(se));if(B){B=B.map(Pe=>typeof Pe=="number"?{value:Pe,count:1}:Pe);let vt=c.get(be);vt?vt.push(...B):c.set(be,B)}}await uC()}for(let h of u){let{path:p,method:S,type:R,metric:b,count:O,total:Y,distribution:Q,threads:F,...w}=h;F=F.filter(K=>K);for(let K in w){if(typeof h[K]!="number")continue;let B=0;for(let x of F){let te=x[K];typeof te=="number"&&(B+=te)}h[K]=B}h.count=F.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((Pe,At)=>Pe.value>At.value?1:-1);let R=S.count-1,b=[],O=0,Y=0,Q;for(let Pe of cC){let At=R*Pe;for(;O<At;)Q=p[Y++],O+=Q.count,Y===1&&O--;let es=p[Y>1?Y-2:0];Q||(Q=p[0]),b.push(Q.value-(Q.value-es.value)*(O-At)/Q.count)}let[F,w,K,B,x,te,be,se,vt]=b;Object.assign(S,{p1:F,p10:w,p25:K,median:B,p75:x,p90:te,p95:be,p99:se,p999:vt})}let l;for(let[h,p]of o)p.id=(0,C_.getNextMonotonicTime)(),p.time=_,s.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||s.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,C_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-zw,active:E-Jw,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}zw=f,Jw=E}async function Xw(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function Tp(){return jw||(jw=et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function lC(){return Zw||(Zw=et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function P2(){_C=!0;let e=(0,yc.get)(Sp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await D2(iC,e),await Xw(Tp(),U2),await Xw(lC(),M2)},Math.min(e/2,2147483647)).unref()}function dC(e,t){let r=e.report;r.threadId=t?.threadId||Mi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(eC+=s.mean*s.count);r.totalBytesProcessed=eC,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(tC.get(t))}),tC.set(t,t.performance.eventLoopUtilization())),r.id=(0,C_.getNextMonotonicTime)(),Tp().primaryStore.put(r.id,r),_C||P2(),v2&&(fC=H2(r))}async function H2(e){if(await fC,!Yn){let r=(0,bc.dirname)((0,sC.getLogFilePath)());try{Yn=await(0,pp.open)((0,bc.join)(r,"analytics.log"),"r+")}catch{Yn=await(0,pp.open)((0,bc.join)(r,"analytics.log"),"w+")}}let t=(await Yn.stat()).size;if(t>B2){let r=Buffer.alloc(t);await Yn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Yn.write(r,{position:0}),await Yn.truncate(r.length),t=r.length}await Yn.write(JSON.stringify(e)+`
6
- `,t)}var Mi,rC,sC,bc,pp,C_,yc,Sp,L_,nC,w_,iC,oC,aC,cC,zw,Jw,uC,U2,M2,jw,Zw,_C,eC,tC,v2,fC,Yn,B2,_n=Te(()=>{Mi=require("worker_threads"),rC=D(Je());fe();sC=D(G()),bc=require("path"),pp=require("fs/promises"),C_=D(Er()),yc=D(X()),Sp=D(y());hr();(0,yc.initSync)();L_=new Map,nC=(0,yc.get)(Sp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(C2,"setAnalyticsEnabled");a(br,"recordAction");ut.recordAnalytics=br;a(kr,"recordActionBinary");w_=0,iC=1e3,oC="analytics-report",aC=[];a(Ic,"addAnalyticsListener");cC=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(L2,"sendAnalytics");a(D2,"aggregation");zw=0,Jw=0,uC=a(()=>new Promise(setImmediate),"rest");a(Xw,"cleanup");U2=36e5,M2=31536e6;a(Tp,"getRawAnalyticsTable");a(lC,"getAnalyticsTable");(0,rC.setChildListenerByType)(oC,dC);a(P2,"startScheduledTasks");eC=0,tC=new Map,v2=!1;a(dC,"recordAnalytics");B2=1e6;a(H2,"logAnalytics")});var _t=T((Gue,UC)=>{"use strict";var wt=X();wt.initSync();var q2=require("fs-extra"),F2=require("semver"),Dc=require("path"),{monotonicFactory:G2}=require("ulidx"),hC=G2(),x2=require("util"),mC=require("child_process"),k2=x2.promisify(mC.exec),V2=mC.spawn,Re=Ve(),Oe=y(),Op=$(),Vr=G(),D_=nn(),$2=I_(),Cc=gr(),{onMessageByType:Y2}=Je(),{isMainThread:K2}=require("worker_threads"),{Encoder:W2,decode:Np}=require("msgpackr"),pC=new W2,{isEmpty:Pi}=Op,SC=xr(),Q2=48*36e11,z2=5e9;K2&&Y2(Oe.ITC_EVENT_TYPES.RESTART,()=>{ps=void 0,Mo=void 0});var{connect:J2,StorageType:TC,RetentionPolicy:gC,AckPolicy:U_,DeliverPolicy:M_,DiscardPolicy:X2,NatsConnection:Bue,JetStreamManager:Hue,JetStreamClient:que,StringCodec:Fue,JSONCodec:j2,createInbox:bp,headers:Z2,ErrorCode:EC}=require("nats"),{PACKAGE_ROOT:eJ}=y(),tJ=Nc(),{recordAction:rJ}=(_n(),Z(wc)),RC=j2(),sJ="clustering",nJ=tJ.engines[Re.NATS_SERVER_NAME],iJ=Dc.join(eJ,"dependencies"),Ap=Dc.join(iJ,`${process.platform}-${process.arch}`,Re.NATS_BINARY_NAME),gp,Rp,Lc,Do,Uo;UC.exports={runCommand:AC,checkNATSServerInstalled:oJ,createConnection:yp,getConnection:P_,getJetStreamManager:Uc,getJetStream:OC,getNATSReferences:jt,getServerList:cJ,createLocalStream:Ip,listStreams:NC,deleteLocalStream:uJ,getServerConfig:Mc,listRemoteStreams:lJ,viewStream:_J,viewStreamIterator:dJ,publishToStream:fJ,createWorkQueueStream:EJ,addSourceToWorkStream:yC,request:mJ,removeSourceFromWorkStream:wC,reloadNATS:wp,reloadNATSHub:pJ,reloadNATSLeaf:SJ,extractServerName:IC,requestErrorHandler:TJ,updateWorkStream:gJ,createLocalTableStream:LC,createTableStreams:RJ,purgeTableStream:DC,purgeSchemaTableStreams:AJ,getStreamInfo:OJ,updateLocalStreams:bJ,closeConnection:aJ,getJsmServerName:Pc,addNatsMsgHeader:bC,updateIngestStreamConsumer:hJ};async function AC(e,t=void 0){let{stdout:r,stderr:s}=await k2(e,{cwd:t});if(s)throw new Error(s.replace(`
1
+ "use strict";var NH=Object.create;var Na=Object.defineProperty;var bH=Object.getOwnPropertyDescriptor;var yH=Object.getOwnPropertyNames;var IH=Object.getPrototypeOf,wH=Object.prototype.hasOwnProperty;var a=(e,t)=>Na(e,"name",{value:t,configurable:!0});var Te=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),qe=(e,t)=>{for(var r in t)Na(e,r,{get:t[r],enumerable:!0})},RR=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of yH(t))!wH.call(e,n)&&n!==r&&Na(e,n,{get:()=>t[n],enumerable:!(s=bH(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?NH(IH(e)):{},RR(t||!e||!e.__esModule?Na(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>RR(Na({},"__esModule",{value:!0}),e);var NR=T((zse,OR)=>{var CH=require("fast-glob"),{statSync:dE,existsSync:fE,readFileSync:LH,writeFileSync:DH}=require("fs"),{spawnSync:UH,spawn:MH,execFileSync:Qse}=require("child_process"),{isMainThread:PH}=require("worker_threads"),{join:Mn,relative:AR}=require("path"),{PACKAGE_ROOT:rs}=y(),{tmpdir:vH,platform:BH}=require("os");require("source-map-support").install();var HH=["resources","server","dataLayer","components"],ba="ts-build",EE,qH=__filename.endsWith("tsBuild.js");if(qH){if(PH){let r;try{dE(Mn(rs,ba)),r=!0}catch{}if(r)for(let s of CH.sync(HH.map(n=>n+"/**/*.ts"),{cwd:rs})){let n=0,i=0;try{n=dE(Mn(rs,s)).mtimeMs-5e3,i=dE(Mn(rs,ba,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),EE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),EE=!0;if(EE){let s=Mn(rs,"node_modules/.bin/tsc");BH()==="win32"&&(s+=".cmd");let n=UH(s,{cwd:rs});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Mn(vH(),"harperdb-tsc.pid"),o;if(fE(i))try{process.kill(+LH(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=MH(s,["--watch"],{cwd:rs,detached:!0,stdio:"ignore"});DH(i,c.pid.toString()),c.unref()}}}}let e=OR.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(rs)&&!s[0].includes("node_modules")){let i=AR(rs,s[0]),o;i.startsWith(ba)?o=Mn(rs,AR(ba,i)):o=Mn(rs,ba,i);let c=Mn(o,r),u=c+".js";if(fE(u))return u;if(c.includes(".")&&fE(c))return c}return t(r,s,n)}}});var y=T((jse,qR)=>{"use strict";var Pr=require("path"),FH=require("fs"),{relative:Jse,join:Xse}=Pr,{existsSync:GH}=FH;function xH(){let e=__dirname;for(;!GH(Pr.join(e,"package.json"));){let t=Pr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(xH,"getHDBPackageRoot");var Pn=xH(),bR="js",el=bR,kH="harperdb-config.yaml",VH="defaultConfig.yaml",$H="hdb",yR=`harperdb.${el}`,IR=`customFunctionsServer.${el}`,YH=`restartHdb.${el}`,mE="HarperDB",Zu="Custom Functions",tl="Clustering Hub",rl="Clustering Leaf",KH="Clustering Ingest Service",WH="Clustering Reply Service",QH="foreground.pid",zH="hdb.pid",JH="data",XH={HDB:mE,CLUSTERING_HUB:tl,CLUSTERING_LEAF:rl,CLUSTERING_INGEST_SERVICE:KH,CLUSTERING_REPLY_SERVICE:WH,CUSTOM_FUNCTIONS:Zu,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"},jH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},ZH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},eq={harperdb:mE,"clustering hub":tl,"clustering leaf":rl,"custom functions":Zu,custom_functions:Zu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},tq={CLUSTERING_HUB_PROC_DESCRIPTOR:tl,CLUSTERING_LEAF_PROC_DESCRIPTOR:rl},hE={HDB:Pr.join(Pn,"server/harperdb"),CUSTOM_FUNCTIONS:Pr.join(Pn,"server/customFunctions"),CLUSTERING_HUB:Pr.join(Pn,"server/nats"),CLUSTERING_LEAF:Pr.join(Pn,"server/nats")},rq={HDB:Pr.join(hE.HDB,yR),CUSTOM_FUNCTIONS:Pr.join(hE.CUSTOM_FUNCTIONS,IR)},sq={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Pr.join(Pn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Pr.join(Pn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Pr.join(Pn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},nq={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},wR="support@harperdb.io",iq="customer-success@harperdb.io",CR=1,oq=4141,LR="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",aq="https://www.harperdb.io/product",cq=`For support, please submit a request at ${LR} or contact ${wR}`,DR=`For license support, please contact ${iq}`,uq="None of the specified records were found.",lq="hash attribute not found",_q=`Your current license only supports ${CR} role. ${DR}`,dq="Your current license only supports 3 connections to a node.",fq="127.0.0.1",Eq=1,hq=/^\.$/,mq=/^\.\.$/,pq="U+002E",Sq=/\//g,Tq="U+002F",gq=/U\+002F/g,Rq=/^U\+002E$/,Aq=/^U\+002EU\+002E$/,Oq="d",Nq=999999,bq="*",yq="--max-old-space-size=",Iq="system",wq="__hdb_hash",Cq=".harperdb",Lq=".hdb",Dq="keys",Uq="hdb_boot_properties.file",Mq=".updateConfig.json",Pq="SIGTSTP",vq=24,Bq=6e4,Hq=448,qq="blob",Fq="trash",Gq="database",xq="schema",kq="transactions",Vq=".count",$q="id",Yq="PROCESS_NAME",UR={SETTINGS_PATH_KEY:"settings_path"},MR=require("lodash"),Kq={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",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},Wq={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},Qq={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},zq={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"},Jq={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"},dr="hdb_internal:",Xq={CREATE_SCHEMA:dr+"create_schema",CREATE_TABLE:dr+"create_table",CREATE_ATTRIBUTE:dr+"create_attribute",ADD_USER:dr+"add_user",ALTER_USER:dr+"alter_user",DROP_USER:dr+"drop_user",HDB_NODES:dr+"hdb_nodes",HDB_USERS:dr+"hdb_users",HDB_WORKERS:dr+"hdb_workers",CATCHUP:dr+"catchup",SCHEMA_CATCHUP:dr+"schema_catchup",WORKER_ROOM:dr+"cluster_workers"},jq={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"},Zq="060493.ks",eF=".license",tF={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",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"},rF={CSV:".csv",JSON:".json"},sF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},nF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},ya={};ya[J.INSERT]=J.INSERT;ya[J.UPDATE]=J.UPDATE;ya[J.UPSERT]=J.UPSERT;ya[J.DELETE]=J.DELETE;var ye=Object.create(null);ye[J.DESCRIBE_ALL]=J.DESCRIBE_ALL;ye[J.DESCRIBE_TABLE]=J.DESCRIBE_TABLE;ye[J.DESCRIBE_SCHEMA]=J.DESCRIBE_SCHEMA;ye[J.READ_LOG]=J.READ_LOG;ye[J.ADD_NODE]=J.ADD_NODE;ye[J.LIST_USERS]=J.LIST_USERS;ye[J.LIST_ROLES]=J.LIST_ROLES;ye[J.USER_INFO]=J.USER_INFO;ye[J.SQL]=J.SQL;ye[J.GET_JOB]=J.GET_JOB;ye[J.SEARCH_JOBS_BY_START_DATE]=J.SEARCH_JOBS_BY_START_DATE;ye[J.DELETE_FILES_BEFORE]=J.DELETE_FILES_BEFORE;ye[J.EXPORT_LOCAL]=J.EXPORT_LOCAL;ye[J.EXPORT_TO_S3]=J.EXPORT_TO_S3;ye[J.CLUSTER_STATUS]=J.CLUSTER_STATUS;ye[J.REMOVE_NODE]=J.REMOVE_NODE;ye[J.RESTART]=J.RESTART;ye[J.CUSTOM_FUNCTIONS_STATUS]=J.CUSTOM_FUNCTIONS_STATUS;ye[J.GET_CUSTOM_FUNCTIONS]=J.GET_CUSTOM_FUNCTIONS;ye[J.GET_CUSTOM_FUNCTION]=J.GET_CUSTOM_FUNCTION;ye[J.SET_CUSTOM_FUNCTION]=J.SET_CUSTOM_FUNCTION;ye[J.DROP_CUSTOM_FUNCTION]=J.DROP_CUSTOM_FUNCTION;ye[J.ADD_CUSTOM_FUNCTION_PROJECT]=J.ADD_CUSTOM_FUNCTION_PROJECT;ye[J.DROP_CUSTOM_FUNCTION_PROJECT]=J.DROP_CUSTOM_FUNCTION_PROJECT;ye[J.PACKAGE_CUSTOM_FUNCTION_PROJECT]=J.PACKAGE_CUSTOM_FUNCTION_PROJECT;ye[J.DEPLOY_CUSTOM_FUNCTION_PROJECT]=J.DEPLOY_CUSTOM_FUNCTION_PROJECT;var iF={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},oF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},PR={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"},aF=MR.invert(PR),cF={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"},N={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",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_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",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_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority"},vR={settings_path:UR.SETTINGS_PATH_KEY,hdb_root_key:N.ROOTPATH,hdb_root:N.ROOTPATH,rootpath:N.ROOTPATH,server_port_key:N.OPERATIONSAPI_NETWORK_PORT,server_port:N.OPERATIONSAPI_NETWORK_PORT,cert_key:N.TLS_CERTIFICATE,certificate:N.TLS_CERTIFICATE,private_key_key:N.TLS_PRIVATEKEY,private_key:N.TLS_PRIVATEKEY,http_secure_enabled_key:N.OPERATIONSAPI_NETWORK_HTTPS,https_on:N.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:N.OPERATIONSAPI_NETWORK_CORS,cors_on:N.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:N.LOGGING_LEVEL,log_level:N.LOGGING_LEVEL,log_path_key:N.LOGGING_ROOT,log_path:N.LOGGING_ROOT,clustering_node_name_key:N.CLUSTERING_NODENAME,node_name:N.CLUSTERING_NODENAME,clustering_enabled_key:N.CLUSTERING_ENABLED,clustering:N.CLUSTERING_ENABLED,max_http_threads:N.THREADS,max_hdb_processes:N.THREADS,server_timeout_key:N.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:N.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:N.LOGGING_AUDITLOG,disable_transaction_log:N.LOGGING_AUDITLOG,operation_token_timeout_key:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:N.HTTP_PORT,custom_functions_port:N.HTTP_PORT,custom_functions_directory_key:N.COMPONENTSROOT,custom_functions_directory:N.COMPONENTSROOT,max_custom_function_processes:N.THREADS,log_to_file:N.LOGGING_FILE,log_to_stdstreams:N.LOGGING_STDSTREAMS,local_studio_on:N.LOCALSTUDIO_ENABLED,clustering_port:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:N.CLUSTERING_USER,clustering_enabled:N.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:N.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:N.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:N.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:N.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:N.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:N.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:N.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:N.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:N.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:N.CLUSTERING_NODENAME,clustering_tls_certificate:N.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:N.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:N.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:N.CLUSTERING_TLS_INSECURE,clustering_tls_verify:N.CLUSTERING_TLS_VERIFY,clustering_loglevel:N.CLUSTERING_LOGLEVEL,clustering_republishmessages:N.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:N.CLUSTERING_DATABASELEVEL,customfunctions_network_port:N.HTTP_PORT,customfunctions_tls_certificate:N.TLS_CERTIFICATE,customfunctions_network_cors:N.HTTP_CORS,customfunctions_network_corsaccesslist:N.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:N.HTTP_HEADERSTIMEOUT,customfunctions_network_https:N.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:N.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:N.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:N.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:N.HTTP_TIMEOUT,http_threads:N.THREADS,threads:N.THREADS,http_session_affinity:N.HTTP_SESSIONAFFINITY,http_compressionthreshold:N.HTTP_COMPRESSIONTHRESHOLD,http_cors:N.HTTP_CORS,http_corsaccesslist:N.HTTP_CORSACCESSLIST,http_headerstimeout:N.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:N.HTTP_KEEPALIVETIMEOUT,http_timeout:N.HTTP_TIMEOUT,http_port:N.HTTP_PORT,http_secureport:N.HTTP_SECUREPORT,customfunctions_processes:N.THREADS,customfunctions_root:N.COMPONENTSROOT,localstudio_enabled:N.LOCALSTUDIO_ENABLED,logging_file:N.LOGGING_FILE,logging_level:N.LOGGING_LEVEL,logging_root:N.LOGGING_ROOT,logging_rotation_enabled:N.LOGGING_ROTATION_ENABLED,logging_rotation_compress:N.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:N.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:N.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:N.LOGGING_ROTATION_PATH,logging_stdstreams:N.LOGGING_STDSTREAMS,logging_auditlog:N.LOGGING_AUDITLOG,logging_auditretention:N.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:N.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:N.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:N.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:N.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:N.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:N.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:N.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:N.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:N.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:N.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:N.ROOTPATH,databases:N.DATABASES,storage_path:N.STORAGE_PATH,ignorescripts:N.IGNORE_SCRIPTS,mqtt_network_port:N.MQTT_NETWORK_PORT,mqtt_websocket:N.MQTT_WEBSOCKET,mqtt_network_secureport:N.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:N.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:N.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:N.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:N.AUTHENTICATION_CACHETTL,authentication_enablesessions:N.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:N.COMPONENTSROOT,tls_certificate:N.TLS_CERTIFICATE,tls_privatekey:N.TLS_PRIVATEKEY,tls_certificateauthority:N.TLS_CERTIFICATEAUTHORITY};for(let e in N){let t=N[e];vR[t.toLowerCase()]=t}var uF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},lF={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"},_F={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"},dF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},fF={VERSION_DEFAULT:"2.2.0"},EF={DEVELOPMENT:8192,DEFAULT:512},hF={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"},mF={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"},pF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},BR={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},SF=Symbol("metadata"),TF="__clustering__",gF=Object.values(BR),RF=15984864e5,HR={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},AF=MR.invert(HR),OF={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"},NF=111,bF=`\r
2
+ `,yF={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},IF=["*","%"],wF="unauthorized_access",CF="func_val",LF={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},DF={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},UF={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"},MF={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},PF={HTTP:"http"},vF={STOPPED:"stopped",ONLINE:"online"},BF="3.x.x",HF={SUCCESS:"success",FAILURE:"failure"},qF={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};qR.exports={LOCAL_HARPERDB_OPERATIONS:ye,HDB_SUPPORT_ADDRESS:wR,HDB_SUPPORT_URL:LR,HDB_PRICING_URL:aq,SUPPORT_HELP_MSG:cq,LICENSE_HELP_MSG:DR,HDB_PROC_NAME:yR,HDB_PROC_DESCRIPTOR:mE,CLUSTERING_LEAF_PROC_DESCRIPTOR:rl,CLUSTERING_HUB_PROC_DESCRIPTOR:tl,SYSTEM_SCHEMA_NAME:Iq,HASH_FOLDER_NAME:wq,HDB_HOME_DIR_NAME:Cq,UPDATE_FILE_NAME:Mq,LICENSE_KEY_DIR_NAME:Dq,BOOT_PROPS_FILE_NAME:Uq,JOB_TYPE_ENUM:lF,JOB_STATUS_ENUM:tF,SYSTEM_TABLE_NAMES:zq,SYSTEM_TABLE_HASH_ATTRIBUTES:Jq,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:rF,S3_BUCKET_AUTH_KEYS:sF,VALID_SQL_OPS_ENUM:nF,GEO_CONVERSION_ENUM:oF,HDB_SETTINGS_NAMES:PR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:aF,SERVICE_ACTIONS_ENUM:iF,CLUSTER_MESSAGE_TYPE_ENUM:_F,CLUSTER_CONNECTION_DIRECTION_ENUM:dF,CLUSTER_EVENTS_DEFS_ENUM:hF,PERIOD_REGEX:hq,DOUBLE_PERIOD_REGEX:mq,UNICODE_PERIOD:pq,FORWARD_SLASH_REGEX:Sq,UNICODE_FORWARD_SLASH:Tq,ESCAPED_FORWARD_SLASH_REGEX:gq,ESCAPED_PERIOD_REGEX:Rq,ESCAPED_DOUBLE_PERIOD_REGEX:Aq,REG_KEY_FILE_NAME:Zq,RESTART_TIMEOUT_MS:Bq,HDB_FILE_PERMISSIONS:Hq,DATABASES_DIR_NAME:Gq,LEGACY_DATABASES_DIR_NAME:xq,TRANSACTIONS_DIR_NAME:kq,LIMIT_COUNT_NAME:Vq,ID_ATTRIBUTE_STRING:$q,INSERT_MODULE_ENUM:Wq,UPGRADE_JSON_FIELD_NAMES_ENUM:Qq,RESTART_CODE:Pq,RESTART_CODE_NUM:vq,CLUSTER_OPERATIONS:ya,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:jq,HDB_INTERNAL_SC_CHANNEL_PREFIX:dr,INTERNAL_SC_CHANNELS:Xq,CLUSTERING_MESSAGE_TYPES:OF,HDB_FILE_SUFFIX:Lq,BLOB_FOLDER_NAME:qq,HDB_TRASH_DIR:Fq,ORIGINATOR_SET_VALUE:NF,LICENSE_VALUES:fF,RAM_ALLOCATION_ENUM:EF,TIME_STAMP_NAMES_ENUM:BR,TIME_STAMP_NAMES:gF,PERMS_UPDATE_RELEASE_TIMESTAMP:RF,SEARCH_NOT_FOUND_MESSAGE:uq,SEARCH_ATTRIBUTE_NOT_FOUND:lq,LICENSE_ROLE_DENIED_RESPONSE:_q,LICENSE_MAX_CONNS_REACHED:dq,BASIC_LICENSE_MAX_NON_CU_ROLES:CR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:oq,VALUE_SEARCH_COMPARATORS:HR,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:AF,LICENSE_FILE_NAME:eF,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:mF,NEW_LINE:bF,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Eq,MOMENT_DAYS_TAG:Oq,API_TURNOVER_SEC:Nq,LOOPBACK:fq,CODE_EXTENSION:el,WILDCARD_SEARCH_VALUE:bq,NODE_ERROR_CODES:pF,JAVASCRIPT_EXTENSION:bR,PERMS_CRUD_ENUM:yF,UNAUTHORIZED_PERMISSION_NAME:wF,SEARCH_WILDCARDS:IF,FUNC_VAL:CF,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:LF,JWT_ENUM:DF,CLUSTERING_FLAG:TF,ITC_EVENT_TYPES:UF,CUSTOM_FUNCTION_PROC_NAME:IR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Zu,SERVICES:MF,THREAD_TYPES:PF,MEM_SETTING_KEY:yq,HDB_RESTART_SCRIPT:YH,PROCESS_DESCRIPTORS:XH,SERVICE_SERVERS:rq,SERVICE_SERVERS_CWD:hE,PROCESS_DESCRIPTORS_VALIDATE:eq,LAUNCH_SERVICE_SCRIPTS:sq,LOG_LEVELS:ZH,PROCESS_NAME_ENV_PROP:Yq,LOG_NAMES:jH,PM2_PROCESS_STATUSES:vF,CONFIG_PARAM_MAP:vR,CONFIG_PARAMS:N,HDB_CONFIG_FILE:kH,HDB_DEFAULT_CONFIG_FILE:VH,ROLE_TYPES_ENUM:nq,BOOT_PROP_PARAMS:UR,INSTALL_PROMPTS:Kq,HDB_ROOT_DIR_NAME:$H,CLUSTERING_PROCESSES:tq,FOREGROUND_PID_FILE:QH,PACKAGE_ROOT:Pn,PRE_4_0_0_VERSION:BF,DATABASES_PARAM_CONFIG:uF,METADATA_PROPERTY:SF,AUTH_AUDIT_STATUS:HF,AUTH_AUDIT_TYPES:qF,HDB_PID_FILE:zH,DEFAULT_DATABASE_NAME:JH,LEGACY_CONFIG_PARAMS:cF};NR()});var pE=T((ene,xR)=>{"use strict";var FR=require("minimist");xR.exports=FF;function FF(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=GR(process.env),s=GR(FR(process.argv))):(r=process.env,s=FR(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(FF,"assignCMDENVVariables");function GR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(GR,"objKeysToLowerCase")});var G=T((rne,NE)=>{"use strict";var _i=require("fs-extra"),{workerData:GF,threadId:xF}=require("worker_threads"),en=require("path"),$R=require("yaml"),YR=require("properties-reader"),ct=y(),kR=pE(),kF=require("os"),{PACKAGE_ROOT:TE}=y(),{_assignPackageExport:VF}=require("../../index"),wa={};for(let e in console)wa[e]||(wa[e]=console[e]);var Kt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},KR={STDOUT:"stdOut",STDERR:"stdErr"},$F=en.join(TE,"logs"),YF=en.join(TE,"config/yaml/",ct.HDB_DEFAULT_CONFIG_FILE),KF=1e4,Zs,Is,Yt,sl,nl,Ca,so,Ia;Ia===void 0&&WR();NE.exports={notify:JR,fatal:XR,error:La,warn:OE,info:il,debug:AE,trace:RE,setLogLevel:ZF,log_level:Yt,loggerWithTag:WF,suppressLogging:QF,initLogSettings:WR,setupConsoleLogging:QR,logCustomLevel:XF,closeLogFile:gE,getLogFilePath:()=>Ca,OUTPUTS:KR,AuthAuditLog:rG};VF("logger",NE.exports);function WR(e=!1){try{if(Ia===void 0||e){gE();let t=jF(),r=kR(["ROOTPATH"]);try{Ia=YR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!_i.pathExistsSync(en.join(r.ROOTPATH,ct.HDB_CONFIG_FILE)))throw s}({level:Yt,config_log_path:nl,to_file:Zs,to_stream:Is}=eG(r.ROOTPATH?en.join(r.ROOTPATH,ct.HDB_CONFIG_FILE):Ia.get("settings_path"))),sl=ct.LOG_NAMES.HDB,Ca=en.join(nl,sl)}}catch(t){if(Ia=void 0,t.code===ct.NODE_ERROR_CODES.ENOENT){let r=kR(Object.keys(ct.CONFIG_PARAM_MAP),!0);for(let o in r){let c=ct.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===ct.CONFIG_PARAMS.LOGGING_LEVEL){Yt=u;continue}if(c===ct.CONFIG_PARAMS.LOGGING_STDSTREAMS){Is=u;continue}c===ct.CONFIG_PARAMS.LOGGING_FILE&&(Zs=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=tG();Zs=Zs===void 0?n:Zs,Zs=VR(Zs),Is=Is===void 0?i:Is,Is=VR(Is),Yt=Yt===void 0?s:Yt,nl=$F,sl=ct.LOG_NAMES.INSTALL,Ca=en.join(nl,sl);return}throw La("Error initializing log settings"),La(t),t}process.env.DEV_MODE&&(Is=!0),QR()}a(WR,"initLogSettings");var SE=!0;function QR(){ro("error",La),ro("warn",OE),ro("log",il),ro("info",il),ro("debug",AE),ro("trace",RE)}a(QR,"setupConsoleLogging");function ro(e,t){console[e]=function(...r){if(SE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return wa[e](...r)}}a(ro,"logConsole");function WF(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(JR),fatal:r(XR),error:r(La),warn:r(OE),info:r(il),debug:r(AE),trace:r(RE)};function r(s){return function(...n){return s(t,...n)}}}a(WF,"loggerWithTag");function QF(e){try{SE=!1,e()}finally{SE=!0}}a(QF,"suppressLogging");var zF=GF?.name?.replace(/ /g,"-")||"main";function tn(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-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||zF+"/"+xF);c<n;c++){let _=t[c];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
3
+ `}a(tn,"createLogRecord");function Da(e){Zs&&zR(e),Is&&process.stdout.write(e)}a(Da,"logStdOut");function ol(e){Zs&&zR(e),Is&&process.stderr.write(e)}a(ol,"logStdErr");function zR(e){JF(),so?_i.appendFileSync(so,e):wa.log(e)}a(zR,"logToFile");function gE(){try{_i.closeSync(so)}catch{}so=null}a(gE,"closeLogFile");function JF(){if(!so){try{if(!Ca)debugger;so=_i.openSync(Ca,"a")}catch(e){wa.error(e)}setTimeout(()=>{gE()},KF).unref()}}a(JF,"openLogFile");function il(...e){Kt[Yt]<=Kt.info&&Da(tn("info",e))}a(il,"info");function RE(...e){Kt[Yt]<=Kt.trace&&Da(tn("trace",e))}a(RE,"trace");function La(...e){Kt[Yt]<=Kt.error&&ol(tn("error",e))}a(La,"error");function AE(...e){Kt[Yt]<=Kt.debug&&Da(tn("debug",e))}a(AE,"debug");function JR(...e){Kt[Yt]<=Kt.notify&&Da(tn("notify",e))}a(JR,"notify");function XR(...e){Kt[Yt]<=Kt.fatal&&ol(tn("fatal",e))}a(XR,"fatal");function OE(...e){Kt[Yt]<=Kt.warn&&ol(tn("warn",e))}a(OE,"warn");function XF(e,t,...r){t===KR.STDERR?ol(tn(e,r)):Da(tn(e,r))}a(XF,"logCustomLevel");function jF(){let e;try{e=kF.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=en.join(e,ct.HDB_HOME_DIR_NAME,ct.BOOT_PROPS_FILE_NAME);return _i.existsSync(t)||(t=en.join(TE,"utility/hdb_boot_properties.file")),t}a(jF,"getPropsFilePath");function ZF(e){Yt=e}a(ZF,"setLogLevel");function VR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(VR,"autoCastBoolean");function eG(e){try{if(e.includes("config/settings.js")){let o=YR(e);return{level:o.get(ct.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:en.dirname(o.get(ct.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(ct.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(ct.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=$R.parseDocument(_i.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===ct.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(eG,"getLogConfig");function tG(){try{let e=$R.parseDocument(_i.readFileSync(YF,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(tG,"getDefaultConfig");function rG(e,t,r,s,n,i){this.username=e,this.status=t,this.type=r,this.originating_ip=s,this.request_method=n,this.path=i}a(rG,"AuthAuditLog")});var ZR=T((nne,jR)=>{"use strict";var sG=require("util"),nG=require("path"),iG=require("child_process"),oG=sG.promisify(iG.execFile),aG=1e3*1e3*10;jR.exports={findPs:cG};async function cG(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await oG("ps",["wwxo",`pid,${r}`],{maxBuffer:aG});for(let n of s.trim().split(`
4
+ `).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.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,s])=>({pid:Number.parseInt(r,10),name:nG.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(cG,"findPs")});var ze=T((one,tA)=>{"use strict";var uG="__dbis__",lG="__txns__",_G="__environment_name__",dG="__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"},EG=["__createdtime__","__updatedtime__"],hG="\uFFFF",eA={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},mG=Object.values(eA);tA.exports={AUDIT_STORE_NAME:lG,INTERNAL_DBIS_NAME:uG,DBI_DEFINITION_NAME:dG,SEARCH_TYPES:fG,TIMESTAMP_NAMES:EG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:_G,TRANSACTIONS_DBI_NAMES_ENUM:eA,TRANSACTIONS_DBIS:mG,OVERFLOW_MARKER:hG}});var fr=T((ane,lA)=>{"use strict";var rA=y(),sA=ze(),nA={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},iA=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),oA={500:iA("There was an error processing your request."),400:"Invalid request"},pG=oA[nA.INTERNAL_SERVER_ERROR],SG={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.`},TG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},gG={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"},RG={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 ${sA.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${sA.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"},AG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${rA.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 ${rA.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"},aA={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"},OG={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."},NG={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`},bG={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"},yG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},IG={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`},cA={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.`},uA={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}`},wG={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."},CG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},LG={...aA,...gG,...SG,...OG,...NG,...bG,...yG,...IG,...AG,...cA,...uA,...wG,...CG,...TG};lA.exports={CHECK_LOGS_WRAPPER:iA,HDB_ERROR_MSGS:LG,DEFAULT_ERROR_MSGS:oA,DEFAULT_ERROR_RESP:pG,HTTP_STATUS_CODES:nA,LMDB_ERRORS_ENUM:RG,AUTHENTICATION_ERROR_MSGS:aA,VALIDATION_ERROR_MSGS:cA,ITC_ERRORS:uA}});var j=T((une,fA)=>{"use strict";var no=fr(),DG=G(),UG=y(),al=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,_A),this.statusCode=s||no.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(no.DEFAULT_ERROR_MSGS[s]?no.DEFAULT_ERROR_MSGS[s]:no.DEFAULT_ERROR_MSGS[no.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&DG[n](i)}},bE=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}},yE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function _A(e,t,r,s=UG.LOG_LEVELS.ERROR,n=null,i=!1){if(dA(e))return e;let o=new al(e,t,r,s,n);return i&&delete o.stack,o}a(_A,"handleHDBError");function dA(e){return e.__proto__.constructor.name===al.name}a(dA,"isHDBError");fA.exports={isHDBError:dA,handleHDBError:_A,ClientError:bE,ServerError:yE,hdb_errors:no}});var ve=T((_ne,gA)=>{"use strict";var Ba=y(),MG=$(),Wt=X(),Ha=require("path"),PG=require("minimist"),EA=require("fs-extra"),hA=require("lodash");Wt.initSync();var{CONFIG_PARAMS:vn,DATABASES_PARAM_CONFIG:Ua,SYSTEM_SCHEMA_NAME:cl}=Ba,Ma,Pa,va;function mA(){if(Ma!==void 0)return Ma;if(Wt.getHdbBasePath()!==void 0)return Ma=Wt.get(vn.STORAGE_PATH)||Ha.join(Wt.getHdbBasePath(),Ba.DATABASES_DIR_NAME),Ma}a(mA,"getBaseSchemaPath");function pA(){if(Pa!==void 0)return Pa;if(Wt.getHdbBasePath()!==void 0)return Pa=TA(cl),Pa}a(pA,"getSystemSchemaPath");function SA(){if(va!==void 0)return va;if(Wt.getHdbBasePath()!==void 0)return va=Wt.get(Ba.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Ha.join(Wt.getHdbBasePath(),Ba.TRANSACTIONS_DIR_NAME),va}a(SA,"getTransactionAuditStoreBasePath");function vG(e,t){let r=Wt.get(vn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Ha.join(SA(),e.toString())}a(vG,"getTransactionAuditStorePath");function TA(e,t){e=e.toString(),t=t&&t.toString();let r=Wt.get(Ba.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Ha.join(mA(),e)}a(TA,"getSchemaPath");function BG(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,PG(process.argv));let s=r[vn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!MG.isObject(s))throw o;i=s}for(let o of i){let c=o[cl];if(!c)continue;let u=Wt.get(vn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Ua.PATH];if(_)return hA.set(u,[cl,Ua.TABLES,t,Ua.PATH],_),Wt.setProperty(vn.DATABASES,u),_;let l=c?.[Ua.PATH];if(l)return hA.set(u,[cl,Ua.PATH],l),Wt.setProperty(vn.DATABASES,u),l}}let n=r[vn.STORAGE_PATH.toUpperCase()];if(n){if(!EA.pathExistsSync(n))throw new Error(n+" does not exist");let i=Ha.join(n,e);return EA.mkdirsSync(i),Wt.setProperty(vn.STORAGE_PATH,n),i}return pA()}a(BG,"initSystemSchemaPaths");function HG(){Ma=void 0,Pa=void 0,va=void 0}a(HG,"resetPaths");gA.exports={getBaseSchemaPath:mA,getSystemSchemaPath:pA,getTransactionAuditStorePath:vG,getTransactionAuditStoreBasePath:SA,getSchemaPath:TA,initSystemSchemaPaths:BG,resetPaths:HG}});var Er=T((hne,bA)=>{"use strict";var qG=fr().LMDB_ERRORS_ENUM,fne=require("lmdb"),FG=ze(),Ene=require("buffer").Buffer,{OVERFLOW_MARKER:RA,MAX_SEARCH_KEY_LENGTH:ul}=FG,AA=["number","string","symbol","boolean","bigint"];function GG(e){if(e=e?.primaryStore||e,!e)throw new Error(qG.ENV_REQUIRED)}a(GG,"validateEnv");function xG(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(xG,"stringifyData");function kG(e){return e instanceof Date?e.valueOf():e}a(kG,"convertKeyValueToWrite");function VG(e){if(e==null)return;if(AA.includes(typeof e))return e.length>ul?[e.slice(0,ul)+RA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(AA.includes(typeof n))n.length>ul?t.push(n.slice(0,ul)+RA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(VG,"getIndexedValues");var ll=0,OA=0;function NA(){OA=Date.now()-performance.now()}a(NA,"adjustStartTime");NA();var $G=6e4;setInterval(NA,$G).unref();function YG(){let e=performance.now()+OA;return e>ll?(ll=e,e):(ll+=488e-6,ll)}a(YG,"getNextMonotonicTime");bA.exports={validateEnv:GG,stringifyData:xG,convertKeyValueToWrite:kG,getNextMonotonicTime:YG,getIndexedValues:VG}});var yA,ss,IE,qa=Te(()=>{yA=require("events"),ss=class extends yA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new IE;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)}},IE=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}}}});function vr(e){return e[Ht]||(e[Ht]=Object.create(null))}function El(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u;switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a string, attempt to assign ${l}`);vr(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 ns.ClientError(`${c} must be a string, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a number, attempt to assign ${l}`);vr(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 ns.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);vr(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 ns.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a boolean, attempt to assign ${l}`);vr(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 ns.ClientError(`${c} must be a Date, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){vr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be an object, attempt to assign ${l}`);vr(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Ht];if(l&&c in l)return l[c];let d=this[ge]?.[c];if(d&&typeof d=="object"){let f=IA(d,o);if(f)return l||(l=this[Ht]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0};_.get.isAttribute=!0,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Ht];return u?.[o]!==void 0?u[o]:this[ge]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new ns.ClientError("Can not add a property to a sealed table schema");vr(this)[o]=c}),i("deleteProperty",function(o){vr(this)[o]=void 0}),i("toJSON",function(){let o=this[Ht],c;for(let _ in o)c||(c=Object.assign({},this[ge])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ge])),Object.assign(c,this)),c||this[ge]}),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 IA(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[ge]=n}},El(r,t)),new r(e)):new _l(e);case Array:let s=new fl(e.length);s[ge]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=IA(o,t?.elements)),s[n]=o}return s}}function hl(e){let t=e[Ht],r;for(let n in t){r||(r=Object.assign({},e[ge]));let i=t[n];i&&typeof i=="object"&&(i=hl(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ge])),Object.assign(r,e)),r||e[ge]}function Fa(e){let t;if(e[ge]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=Fa(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Ht];for(let s in r){t||(t=Object.assign({},e[ge]));let n=r[s];n&&typeof n=="object"&&(n=Fa(n)),t[s]=n}return t?Object.freeze(t):e[ge]||(e.buffer?e:Object.freeze(e))}function dl(e){let t=e[ge];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[di]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[ge]===n){if(dl(i))return!0}else return!0}}else{let r=e[Ht];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ge]===i){if(dl(n))return!0}else return!0}else return!0}}return!1}var ns,Ht,_l,di,fl,ml=Te(()=>{is();ns=D(j()),Ht=Symbol("own-data");a(vr,"getChanges");a(El,"assignTrackedAccessors");a(IA,"trackObject");_l=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ge]=t}};El(_l,{});a(hl,"collapseData");a(Fa,"deepFreeze");a(dl,"hasChanges");di=Symbol.for("has-array-changes"),fl=class extends Array{static{a(this,"TrackedArray")}[di];constructor(t){super(t)}splice(...t){return this[di]=!0,super.splice(...t)}push(...t){return this[di]=!0,super.push(...t)}pop(){return this[di]=!0,super.pop()}unshift(...t){return this[di]=!0,super.unshift(...t)}shift(){return this[di]=!0,super.shift()}};fl.prototype.constructor=Array});function zG(){QG=setInterval(function(){for(let e of wE)if(e.stale){let t=e[me]?.url;wA.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},WG).unref()}var CE,wA,KG,wE,fi,pl,WG,QG,LE=Te(()=>{CE=D(Er()),wA=D(G());is();KG=100,wE=new Set,fi=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;validated=0;timestamp=0;open=!0;getReadTxn(){return this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn?this.readTxn:(this.readTxn=this.lmdbDb.useReadTransaction(),wE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(wE.delete(this),this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,CE.getNextMonotonicTime)());let s=t.retries||0;if(this.resetReadSnapshot(),this.validated<this.writes.length){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()=>{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 R=S();E?E.push?E.push(R):E=[E,R]:E=R}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}t?.close&&(this.open=!1);let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<KG>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return n.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=s+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(){this.resetReadSnapshot(),this.writes=[]}},pl=class extends fi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,CE.getNextMonotonicTime)())}getReadTxn(){}},WG=3e4;a(zG,"startMonitoringTxns");zG()});function Ge(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new fi;e.timestamp&&(s.timestamp=e.timestamp),s[me]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({close:!0});return u.then?u.then(()=>(r?.resetTransaction&&(e.transaction=null),c)):(r?.resetTransaction&&(e.transaction=null),c)}function o(c){throw s.abort(),r?.resetTransaction&&(e.transaction=null),c}}var CA,Ei=Te(()=>{CA=require("../../index");is();LE();a(Ge,"transaction");(0,CA._assignPackageExport)("transaction",Ge);Ge.commit=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ge.abort=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function UE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;if(l==null)throw new io.ClientError("Invalid value provided for query, must be non-null value");l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(UA[d]||d){case"lt":o=!0,c=l;break;case"le":o=!0,c=l,u=!0;break;case"gt":o=l,_=!0;break;case"ge":o=l;break;case"prefix":o=l,c=l.slice(0),c[c.length-1]=Cs.MAXIMUM_KEY;break;case"starts_with":o=l.toString(),c=l+String.fromCharCode(65535);break;case"between":o=l[0],o instanceof Date&&(o=o.getTime()),c=l[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case mt.SEARCH_TYPES.EQUALS:case void 0:o=l,c=l,u=!0;break;case"ne":case"contains":case"ends_with":f=!0;break;default:throw new io.ClientError(`Unknown query comparator "${d}"`)}if(r){let S=o;o=c,c=S,S=!_,_=!u,u=S}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new io.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=ME(e);if(!S)throw new io.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:R,value:b})=>new Promise((O,Y)=>setImmediate(()=>{try{O(b&&S(b)?R:DA.SKIP)}catch(Q){Y(Q)}})))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:_,values:!E,transaction:t,reverse:r};return E?h.getRange(p):h.getRange(p).map(({value:S})=>S)}function ME(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),UA[t]||t){case mt.SEARCH_TYPES.EQUALS:case void 0:return ws(r,n=>n===s);case mt.SEARCH_TYPES.CONTAINS:return ws(r,n=>n?.toString().includes(s));case mt.SEARCH_TYPES.ENDS_WITH:case mt.SEARCH_TYPES._ENDS_WITH:return ws(r,n=>n?.toString().endsWith(s));case mt.SEARCH_TYPES.STARTS_WITH:case mt.SEARCH_TYPES._STARTS_WITH:return ws(r,n=>typeof n=="string"&&n.startsWith(s));case mt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),ws(r,n=>(0,Cs.compareKeys)(n,s[0])>=0&&(0,Cs.compareKeys)(n,s[1])<=0);case"gt":case mt.SEARCH_TYPES.GREATER_THAN:case mt.SEARCH_TYPES._GREATER_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)>0);case"ge":case mt.SEARCH_TYPES.GREATER_THAN_EQUAL:case mt.SEARCH_TYPES._GREATER_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)>=0);case mt.SEARCH_TYPES.LESS_THAN:case"lt":case mt.SEARCH_TYPES._LESS_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)<0);case"le":case mt.SEARCH_TYPES.LESS_THAN_EQUAL:case mt.SEARCH_TYPES._LESS_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)<=0);case"ne":return ws(r,n=>(0,Cs.compareKeys)(n,s)!==0);default:throw new io.ClientError(`Unknown query comparator "${t}"`)}}function ws(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function Sl(e){if(!e)return;let t=new DE,r,s,n,i,o,c=LA;for(;r=c.exec(e);){i=c.lastIndex;let[,u,_]=r;switch(_){case")":case")&":switch(o){case"limit":if(u.indexOf(",")>-1){let[l,d]=u.split(",");t.offset=+l,t.limit=d-t.offset}else t.limit=+u;break;case"select":if(u[0]==="["){if(u[u.length-1]!=="]")throw new Error("Unmatched brackets");t.select=u.slice(1,-1).split(","),t.select.asArray=!0}else u.indexOf(",")>-1?t.select=(u.endsWith(",")?u.slice(0,-1):u).split(","):t.select=u;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=u.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}s=void 0;break;case"(":o=u;break;case"=":s?u.length<=2&&(n=u):(n="equals",s=decodeURIComponent(u));break;case"!=":case"<":case"<=":case">":case">=":n=JG[_],s=decodeURIComponent(u);break;case"=*":n="ends_with",s=decodeURIComponent(u);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(u)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${_} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(u)}),s=void 0;break;default:throw new Error(`Unknown operator ${_} in query ${e}`)}c=s?XG:LA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var io,mt,Cs,DA,JG,UA,LA,XG,DE,Tl=Te(()=>{io=D(j()),mt=D(ze()),Cs=require("ordered-binary"),DA=require("lmdb"),JG={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(UE,"idsForCondition");UA={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(ME,"filterByType");a(ws,"attributeComparator");LA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,XG=/([^&|*=]+)([&|*=]*)/g;a(Sl,"parseQuery");DE=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 s=this.conditions[r];if(s.attribute===t)return s.value}}}});var BE={};qe(BE,{CONTEXT:()=>me,ID_PROPERTY:()=>Ie,IS_COLLECTION:()=>os,RECORD_PROPERTY:()=>ge,Resource:()=>Nt,SAVE_UPDATES_PROPERTY:()=>qA,snake_case:()=>ZG});function ZG(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function MA(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new vE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Br(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_;if(r?o?(_=i,o=o[me]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[me]||i):_=i:(_=n,c=_[Ie]??_[this.primaryKey]??null):i?o=i[me]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let f of n){if(typeof f=="object"&&f)break;c.push(f)}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)))}else{if(typeof(c=n.url)=="string"){let f=c.indexOf("?");if(f>-1){let h=this.parseQuery(c.slice(f+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,f)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let l;if(u?.ensureLoaded!=null||u?.async?(l=Object.assign({},t),u?.ensureLoaded!=null&&(l.ensureLoaded=u.ensureLoaded),u.async&&(l.async=u.async)):l=t,o.transaction){let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)}else return Ge(o,()=>{let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)},l);function d(f){if(t.type==="read"&&(f[qA]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,u,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,_,o):f.allowUpdate(o.user,_,o):t.type==="create"?f.allowCreate(o.user,_,o):f.allowDelete(o.user,u,o);if(E?.then)return E.then(h=>{if(!h)throw new gl(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new gl(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function Hr(e,t){let r=new HA.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function PE(e){let t=e[ge];if(t){let r=e[Ht];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function PA(e){if(typeof e=="string")return t=>PE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=PE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=PE(r);for(let i of e){let o=n(i);o===void 0&&t&&(o=null),s[i]=o}return s}}else throw new Error("Invalid select argument type "+typeof e)}var vA,BA,HA,me,Ie,os,qA,ge,jG,Nt,gl,vE,is=Te(()=>{vA=require("crypto");qa();BA=require("../../index"),HA=D(j());ml();Ei();Tl();me=Symbol.for("context"),Ie=Symbol.for("primary-key"),os=Symbol("is-collection"),qA=Symbol("save-updates"),ge=Symbol("stored-record"),jG={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Nt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ie]=t;let s=r?.[me];this[me]=s!==void 0?s:r||null}static get=Br(function(t,r,s,n){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){let _=PA(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=Br(function(t,r,s,n){if(Array.isArray(n)&&t[os]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):Hr(t,"put")},{hasContent:!0,type:"update"});static delete=Br(function(t,r,s,n){return t.delete?t.delete(r):Hr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,vA.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Ge(s,()=>{let i=new this(n,s),o=i.put?i.put(r):Hr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Br(function(t,r,s,n){return t.invalidate?t.invalidate(r):Hr(t,"delete")},{hasContent:!1,type:"update"});static post=Br(function(t,r,s,n){return t[Ie]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Br(function(t,r,s,n){return t.connect?t.connect(n,r):Hr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Br(function(t,r,s,n){return t.subscribe?t.subscribe(r):Hr(t,"subscribe")},{type:"read"});static publish=Br(function(t,r,s,n){return t[Ie]!=null&&t.update?.(),t.publish?t.publish(n,r):Hr(t,"publish")},{hasContent:!0,type:"create"});static search=Br(function(t,r,s,n){let i=t.search?t.search(r):Hr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=PA(o);return i.map(c)}return i},{type:"read"});static query=Br(function(t,r,s,n){return t.search?t.search(n,r):Hr(t,"search")},{hasContent:!0,type:"read"});static copy=Br(function(t,r,s,n){return t.copy?t.copy(n,r):Hr(t,"copy")},{type:"create"});static move=Br(function(t,r,s,n){return t.move?t.move(n,r):Hr(t,"move")},{type:"delete"});post(t){if(this[os])return this.constructor.create(this[Ie],t,this[me]);Hr(this,"post")}static isCollection(t){return t?.[os]}static coerceId(t){return t}static parseQuery(t){return Sl(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&jG[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:MA(t,this)}}return MA(t,this)}static getResource(t,r,s){let n,i=r[me],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;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(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[Ie]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Ie],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[os]=!0),n}subscribe(t){return new ss}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new ss}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[Ie]}getContext(){return this[me]}};Nt.prototype[me]=null;(0,BA._assignPackageExport)("Resource",Nt);a(ZG,"snake_case");gl=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(MA,"pathToId");vE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Br,"transactional");a(Hr,"missingMethod");a(PE,"selectFromObject");a(PA,"transformForSelect")});var hi={};qe(hi,{server:()=>ut});var FA,ut,hr=Te(()=>{FA=require("../../index"),ut={};(0,FA._assignPackageExport)("server",ut)});var qE={};qe(qE,{loadGQLSchema:()=>rx,start:()=>HE,startOnMainThread:()=>tx});function HE({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let Q=function(F){if(F.kind==="NonNullType"){let B=Q(F.type);return B.nullable=!1,B}if(F.kind==="ListType")return{type:"array",elements:Q(F.type)};let K={type:F.name?.value};return Object.defineProperty(K,"location",{value:F.loc.startToken}),K};a(Q,"getProperty");let R=S.name.value,b=[],O={table:null,database:null,properties:b};f.set(R,O);for(let F of S.directives){if(F.name.value==="table"){for(let w of F.arguments)O[w.name.value]=w.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=R),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,E.push(O)}if(F.name.value==="sealed"&&(O.sealed=!0),F.name.value==="export"){O.export=!0;for(let w of F.arguments)w.name.value==="name"&&(O.export={name:w.value.value})}}let Y=!1;for(let F of S.fields){let w=Q(F.type);w.name=F.name.value,b.push(w);for(let K of F.directives)if(K.name.value==="primaryKey")Y?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,Y=!0);else if(K.name.value==="indexed")w.indexed=!0;else if(K.name.value==="createdTime")w.assignCreatedTime=!0;else if(K.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(K.name.value==="expiresAt")w.expiresAt=!0;else if(K.name.value==="allow"){let B=w.authorizedRoles=[];for(let x of K.arguments)x.name.value==="role"&&B.push(x.value.value)}}O.typeName=R,R==="Query"&&(h=O)}function p(S){let R=f.get(S.type);R?S.properties=R.properties:S.type==="array"?p(S.elements):ex.includes(S.type)||(0,GA.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let S of f.values())for(let R of S.properties)p(R);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Rl.dirname)(s),S.tableClass):i.set((0,Rl.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass));if(h)for(let S of h.properties){let R=f.get(S.type);if(!R)throw new Error(`${S.type} was not found as a Query export`);i.set((0,Rl.dirname)(s)+"/"+S.name,R.tableClass)}}}var Rl,GA,ex,tx,rx,xA=Te(()=>{Rl=require("path");fe();GA=D(Je()),ex=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(HE,"start");tx=HE,rx=HE({ensureTable:et}).handleFile});async function Al(e){return sx?(Ga||(Ga=nx(ox)),(await(await Ga).import(e)).namespace):import(e)}async function nx(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ga=new Compartment({console,Math,Date,fetch:ix,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,VA.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:Nt,tables:mr,databases:xe})}};let s=await(0,kA.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Ga}function ix(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 ox(){return{Resource:Nt,tables:mr}}var kA,VA,sx,Ga,FE=Te(()=>{is();fe();kA=require("fs/promises"),VA=require("path"),sx=!1;a(Al,"secureImport");a(nx,"getCompartment");a(ix,"secureOnlyFetch");a(ox,"getGlobalVars")});var xE={};qe(xE,{handleFile:()=>ax});async function ax(e,t,r,s){let n=new Map,i=(0,$A.pathToFileURL)(r).toString(),o=await Al(i);u(o.default)&&s.set((0,GE.dirname)(t),o.default),c(o,(0,GE.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.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"),n}var $A,GE,YA=Te(()=>{$A=require("url");FE();GE=require("path");a(ax,"handleFile")});var VE={};qe(VE,{start:()=>cx});function cx({resources:e}){e.set("login",kE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var kE,KA=Te(()=>{is();a(cx,"start");kE=class extends Nt{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var YE=T((Wne,zA)=>{"use strict";var{Readable:ux}=require("stream"),lx=1e4;zA.exports={streamAsJSON(e){return new $E({value:e})}};var $E=class extends ux{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],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(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 n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),WA)}catch(n){yield WA(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);QA(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>lx?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 QA(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))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 s of this.activeIterators)t?s.throw(t):s.return();r()}};function WA(e){return console.error(e),JSON.stringify(e.toString())}a(WA,"handleError");function QA(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(QA,"when")});var cO=T((Jne,aO)=>{"use strict";var KE=require("recursive-iterator"),_x=require("alasql"),WE=require("clone"),JA=$(),{handleHDBError:XA,hdb_errors:dx}=j(),{HDB_ERROR_MSGS:jA,HTTP_STATUS_CODES:ZA}=dx,{getDatabases:fx}=(fe(),Z(Ce)),Ex=["DISTINCT_ARRAY"],eO=Symbol("validateTables"),QE=Symbol("validateTable"),zne=Symbol("getAllColumns"),tO=Symbol("validateAllColumns"),Ol=Symbol("findColumn"),rO=Symbol("validateOrderBy"),xa=Symbol("validateSegment"),zE=Symbol("validateColumn"),sO=Symbol("setColumnsForTable"),nO=Symbol("checkColumnsForAsterisk"),iO=Symbol("validateGroupBy"),oO=Symbol("hasColumns"),JE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[eO](),this[nO](),this[tO]()}[eO](){if(this[oO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[QE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[QE](t.table)})}}[oO](){let t=!1,r=new KE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[QE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=fx();if(!r[t.databaseid])throw XA(new Error,jA.SCHEMA_NOT_FOUND(t.databaseid),ZA.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw XA(new Error,jA.TABLE_NOT_FOUND(t.databaseid,t.tableid),ZA.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=WE(n);i.table=WE(t),this.attributes.push(i)})}[Ol](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)}[nO](){let t=new KE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[sO](r.tableid)}[sO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new _x.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[tO](){this[xa](this.statement.columns,!1),this[xa](this.statement.joins,!1),this[xa](this.statement.where,!1),this[iO](this.statement.group,!1),this[xa](this.statement.order,!0)}[xa](t,r){if(!t)return;let s=new KE(t),n=[];for(let{node:i,path:o}of s)!JA.isEmpty(i)&&!JA.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[rO](i):n.push(this[zE](i)));return n}[iO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&Ex.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=WE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Ol](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[Ol](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.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`}[rO](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[zE](t)}[zE](t){let r=this[Ol](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};aO.exports=JE});var lO=T((jne,uO)=>{"use strict";var XE=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")}};uO.exports=XE});var dO=T((eie,_O)=>{"use strict";var jE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};_O.exports=jE});var NO={};qe(NO,{AUDIT_STORE_OPTIONS:()=>AO,createAuditEntry:()=>yl,openAuditStore:()=>bl,readAuditEntry:()=>pr,setAuditRetention:()=>hx,transactionKeyEncoder:()=>RO});function bl(e){let t=e.auditStore=e.openDB(pO.AUDIT_STORE_NAME,AO);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,TO.getWorkerIndex)()===0&&e.on("aftercommit",()=>{ka||(ka=setTimeout(()=>{if(ka=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-ZE})){if((n[0]&15)===th){let i=pr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},ZE/10).unref())}),t}function hx(e){clearTimeout(ka),ka=null,ZE=e}function yl(e,t,r,s,n,i,o){let c=OO[i],u=1;s&&(s>1?oo.setFloat64(0,s):qr.set(nh),u=9),f(0),f(t),d(r),oo.setFloat64(u,e),u+=8,n?d(n):qr[u++]=0,qr[s?8:0]=c;let l=qr.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,ao.writeKey)(E,qr,u);let p=u-h-1;p>127?p>16383?(sh.error("Key or username was too large for audit entry",E),u=h+1,qr[h]=0):(qr.copyWithin(h+2,h+1,u),oo.setUint16(h,p|32768),u++):qr[h]=p}function f(E){E<128?qr[u++]=E:E<16384?(oo.setUint16(u,E|32768),u+=2):E<1056964608?(oo.setUint32(u,E|3221225472),u+=4):(qr[u]=255,oo.setUint32(u+1,E),u+=5)}}function pr(e){try{let t=e.dataView||(e.dataView=new rh(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=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:OO[s&7],tableId:i,get recordId(){return mO(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?mO(e,l,d):void 0},getValue(f){return s&eh?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return sh.error("Reading audit entry error",e),{}}}function mO(e,t,r){let s=e.subarray(t,r);return(0,ao.readKey)(s,0,r-t)}var ao,Nl,pO,SO,TO,gO,sh,qr,oo,RO,AO,ZE,ka,eh,fO,th,EO,hO,OO,rh,co=Te(()=>{ao=require("ordered-binary"),Nl=D(X()),pO=D(ze()),SO=D(y()),TO=D(Je()),gO=D($());$a();sh=D(G());(0,Nl.initSync)();qr=Buffer.alloc(1024),oo=new DataView(qr.buffer,qr.byteOffset,1024),RO={writeKey(e,t,r){return e===Va?(t.set(Va,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,ao.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,ao.readKey)(e,t,r)}},AO={encoding:"binary",keyEncoder:RO},ZE=(0,gO.convertToMS)((0,Nl.get)(SO.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,ka=null;a(bl,"openAuditStore");a(hx,"setAuditRetention");eh=16,fO=1,th=2,EO=3,hO=4,OO={put:fO|eh,[fO]:"put",delete:th,[th]:"delete",message:EO|eh,[EO]:"message",invalidate:hO,[hO]:"invalidate"};a(yl,"createAuditEntry");a(pr,"readAuditEntry");rh=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(mO,"readKeySafely")});var LO={};qe(LO,{HAS_EXPIRATION:()=>lh,LAST_TIMESTAMP_PLACEHOLDER:()=>Va,LOCAL_TIMESTAMP:()=>mx,METADATA:()=>Ya,NO_TIMESTAMP:()=>ih,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>nh,RecordEncoder:()=>uh,TIMESTAMP_ASSIGN_LAST:()=>Sx,TIMESTAMP_ASSIGN_NEW:()=>IO,TIMESTAMP_ASSIGN_PREVIOUS:()=>wO,TIMESTAMP_PLACEHOLDER:()=>Il,TIMESTAMP_RECORD_PREVIOUS:()=>oh,getUpdateRecord:()=>_h,handleLocalTimeForGets:()=>Ll});function CO(){return lo[0]=lo[0]^64,px.getFloat64(0)}function Ll(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[Ya];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[Ya]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.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[Ya];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=Tx.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(lo,0,d),l.timestampBytes=null,l.localTime=CO())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,mi.push(new WeakRef(this))),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();(!_||_===this||_.isDone||_.isCommitted)&&mi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function _h(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?uo=i?.localTime?oh|wO:ih:uo=u?i?.localTime?oh|16384:IO|16384:ih,l>0&&(c|=lh),Cl=c,ch=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:uo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(e.cache&&S.result!==!1){let R=e.cache.get(s);R&&(c>=0?R.metadataFlags=c:R.metadataFlags>=0&&(R.metadataFlags=void 0),(l||!R.expiresAt)&&(R.expiresAt=l),h.instructedWrite&&(R.localTime||(R.localTime=1),R.timestampBytes=ah,R.timestampOffset=ah.start||0))}if(u){let R=_?.user?.username;if(E&&(wl=e.encoder.encode(E)),f&&i?.localTime){let b=i?.localTime,O=r.get(b);if(O){let Y=pr(O).previousLocalTime;return r.put(b,yl(o,t,s,Y,R,d,wl),{ifVersion:p}),S}}r.put(Va,yl(o,t,s,i?.localTime?1:0,R,d,wl),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var bO,yO,Il,Va,nh,mx,Ya,lo,px,ih,IO,Sx,wO,oh,lh,ah,wl,uo,Cl,ch,uh,Tx,mi,$a=Te(()=>{bO=require("msgpackr");co();yO=D(G()),Il=new Uint8Array([1,1,1,1,4,64,0,0]),Va=new Uint8Array([1,1,1,1,1,0,0,0]),nh=new Uint8Array([1,1,1,1,3,64,0,0]),mx=Symbol("local-timestamp"),Ya=Symbol("metadata"),lo=new Uint8Array(8),px=new DataView(lo.buffer,0,8),ih=0,IO=0,Sx=1,wO=3,oh=4,lh=16,uo=0,Cl=-1,ch=0,uh=class extends bO.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(uo||Cl>=0){let i=0,o=uo;o&&(i+=8,uo=0);let c=Cl,u=ch;c>=0&&(i+=2,Cl=-1,u&&(i+=8,ch=0));let _=ah=r.call(this,s,n|2048|i);wl=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(Il[4]=o,Il[5]=o>>8,_.set(Il,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,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(lo,0,c),c+=8;else for(let d=0;d<8;d++)lo[d]=t[c++];u=CO(),i=t[c]}let _;i<32&&(o=i,c+=2,o&lh&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[Ya]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(CO,"getTimestamp");Tx=Map.prototype.get;a(Ll,"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&&yO.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 Dl=T((oie,DO)=>{"use strict";var fh=X(),Eh=y(),{RecordEncoder:gx}=($a(),Z(LO));fh.initSync();var Rx=fh.get(Eh.CONFIG_PARAMS.STORAGE_COMPRESSION),Ax=fh.get(Eh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Ox=Eh.UPDATES_PROPERTY,dh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=Rx&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Ax&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:gx},this.alwaysLazyProperty=s=>s===Ox)}};DO.exports=dh});var Ml=T((cie,MO)=>{"use strict";var _o=X(),Ka=y();_o.initSync();var Nx=_o.get(Ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||_o.get(Ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||_o.get(Ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",UO=_o.get(Ka.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),bx=_o.get(Ka.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Ul=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=Nx,this.noFSAccess=!0,UO!==void 0&&(this.overlappingSync=UO),this.noReadAhead=bx}};MO.exports=Ul;Ul.MAX_DBS=1e4});var Ue=T((lie,VO)=>{"use strict";var mh=require("lmdb"),as=require("fs-extra"),Sr=require("path"),Pl=Er(),BO=G(),Qt=fr().LMDB_ERRORS_ENUM,vl=dO(),ph=Dl(),HO=Ml(),Bn=ze(),PO=y(),{table:yx,resetDatabases:Ix}=(fe(),Z(Ce)),vO=X(),cs=Bn.INTERNAL_DBIS_NAME,qO=Bn.DBI_DEFINITION_NAME,wx="data.mdb",Cx="lock.mdb",Wa=".mdb",Lx="-lock",hh=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Fr(t,r),this.key_type=this.dbi[Bn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Bn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new mh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Bl(e,t){if(e===void 0)throw new Error(Qt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Qt.ENV_NAME_REQUIRED)}a(Bl,"pathEnvNameValidation");async function Sh(e,t,r=!0){try{await as.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Qt.INVALID_BASE_PATH):s}try{let s=Sr.join(e,t+Wa);return await as.access(s,as.constants.R_OK|as.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await as.access(Sr.join(e,t,wx),as.constants.R_OK|as.constants.F_OK),Sr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Qt.INVALID_ENVIRONMENT)}else throw new Error(Qt.INVALID_ENVIRONMENT);throw s}}a(Sh,"validateEnvironmentPath");function Hl(e,t){if(Pl.validateEnv(e),t===void 0)throw new Error(Qt.DBI_NAME_REQUIRED)}a(Hl,"validateEnvDBIName");async function Dx(e,t,r=!1,s=!1){Bl(e,t);let n=Sr.basename(e);t=t.toString();let i=vO.get(PO.CONFIG_PARAMS.DATABASES);i||vO.setProperty(PO.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await Sh(e,t,s),FO(e,t,r)}catch(o){if(o.message===Qt.INVALID_ENVIRONMENT){let c=Sr.join(e,t);await as.mkdirp(s?c:e);let u=new HO(s?c:c+Wa,!1),_=mh.open(u);_.dbis=Object.create(null);let l=new ph(!1);_.openDB(cs,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Th(e,t,r);return _[Bn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(Dx,"createEnvironment");async function Ux(e,t,r,s=!0){Bl(e,t),t=t.toString();let n=Sr.join(e,t);return yx({table:t,database:Sr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(Ux,"copyEnvironment");async function FO(e,t,r=!1){Bl(e,t),t=t.toString();let s=Th(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await Sh(e,t),i=Sr.join(e,t+Wa),o=n!=i,c=new HO(n,o),u=mh.open(c);u.dbis=Object.create(null);let _=xO(u);for(let l=0;l<_.length;l++)Fr(u,_[l]);return u[Bn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(FO,"openEnvironment");async function Mx(e,t,r=!1){Bl(e,t),t=t.toString();let s=Sr.join(e,t+Wa),n=await Sh(e,t);if(global.lmdb_map!==void 0){let i=Th(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await GO(o),delete global.lmdb_map[i]}}await as.remove(n),await as.remove(n===s?n+Lx:Sr.join(Sr.dirname(n),Cx))}a(Mx,"deleteEnvironment");async function GO(e){Pl.validateEnv(e);let t=e[Bn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(GO,"closeEnvironment");function Th(e,t,r=!1){let n=`${Sr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Th,"getCachedEnvironmentName");function Px(e){Pl.validateEnv(e);let t=Object.create(null),r=Fr(e,cs);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==cs)try{t[s]=Object.assign(new vl,n)}catch{BO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(Px,"listDBIDefinitions");function xO(e){Pl.validateEnv(e);let t=[],r=Fr(e,cs);for(let{key:s}of r.getRange({start:!1}))s!==cs&&t.push(s);return t}a(xO,"listDBIs");function vx(e,t){let s=Fr(e,cs).getEntry(t),n=new vl;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{BO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(vx,"getDBIDefinition");function kO(e,t,r,s=!r){if(Hl(e,t),t=t.toString(),t===cs)throw new Error(Qt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Fr(e,t)}catch(n){if(n.message===Qt.DBI_DOES_NOT_EXIST){let i=new ph(r,s===!0),o=e.openDB(t,i),c=new vl(r===!0,s);return o[qO]=c,Fr(e,cs).putSync(t,c),e.dbis[t]=o,o}throw n}}a(kO,"createDBI");function Fr(e,t){if(Hl(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==cs?r=vx(e,t):r=new vl,r===void 0)throw new Error(Qt.DBI_DOES_NOT_EXIST);let s;try{let n=new ph(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(Qt.DBI_DOES_NOT_EXIST):n}return s[qO]=r,e.dbis[t]=s,s}a(Fr,"openDBI");function Bx(e,t){Hl(e,t),t=t.toString();let r=Fr(e,t),s=r.getStats();return r[Bn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(Bx,"statDBI");async function Hx(e,t){try{let r=Sr.join(e,t+Wa);return(await as.stat(r)).size}catch{throw new Error(Qt.INVALID_ENVIRONMENT)}}a(Hx,"environmentDataSize");function qx(e,t){if(Hl(e,t),t=t.toString(),t===cs)throw new Error(Qt.CANNOT_DROP_INTERNAL_DBIS_NAME);Fr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Fr(e,cs).removeSync(t)}a(qx,"dropDBI");function Fx(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Fr(e,i)}catch(o){if(o.message===Qt.DBI_DOES_NOT_EXIST)kO(e,i,i!==t,i===t),s=!0;else throw o}}s&&Ix()}a(Fx,"initializeDBIs");VO.exports={openDBI:Fr,openEnvironment:FO,createEnvironment:Dx,listDBIs:xO,listDBIDefinitions:Px,createDBI:kO,dropDBI:qx,statDBI:Bx,deleteEnvironment:Mx,initializeDBIs:Fx,TransactionCursor:hh,environmentDataSize:Hx,copyEnvironment:Ux,closeEnvironment:GO}});var YO=T((die,$O)=>{"use strict";var gh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};$O.exports=gh});var WO=T((Eie,KO)=>{"use strict";var Rh=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};KO.exports=Rh});var zO=T((mie,QO)=>{"use strict";var Ah=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};QO.exports=Ah});var fo=T((Rie,jO)=>{"use strict";var Gx=Ue(),xx=YO(),kx=WO(),Vx=zO(),Ls=Er(),Qa=fr().LMDB_ERRORS_ENUM,$x=ze(),rn=y(),Yx=$(),Kx=require("uuid"),Sie=require("lmdb"),{handleHDBError:Wx,hdb_errors:Qx}=j(),{OVERFLOW_MARKER:Tie,MAX_SEARCH_KEY_LENGTH:gie}=$x,JO=X();JO.initSync();var ql=JO.get(rn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Oh=rn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,pi=rn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function zx(e,t,r,s,n=Ls.getNextMonotonicTime()){Ih(e,t,r,s),Nh(e,t,r);let i=new xx,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];XO(_,!0,n);let l=Jx(e,t,r,_),d=_[t];o.push(l),c.push(d)}return bh(o,c,s,i,n)}a(zx,"insertRecords");function Jx(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][rn.FUNC_VAL],s[o]=c)}let u=Ls.getIndexedValues(c),_=e.dbis[o];if(u){ql&&_.prefetch(u.map(l=>({key:l,value:n})),Fl);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}ql&&e.dbis[t].prefetch([n],Fl),e.dbis[t].put(n,s,s[pi])})}a(Jx,"insertRecord");function Xx(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Xx,"removeSkippedRecords");function XO(e,t,r){let s=r>0;(s||!Number.isInteger(e[pi]))&&(e[pi]=r||(r=Ls.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Oh]))&&(e[Oh]=r||Ls.getNextMonotonicTime()):delete e[Oh]}a(XO,"setTimestamps");function Nh(e,t,r){r.indexOf(rn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(rn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(rn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(rn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Gx.initializeDBIs(e,t,r)}a(Nh,"initializeTransaction");async function jx(e,t,r,s,n=Ls.getNextMonotonicTime()){Ih(e,t,r,s),Nh(e,t,r);let i=new kx,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=yh(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return bh(c,u,s,i,n,o)}a(jx,"updateRecords");async function Zx(e,t,r,s,n=Ls.getNextMonotonicTime()){try{Ih(e,t,r,s)}catch(u){throw Wx(u,u.message,Qx.HTTP_STATUS_CODES.BAD_REQUEST)}Nh(e,t,r);let i=new Vx,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;Yx.isEmpty(_[t])?(l=Kx.v4(),_[t]=l):l=_[t];let d=yh(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return bh(o,c,s,i,n)}a(Zx,"upsertRecords");async function bh(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Ls.getNextMonotonicTime(),Xx(r,i),s}a(bh,"finalizeWrite");function yh(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(XO(r,!l,o),Number.isInteger(r[pi])&&_[pi]>r[pi])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let R=_[h];if(typeof p=="function"){let O=p([[_]]);Array.isArray(O)&&(p=O[0][rn.FUNC_VAL],r[h]=p)}if(p===R)continue;let b=Ls.getIndexedValues(R);if(b){ql&&S.prefetch(b.map(O=>({key:O,value:s})),Fl);for(let O=0,Y=b.length;O<Y;O++)S.remove(b[O],s)}if(b=Ls.getIndexedValues(p),b){ql&&S.prefetch(b.map(O=>({key:O,value:s})),Fl);for(let O=0,Y=b.length;O<Y;O++)S.put(b[O],s)}}let E=Object.assign({},_,r);c.put(s,E,E[pi])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:yh(e,t,r,s,n,i,o))}a(yh,"updateUpsertRecord");function ek(e,t,r){if(Ls.validateEnv(e),t===void 0)throw new Error(Qa.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Qa.WRITE_ATTRIBUTES_REQUIRED):new Error(Qa.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(ek,"validateBasic");function Ih(e,t,r,s){if(ek(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Qa.RECORDS_REQUIRED):new Error(Qa.RECORDS_MUST_BE_ARRAY)}a(Ih,"validateWrite");function Fl(){}a(Fl,"noop");jO.exports={insertRecords:zx,updateRecords:jx,upsertRecords:Zx}});var Si=T((Oie,tk)=>{tk.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Ds=T((Nie,tN)=>{"use strict";var eN=$(),ZO=y(),Eo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,sn=require("joi"),Hn={schema_format:{pattern:Eo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},rk=sn.alternatives(sn.string().min(1).max(Hn.schema_length.maximum).pattern(Eo).messages({"string.pattern.base":"{:#label} "+Hn.schema_format.message}),sn.number()).required(),sk=sn.alternatives(sn.string().min(1).max(Hn.schema_length.maximum).pattern(Eo).messages({"string.pattern.base":"{:#label} "+Hn.schema_format.message}),sn.number()),nk=sn.alternatives(sn.string().min(1).max(Hn.schema_length.maximum).pattern(Eo).messages({"string.pattern.base":"{:#label} "+Hn.schema_format.message}),sn.number()).required();function ik(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Hn.schema_length.maximum?`'${e}' maximum of 250 characters`:Eo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(ik,"checkValidTable");function ok(e,t){return eN.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(ok,"validateSchemaExists");function ak(e,t){let r=t.state.ancestors[0].schema;return eN.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(ak,"validateTableExists");function ck(e,t){return e.toLowerCase()===ZO.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${ZO.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(ck,"validateSchemaName");tN.exports={common_validators:Hn,schema_regex:Eo,hdb_schema_table:rk,validateSchemaExists:ok,validateTableExists:ak,validateSchemaName:ck,checkValidTable:ik,hdb_database:sk,hdb_table:nk}});var ke=T((yie,rN)=>{"use strict";var zt=require("validate.js");zt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||zt.validators.type.checks[t](e)?null:` must be a '${t}' value`};zt.validators.type.checks={Object:function(e){return zt.isObject(e)&&!zt.isArray(e)},Array:zt.isArray,Integer:zt.isInteger,Number:zt.isNumber,String:zt.isString,Date:zt.isDate,Boolean:function(e){return typeof e=="boolean"}};zt.validators.hasValidFileExt=function(e,t){return zt.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};rN.exports={validateObject:uk,validateObjectAsync:lk,validateBySchema:_k};function uk(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=zt(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 zt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}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 Gl=T((wie,sN)=>{var{common_validators:Us}=Ds(),Ja=ke(),za="is required",tt={database:{presence:!1,format:Us.schema_format,length:Us.schema_length},schema:{presence:!1,format:Us.schema_format,length:Us.schema_length},table:{presence:!0,format:Us.schema_format,length:Us.schema_length},attribute:{presence:!0,format:Us.schema_format,length:Us.schema_length},hash_attribute:{presence:!0,format:Us.schema_format,length:Us.schema_length}};function Xa(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(Xa,"makeAttributesStrings");function dk(e){return e=Xa(e),tt.table.presence=!1,tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ja.validateObject(e,tt)}a(dk,"schema_object");function fk(e){return e=Xa(e),tt.table.presence={message:za},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ja.validateObject(e,tt)}a(fk,"table_object");function Ek(e){return e=Xa(e),tt.table.presence={message:za},tt.attribute.presence=!1,Ja.validateObject(e,tt)}a(Ek,"create_table_object");function hk(e){return e=Xa(e),tt.table.presence={message:za},tt.attribute.presence={message:za},tt.hash_attribute.presence=!1,Ja.validateObject(e,tt)}a(hk,"attribute_object");function mk(e){return e=Xa(e),tt.table.presence={message:za},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ja.validateObject(e,tt)}a(mk,"describe_table");function pk(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(pk,"validateTableResidence");sN.exports={schema_object:dk,create_table_object:Ek,table_object:fk,attribute_object:hk,describe_table:mk,validateTableResidence:pk}});var iN=T((Lie,nN)=>{"use strict";var Sk=require("uuid"),wh=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Sk.v4(),this.schema_table=`${this.schema}.${this.table}`}};nN.exports=wh});var xl=T((Uie,oN)=>{"use strict";var Tk=iN(),Ch=class extends Tk{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};oN.exports=Ch});var cN=T((Pie,aN)=>{"use strict";aN.exports=Rk;var gk="inserted";function Rk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===gk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Rk,"returnObject")});var kl=T((Bie,fN)=>{"use strict";var Ak=y(),Lh=Ue(),Ok=fo(),{getSystemSchemaPath:Nk,getSchemaPath:bk}=ve(),yk=Si(),Ik=Gl(),wk=xl(),Ck=cN(),{handleHDBError:uN,hdb_errors:_N}=j(),lN=$(),{HTTP_STATUS_CODES:Lk}=_N,Dh=yk.hdb_attribute,dN=[];for(let e=0;e<Dh.attributes.length;e++)dN.push(Dh.attributes[e].attribute);var Dk="inserted";fN.exports=Uk;async function Uk(e){let t=Ik.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,Lk.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=lN.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new wk(e.schema,e.table,e.attribute,e.id);try{let i=await Lh.openEnvironment(bk(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}`);Lh.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Lh.openEnvironment(Nk(),Ak.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Ok.insertRecords(o,Dh.hash_attribute,dN,[n]);return Ck(Dk,c,{records:[n]},u)}catch(i){throw i}}a(Uk,"lmdbCreateAttribute")});var Mh=T((qie,hN)=>{var{hdb_table:Mk,hdb_database:EN}=Ds(),Pk=ke(),Uh=require("joi"),vk={undefined:"undefined",null:"null"},Bk=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||vk[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),Hk=Uh.object({database:EN,schema:EN,table:Mk,records:Uh.array().items(Uh.object().custom(Bk)).required()});hN.exports=function(e){return Pk.validateBySchema(e,Hk)}});var ja=T((xie,pN)=>{"use strict";var nn=$(),mN=G(),Gie=Mh(),{getDatabases:qk}=(fe(),Z(Ce)),{ClientError:Ti}=j();pN.exports=Fk;function Fk(e){if(nn.isEmpty(e))throw new Ti("invalid update parameters defined.");if(nn.isEmptyOrZeroLength(e.schema))throw new Ti("invalid schema specified.");if(nn.isEmptyOrZeroLength(e.table))throw new Ti("invalid table specified.");if(!Array.isArray(e.records))throw new Ti("records must be an array");let t=qk()[e.schema]?.[e.table];if(nn.isEmpty(t))throw new Ti(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&nn.isEmptyOrZeroLength(o[r]))throw mN.error("a valid hash attribute must be provided with update record:",o),new Ti("a valid hash attribute must be provided with update record, check log for more info");if(!nn.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 Ti(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!nn.isEmpty(o[r])&&o[r]!==""&&s.has(nn.autoCast(o[r]))&&(o.skip=!0),s.add(nn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(Fk,"insertUpdateValidate")});var Za=T((Vie,SN)=>{"use strict";var Gk=y().OPERATIONS_ENUM,Ph=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=Gk.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};SN.exports=Ph});var sc=T((Kie,TN)=>{"use strict";var Yie=Za(),Vl=y(),Bh=$(),vh=G(),xk=require("uuid"),{handleHDBError:ec,hdb_errors:kk}=j(),{HDB_ERROR_MSGS:tc,HTTP_STATUS_CODES:rc}=kk;TN.exports=Vk;function Vk(e,t,r){for(let n=0;n<t.length;n++)$k(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Yk(i,r,e.operation)}}a(Vk,"processRows");function $k(e){if(Buffer.byteLength(String(e))>Vl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ec(new Error,tc.ATTR_NAME_LENGTH_ERR(e),rc.BAD_REQUEST,void 0,void 0,!0);if(Bh.isEmptyOrZeroLength(e)||Bh.isEmpty(e.trim()))throw ec(new Error,tc.ATTR_NAME_NULLISH_ERR,rc.BAD_REQUEST,void 0,void 0,!0)}a($k,"validateAttribute");function Yk(e,t,r){if(!e.hasOwnProperty(t)||Bh.isEmptyOrZeroLength(e[t])){if(r===Vl.OPERATIONS_ENUM.INSERT||r===Vl.OPERATIONS_ENUM.UPSERT){e[t]=xk.v4();return}throw vh.error("Update transaction aborted due to record with no hash value:",e),ec(new Error,tc.RECORD_MISSING_HASH_ERR,rc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Vl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw vh.error(e),ec(new Error,tc.HASH_VAL_LENGTH_ERR,rc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw vh.error(e),ec(new Error,tc.INVALID_FORWARD_SLASH_IN_HASH_ERR,rc.BAD_REQUEST,void 0,void 0,!0)}a(Yk,"validateHash")});var RN=T((Qie,gN)=>{"use strict";var Hh=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};gN.exports=Hh});var NN=T((Jie,ON)=>{"use strict";var qh=Ue(),Kk=G(),AN=fr().LMDB_ERRORS_ENUM;ON.exports=Wk;async function Wk(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 qh.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==AN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await qh.closeEnvironment(global.lmdb_map[s]),await qh.closeEnvironment(global.lmdb_map[n])}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){Kk.error(t)}}a(Wk,"cleanLMDBMap")});var on=T((jie,wN)=>{"use strict";var nc=require("crypto"),Qk=X(),{CONFIG_PARAMS:zk}=y(),yN="aes-256-cbc",Jk=32,Xk=16,Fh=64,IN=32,jk=Fh+IN,bN=new Map;wN.exports={encrypt:Zk,decrypt:eV,createNatsTableStreamName:tV};function Zk(e){let t=nc.randomBytes(Jk),r=nc.randomBytes(Xk),s=nc.createCipheriv(yN,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(Zk,"encrypt");function eV(e){let t=e.substr(0,Fh),r=e.substr(Fh,IN),s=e.substr(jk,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=nc.createDecipheriv(yN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(eV,"decrypt");function tV(e,t){let r=Qk.get(zk.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=bN.get(r);return s||(s=nc.createHash("md5").update(r).digest("hex"),bN.set(r,s)),s}a(tV,"createNatsTableStreamName")});var gi=T((toe,LN)=>{"use strict";var eoe=Gr(),$l=G(),CN=Gl(),rV=on(),Yl=$(),{handleHDBError:Kl,hdb_errors:sV}=j(),{HDB_ERROR_MSGS:Wl,HTTP_STATUS_CODES:Gh}=sV,nV=X();nV.initSync();var{getDatabases:xh}=(fe(),Z(Ce));LN.exports={describeAll:iV,describeTable:Ql,describeSchema:oV};async function iV(e){try{let t=Yl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=xh(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await Ql({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 Ql({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){$l.error(E)}}let _={};for(let l in c)t||s?(_[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||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return $l.error("Got an error in describeAll"),$l.error(t),Kl(new Error,Wl.DESCRIBE_ALL_ERR)}}a(iV,"describeAll");async function Ql(e,t){Yl.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=CN.describe_table(e);if(i)throw i;let c=xh()[r];if(!c)throw Kl(new Error,Wl.SCHEMA_NOT_FOUND(e.schema),Gh.NOT_FOUND);let u=c[s];if(!u)throw Kl(new Error,Wl.TABLE_NOT_FOUND(e.schema,e.table),Gh.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(n){let f={};n.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=rV.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){$l.warn(`unable to stat table dbi due to ${f}`)}return d}a(Ql,"descTable");async function oV(e){Yl.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 s=e.schema.toString(),i=xh()[s];if(!i)throw Kl(new Error,Wl.SCHEMA_NOT_FOUND(e.schema),Gh.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Yl.isEmpty(u)||u.describe){let _=await Ql({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(oV,"describeSchema")});var qn=T((ioe,vN)=>{var aV=Si(),{callbackify:UN,promisify:cV}=require("util"),{getDatabases:MN}=(fe(),Z(Ce));vN.exports={setSchemaDataToGlobal:DN,getTableSchema:uV,getSystemSchema:lV,setSchemaDataToGlobalAsync:cV(DN)};var PN=gi(),soe=UN(PN.describeAll),noe=UN(PN.describeTable);function DN(e){global.hdb_schema=MN(),e&&e()}a(DN,"setSchemaDataToGlobal");function uV(e,t,r){let s=MN()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(uV,"getTableSchema");function lV(){return aV}a(lV,"getSystemSchema")});var xr=T((aoe,FN)=>{"use strict";var Jl=Mh(),bt=$(),_V=require("util"),Xl=us(),dV=qn(),BN=G(),{handleHDBError:Ri,hdb_errors:fV}=j(),{HTTP_STATUS_CODES:Ai}=fV,EV=_V.promisify(dV.getTableSchema),hV="updated",HN="inserted",qN="upserted";FN.exports={insert:pV,update:SV,upsert:TV,validation:mV,flush:gV};async function mV(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 EV(e.schema,e.table),r=Jl(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&bt.isEmptyOrZeroLength(c[s]))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[s])&&(c[s]==="null"||c[s]==="undefined"))throw BN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!bt.isEmpty(c[s])&&c[s]!==""&&n.has(bt.autoCast(c[s]))&&(c.skip=!0),n.add(bt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(mV,"validation");async function pV(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Jl(e);if(t)throw Ri(new Error,t.message,Ai.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ri(new Error,r,Ai.BAD_REQUEST);let s=await Xl.createRecords(e);return zl(HN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(pV,"insertData");async function SV(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Jl(e);if(t)throw Ri(new Error,t.message,Ai.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ri(new Error,r,Ai.BAD_REQUEST);let s=await Xl.updateRecords(e);return bt.isEmpty(s.existing_rows)?zl(hV,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):zl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(SV,"updateData");async function TV(e){if(e.operation!=="upsert")throw Ri(new Error,"invalid operation, must be upsert",Ai.INTERNAL_SERVER_ERROR);let t=Jl(e);if(t)throw Ri(new Error,t.message,Ai.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ri(new Error,r,Ai.BAD_REQUEST);let s=await Xl.upsertRecords(e);return zl(qN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(TV,"upsertData");function zl(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===HN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===qN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(zl,"returnObject");function gV(e){return bt.transformReq(e),Xl.flush(e.schema,e.table)}a(gV,"flush")});var Vh=T((uoe,kN)=>{var RV=ke(),kh=require("joi"),{hdb_table:AV,hdb_database:GN}=Ds(),xN={schema:GN,database:GN,table:AV},OV={date:kh.date().iso().required()},NV={timestamp:kh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};kN.exports=function(e,t){let r=t==="timestamp"?{...xN,...NV}:{...xN,...OV},s=kh.object(r);return RV.validateBySchema(e,s)}});var YN=T((loe,$N)=>{var bV=ke(),$h=require("joi"),{hdb_table:yV,hdb_database:VN}=Ds(),IV=$h.object({schema:VN,database:VN,table:yV,hash_values:$h.array().required(),ids:$h.array()});$N.exports=function(e){return bV.validateBySchema(e,IV)}});var WN=T((_oe,KN)=>{"use strict";var Yh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},Kh=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},Wh=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};KN.exports={InsertObject:Yh,NoSQLSeachObject:Kh,DeleteResponseObject:Wh}});var bi=T((foe,jN)=>{"use strict";var zN=Vh(),wV=YN(),Oi=$(),QN=require("moment"),JN=G(),{promisify:CV,callbackify:LV}=require("util"),Ni=y(),DV=qn(),Qh=CV(DV.getTableSchema),zh=us(),{DeleteResponseObject:UV}=WN(),{handleHDBError:Fn,hdb_errors:MV}=j(),{HDB_ERROR_MSGS:jl,HTTP_STATUS_CODES:Gn}=MV,PV="records successfully deleted",vV=LV(XN);jN.exports={delete:vV,deleteRecord:XN,deleteFilesBefore:BV,deleteAuditLogsBefore:HV};async function BV(e){let t=zN(e,"date");if(t)throw Fn(t,t.message,Gn.BAD_REQUEST,void 0,void 0,!0);if(Oi.transformReq(e),!QN(e.date,QN.ISO_8601).isValid())throw Fn(new Error,jl.INVALID_DATE,Gn.BAD_REQUEST,Ni.LOG_LEVELS.ERROR,jl.INVALID_DATE,!0);let s=Oi.checkSchemaTableExist(e.schema,e.table);if(s)throw Fn(new Error,s,Gn.NOT_FOUND,Ni.LOG_LEVELS.ERROR,s,!0);let n=await zh.deleteRecordsBefore(e);if(await Qh(e.schema,e.table),JN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(BV,"deleteFilesBefore");async function HV(e){let t=zN(e,"timestamp");if(t)throw Fn(t,t.message,Gn.BAD_REQUEST,void 0,void 0,!0);if(Oi.transformReq(e),isNaN(e.timestamp))throw Fn(new Error,jl.INVALID_VALUE("Timestamp"),Gn.BAD_REQUEST,Ni.LOG_LEVELS.ERROR,jl.INVALID_VALUE("Timestamp"),!0);let r=Oi.checkSchemaTableExist(e.schema,e.table);if(r)throw Fn(new Error,r,Gn.NOT_FOUND,Ni.LOG_LEVELS.ERROR,r,!0);let s=await zh.deleteAuditLogsBefore(e);return await Qh(e.schema,e.table),JN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(HV,"deleteAuditLogsBefore");async function XN(e){e.ids&&(e.hash_values=e.ids);let t=wV(e);if(t)throw Fn(t,t.message,Gn.BAD_REQUEST,void 0,void 0,!0);Oi.transformReq(e);let r=Oi.checkSchemaTableExist(e.schema,e.table);if(r)throw Fn(new Error,r,Gn.NOT_FOUND,Ni.LOG_LEVELS.ERROR,r,!0);try{await Qh(e.schema,e.table);let s=await zh.deleteRecords(e);return Oi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${PV}`),s}catch(s){if(s.message===Ni.SEARCH_NOT_FOUND_MESSAGE){let n=new UV;return n.message=Ni.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(XN,"deleteRecord")});var Zl=T((hoe,tb)=>{var qV=require("crypto"),ZN=9;function FV(e){let t=xV(ZN),r=eb(e+t);return t+r}a(FV,"createHash");function GV(e,t){let r=e.substr(0,ZN),s=r+eb(t+r);return e===s}a(GV,"validateHash");function xV(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(xV,"generateSalt");function eb(e){return qV.createHash("md5").update(e).digest("hex")}a(eb,"md5");tb.exports={hash:FV,validate:GV}});var sb=T((poe,rb)=>{var Jh=ke(),qt={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 kV(e){return qt.password.presence=!0,qt.username.presence=!0,qt.role.presence=!0,qt.active.presence=!0,Jh.validateObject(e,qt)}a(kV,"addUserValidation");function VV(e){return qt.password.presence=!1,qt.username.presence=!0,qt.role.presence=!1,qt.active.presence=!1,Jh.validateObject(e,qt)}a(VV,"alterUserValidation");function $V(e){return qt.password.presence=!1,qt.username.presence=!0,qt.role.presence=!1,qt.active.presence=!1,Jh.validateObject(e,qt)}a($V,"dropUserValidation");rb.exports={addUserValidation:kV,alterUserValidation:VV,dropUserValidation:$V}});var Ve=T((goe,ib)=>{"use strict";var{platform:Toe}=require("os"),YV="nats-server.zip",Xh="nats-server",KV=process.platform==="win32"?`${Xh}.exe`:Xh,jh="HDB",WV=/^[^\s.,*>]+$/,nb="__request__",QV=a(e=>`${e}.${nb}`,"REQUEST_SUBJECT"),zV={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},JV={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},XV={HUB:"hub.pid",LEAF:"leaf.pid"},jV={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},ZV={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:jh,deliver_subject:"__HDB__.WORKQUEUE"},e$={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:jh,deliver_subject:"HDB.SCHEMAQUEUE"},t$={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:jh,deliver_subject:"HDB.USERQUEUE"},r$={SUCCESS:"success",ERROR:"error"},s$={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},n$={TXN:"txn",MSGID:"msgid"},ho={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},i$={[ho.ERR]:1,[ho.WRN]:2,[ho.INF]:3,[ho.DBG]:4,[ho.TRC]:5},o$={debug:"-D",trace:"-DVV"};ib.exports={NATS_SERVER_ZIP:YV,NATS_SERVER_NAME:Xh,NATS_BINARY_NAME:KV,PID_FILES:XV,NATS_CONFIG_FILES:JV,SERVER_SUFFIX:jV,WORK_QUEUE_CONSUMER_NAMES:ZV,SCHEMA_QUEUE_CONSUMER_NAMES:e$,USER_QUEUE_CONSUMER_NAMES:t$,NATS_TERM_CONSTRAINTS_RX:WV,REQUEST_SUFFIX:nb,UPDATE_REMOTE_RESPONSE_STATUSES:r$,CLUSTER_STATUS_STATUSES:s$,REQUEST_SUBJECT:QV,SUBJECT_PREFIXES:n$,MSG_HEADERS:zV,LOG_LEVELS:ho,LOG_LEVEL_FLAGS:o$,LOG_LEVEL_HIERARCHY:i$}});var ab=T((Aoe,ob)=>{"use strict";var a$={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,String.fromCharCode(13,10)),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,String.fromCharCode(13,10))},c$="certificate.pem",u$="privateKey.pem",l$="ca.pem";ob.exports={CERTIFICATE_VALUES:a$,CERTIFICATE_PEM_NAME:c$,PRIVATEKEY_PEM_NAME:u$,CA_PEM_NAME:l$}});var em=T((Noe,db)=>{"use strict";var _b=require("fs-extra"),ue=require("joi"),_$=require("os"),{boolean:we,string:Ms,number:yt,array:Zh}=ue.types(),{totalmem:cb}=require("os"),mo=require("path"),d$=G(),t_=$(),Ooe=ab(),ub=y(),f$=ke(),lb="log",E$="components",h$="Invalid logging.rotation.maxSize unit. Available units are G, M or K",m$="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",p$="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",S$="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",T$="rootPath config parameter is undefined",g$="clustering.enabled config parameter is undefined",yi=yt.min(0).required(),r_=Zh.items({host:Ms.required(),port:yi}).empty(null),an;db.exports={configValidator:R$,routesValidator:I$,route_constraints:r_};function R$(e){if(an=e.rootPath,t_.isEmpty(an))throw T$;let t=we.required(),r=yt.min(0).max(1e3).empty(null).default(y$),s=Ms.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(e_),n=Ms.optional().empty(null),i=Ms.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ue.string().empty(null).default(e_),c=ue.custom(O$).empty(null).default(e_),u=e.clustering?.enabled;if(t_.isEmpty(u))throw g$;let _;return u===!0?_=ue.object({enabled:t,hubServer:ue.object({cluster:ue.object({name:ue.required().empty(null),network:ue.object({port:yi,routes:r_}).required()}).required(),leafNodes:ue.object({network:ue.object({port:yi}).required()}).required(),network:ue.object({port:yi}).required()}).required(),leafServer:ue.object({network:ue.object({port:yi,routes:r_}).required(),streams:ue.object({maxAge:yt.min(120).allow(null).optional(),maxBytes:yt.min(1).allow(null).optional(),maxMsgs:yt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ue.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:we.optional(),databaseLevel:we.optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:we.required(),verify:we.optional()}),user:Ms.optional().empty(null)}).required():_=ue.object({enabled:t,tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:we.required()})}).required(),ue.object({authentication:ue.object({authorizeLocal:we,cacheTTL:yt.required(),enableSessions:we}),analytics:ue.object({aggregatePeriod:yt}),componentsRoot:s.optional(),clustering:_,localStudio:ue.object({enabled:t}).required(),logging:ue.object({auditAuthEvents:ue.object({logFailed:we,logSuccessful:we}),file:we.required(),level:ue.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ue.object({enabled:we.optional(),compress:we.optional(),interval:Ms.custom(b$).optional().empty(null),maxSize:Ms.custom(N$).optional().empty(null),path:Ms.optional().empty(null).default(e_)}).required(),root:s,stdStreams:we.required(),auditLog:we.required()}).required(),operationsApi:ue.object({network:ue.object({cors:we.optional(),corsAccessList:Zh.optional(),headersTimeout:yt.min(1).optional(),keepAliveTimeout:yt.min(1).optional(),port:yt.optional().empty(null),securePort:yt.optional().empty(null),timeout:yt.min(1).optional()}).optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:Ms.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ue.object({network:ue.object({port:yi,securePort:yi}).required(),webSocket:we.optional(),requireAuthentication:we.optional()}),http:ue.object({compressionThreshold:yt.optional(),cors:we.optional(),corsAccessList:Zh.optional(),headersTimeout:yt.min(1).optional(),port:yt.min(0).optional().empty(null),securePort:yt.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:ue.object({writeAsync:we.required(),overlappingSync:we.optional(),caching:we.optional(),compression:we.optional(),noReadAhead:we.optional(),path:c,prefetchWrites:we.optional()}).required(),ignoreScripts:we.optional(),tls:ue.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(R$,"configValidator");function A$(e){return _b.existsSync(e)?null:`Specified path ${e} does not exist.`}a(A$,"doesPathExist");function O$(e,t){ue.assert(e,Ms.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=A$(e);if(r)return t.message(r)}a(O$,"validatePath");function N$(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(h$);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(p$):e}a(N$,"validateRotationMaxSize");function b$(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(m$);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(S$):e}a(b$,"validateRotationInterval");function y$(e,t){let r=t.state.path.join("."),s=_$.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||cb();return i=Math.round(Math.min(i,cb())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),d$.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(y$,"setDefaultThreads");function e_(e,t){if(!t_.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(t_.isEmpty(an))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return mo.join(an,E$);case"logging.root":return mo.join(an,lb);case"clustering.leafServer.streams.path":return mo.join(an,"clustering","leaf");case"storage.path":let s=mo.join(an,ub.LEGACY_DATABASES_DIR_NAME);return _b.existsSync(s)?s:mo.join(an,ub.DATABASES_DIR_NAME);case"logging.rotation.path":return mo.join(an,lb);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(e_,"setDefaultRoot");function I$(e){let t=ue.object({routes:r_});return f$.validateBySchema({routes:e},t)}a(I$,"routesValidator")});var Rr=T((Ioe,Rb)=>{"use strict";var gr=y(),pt=$(),lt=G(),{configValidator:w$,routesValidator:fb}=em(),Jt=require("fs-extra"),C$=require("yaml"),ls=require("path"),L$=require("is-number"),hb=require("properties-reader"),D$=require("lodash"),{handleHDBError:U$}=j(),{HTTP_STATUS_CODES:M$,HDB_ERROR_MSGS:s_}=fr(),yoe=require("minimist"),{server:P$}=(hr(),Z(hi)),{DATABASES_PARAM_CONFIG:ic,CONFIG_PARAMS:Tr,CONFIG_PARAM_MAP:_s}=gr,v$="Unable to get config value because config is uninitialized",B$="Config successfully initialized",H$="Error backing up config file",q$="Empty parameter sent to getConfigValue",mb=ls.join(gr.PACKAGE_ROOT,"config","yaml",gr.HDB_DEFAULT_CONFIG_FILE),F$="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Eb={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"},n_,_t,i_;Rb.exports={createConfigFile:G$,getDefaultConfig:x$,getConfigValue:Sb,initConfig:rm,flattenConfig:po,updateConfigValue:Tb,updateConfigObject:V$,getConfiguration:K$,setConfiguration:W$,readConfigFile:nm,getClusteringRoutes:Q$,initOldConfig:gb,getConfigFromFile:z$,getConfigFilePath:Ii,addConfig:J$,deleteConfigFromFile:X$,getConfigObj:j$};function G$(e){let t=xn(mb);n_=po(t.toJSON());let r;for(let o in e){let c=_s[o.toLowerCase()];if(c===Tr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=tm(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){lt.error(l)}}}r&&pb(t,r),sm(t);let s=t.toJSON();_t=po(s);let n=t.getIn(["rootPath"]),i=ls.join(n,gr.HDB_CONFIG_FILE);Jt.createFileSync(i),Jt.writeFileSync(i,String(t)),lt.trace(`Config file written to ${i}`)}a(G$,"createConfigFile");function pb(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!pt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(ic.TABLES))for(let i in s[n][ic.TABLES])for(let o in s[n][ic.TABLES][i]){let c=s[n][ic.TABLES][i][o],u=[Tr.DATABASES,n,ic.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[Tr.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){lt.error("Error parsing schemas CLI/env config arguments",s)}}a(pb,"setSchemasConfig");function x$(e){if(n_===void 0){let r=xn(mb);n_=po(r.toJSON())}let t=_s[e.toLowerCase()];if(t!==void 0)return n_[t.toLowerCase()]}a(x$,"getDefaultConfig");function Sb(e){if(e==null){lt.error(q$);return}if(_t===void 0){lt.trace(v$);return}let t=_s[e.toLowerCase()];if(t!==void 0)return _t[t.toLowerCase()]}a(Sb,"getConfigValue");function Ii(e=pt.getPropsFilePath()){let t=pt.getEnvCliRootPath();return t?ls.join(t,gr.HDB_CONFIG_FILE):hb(e).get(gr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Ii,"getConfigFilePath");function rm(e=!1){if(_t===void 0||e){let t;if(!pt.noBootFile()){t=pt.getPropsFilePath();try{Jt.accessSync(t,Jt.constants.F_OK|Jt.constants.R_OK)}catch(i){throw lt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Ii(t),s;if(r.includes("config/settings.js"))try{gb(r);return}catch(i){if(i.code!==gr.NODE_ERROR_CODES.ENOENT)throw i}try{s=xn(r)}catch(i){if(i.code===gr.NODE_ERROR_CODES.ENOENT){lt.trace(`HarperDB config file not found at ${r}.
5
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw lt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}k$(s,r),sm(s);let n=s.toJSON();if(P$.config=n,_t=po(n),_t.logging_rotation_rotate)for(let i in Eb)_t[i]&&lt.error(`Config ${Eb[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);lt.trace(B$)}}a(rm,"initConfig");function k$(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ls.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ls.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ls.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(lt.trace("Updating config file with missing config params"),Jt.writeFileSync(t,String(e)))}a(k$,"checkForUpdatedConfig");function sm(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=w$(t);if(r.error)throw s_.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)}a(sm,"validateConfig");function V$(e,t){_t===void 0&&(_t={});let r=_s[e.toLowerCase()];if(r===void 0){lt.trace(`Unable to update config object because config param '${e}' does not exist`);return}_t[r.toLowerCase()]=t}a(V$,"updateConfigObject");function Tb(e,t,r=void 0,s=!1,n=!1,i=!1){_t===void 0&&rm();let o=Sb(_s.hdb_root),c=ls.join(o,gr.HDB_CONFIG_FILE),u=xn(c),_;if(r===void 0&&e.toLowerCase()===Tr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=_s[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=tm(f,t);u.setIn([...E],h)}else for(let f in r){let E=_s[f.toLowerCase()];if(E===Tr.HTTP_SECUREPORT&&r[f]===_t[Tr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Tr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===_t[Tr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Tr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=gr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=tm(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(R){lt.error(R)}}}_&&pb(u,_),sm(u);let l=u.getIn(["rootPath"]),d=ls.join(l,gr.HDB_CONFIG_FILE);s===!0&&$$(c,l),Jt.writeFileSync(d,String(u)),n&&(_t=po(u.toJSON())),lt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Tb,"updateConfigValue");function $$(e,t){try{let r=ls.join(t,"backup",`${gr.HDB_CONFIG_FILE}.bak`);Jt.copySync(e,r),lt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){lt.error(H$),lt.error(r)}}a($$,"backupConfigFile");var Y$=["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)),i_=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i))if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!Y$.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Tr[u.toUpperCase()]&&_s[u]&&(n[_s[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(po,"flattenConfig");function tm(e,t){if(e===Tr.CLUSTERING_NODENAME||e===Tr.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(L$(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||pt.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 pt.autoCast(t)}a(tm,"castConfigValue");function K$(){let e=pt.getPropsFilePath(),t=Ii(e);return xn(t).toJSON()}a(K$,"getConfiguration");async function W$(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Tb(void 0,void 0,n,!0),F$}catch(i){throw typeof i=="string"||i instanceof String?U$(i,i,M$.BAD_REQUEST,void 0,void 0,!0):i}}a(W$,"setConfiguration");function nm(){let e=pt.getPropsFilePath();try{Jt.accessSync(e,Jt.constants.F_OK|Jt.constants.R_OK)}catch(s){if(!pt.noBootFile())throw lt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Ii(e);return xn(t).toJSON()}a(nm,"readConfigFile");function xn(e){return C$.parseDocument(Jt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(xn,"parseYamlDoc");function Q$(){let e=nm(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=pt.isEmptyOrZeroLength(t)?[]:t;let r=fb(t);if(r)throw s_.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=pt.isEmptyOrZeroLength(s)?[]:s;let n=fb(s);if(n)throw s_.CONFIG_VALIDATION(n.message);if(!pt.isEmptyOrZeroLength(s)&&!pt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!pt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw s_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(Q$,"getClusteringRoutes");function gb(e){let t=hb(e);_t={};for(let r in _s){let s=t.get(r.toUpperCase());if(pt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=_s[r].toLowerCase();n===Tr.LOGGING_ROOT?_t[n]=ls.dirname(s):_t[n]=s}return _t}a(gb,"initOldConfig");function z$(e){let t=nm();return D$.get(t,e.replaceAll("_","."))}a(z$,"getConfigFromFile");async function J$(e,t){let r=xn(Ii());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Jt.writeFile(Ii(),String(r))}a(J$,"addConfig");function X$(e){let t=Ii(pt.getPropsFilePath()),r=xn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=ls.join(s,gr.HDB_CONFIG_FILE);Jt.writeFileSync(n,String(r))}a(X$,"deleteConfigFromFile");function j$(){return i_||(rm(),i_)}a(j$,"getConfigObj")});var Ob=T((Coe,Ab)=>{"use strict";var o_=y(),a_=class{static{a(this,"BaseLicense")}constructor(t=0,r=o_.RAM_ALLOCATION_ENUM.DEFAULT,s=o_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},im=class extends a_{static{a(this,"ExtendedLicense")}constructor(t=0,r=o_.RAM_ALLOCATION_ENUM.DEFAULT,s=o_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};Ab.exports={BaseLicense:a_,ExtendedLicense:im}});var oc=T((Doe,Cb)=>{"use strict";var To=require("fs-extra"),Nb=Zl(),bb=require("crypto"),Z$=require("moment"),eY=require("uuid").v4,Ft=G(),am=require("path"),tY=$(),kn=y(),rY=Ob().ExtendedLicense,So="invalid license key format",sY="061183",nY="mofi25",iY="aes-256-cbc",oY=16,aY=32,yb=X();yb.initSync();var om;Cb.exports={validateLicense:Ib,generateFingerPrint:uY,licenseSearch:wb,getLicense:dY};function cm(){return am.join(yb.getHdbBasePath(),kn.LICENSE_KEY_DIR_NAME,kn.LICENSE_FILE_NAME)}a(cm,"getLicenseDirPath");function cY(){let e=cm();return am.join(e,kn.LICENSE_FILE_NAME)}a(cY,"getLicenseFilePath");function um(){let e=cm();return am.join(e,kn.REG_KEY_FILE_NAME)}a(um,"getFingerPrintFilePath");async function uY(){let e=um();try{return await To.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await lY();throw Ft.error(`Error writing fingerprint file to ${e}`),Ft.error(t),new Error("There was an error generating the fingerprint")}}a(uY,"generateFingerPrint");async function lY(){let e=eY(),t=Nb.hash(e),r=um();try{await To.mkdirp(cm()),await To.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ft.error(`Error writing fingerprint file to ${r}`),Ft.error(s),new Error("There was an error generating the fingerprint")}return t}a(lY,"writeFingerprint");function Ib(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:kn.RAM_ALLOCATION_ENUM.DEFAULT,version:kn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ft.error("empty license key passed to validate."),r;let s=um(),n=!1;try{n=To.statSync(s)}catch(i){Ft.error(i)}if(n){let i;try{i=To.readFileSync(s,"utf8")}catch{Ft.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(nY),c=o[1];c=Buffer.concat([Buffer.from(c)],oY);let u=Buffer.concat([Buffer.from(i)],aY),_=bb.createDecipheriv(iY,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=_Y(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(So),Ft.error(So),new Error(So)}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(So),Ft.error(So),new Error(So)}else r.exp_date=l;r.exp_date<Z$().valueOf()&&(r.valid_date=!1),Nb.validate(o[1],`${sY}${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||Ft.error("Invalid licence"),r}a(Ib,"validateLicense");function _Y(e,t){try{let r=bb.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ft.warn("Check old license failed")}}a(_Y,"checkOldLicense");function wb(){let e=new rY,t=[];try{t=To.readFileSync(cY(),"utf-8").split(kn.NEW_LINE)}catch(r){r.code==="ENOENT"?Ft.info("no license file found"):Ft.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(tY.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=Ib(n.license_key,n.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(n){Ft.error("There was an error parsing the license string."),Ft.error(n),e.ram_allocation=kn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return om=e,e}a(wb,"licenseSearch");async function dY(){return om||await wb(),om}a(dY,"getLicense")});var kr=T((Boe,Yb)=>{"use strict";var Mb="username is required",Pb="nothing to update, must supply active, role or password to update",vb="password cannot be an empty string",Bb="If role is specified, it cannot be empty.",Hb="active must be true or false";Yb.exports={addUser:RY,alterUser:AY,dropUser:NY,getSuperUser:wY,userInfo:bY,listUsers:u_,listUsersExternal:yY,setUsersToGlobal:Ro,findAndValidateUser:Vb,getClusterUser:CY,USERNAME_REQUIRED:Mb,ALTERUSER_NOTHING_TO_UPDATE:Pb,EMPTY_PASSWORD:vb,EMPTY_ROLE:Bb,ACTIVE_BOOLEAN:Hb};var qb=xr(),fY=bi(),dm=Zl(),Fb=sb(),Gb=Gr(),fm=cn(),Ar=$(),xb=require("validate.js"),_e=G(),{promisify:EY}=require("util"),Em=on(),Lb=y(),Db=Ve(),hY=Rr(),Moe=X(),Poe=oc(),mY=Si(),{table:voe}=(fe(),Z(Ce)),{handleHDBError:Ps,hdb_errors:pY}=j(),{HTTP_STATUS_CODES:vs,AUTHENTICATION_ERROR_MSGS:lm,HDB_ERROR_MSGS:go}=pY,{UserEventMsg:hm}=ds(),_m=require("lodash"),{server:mm}=(hr(),Z(hi)),SY=G();mm.getUser=Vb;var kb={username:!0,active:!0,role:!0,password:!0},Ub=new Map,c_=Gb.searchByValue,TY=Gb.searchByHash,gY=EY(fY.delete);async function RY(e){let t=xb.cleanAttributes(e,kb),r=Fb.addUserValidation(t);if(r)throw Ps(new Error,r.message,vs.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await c_(s),n=n&&Array.from(n)}catch(u){throw _e.error("There was an error searching for a role in add user"),_e.error(u),u}if(!n||n.length<1)throw Ps(new Error,go.ROLE_NAME_NOT_FOUND(t.role),vs.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Ps(new Error,go.DUP_ROLES_FOUND(t.role),vs.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Em.encrypt(t.password)),t.password=dm.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await qb.insert(i)}catch(u){throw _e.error("There was an error searching for a user."),_e.error(u),u}_e.debug(o);try{await Ro()}catch(u){throw _e.error("Got an error setting users to global"),_e.error(u),u}if(o.skipped_hashes.length===1)throw Ps(new Error,go.USER_ALREADY_EXISTS(t.username),vs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],fm.signalUserChange(new hm(process.pid)),`${c.username} successfully added`}a(RY,"addUser");async function AY(e){let t=xb.cleanAttributes(e,kb);if(Ar.isEmptyOrZeroLength(t.username))throw new Error(Mb);if(Ar.isEmptyOrZeroLength(t.password)&&Ar.isEmptyOrZeroLength(t.role)&&Ar.isEmptyOrZeroLength(t.active))throw new Error(Pb);if(!Ar.isEmpty(t.password)&&Ar.isEmptyOrZeroLength(t.password.trim()))throw new Error(vb);if(!Ar.isEmpty(t.active)&&!Ar.isBoolean(t.active))throw new Error(Hb);let r=OY(t.username);if(!Ar.isEmpty(t.password)&&!Ar.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Em.encrypt(t.password)),t.password=dm.hash(t.password)),t.role==="")throw new Error(Bb);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 c_(i)||[])}catch(c){throw _e.error("Got an error searching for a role."),_e.error(c),c}if(!o||o.length===0){let c=go.ALTER_USER_ROLE_NOT_FOUND(t.role);throw _e.error(c),Ps(new Error,c,vs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=go.ALTER_USER_DUP_ROLES(t.role);throw _e.error(c),Ps(new Error,c,vs.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await qb.update(s)}catch(i){throw _e.error("Error during update."),_e.error(i),i}try{await Ro()}catch(i){throw _e.error("Got an error setting users to global"),_e.error(i),i}return fm.signalUserChange(new hm(process.pid)),n}a(AY,"alterUser");function OY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(OY,"isClusterUser");async function NY(e){try{let t=Fb.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Ar.isEmpty(global.hdb_users.get(e.username)))throw Ps(new Error,go.USER_NOT_EXIST(e.username),vs.NOT_FOUND,void 0,void 0,!0);let s;try{s=await gY(r)}catch(n){throw _e.error("Got an error deleting a user."),_e.error(n),n}_e.debug(s);try{await Ro()}catch(n){throw _e.error("Got an error setting users to global."),_e.error(n),n}return fm.signalUserChange(new hm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(NY,"dropUser");async function bY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=_m.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await TY(r)}catch(n){throw _e.error("Got an error searching for a role."),_e.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw _e.error(r),r}return t}a(bY,"userInfo");async function yY(){let e;try{e=await u_()}catch(t){throw _e.error("Got an error listing users."),_e.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(yY,"listUsersExternal");async function u_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await c_(e)}catch(o){throw _e.error("Got an error searching for roles."),_e.error(o),o}let r={};for(let o of t)r[o.id]=_m.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await c_(s)}catch(o){throw _e.error("Got an error searching for users."),_e.error(o),o}let i=new Map;for(let o of n)o=_m.cloneDeep(o),o.role=r[o.role],IY(o.role),i.set(o.username,o);return i}catch(e){throw _e.error("got an error listing users"),_e.error(e),Ar.errorizeMessage(e)}return null}a(u_,"listUsers");function IY(e){try{if(!e){_e.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(mY)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){_e.error("Got an error trying to set system permissions."),_e.error(t)}}a(IY,"appendSystemTablesToRole");async function Ro(){try{let e=await u_();global.hdb_users=e}catch(e){throw _e.error(e),e}}a(Ro,"setUsersToGlobal");async function Vb(e,t,r=!0){global.hdb_users||await Ro();let s=global.hdb_users.get(e);if(!s)throw Ps(new Error,lm.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Ps(new Error,lm.USER_INACTIVE,vs.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(Ub.get(t)===s.password)return n;if(dm.validate(s.password,t))Ub.set(t,s.password);else throw Ps(new Error,lm.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Vb,"findAndValidateUser");async function wY(){global.hdb_users||await Ro();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(wY,"getSuperUser");async function CY(){let e=await u_(),t=hY.getConfigFromFile(Lb.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Ar.isEmpty(r)&&r?.role?.role===Lb.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Em.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Db.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Db.SERVER_SUFFIX.ADMIN,r}a(CY,"getClusterUser");var $b=[];mm.invalidateUser=function(e){for(let t of $b)try{t(e)}catch(r){SY.error("Error invalidating user",r)}};mm.onInvalidatedUser=function(e){$b.push(e)}});var cc=T((Goe,zb)=>{"use strict";var wi=G(),Or=y(),LY=NN(),qoe=qn(),Foe=gi(),DY=kr(),{validateEvent:Kb}=ds(),ac=us(),UY=require("process"),{resetDatabases:MY}=(fe(),Z(Ce)),PY={[Or.ITC_EVENT_TYPES.SCHEMA]:vY,[Or.ITC_EVENT_TYPES.USER]:Qb};async function vY(e){let t=Kb(e);if(t){wi.error(t);return}wi.trace("ITC schemaHandler received schema event:",e),await LY(e.message),await BY(e.message)}a(vY,"schemaHandler");async function BY(e){try{ac.resetReadTxn(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ac.resetReadTxn(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ac.resetReadTxn(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=MY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){wi.error(t)}}a(BY,"syncSchemaMetadata");var Wb=[];async function Qb(e){try{try{ac.resetReadTxn(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ac.resetReadTxn(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){wi.warn(r)}let t=Kb(e);if(t){wi.error(t);return}wi.trace(`ITC userHandler ${Or.HDB_ITC_CLIENT_PREFIX}${UY.pid} received user event:`,e),await DY.setUsersToGlobal();for(let r of Wb)r()}catch(t){wi.error(t)}}a(Qb,"userHandler");Qb.addListener=function(e){Wb.push(e)};zb.exports=PY});var ds=T((Koe,Xb)=>{"use strict";var koe=G(),pm=$(),HY=y(),{ITC_ERRORS:uc}=fr(),{parentPort:Voe,threadId:qY,isMainThread:FY,workerData:$oe}=require("worker_threads"),{onMessageFromWorkers:GY,broadcast:Yoe,broadcastWithAcknowledgement:xY}=Je();Xb.exports={sendItcEvent:kY,validateEvent:Jb,SchemaEventMsg:VY,UserEventMsg:$Y};var l_;GY(async(e,t)=>{l_=l_||cc(),Jb(e),l_[e.type]&&await l_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function kY(e){return!FY&&e.message&&(e.message.originator=qY),xY(e)}a(kY,"sendItcEvent");function Jb(e){if(typeof e!="object")return uc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||pm.isEmpty(e.type))return uc.MISSING_TYPE;if(!e.hasOwnProperty("message")||pm.isEmpty(e.message))return uc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||pm.isEmpty(e.message.originator))return uc.MISSING_ORIGIN;if(HY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return uc.INVALID_EVENT(e.type)}a(Jb,"validateEvent");function VY(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(VY,"SchemaEventMsg");function $Y(e){this.originator=e}a($Y,"UserEventMsg")});var cn=T((zoe,ty)=>{"use strict";var jb=y(),Qoe=$(),__=G(),Zb=RN(),Ao,{sendItcEvent:ey}=ds();function YY(e){try{__.trace("signalSchemaChange called with message:",e),Ao=Ao||cc();let t=new Zb(jb.ITC_EVENT_TYPES.SCHEMA,e);return Ao.schema(t),ey(t)}catch(t){__.error(t)}}a(YY,"signalSchemaChange");function KY(e){try{__.trace("signalUserChange called with message:",e),Ao=Ao||cc();let t=new Zb(jb.ITC_EVENT_TYPES.USER,e);return Ao.user(t),ey(t)}catch(t){__.error(t)}}a(KY,"signalUserChange");ty.exports={signalSchemaChange:YY,signalUserChange:KY}});var d_=T((Xoe,sy)=>{"use strict";var ry=$(),WY=y(),QY=G(),zY=kl(),JY=xl(),XY=cn(),{SchemaEventMsg:jY}=ds(),ZY="already exists in";sy.exports=e1;async function e1(e,t,r){if(ry.isEmptyOrZeroLength(r))return r;let s=[];ry.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await t1(e,t.schema,t.name,i)})),n}a(e1,"lmdbCheckForNewAttributes");async function t1(e,t,r,s){let n=new JY(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await r1(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(ZY))QY.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(t1,"createNewAttribute");async function r1(e){let t;return t=await zY(e),XY.signalSchemaChange(new jY(process.pid,WY.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(r1,"createAttribute")});var Oo=T((Zoe,ny)=>{"use strict";var Sm=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};ny.exports=Sm});var oy=T((tae,iy)=>{"use strict";var s1=Oo(),n1=y().OPERATIONS_ENUM,Tm=class extends s1{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(n1.INSERT,r,s,n,i),this.records=t}};iy.exports=Tm});var cy=T((sae,ay)=>{"use strict";var i1=Oo(),o1=y().OPERATIONS_ENUM,gm=class extends i1{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(o1.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};ay.exports=gm});var ly=T((iae,uy)=>{"use strict";var a1=Oo(),c1=y().OPERATIONS_ENUM,Rm=class extends a1{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(c1.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};uy.exports=Rm});var dy=T((aae,_y)=>{"use strict";var u1=Oo(),l1=y().OPERATIONS_ENUM,Am=class extends u1{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(l1.DELETE,s,n,t,i),this.original_records=r}};_y.exports=Am});var lc=T((lae,my)=>{"use strict";var uae=require("path"),fy=Ue(),_1=oy(),d1=cy(),f1=ly(),E1=dy(),No=ze(),Ey=$(),{CONFIG_PARAMS:h1}=y(),hy=X();hy.initSync();var f_=y().OPERATIONS_ENUM,{getTransactionAuditStorePath:m1}=ve();my.exports=p1;async function p1(e,t){if(hy.get(h1.LOGGING_AUDITLOG)===!1)return;let r=m1(e.schema,e.table),s=await fy.openEnvironment(r,e.table,!0),n=S1(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){fy.initializeDBIs(s,No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,No.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Ey.isEmpty(n.user_name)||s.dbis[No.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[No.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(p1,"writeTransaction");function S1(e,t){let r=Ey.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===f_.INSERT)return new _1(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===f_.UPDATE)return new d1(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===f_.UPSERT)return new f1(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===f_.DELETE)return new E1(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(S1,"createTransactionObject")});var Om=T((fae,py)=>{"use strict";var T1=ja(),dae=Za(),_c=y(),g1=sc(),R1=fo().insertRecords,A1=Ue(),O1=G(),N1=d_(),{getSchemaPath:b1}=ve(),y1=lc();py.exports=I1;async function I1(e){try{let{schema_table:t,attributes:r}=T1(e);g1(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 s=await N1(e.hdb_auth_header,t,r),n=b1(e.schema,e.table),i=await A1.openEnvironment(n,e.table),o=await R1(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await y1(e,o)}catch(c){O1.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:s,txn_time:o.txn_time}}catch(t){throw t}}a(I1,"lmdbCreateRecords")});var gy=T((hae,Ty)=>{"use strict";var Sy=y(),w1=Om(),C1=Za(),L1=require("fs-extra"),{getSchemaPath:D1}=ve();Ty.exports=U1;async function U1(e){let t=[{name:e.schema,createddate:Date.now()}],r=new C1(Sy.SYSTEM_SCHEMA_NAME,Sy.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await w1(r),await L1.mkdirp(D1(e.schema))}a(U1,"lmdbCreateSchema")});var Ay=T((pae,Ry)=>{"use strict";var Nm=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};Ry.exports=Nm});var yy=T((Aae,by)=>{"use strict";var Oy=Ue(),bm=Er(),ym=fr().LMDB_ERRORS_ENUM,M1=ze(),Ny=G(),Tae=$(),P1=require("lmdb"),v1=Ay(),B1=y(),{OVERFLOW_MARKER:gae,MAX_SEARCH_KEY_LENGTH:Rae}=M1,H1=B1.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function q1(e,t,r,s){if(bm.validateEnv(e),t===void 0)throw new Error(ym.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ym.IDS_REQUIRED):new Error(ym.IDS_MUST_BE_ITERABLE);try{let n=Oy.listDBIs(e);Oy.initializeDBIs(e,t,n);let i=new v1,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||s&&h[H1]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,P1.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let R=n[S];if(!h.hasOwnProperty(R)||R===t)continue;let b=e.dbis[R],O=h[R];if(O!=null)try{let Y=bm.getIndexedValues(O);if(Y)for(let Q=0,F=Y.length;Q<F;Q++)b.remove(Y[Q],o)}catch{Ny.warn(`cannot delete from attribute: ${R}, ${O}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){Ny.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=bm.getNextMonotonicTime(),i}catch(n){throw n}}a(q1,"deleteRecords");by.exports={deleteRecords:q1}});var dc=T((Nae,wy)=>{"use strict";var bo=$(),F1=yy(),G1=Ue(),{getSchemaPath:x1}=ve(),k1=lc(),V1=G();wy.exports=$1;async function $1(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(bo.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(bo.isEmptyOrZeroLength(e.hash_values)&&!bo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];bo.isEmpty(u)||e.hash_values.push(u)}}if(bo.isEmptyOrZeroLength(e.hash_values))return Iy([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(bo.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=x1(e.schema,e.table),i=await G1.openEnvironment(n,e.table),o=await F1.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await k1(e,o)}catch(c){V1.error(`unable to write transaction due to ${c.message}`)}return Iy(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a($1,"lmdbDeleteRecords");function Iy(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(Iy,"createDeleteResponse")});var wm=T((Iae,Cy)=>{"use strict";var Y1=y(),yae=Er();function Im(e,t){let r=Object.create(null);if(t.length===1&&Y1.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Im,"parseRow");function K1(e,t,r,s){let n=Im(r,e);s.push(n)}a(K1,"searchAll");function W1(e,t,r,s){let n=Im(r,e);s[t]=n}a(W1,"searchAllToMap");function Q1(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Q1,"iterateDBI");function Ci(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(Ci,"pushResults");function z1(e,t,r,s,n,i){t.toString().endsWith(e)&&Ci(t,r,s,n,i)}a(z1,"endsWith");function J1(e,t,r,s,n,i){t.toString().includes(e)&&Ci(t,r,s,n,i)}a(J1,"contains");function X1(e,t,r,s,n,i){t>e&&Ci(t,r,s,n,i)}a(X1,"greaterThanCompare");function j1(e,t,r,s,n,i){t>=e&&Ci(t,r,s,n,i)}a(j1,"greaterThanEqualCompare");function Z1(e,t,r,s,n,i){t<e&&Ci(t,r,s,n,i)}a(Z1,"lessThanCompare");function eK(e,t,r,s,n,i){t<=e&&Ci(t,r,s,n,i)}a(eK,"lessThanEqualCompare");Cy.exports={parseRow:Im,searchAll:K1,searchAllToMap:W1,iterateDBI:Q1,endsWith:z1,contains:J1,greaterThanCompare:X1,greaterThanEqualCompare:j1,lessThanCompare:Z1,lessThanEqualCompare:eK,pushResults:Ci}});var yo=T((Uae,By)=>{"use strict";var Vn=Ue(),Cae=G(),Nr=Er(),E_=ze(),Xe=fr().LMDB_ERRORS_ENUM,Lae=$(),tK=y(),h_=wm(),{parseRow:rK}=h_,Dae=require("lmdb"),{OVERFLOW_MARKER:Ly,MAX_SEARCH_KEY_LENGTH:sK}=E_;function Dy(e,t,r,s=!1,n=void 0,i=void 0){return Li(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(Dy,"iterateFullIndex");function fc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Li(e,t,r,(l,d,f,E)=>{let b={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(b.values=!1,d.getRange(b).map(O=>({value:O}))):d.getRange(b)})}a(fc,"iterateRangeBetween");function Li(e,t,r,s){let n=e.database||e,i=Vn.openDBI(n,r);i[E_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Vn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Li,"setupTransaction");function Uy(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(Ly)){if(!n)if(r)n=Vn.openDBI(e,r);else{let u=Vn.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=Vn.openDBI(e,u[_]),!n[E_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(Uy,"getOverflowCheck");function nK(e,t,r,s=!1,n=void 0,i=void 0){if(Nr.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);return Li(e,t,t,(o,c,u)=>(m_(r),r=Ec(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>rK(_.value,r))))}a(nK,"searchAll");function iK(e,t,r,s=!1,n=void 0,i=void 0){if(Nr.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);m_(r),r=Ec(e.database||e,r);let o=new Map;for(let{key:c,value:u}of Dy(e,t,t,s,n,i))o.set(c,h_.parseRow(u,r));return o}a(iK,"searchAllToMap");function oK(e,t,r=!1,s=void 0,n=void 0){if(Nr.validateEnv(e),t===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=Dy(e,void 0,t,r,s,n),c=o.transaction,u=Uy(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(oK,"iterateDBI");function aK(e,t){if(Nr.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);return Vn.statDBI(e,t).entryCount}a(aK,"countAll");function cK(e,t,r,s,n=!1,i=void 0,o=void 0){return $n(e,r,s),Li(e,t,r,(c,u,_,l)=>(s=Nr.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(cK,"equals");function uK(e,t,r){return $n(e,t,r),Vn.openDBI(e,t).getValuesCount(r)}a(uK,"count");function lK(e,t,r,s,n=!1,i=void 0,o=void 0){return $n(e,r,s),Li(e,null,r,(c,u)=>{s=Nr.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(lK,"startsWith");function _K(e,t,r,s,n=!1,i=void 0,o=void 0){return My(e,t,r,s,n,i,o,!0)}a(_K,"endsWith");function My(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return $n(e,r,s),Li(e,null,r,(u,_,l,d)=>{let f=Uy(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(Ly)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[E_.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(My,"contains");function dK(e,t,r,s,n=!1,i=void 0,o=void 0){$n(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),fc(e,t,r,s,u,n,i,o,!0,!1)}a(dK,"greaterThan");function fK(e,t,r,s,n=!1,i=void 0,o=void 0){$n(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),fc(e,t,r,s,u,n,i,o,!1,!1)}a(fK,"greaterThanEqual");function EK(e,t,r,s,n=!1,i=void 0,o=void 0){$n(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),fc(e,t,r,u,s,n,i,o,!1,!0)}a(EK,"lessThan");function hK(e,t,r,s,n=!1,i=void 0,o=void 0){$n(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),fc(e,t,r,u,s,n,i,o,!1,!1)}a(hK,"lessThanEqual");function mK(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Nr.validateEnv(e),r===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Xe.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Xe.END_VALUE_REQUIRED);if(s=Nr.convertKeyValueToWrite(s),n=Nr.convertKeyValueToWrite(n),s>n)throw new Error(Xe.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return fc(e,t,r,s,n,i,o,c)}a(mK,"between");function pK(e,t,r,s){Nr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(m_(r),r=Ec(n,r),s===void 0)throw new Error(Xe.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=h_.parseRow(c,r)),o}a(pK,"searchByHash");function SK(e,t,r){Nr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Xe.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(SK,"checkHashExists");function TK(e,t,r,s,n=[]){return vy(e,t,r,s,n),Py(e,t,r,s,n).map(i=>i[1])}a(TK,"batchSearchByHash");function gK(e,t,r,s,n=[]){vy(e,t,r,s,n);let i=new Map;for(let[o,c]of Py(e,t,r,s,n))i.set(o,c);return i}a(gK,"batchSearchByHashToMap");function Py(e,t,r,s,n=[]){return Li(e,t,t,(i,o,c)=>{r=Ec(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,h_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(Py,"batchHashSearch");function vy(e,t,r,s,n){if(Nr.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(m_(r),s==null)throw new Error(Xe.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Xe.IDS_MUST_BE_ITERABLE)}a(vy,"initializeBatchSearchByHash");function m_(e){if(!Array.isArray(e))throw e===void 0?new Error(Xe.FETCH_ATTRIBUTES_REQUIRED):new Error(Xe.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(m_,"validateFetchAttributes");function $n(e,t,r){if(Nr.validateEnv(e),t===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Xe.SEARCH_VALUE_REQUIRED);if(r?.length>sK)throw new Error(Xe.SEARCH_VALUE_TOO_LARGE)}a($n,"validateComparisonFunctions");function Ec(e,t){return t.length===1&&tK.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Vn.listDBIs(e)),t}a(Ec,"setGetWholeRowAttributes");By.exports={searchAll:nK,searchAllToMap:iK,count:uK,countAll:aK,equals:cK,startsWith:lK,endsWith:_K,contains:My,searchByHash:pK,setGetWholeRowAttributes:Ec,batchSearchByHash:TK,batchSearchByHashToMap:gK,checkHashExists:SK,iterateDBI:oK,greaterThan:dK,greaterThanEqual:fK,lessThan:EK,lessThanEqual:hK,between:mK}});var Io=T((Pae,xy)=>{var Hy=require("lodash"),qy=ke(),Be=require("joi"),RK=$(),{hdb_schema_table:p_,checkValidTable:Fy,hdb_table:Gy,hdb_database:S_}=Ds(),{handleHDBError:AK,hdb_errors:OK}=j(),{getDatabases:NK}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:bK}=OK,yK=Be.object({database:S_,schema:S_,table:Gy,search_attribute:p_,search_value:Be.any().required(),get_attributes:Be.array().min(1).items(p_).optional(),desc:Be.bool(),limit:Be.number().integer().min(1),offset:Be.number().integer().min(0)}),IK=Be.object({database:S_,schema:S_,table:Gy,operator:Be.string().valid("and","or").default("and").lowercase(),offset:Be.number().integer().min(0),limit:Be.number().integer().min(1),get_attributes:Be.array().min(1).items(p_).optional(),conditions:Be.array().min(1).items(Be.object({search_attribute:p_,search_type:Be.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").optional(),search_value:Be.when("search_type",{switch:[{is:"equals",then:Be.any()},{is:"between",then:Be.array().items(Be.alternatives([Be.string(),Be.number()])).length(2)}],otherwise:Be.alternatives(Be.string(),Be.number())}).required()})).required()});xy.exports=function(e,t){let r=null;switch(t){case"value":r=qy.validateBySchema(e,yK);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Fy("database",e.schema)),i(Fy("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"),n&&(r=new Error(n.trim()));break;case"conditions":r=qy.validateBySchema(e,IK);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=RK.checkGlobalSchemaTable(e.schema,e.table);if(n)return AK(new Error,n,bK.NOT_FOUND);let o=NK()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let _=0,l=e.conditions.length;_<l;_++){let d=e.conditions[_];c.push(d.search_attribute)}let u=Hy.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!Hy.some(o,l=>l===_||l.attribute===_||l.attribute===_.attribute));if(u&&u.length>0){let _=u.join(", ");return _=_.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${_}'`)}}return r}});var Cm=T((Bae,ky)=>{"use strict";var wK=Ue(),CK=Io(),{getSchemaPath:LK}=ve();ky.exports=DK;function DK(e){let t=CK(e,"hashes");if(t)throw t;let r=LK(e.schema,e.table);return wK.openEnvironment(r,e.table)}a(DK,"initialize")});var Lm=T((qae,Vy)=>{"use strict";var UK=yo(),MK=Cm();Vy.exports=PK;async function PK(e){let t=await MK(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return UK.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(PK,"lmdbGetDataByHash")});var wo=T((Gae,$y)=>{"use strict";var Dm=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};$y.exports=Dm});var Ky=T((Vae,Yy)=>{"use strict";var kae=wo(),vK=yo(),BK=Cm();Yy.exports=HK;async function HK(e){let t=await BK(e),r=global.hdb_schema[e.schema][e.table];return vK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(HK,"lmdbSearchByHash")});var Bs=T((Yae,Wy)=>{"use strict";var Um=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};Wy.exports=Um});var T_=T((Wae,Zy)=>{"use strict";var Gt=yo(),qK=Ue(),FK=$(),ae=ze(),Di=y(),GK=Si(),Qy=fr().LMDB_ERRORS_ENUM,{getSchemaPath:xK}=ve(),un=Di.SEARCH_WILDCARDS;async function kK(e,t,r){let s;e.schema===Di.SYSTEM_SCHEMA_NAME?s=GK[e.table]:s=global.hdb_schema[e.schema][e.table];let n=jy(e,s.hash_attribute,r,t);return Jy(e,n,s.hash_attribute,r)}a(kK,"prepSearch");async function Jy(e,t,r,s){let n=xK(e.schema,e.table),i=await qK.openEnvironment(n,e.table),o=Xy(i,e,t,r),c=o.transaction||i;if([ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ae.SEARCH_TYPES.SEARCH_ALL,ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(VK(e,r)===!1){let l=e.search_attribute;if(l===r)return s?zy(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?zy(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Gt.batchSearchByHashToMap(c,r,e.get_attributes,_):Gt.batchSearchByHash(c,r,e.get_attributes,_)}a(Jy,"executeSearch");function Xy(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<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 ae.SEARCH_TYPES.EQUALS:n=Gt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.CONTAINS:n=Gt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.ENDS_WITH:case ae.SEARCH_TYPES._ENDS_WITH:n=Gt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.STARTS_WITH:case ae.SEARCH_TYPES._STARTS_WITH:n=Gt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Gt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Gt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.SEARCH_ALL:return Gt.searchAll(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Gt.searchAllToMap(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.BETWEEN:n=Gt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN:case ae.SEARCH_TYPES._GREATER_THAN:n=Gt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN_EQUAL:case ae.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Gt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.LESS_THAN:case ae.SEARCH_TYPES._LESS_THAN:n=Gt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.LESS_THAN_EQUAL:case ae.SEARCH_TYPES._LESS_THAN_EQUAL:n=Gt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Xy,"searchByType");function zy(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(zy,"createMapFromIterable");function VK(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 s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(VK,"checkToFetchMore");function jy(e,t,r,s){if(FK.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),un.indexOf(n)>-1)return r===!0?ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ae.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(un[0])<0&&n.indexOf(un[1])<0)return c===!0?r===!0?ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ae.SEARCH_TYPES.EQUALS;if(un.indexOf(i)>=0&&un.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ae.SEARCH_TYPES.CONTAINS;if(un.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ae.SEARCH_TYPES.ENDS_WITH;if(un.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ae.SEARCH_TYPES.STARTS_WITH;if(n.includes(un[0])||n.includes(un[1]))return ae.SEARCH_TYPES.EQUALS;throw new Error(Qy.UNKNOWN_SEARCH_TYPE)}else switch(s){case Di.VALUE_SEARCH_COMPARATORS.BETWEEN:return ae.SEARCH_TYPES.BETWEEN;case Di.VALUE_SEARCH_COMPARATORS.GREATER:return ae.SEARCH_TYPES.GREATER_THAN;case Di.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ae.SEARCH_TYPES.GREATER_THAN_EQUAL;case Di.VALUE_SEARCH_COMPARATORS.LESS:return ae.SEARCH_TYPES.LESS_THAN;case Di.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ae.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Qy.UNKNOWN_SEARCH_TYPE)}}a(jy,"createSearchTypeFromSearchObject");Zy.exports={executeSearch:Jy,createSearchTypeFromSearchObject:jy,prepSearch:kK,searchByType:Xy}});var tI=T((Jae,eI)=>{"use strict";var zae=Bs(),$K=Io(),YK=$(),KK=y(),WK=T_();eI.exports=QK;function QK(e,t){if(!YK.isEmpty(t)&&KK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=$K(e,"value");if(s)throw s;let n=!0;return WK.prepSearch(e,t,n)}a(QK,"lmdbGetDataByValue")});var hc=T((Zae,rI)=>{"use strict";var jae=Bs(),zK=Io(),JK=$(),XK=y(),jK=T_();rI.exports=ZK;async function ZK(e,t){if(!JK.isEmpty(t)&&XK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=zK(e,"value");if(s)throw s;return jK.prepSearch(e,t,!1)}a(ZK,"lmdbSearchByValue")});var nI=T((rce,sI)=>{"use strict";var tce=ze(),Mm=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},Pm=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},vm=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};sI.exports={SearchByConditionsObject:Mm,SearchCondition:Pm,SortAttribute:vm}});var uI=T((oce,cI)=>{"use strict";var nce=nI().SearchByConditionsObject,eW=Bs(),tW=Io(),Bm=yo(),g_=ze(),{Resource:ice}=(is(),Z(BE)),aI=T_(),rW=wm(),sW=require("lodash"),{getSchemaPath:nW}=ve(),iI=Ue(),{handleHDBError:iW,hdb_errors:oW}=j(),{HTTP_STATUS_CODES:aW}=oW,cW=1e8;cI.exports=uW;async function uW(e){let t=tW(e,"conditions");if(t)throw iW(t,t.message,aW.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=nW(e.schema,e.table),s=await iI.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)iI.openDBI(s,_.search_attribute);let i=sW.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===g_.SEARCH_TYPES.EQUALS?_.estimated_count=Bm.count(s,_.search_attribute,_.search_value):l===g_.SEARCH_TYPES.CONTAINS||l===g_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=cW}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await oI(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(aI.filterByType),d=l.length,f=Bm.setGetWholeRowAttributes(s,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=>rW.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await oI(o,e,f,n.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=Bm.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(uW,"lmdbSearchByConditions");async function oI(e,t,r,s){let n=new eW(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===g_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,aI.searchByType(e,n,i,s).map(o=>o.value)}a(oI,"executeConditionSearch")});var mc=T((cce,lI)=>{"use strict";var lW=y().OPERATIONS_ENUM,Hm=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=lW.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};lI.exports=Hm});var qm=T((lce,SI)=>{"use strict";var EI=Bs(),hI=mc(),mI=hc(),pI=dc(),Xt=y(),_I=$(),dI=Ue(),{getTransactionAuditStorePath:_W,getSchemaPath:dW}=ve(),fI=G();SI.exports=fW;async function fW(e){try{if(_I.isEmpty(global.hdb_schema[e.schema])||_I.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await EW(e),await hW(e);let t=dW(e.schema,e.table);try{await dI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")fI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=_W(e.schema,e.table);await dI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")fI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(fW,"lmdbDropTable");async function EW(e){let t=new EI(Xt.SYSTEM_SCHEMA_NAME,Xt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Xt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Xt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await mI(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new hI(Xt.SYSTEM_SCHEMA_NAME,Xt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await pI(n)}a(EW,"deleteAttributesFromSystem");async function hW(e){let t=new EI(Xt.SYSTEM_SCHEMA_NAME,Xt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Xt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Xt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Xt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Xt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await mI(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&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new hI(Xt.SYSTEM_SCHEMA_NAME,Xt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await pI(n)}catch(i){throw i}}a(hW,"dropTableFromSystem")});var gI=T((dce,TI)=>{"use strict";var mW=require("fs-extra"),pW=Bs(),SW=wo(),TW=mc(),gW=qm(),RW=dc(),AW=Lm(),OW=hc(),ln=y(),{getSchemaPath:NW}=ve(),{handleHDBError:bW,hdb_errors:yW}=j(),{HDB_ERROR_MSGS:IW,HTTP_STATUS_CODES:wW}=yW;TI.exports=CW;async function CW(e){let t;try{t=await LW(e.schema);let r=new pW(ln.SYSTEM_SCHEMA_NAME,ln.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await OW(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await gW(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new TW(ln.SYSTEM_SCHEMA_NAME,ln.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await RW(n);let i=NW(t);await mW.remove(i)}catch(r){throw r}}a(CW,"lmdbDropSchema");async function LW(e){let t=new SW(ln.SYSTEM_SCHEMA_NAME,ln.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await AW(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw bW(new Error,IW.SCHEMA_NOT_FOUND(e),wW.NOT_FOUND,void 0,void 0,!0);return s}a(LW,"validateDropSchema")});var Gm=T((Ece,RI)=>{"use strict";var Fm=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};RI.exports=Fm});var OI=T((pce,AI)=>{"use strict";var DW=require("fs-extra"),R_=Ue(),{getTransactionAuditStorePath:UW}=ve(),xm=ze(),mce=Gm();AI.exports=MW;async function MW(e){let t;try{let r=UW(e.schema,e.table);await DW.mkdirp(r),t=await R_.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{R_.createDBI(t,xm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),R_.createDBI(t,xm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),R_.createDBI(t,xm.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(MW,"createTransactionsAuditEnvironment")});var II=T((Tce,yI)=>{"use strict";var km=y(),NI=Ue(),PW=fo(),{getSystemSchemaPath:vW,getSchemaPath:BW}=ve(),HW=Si(),qW=kl(),Vm=xl(),FW=G(),GW=OI(),Ym=HW.hdb_table,bI=[];for(let e=0;e<Ym.attributes.length;e++)bI.push(Ym.attributes[e].attribute);yI.exports=xW;async function xW(e,t){let r=BW(t.schema,t.table),s=new Vm(t.schema,t.table,km.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Vm(t.schema,t.table,km.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Vm(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await NI.createEnvironment(r,t.table),e!==void 0){let o=await NI.openEnvironment(vW(),km.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await PW.insertRecords(o,Ym.hash_attribute,bI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await $m(s),await $m(n),await $m(i)}await GW(t)}catch(o){throw o}}a(xW,"lmdbCreateTable");async function $m(e){try{await qW(e)}catch(t){FW.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a($m,"createAttribute")});var CI=T((Rce,wI)=>{"use strict";var kW=ja(),VW=sc(),$W=d_(),pc=y(),YW=fo().updateRecords,KW=Ue(),{getSchemaPath:WW}=ve(),QW=lc(),zW=G();wI.exports=JW;async function JW(e){try{let{schema_table:t,attributes:r}=kW(e);VW(e,r,t.hash_attribute),e.schema!==pc.SYSTEM_SCHEMA_NAME&&(r.includes(pc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(pc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(pc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(pc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await $W(e.hdb_auth_header,t,r),n=WW(e.schema,e.table),i=await KW.openEnvironment(n,e.table),o=await YW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await QW(e,o)}catch(c){zW.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:s,txn_time:o.txn_time}}catch(t){throw t}}a(JW,"lmdbUpdateRecords")});var DI=T((Oce,LI)=>{"use strict";var XW=y().OPERATIONS_ENUM,Km=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=XW.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};LI.exports=Km});var MI=T((yce,UI)=>{"use strict";var bce=DI(),jW=ja(),ZW=sc(),eQ=d_(),Sc=y(),tQ=fo().upsertRecords,rQ=Ue(),{getSchemaPath:sQ}=ve(),nQ=lc(),iQ=G(),{handleHDBError:oQ,hdb_errors:aQ}=j();UI.exports=cQ;async function cQ(e){let t;try{t=jW(e)}catch(u){throw oQ(u,u.message,aQ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;ZW(e,s,r.hash_attribute),e.schema!==Sc.SYSTEM_SCHEMA_NAME&&(s.includes(Sc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Sc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Sc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Sc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await eQ(e.hdb_auth_header,r,s),i=sQ(e.schema,e.table),o=await rQ.openEnvironment(i,e.table),c=await tQ(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await nQ(e,c)}catch(u){iQ.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(cQ,"lmdbUpsertRecords")});var vI=T((wce,PI)=>{"use strict";var Wm=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};PI.exports=Wm});var HI=T((Lce,BI)=>{"use strict";var Qm=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};BI.exports=Qm});var GI=T((Mce,FI)=>{"use strict";var zm=Ue(),{getTransactionAuditStorePath:uQ}=ve(),Uce=vI(),Tc=ze(),lQ=$(),qI=HI(),_Q=require("util").promisify,dQ=_Q(setTimeout),fQ=1e4,EQ=100;FI.exports=hQ;async function hQ(e){let t=uQ(e.schema,e.table),r=await zm.openEnvironment(t,e.table,!0),s=zm.listDBIs(r);zm.initializeDBIs(r,Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new qI;do n=await mQ(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await dQ(EQ);while(n.transactions_deleted>0);return i}a(hQ,"deleteAuditLogsBefore");async function mQ(e,t){let r=new qI;try{let s=e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Tc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];lQ.isEmpty(c)||(n=e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Tc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>fQ)break}return await n,r}catch(s){throw s}}a(mQ,"deleteTransactions")});var kI=T((vce,xI)=>{"use strict";var Jm=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};xI.exports=Jm});var $I=T((qce,VI)=>{"use strict";var pQ=Bs(),SQ=mc(),Hce=kI(),Hs=y(),TQ=$(),Xm=Ue(),gQ=Si(),RQ=hc(),AQ=dc(),{getSchemaPath:OQ}=ve();VI.exports=NQ;async function NQ(e,t=!0){let r;e.schema===Hs.SYSTEM_SCHEMA_NAME?r=gQ[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await yQ(e),n=OQ(e.schema,e.table),i=await Xm.openEnvironment(n,e.table);return t===!0&&await bQ(e,i,r.hash_attribute),Xm.dropDBI(i,e.attribute),s}a(NQ,"lmdbDropAttribute");async function bQ(e,t,r){let s=Xm.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(bQ,"removeAttributeFromAllObjects");async function yQ(e){let t=new pQ(Hs.SYSTEM_SCHEMA_NAME,Hs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await RQ(t)).filter(o=>o[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(TQ.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new SQ(Hs.SYSTEM_SCHEMA_NAME,Hs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return AQ(i)}a(yQ,"dropAttributeFromSystem")});var JI=T((xce,zI)=>{"use strict";var jm=Ue(),Co=ze(),Gce=Er(),Zm=y(),YI=$(),{getTransactionAuditStorePath:IQ}=ve(),wQ=yo(),A_=Oo(),CQ=G();zI.exports=LQ;async function LQ(e){let t=IQ(e.schema,e.table),r=await jm.openEnvironment(t,e.table,!0),s=jm.listDBIs(r);jm.initializeDBIs(r,Co.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Zm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return KI(r,e.search_values);case Zm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,UQ(r,e.search_values,n);case Zm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return DQ(r,e.search_values);default:return KI(r)}}a(LQ,"readAuditLog");function KI(e,t=[0,Date.now()]){YI.isEmpty(t[0])&&(t[0]=0),YI.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Co.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new A_,n))}a(KI,"searchTransactionsByTimestamp");function DQ(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[Co.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,QI(e,i))}return Object.fromEntries(r)}a(DQ,"searchTransactionsByUsername");function UQ(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=wQ.equals(e,Co.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Co.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=QI(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);WI(u,"records",r,l,o),WI(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(UQ,"searchTransactionsByHashValues");function WI(e,t,r,s,n){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(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new A_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new A_(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(WI,"loopRecords");function QI(e,t){let r=[];try{let s=e.dbis[Co.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new A_,i);r.push(o)}}catch(i){CQ.warn(i)}return r}catch(s){throw s}}a(QI,"batchSearchTransactions")});var jI=T((Yce,XI)=>{"use strict";var{getSchemaPath:Vce}=ve(),$ce=Ue(),{database:MQ}=(fe(),Z(Ce));XI.exports={writeTransaction:PQ};async function PQ(e,t,r){return MQ({database:e,table:t}).transaction(r)}a(PQ,"writeTransaction")});var rw=T((Wce,tw)=>{"use strict";var{getSchemaPath:ZI}=ve(),ew=Ue();tw.exports={flush:vQ,resetReadTxn:BQ};async function vQ(e,t){return(await ew.openEnvironment(ZI(e,t),t.toString())).flushed}a(vQ,"flush");async function BQ(e,t){try{(await ew.openEnvironment(ZI(e,t),t.toString())).resetReadTxn()}catch{}}a(BQ,"resetReadTxn")});var ow=T((zce,iw)=>{"use strict";var{Readable:HQ}=require("stream"),{getDatabases:qQ}=(fe(),Z(Ce)),{readSync:FQ,openSync:GQ,createReadStream:sw}=require("fs"),{open:xQ}=require("lmdb"),nw=Dl(),kQ=Ml(),{AUDIT_STORE_OPTIONS:VQ}=(co(),Z(NO)),{INTERNAL_DBIS_NAME:$Q,AUDIT_STORE_NAME:YQ}=ze();iw.exports=WQ;var ep=32768,KQ=100;async function WQ(e){let t=e.database||e.schema||"data",r=qQ()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=xQ({noSync:!0,maxDbs:kQ.MAX_DBS}),f,E=d.openDB($Q,new nw(!1)),h=l.useReadTransaction(),p=0,S=a(async function(b,O){O.encoding="binary",O.encoder=void 0;let Y=d.openDB(b,O),Q=l.openDB(b,O);for(let{key:F,version:w,value:K}of Q.getRange({transaction:h,versions:Q.useVersions}))f=Y.put(F,K,w),p++%KQ===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:b,value:O}of l.getRange({transaction:h,start:!1}))if(n.some(Y=>b.startsWith?.(Y+"/"))){E.put(b,O);let[,Y]=b.split("/"),Q=!Y,F=new nw(!Q,Q);await S(b,F)}e.include_audit&&await S(YQ,Object.assign({},VQ)),await f;let R=sw(d.path);return R.headers=u(),R.on("close",()=>{h.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=GQ(o.path);return o.transaction(()=>{let _=Buffer.alloc(ep);FQ(c,_,0,ep),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=sw(null,{fd:c,start:ep}),f=new HQ.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",s),_}}a(WQ,"getBackup")});var uw=T((Xce,cw)=>{"use strict";var QQ=G(),{handleHDBError:zQ}=j(),JQ=lO(),XQ=kl(),jQ=Om(),ZQ=gy(),ez=dc(),tz=Lm(),rz=Ky(),sz=tI(),nz=hc(),iz=uI(),oz=gI(),az=II(),cz=CI(),uz=MI(),lz=GI(),_z=qm(),dz=$I(),fz=JI(),Ez=jI(),aw=rw(),hz=ow(),tp=class extends JQ{static{a(this,"LMDBBridge")}async searchByConditions(t){return iz(t)}async getDataByHash(t){return await tz(t)}async searchByHash(t){return await rz(t)}async getDataByValue(t,r){return await sz(t,r)}async searchByValue(t){return await nz(t)}async createSchema(t){return await ZQ(t)}async dropSchema(t){return await oz(t)}async createTable(t,r){return await az(t,r)}async dropTable(t){return await _z(t)}async createAttribute(t){return await XQ(t)}async createRecords(t){return await jQ(t)}async updateRecords(t){return await cz(t)}async upsertRecords(t){try{return await uz(t)}catch(r){throw zQ(r,null,null,QQ.ERR,r)}}async deleteRecords(t){return await ez(t)}async dropAttribute(t){return await dz(t)}async deleteAuditLogsBefore(t){return await lz(t)}async readAuditLog(t){return await fz(t)}writeTransaction(t,r,s){return Ez.writeTransaction(t,r,s)}flush(t,r){return aw.flush(t,r)}resetReadTxn(t,r){return aw.resetReadTxn(t,r)}getBackup(t){return hz(t)}};cw.exports=tp});var Sw={};qe(Sw,{ResourceBridge:()=>np});function ip({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 _w(e,t){let r=qs(e),s=ip(e,r);if(!r)throw new Es.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;Ge(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:n,select:s},i);return l=l&&hl(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 qs(e){let t=e.database||e.schema||pz,r=hs()[t];if(!r)throw(0,Es.handleHDBError)(new Error,mz.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function dw(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*fw(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var Ew,O_,Es,hw,mw,ms,rp,sp,pw,mz,pz,Sz,Tz,lw,np,Tw=Te(()=>{"use strict";Ew=D(uw()),O_=D(Io()),Es=D(j());fe();hw=D(ja()),mw=D(sc()),ms=D(y()),rp=D(cn()),sp=D(ds()),pw=D($());Ei();ml();({HDB_ERROR_MSGS:mz}=Es.hdb_errors),pz="data",Sz=1e4,Tz=10,np=class extends Ew.default{static{a(this,"ResourceBridge")}constructor(t){super(t),lw=this}async searchByConditions(t){let r=(0,O_.default)(t,"conditions");if(r)throw(0,Es.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=qs(t);if(!s)throw new Es.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:ip(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Es.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}et({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await qs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=qs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],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}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){qs(t).dropTable()}createSchema(t){return gc({database:t.schema,table:null}),rp.signalSchemaChange(new sp.SchemaEventMsg(process.pid,ms.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await op(t.schema),rp.signalSchemaChange(new sp.SchemaEventMsg(process.pid,ms.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,lw.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,hw.default)(t);(0,mw.default)(t,s,r.primaryKey);let n,i=hs()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ge(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.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=hl(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:n,skipped_hashes:_}})}async deleteRecords(t){let r=hs()[t.schema][t.table],s={user:t.hdb_user};return Ge(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return dw(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=hs()[t.schema][t.table];if(!r.createdTimeProperty)throw new Es.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:ms.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!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,pw.async_set_timeout)(Tz),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%Sz===0&&await _();return u.length>0&&await _(),n?dw(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,O_.default)(t,"hashes");if(r)throw r;return _w(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of _w(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&ms.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,O_.default)(t,"value");if(s)throw s;let n=qs(t);if(!n)throw new Es.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===ms.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:ip(t,n)})}async getDataByValue(t,r){let s=new Map,n=qs(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){qs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return qs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=qs(t),s={};switch(t.search_type){case ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[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 s;case ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of fw(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return fw(r,t.search_values?.[0],t.search_values?.[1])}}};a(ip,"getSelect");a(_w,"getRecords");a(qs,"getTable");a(dw,"createDeleteResponse");a(fw,"groupRecordsInHistory")});var us=T((sue,gw)=>{"use strict";var{ResourceBridge:gz}=(Tw(),Z(Sw)),Rz=X();Rz.initSync();var N_;function Az(){return N_||(N_=new gz,N_)}a(Az,"getBridge");gw.exports=Az()});var Nw=T((iue,Ow)=>{"use strict";var Rw=require("lodash"),Rc=require("mathjs"),Oz=require("jsonata"),Aw=$();Ow.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Rw.uniqWith(e,Rw.isEqual):e,searchJSON:Nz,mad:Ac.bind(null,Rc.mad),mean:Ac.bind(null,Rc.mean),mode:Ac.bind(null,Rc.mode),prod:Ac.bind(null,Rc.prod),median:Ac.bind(null,Rc.median)};function Ac(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Ac,"aggregateFunction");function Nz(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(Aw.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Aw.isEmpty(this.__ala__.res[r])){let s=Oz(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(Nz,"searchJSON")});var yw=T((aue,bw)=>{"use strict";var rt=require("moment"),ap="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;bw.exports={current_date:()=>rt().utc().format("YYYY-MM-DD"),current_time:()=>rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return rt(e).utc().format("YYYY");case"month":return rt(e).utc().format("MM");case"day":return rt(e).utc().format("DD");case"hour":return rt(e).utc().format("HH");case"minute":return rt(e).utc().format("mm");case"second":return rt(e).utc().format("ss");case"millisecond":return rt(e).utc().format("SSS");default:break}},date:e=>rt(e).utc().format(ap),date_format:(e,t)=>rt(e).utc().format(t),date_add:(e,t,r)=>rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=rt(e).utc(),n=rt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>rt().utc().valueOf(),get_server_time:()=>rt().format(ap),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(ap)}});var Lw=T((cue,Cw)=>{"use strict";var bz=require("@turf/area"),yz=require("@turf/length"),Iz=require("@turf/circle"),wz=require("@turf/difference"),Cz=require("@turf/distance"),Lz=require("@turf/boolean-contains"),Dz=require("@turf/boolean-equal"),Uz=require("@turf/boolean-disjoint"),Mz=require("@turf/helpers"),Iw=y(),de=$();Cw.exports={geoArea:Pz,geoLength:vz,geoCircle:Bz,geoDifference:Hz,geoDistance:ww,geoNear:qz,geoContains:Fz,geoEqual:Gz,geoCrosses:xz,geoConvert:kz};var cp="geo1 is required",up="geo2 is required";function Pz(e){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),bz.default(e)}a(Pz,"geoArea");function vz(e,t){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),yz.default(e,{units:t||"kilometers"})}a(vz,"geoLength");function Bz(e,t,r){if(de.isEmpty(e))throw new Error("point is required");if(de.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),Iz.default(e,t,{units:r||"kilometers"})}a(Bz,"geoCircle");function Hz(e,t){if(de.isEmpty(e))throw new Error("poly1 is required");if(de.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),wz(e,t)}a(Hz,"geoDifference");function ww(e,t,r){if(de.isEmpty(e))throw new Error("point1 is required");if(de.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),Cz.default(e,t,{units:r||"kilometers"})}a(ww,"geoDistance");function qz(e,t,r,s){if(de.isEmpty(e))throw new Error("point1 is required");if(de.isEmpty(t))throw new Error("point2 is required");if(de.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return ww(e,t,s)<=r}a(qz,"geoNear");function Fz(e,t){if(de.isEmpty(e))throw new Error(cp);if(de.isEmpty(e))throw new Error(up);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),Lz.default(e,t)}a(Fz,"geoContains");function Gz(e,t){if(de.isEmpty(e))throw new Error(cp);if(de.isEmpty(e))throw new Error(up);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),Dz.default(e,t)}a(Gz,"geoEqual");function xz(e,t){if(de.isEmpty(e))throw new Error(cp);if(de.isEmpty(e))throw new Error(up);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),!Uz.default(e,t)}a(xz,"geoCrosses");function kz(e,t,r){if(de.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(de.isEmpty(t))throw new Error("geo_type is required");if(de.isEmpty(Iw.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Iw.GEO_CONVERSION_ENUM).join(",")}`);return Mz[t](e,r)}a(kz,"geoConvert")});var b_=T((lue,Dw)=>{var Ui=Nw(),br=yw(),Fs=Lw();Dw.exports=e=>{e.aggr.mad=e.aggr.MAD=Ui.mad,e.aggr.mean=e.aggr.MEAN=Ui.mean,e.aggr.mode=e.aggr.MODE=Ui.mode,e.aggr.prod=e.aggr.PROD=Ui.prod,e.aggr.median=e.aggr.MEDIAN=Ui.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ui.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ui.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=br.current_date,e.fn.current_time=e.fn.CURRENT_TIME=br.current_time,e.fn.extract=e.fn.EXTRACT=br.extract,e.fn.date=e.fn.DATE=br.date,e.fn.date_format=e.fn.DATE_FORMAT=br.date_format,e.fn.date_add=e.fn.DATE_ADD=br.date_add,e.fn.date_sub=e.fn.DATE_SUB=br.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=br.date_diff,e.fn.now=e.fn.NOW=br.now,e.fn.offset_utc=e.fn.OFFSET_UTC=br.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=br.get_server_time,e.fn.getdate=e.fn.GETDATE=br.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=br.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Fs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Fs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Fs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Fs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Fs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Fs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Fs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Fs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Fs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Fs.geoNear}});var vw=T((_ue,Pw)=>{"use strict";var Oc=require("lodash"),It=require("alasql");It.options.cache=!1;var Vz=b_(),Uw=require("clone"),y_=require("recursive-iterator"),re=G(),ie=$(),Lo=us(),$z=y(),{hdb_errors:Yz}=j(),{getDatabases:Mw}=(fe(),Z(Ce)),Kz="IS NULL",ps="There was a problem performing this search. Please check the logs and try again.";Vz(It);var lp=class{static{a(this,"SQLSearch")}constructor(t,r){if(ie.isEmpty(t))throw re.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(),ie.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ie.isEmptyOrZeroLength(s))return re.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw re.error("Error thrown from checkEmptySQL in SQLSearch class method search."),re.error(s),new Error(ps)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw re.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),re.error(s),new Error(ps)}if(Object.keys(this.data).length===0)return re.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw re.error("Error thrown from processJoins in SQLSearch class method search."),re.error(s),new Error(ps)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw re.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),re.error(s),new Error(ps)}try{return t=await this._finalSQL(),t}catch(s){throw re.error("Error thrown from finalSQL in SQLSearch class method search."),re.error(s),new Error(ps)}}_getColumns(){let t=new y_(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(Uw(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Oc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=Mw()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ie.isEmpty(this.statement.where)){re.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new y_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ie.isEmpty(r)&&r.right)if(ie.isNotEmptyAndHasValue(r.right.value)){let s=ie.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new It.yy.LogicValue({value:s}):r.right instanceof It.yy.StringValue&&!ie.isEmpty(s)&&ie.autoCasterIsNumberCheck(s.toString())&&(r.right=new It.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ie.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new It.yy.LogicValue({value:i}):s instanceof It.yy.StringValue&&ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new It.yy.NumValue({value:i}))});if(t){re.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new y_(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!ie.isEmpty($z.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ie.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ie.isEmptyOrZeroLength(r.left.columnid)||ie.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(ie.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"=":!ie.isEmpty(r.right.value)||!ie.isEmpty(r.left.value)?s.add(ie.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)s.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,...s])}}}_setAliasesForColumns(){if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&ie.isEmptyOrZeroLength(this.statement.from)&&ie.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Oc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(ie.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ie.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&!ie.isEmptyOrZeroLength(this.columns.columns))return t;if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&ie.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await It.promise(r)}catch(r){throw re.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),re.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(Uw(s))})}_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,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(ie.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(Kz)>-1&&this.tables.forEach(n=>{let i={columnid:Mw()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Oc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ie.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!ie.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await Lo.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(ps)}else try{c.search_attribute=n.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 Lo.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(E)))}))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(ps)}else if(!ie.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!ie.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 Lo.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,ie.autoCast(p)));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(p)))}}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),re.error(l),new Error(ps)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await Lo.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ie.autoCast(d)));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(d)))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),re.error(l),new Error(ps)}}}_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 It.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(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.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 s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new It.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new It.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 n=t.is_func?new It.yy.FuncValue:new It.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.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={};n.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:"",_="";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&&(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,n);f=await It.promise(h,t),t=null}catch(E){throw re.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),re.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=Oc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,R=p.length;S<R;S++){let b=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[b]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new y_(this.columns);for(let{node:i}of n)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)&&s.push(o)}}s=Oc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw re.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),re.error(i),new Error(ps)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await Lo.getDataByHash(c),_=n.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=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getData."),re.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(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.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 n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();re.trace(`Final SQL: ${n}`),s=await It.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),re.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw re.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),re.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return re.error(Yz.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),re.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${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=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await Lo.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw re.error("There was an error when processing this SQL operation. Check your logs"),re.error(o),new Error(ps)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Pw.exports=lp});var Gr=T((fue,Bw)=>{"use strict";var Wz=cO();Bw.exports={searchByConditions:zz,searchByHash:Jz,searchByValue:Xz,search:jz};var _p=us(),{transformReq:dp}=$(),Qz=vw();async function zz(e){return dp(e),_p.searchByConditions(e)}a(zz,"searchByConditions");async function Jz(e){dp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of _p.searchByHash(e))r&&t.push(r);return t}a(Jz,"searchByHash");async function Xz(e){dp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of _p.searchByValue(e))t.push(r);return t}a(Xz,"searchByValue");function jz(e,t){try{let r=new Wz(e);r.validate(),new Qz(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(jz,"search")});var I_=T((hue,Hw)=>{"use strict";var Zz=us();Hw.exports={writeTransaction:e2};function e2(e,t,r){return Zz.writeTransaction(e,t,r)}a(e2,"writeTransaction")});var xw=T((Sue,Gw)=>{"use strict";var t2=Gr(),r2=qn(),qw=G(),s2=xr(),pue=I_(),n2=require("clone"),Ep=require("alasql"),i2=b_(),Fw=require("util"),o2=Fw.promisify(r2.getTableSchema),a2=Fw.promisify(t2.search),c2=y(),fp=$();i2(Ep);Gw.exports={update:l2};var u2="There was a problem performing this update. Please check the logs and try again.";async function l2({statement:e,hdb_user:t}){let r=await o2(e.table.databaseid,e.table.tableid),s=_2(e.columns);fp.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=n2(n),c=fp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=Ep.parse(u).statements[0],l=await a2(_),d=d2(s,l);return f2(o,d,t)}a(l2,"update");function _2(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Ep.compile(`SELECT ${r.expression.toString()} AS [${c2.FUNC_VAL}] FROM ?`)}),t}catch(t){throw qw.error(t),new Error(u2)}}a(_2,"createUpdateRecord");function d2(e,t){return fp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(d2,"buildUpdateRecords");async function f2(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await s2.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){qw.error(`Error delete new_attributes from update response: ${i}`)}return n}a(f2,"updateRecords")});var Vw=T((Aue,kw)=>{var E2=require("alasql"),h2=Gr(),m2=G(),p2=us(),mp=require("util"),hp=$(),S2=y(),T2=qn(),gue=I_(),Rue=xr(),g2="record",R2="successfully deleted",A2=mp.callbackify(y2),O2=mp.promisify(h2.search),N2=mp.promisify(T2.getTableSchema);kw.exports={convertDelete:A2};function b2(e){return`${e.deleted_hashes.length} ${g2}${e.deleted_hashes.length===1?"":"s"} ${R2}`}a(b2,"generateReturnMessage");async function y2({statement:e,hdb_user:t}){let r=await N2(e.table.databaseid,e.table.tableid);hp.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=hp.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=E2.parse(o).statements[0],u={operation:S2.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await O2(c);let _=await p2.deleteRecords(u);return hp.isEmptyOrZeroLength(_.message)&&(_.message=b2(_)),delete _.txn_time,_}catch(_){throw m2.error(_),_.hdb_code?_.message:_}}a(y2,"convertDelete")});var Qw=T((Nue,Ww)=>{"use strict";var I2=gi(),{hdb_errors:$w}=j(),{getDatabases:Yw}=(fe(),Z(Ce));Ww.exports={checkSchemaExists:Kw,checkSchemaTableExists:w2,schema_describe:I2};async function Kw(e){if(!Yw()[e])return $w.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Kw,"checkSchemaExists");async function w2(e,t){let r=await Kw(e);if(r)return r;if(!Yw()[e][t])return $w.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(w2,"checkSchemaTableExists")});var Nc=T((yue,C2)=>{C2.exports={name:"harperdb",version:"4.2.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: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: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:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","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.441.0","@aws-sdk/lib-storage":"3.441.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"~5.7.2","@fastify/compress":"~6.4.0","@fastify/cors":"~8.4.1","@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:"1.7.4","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.24.3","fastify-plugin":"~4.5.1","fs-extra":"11.1.1",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.0",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.9.9",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.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.6",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"^8.14.2",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:"0.27.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.2.2","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 wc={};qe(wc,{addAnalyticsListener:()=>Ic,recordAction:()=>yr,recordActionBinary:()=>Vr,setAnalyticsEnabled:()=>L2});function L2(e){nC=e}function yr(e,t,r,s,n){if(!nC)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=L_.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:s,type:n},L_.set(i,o)}w_||D2()}function Vr(e,t,r,s,n){yr(!!e,t,r,s,n)}function Ic(e){aC.push(e)}function D2(){w_=performance.now(),setTimeout(async()=>{let e=performance.now()-w_;w_=0;let t=[],r={time:Date.now(),period:e,threadId:Mi.threadId,metrics:t};for(let[n,i]of L_){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 cC){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 uC()}let s=process.memoryUsage();t.push({metric:"memory",threadId:Mi.threadId,byThread:!0,...s});for(let n of aC)n(t);L_=new Map,Mi.parentPort?Mi.parentPort.postMessage({type:oC,report:r}):dC({report:r})},iC).unref()}async function U2(e,t=6e4){let r=Tp(),s=lC(),n;for(let h of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){n=h.value.time;break}if(Date.now()-t<n)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:R}=p;for(let b of S||[]){let{path:O,method:Y,type:Q,metric:F,count:w,total:K,distribution:B,threads:x,...te}=b;w||(w=1);let be=F+(O?"-"+O:"");Y!==void 0&&(be+="-"+Y),Q!==void 0&&(be+="-"+Q);let se=o.get(be);if(se){if(se.threads){let Pe=se.threads[R];if(Pe)se=Pe;else{se.threads[R]=Object.assign({},te);continue}}se.count||(se.count=1);let vt=se.count;for(let Pe in te){let Ot=te[Pe];typeof Ot=="number"&&(se[Pe]=(se[Pe]*vt+Ot*w)/(vt+w))}se.count+=w,K>=0&&(se.total+=K,se.ratio=se.total/se.count)}else se=Object.assign({period:t},b),delete se.distribution,o.set(be,se),se.byThread&&(se.threads=[],se.threads[R]=Object.assign({},te),u.push(se));if(B){B=B.map(Pe=>typeof Pe=="number"?{value:Pe,count:1}:Pe);let vt=c.get(be);vt?vt.push(...B):c.set(be,B)}}await uC()}for(let h of u){let{path:p,method:S,type:R,metric:b,count:O,total:Y,distribution:Q,threads:F,...w}=h;F=F.filter(K=>K);for(let K in w){if(typeof h[K]!="number")continue;let B=0;for(let x of F){let te=x[K];typeof te=="number"&&(B+=te)}h[K]=B}h.count=F.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((Pe,Ot)=>Pe.value>Ot.value?1:-1);let R=S.count-1,b=[],O=0,Y=0,Q;for(let Pe of cC){let Ot=R*Pe;for(;O<Ot;)Q=p[Y++],O+=Q.count,Y===1&&O--;let ts=p[Y>1?Y-2:0];Q||(Q=p[0]),b.push(Q.value-(Q.value-ts.value)*(O-Ot)/Q.count)}let[F,w,K,B,x,te,be,se,vt]=b;Object.assign(S,{p1:F,p10:w,p25:K,median:B,p75:x,p90:te,p95:be,p99:se,p999:vt})}let l;for(let[h,p]of o)p.id=(0,C_.getNextMonotonicTime)(),p.time=_,s.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||s.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,C_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-zw,active:E-Jw,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}zw=f,Jw=E}async function Xw(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function Tp(){return jw||(jw=et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function lC(){return Zw||(Zw=et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function v2(){_C=!0;let e=(0,yc.get)(Sp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await U2(iC,e),await Xw(Tp(),M2),await Xw(lC(),P2)},Math.min(e/2,2147483647)).unref()}function dC(e,t){let r=e.report;r.threadId=t?.threadId||Mi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(eC+=s.mean*s.count);r.totalBytesProcessed=eC,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(tC.get(t))}),tC.set(t,t.performance.eventLoopUtilization())),r.id=(0,C_.getNextMonotonicTime)(),Tp().primaryStore.put(r.id,r),_C||v2(),B2&&(fC=q2(r))}async function q2(e){if(await fC,!Yn){let r=(0,bc.dirname)((0,sC.getLogFilePath)());try{Yn=await(0,pp.open)((0,bc.join)(r,"analytics.log"),"r+")}catch{Yn=await(0,pp.open)((0,bc.join)(r,"analytics.log"),"w+")}}let t=(await Yn.stat()).size;if(t>H2){let r=Buffer.alloc(t);await Yn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Yn.write(r,{position:0}),await Yn.truncate(r.length),t=r.length}await Yn.write(JSON.stringify(e)+`
6
+ `,t)}var Mi,rC,sC,bc,pp,C_,yc,Sp,L_,nC,w_,iC,oC,aC,cC,zw,Jw,uC,M2,P2,jw,Zw,_C,eC,tC,B2,fC,Yn,H2,_n=Te(()=>{Mi=require("worker_threads"),rC=D(Je());fe();sC=D(G()),bc=require("path"),pp=require("fs/promises"),C_=D(Er()),yc=D(X()),Sp=D(y());hr();(0,yc.initSync)();L_=new Map,nC=(0,yc.get)(Sp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(L2,"setAnalyticsEnabled");a(yr,"recordAction");ut.recordAnalytics=yr;a(Vr,"recordActionBinary");w_=0,iC=1e3,oC="analytics-report",aC=[];a(Ic,"addAnalyticsListener");cC=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(D2,"sendAnalytics");a(U2,"aggregation");zw=0,Jw=0,uC=a(()=>new Promise(setImmediate),"rest");a(Xw,"cleanup");M2=36e5,P2=31536e6;a(Tp,"getRawAnalyticsTable");a(lC,"getAnalyticsTable");(0,rC.setChildListenerByType)(oC,dC);a(v2,"startScheduledTasks");eC=0,tC=new Map,B2=!1;a(dC,"recordAnalytics");H2=1e6;a(q2,"logAnalytics")});var dt=T((Gue,UC)=>{"use strict";var wt=X();wt.initSync();var F2=require("fs-extra"),G2=require("semver"),Dc=require("path"),{monotonicFactory:x2}=require("ulidx"),hC=x2(),k2=require("util"),mC=require("child_process"),V2=k2.promisify(mC.exec),$2=mC.spawn,Re=Ve(),Oe=y(),Op=$(),$r=G(),D_=on(),Y2=I_(),Cc=Rr(),{onMessageByType:K2}=Je(),{isMainThread:W2}=require("worker_threads"),{Encoder:Q2,decode:Np}=require("msgpackr"),pC=new Q2,{isEmpty:Pi}=Op,SC=kr(),z2=48*36e11,J2=5e9;W2&&K2(Oe.ITC_EVENT_TYPES.RESTART,()=>{Ss=void 0,Mo=void 0});var{connect:X2,StorageType:TC,RetentionPolicy:gC,AckPolicy:U_,DeliverPolicy:M_,DiscardPolicy:j2,NatsConnection:Bue,JetStreamManager:Hue,JetStreamClient:que,StringCodec:Fue,JSONCodec:Z2,createInbox:bp,headers:eJ,ErrorCode:EC}=require("nats"),{PACKAGE_ROOT:tJ}=y(),rJ=Nc(),{recordAction:sJ}=(_n(),Z(wc)),RC=Z2(),nJ="clustering",iJ=rJ.engines[Re.NATS_SERVER_NAME],oJ=Dc.join(tJ,"dependencies"),Ap=Dc.join(oJ,`${process.platform}-${process.arch}`,Re.NATS_BINARY_NAME),gp,Rp,Lc,Do,Uo;UC.exports={runCommand:AC,checkNATSServerInstalled:aJ,createConnection:yp,getConnection:P_,getJetStreamManager:Uc,getJetStream:OC,getNATSReferences:jt,getServerList:uJ,createLocalStream:Ip,listStreams:NC,deleteLocalStream:lJ,getServerConfig:Mc,listRemoteStreams:_J,viewStream:dJ,viewStreamIterator:fJ,publishToStream:EJ,createWorkQueueStream:hJ,addSourceToWorkStream:yC,request:pJ,removeSourceFromWorkStream:wC,reloadNATS:wp,reloadNATSHub:SJ,reloadNATSLeaf:TJ,extractServerName:IC,requestErrorHandler:gJ,updateWorkStream:RJ,createLocalTableStream:LC,createTableStreams:AJ,purgeTableStream:DC,purgeSchemaTableStreams:OJ,getStreamInfo:NJ,updateLocalStreams:yJ,closeConnection:cJ,getJsmServerName:Pc,addNatsMsgHeader:bC,updateIngestStreamConsumer:mJ};async function AC(e,t=void 0){let{stdout:r,stderr:s}=await V2(e,{cwd:t});if(s)throw new Error(s.replace(`
7
7
  `,""));return r.replace(`
8
- `,"")}a(AC,"runCommand");async function oJ(){try{await q2.access(Ap)}catch{return!1}let e=await AC(`${Ap} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return F2.eq(t,nJ)}a(oJ,"checkNATSServerInstalled");async function yp(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await SC.getClusterUser();if(Pi(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Vr.trace("create nats connection called");let i=await J2({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:wt.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:wt.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:wt.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Vr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(yp,"createConnection");async function aJ(){ps&&(await ps.drain(),ps=void 0,Do=void 0,Uo=void 0,Mo=void 0)}a(aJ,"closeConnection");var ps,Mo;async function P_(){return Mo||(Mo=yp(wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ps=await Mo),ps||Mo}a(P_,"getConnection");async function Uc(){if(Do)return Do;Pi(ps)&&await P_();let{domain:e}=Mc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Pi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Do=await ps.jetstreamManager({domain:e,timeout:6e4}),Do}a(Uc,"getJetStreamManager");async function OC(){if(Uo)return Uo;Pi(ps)&&await P_();let{domain:e}=Mc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Pi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Uo=ps.jetstream({domain:e,timeout:6e4}),Uo}a(OC,"getJetStream");async function jt(){let e=ps||await P_(),t=Do||await Uc(),r=Uo||await OC();return{connection:e,jsm:t,js:r}}a(jt,"getNATSReferences");async function cJ(e){let t=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await SC.getClusterUser(),n=await yp(t,r,s),i=bp(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=RC.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Op.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(cJ,"getServerList");async function Ip(e,t){let{jsm:r}=await jt(),s=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:TC.File,retention:gC.Limits,subjects:t,discard:X2.Old,max_msgs:n,max_bytes:i,max_age:s})}a(Ip,"createLocalStream");async function NC(){let{jsm:e}=await jt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(NC,"listStreams");async function uJ(e){let{jsm:t}=await jt();await t.streams.delete(e)}a(uJ,"deleteLocalStream");async function lJ(e){let{connection:t}=await jt(),r=[],s=bp(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(RC.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(lJ,"listRemoteStreams");async function _J(e,t=void 0,r=void 0){let{jsm:s,js:n}=await jt(),i=hC(),o={durable_name:i,ack_policy:U_.Explicit};t&&(o.deliver_policy=M_.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.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=Np(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Re.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(_J,"viewStream");async function*dJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await jt(),i=hC(),o={durable_name:i,ack_policy:U_.Explicit};t&&(o.deliver_policy=M_.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.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=Np(_.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(Re.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(dJ,"viewStreamIterator");async function fJ(e,t,r,s){Vr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=bC(s,r);let{js:n}=await jt(),i=await Pc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:pC.encode(s);try{Vr.trace(`publishToStream publishing to subject: ${o}`),rJ(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return CC(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Vr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await Ip(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(fJ,"publishToStream");function bC(e,t){t===void 0&&(t=Z2());let r=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Re.MSG_HEADERS.ORIGIN)&&r&&t.append(Re.MSG_HEADERS.ORIGIN,r),t}a(bC,"addNatsMsgHeader");function Mc(e){e=e.toLowerCase();let t=Dc.join(wt.get(Oe.CONFIG_PARAMS.ROOTPATH),sJ);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Pi(Rp)&&(Rp={port:Cc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Cc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Re.SERVER_SUFFIX.HUB,config_file:Re.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Dc.join(t,Re.PID_FILES.HUB),hdb_nats_path:t}),Rp;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Pi(gp)&&(gp={port:Cc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Cc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Re.SERVER_SUFFIX.LEAF,config_file:Re.NATS_CONFIG_FILES.LEAF_SERVER,domain:Cc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Re.SERVER_SUFFIX.LEAF,pid_file_path:Dc.join(t,Re.PID_FILES.LEAF),hdb_nats_path:t}),gp;Vr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Mc,"getServerConfig");async function EJ(e){let{jsm:t}=await jt(),r=await Pc();try{await t.streams.add({name:e.stream_name,storage:TC.File,retention:gC.Limits,max_age:Q2,max_bytes:z2,subjects:[`${Re.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:U_.Explicit,durable_name:e.durable_name,deliver_policy:M_.All,max_ack_pending:1e4});else throw s}}a(EJ,"createWorkQueueStream");async function hJ(){let{jsm:e}=await jt();(await e.consumers.info(Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,Re.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Vr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,Re.WORK_QUEUE_CONSUMER_NAMES.durable_name),Vr.info("Adding pull consumer to ingest stream"),await e.consumers.add(Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:U_.Explicit,durable_name:Re.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:M_.All,max_ack_pending:1e4}))}a(hJ,"updateIngestStreamConsumer");async function yC(e,t,r){let{jsm:s}=await jt(),n=await s.streams.info(t),i=IC(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=D_.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,S=n.config.sources.length;p<S;p++)if(d=n.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 s.streams.purge(t,{filter:p}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${Re.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(yC,"addSourceToWorkStream");function IC(e){return e.split(".")[1]}a(IC,"extractServerName");async function wC(e,t,r){let{jsm:s}=await jt(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=D_.createNatsTableStreamName(n,i),u=await s.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 s.streams.update(t,u.config)}a(wC,"removeSourceFromWorkStream");async function mJ(e,t,r=6e4,s=bp()){if(!Op.isObject(t))throw new Error("data param must be an object");let n=pC.encode(t),{connection:i}=await jt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return Np(c.data)}a(mJ,"request");function wp(e){return new Promise(async(t,r)=>{let s=V2(Ap,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(wp,"reloadNATS");async function pJ(){let{pid_file_path:e}=Mc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await wp(e)}a(pJ,"reloadNATSHub");async function SJ(){let{pid_file_path:e}=Mc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await wp(e)}a(SJ,"reloadNATSLeaf");function TJ(e,t,r){let s;switch(e.code){case EC.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case EC.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(TJ,"requestErrorHandler");async function gJ(e,t){let r=t+Re.SERVER_SUFFIX.LEAF;await CC(async()=>{e.subscribe===!0?await yC(r,Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await wC(r,Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(gJ,"updateWorkStream");function CC(e){return $2.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(CC,"exclusiveLock");async function LC(e,t){let r=D_.createNatsTableStreamName(e,t),s=await Pc(),n=NJ(e,t,s);await Ip(r,[n])}a(LC,"createLocalTableStream");async function RJ(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await LC(s,n)}}a(RJ,"createTableStreams");async function DC(e,t){if(wt.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=D_.createNatsTableStreamName(e,t),{jsm:s}=await jt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Vr.warn(r);else throw r}}a(DC,"purgeTableStream");async function AJ(e,t){if(wt.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await DC(e,t[r])}a(AJ,"purgeSchemaTableStreams");async function OJ(e){return(await Uc()).streams.info(e)}a(OJ,"getStreamInfo");function NJ(e,t,r){return`${Re.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(NJ,"createSubjectName");async function Pc(){if(Lc)return Lc;if(Lc=(await Uc())?.nc?.info?.server_name,Lc===void 0)throw new Error("Unable to get jetstream manager server name");return Lc}a(Pc,"getJsmServerName");async function bJ(){let e=await Uc(),t=await Pc(),r=await NC();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=yJ(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===Re.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Re.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Vr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===Re.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Re.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Vr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Vr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(bJ,"updateLocalStreams");function yJ(e){let{config:t}=e,r=!1;if(t.name===Re.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Re.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(yJ,"updateStreamLimits")});var q_=T((Vue,BC)=>{"use strict";var Po=Gl(),vo=Qw(),IJ=G(),wJ=require("uuid").v4,kue=require("clone"),B_=cn(),Bo=y(),CJ=require("util"),Kn=cs(),{handleHDBError:Zt,hdb_errors:LJ}=j(),{HDB_ERROR_MSGS:v_,HTTP_STATUS_CODES:er}=LJ,{SchemaEventMsg:H_}=_s(),MC=_t(),{getDatabases:DJ}=(fe(),Z(Ce)),{transformReq:Ho}=$();BC.exports={createSchema:UJ,createSchemaStructure:PC,createTable:MJ,createTableStructure:vC,createAttribute:qJ,dropSchema:PJ,dropTable:vJ,dropAttribute:BJ,getBackup:FJ};async function UJ(e){let t=await PC(e);return B_.signalSchemaChange(new H_(process.pid,e.operation,e.schema)),t}a(UJ,"createSchema");async function PC(e){let t=Po.schema_object(e);if(t)throw Zt(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);if(Ho(e),!await vo.checkSchemaExists(e.schema))throw Zt(new Error,v_.SCHEMA_EXISTS_ERR(e.schema),er.BAD_REQUEST,Bo.LOG_LEVELS.ERROR,v_.SCHEMA_EXISTS_ERR(e.schema),!0);return await Kn.createSchema(e),`database '${e.schema}' successfully created`}a(PC,"createSchemaStructure");async function MJ(e){return Ho(e),e.hash_attribute=e.primary_key??e.hash_attribute,await vC(e)}a(MJ,"createTable");async function vC(e){let t=Po.create_table_object(e);if(t)throw Zt(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);if(Po.validateTableResidence(e.residence),!await vo.checkSchemaTableExists(e.schema,e.table))throw Zt(new Error,v_.TABLE_EXISTS_ERR(e.schema,e.table),er.BAD_REQUEST,Bo.LOG_LEVELS.ERROR,v_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:wJ(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await Kn.createTable(s,e);else throw Zt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",er.BAD_REQUEST);else await Kn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(vC,"createTableStructure");async function PJ(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Po.schema_object(e),s=t??r;if(s)throw Zt(s,s.message,er.BAD_REQUEST,void 0,void 0,!0);Ho(e);let n=await vo.checkSchemaExists(e.schema);if(n)throw Zt(new Error,n,er.NOT_FOUND,Bo.LOG_LEVELS.ERROR,n,!0);let i=await vo.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Kn.dropSchema(e),B_.signalSchemaChange(new H_(process.pid,e.operation,e.schema)),await MC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(PJ,"dropSchema");async function vJ(e){let t=Po.table_object(e);if(t)throw Zt(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);Ho(e);let r=await vo.checkSchemaTableExists(e.schema,e.table);if(r)throw Zt(new Error,r,er.NOT_FOUND,Bo.LOG_LEVELS.ERROR,r,!0);return await Kn.dropTable(e),await MC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(vJ,"dropTable");async function BJ(e){let t=Po.attribute_object(e);if(t)throw Zt(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);Ho(e);let r=await vo.checkSchemaTableExists(e.schema,e.table);if(r)throw Zt(new Error,r,er.NOT_FOUND,Bo.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Zt(new Error,"You cannot drop a hash attribute",er.BAD_REQUEST,void 0,void 0,!0);if(Bo.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Zt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,er.BAD_REQUEST,void 0,void 0,!0);try{return await Kn.dropAttribute(e),HJ(e),B_.signalSchemaChange(new H_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw IJ.error(`Got an error deleting attribute ${CJ.inspect(e)}.`),s}}a(BJ,"dropAttribute");function HJ(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(HJ,"dropAttributeFromGlobal");async function qJ(e){Ho(e);let t=DJ()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Zt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,er.BAD_REQUEST,void 0,void 0,!0);return await Kn.createAttribute(e),B_.signalSchemaChange(new H_(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(qJ,"createAttribute");function FJ(e){return Kn.getBackup(e)}a(FJ,"getBackup")});var qC=T((Yue,HC)=>{"use strict";var{OPERATIONS_ENUM:GJ}=y(),Cp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=GJ.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};HC.exports=Cp});var Lp=T((Que,VC)=>{"use strict";var xJ=cs(),Wue=qC(),F_=$(),G_=y(),kJ=X(),{handleHDBError:FC,hdb_errors:VJ}=j(),{HDB_ERROR_MSGS:GC,HTTP_STATUS_CODES:xC}=VJ,$J=Object.values(G_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),kC="To use this operation audit log must be enabled in harperdb-config.yaml";VC.exports=YJ;async function YJ(e){if(F_.isEmpty(e.schema))throw new Error(GC.SCHEMA_REQUIRED_ERR);if(F_.isEmpty(e.table))throw new Error(GC.TABLE_REQUIRED_ERR);if(!kJ.get(G_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw FC(new Error,kC,xC.BAD_REQUEST,G_.LOG_LEVELS.ERROR,kC,!0);let t=F_.checkSchemaTableExist(e.schema,e.table);if(t)throw FC(new Error,t,xC.NOT_FOUND,G_.LOG_LEVELS.ERROR,t,!0);if(!F_.isEmpty(e.search_type)&&$J.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await xJ.readAuditLog(e)}a(YJ,"readAuditLog")});var YC=T((Jue,$C)=>{"use strict";var{OPERATIONS_ENUM:KJ}=y(),Dp=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=KJ.GET_BACKUP,this.schema=t,this.table=r}};$C.exports=Dp});var QC=T((ele,WC)=>{"use strict";var WJ=cs(),jue=YC(),Up=$(),QJ=y(),Zue=X(),{handleHDBError:zJ,hdb_errors:JJ}=j(),{HDB_ERROR_MSGS:KC,HTTP_STATUS_CODES:XJ}=JJ;WC.exports=jJ;async function jJ(e){if(Up.isEmpty(e.schema))throw new Error(KC.SCHEMA_REQUIRED_ERR);if(Up.isEmpty(e.table))throw new Error(KC.TABLE_REQUIRED_ERR);let t=Up.checkSchemaTableExist(e.schema,e.table);if(t)throw zJ(new Error,t,XJ.NOT_FOUND,QJ.LOG_LEVELS.ERROR,t,!0);return await WJ.getBackup(read_audit_log_object)}a(jJ,"getBackup")});var eL=T((rle,ZC)=>{var Wn=require("validate.js"),JC=ke(),qo=y(),{handleHDBError:ZJ,hdb_errors:e4}=j(),{HDB_ERROR_MSGS:je,HTTP_STATUS_CODES:t4}=e4,Mp=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),r4={STRUCTURE_USER:"structure_user"},zC=Object.values(qo.ROLE_TYPES_ENUM),s4="attribute_permissions",n4="attribute_name",{PERMS_CRUD_ENUM:Fo}=qo,i4=[s4,...Object.values(Fo)],XC=[Fo.READ,Fo.INSERT,Fo.UPDATE],o4=[n4,...XC];function a4(e){let t=Mp();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,jC(e,t)}a(a4,"addRoleValidation");function c4(e){let t=Mp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,jC(e,t)}a(c4,"alterRoleValidation");function u4(e){let t=Mp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,JC.validateObject(e,t)}a(u4,"dropRoleValidation");var l4=["operation","role","id","permission","hdb_user","hdb_auth_header"];function jC(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)l4.includes(s[o])||n.push(s[o]);n.length>0&&st(je.INVALID_ROLE_JSON_KEYS(n),r);let i=JC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{st(o,r)}),e.permission){let o=_4(e);o&&st(o,r),zC.forEach(c=>{e.permission[c]&&!Wn.isBoolean(e.permission[c])&&st(je.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(zC.indexOf(o)<0){if(o===r4.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]||st(je.SCHEMA_NOT_FOUND(d),r)}continue}st(je.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){st(je.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]){st(je.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{i4.includes(l)||st(je.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Fo).forEach(l=>{Wn.isDefined(_[l])?Wn.isBoolean(_[l])||st(je.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):st(je.TABLE_PERM_MISSING(l),r,o,u)}),Wn.isDefined(_.attribute_permissions)){if(!Wn.isArray(_.attribute_permissions)){st(je.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{st(je.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=>{!o4.includes(p)&&p!==Fo.DELETE&&st(je.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!Wn.isDefined(E.attribute_name)){st(je.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){st(je.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}XC.forEach(p=>{Wn.isDefined(E[p])?Wn.isBoolean(E[p])||st(je.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):st(je.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}`;st(je.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return d4(r)}a(jC,"customValidate");ZC.exports={addRoleValidation:a4,alterRoleValidation:c4,dropRoleValidation:u4};function _4(e){let{operation:t,permission:r}=e;if(t===qo.OPERATIONS_ENUM.ADD_ROLE||t===qo.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return je.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?qo.ROLE_TYPES_ENUM.SUPER_USER:qo.ROLE_TYPES_ENUM.CLUSTER_USER;return je.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(_4,"validateNoSUPerms");function d4(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:je.ROLE_PERMS_ERROR,...e};return ZJ(new Error,s,t4.BAD_REQUEST)}else return null}a(d4,"generateRolePermResponse");function st(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(st,"addPermError")});var Fp=T((nle,nL)=>{"use strict";var tL=Gr(),rL=Fr(),f4=bi(),vp=eL(),Bp=cn(),E4=require("uuid").v4,h4=require("util"),x_=y(),m4=$(),Hp=rL.searchByValue,p4=rL.searchByHash,S4=h4.promisify(f4.delete),T4=vs(),g4=wo(),{hdb_errors:R4,handleHDBError:Go}=j(),{HDB_ERROR_MSGS:sL,HTTP_STATUS_CODES:k_}=R4,{UserEventMsg:qp}=_s();nL.exports={addRole:A4,alterRole:O4,dropRole:N4,listRoles:b4};function Pp(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(Pp,"scrubRoleDetails");async function A4(e){let t=vp.addRoleValidation(e);if(t)throw t;e=Pp(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await Hp(r)||[])}catch(i){throw Go(i)}if(s&&s.length>0)throw Go(new Error,sL.ROLE_ALREADY_EXISTS(e.role),k_.CONFLICT,void 0,void 0,!0);e.id||(e.id=E4());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await tL.insert(n),Bp.signalUserChange(new qp(process.pid)),e=Pp(e),e}a(A4,"addRole");async function O4(e){let t=vp.alterRoleValidation(e);if(t)throw t;e=Pp(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await tL.update(r)}catch(n){throw Go(n)}if(s&&s?.message==="updated 0 of 1 records")throw Go(new Error,"Invalid role id",k_.BAD_REQUEST,void 0,void 0,!0);return await Bp.signalUserChange(new qp(process.pid)),e}a(O4,"alterRole");async function N4(e){let t=vp.dropRoleValidation(e);if(t)throw Go(new Error,t,k_.BAD_REQUEST,void 0,void 0,!0);let r=new g4(x_.SYSTEM_SCHEMA_NAME,x_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await p4(r));if(s.length===0)throw Go(new Error,sL.ROLE_NOT_FOUND,k_.NOT_FOUND,void 0,void 0,!0);let n=new T4(x_.SYSTEM_SCHEMA_NAME,x_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Hp(n)),o=!1;if(m4.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await S4(c),Bp.signalUserChange(new qp(process.pid)),`${s[0].role} successfully deleted`}a(N4,"dropRole");async function b4(){return Hp({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(b4,"listRoles")});var cL=T((ole,aL)=>{"use strict";var y4=X(),Qn=require("joi"),I4=ke(),iL=require("moment"),w4=require("fs-extra"),Gp=require("path"),C4=require("lodash"),vc=y(),{LOG_LEVELS:vi}=y(),L4="YYYY-MM-DD hh:mm:ss",D4=Gp.resolve(__dirname,"../logs");aL.exports=function(e){return I4.validateBySchema(e,U4)};var U4=Qn.object({from:Qn.custom(oL),until:Qn.custom(oL),level:Qn.valid(vi.NOTIFY,vi.FATAL,vi.ERROR,vi.WARN,vi.INFO,vi.DEBUG,vi.TRACE),order:Qn.valid("asc","desc"),limit:Qn.number().min(1),start:Qn.number().min(0),log_name:Qn.custom(M4)});function oL(e,t){if(iL(e,iL.ISO_8601).format(L4)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(oL,"validateDatetime");function M4(e,t){if(C4.invert(vc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=y4.get(vc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?vc.LOG_NAMES.HDB:e,i=n===vc.LOG_NAMES.INSTALL?Gp.join(D4,vc.LOG_NAMES.INSTALL):Gp.join(s,n);return w4.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(M4,"validateReadLogPath")});var kp=T((cle,lL)=>{"use strict";var V_=y(),P4=G(),v4=X(),B4=cL(),xp=require("path"),uL=require("fs-extra"),{once:H4}=require("events"),{handleHDBError:q4,hdb_errors:F4}=j(),{PACKAGE_ROOT:G4}=y(),x4=xp.join(G4,"logs"),k4=1e3,V4=200;lL.exports=$4;async function $4(e){let t=B4(e);if(t)throw q4(t,t.message,F4.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=v4.get(V_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?V_.LOG_NAMES.HDB:e.log_name,n=s===V_.LOG_NAMES.INSTALL?xp.join(x4,V_.LOG_NAMES.INSTALL):xp.join(r,s),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?k4: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(uL.statSync(n).size-(h+5)*V4,0));let S=uL.createReadStream(n,{start:p});S.on("error",F=>{P4.error(F)});let R=0,b=[],O="",Y;S.on("data",F=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=O+F;let K=0,B;for(;(B=w.exec(F))&&!S.destroyed;){Y&&(Y.message=F.slice(K,B.index),Q(Y));let[x,te,be]=B,se=be.split("] ["),vt=se[0],Pe=se[1];se.splice(0,2),Y={timestamp:te,thread:vt,level:Pe,tags:se,message:""},K=B.index+x.length}O=F.slice(K)}),S.on("end",F=>{S.destroyed||Y&&(Y.message=O.trim(),Q(Y))}),S.resume();function Q(F){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),F.level===o&&w>=K&&w<=B&&R<E?R++:F.level===o&&w>=K&&w<=B&&(zn(F,f,b),R++,R===h&&S.destroy());break;case(i&&c):w=new Date(F.timestamp),K=new Date(u),F.level===o&&w>=K&&R<E?R++:F.level===o&&w>=K&&(zn(F,f,b),R++,R===h&&S.destroy());break;case(i&&_):w=new Date(F.timestamp),B=new Date(l),F.level===o&&w<=B&&R<E?R++:F.level===o&&w<=B&&(zn(F,f,b),R++,R===h&&S.destroy());break;case(c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&R<E?R++:w>=K&&w<=B&&(zn(F,f,b),R++,R===h&&S.destroy());break;case i:F.level===o&&R<E?R++:F.level===o&&(zn(F,f,b),R++,R===h&&S.destroy());break;case c:w=new Date(F.timestamp),K=new Date(u),w>=K&&R<E?R++:w>=K&&R>=E&&(zn(F,f,b),R++,R===h&&S.destroy());break;case _:w=new Date(F.timestamp),B=new Date(l),w<=B&&R<E?R++:w<=B&&R>=E&&(zn(F,f,b),R++,R===h&&S.destroy());break;default:R<E?R++:(zn(F,f,b),R++,R===h&&S.destroy())}}return a(Q,"onLogMessage"),await H4(S,"close"),b}a($4,"readLog");function zn(e,t,r){t==="desc"?Y4(e,r):t==="asc"?K4(e,r):r.push(e)}a(zn,"pushLineToResult");function Y4(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(Y4,"insertDescending");function K4(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(K4,"insertAscending")});var Y_=T((fle,EL)=>{"use strict";var Vp=require("joi"),{string:$_,boolean:_L,date:W4}=Vp.types(),Q4=ke(),{validateSchemaExists:lle,validateTableExists:_le,validateSchemaName:dle}=Ls(),z4=y(),J4=Ve(),dL=X();dL.initSync();var X4=$_.invalid(dL.get(z4.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(J4.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(),fL={operation:$_.valid("add_node","update_node"),node_name:X4,subscriptions:Vp.array().items({table:$_.optional(),schema:$_.required(),subscribe:_L.required(),publish:_L.required().custom(Z4),start_time:W4.iso()}).min(1).required()};function j4(e){return Q4.validateBySchema(e,Vp.object(fL))}a(j4,"addUpdateNodeValidator");function Z4(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(Z4,"checkForFalsy");EL.exports={addUpdateNodeValidator:j4,validation_schema:fL}});var mL=T((hle,hL)=>{var e3=ke(),t3={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};hL.exports=function(e){return e3.validateObject(e,t3)}});var Yp=T((mle,pL)=>{"use strict";var r3=y().OPERATIONS_ENUM,$p=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=r3.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};pL.exports=$p});var TL=T((Sle,SL)=>{"use strict";var s3={OPERATION:"operation",REFRESH:"refresh"},Kp=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Wp=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};SL.exports={JWTTokens:Kp,TOKEN_TYPE_ENUM:s3,JWTRSAKeys:Wp}});var qc=T((gle,OL)=>{"use strict";var Hc=require("jsonwebtoken"),Qp=require("fs-extra"),zp=$(),$r=y(),{handleHDBError:tr,hdb_errors:n3}=j(),{HTTP_STATUS_CODES:rr,AUTHENTICATION_ERROR_MSGS:sr}=n3,Bc=G(),gL=Zl(),jp=xr(),i3=Gr().update,o3=Yp(),a3=cn(),{UserEventMsg:c3}=_s(),Jn=X();Jn.initSync();var Jp=require("path"),{JWTTokens:u3,JWTRSAKeys:l3,TOKEN_TYPE_ENUM:K_}=TL(),_3=Jn.get($r.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Jn.get($r.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",d3=Jn.get($r.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Jn.get($r.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",W_="RS256",Xp;OL.exports={createTokens:f3,validateOperationToken:h3,refreshOperationToken:E3,validateRefreshToken:AL};async function f3(e){if(zp.isEmpty(e)||typeof e!="object")throw tr(new Error,sr.INVALID_AUTH_OBJECT,rr.BAD_REQUEST,void 0,void 0,!0);if(zp.isEmpty(e.username))throw tr(new Error,sr.USERNAME_REQUIRED,rr.BAD_REQUEST,void 0,void 0,!0);if(zp.isEmpty(e.password))throw tr(new Error,sr.PASSWORD_REQUIRED,rr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await jp.findAndValidateUser(e.username,e.password),!t)throw tr(new Error,sr.INVALID_CREDENTIALS,rr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Bc.error(f),tr(new Error,sr.INVALID_CREDENTIALS,rr.UNAUTHORIZED,void 0,void 0,!0)}let r=await Q_(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await RL(i,r.private_key,r.passphrase),c=await Hc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:d3,algorithm:W_,subject:K_.REFRESH}),u=gL.hash(c),_=new o3($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await i3(_)}catch(f){Bc.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw tr(new Error,sr.REFRESH_TOKEN_SAVE_FAILED,rr.INTERNAL_SERVER_ERROR);return a3.signalUserChange(new c3(process.pid)),new u3(o,c)}a(f3,"createTokens");async function RL(e,t,r){return await Hc.sign(e,{key:t,passphrase:r},{expiresIn:_3,algorithm:W_,subject:K_.OPERATION})}a(RL,"signOperationToken");async function Q_(){if(Xp===void 0)try{let e=Jp.join(Jn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Jp.join(Jn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Jp.join(Jn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Qp.readFile(e)).toString(),n=(await Qp.readFile(t)).toString(),i=(await Qp.readFile(r)).toString();Xp=new l3(i,n,s)}catch(e){throw Bc.error(e),tr(new Error,sr.NO_ENCRYPTION_KEYS,rr.INTERNAL_SERVER_ERROR)}return Xp}a(Q_,"getJWTRSAKeys");async function E3(e){if(!e)throw tr(new Error,sr.INVALID_BODY,rr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw tr(new Error,sr.REFRESH_TOKEN_REQUIRED,rr.BAD_REQUEST,void 0,void 0,!0);await AL(e.refresh_token);let t=await Q_(),r=await Hc.decode(e.refresh_token);return{operation_token:await RL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(E3,"refreshOperationToken");async function h3(e){try{let t=await Q_(),r=await Hc.verify(e,t.public_key,{algorithms:W_,subject:K_.OPERATION});return await jp.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Bc.warn(t),t.name&&t.name==="TokenExpiredError"?tr(new Error,sr.TOKEN_EXPIRED,rr.FORBIDDEN):tr(new Error,sr.INVALID_TOKEN,rr.UNAUTHORIZED)}}a(h3,"validateOperationToken");async function AL(e){let t;try{let r=await Q_(),s=await Hc.verify(e,r.public_key,{algorithms:W_,subject:K_.REFRESH});t=await jp.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Bc.warn(r),r.name&&r.name==="TokenExpiredError"?tr(new Error,sr.TOKEN_EXPIRED,rr.FORBIDDEN):tr(new Error,sr.INVALID_TOKEN,rr.UNAUTHORIZED)}if(!gL.validate(t.refresh_token,e))throw tr(new Error,sr.INVALID_TOKEN,rr.UNAUTHORIZED);return t}a(AL,"validateRefreshToken")});var Zp=T((Ole,yL)=>{"use strict";var m3=mL(),xo=require("passport"),p3=require("passport-local").Strategy,S3=require("passport-http").BasicStrategy,T3=require("util"),g3=xr(),bL=T3.callbackify(g3.findAndValidateUser),Ale=fr(),R3=y(),NL=qc();xo.use(new p3(function(e,t,r){bL(e,t,r)}));xo.use(new S3(function(e,t,r){bL(e,t,r)}));xo.serializeUser(function(e,t){t(null,e)});xo.deserializeUser(function(e,t){t(null,e)});function A3(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":xo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===R3.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?NL.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):NL.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:xo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(A3,"authorize");function O3(e,t){let r=m3(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);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]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(O3,"checkPermissions");yL.exports={authorize:A3,checkPermissions:O3}});var ko=T((ble,IL)=>{"use strict";var eS=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},tS=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};IL.exports={Node:eS,NodeSubscription:tS}});var CL=T((Ile,wL)=>{"use strict";var N3=y().OPERATIONS_ENUM,rS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=N3.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};wL.exports=rS});var Fc=T((Cle,LL)=>{"use strict";var sS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},nS=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};LL.exports={RemotePayloadObject:sS,RemotePayloadSubscription:nS}});var UL=T((Dle,DL)=>{"use strict";var iS=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};DL.exports=iS});var vL=T((Ble,PL)=>{"use strict";var b3=UL(),Mle=ze(),ML=Ue(),y3=G(),{getSchemaPath:Ple,getTransactionAuditStorePath:vle}=ve(),{getDatabases:I3}=(fe(),Z(Ce));PL.exports=w3;async function w3(e){let t=new b3;try{let r=I3()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await ML.environmentDataSize(schema_path,e.name),o=await ML.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){y3.warn(`unable to stat table dbi due to ${r}`)}return t}a(w3,"lmdbGetTableSize")});var HL=T((qle,BL)=>{"use strict";var oS=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};BL.exports=oS});var Vo=T((kle,xL)=>{"use strict";var C3=require("fs-extra"),L3=require("path"),xt=require("systeminformation"),Xn=G(),D3=_t(),aS=Ve(),J_=y(),U3=vL(),GL=gi(),{getThreadInfo:qL}=Je(),pS=X();pS.initSync();var M3=HL(),{openEnvironment:Gle}=Ue(),{getSchemaPath:xle}=ve(),{database:P3}=(fe(),Z(Ce)),z_;xL.exports={getHDBProcessInfo:_S,getNetworkInfo:fS,getDiskInfo:dS,getMemoryInfo:lS,getCPUInfo:uS,getTimeInfo:cS,getSystemInformation:ES,systemInformation:v3,getTableSize:hS,getMetrics:mS};function cS(){return xt.time()}a(cS,"getTimeInfo");async function uS(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await xt.cpu();l.cpu_speed=await xt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:R,...b}=await xt.currentLoad();return b.cpus=[],R.forEach(O=>{let{raw_load:Y,raw_load_idle:Q,raw_load_irq:F,raw_load_nice:w,raw_load_system:K,raw_load_user:B,...x}=O;b.cpus.push(x)}),l.current_load=b,l}catch(e){return Xn.error(`error in getCPUInfo: ${e}`),{}}}a(uS,"getCPUInfo");async function lS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await xt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Xn.error(`error in getMemoryInfo: ${e}`),{}}}a(lS,"getMemoryInfo");async function _S(){let e={core:[],clustering:[]};try{let t=await xt.processes(),r;try{r=Number.parseInt(await C3.readFile(L3.join(pS.get(J_.CONFIG_PARAMS.ROOTPATH),J_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===J_.NODE_ERROR_CODES.ENOENT)Xn.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Xn.error(`error in getHDBProcessInfo: ${t}`),e}}a(_S,"getHDBProcessInfo");async function dS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await xt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await xt.fsStats();return e.read_write=_,e.size=await xt.fsSize(),e}catch(t){return Xn.error(`error in getDiskInfo: ${t}`),e}}a(dS,"getDiskInfo");async function fS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await xt.networkInterfaceDefault(),e.latency=await xt.inetChecksite("google.com"),(await xt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await xt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Xn.error(`error in getNetworkInfo: ${t}`),e}}a(fS,"getNetworkInfo");async function ES(){if(z_!==void 0)return z_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await xt.osInfo();e=c;let u=await xt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,z_=e,z_}catch(t){return Xn.error(`error in getSystemInformation: ${t}`),e}}a(ES,"getSystemInformation");async function hS(){let e=[],t=await GL.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await U3(s));return e}a(hS,"getTableSize");async function mS(){let e=await GL.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=P3({database:r,table:n}),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}}),s[n]=o}catch(i){Xn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(mS,"getMetrics");async function FL(){if(pS.get(J_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await D3.getNATSReferences(),r=await t.streams.info(aS.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(aS.WORK_QUEUE_CONSUMER_NAMES.stream_name,aS.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.config?.sources&&(n.ingest.stream.sources=r.config.sources),n}}a(FL,"getNatsStreamInfo");async function v3(e){let t=new M3;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await ES(),t.time=cS(),t.cpu=await uS(),t.memory=await lS(),t.disk=await dS(),t.network=await fS(),t.harperdb_processes=await _S(),t.table_size=await hS(),t.metrics=await mS(),t.threads=await qL(),t.replication=await FL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await ES();break;case"time":t.time=cS();break;case"cpu":t.cpu=await uS();break;case"memory":t.memory=await lS();break;case"disk":t.disk=await dS();break;case"network":t.network=await fS();break;case"harperdb_processes":t.harperdb_processes=await _S();break;case"table_size":t.table_size=await hS();break;case"database_metrics":case"metrics":t.metrics=await mS();break;case"threads":t.threads=await qL();break;case"replication":t.replication=await FL();break;default:break}return t}a(v3,"systemInformation")});var SS=T(($le,kL)=>{"use strict";kL.exports={version:B3,printVersion:H3};var X_=Nc();function B3(){if(X_)return X_.version}a(B3,"version");function H3(){X_&&console.log(`HarperDB Version ${X_.version}`)}a(H3,"printVersion")});var dn=T((Qle,KL)=>{"use strict";var q3=Gr(),TS=$(),F3=require("util"),Bi=y(),VL=X();VL.initSync();var G3=Zp(),$L=Fr(),{Node:Kle,NodeSubscription:Wle}=ko(),x3=wo(),k3=CL(),{RemotePayloadObject:V3,RemotePayloadSubscription:$3}=Fc(),{handleHDBError:Y3,hdb_errors:K3}=j(),{HTTP_STATUS_CODES:W3,HDB_ERROR_MSGS:Q3}=K3,z3=vs(),J3=Vo(),X3=SS(),{getDatabases:j3}=(fe(),Z(Ce)),Z3=F3.promisify(G3.authorize),eX=$L.searchByHash,tX=$L.searchByValue;KL.exports={authHeaderToUser:rX,isEmpty:sX,getNodeRecord:nX,upsertNodeRecord:iX,buildNodePayloads:oX,checkClusteringEnabled:aX,getAllNodeRecords:cX,getSystemInfo:uX,reverseSubscription:YL};async function rX(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Z3(t,null),e}a(rX,"authHeaderToUser");function sX(e){return e==null}a(sX,"isEmpty");async function nX(e){let t=new x3(Bi.SYSTEM_SCHEMA_NAME,Bi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return eX(t)}a(nX,"getNodeRecord");async function iX(e){let t=new k3(Bi.SYSTEM_SCHEMA_NAME,Bi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return q3.upsert(t)}a(iX,"upsertNodeRecord");function YL(e){if(TS.isEmpty(e.subscribe)||TS.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(YL,"reverseSubscription");function oX(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=TS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=YL(c),E=j3()[u]?.[_],h=new $3(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new V3(r,t,n,s)}a(oX,"buildNodePayloads");function aX(){if(!VL.get(Bi.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Y3(new Error,Q3.CLUSTERING_NOT_ENABLED,W3.BAD_REQUEST,void 0,void 0,!0)}a(aX,"checkClusteringEnabled");async function cX(){let e=new z3(Bi.SYSTEM_SCHEMA_NAME,Bi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await tX(e))}a(cX,"getAllNodeRecords");async function uX(){let e=await J3.getSystemInformation();return{hdb_version:X3.version(),node_version:e.node_version,platform:e.platform}}a(uX,"getSystemInfo")});var gS=T((Jle,eD)=>{"use strict";var j_=_t(),WL=$(),QL=Ve(),zL=y(),Z_=G(),JL=q_(),lX=Gm(),{RemotePayloadObject:_X}=Fc(),{handleHDBError:XL,hdb_errors:dX}=j(),{HTTP_STATUS_CODES:jL}=dX,{NodeSubscription:ZL}=ko();eD.exports=fX;async function fX(e,t){let r;try{r=await j_.request(`${t}.${QL.REQUEST_SUFFIX}`,new _X(zL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Z_.trace("Response from remote describe all request:",r)}catch(o){Z_.error(`addNode received error from describe all request to remote node: ${o}`);let c=j_.requestErrorHandler(o,"add_node",t);throw XL(new Error,c,jL.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 XL(new Error,o,jL.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===zL.SYSTEM_SCHEMA_NAME){await j_.createLocalTableStream(c,u);let h=new ZL(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=WL.doesSchemaExist(c),l=s[c]!==void 0,d=u?WL.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(Z_.trace(`addNode creating schema: ${c}`),await JL.createSchema({operation:"create_schema",schema:c})),!d&&f){Z_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new lX(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await JL.createTable(h)}await j_.createLocalTableStream(c,u);let E=new ZL(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(fX,"reviewSubscriptions")});var rd=T((jle,sD)=>{"use strict";var{handleHDBError:ed,hdb_errors:EX}=j(),{HTTP_STATUS_CODES:td}=EX,{addUpdateNodeValidator:hX}=Y_(),Gc=G(),rD=y(),tD=Ve(),mX=$(),RS=_t(),xc=dn(),pX=X(),SX=gS(),{Node:TX,NodeSubscription:gX}=ko(),{broadcast:RX}=Je(),AX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",OX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",NX=pX.get(rD.CONFIG_PARAMS.CLUSTERING_NODENAME);sD.exports=bX;async function bX(e,t=!1){Gc.trace("addNode called with:",e),xc.checkClusteringEnabled();let r=hX(e);if(r)throw ed(r,r.message,td.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await xc.getNodeRecord(s);if(!mX.isEmptyOrZeroLength(d))throw ed(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,td.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await SX(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=AX,o;let c=xc.buildNodePayloads(n,NX,rD.OPERATIONS_ENUM.ADD_NODE,await xc.getSystemInfo());Gc.trace("addNode sending remote payload:",c);let u;try{u=await RS.request(`${s}.${tD.REQUEST_SUFFIX}`,c)}catch(d){Gc.error(`addNode received error from request: ${d}`);let f=RS.requestErrorHandler(d,"add_node",s);throw ed(new Error,f,td.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===tD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw ed(new Error,d,td.INTERNAL_SERVER_ERROR,"error",d)}Gc.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];Gc.trace("Add node updating work stream for node:",s,"subscriptions:",E),await RS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new gX(E.schema,E.table,E.publish,E.subscribe))}let l=new TX(s,_,u.system_info);return await xc.upsertNodeRecord(l),RX({type:"nats_update"}),i.length>0?o.message=OX:o.message=`Successfully added '${s}' to manifest`,o}a(bX,"addNode")});var OS=T((e_e,oD)=>{"use strict";var{handleHDBError:sd,hdb_errors:yX}=j(),{HTTP_STATUS_CODES:nd}=yX,{addUpdateNodeValidator:IX}=Y_(),kc=G(),iD=y(),nD=Ve(),wX=$(),AS=_t(),Vc=dn(),CX=X(),{cloneDeep:LX}=require("lodash"),DX=gS(),{NodeSubscription:UX}=ko(),{broadcast:MX}=Je(),PX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",vX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",BX=CX.get(iD.CONFIG_PARAMS.CLUSTERING_NODENAME);oD.exports=HX;async function HX(e){kc.trace("updateNode called with:",e),Vc.checkClusteringEnabled();let t=IX(e);if(t)throw sd(t,t.message,nd.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=LX(await Vc.getNodeRecord(r));if(wX.isEmptyOrZeroLength(s))throw sd(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,nd.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await DX(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=PX,o;let c=Vc.buildNodePayloads(n,BX,iD.OPERATIONS_ENUM.UPDATE_NODE,await Vc.getSystemInfo());kc.trace("updateNode sending remote payload:",c);let u;try{u=await AS.request(`${r}.${nD.REQUEST_SUFFIX}`,c)}catch(_){kc.error(`updateNode received error from request: ${_}`);let l=AS.requestErrorHandler(_,"update_node",r);throw sd(new Error,l,nd.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===nD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw sd(new Error,_,nd.INTERNAL_SERVER_ERROR,"error",_)}kc.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];kc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await AS.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await qX(s[0],n,u.system_info),i.length>0?o.message=vX:o.message=`Successfully updated '${r}'`,o}a(HX,"updateNode");async function qX(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new UX(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Vc.upsertNodeRecord(s),MX({type:"nats_update"})}a(qX,"updateNodeTable")});var _D=T((r_e,lD)=>{"use strict";var uD=require("joi"),{string:aD}=uD.types(),FX=ke(),cD=y(),GX=X(),xX=Ve();lD.exports=kX;function kX(e){let t=aD.invalid(GX.get(cD.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(xX.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=uD.object({operation:aD.valid(cD.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return FX.validateBySchema(e,r)}a(kX,"removeNodeValidator")});var od=T((n_e,pD)=>{"use strict";var{handleHDBError:dD,hdb_errors:VX}=j(),{HTTP_STATUS_CODES:fD}=VX,$X=_D(),$c=G(),ED=dn(),YX=$(),id=y(),hD=Ve(),mD=_t(),KX=X(),{RemotePayloadObject:WX}=Fc(),{NodeSubscription:QX}=ko(),zX=mc(),JX=bi(),{broadcast:XX}=Je(),jX=KX.get(id.CONFIG_PARAMS.CLUSTERING_NODENAME);pD.exports=ZX;async function ZX(e){$c.trace("removeNode called with:",e),ED.checkClusteringEnabled();let t=$X(e);if(t)throw dD(t,t.message,fD.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await ED.getNodeRecord(r);if(YX.isEmptyOrZeroLength(s))throw dD(new Error,`Node '${r}' was not found.`,fD.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new WX(id.OPERATIONS_ENUM.REMOVE_NODE,jX,[]),i,o=!1;try{i=await mD.request(`${r}.${hD.REQUEST_SUFFIX}`,n),$c.trace("Remove node reply from remote node:",r,i)}catch(u){$c.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];$c.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new QX(l.schema,l.table,!1,!1);await mD.updateWorkStream(d,r)}let c=new zX(id.SYSTEM_SCHEMA_NAME,id.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await JX.deleteRecord(c),XX({type:"nats_update"}),i?.status===hD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?($c.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(ZX,"removeNode")});var gD=T((o_e,TD)=>{"use strict";var SD=require("joi"),{string:ej,array:tj}=SD.types(),rj=ke(),sj=Y_();TD.exports=nj;function nj(e){let t=SD.object({operation:ej.valid("configure_cluster").required(),connections:tj.items(sj.validation_schema).required()});return rj.validateBySchema(e,t)}a(nj,"configureClusterValidator")});var NS=T((c_e,bD)=>{"use strict";var ij=y(),ad=G(),oj=$(),aj=od(),cj=rd(),RD=dn(),uj=gD(),{handleHDBError:AD,hdb_errors:lj}=j(),{HTTP_STATUS_CODES:OD}=lj,_j="Configure cluster complete.",dj="Failed to configure the cluster. Check the logs for more details.",fj="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";bD.exports=Ej;async function Ej(e){ad.trace("configure cluster called with:",e),RD.checkClusteringEnabled();let t=uj(e);if(t)throw AD(t,t.message,OD.BAD_REQUEST,void 0,void 0,!0);let r=await RD.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(ND(aj,{operation:ij.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);ad.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(ND(cj,E,E.node_name))}let c=await Promise.allSettled(i);ad.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(ad.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(oj.isEmptyOrZeroLength(u))return{message:_j,connections:_};if(l)return{message:fj,failed_nodes:u,connections:_};throw AD(new Error,dj,OD.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Ej,"configureCluster");async function ND(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(ND,"functionWrapper")});var ID=T((l_e,yD)=>{"use strict";var cd=require("joi"),hj=ke(),{validateSchemaExists:mj,validateTableExists:pj,validateSchemaName:Sj}=Ls(),Tj=cd.object({operation:cd.string().valid("purge_stream"),schema:cd.string().custom(mj).custom(Sj).required(),table:cd.string().custom(pj).required()});function gj(e){return hj.validateBySchema(e,Tj)}a(gj,"purgeStreamValidator");yD.exports=gj});var bS=T((d_e,wD)=>{"use strict";var{handleHDBError:Rj,hdb_errors:Aj}=j(),{HTTP_STATUS_CODES:Oj}=Aj,Nj=ID(),bj=_t(),yj=dn();wD.exports=Ij;async function Ij(e){let t=Nj(e);if(t)throw Rj(t,t.message,Oj.BAD_REQUEST,void 0,void 0,!0);yj.checkClusteringEnabled();let{schema:r,table:s}=e;return await bj.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(Ij,"purgeStream")});var wS=T((E_e,PD)=>{"use strict";var IS=dn(),wj=_t(),DD=X(),ud=y(),Hi=Ve(),Cj=$(),yS=G(),{RemotePayloadObject:Lj}=Fc(),{ErrorCode:CD}=require("nats"),LD=DD.get(ud.CONFIG_PARAMS.CLUSTERING_ENABLED),UD=DD.get(ud.CONFIG_PARAMS.CLUSTERING_NODENAME);PD.exports={clusterStatus:Dj,buildNodeStatus:MD};async function Dj(){let e={node_name:UD,is_enabled:LD,connections:[]};if(!LD)return e;let t=await IS.getAllNodeRecords();if(Cj.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(MD(t[s],e.connections));return await Promise.allSettled(r),e}a(Dj,"clusterStatus");async function MD(e,t){let r=e.name,s=new Lj(ud.OPERATIONS_ENUM.CLUSTER_STATUS,UD,void 0,await IS.getSystemInfo()),n,i,o=Hi.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await wj.request(Hi.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Hi.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Hi.CLUSTER_STATUS_STATUSES.CLOSED,yS.error(`Error getting node status from ${r} `,n))}catch(u){yS.warn(`Error getting node status from ${r}`,u),u.code===CD.NoResponders?o=Hi.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===CD.Timeout?o=Hi.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Hi.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Uj(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==ud.PRE_4_0_0_VERSION&&await IS.upsertNodeRecord(u)}catch(u){yS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(MD,"buildNodeStatus");function Uj(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(Uj,"NodeStatusObject")});var LS=T((m_e,vD)=>{"use strict";var{handleHDBError:Mj,hdb_errors:Pj}=j(),{HTTP_STATUS_CODES:vj}=Pj,Bj=_t(),Hj=dn(),CS=$(),ld=require("joi"),qj=ke(),Fj=2e3,Gj=ld.object({timeout:ld.number().min(1),connected_nodes:ld.boolean(),routes:ld.boolean()});vD.exports=xj;async function xj(e){Hj.checkClusteringEnabled();let t=qj.validateBySchema(e,Gj);if(t)throw Mj(t,t.message,vj.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||CS.autoCastBoolean(s),o=n===void 0||CS.autoCastBoolean(n),c={nodes:[]},u=await Bj.getServerList(r??Fj),_={};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:CS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(xj,"clusterNetwork")});var FD=T((S_e,qD)=>{"use strict";var DS=require("joi"),BD=ke(),{route_constraints:HD}=em();qD.exports={setRoutesValidator:kj,deleteRoutesValidator:Vj};function kj(e){let t=DS.object({server:DS.valid("hub","leaf").required(),routes:HD.required()});return BD.validateBySchema(e,t)}a(kj,"setRoutesValidator");function Vj(e){let t=DS.object({routes:HD.required()});return BD.validateBySchema(e,t)}a(Vj,"deleteRoutesValidator")});var MS=T((g_e,VD)=>{"use strict";var qi=gr(),US=$(),_d=y(),GD=FD(),{handleHDBError:xD,hdb_errors:$j}=j(),{HTTP_STATUS_CODES:kD}=$j,Yj="cluster routes successfully set",Kj="cluster routes successfully deleted";VD.exports={setRoutes:Wj,getRoutes:Qj,deleteRoutes:zj};function Wj(e){let t=GD.setRoutesValidator(e);if(t)throw xD(t,t.message,kD.BAD_REQUEST,void 0,void 0,!0);let r=qi.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=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=US.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?qi.updateConfigValue(_d.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):qi.updateConfigValue(_d.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:Yj,set:o,skipped:i}}a(Wj,"setRoutes");function Qj(){let e=qi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Qj,"getRoutes");function zj(e){let t=GD.deleteRoutesValidator(e);if(t)throw xD(t,t.message,kD.BAD_REQUEST,void 0,void 0,!0);let r=qi.getClusteringRoutes(),s=r.hub_routes,n=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=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=US.isEmptyOrZeroLength(s)?null:s,qi.updateConfigValue(_d.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=US.isEmptyOrZeroLength(n)?null:n,qi.updateConfigValue(_d.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:Kj,deleted:i,skipped:o}}a(zj,"deleteRoutes")});var YD=T((A_e,$D)=>{"use strict";var Yc=require("alasql"),Fi=require("recursive-iterator"),Ss=G(),Jj=$(),Kc=y(),PS=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,jj(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(n=>Kc.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Kc.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Kc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Xj(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(_=>!Kc.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Yc.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function Xj(e){return e.filter(t=>t[Kc.PERMS_CRUD_ENUM.READ])}a(Xj,"filterReadRestrictedAttrs");function jj(e,t,r,s,n){Zj(e,t,r,s,n)}a(jj,"interpretAST");function Wc(e,t,r,s,n){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),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Wc,"addSchemaTableToMap");function Zj(e,t,r,s,n){if(!e){Ss.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Yc.yy.Insert?sZ(e,t,r):e instanceof Yc.yy.Select?eZ(e,t,r,s,n):e instanceof Yc.yy.Update?tZ(e,t,r):e instanceof Yc.yy.Delete?rZ(e,t,r):Ss.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Zj,"getRecordAttributesAST");function eZ(e,t,r,s,n){if(!e){Ss.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Jj.isEmptyOrZeroLength(i)){Ss.error("No schema specified");return}e.from.forEach(c=>{Wc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Wc(c.table,t,r,s,n)});let o=new Fi(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Ss.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 Fi(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{Ss.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 Fi(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Ss.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 Fi(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Ss.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(eZ,"getSelectAttributes");function tZ(e,t,r){if(!e){Ss.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Fi(e.columns),n=e.table.databaseid;Wc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&vS(e.table.tableid,n,i.columnid,t,r)}a(tZ,"getUpdateAttributes");function rZ(e,t,r){if(!e){Ss.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Fi(e.where),n=e.table.databaseid;Wc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&vS(e.table.tableid,n,i.columnid,t,r)}a(rZ,"getDeleteAttributes");function sZ(e,t,r){if(!e){Ss.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Fi(e.columns),n=e.into.databaseid;Wc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&vS(e.into.tableid,n,i.columnid,t,r)}a(sZ,"getInsertAttributes");function vS(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(vS,"pushAttribute");$D.exports=PS});var qS=T((N_e,zD)=>{var dd=oc(),KD=require("chalk"),yr=G(),WD=require("prompt"),{promisify:nZ}=require("util"),BS=y(),iZ=require("fs-extra"),oZ=require("path"),aZ=$(),cZ=SS(),QD=X();QD.initSync();var uZ=require("moment"),lZ=nZ(WD.get),_Z=oZ.join(QD.getHdbBasePath(),BS.LICENSE_KEY_DIR_NAME,BS.LICENSE_FILE_NAME,BS.LICENSE_FILE_NAME);zD.exports={getFingerprint:fZ,setLicense:dZ,parseLicense:HS,register:EZ,getRegistrationInfo:mZ};async function dZ(e){if(e&&e.key&&e.company){try{yr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await HS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw yr.error(r),yr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(dZ,"setLicense");async function fZ(){let e={};try{e=await dd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw yr.error(r),yr.error(t),new Error(r)}return e}a(fZ,"getFingerprint");async function HS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");yr.info("Validating license input...");let r=dd.validateLicense(e,t);if(yr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(yr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(yr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{yr.info("writing license to disk"),await iZ.writeFile(_Z,JSON.stringify({license_key:e,company:t}))}catch(s){throw yr.error("Failed to write License"),s}return"Registration successful."}a(HS,"parseLicense");async function EZ(){let e=await hZ();return HS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(EZ,"register");async function hZ(){let e=await dd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:KD.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:KD.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{WD.start()}catch(s){yr.error(s)}let r;try{r=await lZ(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(hZ,"promptForRegistration");async function mZ(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await dd.getLicense()}catch(r){throw yr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(aZ.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=cZ.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=uZ.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(mZ,"getRegistrationInfo")});var XD=T((y_e,JD)=>{"use strict";var pZ=Ve(),FS=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+pZ.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};JD.exports=FS});var eU=T((w_e,ZD)=>{"use strict";var jD=Ve(),GS=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+jD.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+jD.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"}};ZD.exports=GS});var rU=T((L_e,tU)=>{"use strict";var xS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};tU.exports=xS});var nU=T((U_e,sU)=>{"use strict";var SZ=Ve(),kS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+SZ.SERVER_SUFFIX.ADMIN,this.password=r}};sU.exports=kS});var YS=T((P_e,aU)=>{"use strict";var $o=require("path"),hd=require("fs-extra"),TZ=XD(),gZ=eU(),RZ=rU(),AZ=nU(),VS=xr(),Ko=$(),nr=gr(),Ed=y(),Qc=Ve(),{CONFIG_PARAMS:Ze}=Ed,zc=G(),Jc=X(),iU=nn(),$S=_t(),Yo="clustering",OZ=1e4,oU=5;aU.exports={generateNatsConfig:bZ,removeNatsConfig:yZ,getHubConfigPath:NZ};function NZ(){let e=Jc.get(Ze.ROOTPATH);return $o.join(e,Yo,Qc.NATS_CONFIG_FILES.HUB_SERVER)}a(NZ,"getHubConfigPath");async function bZ(e=!1,t=void 0){Jc.initSync();let r=Jc.get(Ze.ROOTPATH),s=$o.join(r,Yo,Qc.PID_FILES.HUB),n=$o.join(r,Yo,Qc.PID_FILES.LEAF),i=nr.getConfigFromFile(Ze.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=$o.join(r,Yo,Qc.NATS_CONFIG_FILES.HUB_SERVER),c=$o.join(r,Yo,Qc.NATS_CONFIG_FILES.LEAF_SERVER),u=nr.getConfigFromFile(Ze.CLUSTERING_TLS_CERTIFICATE),_=nr.getConfigFromFile(Ze.CLUSTERING_TLS_PRIVATEKEY),l=nr.getConfigFromFile(Ze.CLUSTERING_TLS_CERT_AUTH),d=nr.getConfigFromFile(Ze.CLUSTERING_TLS_INSECURE),f=nr.getConfigFromFile(Ze.CLUSTERING_TLS_VERIFY),E=nr.getConfigFromFile(Ze.CLUSTERING_NODENAME),h=nr.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await $S.checkNATSServerInstalled()||md("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await VS.listUsers(),S=nr.getConfigFromFile(Ze.CLUSTERING_USER),R=await VS.getClusterUser();(Ko.isEmpty(R)||R.active!==!0)&&md(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await fd(Ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await fd(Ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await fd(Ze.CLUSTERING_HUBSERVER_NETWORK_PORT),await fd(Ze.CLUSTERING_LEAFSERVER_NETWORK_PORT));let b=[],O=[];for(let[x,te]of p.entries())te.role.role===Ed.ROLE_TYPES_ENUM.CLUSTER_USER&&te.active&&(b.push(new AZ(te.username,iU.decrypt(te.hash))),O.push(new RZ(te.username,iU.decrypt(te.hash))));let Y=[],{hub_routes:Q}=nr.getClusteringRoutes();if(!Ko.isEmptyOrZeroLength(Q))for(let x of Q)Y.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${x.host}:${x.port}`);let F=new TZ(nr.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,nr.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_CLUSTER_NAME),nr.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,b,O);l==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=Ko.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Ed.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await hd.writeJson(o,F),zc.trace(`Hub server config written to ${o}`));let w=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new gZ(nr.getConfigFromFile(Ze.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],b,O,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===Ed.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await hd.writeJson(c,B),zc.trace(`Leaf server config written to ${c}`))}a(bZ,"generateNatsConfig");async function fd(e){let t=Jc.get(e);return Ko.isEmpty(t)&&md(`port undefined for '${e}'`),await Ko.isPortTaken(t)&&md(`'${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(fd,"isPortAvailable");function md(e){let t=`Error generating clustering config: ${e}`;zc.error(t),console.error(t),process.exit(1)}a(md,"generateNatsConfigError");async function yZ(e){let{port:t,config_file:r}=$S.getServerConfig(e),{username:s,decrypt_hash:n}=await VS.getClusterUser(),i=0,o=2e3;for(;i<oU;){try{let _=await $S.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){zc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=oU)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 Ko.async_set_timeout(o*(i*2))}let c="0".repeat(OZ),u=$o.join(Jc.get(Ze.ROOTPATH),Yo,r);await hd.writeFile(u,c),await hd.remove(u),zc.notify(e,"started.")}a(yZ,"removeNatsConfig")});var fU=T((B_e,dU)=>{"use strict";var Ir=X(),IZ=oc(),ce=y(),Xc=Ve(),fn=require("path"),{PACKAGE_ROOT:Sd}=y(),cU=X(),pd=$(),Wo="/dev/null",wZ=fn.join(Sd,"launchServiceScripts"),uU=fn.join(Sd,"utility/scripts"),CZ=fn.join(uU,ce.HDB_RESTART_SCRIPT),lU=fn.resolve(Sd,"dependencies",`${process.platform}-${process.arch}`,Xc.NATS_BINARY_NAME);function _U(){let t=IZ.licenseSearch().ram_allocation||ce.RAM_ALLOCATION_ENUM.DEFAULT,r=ce.MEM_SETTING_KEY+t,s={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return pd.noBootFile()&&(s[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=pd.getEnvCliRootPath()),{name:ce.PROCESS_DESCRIPTORS.HDB,script:ce.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:Sd}}a(_U,"generateMainServerConfig");var LZ=9930;function DZ(){Ir.initSync(!0);let e=Ir.get(ce.CONFIG_PARAMS.ROOTPATH),t=fn.join(e,"clustering",Xc.NATS_CONFIG_FILES.HUB_SERVER),r=fn.join(Ir.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=cU.get(ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Xc.LOG_LEVEL_FLAGS[Ir.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==LZ?"-"+s:""),script:lU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Ir.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Wo,i.error_file=Wo),i}a(DZ,"generateNatsHubServerConfig");var UZ=9940;function MZ(){Ir.initSync(!0);let e=Ir.get(ce.CONFIG_PARAMS.ROOTPATH),t=fn.join(e,"clustering",Xc.NATS_CONFIG_FILES.LEAF_SERVER),r=fn.join(Ir.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=cU.get(ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Xc.LOG_LEVEL_FLAGS[Ir.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==UZ?"-"+s:""),script:lU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Ir.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Wo,i.error_file=Wo),i}a(MZ,"generateNatsLeafServerConfig");function PZ(){Ir.initSync();let e=fn.join(Ir.get(ce.CONFIG_PARAMS.LOGGING_ROOT),ce.LOG_NAMES.HDB),t={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ce.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:wZ,autorestart:!1};return Ir.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Wo,t.error_file=Wo),t}a(PZ,"generateClusteringUpgradeV4ServiceConfig");function vZ(){let e={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.RESTART_HDB};return pd.noBootFile()&&(e[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=pd.getEnvCliRootPath()),{...{name:ce.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:uU},script:CZ}}a(vZ,"generateRestart");function BZ(){return{apps:[_U()]}}a(BZ,"generateAllServiceConfigs");dU.exports={generateAllServiceConfigs:BZ,generateMainServerConfig:_U,generateRestart:vZ,generateNatsHubServerConfig:DZ,generateNatsLeafServerConfig:MZ,generateClusteringUpgradeV4ServiceConfig:PZ}});var IU=T((F_e,yU)=>{"use strict";var Ae=y(),HZ=$(),En=YS(),jc=_t(),Fs=Ve(),jn=fU(),Td=X(),Zn=G(),qZ=dn(),{startWorker:EU,onMessageFromWorkers:FZ}=Je(),GZ=Vo(),q_e=require("util"),xZ=require("child_process"),kZ=require("fs"),{execFile:VZ}=xZ,pe;yU.exports={enterPM2Mode:$Z,start:ei,stop:KS,reload:mU,restart:pU,list:WS,describe:TU,connect:hn,kill:zZ,startAllServices:JZ,startService:QS,getUniqueServicesList:gU,restartAllServices:XZ,isServiceRegistered:RU,reloadStopStart:AU,restartHdb:SU,deleteProcess:WZ,startClusteringProcesses:NU,startClusteringThreads:bU,isHdbRestartRunning:QZ,isClusteringRunning:ZZ,stopClustering:jZ,reloadClustering:e5};var Zc=!1;FZ(e=>{e.type==="restart"&&Td.initSync(!0)});function $Z(){Zc=!0}a($Z,"enterPM2Mode");function hn(){return pe||(pe=require("pm2")),new Promise((e,t)=>{pe.connect((r,s)=>{Zn.setupConsoleLogging(),r&&t(r),e(s)})})}a(hn,"connect");var ir,YZ=10,hU;function ei(e,t=!1){if(Zc)return KZ(e);let r=VZ(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=ir.indexOf(r);o>-1&&ir.splice(o,1),!hU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<YZ&&(kZ.existsSync(En.getHubConfigPath())?ei(e):(await En.generateNatsConfig(!0),ei(e),await new Promise(c=>setTimeout(c,3e3)),await En.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await En.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=Td.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Fs.LOG_LEVEL_HIERARCHY[o]>=Fs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Fs.LOG_LEVELS.ERR||l===Fs.LOG_LEVELS.WRN?Zn.OUTPUTS.STDERR:Zn.OUTPUTS.STDOUT;Zn.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=Fs.LOG_LEVELS[f]}if(Fs.LOG_LEVEL_HIERARCHY[o]>=Fs.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Fs.LOG_LEVELS.ERR||l===Fs.LOG_LEVELS.WRN?Zn.OUTPUTS.STDERR:Zn.OUTPUTS.STDOUT;Zn.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),ir=[],!ir&&!t){let i=a(()=>{hU=!0,ir&&(ir.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)}ir.push(r)}a(ei,"start");function KZ(e){return new Promise(async(t,r)=>{try{await hn()}catch(s){r(s)}pe.start(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(KZ,"startWithPM2");function KS(e){if(!Zc){for(let t of ir||[])t.name===e&&(ir.splice(ir.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await hn()}catch(s){r(s)}pe.stop(e,async(s,n)=>{s&&(pe.disconnect(),r(s)),pe.delete(e,(i,o)=>{i&&(pe.disconnect(),r(s)),pe.disconnect(),t(o)})})})}a(KS,"stop");function mU(e){return new Promise(async(t,r)=>{try{await hn()}catch(s){r(s)}pe.reload(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(mU,"reload");function pU(e){if(!Zc)for(let t of ir||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await hn()}catch(s){r(s)}pe.restart(e,(s,n)=>{pe.disconnect(),t(n)})})}a(pU,"restart");function WZ(e){return new Promise(async(t,r)=>{try{await hn()}catch(s){r(s)}pe.delete(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(WZ,"deleteProcess");async function SU(){await ei(jn.generateRestart())}a(SU,"restartHdb");async function QZ(){let e=await WS();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(QZ,"isHdbRestartRunning");function WS(){return new Promise(async(e,t)=>{try{await hn()}catch(r){t(r)}pe.list((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(WS,"list");function TU(e){return new Promise(async(t,r)=>{try{await hn()}catch(s){r(s)}pe.describe(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(TU,"describe");function zZ(){if(!Zc){for(let e of ir||[])e.kill();ir=[];return}return new Promise(async(e,t)=>{try{await hn()}catch(r){t(r)}pe.killDaemon((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(zZ,"kill");async function JZ(){try{await NU(),await bU(),await ei(jn.generateAllServiceConfigs())}catch(e){throw pe?.disconnect(),e}}a(JZ,"startAllServices");async function QS(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=jn.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=jn.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=jn.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=jn.generateNatsHubServerConfig(),await ei(r,t),await En.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=jn.generateNatsLeafServerConfig(),await ei(r,t),await En.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=jn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ei(r)}catch(r){throw pe?.disconnect(),r}}a(QS,"startService");async function gU(){try{let e=await WS(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw pe?.disconnect(),e}}a(gU,"getUniqueServicesList");async function XZ(e=[]){try{let t=!1,r=await gU();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ae.PROCESS_DESCRIPTORS.HDB?t=!0:await pU(o))}t&&await AU(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw pe?.disconnect(),t}}a(XZ,"restartAllServices");async function RU(e){if(ir?.find(r=>r.name===e))return!0;let t=await GZ.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(RU,"isServiceRegistered");async function AU(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?Td.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Td.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await TU(e),s=HZ.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await KS(e),await QS(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await SU():await mU(e)}a(AU,"reloadStopStart");var OU;async function NU(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await QS(r,e)}}a(NU,"startClusteringProcesses");async function bU(){OU=EU(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await jc.createWorkQueueStream(Fs.WORK_QUEUE_CONSUMER_NAMES),await jc.updateIngestStreamConsumer(),await jc.updateLocalStreams();let e=await qZ.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){Zn.info("Starting clustering upgrade 4.0.0 process"),EU(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(bU,"startClusteringThreads");async function jZ(){for(let e in Ae.CLUSTERING_PROCESSES)if(e!==Ae.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ae.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await OU.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await KS(t)}}a(jZ,"stopClustering");async function ZZ(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await RU(t)===!1)return!1}return!0}a(ZZ,"isClusteringRunning");async function e5(){await En.generateNatsConfig(!0),await jc.reloadNATSHub(),await jc.reloadNATSLeaf(),await En.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await En.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(e5,"reloadClustering")});var Od=T((x_e,PU)=>{"use strict";var t5=require("minimist"),{isMainThread:XS,parentPort:LU}=require("worker_threads"),$e=y(),{PROCESS_DESCRIPTORS_VALIDATE:eu}=$e,Gs=G(),jS=$(),gd=YS(),Qo=_t(),zS=Ve(),DU=gr(),xs=IU(),wU=Vo(),r5=pE(),{restartWorkers:Rd,onMessageByType:s5}=Je(),{handleHDBError:n5,hdb_errors:i5}=j(),{HTTP_STATUS_CODES:o5}=i5,Ad=X();Ad.initSync();var tu=`Restarting HarperDB. This may take up to ${$e.RESTART_TIMEOUT_MS/1e3} seconds.`,a5="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",CU="Clustering is not enabled so cannot be restarted",c5="Invalid service",zo,Yr;PU.exports={restart:UU,restartService:ZS};XS&&s5($e.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?ZS({service:e.workerType}):UU({operation:"restart"})});async function UU(e){Yr=Object.keys(e).length===0,zo=await xs.isServiceRegistered($e.HDB_PROC_DESCRIPTOR);let t=t5(process.argv);if(t.service){await ZS(t);return}if(Yr&&!zo){console.error(a5);return}if(Yr&&console.log(tu),zo){xs.enterPM2Mode(),Gs.notify(tu);let r=r5(Object.keys($e.CONFIG_PARAM_MAP),!0);return jS.isEmptyOrZeroLength(Object.keys(r))||DU.updateConfigValue(void 0,void 0,r,!0,!0),l5(),tu}return XS?(Gs.notify(tu),setTimeout(()=>{Rd()},50)):LU.postMessage({type:$e.ITC_EVENT_TYPES.RESTART}),tu}a(UU,"restart");async function ZS(e){let{service:t}=e;if($e.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw n5(new Error,c5,o5.BAD_REQUEST,void 0,void 0,!0);if(zo=await xs.isServiceRegistered($e.HDB_PROC_DESCRIPTOR),!XS)return LU.postMessage({type:$e.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case eu.clustering:if(!Ad.get($e.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=CU;break}Yr&&console.log("Restarting clustering"),Gs.notify("Restarting clustering"),await MU();break;case eu.clustering_config:case eu["clustering config"]:if(!Ad.get($e.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=CU;break}Yr&&console.log("Restarting clustering_config"),Gs.notify("Restarting clustering_config"),await xs.reloadClustering();break;case"custom_functions":case"custom functions":case eu.harperdb:case eu.http_workers:if(Yr&&!zo){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}Yr&&console.log("Restarting http_workers"),Gs.notify("Restarting http_workers"),Yr?await xs.restart($e.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Rd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Gs.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(ZS,"restartService");async function u5(){await Qo.publishToStream(`${zS.SUBJECT_PREFIXES.TXN}.${zS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,zS.WORK_QUEUE_CONSUMER_NAMES.stream_name,Qo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(u5,"postDummyNatsMsg");async function l5(){await MU(),await xs.restart($e.HDB_PROC_DESCRIPTOR),await jS.async_set_timeout(2e3),Ad.get($e.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await JS(),Yr&&(await Qo.closeConnection(),process.exit(0))}a(l5,"restartPM2Mode");async function MU(){if(!DU.getConfigFromFile($e.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await wU.getHDBProcessInfo()).clustering.length===0)Gs.trace("Clustering not running, restart will start clustering services"),await gd.generateNatsConfig(!0),await xs.startClusteringProcesses(),await xs.startClusteringThreads(),await JS(),Yr&&await Qo.closeConnection();else{await u5(),await gd.generateNatsConfig(!0),zo?(Gs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await xs.restart($e.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await xs.restart($e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await wU.getHDBProcessInfo()).clustering.forEach(n=>{Gs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await jS.async_set_timeout(3e3),await JS(),await Qo.updateLocalStreams(),Yr&&await Qo.closeConnection(),Gs.trace("Restart clustering restarting ingest and reply service threads");let t=Rd($e.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Rd($e.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(MU,"restartClustering");async function JS(){await gd.removeNatsConfig($e.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await gd.removeNatsConfig($e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(JS,"removeNatsConfig")});var YU=T(($_e,$U)=>{"use strict";var V_e=require("lodash"),or=y(),{handleHDBError:vU,hdb_errors:_5}=j(),{HDB_ERROR_MSGS:d5,HTTP_STATUS_CODES:f5}=_5,eT=G();$U.exports={getRolePermissions:h5};var Gi=Object.create(null),E5=a(e=>({key:e,perms:{}}),"perms_template_obj"),FU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),GU=a((e=!1,t=!1,r=!1,s=!1)=>({[or.PERMS_CRUD_ENUM.READ]:e,[or.PERMS_CRUD_ENUM.INSERT]:t,[or.PERMS_CRUD_ENUM.UPDATE]:r,[or.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),tT=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...GU(t,r,s,n)}),"table_perms_template"),BU=a((e,t=GU())=>({attribute_name:e,describe:VU(t),[ru]:t[ru],[rT]:t[rT],[sT]:t[sT]}),"attr_perms_template"),HU=a((e,t=!1)=>({attribute_name:e,describe:t,[ru]:t}),"timestamp_attr_perms_template"),{READ:ru,INSERT:rT,UPDATE:sT}=or.PERMS_CRUD_ENUM,xU=Object.values(or.PERMS_CRUD_ENUM),kU=[ru,rT,sT];function h5(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[or.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Gi[t]&&Gi[t].key===s)return Gi[t].perms;let n=m5(e,r);return Gi[t]?Gi[t].key=s:Gi[t]=E5(s),Gi[t].perms=n,n}catch(r){if(!e[or.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[or.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<or.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw eT.error(s),eT.debug(r),vU(new Error,d5.OUTDATED_PERMS_TRANSLATION_ERROR,f5.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
9
- ${r.stack}`;throw eT.error(s),vU(new Error)}}}a(h5,"getRolePermissions");function m5(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[or.SYSTEM_SCHEMA_NAME]=s[or.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=p5(t[i]);return}r[i]=FU(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=S5(c,u);r[i].describe||xU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=tT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=tT()})}),r}a(m5,"translateRolePermissions");function p5(e){let t=FU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=tT(!0,!0,!0,!0,!0)}),t}a(p5,"createStructureUserPermissions");function S5(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return or.TIME_STAMP_NAMES.includes(d)&&(f=HU(d,l[ru])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=BU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=VU(l),n.attribute_permissions.push(l),c||T5(l,u)}else if(_!==o){let l;or.TIME_STAMP_NAMES.includes(_)?l=HU(_):l=BU(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=qU(n),n}else return e.describe=qU(e),e}a(S5,"getTableAttrPerms");function qU(e){return xU.filter(t=>e[t]).length>0}a(qU,"getSchemaTableDescribePerm");function VU(e){return kU.filter(t=>e[t]).length>0}a(VU,"getAttributeDescribePerm");function T5(e,t){kU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(T5,"checkForHashPerms")});var KU={};qe(KU,{Resources:()=>Nd,keyArrayToString:()=>Jo,resetResources:()=>g5,resources:()=>ti});function g5(){return ti=new Nd}function Jo(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Nd,ti,su=Te(()=>{Ei();Nd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)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 s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Ge(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(g5,"resetResources");a(Jo,"keyArrayToString")});var WU={};qe(WU,{Headers:()=>ri});var ri,bd=Te(()=>{ri=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 s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var nu={};qe(nu,{authentication:()=>tM,bypassAuth:()=>I5,login:()=>C5,logout:()=>L5,start:()=>w5});function I5(){eM=!0}async function tM(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?N5?O5:[]:A5?R5:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new ri([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return yd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),yd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(yd){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let p=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,p===-1?n.length:p),_=await zU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new wd.AuthAuditLog(E,h,Ct.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===Ct.AUTH_AUDIT_STATUS.SUCCESS?QU.notify(S):QU.error(S)},"authAuditLog"),d;if(s){if(d=xi.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await ut.getUser(p,S):null;break;case"Bearer":try{d=await(0,Id.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,Id.validateRefreshToken)(h),c({status:-1})}catch{throw R}}break}}catch(R){return y5&&(xi.get(h)||(xi.set(h,h),l(p,Ct.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:si({error:R.message},e)})}xi.set(s,d),b5&&l(d.username,Ct.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await ut.getUser(_.user,null,!1):eM&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,XU.getSuperUser)());yd&&(e.session.update=function(E){if(!u){u=(0,jU.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.id=u,zU.put(E)},e.login=async function(E,h){e.user=await ut.getUser(E,h),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")&&ti.loginPath?(f.status=302,f.headers.set("Location",ti.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 ri);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function w5({server:e,port:t}){e.request(tM,{port:t||"all"}),JU||(JU=!0,setInterval(()=>{xi=new Map},Kr.get(Ct.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),ZU.user.addListener(()=>{xi=new Map}))}async function C5(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 L5(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var XU,Id,jU,Kr,Ct,wd,ZU,QU,R5,A5,O5,N5,zU,yd,eM,b5,y5,xi,JU,Cd=Te(()=>{XU=D(xr());hr();su();Id=D(qc());fe();jU=require("uuid"),Kr=D(X()),Ct=D(y()),wd=D(G()),ZU=D(cc());bd();Xo();QU=(0,wd.loggerWithTag)("auth-event");Kr.initSync();R5=Kr.get(Ct.CONFIG_PARAMS.HTTP_CORSACCESSLIST),A5=Kr.get(Ct.CONFIG_PARAMS.HTTP_CORS),O5=Kr.get(Ct.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),N5=Kr.get(Ct.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),zU=et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),yd=Kr.get(Ct.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,eM=Kr.get(Ct.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,b5=Kr.get(Ct.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,y5=Kr.get(Ct.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,xi=new Map;ut.onInvalidatedUser(()=>{xi=new Map});a(I5,"bypassAuth");a(tM,"authentication");a(w5,"start");a(C5,"login");a(L5,"logout")});var cM=T((tde,aM)=>{"use strict";var Se=require("joi"),rM=require("fs-extra"),sM=require("path"),pn=ke(),nM=X(),iM=y(),oM=G(),{hdb_errors:D5}=j(),{HDB_ERROR_MSGS:kt}=D5,mn=/^[a-zA-Z0-9-_]+$/;aM.exports={getDropCustomFunctionValidator:M5,setCustomFunctionValidator:P5,addComponentValidator:q5,dropCustomFunctionProjectValidator:F5,packageComponentValidator:G5,deployComponentValidator:x5,setComponentFileValidator:v5,getComponentFileValidator:H5,dropComponentFileValidator:B5};function Ld(e,t,r){try{let s=nM.get(iM.CONFIG_PARAMS.COMPONENTSROOT),n=sM.join(s,t);return rM.existsSync(n)?e?t:r.message(kt.PROJECT_EXISTS):e?r.message(kt.NO_PROJECT):t}catch(s){return oM.error(s),r.message(kt.VALIDATION_ERR)}}a(Ld,"checkProjectExists");function iu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(iu,"checkFilePath");function U5(e,t,r,s){try{let n=nM.get(iM.CONFIG_PARAMS.COMPONENTSROOT),i=sM.join(n,e,t,r+".js");return rM.existsSync(i)?r:s.message(kt.NO_FILE)}catch(n){return oM.error(n),s.message(kt.VALIDATION_ERR)}}a(U5,"checkFileExists");function M5(e){let t=Se.object({project:Se.string().pattern(mn).custom(Ld.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().pattern(mn).custom(U5.bind(null,e.project,e.type)).custom(iu).required().messages({"string.pattern.base":kt.BAD_FILE_NAME})});return pn.validateBySchema(e,t)}a(M5,"getDropCustomFunctionValidator");function P5(e){let t=Se.object({project:Se.string().pattern(mn).custom(Ld.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().custom(iu).required(),function_content:Se.string().required()});return pn.validateBySchema(e,t)}a(P5,"setCustomFunctionValidator");function v5(e){let t=Se.object({project:Se.string().pattern(mn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),file:Se.string().custom(iu).required(),payload:Se.string().allow("").optional(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return pn.validateBySchema(e,t)}a(v5,"setComponentFileValidator");function B5(e){let t=Se.object({project:Se.string().pattern(mn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),file:Se.string().custom(iu).optional()});return pn.validateBySchema(e,t)}a(B5,"dropComponentFileValidator");function H5(e){let t=Se.object({project:Se.string().required(),file:Se.string().custom(iu).required(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return pn.validateBySchema(e,t)}a(H5,"getComponentFileValidator");function q5(e){let t=Se.object({project:Se.string().pattern(mn).custom(Ld.bind(null,!1)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME})});return pn.validateBySchema(e,t)}a(q5,"addComponentValidator");function F5(e){let t=Se.object({project:Se.string().pattern(mn).custom(Ld.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME})});return pn.validateBySchema(e,t)}a(F5,"dropCustomFunctionProjectValidator");function G5(e){let t=Se.object({project:Se.string().pattern(mn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),skip_node_modules:Se.boolean()});return pn.validateBySchema(e,t)}a(G5,"packageComponentValidator");function x5(e){let t=Se.object({project:Se.string().pattern(mn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),payload:Se.string().optional().messages({"string.pattern.base":kt.BAD_PACKAGE}),package:Se.string().optional()});return pn.validateBySchema(e,t)}a(x5,"deployComponentValidator")});var Pd=T((sde,hM)=>{"use strict";var Dd=require("joi"),Ud=require("path"),uM=require("fs-extra"),{exec:k5}=require("child_process"),V5=require("util"),lM=V5.promisify(k5),ou=y(),{handleHDBError:jo,hdb_errors:$5}=j(),{HTTP_STATUS_CODES:Zo}=$5,au=X(),Y5=ke(),ea=G();au.initSync();var nT=au.get(ou.CONFIG_PARAMS.COMPONENTSROOT),_M="npm install --omit=dev --json",K5=`${_M} --dry-run`;hM.exports={installModules:J5,auditModules:X5,installAllRootModules:W5,uninstallRootModule:Q5,linkHarperdb:z5};async function W5(e=!1){await Md(),await cu(e?"npm install --ignore-scripts":"npm install",au.get(ou.CONFIG_PARAMS.ROOTPATH))}a(W5,"installAllRootModules");async function Q5(e){await cu(`npm uninstall ${e}`,au.get(ou.CONFIG_PARAMS.ROOTPATH))}a(Q5,"uninstallRootModule");async function z5(){await Md(),await cu(`npm link ${ou.PACKAGE_ROOT}`,au.get(ou.CONFIG_PARAMS.ROOTPATH))}a(z5,"linkHarperdb");async function cu(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await lM(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
8
+ `,"")}a(AC,"runCommand");async function aJ(){try{await F2.access(Ap)}catch{return!1}let e=await AC(`${Ap} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return G2.eq(t,iJ)}a(aJ,"checkNATSServerInstalled");async function yp(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await SC.getClusterUser();if(Pi(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}$r.trace("create nats connection called");let i=await X2({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:wt.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:wt.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:wt.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),$r.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(yp,"createConnection");async function cJ(){Ss&&(await Ss.drain(),Ss=void 0,Do=void 0,Uo=void 0,Mo=void 0)}a(cJ,"closeConnection");var Ss,Mo;async function P_(){return Mo||(Mo=yp(wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Ss=await Mo),Ss||Mo}a(P_,"getConnection");async function Uc(){if(Do)return Do;Pi(Ss)&&await P_();let{domain:e}=Mc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Pi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Do=await Ss.jetstreamManager({domain:e,timeout:6e4}),Do}a(Uc,"getJetStreamManager");async function OC(){if(Uo)return Uo;Pi(Ss)&&await P_();let{domain:e}=Mc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Pi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Uo=Ss.jetstream({domain:e,timeout:6e4}),Uo}a(OC,"getJetStream");async function jt(){let e=Ss||await P_(),t=Do||await Uc(),r=Uo||await OC();return{connection:e,jsm:t,js:r}}a(jt,"getNATSReferences");async function uJ(e){let t=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await SC.getClusterUser(),n=await yp(t,r,s),i=bp(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=RC.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Op.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(uJ,"getServerList");async function Ip(e,t){let{jsm:r}=await jt(),s=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:TC.File,retention:gC.Limits,subjects:t,discard:j2.Old,max_msgs:n,max_bytes:i,max_age:s})}a(Ip,"createLocalStream");async function NC(){let{jsm:e}=await jt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(NC,"listStreams");async function lJ(e){let{jsm:t}=await jt();await t.streams.delete(e)}a(lJ,"deleteLocalStream");async function _J(e){let{connection:t}=await jt(),r=[],s=bp(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(RC.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(_J,"listRemoteStreams");async function dJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await jt(),i=hC(),o={durable_name:i,ack_policy:U_.Explicit};t&&(o.deliver_policy=M_.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.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=Np(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Re.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(dJ,"viewStream");async function*fJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await jt(),i=hC(),o={durable_name:i,ack_policy:U_.Explicit};t&&(o.deliver_policy=M_.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.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=Np(_.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(Re.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(fJ,"viewStreamIterator");async function EJ(e,t,r,s){$r.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=bC(s,r);let{js:n}=await jt(),i=await Pc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:pC.encode(s);try{$r.trace(`publishToStream publishing to subject: ${o}`),sJ(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return CC(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){$r.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await Ip(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(EJ,"publishToStream");function bC(e,t){t===void 0&&(t=eJ());let r=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Re.MSG_HEADERS.ORIGIN)&&r&&t.append(Re.MSG_HEADERS.ORIGIN,r),t}a(bC,"addNatsMsgHeader");function Mc(e){e=e.toLowerCase();let t=Dc.join(wt.get(Oe.CONFIG_PARAMS.ROOTPATH),nJ);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Pi(Rp)&&(Rp={port:Cc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Cc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Re.SERVER_SUFFIX.HUB,config_file:Re.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Dc.join(t,Re.PID_FILES.HUB),hdb_nats_path:t}),Rp;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Pi(gp)&&(gp={port:Cc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Cc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Re.SERVER_SUFFIX.LEAF,config_file:Re.NATS_CONFIG_FILES.LEAF_SERVER,domain:Cc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Re.SERVER_SUFFIX.LEAF,pid_file_path:Dc.join(t,Re.PID_FILES.LEAF),hdb_nats_path:t}),gp;$r.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Mc,"getServerConfig");async function hJ(e){let{jsm:t}=await jt(),r=await Pc();try{await t.streams.add({name:e.stream_name,storage:TC.File,retention:gC.Limits,max_age:z2,max_bytes:J2,subjects:[`${Re.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:U_.Explicit,durable_name:e.durable_name,deliver_policy:M_.All,max_ack_pending:1e4});else throw s}}a(hJ,"createWorkQueueStream");async function mJ(){let{jsm:e}=await jt();(await e.consumers.info(Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,Re.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&($r.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,Re.WORK_QUEUE_CONSUMER_NAMES.durable_name),$r.info("Adding pull consumer to ingest stream"),await e.consumers.add(Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:U_.Explicit,durable_name:Re.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:M_.All,max_ack_pending:1e4}))}a(mJ,"updateIngestStreamConsumer");async function yC(e,t,r){let{jsm:s}=await jt(),n=await s.streams.info(t),i=IC(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=D_.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,S=n.config.sources.length;p<S;p++)if(d=n.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 s.streams.purge(t,{filter:p}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${Re.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(yC,"addSourceToWorkStream");function IC(e){return e.split(".")[1]}a(IC,"extractServerName");async function wC(e,t,r){let{jsm:s}=await jt(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=D_.createNatsTableStreamName(n,i),u=await s.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 s.streams.update(t,u.config)}a(wC,"removeSourceFromWorkStream");async function pJ(e,t,r=6e4,s=bp()){if(!Op.isObject(t))throw new Error("data param must be an object");let n=pC.encode(t),{connection:i}=await jt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return Np(c.data)}a(pJ,"request");function wp(e){return new Promise(async(t,r)=>{let s=$2(Ap,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(wp,"reloadNATS");async function SJ(){let{pid_file_path:e}=Mc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await wp(e)}a(SJ,"reloadNATSHub");async function TJ(){let{pid_file_path:e}=Mc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await wp(e)}a(TJ,"reloadNATSLeaf");function gJ(e,t,r){let s;switch(e.code){case EC.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case EC.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(gJ,"requestErrorHandler");async function RJ(e,t){let r=t+Re.SERVER_SUFFIX.LEAF;await CC(async()=>{e.subscribe===!0?await yC(r,Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await wC(r,Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(RJ,"updateWorkStream");function CC(e){return Y2.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(CC,"exclusiveLock");async function LC(e,t){let r=D_.createNatsTableStreamName(e,t),s=await Pc(),n=bJ(e,t,s);await Ip(r,[n])}a(LC,"createLocalTableStream");async function AJ(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await LC(s,n)}}a(AJ,"createTableStreams");async function DC(e,t){if(wt.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=D_.createNatsTableStreamName(e,t),{jsm:s}=await jt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")$r.warn(r);else throw r}}a(DC,"purgeTableStream");async function OJ(e,t){if(wt.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await DC(e,t[r])}a(OJ,"purgeSchemaTableStreams");async function NJ(e){return(await Uc()).streams.info(e)}a(NJ,"getStreamInfo");function bJ(e,t,r){return`${Re.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(bJ,"createSubjectName");async function Pc(){if(Lc)return Lc;if(Lc=(await Uc())?.nc?.info?.server_name,Lc===void 0)throw new Error("Unable to get jetstream manager server name");return Lc}a(Pc,"getJsmServerName");async function yJ(){let e=await Uc(),t=await Pc(),r=await NC();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=IJ(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===Re.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Re.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;$r.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===Re.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Re.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;$r.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");$r.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(yJ,"updateLocalStreams");function IJ(e){let{config:t}=e,r=!1;if(t.name===Re.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Re.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=wt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(IJ,"updateStreamLimits")});var q_=T((Vue,BC)=>{"use strict";var Po=Gl(),vo=Qw(),wJ=G(),CJ=require("uuid").v4,kue=require("clone"),B_=cn(),Bo=y(),LJ=require("util"),Kn=us(),{handleHDBError:Zt,hdb_errors:DJ}=j(),{HDB_ERROR_MSGS:v_,HTTP_STATUS_CODES:er}=DJ,{SchemaEventMsg:H_}=ds(),MC=dt(),{getDatabases:UJ}=(fe(),Z(Ce)),{transformReq:Ho}=$();BC.exports={createSchema:MJ,createSchemaStructure:PC,createTable:PJ,createTableStructure:vC,createAttribute:FJ,dropSchema:vJ,dropTable:BJ,dropAttribute:HJ,getBackup:GJ};async function MJ(e){let t=await PC(e);return B_.signalSchemaChange(new H_(process.pid,e.operation,e.schema)),t}a(MJ,"createSchema");async function PC(e){let t=Po.schema_object(e);if(t)throw Zt(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);if(Ho(e),!await vo.checkSchemaExists(e.schema))throw Zt(new Error,v_.SCHEMA_EXISTS_ERR(e.schema),er.BAD_REQUEST,Bo.LOG_LEVELS.ERROR,v_.SCHEMA_EXISTS_ERR(e.schema),!0);return await Kn.createSchema(e),`database '${e.schema}' successfully created`}a(PC,"createSchemaStructure");async function PJ(e){return Ho(e),e.hash_attribute=e.primary_key??e.hash_attribute,await vC(e)}a(PJ,"createTable");async function vC(e){let t=Po.create_table_object(e);if(t)throw Zt(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);if(Po.validateTableResidence(e.residence),!await vo.checkSchemaTableExists(e.schema,e.table))throw Zt(new Error,v_.TABLE_EXISTS_ERR(e.schema,e.table),er.BAD_REQUEST,Bo.LOG_LEVELS.ERROR,v_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:CJ(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await Kn.createTable(s,e);else throw Zt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",er.BAD_REQUEST);else await Kn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(vC,"createTableStructure");async function vJ(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Po.schema_object(e),s=t??r;if(s)throw Zt(s,s.message,er.BAD_REQUEST,void 0,void 0,!0);Ho(e);let n=await vo.checkSchemaExists(e.schema);if(n)throw Zt(new Error,n,er.NOT_FOUND,Bo.LOG_LEVELS.ERROR,n,!0);let i=await vo.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Kn.dropSchema(e),B_.signalSchemaChange(new H_(process.pid,e.operation,e.schema)),await MC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(vJ,"dropSchema");async function BJ(e){let t=Po.table_object(e);if(t)throw Zt(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);Ho(e);let r=await vo.checkSchemaTableExists(e.schema,e.table);if(r)throw Zt(new Error,r,er.NOT_FOUND,Bo.LOG_LEVELS.ERROR,r,!0);return await Kn.dropTable(e),await MC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(BJ,"dropTable");async function HJ(e){let t=Po.attribute_object(e);if(t)throw Zt(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);Ho(e);let r=await vo.checkSchemaTableExists(e.schema,e.table);if(r)throw Zt(new Error,r,er.NOT_FOUND,Bo.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Zt(new Error,"You cannot drop a hash attribute",er.BAD_REQUEST,void 0,void 0,!0);if(Bo.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Zt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,er.BAD_REQUEST,void 0,void 0,!0);try{return await Kn.dropAttribute(e),qJ(e),B_.signalSchemaChange(new H_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw wJ.error(`Got an error deleting attribute ${LJ.inspect(e)}.`),s}}a(HJ,"dropAttribute");function qJ(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(qJ,"dropAttributeFromGlobal");async function FJ(e){Ho(e);let t=UJ()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Zt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,er.BAD_REQUEST,void 0,void 0,!0);return await Kn.createAttribute(e),B_.signalSchemaChange(new H_(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(FJ,"createAttribute");function GJ(e){return Kn.getBackup(e)}a(GJ,"getBackup")});var qC=T((Yue,HC)=>{"use strict";var{OPERATIONS_ENUM:xJ}=y(),Cp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=xJ.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};HC.exports=Cp});var Lp=T((Que,VC)=>{"use strict";var kJ=us(),Wue=qC(),F_=$(),G_=y(),VJ=X(),{handleHDBError:FC,hdb_errors:$J}=j(),{HDB_ERROR_MSGS:GC,HTTP_STATUS_CODES:xC}=$J,YJ=Object.values(G_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),kC="To use this operation audit log must be enabled in harperdb-config.yaml";VC.exports=KJ;async function KJ(e){if(F_.isEmpty(e.schema))throw new Error(GC.SCHEMA_REQUIRED_ERR);if(F_.isEmpty(e.table))throw new Error(GC.TABLE_REQUIRED_ERR);if(!VJ.get(G_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw FC(new Error,kC,xC.BAD_REQUEST,G_.LOG_LEVELS.ERROR,kC,!0);let t=F_.checkSchemaTableExist(e.schema,e.table);if(t)throw FC(new Error,t,xC.NOT_FOUND,G_.LOG_LEVELS.ERROR,t,!0);if(!F_.isEmpty(e.search_type)&&YJ.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await kJ.readAuditLog(e)}a(KJ,"readAuditLog")});var YC=T((Jue,$C)=>{"use strict";var{OPERATIONS_ENUM:WJ}=y(),Dp=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=WJ.GET_BACKUP,this.schema=t,this.table=r}};$C.exports=Dp});var QC=T((ele,WC)=>{"use strict";var QJ=us(),jue=YC(),Up=$(),zJ=y(),Zue=X(),{handleHDBError:JJ,hdb_errors:XJ}=j(),{HDB_ERROR_MSGS:KC,HTTP_STATUS_CODES:jJ}=XJ;WC.exports=ZJ;async function ZJ(e){if(Up.isEmpty(e.schema))throw new Error(KC.SCHEMA_REQUIRED_ERR);if(Up.isEmpty(e.table))throw new Error(KC.TABLE_REQUIRED_ERR);let t=Up.checkSchemaTableExist(e.schema,e.table);if(t)throw JJ(new Error,t,jJ.NOT_FOUND,zJ.LOG_LEVELS.ERROR,t,!0);return await QJ.getBackup(read_audit_log_object)}a(ZJ,"getBackup")});var eL=T((rle,ZC)=>{var Wn=require("validate.js"),JC=ke(),qo=y(),{handleHDBError:e4,hdb_errors:t4}=j(),{HDB_ERROR_MSGS:je,HTTP_STATUS_CODES:r4}=t4,Mp=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),s4={STRUCTURE_USER:"structure_user"},zC=Object.values(qo.ROLE_TYPES_ENUM),n4="attribute_permissions",i4="attribute_name",{PERMS_CRUD_ENUM:Fo}=qo,o4=[n4,...Object.values(Fo)],XC=[Fo.READ,Fo.INSERT,Fo.UPDATE],a4=[i4,...XC];function c4(e){let t=Mp();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,jC(e,t)}a(c4,"addRoleValidation");function u4(e){let t=Mp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,jC(e,t)}a(u4,"alterRoleValidation");function l4(e){let t=Mp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,JC.validateObject(e,t)}a(l4,"dropRoleValidation");var _4=["operation","role","id","permission","hdb_user","hdb_auth_header"];function jC(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)_4.includes(s[o])||n.push(s[o]);n.length>0&&st(je.INVALID_ROLE_JSON_KEYS(n),r);let i=JC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{st(o,r)}),e.permission){let o=d4(e);o&&st(o,r),zC.forEach(c=>{e.permission[c]&&!Wn.isBoolean(e.permission[c])&&st(je.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(zC.indexOf(o)<0){if(o===s4.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]||st(je.SCHEMA_NOT_FOUND(d),r)}continue}st(je.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){st(je.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]){st(je.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{o4.includes(l)||st(je.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Fo).forEach(l=>{Wn.isDefined(_[l])?Wn.isBoolean(_[l])||st(je.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):st(je.TABLE_PERM_MISSING(l),r,o,u)}),Wn.isDefined(_.attribute_permissions)){if(!Wn.isArray(_.attribute_permissions)){st(je.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{st(je.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=>{!a4.includes(p)&&p!==Fo.DELETE&&st(je.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!Wn.isDefined(E.attribute_name)){st(je.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){st(je.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}XC.forEach(p=>{Wn.isDefined(E[p])?Wn.isBoolean(E[p])||st(je.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):st(je.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}`;st(je.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return f4(r)}a(jC,"customValidate");ZC.exports={addRoleValidation:c4,alterRoleValidation:u4,dropRoleValidation:l4};function d4(e){let{operation:t,permission:r}=e;if(t===qo.OPERATIONS_ENUM.ADD_ROLE||t===qo.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return je.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?qo.ROLE_TYPES_ENUM.SUPER_USER:qo.ROLE_TYPES_ENUM.CLUSTER_USER;return je.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(d4,"validateNoSUPerms");function f4(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:je.ROLE_PERMS_ERROR,...e};return e4(new Error,s,r4.BAD_REQUEST)}else return null}a(f4,"generateRolePermResponse");function st(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(st,"addPermError")});var Fp=T((nle,nL)=>{"use strict";var tL=xr(),rL=Gr(),E4=bi(),vp=eL(),Bp=cn(),h4=require("uuid").v4,m4=require("util"),x_=y(),p4=$(),Hp=rL.searchByValue,S4=rL.searchByHash,T4=m4.promisify(E4.delete),g4=Bs(),R4=wo(),{hdb_errors:A4,handleHDBError:Go}=j(),{HDB_ERROR_MSGS:sL,HTTP_STATUS_CODES:k_}=A4,{UserEventMsg:qp}=ds();nL.exports={addRole:O4,alterRole:N4,dropRole:b4,listRoles:y4};function Pp(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(Pp,"scrubRoleDetails");async function O4(e){let t=vp.addRoleValidation(e);if(t)throw t;e=Pp(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await Hp(r)||[])}catch(i){throw Go(i)}if(s&&s.length>0)throw Go(new Error,sL.ROLE_ALREADY_EXISTS(e.role),k_.CONFLICT,void 0,void 0,!0);e.id||(e.id=h4());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await tL.insert(n),Bp.signalUserChange(new qp(process.pid)),e=Pp(e),e}a(O4,"addRole");async function N4(e){let t=vp.alterRoleValidation(e);if(t)throw t;e=Pp(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await tL.update(r)}catch(n){throw Go(n)}if(s&&s?.message==="updated 0 of 1 records")throw Go(new Error,"Invalid role id",k_.BAD_REQUEST,void 0,void 0,!0);return await Bp.signalUserChange(new qp(process.pid)),e}a(N4,"alterRole");async function b4(e){let t=vp.dropRoleValidation(e);if(t)throw Go(new Error,t,k_.BAD_REQUEST,void 0,void 0,!0);let r=new R4(x_.SYSTEM_SCHEMA_NAME,x_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await S4(r));if(s.length===0)throw Go(new Error,sL.ROLE_NOT_FOUND,k_.NOT_FOUND,void 0,void 0,!0);let n=new g4(x_.SYSTEM_SCHEMA_NAME,x_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Hp(n)),o=!1;if(p4.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await T4(c),Bp.signalUserChange(new qp(process.pid)),`${s[0].role} successfully deleted`}a(b4,"dropRole");async function y4(){return Hp({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(y4,"listRoles")});var cL=T((ole,aL)=>{"use strict";var I4=X(),Qn=require("joi"),w4=ke(),iL=require("moment"),C4=require("fs-extra"),Gp=require("path"),L4=require("lodash"),vc=y(),{LOG_LEVELS:vi}=y(),D4="YYYY-MM-DD hh:mm:ss",U4=Gp.resolve(__dirname,"../logs");aL.exports=function(e){return w4.validateBySchema(e,M4)};var M4=Qn.object({from:Qn.custom(oL),until:Qn.custom(oL),level:Qn.valid(vi.NOTIFY,vi.FATAL,vi.ERROR,vi.WARN,vi.INFO,vi.DEBUG,vi.TRACE),order:Qn.valid("asc","desc"),limit:Qn.number().min(1),start:Qn.number().min(0),log_name:Qn.custom(P4)});function oL(e,t){if(iL(e,iL.ISO_8601).format(D4)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(oL,"validateDatetime");function P4(e,t){if(L4.invert(vc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=I4.get(vc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?vc.LOG_NAMES.HDB:e,i=n===vc.LOG_NAMES.INSTALL?Gp.join(U4,vc.LOG_NAMES.INSTALL):Gp.join(s,n);return C4.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(P4,"validateReadLogPath")});var kp=T((cle,lL)=>{"use strict";var V_=y(),v4=G(),B4=X(),H4=cL(),xp=require("path"),uL=require("fs-extra"),{once:q4}=require("events"),{handleHDBError:F4,hdb_errors:G4}=j(),{PACKAGE_ROOT:x4}=y(),k4=xp.join(x4,"logs"),V4=1e3,$4=200;lL.exports=Y4;async function Y4(e){let t=H4(e);if(t)throw F4(t,t.message,G4.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=B4.get(V_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?V_.LOG_NAMES.HDB:e.log_name,n=s===V_.LOG_NAMES.INSTALL?xp.join(k4,V_.LOG_NAMES.INSTALL):xp.join(r,s),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?V4: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(uL.statSync(n).size-(h+5)*$4,0));let S=uL.createReadStream(n,{start:p});S.on("error",F=>{v4.error(F)});let R=0,b=[],O="",Y;S.on("data",F=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=O+F;let K=0,B;for(;(B=w.exec(F))&&!S.destroyed;){Y&&(Y.message=F.slice(K,B.index),Q(Y));let[x,te,be]=B,se=be.split("] ["),vt=se[0],Pe=se[1];se.splice(0,2),Y={timestamp:te,thread:vt,level:Pe,tags:se,message:""},K=B.index+x.length}O=F.slice(K)}),S.on("end",F=>{S.destroyed||Y&&(Y.message=O.trim(),Q(Y))}),S.resume();function Q(F){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),F.level===o&&w>=K&&w<=B&&R<E?R++:F.level===o&&w>=K&&w<=B&&(zn(F,f,b),R++,R===h&&S.destroy());break;case(i&&c):w=new Date(F.timestamp),K=new Date(u),F.level===o&&w>=K&&R<E?R++:F.level===o&&w>=K&&(zn(F,f,b),R++,R===h&&S.destroy());break;case(i&&_):w=new Date(F.timestamp),B=new Date(l),F.level===o&&w<=B&&R<E?R++:F.level===o&&w<=B&&(zn(F,f,b),R++,R===h&&S.destroy());break;case(c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&R<E?R++:w>=K&&w<=B&&(zn(F,f,b),R++,R===h&&S.destroy());break;case i:F.level===o&&R<E?R++:F.level===o&&(zn(F,f,b),R++,R===h&&S.destroy());break;case c:w=new Date(F.timestamp),K=new Date(u),w>=K&&R<E?R++:w>=K&&R>=E&&(zn(F,f,b),R++,R===h&&S.destroy());break;case _:w=new Date(F.timestamp),B=new Date(l),w<=B&&R<E?R++:w<=B&&R>=E&&(zn(F,f,b),R++,R===h&&S.destroy());break;default:R<E?R++:(zn(F,f,b),R++,R===h&&S.destroy())}}return a(Q,"onLogMessage"),await q4(S,"close"),b}a(Y4,"readLog");function zn(e,t,r){t==="desc"?K4(e,r):t==="asc"?W4(e,r):r.push(e)}a(zn,"pushLineToResult");function K4(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(K4,"insertDescending");function W4(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(W4,"insertAscending")});var Y_=T((fle,EL)=>{"use strict";var Vp=require("joi"),{string:$_,boolean:_L,date:Q4}=Vp.types(),z4=ke(),{validateSchemaExists:lle,validateTableExists:_le,validateSchemaName:dle}=Ds(),J4=y(),X4=Ve(),dL=X();dL.initSync();var j4=$_.invalid(dL.get(J4.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(X4.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(),fL={operation:$_.valid("add_node","update_node"),node_name:j4,subscriptions:Vp.array().items({table:$_.optional(),schema:$_.required(),subscribe:_L.required(),publish:_L.required().custom(e3),start_time:Q4.iso()}).min(1).required()};function Z4(e){return z4.validateBySchema(e,Vp.object(fL))}a(Z4,"addUpdateNodeValidator");function e3(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(e3,"checkForFalsy");EL.exports={addUpdateNodeValidator:Z4,validation_schema:fL}});var mL=T((hle,hL)=>{var t3=ke(),r3={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};hL.exports=function(e){return t3.validateObject(e,r3)}});var Yp=T((mle,pL)=>{"use strict";var s3=y().OPERATIONS_ENUM,$p=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=s3.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};pL.exports=$p});var TL=T((Sle,SL)=>{"use strict";var n3={OPERATION:"operation",REFRESH:"refresh"},Kp=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Wp=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};SL.exports={JWTTokens:Kp,TOKEN_TYPE_ENUM:n3,JWTRSAKeys:Wp}});var qc=T((gle,OL)=>{"use strict";var Hc=require("jsonwebtoken"),Qp=require("fs-extra"),zp=$(),Yr=y(),{handleHDBError:tr,hdb_errors:i3}=j(),{HTTP_STATUS_CODES:rr,AUTHENTICATION_ERROR_MSGS:sr}=i3,Bc=G(),gL=Zl(),jp=kr(),o3=xr().update,a3=Yp(),c3=cn(),{UserEventMsg:u3}=ds(),Jn=X();Jn.initSync();var Jp=require("path"),{JWTTokens:l3,JWTRSAKeys:_3,TOKEN_TYPE_ENUM:K_}=TL(),d3=Jn.get(Yr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Jn.get(Yr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",f3=Jn.get(Yr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Jn.get(Yr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",W_="RS256",Xp;OL.exports={createTokens:E3,validateOperationToken:m3,refreshOperationToken:h3,validateRefreshToken:AL};async function E3(e){if(zp.isEmpty(e)||typeof e!="object")throw tr(new Error,sr.INVALID_AUTH_OBJECT,rr.BAD_REQUEST,void 0,void 0,!0);if(zp.isEmpty(e.username))throw tr(new Error,sr.USERNAME_REQUIRED,rr.BAD_REQUEST,void 0,void 0,!0);if(zp.isEmpty(e.password))throw tr(new Error,sr.PASSWORD_REQUIRED,rr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await jp.findAndValidateUser(e.username,e.password),!t)throw tr(new Error,sr.INVALID_CREDENTIALS,rr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Bc.error(f),tr(new Error,sr.INVALID_CREDENTIALS,rr.UNAUTHORIZED,void 0,void 0,!0)}let r=await Q_(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await RL(i,r.private_key,r.passphrase),c=await Hc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:f3,algorithm:W_,subject:K_.REFRESH}),u=gL.hash(c),_=new a3(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await o3(_)}catch(f){Bc.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw tr(new Error,sr.REFRESH_TOKEN_SAVE_FAILED,rr.INTERNAL_SERVER_ERROR);return c3.signalUserChange(new u3(process.pid)),new l3(o,c)}a(E3,"createTokens");async function RL(e,t,r){return await Hc.sign(e,{key:t,passphrase:r},{expiresIn:d3,algorithm:W_,subject:K_.OPERATION})}a(RL,"signOperationToken");async function Q_(){if(Xp===void 0)try{let e=Jp.join(Jn.getHdbBasePath(),Yr.LICENSE_KEY_DIR_NAME,Yr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Jp.join(Jn.getHdbBasePath(),Yr.LICENSE_KEY_DIR_NAME,Yr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Jp.join(Jn.getHdbBasePath(),Yr.LICENSE_KEY_DIR_NAME,Yr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Qp.readFile(e)).toString(),n=(await Qp.readFile(t)).toString(),i=(await Qp.readFile(r)).toString();Xp=new _3(i,n,s)}catch(e){throw Bc.error(e),tr(new Error,sr.NO_ENCRYPTION_KEYS,rr.INTERNAL_SERVER_ERROR)}return Xp}a(Q_,"getJWTRSAKeys");async function h3(e){if(!e)throw tr(new Error,sr.INVALID_BODY,rr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw tr(new Error,sr.REFRESH_TOKEN_REQUIRED,rr.BAD_REQUEST,void 0,void 0,!0);await AL(e.refresh_token);let t=await Q_(),r=await Hc.decode(e.refresh_token);return{operation_token:await RL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(h3,"refreshOperationToken");async function m3(e){try{let t=await Q_(),r=await Hc.verify(e,t.public_key,{algorithms:W_,subject:K_.OPERATION});return await jp.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Bc.warn(t),t.name&&t.name==="TokenExpiredError"?tr(new Error,sr.TOKEN_EXPIRED,rr.FORBIDDEN):tr(new Error,sr.INVALID_TOKEN,rr.UNAUTHORIZED)}}a(m3,"validateOperationToken");async function AL(e){let t;try{let r=await Q_(),s=await Hc.verify(e,r.public_key,{algorithms:W_,subject:K_.REFRESH});t=await jp.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Bc.warn(r),r.name&&r.name==="TokenExpiredError"?tr(new Error,sr.TOKEN_EXPIRED,rr.FORBIDDEN):tr(new Error,sr.INVALID_TOKEN,rr.UNAUTHORIZED)}if(!gL.validate(t.refresh_token,e))throw tr(new Error,sr.INVALID_TOKEN,rr.UNAUTHORIZED);return t}a(AL,"validateRefreshToken")});var Zp=T((Ole,yL)=>{"use strict";var p3=mL(),xo=require("passport"),S3=require("passport-local").Strategy,T3=require("passport-http").BasicStrategy,g3=require("util"),R3=kr(),bL=g3.callbackify(R3.findAndValidateUser),Ale=fr(),A3=y(),NL=qc();xo.use(new S3(function(e,t,r){bL(e,t,r)}));xo.use(new T3(function(e,t,r){bL(e,t,r)}));xo.serializeUser(function(e,t){t(null,e)});xo.deserializeUser(function(e,t){t(null,e)});function O3(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":xo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===A3.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?NL.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):NL.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:xo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(O3,"authorize");function N3(e,t){let r=p3(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);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]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(N3,"checkPermissions");yL.exports={authorize:O3,checkPermissions:N3}});var ko=T((ble,IL)=>{"use strict";var eS=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},tS=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};IL.exports={Node:eS,NodeSubscription:tS}});var CL=T((Ile,wL)=>{"use strict";var b3=y().OPERATIONS_ENUM,rS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=b3.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};wL.exports=rS});var Fc=T((Cle,LL)=>{"use strict";var sS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},nS=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};LL.exports={RemotePayloadObject:sS,RemotePayloadSubscription:nS}});var UL=T((Dle,DL)=>{"use strict";var iS=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};DL.exports=iS});var vL=T((Ble,PL)=>{"use strict";var y3=UL(),Mle=ze(),ML=Ue(),I3=G(),{getSchemaPath:Ple,getTransactionAuditStorePath:vle}=ve(),{getDatabases:w3}=(fe(),Z(Ce));PL.exports=C3;async function C3(e){let t=new y3;try{let r=w3()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await ML.environmentDataSize(schema_path,e.name),o=await ML.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){I3.warn(`unable to stat table dbi due to ${r}`)}return t}a(C3,"lmdbGetTableSize")});var HL=T((qle,BL)=>{"use strict";var oS=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};BL.exports=oS});var Vo=T((kle,xL)=>{"use strict";var L3=require("fs-extra"),D3=require("path"),xt=require("systeminformation"),Xn=G(),U3=dt(),aS=Ve(),J_=y(),M3=vL(),GL=gi(),{getThreadInfo:qL}=Je(),pS=X();pS.initSync();var P3=HL(),{openEnvironment:Gle}=Ue(),{getSchemaPath:xle}=ve(),{database:v3}=(fe(),Z(Ce)),z_;xL.exports={getHDBProcessInfo:_S,getNetworkInfo:fS,getDiskInfo:dS,getMemoryInfo:lS,getCPUInfo:uS,getTimeInfo:cS,getSystemInformation:ES,systemInformation:B3,getTableSize:hS,getMetrics:mS};function cS(){return xt.time()}a(cS,"getTimeInfo");async function uS(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await xt.cpu();l.cpu_speed=await xt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:R,...b}=await xt.currentLoad();return b.cpus=[],R.forEach(O=>{let{raw_load:Y,raw_load_idle:Q,raw_load_irq:F,raw_load_nice:w,raw_load_system:K,raw_load_user:B,...x}=O;b.cpus.push(x)}),l.current_load=b,l}catch(e){return Xn.error(`error in getCPUInfo: ${e}`),{}}}a(uS,"getCPUInfo");async function lS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await xt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Xn.error(`error in getMemoryInfo: ${e}`),{}}}a(lS,"getMemoryInfo");async function _S(){let e={core:[],clustering:[]};try{let t=await xt.processes(),r;try{r=Number.parseInt(await L3.readFile(D3.join(pS.get(J_.CONFIG_PARAMS.ROOTPATH),J_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===J_.NODE_ERROR_CODES.ENOENT)Xn.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Xn.error(`error in getHDBProcessInfo: ${t}`),e}}a(_S,"getHDBProcessInfo");async function dS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await xt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await xt.fsStats();return e.read_write=_,e.size=await xt.fsSize(),e}catch(t){return Xn.error(`error in getDiskInfo: ${t}`),e}}a(dS,"getDiskInfo");async function fS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await xt.networkInterfaceDefault(),e.latency=await xt.inetChecksite("google.com"),(await xt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await xt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Xn.error(`error in getNetworkInfo: ${t}`),e}}a(fS,"getNetworkInfo");async function ES(){if(z_!==void 0)return z_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await xt.osInfo();e=c;let u=await xt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,z_=e,z_}catch(t){return Xn.error(`error in getSystemInformation: ${t}`),e}}a(ES,"getSystemInformation");async function hS(){let e=[],t=await GL.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await M3(s));return e}a(hS,"getTableSize");async function mS(){let e=await GL.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=v3({database:r,table:n}),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}}),s[n]=o}catch(i){Xn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(mS,"getMetrics");async function FL(){if(pS.get(J_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await U3.getNATSReferences(),r=await t.streams.info(aS.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(aS.WORK_QUEUE_CONSUMER_NAMES.stream_name,aS.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.config?.sources&&(n.ingest.stream.sources=r.config.sources),n}}a(FL,"getNatsStreamInfo");async function B3(e){let t=new P3;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await ES(),t.time=cS(),t.cpu=await uS(),t.memory=await lS(),t.disk=await dS(),t.network=await fS(),t.harperdb_processes=await _S(),t.table_size=await hS(),t.metrics=await mS(),t.threads=await qL(),t.replication=await FL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await ES();break;case"time":t.time=cS();break;case"cpu":t.cpu=await uS();break;case"memory":t.memory=await lS();break;case"disk":t.disk=await dS();break;case"network":t.network=await fS();break;case"harperdb_processes":t.harperdb_processes=await _S();break;case"table_size":t.table_size=await hS();break;case"database_metrics":case"metrics":t.metrics=await mS();break;case"threads":t.threads=await qL();break;case"replication":t.replication=await FL();break;default:break}return t}a(B3,"systemInformation")});var SS=T(($le,kL)=>{"use strict";kL.exports={version:H3,printVersion:q3};var X_=Nc();function H3(){if(X_)return X_.version}a(H3,"version");function q3(){X_&&console.log(`HarperDB Version ${X_.version}`)}a(q3,"printVersion")});var dn=T((Qle,KL)=>{"use strict";var F3=xr(),TS=$(),G3=require("util"),Bi=y(),VL=X();VL.initSync();var x3=Zp(),$L=Gr(),{Node:Kle,NodeSubscription:Wle}=ko(),k3=wo(),V3=CL(),{RemotePayloadObject:$3,RemotePayloadSubscription:Y3}=Fc(),{handleHDBError:K3,hdb_errors:W3}=j(),{HTTP_STATUS_CODES:Q3,HDB_ERROR_MSGS:z3}=W3,J3=Bs(),X3=Vo(),j3=SS(),{getDatabases:Z3}=(fe(),Z(Ce)),eX=G3.promisify(x3.authorize),tX=$L.searchByHash,rX=$L.searchByValue;KL.exports={authHeaderToUser:sX,isEmpty:nX,getNodeRecord:iX,upsertNodeRecord:oX,buildNodePayloads:aX,checkClusteringEnabled:cX,getAllNodeRecords:uX,getSystemInfo:lX,reverseSubscription:YL};async function sX(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await eX(t,null),e}a(sX,"authHeaderToUser");function nX(e){return e==null}a(nX,"isEmpty");async function iX(e){let t=new k3(Bi.SYSTEM_SCHEMA_NAME,Bi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return tX(t)}a(iX,"getNodeRecord");async function oX(e){let t=new V3(Bi.SYSTEM_SCHEMA_NAME,Bi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return F3.upsert(t)}a(oX,"upsertNodeRecord");function YL(e){if(TS.isEmpty(e.subscribe)||TS.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(YL,"reverseSubscription");function aX(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=TS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=YL(c),E=Z3()[u]?.[_],h=new Y3(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new $3(r,t,n,s)}a(aX,"buildNodePayloads");function cX(){if(!VL.get(Bi.CONFIG_PARAMS.CLUSTERING_ENABLED))throw K3(new Error,z3.CLUSTERING_NOT_ENABLED,Q3.BAD_REQUEST,void 0,void 0,!0)}a(cX,"checkClusteringEnabled");async function uX(){let e=new J3(Bi.SYSTEM_SCHEMA_NAME,Bi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await rX(e))}a(uX,"getAllNodeRecords");async function lX(){let e=await X3.getSystemInformation();return{hdb_version:j3.version(),node_version:e.node_version,platform:e.platform}}a(lX,"getSystemInfo")});var gS=T((Jle,eD)=>{"use strict";var j_=dt(),WL=$(),QL=Ve(),zL=y(),Z_=G(),JL=q_(),_X=Gm(),{RemotePayloadObject:dX}=Fc(),{handleHDBError:XL,hdb_errors:fX}=j(),{HTTP_STATUS_CODES:jL}=fX,{NodeSubscription:ZL}=ko();eD.exports=EX;async function EX(e,t){let r;try{r=await j_.request(`${t}.${QL.REQUEST_SUFFIX}`,new dX(zL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Z_.trace("Response from remote describe all request:",r)}catch(o){Z_.error(`addNode received error from describe all request to remote node: ${o}`);let c=j_.requestErrorHandler(o,"add_node",t);throw XL(new Error,c,jL.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 XL(new Error,o,jL.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===zL.SYSTEM_SCHEMA_NAME){await j_.createLocalTableStream(c,u);let h=new ZL(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=WL.doesSchemaExist(c),l=s[c]!==void 0,d=u?WL.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(Z_.trace(`addNode creating schema: ${c}`),await JL.createSchema({operation:"create_schema",schema:c})),!d&&f){Z_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new _X(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await JL.createTable(h)}await j_.createLocalTableStream(c,u);let E=new ZL(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(EX,"reviewSubscriptions")});var rd=T((jle,sD)=>{"use strict";var{handleHDBError:ed,hdb_errors:hX}=j(),{HTTP_STATUS_CODES:td}=hX,{addUpdateNodeValidator:mX}=Y_(),Gc=G(),rD=y(),tD=Ve(),pX=$(),RS=dt(),xc=dn(),SX=X(),TX=gS(),{Node:gX,NodeSubscription:RX}=ko(),{broadcast:AX}=Je(),OX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",NX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",bX=SX.get(rD.CONFIG_PARAMS.CLUSTERING_NODENAME);sD.exports=yX;async function yX(e,t=!1){Gc.trace("addNode called with:",e),xc.checkClusteringEnabled();let r=mX(e);if(r)throw ed(r,r.message,td.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await xc.getNodeRecord(s);if(!pX.isEmptyOrZeroLength(d))throw ed(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,td.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await TX(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=OX,o;let c=xc.buildNodePayloads(n,bX,rD.OPERATIONS_ENUM.ADD_NODE,await xc.getSystemInfo());Gc.trace("addNode sending remote payload:",c);let u;try{u=await RS.request(`${s}.${tD.REQUEST_SUFFIX}`,c)}catch(d){Gc.error(`addNode received error from request: ${d}`);let f=RS.requestErrorHandler(d,"add_node",s);throw ed(new Error,f,td.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===tD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw ed(new Error,d,td.INTERNAL_SERVER_ERROR,"error",d)}Gc.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];Gc.trace("Add node updating work stream for node:",s,"subscriptions:",E),await RS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new RX(E.schema,E.table,E.publish,E.subscribe))}let l=new gX(s,_,u.system_info);return await xc.upsertNodeRecord(l),AX({type:"nats_update"}),i.length>0?o.message=NX:o.message=`Successfully added '${s}' to manifest`,o}a(yX,"addNode")});var OS=T((e_e,oD)=>{"use strict";var{handleHDBError:sd,hdb_errors:IX}=j(),{HTTP_STATUS_CODES:nd}=IX,{addUpdateNodeValidator:wX}=Y_(),kc=G(),iD=y(),nD=Ve(),CX=$(),AS=dt(),Vc=dn(),LX=X(),{cloneDeep:DX}=require("lodash"),UX=gS(),{NodeSubscription:MX}=ko(),{broadcast:PX}=Je(),vX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",BX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",HX=LX.get(iD.CONFIG_PARAMS.CLUSTERING_NODENAME);oD.exports=qX;async function qX(e){kc.trace("updateNode called with:",e),Vc.checkClusteringEnabled();let t=wX(e);if(t)throw sd(t,t.message,nd.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=DX(await Vc.getNodeRecord(r));if(CX.isEmptyOrZeroLength(s))throw sd(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,nd.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await UX(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=vX,o;let c=Vc.buildNodePayloads(n,HX,iD.OPERATIONS_ENUM.UPDATE_NODE,await Vc.getSystemInfo());kc.trace("updateNode sending remote payload:",c);let u;try{u=await AS.request(`${r}.${nD.REQUEST_SUFFIX}`,c)}catch(_){kc.error(`updateNode received error from request: ${_}`);let l=AS.requestErrorHandler(_,"update_node",r);throw sd(new Error,l,nd.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===nD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw sd(new Error,_,nd.INTERNAL_SERVER_ERROR,"error",_)}kc.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];kc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await AS.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await FX(s[0],n,u.system_info),i.length>0?o.message=BX:o.message=`Successfully updated '${r}'`,o}a(qX,"updateNode");async function FX(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new MX(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Vc.upsertNodeRecord(s),PX({type:"nats_update"})}a(FX,"updateNodeTable")});var _D=T((r_e,lD)=>{"use strict";var uD=require("joi"),{string:aD}=uD.types(),GX=ke(),cD=y(),xX=X(),kX=Ve();lD.exports=VX;function VX(e){let t=aD.invalid(xX.get(cD.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(kX.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=uD.object({operation:aD.valid(cD.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return GX.validateBySchema(e,r)}a(VX,"removeNodeValidator")});var od=T((n_e,pD)=>{"use strict";var{handleHDBError:dD,hdb_errors:$X}=j(),{HTTP_STATUS_CODES:fD}=$X,YX=_D(),$c=G(),ED=dn(),KX=$(),id=y(),hD=Ve(),mD=dt(),WX=X(),{RemotePayloadObject:QX}=Fc(),{NodeSubscription:zX}=ko(),JX=mc(),XX=bi(),{broadcast:jX}=Je(),ZX=WX.get(id.CONFIG_PARAMS.CLUSTERING_NODENAME);pD.exports=ej;async function ej(e){$c.trace("removeNode called with:",e),ED.checkClusteringEnabled();let t=YX(e);if(t)throw dD(t,t.message,fD.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await ED.getNodeRecord(r);if(KX.isEmptyOrZeroLength(s))throw dD(new Error,`Node '${r}' was not found.`,fD.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new QX(id.OPERATIONS_ENUM.REMOVE_NODE,ZX,[]),i,o=!1;try{i=await mD.request(`${r}.${hD.REQUEST_SUFFIX}`,n),$c.trace("Remove node reply from remote node:",r,i)}catch(u){$c.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];$c.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new zX(l.schema,l.table,!1,!1);await mD.updateWorkStream(d,r)}let c=new JX(id.SYSTEM_SCHEMA_NAME,id.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await XX.deleteRecord(c),jX({type:"nats_update"}),i?.status===hD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?($c.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(ej,"removeNode")});var gD=T((o_e,TD)=>{"use strict";var SD=require("joi"),{string:tj,array:rj}=SD.types(),sj=ke(),nj=Y_();TD.exports=ij;function ij(e){let t=SD.object({operation:tj.valid("configure_cluster").required(),connections:rj.items(nj.validation_schema).required()});return sj.validateBySchema(e,t)}a(ij,"configureClusterValidator")});var NS=T((c_e,bD)=>{"use strict";var oj=y(),ad=G(),aj=$(),cj=od(),uj=rd(),RD=dn(),lj=gD(),{handleHDBError:AD,hdb_errors:_j}=j(),{HTTP_STATUS_CODES:OD}=_j,dj="Configure cluster complete.",fj="Failed to configure the cluster. Check the logs for more details.",Ej="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";bD.exports=hj;async function hj(e){ad.trace("configure cluster called with:",e),RD.checkClusteringEnabled();let t=lj(e);if(t)throw AD(t,t.message,OD.BAD_REQUEST,void 0,void 0,!0);let r=await RD.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(ND(cj,{operation:oj.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);ad.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(ND(uj,E,E.node_name))}let c=await Promise.allSettled(i);ad.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(ad.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(aj.isEmptyOrZeroLength(u))return{message:dj,connections:_};if(l)return{message:Ej,failed_nodes:u,connections:_};throw AD(new Error,fj,OD.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(hj,"configureCluster");async function ND(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(ND,"functionWrapper")});var ID=T((l_e,yD)=>{"use strict";var cd=require("joi"),mj=ke(),{validateSchemaExists:pj,validateTableExists:Sj,validateSchemaName:Tj}=Ds(),gj=cd.object({operation:cd.string().valid("purge_stream"),schema:cd.string().custom(pj).custom(Tj).required(),table:cd.string().custom(Sj).required()});function Rj(e){return mj.validateBySchema(e,gj)}a(Rj,"purgeStreamValidator");yD.exports=Rj});var bS=T((d_e,wD)=>{"use strict";var{handleHDBError:Aj,hdb_errors:Oj}=j(),{HTTP_STATUS_CODES:Nj}=Oj,bj=ID(),yj=dt(),Ij=dn();wD.exports=wj;async function wj(e){let t=bj(e);if(t)throw Aj(t,t.message,Nj.BAD_REQUEST,void 0,void 0,!0);Ij.checkClusteringEnabled();let{schema:r,table:s}=e;return await yj.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(wj,"purgeStream")});var wS=T((E_e,PD)=>{"use strict";var IS=dn(),Cj=dt(),DD=X(),ud=y(),Hi=Ve(),Lj=$(),yS=G(),{RemotePayloadObject:Dj}=Fc(),{ErrorCode:CD}=require("nats"),LD=DD.get(ud.CONFIG_PARAMS.CLUSTERING_ENABLED),UD=DD.get(ud.CONFIG_PARAMS.CLUSTERING_NODENAME);PD.exports={clusterStatus:Uj,buildNodeStatus:MD};async function Uj(){let e={node_name:UD,is_enabled:LD,connections:[]};if(!LD)return e;let t=await IS.getAllNodeRecords();if(Lj.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(MD(t[s],e.connections));return await Promise.allSettled(r),e}a(Uj,"clusterStatus");async function MD(e,t){let r=e.name,s=new Dj(ud.OPERATIONS_ENUM.CLUSTER_STATUS,UD,void 0,await IS.getSystemInfo()),n,i,o=Hi.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await Cj.request(Hi.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Hi.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Hi.CLUSTER_STATUS_STATUSES.CLOSED,yS.error(`Error getting node status from ${r} `,n))}catch(u){yS.warn(`Error getting node status from ${r}`,u),u.code===CD.NoResponders?o=Hi.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===CD.Timeout?o=Hi.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Hi.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Mj(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==ud.PRE_4_0_0_VERSION&&await IS.upsertNodeRecord(u)}catch(u){yS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(MD,"buildNodeStatus");function Mj(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(Mj,"NodeStatusObject")});var LS=T((m_e,vD)=>{"use strict";var{handleHDBError:Pj,hdb_errors:vj}=j(),{HTTP_STATUS_CODES:Bj}=vj,Hj=dt(),qj=dn(),CS=$(),ld=require("joi"),Fj=ke(),Gj=2e3,xj=ld.object({timeout:ld.number().min(1),connected_nodes:ld.boolean(),routes:ld.boolean()});vD.exports=kj;async function kj(e){qj.checkClusteringEnabled();let t=Fj.validateBySchema(e,xj);if(t)throw Pj(t,t.message,Bj.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||CS.autoCastBoolean(s),o=n===void 0||CS.autoCastBoolean(n),c={nodes:[]},u=await Hj.getServerList(r??Gj),_={};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:CS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(kj,"clusterNetwork")});var FD=T((S_e,qD)=>{"use strict";var DS=require("joi"),BD=ke(),{route_constraints:HD}=em();qD.exports={setRoutesValidator:Vj,deleteRoutesValidator:$j};function Vj(e){let t=DS.object({server:DS.valid("hub","leaf").required(),routes:HD.required()});return BD.validateBySchema(e,t)}a(Vj,"setRoutesValidator");function $j(e){let t=DS.object({routes:HD.required()});return BD.validateBySchema(e,t)}a($j,"deleteRoutesValidator")});var MS=T((g_e,VD)=>{"use strict";var qi=Rr(),US=$(),_d=y(),GD=FD(),{handleHDBError:xD,hdb_errors:Yj}=j(),{HTTP_STATUS_CODES:kD}=Yj,Kj="cluster routes successfully set",Wj="cluster routes successfully deleted";VD.exports={setRoutes:Qj,getRoutes:zj,deleteRoutes:Jj};function Qj(e){let t=GD.setRoutesValidator(e);if(t)throw xD(t,t.message,kD.BAD_REQUEST,void 0,void 0,!0);let r=qi.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=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=US.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?qi.updateConfigValue(_d.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):qi.updateConfigValue(_d.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:Kj,set:o,skipped:i}}a(Qj,"setRoutes");function zj(){let e=qi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(zj,"getRoutes");function Jj(e){let t=GD.deleteRoutesValidator(e);if(t)throw xD(t,t.message,kD.BAD_REQUEST,void 0,void 0,!0);let r=qi.getClusteringRoutes(),s=r.hub_routes,n=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=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=US.isEmptyOrZeroLength(s)?null:s,qi.updateConfigValue(_d.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=US.isEmptyOrZeroLength(n)?null:n,qi.updateConfigValue(_d.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:Wj,deleted:i,skipped:o}}a(Jj,"deleteRoutes")});var YD=T((A_e,$D)=>{"use strict";var Yc=require("alasql"),Fi=require("recursive-iterator"),Ts=G(),Xj=$(),Kc=y(),PS=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,Zj(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(n=>Kc.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Kc.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Kc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=jj(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(_=>!Kc.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Yc.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function jj(e){return e.filter(t=>t[Kc.PERMS_CRUD_ENUM.READ])}a(jj,"filterReadRestrictedAttrs");function Zj(e,t,r,s,n){eZ(e,t,r,s,n)}a(Zj,"interpretAST");function Wc(e,t,r,s,n){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),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Wc,"addSchemaTableToMap");function eZ(e,t,r,s,n){if(!e){Ts.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Yc.yy.Insert?nZ(e,t,r):e instanceof Yc.yy.Select?tZ(e,t,r,s,n):e instanceof Yc.yy.Update?rZ(e,t,r):e instanceof Yc.yy.Delete?sZ(e,t,r):Ts.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(eZ,"getRecordAttributesAST");function tZ(e,t,r,s,n){if(!e){Ts.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Xj.isEmptyOrZeroLength(i)){Ts.error("No schema specified");return}e.from.forEach(c=>{Wc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Wc(c.table,t,r,s,n)});let o=new Fi(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Ts.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 Fi(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{Ts.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 Fi(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Ts.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 Fi(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Ts.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(tZ,"getSelectAttributes");function rZ(e,t,r){if(!e){Ts.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Fi(e.columns),n=e.table.databaseid;Wc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&vS(e.table.tableid,n,i.columnid,t,r)}a(rZ,"getUpdateAttributes");function sZ(e,t,r){if(!e){Ts.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Fi(e.where),n=e.table.databaseid;Wc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&vS(e.table.tableid,n,i.columnid,t,r)}a(sZ,"getDeleteAttributes");function nZ(e,t,r){if(!e){Ts.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Fi(e.columns),n=e.into.databaseid;Wc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&vS(e.into.tableid,n,i.columnid,t,r)}a(nZ,"getInsertAttributes");function vS(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(vS,"pushAttribute");$D.exports=PS});var qS=T((N_e,zD)=>{var dd=oc(),KD=require("chalk"),Ir=G(),WD=require("prompt"),{promisify:iZ}=require("util"),BS=y(),oZ=require("fs-extra"),aZ=require("path"),cZ=$(),uZ=SS(),QD=X();QD.initSync();var lZ=require("moment"),_Z=iZ(WD.get),dZ=aZ.join(QD.getHdbBasePath(),BS.LICENSE_KEY_DIR_NAME,BS.LICENSE_FILE_NAME,BS.LICENSE_FILE_NAME);zD.exports={getFingerprint:EZ,setLicense:fZ,parseLicense:HS,register:hZ,getRegistrationInfo:pZ};async function fZ(e){if(e&&e.key&&e.company){try{Ir.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await HS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Ir.error(r),Ir.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(fZ,"setLicense");async function EZ(){let e={};try{e=await dd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Ir.error(r),Ir.error(t),new Error(r)}return e}a(EZ,"getFingerprint");async function HS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Ir.info("Validating license input...");let r=dd.validateLicense(e,t);if(Ir.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Ir.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Ir.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Ir.info("writing license to disk"),await oZ.writeFile(dZ,JSON.stringify({license_key:e,company:t}))}catch(s){throw Ir.error("Failed to write License"),s}return"Registration successful."}a(HS,"parseLicense");async function hZ(){let e=await mZ();return HS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(hZ,"register");async function mZ(){let e=await dd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:KD.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:KD.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{WD.start()}catch(s){Ir.error(s)}let r;try{r=await _Z(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(mZ,"promptForRegistration");async function pZ(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await dd.getLicense()}catch(r){throw Ir.error(`There was an error when searching licenses due to: ${r.message}`),r}if(cZ.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=uZ.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=lZ.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(pZ,"getRegistrationInfo")});var XD=T((y_e,JD)=>{"use strict";var SZ=Ve(),FS=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+SZ.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};JD.exports=FS});var eU=T((w_e,ZD)=>{"use strict";var jD=Ve(),GS=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+jD.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+jD.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"}};ZD.exports=GS});var rU=T((L_e,tU)=>{"use strict";var xS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};tU.exports=xS});var nU=T((U_e,sU)=>{"use strict";var TZ=Ve(),kS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+TZ.SERVER_SUFFIX.ADMIN,this.password=r}};sU.exports=kS});var YS=T((P_e,aU)=>{"use strict";var $o=require("path"),hd=require("fs-extra"),gZ=XD(),RZ=eU(),AZ=rU(),OZ=nU(),VS=kr(),Ko=$(),nr=Rr(),Ed=y(),Qc=Ve(),{CONFIG_PARAMS:Ze}=Ed,zc=G(),Jc=X(),iU=on(),$S=dt(),Yo="clustering",NZ=1e4,oU=5;aU.exports={generateNatsConfig:yZ,removeNatsConfig:IZ,getHubConfigPath:bZ};function bZ(){let e=Jc.get(Ze.ROOTPATH);return $o.join(e,Yo,Qc.NATS_CONFIG_FILES.HUB_SERVER)}a(bZ,"getHubConfigPath");async function yZ(e=!1,t=void 0){Jc.initSync();let r=Jc.get(Ze.ROOTPATH),s=$o.join(r,Yo,Qc.PID_FILES.HUB),n=$o.join(r,Yo,Qc.PID_FILES.LEAF),i=nr.getConfigFromFile(Ze.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=$o.join(r,Yo,Qc.NATS_CONFIG_FILES.HUB_SERVER),c=$o.join(r,Yo,Qc.NATS_CONFIG_FILES.LEAF_SERVER),u=nr.getConfigFromFile(Ze.CLUSTERING_TLS_CERTIFICATE),_=nr.getConfigFromFile(Ze.CLUSTERING_TLS_PRIVATEKEY),l=nr.getConfigFromFile(Ze.CLUSTERING_TLS_CERT_AUTH),d=nr.getConfigFromFile(Ze.CLUSTERING_TLS_INSECURE),f=nr.getConfigFromFile(Ze.CLUSTERING_TLS_VERIFY),E=nr.getConfigFromFile(Ze.CLUSTERING_NODENAME),h=nr.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await $S.checkNATSServerInstalled()||md("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await VS.listUsers(),S=nr.getConfigFromFile(Ze.CLUSTERING_USER),R=await VS.getClusterUser();(Ko.isEmpty(R)||R.active!==!0)&&md(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await fd(Ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await fd(Ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await fd(Ze.CLUSTERING_HUBSERVER_NETWORK_PORT),await fd(Ze.CLUSTERING_LEAFSERVER_NETWORK_PORT));let b=[],O=[];for(let[x,te]of p.entries())te.role.role===Ed.ROLE_TYPES_ENUM.CLUSTER_USER&&te.active&&(b.push(new OZ(te.username,iU.decrypt(te.hash))),O.push(new AZ(te.username,iU.decrypt(te.hash))));let Y=[],{hub_routes:Q}=nr.getClusteringRoutes();if(!Ko.isEmptyOrZeroLength(Q))for(let x of Q)Y.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${x.host}:${x.port}`);let F=new gZ(nr.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,nr.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_CLUSTER_NAME),nr.getConfigFromFile(Ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,b,O);l==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=Ko.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Ed.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await hd.writeJson(o,F),zc.trace(`Hub server config written to ${o}`));let w=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new RZ(nr.getConfigFromFile(Ze.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],b,O,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===Ed.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await hd.writeJson(c,B),zc.trace(`Leaf server config written to ${c}`))}a(yZ,"generateNatsConfig");async function fd(e){let t=Jc.get(e);return Ko.isEmpty(t)&&md(`port undefined for '${e}'`),await Ko.isPortTaken(t)&&md(`'${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(fd,"isPortAvailable");function md(e){let t=`Error generating clustering config: ${e}`;zc.error(t),console.error(t),process.exit(1)}a(md,"generateNatsConfigError");async function IZ(e){let{port:t,config_file:r}=$S.getServerConfig(e),{username:s,decrypt_hash:n}=await VS.getClusterUser(),i=0,o=2e3;for(;i<oU;){try{let _=await $S.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){zc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=oU)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 Ko.async_set_timeout(o*(i*2))}let c="0".repeat(NZ),u=$o.join(Jc.get(Ze.ROOTPATH),Yo,r);await hd.writeFile(u,c),await hd.remove(u),zc.notify(e,"started.")}a(IZ,"removeNatsConfig")});var fU=T((B_e,dU)=>{"use strict";var wr=X(),wZ=oc(),ce=y(),Xc=Ve(),fn=require("path"),{PACKAGE_ROOT:Sd}=y(),cU=X(),pd=$(),Wo="/dev/null",CZ=fn.join(Sd,"launchServiceScripts"),uU=fn.join(Sd,"utility/scripts"),LZ=fn.join(uU,ce.HDB_RESTART_SCRIPT),lU=fn.resolve(Sd,"dependencies",`${process.platform}-${process.arch}`,Xc.NATS_BINARY_NAME);function _U(){let t=wZ.licenseSearch().ram_allocation||ce.RAM_ALLOCATION_ENUM.DEFAULT,r=ce.MEM_SETTING_KEY+t,s={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return pd.noBootFile()&&(s[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=pd.getEnvCliRootPath()),{name:ce.PROCESS_DESCRIPTORS.HDB,script:ce.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:Sd}}a(_U,"generateMainServerConfig");var DZ=9930;function UZ(){wr.initSync(!0);let e=wr.get(ce.CONFIG_PARAMS.ROOTPATH),t=fn.join(e,"clustering",Xc.NATS_CONFIG_FILES.HUB_SERVER),r=fn.join(wr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=cU.get(ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Xc.LOG_LEVEL_FLAGS[wr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==DZ?"-"+s:""),script:lU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return wr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Wo,i.error_file=Wo),i}a(UZ,"generateNatsHubServerConfig");var MZ=9940;function PZ(){wr.initSync(!0);let e=wr.get(ce.CONFIG_PARAMS.ROOTPATH),t=fn.join(e,"clustering",Xc.NATS_CONFIG_FILES.LEAF_SERVER),r=fn.join(wr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=cU.get(ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Xc.LOG_LEVEL_FLAGS[wr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==MZ?"-"+s:""),script:lU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return wr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Wo,i.error_file=Wo),i}a(PZ,"generateNatsLeafServerConfig");function vZ(){wr.initSync();let e=fn.join(wr.get(ce.CONFIG_PARAMS.LOGGING_ROOT),ce.LOG_NAMES.HDB),t={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ce.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:CZ,autorestart:!1};return wr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Wo,t.error_file=Wo),t}a(vZ,"generateClusteringUpgradeV4ServiceConfig");function BZ(){let e={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.RESTART_HDB};return pd.noBootFile()&&(e[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=pd.getEnvCliRootPath()),{...{name:ce.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:uU},script:LZ}}a(BZ,"generateRestart");function HZ(){return{apps:[_U()]}}a(HZ,"generateAllServiceConfigs");dU.exports={generateAllServiceConfigs:HZ,generateMainServerConfig:_U,generateRestart:BZ,generateNatsHubServerConfig:UZ,generateNatsLeafServerConfig:PZ,generateClusteringUpgradeV4ServiceConfig:vZ}});var IU=T((F_e,yU)=>{"use strict";var Ae=y(),qZ=$(),En=YS(),jc=dt(),Gs=Ve(),jn=fU(),Td=X(),Zn=G(),FZ=dn(),{startWorker:EU,onMessageFromWorkers:GZ}=Je(),xZ=Vo(),q_e=require("util"),kZ=require("child_process"),VZ=require("fs"),{execFile:$Z}=kZ,pe;yU.exports={enterPM2Mode:YZ,start:ei,stop:KS,reload:mU,restart:pU,list:WS,describe:TU,connect:hn,kill:JZ,startAllServices:XZ,startService:QS,getUniqueServicesList:gU,restartAllServices:jZ,isServiceRegistered:RU,reloadStopStart:AU,restartHdb:SU,deleteProcess:QZ,startClusteringProcesses:NU,startClusteringThreads:bU,isHdbRestartRunning:zZ,isClusteringRunning:e5,stopClustering:ZZ,reloadClustering:t5};var Zc=!1;GZ(e=>{e.type==="restart"&&Td.initSync(!0)});function YZ(){Zc=!0}a(YZ,"enterPM2Mode");function hn(){return pe||(pe=require("pm2")),new Promise((e,t)=>{pe.connect((r,s)=>{Zn.setupConsoleLogging(),r&&t(r),e(s)})})}a(hn,"connect");var ir,KZ=10,hU;function ei(e,t=!1){if(Zc)return WZ(e);let r=$Z(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=ir.indexOf(r);o>-1&&ir.splice(o,1),!hU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<KZ&&(VZ.existsSync(En.getHubConfigPath())?ei(e):(await En.generateNatsConfig(!0),ei(e),await new Promise(c=>setTimeout(c,3e3)),await En.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await En.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=Td.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Gs.LOG_LEVEL_HIERARCHY[o]>=Gs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Gs.LOG_LEVELS.ERR||l===Gs.LOG_LEVELS.WRN?Zn.OUTPUTS.STDERR:Zn.OUTPUTS.STDOUT;Zn.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=Gs.LOG_LEVELS[f]}if(Gs.LOG_LEVEL_HIERARCHY[o]>=Gs.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Gs.LOG_LEVELS.ERR||l===Gs.LOG_LEVELS.WRN?Zn.OUTPUTS.STDERR:Zn.OUTPUTS.STDOUT;Zn.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),ir=[],!ir&&!t){let i=a(()=>{hU=!0,ir&&(ir.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)}ir.push(r)}a(ei,"start");function WZ(e){return new Promise(async(t,r)=>{try{await hn()}catch(s){r(s)}pe.start(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(WZ,"startWithPM2");function KS(e){if(!Zc){for(let t of ir||[])t.name===e&&(ir.splice(ir.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await hn()}catch(s){r(s)}pe.stop(e,async(s,n)=>{s&&(pe.disconnect(),r(s)),pe.delete(e,(i,o)=>{i&&(pe.disconnect(),r(s)),pe.disconnect(),t(o)})})})}a(KS,"stop");function mU(e){return new Promise(async(t,r)=>{try{await hn()}catch(s){r(s)}pe.reload(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(mU,"reload");function pU(e){if(!Zc)for(let t of ir||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await hn()}catch(s){r(s)}pe.restart(e,(s,n)=>{pe.disconnect(),t(n)})})}a(pU,"restart");function QZ(e){return new Promise(async(t,r)=>{try{await hn()}catch(s){r(s)}pe.delete(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(QZ,"deleteProcess");async function SU(){await ei(jn.generateRestart())}a(SU,"restartHdb");async function zZ(){let e=await WS();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(zZ,"isHdbRestartRunning");function WS(){return new Promise(async(e,t)=>{try{await hn()}catch(r){t(r)}pe.list((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(WS,"list");function TU(e){return new Promise(async(t,r)=>{try{await hn()}catch(s){r(s)}pe.describe(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(TU,"describe");function JZ(){if(!Zc){for(let e of ir||[])e.kill();ir=[];return}return new Promise(async(e,t)=>{try{await hn()}catch(r){t(r)}pe.killDaemon((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(JZ,"kill");async function XZ(){try{await NU(),await bU(),await ei(jn.generateAllServiceConfigs())}catch(e){throw pe?.disconnect(),e}}a(XZ,"startAllServices");async function QS(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=jn.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=jn.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=jn.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=jn.generateNatsHubServerConfig(),await ei(r,t),await En.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=jn.generateNatsLeafServerConfig(),await ei(r,t),await En.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=jn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ei(r)}catch(r){throw pe?.disconnect(),r}}a(QS,"startService");async function gU(){try{let e=await WS(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw pe?.disconnect(),e}}a(gU,"getUniqueServicesList");async function jZ(e=[]){try{let t=!1,r=await gU();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ae.PROCESS_DESCRIPTORS.HDB?t=!0:await pU(o))}t&&await AU(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw pe?.disconnect(),t}}a(jZ,"restartAllServices");async function RU(e){if(ir?.find(r=>r.name===e))return!0;let t=await xZ.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(RU,"isServiceRegistered");async function AU(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?Td.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Td.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await TU(e),s=qZ.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await KS(e),await QS(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await SU():await mU(e)}a(AU,"reloadStopStart");var OU;async function NU(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await QS(r,e)}}a(NU,"startClusteringProcesses");async function bU(){OU=EU(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await jc.createWorkQueueStream(Gs.WORK_QUEUE_CONSUMER_NAMES),await jc.updateIngestStreamConsumer(),await jc.updateLocalStreams();let e=await FZ.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){Zn.info("Starting clustering upgrade 4.0.0 process"),EU(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(bU,"startClusteringThreads");async function ZZ(){for(let e in Ae.CLUSTERING_PROCESSES)if(e!==Ae.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ae.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await OU.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await KS(t)}}a(ZZ,"stopClustering");async function e5(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await RU(t)===!1)return!1}return!0}a(e5,"isClusteringRunning");async function t5(){await En.generateNatsConfig(!0),await jc.reloadNATSHub(),await jc.reloadNATSLeaf(),await En.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await En.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(t5,"reloadClustering")});var Od=T((x_e,PU)=>{"use strict";var r5=require("minimist"),{isMainThread:XS,parentPort:LU}=require("worker_threads"),$e=y(),{PROCESS_DESCRIPTORS_VALIDATE:eu}=$e,xs=G(),jS=$(),gd=YS(),Qo=dt(),zS=Ve(),DU=Rr(),ks=IU(),wU=Vo(),s5=pE(),{restartWorkers:Rd,onMessageByType:n5}=Je(),{handleHDBError:i5,hdb_errors:o5}=j(),{HTTP_STATUS_CODES:a5}=o5,Ad=X();Ad.initSync();var tu=`Restarting HarperDB. This may take up to ${$e.RESTART_TIMEOUT_MS/1e3} seconds.`,c5="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",CU="Clustering is not enabled so cannot be restarted",u5="Invalid service",zo,Kr;PU.exports={restart:UU,restartService:ZS};XS&&n5($e.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?ZS({service:e.workerType}):UU({operation:"restart"})});async function UU(e){Kr=Object.keys(e).length===0,zo=await ks.isServiceRegistered($e.HDB_PROC_DESCRIPTOR);let t=r5(process.argv);if(t.service){await ZS(t);return}if(Kr&&!zo){console.error(c5);return}if(Kr&&console.log(tu),zo){ks.enterPM2Mode(),xs.notify(tu);let r=s5(Object.keys($e.CONFIG_PARAM_MAP),!0);return jS.isEmptyOrZeroLength(Object.keys(r))||DU.updateConfigValue(void 0,void 0,r,!0,!0),_5(),tu}return XS?(xs.notify(tu),setTimeout(()=>{Rd()},50)):LU.postMessage({type:$e.ITC_EVENT_TYPES.RESTART}),tu}a(UU,"restart");async function ZS(e){let{service:t}=e;if($e.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw i5(new Error,u5,a5.BAD_REQUEST,void 0,void 0,!0);if(zo=await ks.isServiceRegistered($e.HDB_PROC_DESCRIPTOR),!XS)return LU.postMessage({type:$e.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case eu.clustering:if(!Ad.get($e.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=CU;break}Kr&&console.log("Restarting clustering"),xs.notify("Restarting clustering"),await MU();break;case eu.clustering_config:case eu["clustering config"]:if(!Ad.get($e.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=CU;break}Kr&&console.log("Restarting clustering_config"),xs.notify("Restarting clustering_config"),await ks.reloadClustering();break;case"custom_functions":case"custom functions":case eu.harperdb:case eu.http_workers:if(Kr&&!zo){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}Kr&&console.log("Restarting http_workers"),xs.notify("Restarting http_workers"),Kr?await ks.restart($e.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Rd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(xs.error(r),Kr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(ZS,"restartService");async function l5(){await Qo.publishToStream(`${zS.SUBJECT_PREFIXES.TXN}.${zS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,zS.WORK_QUEUE_CONSUMER_NAMES.stream_name,Qo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(l5,"postDummyNatsMsg");async function _5(){await MU(),await ks.restart($e.HDB_PROC_DESCRIPTOR),await jS.async_set_timeout(2e3),Ad.get($e.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await JS(),Kr&&(await Qo.closeConnection(),process.exit(0))}a(_5,"restartPM2Mode");async function MU(){if(!DU.getConfigFromFile($e.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await wU.getHDBProcessInfo()).clustering.length===0)xs.trace("Clustering not running, restart will start clustering services"),await gd.generateNatsConfig(!0),await ks.startClusteringProcesses(),await ks.startClusteringThreads(),await JS(),Kr&&await Qo.closeConnection();else{await l5(),await gd.generateNatsConfig(!0),zo?(xs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ks.restart($e.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ks.restart($e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await wU.getHDBProcessInfo()).clustering.forEach(n=>{xs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await jS.async_set_timeout(3e3),await JS(),await Qo.updateLocalStreams(),Kr&&await Qo.closeConnection(),xs.trace("Restart clustering restarting ingest and reply service threads");let t=Rd($e.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Rd($e.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(MU,"restartClustering");async function JS(){await gd.removeNatsConfig($e.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await gd.removeNatsConfig($e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(JS,"removeNatsConfig")});var YU=T(($_e,$U)=>{"use strict";var V_e=require("lodash"),or=y(),{handleHDBError:vU,hdb_errors:d5}=j(),{HDB_ERROR_MSGS:f5,HTTP_STATUS_CODES:E5}=d5,eT=G();$U.exports={getRolePermissions:m5};var Gi=Object.create(null),h5=a(e=>({key:e,perms:{}}),"perms_template_obj"),FU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),GU=a((e=!1,t=!1,r=!1,s=!1)=>({[or.PERMS_CRUD_ENUM.READ]:e,[or.PERMS_CRUD_ENUM.INSERT]:t,[or.PERMS_CRUD_ENUM.UPDATE]:r,[or.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),tT=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...GU(t,r,s,n)}),"table_perms_template"),BU=a((e,t=GU())=>({attribute_name:e,describe:VU(t),[ru]:t[ru],[rT]:t[rT],[sT]:t[sT]}),"attr_perms_template"),HU=a((e,t=!1)=>({attribute_name:e,describe:t,[ru]:t}),"timestamp_attr_perms_template"),{READ:ru,INSERT:rT,UPDATE:sT}=or.PERMS_CRUD_ENUM,xU=Object.values(or.PERMS_CRUD_ENUM),kU=[ru,rT,sT];function m5(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[or.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Gi[t]&&Gi[t].key===s)return Gi[t].perms;let n=p5(e,r);return Gi[t]?Gi[t].key=s:Gi[t]=h5(s),Gi[t].perms=n,n}catch(r){if(!e[or.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[or.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<or.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw eT.error(s),eT.debug(r),vU(new Error,f5.OUTDATED_PERMS_TRANSLATION_ERROR,E5.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
9
+ ${r.stack}`;throw eT.error(s),vU(new Error)}}}a(m5,"getRolePermissions");function p5(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[or.SYSTEM_SCHEMA_NAME]=s[or.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=S5(t[i]);return}r[i]=FU(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=T5(c,u);r[i].describe||xU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=tT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=tT()})}),r}a(p5,"translateRolePermissions");function S5(e){let t=FU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=tT(!0,!0,!0,!0,!0)}),t}a(S5,"createStructureUserPermissions");function T5(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return or.TIME_STAMP_NAMES.includes(d)&&(f=HU(d,l[ru])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=BU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=VU(l),n.attribute_permissions.push(l),c||g5(l,u)}else if(_!==o){let l;or.TIME_STAMP_NAMES.includes(_)?l=HU(_):l=BU(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=qU(n),n}else return e.describe=qU(e),e}a(T5,"getTableAttrPerms");function qU(e){return xU.filter(t=>e[t]).length>0}a(qU,"getSchemaTableDescribePerm");function VU(e){return kU.filter(t=>e[t]).length>0}a(VU,"getAttributeDescribePerm");function g5(e,t){kU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(g5,"checkForHashPerms")});var KU={};qe(KU,{Resources:()=>Nd,keyArrayToString:()=>Jo,resetResources:()=>R5,resources:()=>ti});function R5(){return ti=new Nd}function Jo(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Nd,ti,su=Te(()=>{Ei();Nd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)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 s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Ge(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(R5,"resetResources");a(Jo,"keyArrayToString")});var WU={};qe(WU,{Headers:()=>ri});var ri,bd=Te(()=>{ri=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 s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var nu={};qe(nu,{authentication:()=>tM,bypassAuth:()=>w5,login:()=>L5,logout:()=>D5,start:()=>C5});function w5(){eM=!0}async function tM(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?b5?N5:[]:O5?A5:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new ri([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return yd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),yd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(yd){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let p=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,p===-1?n.length:p),_=await zU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new wd.AuthAuditLog(E,h,Ct.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===Ct.AUTH_AUDIT_STATUS.SUCCESS?QU.notify(S):QU.error(S)},"authAuditLog"),d;if(s){if(d=xi.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await ut.getUser(p,S):null;break;case"Bearer":try{d=await(0,Id.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,Id.validateRefreshToken)(h),c({status:-1})}catch{throw R}}break}}catch(R){return I5&&(xi.get(h)||(xi.set(h,h),l(p,Ct.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:si({error:R.message},e)})}xi.set(s,d),y5&&l(d.username,Ct.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await ut.getUser(_.user,null,!1):eM&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,XU.getSuperUser)());yd&&(e.session.update=function(E){if(!u){u=(0,jU.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.id=u,zU.put(E)},e.login=async function(E,h){e.user=await ut.getUser(E,h),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")&&ti.loginPath?(f.status=302,f.headers.set("Location",ti.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 ri);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function C5({server:e,port:t}){e.request(tM,{port:t||"all"}),JU||(JU=!0,setInterval(()=>{xi=new Map},Wr.get(Ct.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),ZU.user.addListener(()=>{xi=new Map}))}async function L5(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 D5(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var XU,Id,jU,Wr,Ct,wd,ZU,QU,A5,O5,N5,b5,zU,yd,eM,y5,I5,xi,JU,Cd=Te(()=>{XU=D(kr());hr();su();Id=D(qc());fe();jU=require("uuid"),Wr=D(X()),Ct=D(y()),wd=D(G()),ZU=D(cc());bd();Xo();QU=(0,wd.loggerWithTag)("auth-event");Wr.initSync();A5=Wr.get(Ct.CONFIG_PARAMS.HTTP_CORSACCESSLIST),O5=Wr.get(Ct.CONFIG_PARAMS.HTTP_CORS),N5=Wr.get(Ct.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),b5=Wr.get(Ct.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),zU=et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),yd=Wr.get(Ct.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,eM=Wr.get(Ct.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,y5=Wr.get(Ct.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,I5=Wr.get(Ct.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,xi=new Map;ut.onInvalidatedUser(()=>{xi=new Map});a(w5,"bypassAuth");a(tM,"authentication");a(C5,"start");a(L5,"login");a(D5,"logout")});var cM=T((tde,aM)=>{"use strict";var Se=require("joi"),rM=require("fs-extra"),sM=require("path"),pn=ke(),nM=X(),iM=y(),oM=G(),{hdb_errors:U5}=j(),{HDB_ERROR_MSGS:kt}=U5,mn=/^[a-zA-Z0-9-_]+$/;aM.exports={getDropCustomFunctionValidator:P5,setCustomFunctionValidator:v5,addComponentValidator:F5,dropCustomFunctionProjectValidator:G5,packageComponentValidator:x5,deployComponentValidator:k5,setComponentFileValidator:B5,getComponentFileValidator:q5,dropComponentFileValidator:H5};function Ld(e,t,r){try{let s=nM.get(iM.CONFIG_PARAMS.COMPONENTSROOT),n=sM.join(s,t);return rM.existsSync(n)?e?t:r.message(kt.PROJECT_EXISTS):e?r.message(kt.NO_PROJECT):t}catch(s){return oM.error(s),r.message(kt.VALIDATION_ERR)}}a(Ld,"checkProjectExists");function iu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(iu,"checkFilePath");function M5(e,t,r,s){try{let n=nM.get(iM.CONFIG_PARAMS.COMPONENTSROOT),i=sM.join(n,e,t,r+".js");return rM.existsSync(i)?r:s.message(kt.NO_FILE)}catch(n){return oM.error(n),s.message(kt.VALIDATION_ERR)}}a(M5,"checkFileExists");function P5(e){let t=Se.object({project:Se.string().pattern(mn).custom(Ld.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().pattern(mn).custom(M5.bind(null,e.project,e.type)).custom(iu).required().messages({"string.pattern.base":kt.BAD_FILE_NAME})});return pn.validateBySchema(e,t)}a(P5,"getDropCustomFunctionValidator");function v5(e){let t=Se.object({project:Se.string().pattern(mn).custom(Ld.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().custom(iu).required(),function_content:Se.string().required()});return pn.validateBySchema(e,t)}a(v5,"setCustomFunctionValidator");function B5(e){let t=Se.object({project:Se.string().pattern(mn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),file:Se.string().custom(iu).required(),payload:Se.string().allow("").optional(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return pn.validateBySchema(e,t)}a(B5,"setComponentFileValidator");function H5(e){let t=Se.object({project:Se.string().pattern(mn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),file:Se.string().custom(iu).optional()});return pn.validateBySchema(e,t)}a(H5,"dropComponentFileValidator");function q5(e){let t=Se.object({project:Se.string().required(),file:Se.string().custom(iu).required(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return pn.validateBySchema(e,t)}a(q5,"getComponentFileValidator");function F5(e){let t=Se.object({project:Se.string().pattern(mn).custom(Ld.bind(null,!1)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME})});return pn.validateBySchema(e,t)}a(F5,"addComponentValidator");function G5(e){let t=Se.object({project:Se.string().pattern(mn).custom(Ld.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME})});return pn.validateBySchema(e,t)}a(G5,"dropCustomFunctionProjectValidator");function x5(e){let t=Se.object({project:Se.string().pattern(mn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),skip_node_modules:Se.boolean()});return pn.validateBySchema(e,t)}a(x5,"packageComponentValidator");function k5(e){let t=Se.object({project:Se.string().pattern(mn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),payload:Se.string().optional().messages({"string.pattern.base":kt.BAD_PACKAGE}),package:Se.string().optional()});return pn.validateBySchema(e,t)}a(k5,"deployComponentValidator")});var Pd=T((sde,hM)=>{"use strict";var Dd=require("joi"),Ud=require("path"),uM=require("fs-extra"),{exec:V5}=require("child_process"),$5=require("util"),lM=$5.promisify(V5),ou=y(),{handleHDBError:jo,hdb_errors:Y5}=j(),{HTTP_STATUS_CODES:Zo}=Y5,au=X(),K5=ke(),ea=G();au.initSync();var nT=au.get(ou.CONFIG_PARAMS.COMPONENTSROOT),_M="npm install --omit=dev --json",W5=`${_M} --dry-run`;hM.exports={installModules:X5,auditModules:j5,installAllRootModules:Q5,uninstallRootModule:z5,linkHarperdb:J5};async function Q5(e=!1){await Md(),await cu(e?"npm install --ignore-scripts":"npm install",au.get(ou.CONFIG_PARAMS.ROOTPATH))}a(Q5,"installAllRootModules");async function z5(e){await cu(`npm uninstall ${e}`,au.get(ou.CONFIG_PARAMS.ROOTPATH))}a(z5,"uninstallRootModule");async function J5(){await Md(),await cu(`npm link ${ou.PACKAGE_ROOT}`,au.get(ou.CONFIG_PARAMS.ROOTPATH))}a(J5,"linkHarperdb");async function cu(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await lM(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
10
10
  `,""))}return s&&!s.includes("Debugger listening")&&ea.error("Error running NPM command:",e,s),ea.trace(r,s),r.replace(`
11
- `,"")}a(cu,"runCommand");async function J5(e){ea.info(`starting installModules for request: ${e}`);let t=EM(e);if(t)throw jo(t,t.message,Zo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?K5:_M;await Md(),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 _=Ud.join(nT,u),l,d=null;try{let{stdout:f,stderr:E}=await lM(n,{cwd:_});l=f?f.replace(`
11
+ `,"")}a(cu,"runCommand");async function X5(e){ea.info(`starting installModules for request: ${e}`);let t=EM(e);if(t)throw jo(t,t.message,Zo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?W5:_M;await Md(),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 _=Ud.join(nT,u),l,d=null;try{let{stdout:f,stderr:E}=await lM(n,{cwd:_});l=f?f.replace(`
12
12
  `,""):null,d=E?E.replace(`
13
- `,""):null}catch(f){f.stderr?i[u].npm_error=dM(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 ea.info(`finished installModules with response ${i}`),i}a(J5,"installModules");function dM(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
14
- `);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(dM,"parseNPMStdErr");async function X5(e){ea.info(`starting auditModules for request: ${e}`);let t=EM(e);if(t)throw jo(t,t.message,Zo.BAD_REQUEST);let{projects:r}=e;await Md(),await fM(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=Ud.join(nT,o);s[o]={npm_output:null,npm_error:null};try{let u=await cu("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=dM(u.stderr)}}return ea.info(`finished auditModules with response ${s}`),s}a(X5,"auditModules");async function Md(){try{return await cu("npm -v"),!0}catch{throw jo(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Zo.BAD_REQUEST,void 0,void 0,!0)}}a(Md,"checkNPMInstalled");async function fM(e){if(!Array.isArray(e)||e.length===0)throw jo(new Error,"projects argument must be an array with at least 1 element",Zo.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=Ud.join(nT,i.toString());if(!await uM.pathExists(o)){t.push(i);continue}let u=Ud.join(o,"package.json");await uM.pathExists(u)||r.push(i)}if(t.length>0)throw jo(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Zo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw jo(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Zo.BAD_REQUEST,void 0,void 0,!0)}a(fM,"checkProjectPaths");function EM(e){let t=Dd.object({projects:Dd.array().min(1).items(Dd.string()).required(),dry_run:Dd.boolean().default(!1)});return Y5.validateBySchema(e,t)}a(EM,"modulesValidator")});var oT=T((ide,gM)=>{"use strict";var ta=require("fs-extra"),iT=require("path"),vd=G(),mM=$(),Bd=y(),TM=X(),j5=gr();gM.exports=Z5;async function Z5(){let e=e8(),t=TM.get(Bd.CONFIG_PARAMS.ROOTPATH),r=iT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Bd.PACKAGE_ROOT}},n=iT.join(t,"node_modules");await ta.ensureDir(n);let i,o=!0,c=!1;try{i=await ta.readJson(r)}catch(u){if(mM.isEmptyOrZeroLength(e))return;if(u.code!==Bd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!mM.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await pM(_);s.dependencies[u]=l+_}if(!o){vd.notify("Installing components"),await SM(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await pM(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(vd.notify("Removing component",u),c=!0);c&&(vd.notify("Updating components."),await SM(r,s,i))}a(Z5,"installComponents");function e8(){let e=j5.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(e8,"getComponentsConfig");async function pM(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":iT.extname(e)||await ta.pathExists(e)?"file:":"github:"}a(pM,"getPkgPrefix");async function SM(e,t,r){vd.trace("npm installing components package.json",t),await ta.writeFile(e,JSON.stringify(t,null," "));try{await Pd().installAllRootModules(TM.get(Bd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await ta.writeFile(e,JSON.stringify(r,null," ")):await ta.unlink(e),s}}a(SM,"installPackages")});var uT=T((cde,NM)=>{"use strict";var Le=require("fs-extra"),aT=require("fast-glob"),le=require("path"),AM=require("tar-fs"),ade=require("uuid").v4,cT=require("normalize-path"),ks=cM(),pt=G(),Me=y(),nt=X(),uu=gr(),t8=$(),{PACKAGE_ROOT:r8}=y(),{handleHDBError:St,hdb_errors:s8}=j(),{basename:n8}=require("path"),i8=oT(),OM=X(),o8=y(),{Readable:a8}=require("stream"),{isMainThread:c8}=require("worker_threads"),{HDB_ERROR_MSGS:ki,HTTP_STATUS_CODES:Tt}=s8,u8=le.join(r8,"application-template"),RM=le.join(nt.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function l8(){pt.trace("getting custom api status");let e={};try{e={port:nt.get(Me.CONFIG_PARAMS.HTTP_PORT),directory:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw St(new Error,ki.FUNCTION_STATUS,Tt.INTERNAL_SERVER_ERROR,pt.ERR,t)}return e}a(l8,"customFunctionsStatus");function _8(){pt.trace("getting custom api endpoints");let e={},t=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT);try{aT.sync(cT(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:aT.sync(cT(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:aT.sync(cT(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw St(new Error,ki.GET_FUNCTIONS,Tt.INTERNAL_SERVER_ERROR,pt.ERR,r)}return e}a(_8,"getCustomFunctions");function d8(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=ks.getDropCustomFunctionValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("getting custom api endpoint file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=le.join(r,s,n,i+".js");try{return Le.readFileSync(o,{encoding:"utf8"})}catch(c){throw St(new Error,ki.GET_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,c)}}a(d8,"getCustomFunction");function f8(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=ks.setCustomFunctionValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("setting custom function file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return Le.outputFileSync(le.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw St(new Error,ki.SET_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,c)}}a(f8,"setCustomFunction");function E8(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=ks.getDropCustomFunctionValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("dropping custom function file");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return Le.unlinkSync(le.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw St(new Error,ki.DROP_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,o)}}a(E8,"dropCustomFunction");function h8(e){e.project&&(e.project=le.parse(e.project).name);let t=ks.addComponentValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("adding component");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=le.join(r,s);return Le.mkdirSync(n,{recursive:!0}),Le.copySync(u8,n),`Successfully added project: ${s}`}catch(n){throw St(new Error,ki.ADD_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,n)}}a(h8,"addComponent");function m8(e){e.project&&(e.project=le.parse(e.project).name);let t=ks.dropCustomFunctionProjectValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("dropping custom function project");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=nt.get(Me.CONFIG_PARAMS.APPS);if(!t8.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return uu.updateConfigValue(Me.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=le.join(r,s);return Le.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw St(new Error,ki.DROP_FUNCTION_PROJECT,Tt.INTERNAL_SERVER_ERROR,pt.ERR,i)}}a(m8,"dropCustomFunctionProject");async function p8(e){e.project&&(e.project=le.parse(e.project).name);let t=ks.packageComponentValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;pt.trace("packaging component",s);let n;try{n=await Le.realpath(le.join(r,s))}catch(u){if(u.code!==Me.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Le.realpath(le.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===Me.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Le.ensureDir(RM);let i=le.join(RM,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(le.join(n,"node_modules"))}),AM.pack(n,o).pipe(Le.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Le.readFileSync(i,{encoding:"base64"});return await Le.remove(i),{project:s,payload:c}}a(p8,"packageComponent");async function S8(e){e.project&&(e.project=le.parse(e.project).name);let t=ks.deployComponentValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(pt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=le.join(r,s),i="file:"+o,await Le.ensureDir(o);let f=a8.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(AM.extract(o,{finish:h})).on("error",p)});let E=await Le.readdir(o);E.length===1&&E[0]==="package"&&(await Le.copy(le.join(o,"package"),o),await Le.remove(le.join(o,"package")))}if(await uu.addConfig(s,{package:i}),!n){await i8();let f=OM.get(o8.CONFIG_PARAMS.ROOTPATH);o=le.join(f,"node_modules",s)}if(c8)return;let c=new Map;c.isWorker=!0;let u=(qd(),Z(Hd)),_;u.setErrorReporter(f=>_=f);let l=n8(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return pt.info("Installed component"),`Successfully deployed: ${s}`}a(S8,"deployComponent");async function T8(){let e=uu.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)=>{let u=await Le.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=le.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Le.stat(d),E={name:le.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c},"walk_dir"),s=await r(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{name:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT).split(le.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(le.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(qd(),Z(Hd)).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 s}a(T8,"getComponents");async function g8(e){let t=ks.getComponentFileValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let s=uu.getConfigObj()[e.project]||e.project==="harperdb"?le.join(OM.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules"):nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Le.stat(le.join(s,e.project,e.file));return{message:await Le.readFile(le.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Me.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${le.join(e.project,e.file)}'`):i}}a(g8,"getComponentFile");async function R8(e){let t=ks.setComponentFileValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=le.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Le.ensureFile(s),await Le.outputFile(s,e.payload,r)):await Le.ensureDir(s),"Successfully set component: "+e.file}a(R8,"setComponentFile");async function A8(e){let t=ks.dropComponentFileValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=e.file?le.join(e.project,e.file):e.project,s=le.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),r);return await Le.pathExists(s)&&await Le.remove(s),uu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(A8,"dropComponent");NM.exports={customFunctionsStatus:l8,getCustomFunctions:_8,getCustomFunction:d8,setCustomFunction:f8,dropCustomFunction:E8,addComponent:h8,dropCustomFunctionProject:m8,packageComponent:p8,deployComponent:S8,getComponents:T8,getComponentFile:g8,setComponentFile:R8,dropComponent:A8}});var lT=T((lde,yM)=>{"use strict";var Vs=require("joi"),bM=ke();yM.exports={readTransactionLogValidator:O8,deleteTransactionLogsBeforeValidator:N8};function O8(e){let t=Vs.object({schema:Vs.string().required(),table:Vs.string().required(),from:Vs.date().timestamp(),to:Vs.date().timestamp(),limit:Vs.number().min(1)});return bM.validateBySchema(e,t)}a(O8,"readTransactionLogValidator");function N8(e){let t=Vs.object({schema:Vs.string().required(),table:Vs.string().required(),timestamp:Vs.date().timestamp().required()});return bM.validateBySchema(e,t)}a(N8,"deleteTransactionLogsBeforeValidator")});var Gd=T((dde,DM)=>{"use strict";var _T=y(),Fd=_t(),IM=$(),wM=X(),CM=nn(),{handleHDBError:ra,hdb_errors:b8}=j(),{HTTP_STATUS_CODES:sa}=b8,{readTransactionLogValidator:y8,deleteTransactionLogsBeforeValidator:I8}=lT(),LM="This operation relies on clustering and cannot run with it disable.",w8="Logs successfully deleted from transaction log.",C8="All logs successfully deleted from transaction log.";DM.exports={readTransactionLog:L8,deleteTransactionLogsBefore:D8};async function*L8(e){let t=y8(e);if(t)throw ra(t,t.message,sa.BAD_REQUEST,void 0,void 0,!0);if(!wM.get(_T.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ra(new Error,LM,sa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=IM.checkSchemaTableExist(r,s);if(n)throw ra(new Error,n,sa.NOT_FOUND,void 0,void 0,!0);let i=CM.createNatsTableStreamName(r,s),o=await Fd.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===_T.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(L8,"readTransactionLog");async function D8(e){let t=I8(e);if(t)throw ra(t,t.message,sa.BAD_REQUEST,void 0,void 0,!0);if(!wM.get(_T.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ra(new Error,LM,sa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=IM.checkSchemaTableExist(r,s);if(i)throw ra(new Error,i,sa.NOT_FOUND,void 0,void 0,!0);let o=CM.createNatsTableStreamName(r,s),{jsm:c}=await Fd.getNATSReferences(),u=await Fd.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=w8,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=C8):d=(await Fd.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(D8,"deleteTransactionLogsBefore")});var MM=T((Ede,UM)=>{"use strict";var dT=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};UM.exports=dT});var vM=T((mde,PM)=>{"use strict";var fT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};PM.exports=fT});var hT=T((Sde,HM)=>{"use strict";var BM=MM(),U8=vM(),{HDB_ERROR_MSGS:M8}=fr(),ET=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=M8.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,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new BM(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new U8(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new BM(r,s,[],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}};HM.exports=ET});var $d=T((gde,ZM)=>{"use strict";var mT=Gr(),xd=Fr(),Qr=q_(),du=gi(),pT=bi(),P8=Lp(),v8=QC(),fu=xr(),kd=Fp(),dt=G(),B8=kp(),H8=rd(),q8=OS(),F8=od(),G8=NS(),x8=bS(),k8=wS(),V8=LS(),ST=MS(),Sn=$(),$8=YD(),TT=qS(),GM=Od(),Wr=y(),xM=YU(),Y8=Vo(),kM=qc(),VM=(Cd(),Z(nu)),$M=gr(),wr=uT(),K8=require("alasql"),YM=Gd(),KM=Pd(),WM=hT(),{handleHDBError:ar,hdb_errors:QM}=j(),{HDB_ERROR_MSGS:Lt,HTTP_STATUS_CODES:lu}=QM,v=new Map,zM="delete",ni="insert",Tn="read",Vi="update",_u="describe",qM=du.describeSchema.name,FM=du.describeTable.name,JM={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},W8="catchup",Q8="handleGetJob",z8="handleGetJobsByStartDate",Vd={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},J8=[Qr.createTable.name,Qr.createAttribute.name,Qr.dropTable.name,Qr.dropAttribute.name],XM={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},q=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};v.set(mT.insert.name,new q(!1,[ni]));v.set(mT.update.name,new q(!1,[Vi]));v.set(mT.upsert.name,new q(!1,[ni,Vi]));v.set(xd.searchByConditions.name,new q(!1,[Tn]));v.set(xd.searchByHash.name,new q(!1,[Tn]));v.set(xd.searchByValue.name,new q(!1,[Tn]));v.set(xd.search.name,new q(!1,[Tn]));v.set(Qr.createSchema.name,new q(!0,[]));v.set(Qr.createTable.name,new q(!0,[]));v.set(Qr.createAttribute.name,new q(!1,[ni]));v.set(Qr.dropSchema.name,new q(!0,[]));v.set(Qr.dropTable.name,new q(!0,[]));v.set(Qr.dropAttribute.name,new q(!0,[]));v.set(du.describeSchema.name,new q(!1,[Tn]));v.set(du.describeTable.name,new q(!1,[Tn]));v.set(pT.deleteRecord.name,new q(!1,[zM]));v.set(fu.addUser.name,new q(!0,[]));v.set(fu.alterUser.name,new q(!0,[]));v.set(fu.dropUser.name,new q(!0,[]));v.set(fu.listUsersExternal.name,new q(!0,[]));v.set(kd.listRoles.name,new q(!0,[]));v.set(kd.addRole.name,new q(!0,[]));v.set(kd.alterRole.name,new q(!0,[]));v.set(kd.dropRole.name,new q(!0,[]));v.set(B8.name,new q(!0,[]));v.set(H8.name,new q(!0,[]));v.set(q8.name,new q(!0,[]));v.set(F8.name,new q(!0,[]));v.set(G8.name,new q(!0,[]));v.set(x8.name,new q(!0,[]));v.set(ST.setRoutes.name,new q(!0,[]));v.set(ST.getRoutes.name,new q(!0,[]));v.set(ST.deleteRoutes.name,new q(!0,[]));v.set($M.setConfiguration.name,new q(!0,[]));v.set(k8.clusterStatus.name,new q(!0,[]));v.set(V8.name,new q(!0,[]));v.set(TT.getFingerprint.name,new q(!0,[]));v.set(TT.setLicense.name,new q(!0,[]));v.set(pT.deleteFilesBefore.name,new q(!0,[]));v.set(pT.deleteAuditLogsBefore.name,new q(!0,[]));v.set(GM.restart.name,new q(!0,[]));v.set(GM.restartService.name,new q(!0,[]));v.set(P8.name,new q(!0,[]));v.set(v8.name,new q(!0,[Tn]));v.set(Y8.systemInformation.name,new q(!0,[]));v.set($M.getConfiguration.name,new q(!0,[]));v.set(YM.readTransactionLog.name,new q(!0,[]));v.set(YM.deleteTransactionLogsBefore.name,new q(!0,[]));v.set(KM.installModules.name,new q(!0,[]));v.set(KM.auditModules.name,new q(!0,[]));v.set(kM.createTokens.name,new q(!1,[]));v.set(kM.refreshOperationToken.name,new q(!1,[]));v.set(VM.login.name,new q(!1,[]));v.set(VM.logout.name,new q(!1,[]));v.set(wr.customFunctionsStatus.name,new q(!0,[]));v.set(wr.getCustomFunctions.name,new q(!0,[]));v.set(wr.getComponents.name,new q(!0,[]));v.set(wr.getComponentFile.name,new q(!0,[]));v.set(wr.setComponentFile.name,new q(!0,[]));v.set(wr.dropComponent.name,new q(!0,[]));v.set(wr.getCustomFunction.name,new q(!0,[]));v.set(wr.setCustomFunction.name,new q(!0,[]));v.set(wr.dropCustomFunction.name,new q(!0,[]));v.set(wr.addComponent.name,new q(!0,[]));v.set(wr.dropCustomFunctionProject.name,new q(!0,[]));v.set(wr.packageComponent.name,new q(!0,[]));v.set(wr.deployComponent.name,new q(!0,[]));v.set(TT.getRegistrationInfo.name,new q(!1,[]));v.set(fu.userInfo.name,new q(!1,[]));v.set(du.describeAll.name,new q(!1,[]));v.set(Q8,new q(!1,[]));v.set(z8,new q(!0,[]));v.set(W8,new q(!0,[]));v.set(Vd.CSV_DATA_LOAD,new q(!1,[ni,Vi]));v.set(Vd.CSV_URL_LOAD,new q(!1,[ni,Vi]));v.set(Vd.CSV_FILE_LOAD,new q(!1,[ni,Vi]));v.set(Vd.IMPORT_FROM_S3,new q(!1,[ni,Vi]));v.set(XM.EXPORT_TO_S3,new q(!0,[]));v.set(XM.EXPORT_LOCAL,new q(!0,[]));v.set(Wr.VALID_SQL_OPS_ENUM.DELETE,new q(!1,[zM]));v.set(Wr.VALID_SQL_OPS_ENUM.SELECT,new q(!1,[Tn]));v.set(Wr.VALID_SQL_OPS_ENUM.INSERT,new q(!1,[ni]));v.set(Wr.VALID_SQL_OPS_ENUM.UPDATE,new q(!1,[Vi]));ZM.exports={verifyPerms:j8,verifyPermsAst:X8,verifyBulkLoadAttributePerms:e6};function X8(e,t,r){if(Sn.isEmptyOrZeroLength(e))throw dt.info("verify_perms_ast has an empty user parameter"),ar(new Error);if(Sn.isEmptyOrZeroLength(t))throw dt.info("verify_perms_ast has an empty user parameter"),ar(new Error);if(Sn.isEmptyOrZeroLength(r))throw dt.info("verify_perms_ast has a null operation parameter"),ar(new Error);try{let s=new WM,n=new $8(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw dt.info("No schemas defined in verifyPermsAst(), will not continue."),ar(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&JM[r])throw ar(new Error,Lt.DROP_SYSTEM,lu.FORBIDDEN);if(c&&!u)return null;let _=xM.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof K8.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=jM(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),p=RT(t.role.permission,f,d[E]);gT(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw ar(s)}}a(X8,"verifyPermsAst");function j8(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw dt.info("null required parameter in verifyPerms"),ar(new Error,Lt.DEFAULT_INVALID_REQUEST,lu.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new WM;if(Sn.isEmptyOrZeroLength(e.hdb_user.role)||Sn.isEmptyOrZeroLength(e.hdb_user.role.permission))return dt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Lt.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(Wr.SYSTEM_SCHEMA_NAME)||n===Wr.SYSTEM_SCHEMA_NAME;if(l&&JM[r])throw ar(new Error,Lt.DROP_SYSTEM,lu.FORBIDDEN);if(u&&!l||_===!0&&(r===Qr.createSchema.name||r===Qr.dropSchema.name))return null;if(J8.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=xM.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===qM||r===FM){if(n===Wr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Lt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===qM&&(!d[n]||!d[n][_u]))return c.handleInvalidItem(Lt.SCHEMA_NOT_FOUND(n));if(r===FM&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][_u]))return c.handleInvalidItem(Lt.TABLE_NOT_FOUND(n,i))}}let f=jM(e.hdb_user,r,o,c,s);if(f)return f;if(v.get(r)&&v.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Wr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[Wr.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(b=>b[Wr.PERMS_CRUD_ENUM.READ]).forEach(b=>{p.push(b.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(R=>R.attribute),e.get_attributes=p)}let E=Z8(e),h=RT(e.hdb_user.role.permission,n,i);return gT(E,h,r,i,n,c,s),c.getPermsResponse()}a(j8,"verifyPerms");function jM(e,t,r,s,n){if(Sn.arrayHasEmptyValues([e,t,r]))throw dt.info("hasPermissions has an invalid parameter"),ar(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||v.get(t).requires_su))return null;if(!v.get(t))throw dt.info(`operation ${t} not found.`),ar(new Error,Lt.OP_NOT_FOUND(t),lu.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return dt.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Lt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][_u]===!1){s.addInvalidItem(Lt.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Lt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[_u]===!1)s.addInvalidItem(Lt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=v.get(t).perms;!Sn.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(dt.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=Lt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw dt.error(E),dt.error(f),ar(QM.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(jM,"hasPermissions");function gT(e,t,r,s,n,i,o){if(!e||!t)throw dt.info("no attributes specified in checkAttributePerms."),ar(new Error);let c=v.get(r).perms;if(!c||c==="")throw dt.info(`no permissions found for ${r} in checkAttributePerms().`),ar(new Error);if(Sn.isEmptyOrZeroLength(t))return dt.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[_u]===!1){i.addInvalidItem(Lt.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(Wr.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Tn)throw ar(new Error,Lt.SYSTEM_TIMESTAMP_PERMS_ERR,lu.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Lt.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(gT,"checkAttributePerms");function Z8(e){let t=new Set;try{if(e.action)return t;if(e.operation===Wr.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 s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){dt.info(r)}return t}a(Z8,"getRecordAttributes");function RT(e,t,r){let s=new Map;if(Sn.isEmpty(e))return dt.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{dt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(RT,"getAttributePermissions");function e6(e,t,r,s,n,i,o){let c=new Set(i),u=RT(e,s,n);gT(c,u,t,n,s,o,r)}a(e6,"verifyBulkLoadAttributePerms")});var Kd=T((Ade,nP)=>{"use strict";nP.exports={evaluateSQL:f6,processAST:sP,convertSQLToAST:rP,checkASTPermissions:tP};var t6=Gr(),eP=require("util"),r6=eP.callbackify(t6.insert),s6=Fr().search,n6=xw().update,i6=eP.callbackify(n6),o6=Vw().convertDelete,ii=require("alasql"),a6=$d(),Yd=G(),c6=b_(),u6=$(),Eu=y(),{hdb_errors:l6,handleHDBError:AT}=j(),{HTTP_STATUS_CODES:OT}=l6;c6(ii);var _6=403,d6="There was a problem performing this insert. Please check the logs and try again.",NT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function f6(e,t){let r=e.parsed_sql_object;if(!r){r=rP(e.sql);let s,n=r.ast.statements[0];if(n instanceof ii.yy.Insert?s=n.into.databaseid:n instanceof ii.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof ii.yy.Update||n instanceof ii.yy.Delete?s=n.table.databaseid:Yd.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof ii.yy.Select)&&u6.isEmptyOrZeroLength(s))return t("No schema specified",null)}sP(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(f6,"evaluateSQL");function tP(e,t){let r;try{r=a6.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(tP,"checkASTPermissions");function rP(e){let t=new NT;if(!e)throw AT(new Error,"The 'sql' parameter is missing from the request body",OT.BAD_REQUEST);try{let r=e.trim(),s=ii.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
15
- `);throw s[1]?AT(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,OT.BAD_REQUEST):AT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",OT.BAD_REQUEST)}return t}a(rP,"convertSQLToAST");function sP(e,t,r){try{let s=E6;if(!e.bypass_auth&&!t.permissions_checked){let i=tP(e,t);if(i&&i.length>0)return r(_6,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Eu.VALID_SQL_OPS_ENUM.SELECT:s=s6,n=t.ast.statements[0];break;case Eu.VALID_SQL_OPS_ENUM.INSERT:s=h6;break;case Eu.VALID_SQL_OPS_ENUM.UPDATE:s=i6;break;case Eu.VALID_SQL_OPS_ENUM.DELETE:s=o6;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(sP,"processAST");function E6(e,t){Yd.info(e),t("unknown sql statement")}a(E6,"nullFunction");function h6({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=m6(i,e.values)}catch(o){return r(o)}r6(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Yd.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(h6,"convertInsert");function m6(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 s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=ii.compile(`SELECT ${n.toString()} AS [${Eu.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Yd.error(r),new Error(d6)}}a(m6,"createDataObjects")});var bT=T((Nde,oP)=>{"use strict";var{S3:p6,GetObjectCommand:S6}=require("@aws-sdk/client-s3");oP.exports={getFileStreamFromS3:T6,getS3AuthObj:iP};async function T6(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await iP(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new S6(r))).Body}a(T6,"getFileStreamFromS3");function iP(e,t,r){return new p6({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(iP,"getS3AuthObj")});var Wd=T((yde,mP)=>{"use strict";var uP=Fr(),g6=Kd(),R6=bT(),{AsyncParser:A6,Transform:O6}=require("json2csv"),mu=require("stream"),Cr=$(),yT=require("fs-extra"),N6=require("path"),zr=G(),{promisify:lP}=require("util"),hu=$(),{handleHDBError:it,hdb_errors:b6}=j(),{HDB_ERROR_MSGS:cr,HTTP_STATUS_CODES:ot}=b6,{streamAsJSON:y6}=YE(),{Upload:I6}=require("@aws-sdk/lib-storage"),aP=["search_by_value","search_by_hash","sql"],cP=["json","csv"],_P="json",dP="csv",w6="Successfully exported JSON locally.",C6="Successfully exported CSV locally.",L6=1e3,D6=uP.searchByHash,U6=uP.searchByValue,M6=lP(g6.evaluateSQL),P6=lP(mu.finished);mP.exports={export_to_s3:q6,export_local:v6,toCsvStream:fP};async function v6(e){zr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=EP(e);if(!Cr.isEmpty(t))throw zr.error(t),it(new Error,t,ot.BAD_REQUEST,void 0,void 0,!0);if(Cr.isEmpty(e.path))throw zr.error(cr.MISSING_VALUE("path")),it(new Error,cr.MISSING_VALUE("path"),ot.BAD_REQUEST,void 0,void 0,!0);let r=(Cr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(N6.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Cr.buildFolderPath(e.path,r);await B6(e.path);let n=await hP(e);return await H6(s,e.format,n)}a(v6,"export_local");async function B6(e){if(zr.trace("in confirmPath"),Cr.isEmptyOrZeroLength(e))throw it(new Error,`Invalid path: ${e}`,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await yT.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,zr.error(s),it(new Error,s,ot.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 zr.error(r),it(new Error,r,ot.BAD_REQUEST,void 0,void 0,!0)}return!0}a(B6,"confirmPath");async function H6(e,t,r){if(zr.trace("in saveToLocal"),hu.isEmptyOrZeroLength(e))throw it(new Error,cr.INVALID_VALUE("file_path"),ot.BAD_REQUEST,void 0,void 0,!0);if(hu.isEmptyOrZeroLength(t))throw it(new Error,cr.INVALID_VALUE("Source format"),ot.BAD_REQUEST,void 0,void 0,!0);if(hu.isEmpty(r))throw it(new Error,cr.NOT_FOUND("Data"),ot.BAD_REQUEST,void 0,void 0,!0);if(t===_P){let s=yT.createWriteStream(e);return y6(r).pipe(s),await P6(s),{message:w6,path:e}}else if(t===dP){let s=yT.createWriteStream(e),n=mu.Readable.from(r),i={},o={objectMode:!0};return await new A6(i,o).fromInput(n).toOutput(s).promise(!1),{message:C6,path:e}}throw it(new Error,cr.INVALID_VALUE("format"),ot.BAD_REQUEST)}a(H6,"saveToLocal");async function q6(e){if(!e.s3||Object.keys(e.s3).length===0)throw it(new Error,cr.MISSING_VALUE("S3 object"),ot.BAD_REQUEST);if(Cr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw it(new Error,cr.MISSING_VALUE("aws_access_key_id"),ot.BAD_REQUEST);if(Cr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw it(new Error,cr.MISSING_VALUE("aws_secret_access_key"),ot.BAD_REQUEST);if(Cr.isEmptyOrZeroLength(e.s3.bucket))throw it(new Error,cr.MISSING_VALUE("bucket"),ot.BAD_REQUEST);if(Cr.isEmptyOrZeroLength(e.s3.key))throw it(new Error,cr.MISSING_VALUE("key"),ot.BAD_REQUEST);if(Cr.isEmptyOrZeroLength(e.s3.region))throw it(new Error,cr.MISSING_VALUE("region"),ot.BAD_REQUEST);let t=EP(e);if(!Cr.isEmpty(t))throw it(new Error,t,ot.BAD_REQUEST);zr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await hP(e)}catch(u){throw zr.error(u),u}let s,n=await R6.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new mu.PassThrough;if(e.format===dP){i=e.s3.key+".csv";let u=fP(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===_P){i=e.s3.key+".json";let u=new mu.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%L6===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw it(new Error,cr.INVALID_VALUE("format"),ot.BAD_REQUEST);return new I6({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(q6,"export_to_s3");function fP(e){let t=mu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new O6(r,s);return t.pipe(n)}a(fP,"toCsvStream");function EP(e){if(zr.trace("in exportCoreValidation"),Cr.isEmpty(e.format))return"format missing";if(cP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${cP.join(", ")}`;let t=e.search_operation.operation;if(Cr.isEmpty(t))return"search_operation.operation missing";if(aP.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${aP.join(", ")}`}a(EP,"exportCoreValidation");async function hP(e){zr.trace("in getRecords");let t,r;if(hu.isEmpty(e.search_operation)||hu.isEmptyOrZeroLength(e.search_operation.operation))throw it(new Error,cr.INVALID_VALUE("Search operation"),ot.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=U6;break;case"search_by_hash":t=D6;break;case"sql":t=M6;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,zr.error(r),it(new Error,r,ot.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(hP,"getRecords")});var NP={};qe(NP,{contentTypes:()=>wT,findBestSerializer:()=>Jd,getDeserializer:()=>na,registerContentHandlers:()=>CT,serialize:()=>Xd,serializeMessage:()=>si});function F6(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function CT(e){e.register(x6,{serializers:[{regex:/^application\/json$/,serializer:Qd.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new $i.EncoderStream(pu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?zd.Readable.from((0,$s.encodeIter)(t,pu)):(0,$s.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,IT.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,$s.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,$i.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Jd(e){let r=(e.headers.asObject||e.headers).accept,s,n=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=Dt.get(_);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Dt.keys()).join(", "))}};s=Dt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function Xd(e,t,r){let s=SP&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=Jd(t);if(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);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,gn.createBrotliCompress)({params:{[gn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?gn.constants.BROTLI_MODE_TEXT:gn.constants.BROTLI_MODE_GENERIC,[gn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>SP?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,gn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function si(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return JSON.stringify(e);let r=t.serialize;if(r)return r(e);let s=Jd(t);return r=t.serialize=s.serializer.serialize,r(e)}function k6(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function na(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Dt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Dt.get(e)?.deserialize||TP(e,s);return o=>k6(o).then(i)}return e&&Dt.get(e)?.deserialize||TP(e,s)}function TP(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return JSON.parse(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function V6(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var Qd,IT,$s,$i,gn,zd,gP,RP,AP,pu,Dt,wT,pP,OP,G6,x6,SP,Xo=Te(()=>{Qd=D(YE()),IT=D(Wd()),$s=require("msgpackr"),$i=require("cbor-x"),gn=require("zlib"),zd=require("stream");hr();gP=require("../../index"),RP=D(X()),AP=D(y()),pu={useRecords:!1,useToJSON:!0},Dt=new Map,wT=Dt;ut.contentTypes=wT;(0,gP._assignPackageExport)("contentTypes",wT);Dt.set("application/json",{serializeStream:Qd.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});pP=new $i.Encoder(pu);Dt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new $i.EncoderStream(pu).end(e)},serialize:pP.encode,deserialize:pP.decode,q:1});Dt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?zd.Readable.from((0,$s.encodeIter)(e,pu)):(0,$s.pack)(e)},serialize:$s.pack,deserialize:$s.unpack,q:.9});Dt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,IT.toCsvStream)(e)},q:.1});Dt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Dt.set("text/event-stream",{serializeStream:function(e){return zd.Readable.from(V6(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+`
13
+ `,""):null}catch(f){f.stderr?i[u].npm_error=dM(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 ea.info(`finished installModules with response ${i}`),i}a(X5,"installModules");function dM(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
14
+ `);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(dM,"parseNPMStdErr");async function j5(e){ea.info(`starting auditModules for request: ${e}`);let t=EM(e);if(t)throw jo(t,t.message,Zo.BAD_REQUEST);let{projects:r}=e;await Md(),await fM(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=Ud.join(nT,o);s[o]={npm_output:null,npm_error:null};try{let u=await cu("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=dM(u.stderr)}}return ea.info(`finished auditModules with response ${s}`),s}a(j5,"auditModules");async function Md(){try{return await cu("npm -v"),!0}catch{throw jo(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Zo.BAD_REQUEST,void 0,void 0,!0)}}a(Md,"checkNPMInstalled");async function fM(e){if(!Array.isArray(e)||e.length===0)throw jo(new Error,"projects argument must be an array with at least 1 element",Zo.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=Ud.join(nT,i.toString());if(!await uM.pathExists(o)){t.push(i);continue}let u=Ud.join(o,"package.json");await uM.pathExists(u)||r.push(i)}if(t.length>0)throw jo(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Zo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw jo(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Zo.BAD_REQUEST,void 0,void 0,!0)}a(fM,"checkProjectPaths");function EM(e){let t=Dd.object({projects:Dd.array().min(1).items(Dd.string()).required(),dry_run:Dd.boolean().default(!1)});return K5.validateBySchema(e,t)}a(EM,"modulesValidator")});var oT=T((ide,gM)=>{"use strict";var ta=require("fs-extra"),iT=require("path"),vd=G(),mM=$(),Bd=y(),TM=X(),Z5=Rr();gM.exports=e8;async function e8(){let e=t8(),t=TM.get(Bd.CONFIG_PARAMS.ROOTPATH),r=iT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Bd.PACKAGE_ROOT}},n=iT.join(t,"node_modules");await ta.ensureDir(n);let i,o=!0,c=!1;try{i=await ta.readJson(r)}catch(u){if(mM.isEmptyOrZeroLength(e))return;if(u.code!==Bd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!mM.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await pM(_);s.dependencies[u]=l+_}if(!o){vd.notify("Installing components"),await SM(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await pM(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(vd.notify("Removing component",u),c=!0);c&&(vd.notify("Updating components."),await SM(r,s,i))}a(e8,"installComponents");function t8(){let e=Z5.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(t8,"getComponentsConfig");async function pM(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":iT.extname(e)||await ta.pathExists(e)?"file:":"github:"}a(pM,"getPkgPrefix");async function SM(e,t,r){vd.trace("npm installing components package.json",t),await ta.writeFile(e,JSON.stringify(t,null," "));try{await Pd().installAllRootModules(TM.get(Bd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await ta.writeFile(e,JSON.stringify(r,null," ")):await ta.unlink(e),s}}a(SM,"installPackages")});var uT=T((cde,NM)=>{"use strict";var Le=require("fs-extra"),aT=require("fast-glob"),le=require("path"),AM=require("tar-fs"),ade=require("uuid").v4,cT=require("normalize-path"),Vs=cM(),St=G(),Me=y(),nt=X(),uu=Rr(),r8=$(),{PACKAGE_ROOT:s8}=y(),{handleHDBError:Tt,hdb_errors:n8}=j(),{basename:i8}=require("path"),o8=oT(),OM=X(),a8=y(),{Readable:c8}=require("stream"),{isMainThread:u8}=require("worker_threads"),{HDB_ERROR_MSGS:ki,HTTP_STATUS_CODES:gt}=n8,l8=le.join(s8,"application-template"),RM=le.join(nt.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function _8(){St.trace("getting custom api status");let e={};try{e={port:nt.get(Me.CONFIG_PARAMS.HTTP_PORT),directory:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Tt(new Error,ki.FUNCTION_STATUS,gt.INTERNAL_SERVER_ERROR,St.ERR,t)}return e}a(_8,"customFunctionsStatus");function d8(){St.trace("getting custom api endpoints");let e={},t=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT);try{aT.sync(cT(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:aT.sync(cT(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:aT.sync(cT(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Tt(new Error,ki.GET_FUNCTIONS,gt.INTERNAL_SERVER_ERROR,St.ERR,r)}return e}a(d8,"getCustomFunctions");function f8(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Vs.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,gt.BAD_REQUEST);St.trace("getting custom api endpoint file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=le.join(r,s,n,i+".js");try{return Le.readFileSync(o,{encoding:"utf8"})}catch(c){throw Tt(new Error,ki.GET_FUNCTION,gt.INTERNAL_SERVER_ERROR,St.ERR,c)}}a(f8,"getCustomFunction");function E8(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Vs.setCustomFunctionValidator(e);if(t)throw Tt(t,t.message,gt.BAD_REQUEST);St.trace("setting custom function file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return Le.outputFileSync(le.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Tt(new Error,ki.SET_FUNCTION,gt.INTERNAL_SERVER_ERROR,St.ERR,c)}}a(E8,"setCustomFunction");function h8(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Vs.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,gt.BAD_REQUEST);St.trace("dropping custom function file");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return Le.unlinkSync(le.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Tt(new Error,ki.DROP_FUNCTION,gt.INTERNAL_SERVER_ERROR,St.ERR,o)}}a(h8,"dropCustomFunction");function m8(e){e.project&&(e.project=le.parse(e.project).name);let t=Vs.addComponentValidator(e);if(t)throw Tt(t,t.message,gt.BAD_REQUEST);St.trace("adding component");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=le.join(r,s);return Le.mkdirSync(n,{recursive:!0}),Le.copySync(l8,n),`Successfully added project: ${s}`}catch(n){throw Tt(new Error,ki.ADD_FUNCTION,gt.INTERNAL_SERVER_ERROR,St.ERR,n)}}a(m8,"addComponent");function p8(e){e.project&&(e.project=le.parse(e.project).name);let t=Vs.dropCustomFunctionProjectValidator(e);if(t)throw Tt(t,t.message,gt.BAD_REQUEST);St.trace("dropping custom function project");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=nt.get(Me.CONFIG_PARAMS.APPS);if(!r8.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return uu.updateConfigValue(Me.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=le.join(r,s);return Le.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw Tt(new Error,ki.DROP_FUNCTION_PROJECT,gt.INTERNAL_SERVER_ERROR,St.ERR,i)}}a(p8,"dropCustomFunctionProject");async function S8(e){e.project&&(e.project=le.parse(e.project).name);let t=Vs.packageComponentValidator(e);if(t)throw Tt(t,t.message,gt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;St.trace("packaging component",s);let n;try{n=await Le.realpath(le.join(r,s))}catch(u){if(u.code!==Me.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Le.realpath(le.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===Me.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Le.ensureDir(RM);let i=le.join(RM,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(le.join(n,"node_modules"))}),AM.pack(n,o).pipe(Le.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Le.readFileSync(i,{encoding:"base64"});return await Le.remove(i),{project:s,payload:c}}a(S8,"packageComponent");async function T8(e){e.project&&(e.project=le.parse(e.project).name);let t=Vs.deployComponentValidator(e);if(t)throw Tt(t,t.message,gt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(St.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=le.join(r,s),i="file:"+o,await Le.ensureDir(o);let f=c8.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(AM.extract(o,{finish:h})).on("error",p)});let E=await Le.readdir(o);E.length===1&&E[0]==="package"&&(await Le.copy(le.join(o,"package"),o),await Le.remove(le.join(o,"package")))}if(await uu.addConfig(s,{package:i}),!n){await o8();let f=OM.get(a8.CONFIG_PARAMS.ROOTPATH);o=le.join(f,"node_modules",s)}if(u8)return;let c=new Map;c.isWorker=!0;let u=(qd(),Z(Hd)),_;u.setErrorReporter(f=>_=f);let l=i8(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return St.info("Installed component"),`Successfully deployed: ${s}`}a(T8,"deployComponent");async function g8(){let e=uu.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)=>{let u=await Le.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=le.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Le.stat(d),E={name:le.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c},"walk_dir"),s=await r(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{name:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT).split(le.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(le.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(qd(),Z(Hd)).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 s}a(g8,"getComponents");async function R8(e){let t=Vs.getComponentFileValidator(e);if(t)throw Tt(t,t.message,gt.BAD_REQUEST);let s=uu.getConfigObj()[e.project]||e.project==="harperdb"?le.join(OM.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules"):nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Le.stat(le.join(s,e.project,e.file));return{message:await Le.readFile(le.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Me.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${le.join(e.project,e.file)}'`):i}}a(R8,"getComponentFile");async function A8(e){let t=Vs.setComponentFileValidator(e);if(t)throw Tt(t,t.message,gt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=le.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Le.ensureFile(s),await Le.outputFile(s,e.payload,r)):await Le.ensureDir(s),"Successfully set component: "+e.file}a(A8,"setComponentFile");async function O8(e){let t=Vs.dropComponentFileValidator(e);if(t)throw Tt(t,t.message,gt.BAD_REQUEST);let r=e.file?le.join(e.project,e.file):e.project,s=le.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),r);return await Le.pathExists(s)&&await Le.remove(s),uu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(O8,"dropComponent");NM.exports={customFunctionsStatus:_8,getCustomFunctions:d8,getCustomFunction:f8,setCustomFunction:E8,dropCustomFunction:h8,addComponent:m8,dropCustomFunctionProject:p8,packageComponent:S8,deployComponent:T8,getComponents:g8,getComponentFile:R8,setComponentFile:A8,dropComponent:O8}});var lT=T((lde,yM)=>{"use strict";var $s=require("joi"),bM=ke();yM.exports={readTransactionLogValidator:N8,deleteTransactionLogsBeforeValidator:b8};function N8(e){let t=$s.object({schema:$s.string().required(),table:$s.string().required(),from:$s.date().timestamp(),to:$s.date().timestamp(),limit:$s.number().min(1)});return bM.validateBySchema(e,t)}a(N8,"readTransactionLogValidator");function b8(e){let t=$s.object({schema:$s.string().required(),table:$s.string().required(),timestamp:$s.date().timestamp().required()});return bM.validateBySchema(e,t)}a(b8,"deleteTransactionLogsBeforeValidator")});var Gd=T((dde,DM)=>{"use strict";var _T=y(),Fd=dt(),IM=$(),wM=X(),CM=on(),{handleHDBError:ra,hdb_errors:y8}=j(),{HTTP_STATUS_CODES:sa}=y8,{readTransactionLogValidator:I8,deleteTransactionLogsBeforeValidator:w8}=lT(),LM="This operation relies on clustering and cannot run with it disable.",C8="Logs successfully deleted from transaction log.",L8="All logs successfully deleted from transaction log.";DM.exports={readTransactionLog:D8,deleteTransactionLogsBefore:U8};async function*D8(e){let t=I8(e);if(t)throw ra(t,t.message,sa.BAD_REQUEST,void 0,void 0,!0);if(!wM.get(_T.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ra(new Error,LM,sa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=IM.checkSchemaTableExist(r,s);if(n)throw ra(new Error,n,sa.NOT_FOUND,void 0,void 0,!0);let i=CM.createNatsTableStreamName(r,s),o=await Fd.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===_T.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(D8,"readTransactionLog");async function U8(e){let t=w8(e);if(t)throw ra(t,t.message,sa.BAD_REQUEST,void 0,void 0,!0);if(!wM.get(_T.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ra(new Error,LM,sa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=IM.checkSchemaTableExist(r,s);if(i)throw ra(new Error,i,sa.NOT_FOUND,void 0,void 0,!0);let o=CM.createNatsTableStreamName(r,s),{jsm:c}=await Fd.getNATSReferences(),u=await Fd.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=C8,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=L8):d=(await Fd.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(U8,"deleteTransactionLogsBefore")});var MM=T((Ede,UM)=>{"use strict";var dT=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};UM.exports=dT});var vM=T((mde,PM)=>{"use strict";var fT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};PM.exports=fT});var hT=T((Sde,HM)=>{"use strict";var BM=MM(),M8=vM(),{HDB_ERROR_MSGS:P8}=fr(),ET=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=P8.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,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new BM(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new M8(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new BM(r,s,[],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}};HM.exports=ET});var $d=T((gde,ZM)=>{"use strict";var mT=xr(),xd=Gr(),zr=q_(),du=gi(),pT=bi(),v8=Lp(),B8=QC(),fu=kr(),kd=Fp(),ft=G(),H8=kp(),q8=rd(),F8=OS(),G8=od(),x8=NS(),k8=bS(),V8=wS(),$8=LS(),ST=MS(),Sn=$(),Y8=YD(),TT=qS(),GM=Od(),Qr=y(),xM=YU(),K8=Vo(),kM=qc(),VM=(Cd(),Z(nu)),$M=Rr(),Cr=uT(),W8=require("alasql"),YM=Gd(),KM=Pd(),WM=hT(),{handleHDBError:ar,hdb_errors:QM}=j(),{HDB_ERROR_MSGS:Lt,HTTP_STATUS_CODES:lu}=QM,v=new Map,zM="delete",ni="insert",Tn="read",Vi="update",_u="describe",qM=du.describeSchema.name,FM=du.describeTable.name,JM={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Q8="catchup",z8="handleGetJob",J8="handleGetJobsByStartDate",Vd={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},X8=[zr.createTable.name,zr.createAttribute.name,zr.dropTable.name,zr.dropAttribute.name],XM={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},q=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};v.set(mT.insert.name,new q(!1,[ni]));v.set(mT.update.name,new q(!1,[Vi]));v.set(mT.upsert.name,new q(!1,[ni,Vi]));v.set(xd.searchByConditions.name,new q(!1,[Tn]));v.set(xd.searchByHash.name,new q(!1,[Tn]));v.set(xd.searchByValue.name,new q(!1,[Tn]));v.set(xd.search.name,new q(!1,[Tn]));v.set(zr.createSchema.name,new q(!0,[]));v.set(zr.createTable.name,new q(!0,[]));v.set(zr.createAttribute.name,new q(!1,[ni]));v.set(zr.dropSchema.name,new q(!0,[]));v.set(zr.dropTable.name,new q(!0,[]));v.set(zr.dropAttribute.name,new q(!0,[]));v.set(du.describeSchema.name,new q(!1,[Tn]));v.set(du.describeTable.name,new q(!1,[Tn]));v.set(pT.deleteRecord.name,new q(!1,[zM]));v.set(fu.addUser.name,new q(!0,[]));v.set(fu.alterUser.name,new q(!0,[]));v.set(fu.dropUser.name,new q(!0,[]));v.set(fu.listUsersExternal.name,new q(!0,[]));v.set(kd.listRoles.name,new q(!0,[]));v.set(kd.addRole.name,new q(!0,[]));v.set(kd.alterRole.name,new q(!0,[]));v.set(kd.dropRole.name,new q(!0,[]));v.set(H8.name,new q(!0,[]));v.set(q8.name,new q(!0,[]));v.set(F8.name,new q(!0,[]));v.set(G8.name,new q(!0,[]));v.set(x8.name,new q(!0,[]));v.set(k8.name,new q(!0,[]));v.set(ST.setRoutes.name,new q(!0,[]));v.set(ST.getRoutes.name,new q(!0,[]));v.set(ST.deleteRoutes.name,new q(!0,[]));v.set($M.setConfiguration.name,new q(!0,[]));v.set(V8.clusterStatus.name,new q(!0,[]));v.set($8.name,new q(!0,[]));v.set(TT.getFingerprint.name,new q(!0,[]));v.set(TT.setLicense.name,new q(!0,[]));v.set(pT.deleteFilesBefore.name,new q(!0,[]));v.set(pT.deleteAuditLogsBefore.name,new q(!0,[]));v.set(GM.restart.name,new q(!0,[]));v.set(GM.restartService.name,new q(!0,[]));v.set(v8.name,new q(!0,[]));v.set(B8.name,new q(!0,[Tn]));v.set(K8.systemInformation.name,new q(!0,[]));v.set($M.getConfiguration.name,new q(!0,[]));v.set(YM.readTransactionLog.name,new q(!0,[]));v.set(YM.deleteTransactionLogsBefore.name,new q(!0,[]));v.set(KM.installModules.name,new q(!0,[]));v.set(KM.auditModules.name,new q(!0,[]));v.set(kM.createTokens.name,new q(!1,[]));v.set(kM.refreshOperationToken.name,new q(!1,[]));v.set(VM.login.name,new q(!1,[]));v.set(VM.logout.name,new q(!1,[]));v.set(Cr.customFunctionsStatus.name,new q(!0,[]));v.set(Cr.getCustomFunctions.name,new q(!0,[]));v.set(Cr.getComponents.name,new q(!0,[]));v.set(Cr.getComponentFile.name,new q(!0,[]));v.set(Cr.setComponentFile.name,new q(!0,[]));v.set(Cr.dropComponent.name,new q(!0,[]));v.set(Cr.getCustomFunction.name,new q(!0,[]));v.set(Cr.setCustomFunction.name,new q(!0,[]));v.set(Cr.dropCustomFunction.name,new q(!0,[]));v.set(Cr.addComponent.name,new q(!0,[]));v.set(Cr.dropCustomFunctionProject.name,new q(!0,[]));v.set(Cr.packageComponent.name,new q(!0,[]));v.set(Cr.deployComponent.name,new q(!0,[]));v.set(TT.getRegistrationInfo.name,new q(!1,[]));v.set(fu.userInfo.name,new q(!1,[]));v.set(du.describeAll.name,new q(!1,[]));v.set(z8,new q(!1,[]));v.set(J8,new q(!0,[]));v.set(Q8,new q(!0,[]));v.set(Vd.CSV_DATA_LOAD,new q(!1,[ni,Vi]));v.set(Vd.CSV_URL_LOAD,new q(!1,[ni,Vi]));v.set(Vd.CSV_FILE_LOAD,new q(!1,[ni,Vi]));v.set(Vd.IMPORT_FROM_S3,new q(!1,[ni,Vi]));v.set(XM.EXPORT_TO_S3,new q(!0,[]));v.set(XM.EXPORT_LOCAL,new q(!0,[]));v.set(Qr.VALID_SQL_OPS_ENUM.DELETE,new q(!1,[zM]));v.set(Qr.VALID_SQL_OPS_ENUM.SELECT,new q(!1,[Tn]));v.set(Qr.VALID_SQL_OPS_ENUM.INSERT,new q(!1,[ni]));v.set(Qr.VALID_SQL_OPS_ENUM.UPDATE,new q(!1,[Vi]));ZM.exports={verifyPerms:Z8,verifyPermsAst:j8,verifyBulkLoadAttributePerms:t6};function j8(e,t,r){if(Sn.isEmptyOrZeroLength(e))throw ft.info("verify_perms_ast has an empty user parameter"),ar(new Error);if(Sn.isEmptyOrZeroLength(t))throw ft.info("verify_perms_ast has an empty user parameter"),ar(new Error);if(Sn.isEmptyOrZeroLength(r))throw ft.info("verify_perms_ast has a null operation parameter"),ar(new Error);try{let s=new WM,n=new Y8(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw ft.info("No schemas defined in verifyPermsAst(), will not continue."),ar(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&JM[r])throw ar(new Error,Lt.DROP_SYSTEM,lu.FORBIDDEN);if(c&&!u)return null;let _=xM.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof W8.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=jM(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),p=RT(t.role.permission,f,d[E]);gT(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw ar(s)}}a(j8,"verifyPermsAst");function Z8(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw ft.info("null required parameter in verifyPerms"),ar(new Error,Lt.DEFAULT_INVALID_REQUEST,lu.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new WM;if(Sn.isEmptyOrZeroLength(e.hdb_user.role)||Sn.isEmptyOrZeroLength(e.hdb_user.role.permission))return ft.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Lt.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(Qr.SYSTEM_SCHEMA_NAME)||n===Qr.SYSTEM_SCHEMA_NAME;if(l&&JM[r])throw ar(new Error,Lt.DROP_SYSTEM,lu.FORBIDDEN);if(u&&!l||_===!0&&(r===zr.createSchema.name||r===zr.dropSchema.name))return null;if(X8.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=xM.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===qM||r===FM){if(n===Qr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Lt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===qM&&(!d[n]||!d[n][_u]))return c.handleInvalidItem(Lt.SCHEMA_NOT_FOUND(n));if(r===FM&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][_u]))return c.handleInvalidItem(Lt.TABLE_NOT_FOUND(n,i))}}let f=jM(e.hdb_user,r,o,c,s);if(f)return f;if(v.get(r)&&v.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Qr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[Qr.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(b=>b[Qr.PERMS_CRUD_ENUM.READ]).forEach(b=>{p.push(b.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(R=>R.attribute),e.get_attributes=p)}let E=e6(e),h=RT(e.hdb_user.role.permission,n,i);return gT(E,h,r,i,n,c,s),c.getPermsResponse()}a(Z8,"verifyPerms");function jM(e,t,r,s,n){if(Sn.arrayHasEmptyValues([e,t,r]))throw ft.info("hasPermissions has an invalid parameter"),ar(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||v.get(t).requires_su))return null;if(!v.get(t))throw ft.info(`operation ${t} not found.`),ar(new Error,Lt.OP_NOT_FOUND(t),lu.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return ft.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Lt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][_u]===!1){s.addInvalidItem(Lt.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Lt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[_u]===!1)s.addInvalidItem(Lt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=v.get(t).perms;!Sn.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(ft.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=Lt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw ft.error(E),ft.error(f),ar(QM.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(jM,"hasPermissions");function gT(e,t,r,s,n,i,o){if(!e||!t)throw ft.info("no attributes specified in checkAttributePerms."),ar(new Error);let c=v.get(r).perms;if(!c||c==="")throw ft.info(`no permissions found for ${r} in checkAttributePerms().`),ar(new Error);if(Sn.isEmptyOrZeroLength(t))return ft.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[_u]===!1){i.addInvalidItem(Lt.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(Qr.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Tn)throw ar(new Error,Lt.SYSTEM_TIMESTAMP_PERMS_ERR,lu.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Lt.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(gT,"checkAttributePerms");function e6(e){let t=new Set;try{if(e.action)return t;if(e.operation===Qr.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 s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){ft.info(r)}return t}a(e6,"getRecordAttributes");function RT(e,t,r){let s=new Map;if(Sn.isEmpty(e))return ft.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{ft.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(RT,"getAttributePermissions");function t6(e,t,r,s,n,i,o){let c=new Set(i),u=RT(e,s,n);gT(c,u,t,n,s,o,r)}a(t6,"verifyBulkLoadAttributePerms")});var Kd=T((Ade,nP)=>{"use strict";nP.exports={evaluateSQL:E6,processAST:sP,convertSQLToAST:rP,checkASTPermissions:tP};var r6=xr(),eP=require("util"),s6=eP.callbackify(r6.insert),n6=Gr().search,i6=xw().update,o6=eP.callbackify(i6),a6=Vw().convertDelete,ii=require("alasql"),c6=$d(),Yd=G(),u6=b_(),l6=$(),Eu=y(),{hdb_errors:_6,handleHDBError:AT}=j(),{HTTP_STATUS_CODES:OT}=_6;u6(ii);var d6=403,f6="There was a problem performing this insert. Please check the logs and try again.",NT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function E6(e,t){let r=e.parsed_sql_object;if(!r){r=rP(e.sql);let s,n=r.ast.statements[0];if(n instanceof ii.yy.Insert?s=n.into.databaseid:n instanceof ii.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof ii.yy.Update||n instanceof ii.yy.Delete?s=n.table.databaseid:Yd.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof ii.yy.Select)&&l6.isEmptyOrZeroLength(s))return t("No schema specified",null)}sP(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(E6,"evaluateSQL");function tP(e,t){let r;try{r=c6.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(tP,"checkASTPermissions");function rP(e){let t=new NT;if(!e)throw AT(new Error,"The 'sql' parameter is missing from the request body",OT.BAD_REQUEST);try{let r=e.trim(),s=ii.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
15
+ `);throw s[1]?AT(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,OT.BAD_REQUEST):AT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",OT.BAD_REQUEST)}return t}a(rP,"convertSQLToAST");function sP(e,t,r){try{let s=h6;if(!e.bypass_auth&&!t.permissions_checked){let i=tP(e,t);if(i&&i.length>0)return r(d6,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Eu.VALID_SQL_OPS_ENUM.SELECT:s=n6,n=t.ast.statements[0];break;case Eu.VALID_SQL_OPS_ENUM.INSERT:s=m6;break;case Eu.VALID_SQL_OPS_ENUM.UPDATE:s=o6;break;case Eu.VALID_SQL_OPS_ENUM.DELETE:s=a6;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(sP,"processAST");function h6(e,t){Yd.info(e),t("unknown sql statement")}a(h6,"nullFunction");function m6({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=p6(i,e.values)}catch(o){return r(o)}s6(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Yd.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(m6,"convertInsert");function p6(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 s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=ii.compile(`SELECT ${n.toString()} AS [${Eu.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Yd.error(r),new Error(f6)}}a(p6,"createDataObjects")});var bT=T((Nde,oP)=>{"use strict";var{S3:S6,GetObjectCommand:T6}=require("@aws-sdk/client-s3");oP.exports={getFileStreamFromS3:g6,getS3AuthObj:iP};async function g6(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await iP(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new T6(r))).Body}a(g6,"getFileStreamFromS3");function iP(e,t,r){return new S6({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(iP,"getS3AuthObj")});var Wd=T((yde,mP)=>{"use strict";var uP=Gr(),R6=Kd(),A6=bT(),{AsyncParser:O6,Transform:N6}=require("json2csv"),mu=require("stream"),Lr=$(),yT=require("fs-extra"),b6=require("path"),Jr=G(),{promisify:lP}=require("util"),hu=$(),{handleHDBError:it,hdb_errors:y6}=j(),{HDB_ERROR_MSGS:cr,HTTP_STATUS_CODES:ot}=y6,{streamAsJSON:I6}=YE(),{Upload:w6}=require("@aws-sdk/lib-storage"),aP=["search_by_value","search_by_hash","sql"],cP=["json","csv"],_P="json",dP="csv",C6="Successfully exported JSON locally.",L6="Successfully exported CSV locally.",D6=1e3,U6=uP.searchByHash,M6=uP.searchByValue,P6=lP(R6.evaluateSQL),v6=lP(mu.finished);mP.exports={export_to_s3:F6,export_local:B6,toCsvStream:fP};async function B6(e){Jr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=EP(e);if(!Lr.isEmpty(t))throw Jr.error(t),it(new Error,t,ot.BAD_REQUEST,void 0,void 0,!0);if(Lr.isEmpty(e.path))throw Jr.error(cr.MISSING_VALUE("path")),it(new Error,cr.MISSING_VALUE("path"),ot.BAD_REQUEST,void 0,void 0,!0);let r=(Lr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(b6.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Lr.buildFolderPath(e.path,r);await H6(e.path);let n=await hP(e);return await q6(s,e.format,n)}a(B6,"export_local");async function H6(e){if(Jr.trace("in confirmPath"),Lr.isEmptyOrZeroLength(e))throw it(new Error,`Invalid path: ${e}`,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await yT.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,Jr.error(s),it(new Error,s,ot.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 Jr.error(r),it(new Error,r,ot.BAD_REQUEST,void 0,void 0,!0)}return!0}a(H6,"confirmPath");async function q6(e,t,r){if(Jr.trace("in saveToLocal"),hu.isEmptyOrZeroLength(e))throw it(new Error,cr.INVALID_VALUE("file_path"),ot.BAD_REQUEST,void 0,void 0,!0);if(hu.isEmptyOrZeroLength(t))throw it(new Error,cr.INVALID_VALUE("Source format"),ot.BAD_REQUEST,void 0,void 0,!0);if(hu.isEmpty(r))throw it(new Error,cr.NOT_FOUND("Data"),ot.BAD_REQUEST,void 0,void 0,!0);if(t===_P){let s=yT.createWriteStream(e);return I6(r).pipe(s),await v6(s),{message:C6,path:e}}else if(t===dP){let s=yT.createWriteStream(e),n=mu.Readable.from(r),i={},o={objectMode:!0};return await new O6(i,o).fromInput(n).toOutput(s).promise(!1),{message:L6,path:e}}throw it(new Error,cr.INVALID_VALUE("format"),ot.BAD_REQUEST)}a(q6,"saveToLocal");async function F6(e){if(!e.s3||Object.keys(e.s3).length===0)throw it(new Error,cr.MISSING_VALUE("S3 object"),ot.BAD_REQUEST);if(Lr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw it(new Error,cr.MISSING_VALUE("aws_access_key_id"),ot.BAD_REQUEST);if(Lr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw it(new Error,cr.MISSING_VALUE("aws_secret_access_key"),ot.BAD_REQUEST);if(Lr.isEmptyOrZeroLength(e.s3.bucket))throw it(new Error,cr.MISSING_VALUE("bucket"),ot.BAD_REQUEST);if(Lr.isEmptyOrZeroLength(e.s3.key))throw it(new Error,cr.MISSING_VALUE("key"),ot.BAD_REQUEST);if(Lr.isEmptyOrZeroLength(e.s3.region))throw it(new Error,cr.MISSING_VALUE("region"),ot.BAD_REQUEST);let t=EP(e);if(!Lr.isEmpty(t))throw it(new Error,t,ot.BAD_REQUEST);Jr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await hP(e)}catch(u){throw Jr.error(u),u}let s,n=await A6.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new mu.PassThrough;if(e.format===dP){i=e.s3.key+".csv";let u=fP(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===_P){i=e.s3.key+".json";let u=new mu.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%D6===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw it(new Error,cr.INVALID_VALUE("format"),ot.BAD_REQUEST);return new w6({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(F6,"export_to_s3");function fP(e){let t=mu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new N6(r,s);return t.pipe(n)}a(fP,"toCsvStream");function EP(e){if(Jr.trace("in exportCoreValidation"),Lr.isEmpty(e.format))return"format missing";if(cP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${cP.join(", ")}`;let t=e.search_operation.operation;if(Lr.isEmpty(t))return"search_operation.operation missing";if(aP.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${aP.join(", ")}`}a(EP,"exportCoreValidation");async function hP(e){Jr.trace("in getRecords");let t,r;if(hu.isEmpty(e.search_operation)||hu.isEmptyOrZeroLength(e.search_operation.operation))throw it(new Error,cr.INVALID_VALUE("Search operation"),ot.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=M6;break;case"search_by_hash":t=U6;break;case"sql":t=P6;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Jr.error(r),it(new Error,r,ot.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(hP,"getRecords")});var NP={};qe(NP,{contentTypes:()=>wT,findBestSerializer:()=>Jd,getDeserializer:()=>na,registerContentHandlers:()=>CT,serialize:()=>Xd,serializeMessage:()=>si});function G6(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function CT(e){e.register(k6,{serializers:[{regex:/^application\/json$/,serializer:Qd.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new $i.EncoderStream(pu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?zd.Readable.from((0,Ys.encodeIter)(t,pu)):(0,Ys.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,IT.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Ys.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,$i.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Jd(e){let r=(e.headers.asObject||e.headers).accept,s,n=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=Dt.get(_);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Dt.keys()).join(", "))}};s=Dt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function Xd(e,t,r){let s=SP&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=Jd(t);if(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);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,gn.createBrotliCompress)({params:{[gn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?gn.constants.BROTLI_MODE_TEXT:gn.constants.BROTLI_MODE_GENERIC,[gn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>SP?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,gn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function si(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return JSON.stringify(e);let r=t.serialize;if(r)return r(e);let s=Jd(t);return r=t.serialize=s.serializer.serialize,r(e)}function V6(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function na(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Dt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Dt.get(e)?.deserialize||TP(e,s);return o=>V6(o).then(i)}return e&&Dt.get(e)?.deserialize||TP(e,s)}function TP(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return JSON.parse(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function $6(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var Qd,IT,Ys,$i,gn,zd,gP,RP,AP,pu,Dt,wT,pP,OP,x6,k6,SP,Xo=Te(()=>{Qd=D(YE()),IT=D(Wd()),Ys=require("msgpackr"),$i=require("cbor-x"),gn=require("zlib"),zd=require("stream");hr();gP=require("../../index"),RP=D(X()),AP=D(y()),pu={useRecords:!1,useToJSON:!0},Dt=new Map,wT=Dt;ut.contentTypes=wT;(0,gP._assignPackageExport)("contentTypes",wT);Dt.set("application/json",{serializeStream:Qd.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});pP=new $i.Encoder(pu);Dt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new $i.EncoderStream(pu).end(e)},serialize:pP.encode,deserialize:pP.decode,q:1});Dt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?zd.Readable.from((0,Ys.encodeIter)(e,pu)):(0,Ys.pack)(e)},serialize:Ys.pack,deserialize:Ys.unpack,q:.9});Dt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,IT.toCsvStream)(e)},q:.1});Dt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Dt.set("text/event-stream",{serializeStream:function(e){return zd.Readable.from($6(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
16
16
  `),e.data){let r=e.data;typeof r=="object"&&(r=JSON.stringify(r)),t+="data: "+r+`
17
17
  `}return e.id&&(t+="id: "+e.id+`
18
18
  `),e.retry&&(t+="retry: "+e.retry+`
@@ -21,13 +21,13 @@
21
21
 
22
22
  `:`data: ${e}
23
23
 
24
- `},q:.8});Dt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});OP={type:"application/json",serializeStream:Qd.streamAsJSON,serialize:JSON.stringify,deserialize:F6,q:.8};Dt.set("*/*",OP);Dt.set("",OP);a(F6,"tryJSONParse");a(CT,"registerContentHandlers");G6=require("fastify-plugin"),x6=G6(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Jd(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Jd,"findBestSerializer");SP=RP.default.get(AP.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Xd,"serialize");a(si,"serializeMessage");a(k6,"streamToBuffer");a(na,"getDeserializer");a(TP,"deserializerUnknownType");a(V6,"transformIterable")});var jd={};qe(jd,{start:()=>K6});async function Y6(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Sl(e);let n=new ri;try{e.responseHeaders=n;let i=e.url.slice(1),o=DT.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let p=_.match(/max-age=(\d+)/)?.[1];p&&(e.expiresAt=p*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await Ge(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=na(r["content-type"],!0)(e.body)}catch(p){throw new Tu.ClientError(p,400)}switch(e.authorize=!0,s){case"GET":case"HEAD":return u.get(c,e);case"POST":return u.post(c,e.data,e);case"PUT":return u.put(c,e.data,e);case"DELETE":return u.delete(c,e);case"PATCH":return u.patch(c,e.data,e);case"OPTIONS":n.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return u.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return u.query(c,e.data,e);case"COPY":return u.copy(c,r.destination,e);case"MOVE":return u.move(c,r.destination,e);case"BREW":throw new Tu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Tu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,LT.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){$6[0]=f;let p=String.fromCharCode(34,(Ut[0]&63)+62,(Ut[0]>>6)+(Ut[1]<<2&63)+62,(Ut[1]>>4)+(Ut[2]<<4&63)+62,(Ut[2]>>2)+62,(Ut[3]&63)+62,(Ut[3]>>6)+(Ut[4]<<2&63)+62,(Ut[4]>>4)+(Ut[5]<<4&63)+62,(Ut[5]>>2)+62,(Ut[6]&63)+62,(Ut[6]>>6)+(Ut[7]<<2&63)+62,34),S=r["if-none-match"];S&&p==S?(l?.onDone&&l.onDone(),d=304,l=void 0):n.setIfNone("ETag",p),LT.lastModified&&n.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let E={status:d,headers:n,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=Xd(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?Yi.warn(i):Yi.info(i):Yi.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=Xd(i.contentType?i:i.toString(),e,o),o}}function K6(e){LT=e,!bP&&(bP=!0,DT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Y6(t,r)}),e.server.ws(async(t,r,s)=>{Su++;let n=new rs;yP||(yP=!0,Ic(l=>{Su>0&&l.push({metric:"ws-connections",connections:Su,byThread:!0})}));let i;t.on("error",l=>{i=!0,Yi.warn(l)});let o;t.on("message",a(function(d){o||(o=na(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{Su--,kr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=DT.getMatch(u);if(kr(!!_,"connection","ws","connect"),!_)t.send(si(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,br(h=>({count:h.count,total:Su}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Ge(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=si(E.value,r);t.send(h),br(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var Yi,Tu,Ut,$6,LT,bP,DT,yP,Su,IP=Te(()=>{Xo();_n();Yi=D(G()),Tu=D(j());Tl();qa();Ei();bd();Ut=new Uint8Array(8),$6=new Float64Array(Ut.buffer,0,1),LT={};a(Y6,"http");Su=0;a(K6,"start")});var UT=T((Hde,wP)=>{var{recordAction:Zd,recordActionBinary:W6}=(_n(),Z(wc)),Q6=require("fastify-plugin"),z6=200;wP.exports=Q6(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.context.config,_,l,d;u.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),Zd(o,"duration",_,d,l),W6(n.raw.statusCode<400,"success",_,d,l);let f=z6;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Zd(performance.now()-c,"transfer",_,d,l),Zd(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Zd(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var BT=T((qde,MP)=>{var nf=require("clone"),of=ke(),J6=$(),rf=y(),X6=G(),ef=require("fs"),MT=require("joi"),{string:sf}=MT.types(),{hdb_errors:j6,handleHDBError:gu}=j(),{HDB_ERROR_MSGS:Z6,HTTP_STATUS_CODES:tf}=j6,{common_validators:ia}=Ls(),CP=1e9,LP=" is required",e9=["insert","update","upsert"],PT={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:e9,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},t9={schema:sf.required(),table:sf.required(),action:sf.valid("insert","update","upsert")},{AWS_ACCESS_KEY:r9,AWS_SECRET:s9,AWS_BUCKET:n9,AWS_FILE_KEY:i9,REGION:o9}=rf.S3_BUCKET_AUTH_KEYS,a9={s3:{presence:!0},[`s3.${r9}`]:{presence:!0,type:"String"},[`s3.${s9}`]:{presence:!0,type:"String"},[`s3.${n9}`]:{presence:!0,type:"String"},[`s3.${i9}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${o9}`]:{presence:!0,type:"String"}},DP=nf(PT);DP.data.presence={message:LP};var UP=nf(PT);UP.file_path.presence={message:LP};var c9=Object.assign(nf(PT),a9),vT=nf(t9);vT.csv_url=sf.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();vT.passthrough_headers=MT.object();function u9(e){let t=of.validateObject(e,DP);return af(e,t)}a(u9,"dataObject");function l9(e){let t=of.validateBySchema(e,MT.object(vT));return af(e,t)}a(l9,"urlObject");function _9(e){let t=of.validateObject(e,UP);return af(e,t)}a(_9,"fileObject");function d9(e){let t=of.validateObject(e,c9);return af(e,t)}a(d9,"s3FileObject");function af(e,t){if(!t){let r=J6.checkGlobalSchemaTable(e.schema,e.table);if(r)return gu(new Error,r,tf.BAD_REQUEST);if(e.operation===rf.OPERATIONS_ENUM.CSV_FILE_LOAD){try{ef.accessSync(e.file_path,ef.constants.R_OK|ef.constants.F_OK)}catch(s){return s.code===rf.NODE_ERROR_CODES.ENOENT?gu(s,`No such file or directory ${s.path}`,tf.BAD_REQUEST):s.code===rf.NODE_ERROR_CODES.EACCES?gu(s,`Permission denied ${s.path}`,tf.BAD_REQUEST):gu(s)}try{let s=ef.statSync(e.file_path).size;if(s>CP)return gu(new Error,Z6.MAX_FILE_SIZE_ERR(s,CP),tf.BAD_REQUEST)}catch(s){X6.error(s),console.error(s)}}}return t}a(af,"postValidateChecks");MP.exports={dataObject:u9,urlObject:l9,fileObject:_9,s3FileObject:d9}});var HT=T((Gde,PP)=>{"use strict";var Ru=G(),cf=y();async function f9(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===cf.OPERATIONS_ENUM.INSERT||t.operation===cf.OPERATIONS_ENUM.UPDATE||t.operation===cf.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===cf.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Ru.info(i.message),i):i.http_resp_msg?(Ru.error(`Error calling operation: ${e.name}`),Ru.error(i.http_resp_msg),i):(Ru.error(`Error calling operation: ${e.name}`),Ru.error(i),i)}}a(f9,"callOperationFunctionAsAwait");PP.exports={callOperationFunctionAsAwait:f9}});var BP=T((kde,vP)=>{"use strict";var qT=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},FT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};vP.exports={BulkLoadFileObject:qT,BulkLoadDataObject:FT}});var qP=T(($de,HP)=>{"use strict";var GT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};HP.exports=GT});var KT=T((Jde,tv)=>{"use strict";var uf=Gr(),_f=BT(),E9=require("needle"),Ts=y(),Kde=Ve(),oa=$(),{handleHDBError:Ye,hdb_errors:WP}=j(),{HTTP_STATUS_CODES:Mt,HDB_ERROR_MSGS:ft,CHECK_LOGS_WRAPPER:Wi}=WP,aa=G(),xT=require("papaparse");oa.promisifyPapaParse();var gs=require("fs-extra"),h9=require("path"),{chain:FP}=require("stream-chain"),GP=require("stream-json/streamers/StreamArray"),xP=require("stream-json/utils/Batch"),kP=require("stream-chain/utils/comp"),{finished:VP}=require("stream"),m9=X(),QP=HT(),p9=bT(),{BulkLoadFileObject:VT,BulkLoadDataObject:S9}=BP(),$T=hT(),{verifyBulkLoadAttributePerms:zP}=$d(),Wde=qP(),Qde=_t(),zde=nn(),{databases:T9}=(fe(),Z(Ce)),{coerceType:g9}=(df(),Z(WT)),$P="No records parsed from csv file.",Ki=`${m9.get("HDB_ROOT")}/tmp`,{schema_regex:R9}=Ls(),YP=1024*1024*2,KP=5e3,A9={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};tv.exports={csvDataLoad:O9,csvURLLoad:N9,csvFileLoad:b9,importFromS3:y9};async function O9(e,t){let r=_f.dataObject(e);if(r)throw Ye(r,r.message,Mt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=jP(e.schema,e.table),i=xT.parse(e.data,{header:!0,skipEmptyLines:!0,transform:kT.bind(null,n),dynamicTyping:!1}),o=new $T;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&zP(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 Ye(new Error,c,Mt.BAD_REQUEST,void 0,void 0,!0);let u=new S9(e.action,e.schema,e.table,i.data);return s=await QP.callOperationFunctionAsAwait(ZP,u,null),s.message===$P?$P:ev(s.records,s.number_written)}catch(n){throw Qi(n)}}a(O9,"csvDataLoad");async function N9(e){let t=_f.urlObject(e);if(t)throw Ye(t,t.message,Mt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Ki}/${r}`;try{await I9(e,r)}catch(n){throw aa.error(ft.DOWNLOAD_FILE_ERR(r)+" - "+n),Ye(n,Wi(ft.DOWNLOAD_FILE_ERR(r)))}try{let n=new VT(this.job_operation_function.name,e.action,e.schema,e.table,s,Ts.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await YT(n);return await lf(s),i}catch(n){throw await lf(s),Qi(n)}}a(N9,"csvURLLoad");async function b9(e){let t=_f.fileObject(e);if(t)throw Ye(t,t.message,Mt.BAD_REQUEST,void 0,void 0,!0);let r=new VT(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ts.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await YT(r)}catch(s){throw Qi(s)}}a(b9,"csvFileLoad");async function y9(e){let t=_f.s3FileObject(e);if(t)throw Ye(t,t.message,Mt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=h9.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Ki}/${n}`;let i=new VT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await w9(n,e);let o=await YT(i);return await lf(r),o}catch(s){throw await lf(r),Qi(s)}}a(y9,"importFromS3");async function I9(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await E9("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw Ye(s,n,s.statusCode,Ts.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}L9(r,e.csv_url),await C9(t,r.raw)}a(I9,"downloadCSVFile");async function w9(e,t){try{let r=`${Ki}/${e}`;await gs.mkdirp(Ki),await gs.writeFile(`${Ki}/${e}`,"",{flag:"a+"});let s=await gs.createWriteStream(r),n=await p9.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){aa.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw aa.error(ft.S3_DOWNLOAD_ERR+" - "+r),Ye(r,Wi(ft.S3_DOWNLOAD_ERR))}}a(w9,"downloadFileFromS3");async function C9(e,t){try{await gs.mkdirp(Ki),await gs.writeFile(`${Ki}/${e}`,t)}catch(r){throw aa.error(ft.WRITE_TEMP_FILE_ERR),Ye(r,Wi(ft.DEFAULT_BULK_LOAD_ERR))}}a(C9,"writeFileToTempFolder");async function lf(e){if(e)try{await gs.access(e),await gs.unlink(e)}catch{aa.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(lf,"deleteTempFile");function L9(e,t){if(e.statusCode!==WP.HTTP_STATUS_CODES.OK)throw Ye(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Mt.BAD_REQUEST);if(!A9[e.headers["content-type"]])throw Ye(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Mt.BAD_REQUEST);if(!e.raw)throw Ye(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Mt.BAD_REQUEST)}a(L9,"validateURLResponse");async function YT(e){try{let t;switch(e.file_type){case Ts.VALID_S3_FILE_TYPES.CSV:t=await D9(e);break;case Ts.VALID_S3_FILE_TYPES.JSON:t=await U9(e);break;default:throw Ye(new Error,ft.DEFAULT_BULK_LOAD_ERR,Mt.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,ft.INVALID_FILE_EXT_ERR(e))}return ev(t.records,t.number_written)}catch(t){throw Qi(t)}}a(YT,"fileLoad");async function JP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await uf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&zP(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=Ye(c);r(u)}}a(JP,"validateChunk");async function XP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;oa.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!oa.isEmpty(c)&&!oa.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 QP.callOperationFunctionAsAwait(ZP,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Ye(c,Wi(ft.INSERT_CSV_ERR),Mt.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ft.INSERT_CSV_ERR+" - "+c);r(u)}}a(XP,"insertChunk");async function D9(e){let t={records:0,number_written:0},r=jP(e.schema,e.table);try{let s=new $T,n=gs.createReadStream(e.file_path,{highWaterMark:YP});n.setEncoding("utf8"),await xT.parsePromise(n,JP.bind(null,e,s),kT.bind(null,r));let i=s.getPermsResponse();if(i)throw Ye(new Error,i,Mt.BAD_REQUEST);return n=gs.createReadStream(e.file_path,{highWaterMark:YP}),n.setEncoding("utf8"),await xT.parsePromise(n,XP.bind(null,e,t),kT.bind(null,r)),n.destroy(),t}catch(s){throw Ye(s,Wi(ft.PAPA_PARSE_ERR),Mt.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ft.PAPA_PARSE_ERR+s)}}a(D9,"callPapaParse");function jP(e,t){let r=T9[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>g9(i,n));return s}a(jP,"createTransformMap");function kT(e,t,r){let s=e.get(r);return s?s(t):oa.autoCast(t)}a(kT,"typeFunction");async function U9(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new $T,n=FP([gs.createReadStream(e.file_path,{encoding:"utf-8"}),GP.withParser(),c=>c.value,new xP({batchSize:KP}),kP(async c=>{await JP(e,s,r,c)})]);await new Promise((c,u)=>{VP(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Ye(new Error,i,Mt.BAD_REQUEST);let o=FP([gs.createReadStream(e.file_path,{encoding:"utf-8"}),GP.withParser(),c=>c.value,new xP({batchSize:KP}),kP(async c=>{await XP(e,t,r,c)})]);return await new Promise((c,u)=>{VP(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw Ye(s,Wi(ft.INSERT_JSON_ERR),Mt.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ft.INSERT_JSON_ERR+s)}}a(U9,"insertJson");async function ZP(e){let t={};try{e.data&&e.data.length>0&&M9(e.data[0])?t=await P9(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",aa.info(t.message))}catch(r){throw Qi(r)}return t}a(ZP,"callBulkFileLoad");function M9(e){let t=Object.keys(e);for(let r of t)if(!R9.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(M9,"validateColumnNames");async function P9(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=uf.insert;break;case"update":i=uf.update;break;case"upsert":i=uf.upsert;break;default:throw Ye(new Error,ft.INVALID_ACTION_PARAM_ERR(s),Mt.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,ft.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){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=oa.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Qi(o)}}a(P9,"bulkFileLoad");function ev(e,t){return`successfully loaded ${t} of ${e} records`}a(ev,"buildResponseMsg");function Qi(e){return Ye(e,Wi(ft.DEFAULT_BULK_LOAD_ERR),Mt.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ft.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Qi,"buildTopLevelErrMsg")});var sv=T((jde,rv)=>{"use strict";var QT=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};rv.exports=QT});var ov=T((efe,iv)=>{"use strict";var v9=y(),nv=require("moment"),B9=require("uuid").v4,zT=class{static{a(this,"JobObject")}constructor(){this.id=B9(),this.type=void 0,this.start_datetime=nv().valueOf(),this.created_datetime=nv().valueOf(),this.end_datetime=void 0,this.status=v9.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};iv.exports=zT});var JT=T((rfe,dv)=>{"use strict";var H9=require("uuid").v4,uv=Gr(),lv=Fr(),q9=vs(),F9=wo(),G9=sv(),Ke=y(),x9=ov(),k9=Yp(),Jr=G(),V9=Za(),ca=$(),{promisify:$9}=require("util"),zi=require("moment"),Y9=Kd(),ff=BT(),av=Vh(),{deleteTransactionLogsBeforeValidator:K9}=lT(),{handleHDBError:W9,hdb_errors:Q9}=j(),{HTTP_STATUS_CODES:z9}=Q9,cv=lv.searchByValue,J9=lv.searchByHash,X9=uv.insert,j9=$9(Y9.evaluateSQL),Z9=uv.update;dv.exports={addJob:r7,updateJob:n7,handleGetJob:e7,handleGetJobsByStartDate:t7,getJobById:_v};async function e7(e){try{let t=await _v(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 Jr.error("There was an error getting job",t),new Error(r)}}a(e7,"handleGetJob");async function t7(e){try{let t=await s7(e);if(Jr.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=zi(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=zi(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 Jr.error(r),new Error(r)}}a(t7,"handleGetJobsByStartDate");async function r7(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 Jr.info(l),t.error=l,t}if(!Ke.JOB_TYPE_ENUM[e.operation])return Jr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ke.OPERATIONS_ENUM.CSV_FILE_LOAD:s=ff.fileObject(e);break;case Ke.OPERATIONS_ENUM.CSV_URL_LOAD:s=ff.urlObject(e);break;case Ke.OPERATIONS_ENUM.CSV_DATA_LOAD:s=ff.dataObject(e);break;case Ke.OPERATIONS_ENUM.IMPORT_FROM_S3:s=ff.s3FileObject(e);break;case Ke.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ke.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=av(e,"date");break;case Ke.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=av(e,"timestamp");break;case Ke.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=K9(e);break;default:break}if(s)throw W9(s,s.message,z9.BAD_REQUEST,void 0,void 0,!0);let n=new x9;n.type=e.operation===Ke.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ke.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new q9(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await cv(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return Jr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=H9();try{o=await cv(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return Jr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Jr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new V9(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await X9(u)}catch(l){return Jr.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 ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,Jr.trace(l)}return t}a(r7,"addJob");async function s7(e){let t=zi(e.from_date,zi.ISO_8601),r=zi(e.to_date,zi.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 s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new G9(s,e.hdb_user);try{return await j9(n)}catch(i){throw Jr.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(s7,"getJobsInDateRange");async function _v(e){if(ca.isEmptyOrZeroLength(e))return ca.errorizeMessage("Invalid job ID specified.");let t=new F9(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await J9(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Jr.error(s),ca.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(_v,"getJobById");async function n7(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===Ke.JOB_STATUS_ENUM.COMPLETE||e.status===Ke.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=zi().valueOf());let t=new k9(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Z9(t),r}a(n7,"updateJob")});var Sv=T((nfe,pv)=>{"use strict";var fv=$(),ur=y(),i7=require("moment"),Ef=KT(),hf=G(),Ev=JT(),hv=Wd(),mv=bi(),o7=Je(),a7=Gd(),XT=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function c7(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(fv.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(fv.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case ur.JOB_TYPE_ENUM.csv_file_load:await Rn(e,Ef.csvFileLoad);break;case ur.JOB_TYPE_ENUM.csv_url_load:await Rn(e,Ef.csvURLLoad);break;case ur.JOB_TYPE_ENUM.csv_data_load:await Rn(e,Ef.csvDataLoad);break;case ur.JOB_TYPE_ENUM.import_from_s3:await Rn(e,Ef.importFromS3);break;case ur.JOB_TYPE_ENUM.empty_trash:break;case ur.JOB_TYPE_ENUM.export_local:await Rn(e,hv.export_local);break;case ur.JOB_TYPE_ENUM.export_to_s3:await Rn(e,hv.export_to_s3);break;case ur.JOB_TYPE_ENUM.delete_files_before:case ur.JOB_TYPE_ENUM.delete_records_before:await Rn(e,mv.deleteFilesBefore);break;case ur.JOB_TYPE_ENUM.delete_audit_logs_before:await Rn(e,mv.deleteAuditLogsBefore);break;case ur.JOB_TYPE_ENUM.delete_transaction_logs_before:await Rn(e,a7.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(c7,"parseMessage");async function Rn(e,t){try{e.job.status=ur.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=i7().valueOf(),await Ev.updateJob(e.job),await u7(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):hf.error(`There was an error running ${t.name} job with id ${e.job.id}`),hf.error(s),e.job.message=s,e.job.status=ur.JOB_STATUS_ENUM.ERROR;try{await Ev.updateJob(e.job)}catch(n){throw hf.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Rn,"runJob");async function u7(e){hf.trace("launching job thread:",e),o7.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[ur.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(u7,"launchJobThread");pv.exports={parseMessage:c7,RunnerMessage:XT}});var gv=T((ofe,Tv)=>{"use strict";var jT=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};Tv.exports=jT});var Bv=T((cfe,ng)=>{"use strict";var Tf=Fr(),tg=Kd(),mf=KT(),An=q_(),pf=gi(),Ou=bi(),l7=Lp(),Au=xr(),Sf=Fp(),Pt=uT(),Et=G(),_7=kp(),d7=rd(),f7=OS(),E7=od(),h7=NS(),m7=bS(),p7=wS(),S7=LS(),ZT=MS(),Rv=Wd(),T7=$d(),rg=JT(),P=y(),{hdb_errors:bu,handleHDBError:Nu}=j(),{HTTP_STATUS_CODES:Av}=bu,eg=qS(),Ov=Od(),Uv=require("util"),ua=Gr(),g7=qn(),R7=Vo(),Nv=Sv(),bv=qc(),yv=(Cd(),Z(nu)),Iv=gr(),wv=Gd(),Cv=Pd(),{setServerUtilities:A7}=(df(),Z(WT)),{CONTEXT:O7}=(ns(),Z(BE)),{_assignPackageExport:N7}=require("../../index"),{transformReq:b7}=$(),{server:y7}=(hr(),Z(hi)),I7=HT(),Lv=Tf.searchByHash,w7=Tf.searchByValue,C7=Uv.promisify(Tf.search),L7=Uv.promisify(tg.evaluateSQL),D7={[P.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.CREATE_TABLE]:!0,[P.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[P.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.DROP_TABLE]:!0,[P.OPERATIONS_ENUM.DROP_SCHEMA]:!0},H=gv();async function Mv(e,t){try{if(e.body.operation!=="read_log"&&(Et.log_level===P.LOG_LEVELS.INFO||Et.log_level===P.LOG_LEVELS.DEBUG||Et.log_level===P.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;Et.info(o)}}catch(s){Et.error(s)}let r=await I7.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return D7[e.body.operation]&&g7.setSchemaDataToGlobal(s=>{s&&Et.error(s)}),r}a(Mv,"processLocalTransaction");var Dv=M7();ng.exports={chooseOperation:Pv,getOperationFunction:vv,operation:sg,processLocalTransaction:Mv};A7(ng.exports);y7.operation=sg;function Pv(e){let t;try{t=vv(e)}catch(n){throw Et.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=tg.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=tg.checkASTPermissions(e,i);if(o)throw Et.error(`${Av.FORBIDDEN} from operation ${e.operation}`),Et.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Nu(new Error,o,bu.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==P.OPERATIONS_ENUM.LOGIN&&e.operation!==P.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=T7.verifyPerms(i,n);if(o)throw Et.error(`${Av.FORBIDDEN} from operation ${e.operation}`),Et.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Nu(new Error,o,bu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw Nu(n,"There was an error when trying to choose an operation path")}return r}a(Pv,"chooseOperation");function vv(e){if(Et.trace(`getOperationFunction with operation: ${e.operation}`),Dv.has(e.operation))return Dv.get(e.operation);throw Nu(new Error,bu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),bu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(vv,"getOperationFunction");N7("operation",sg);function sg(e,t){e.hdb_user=this[O7]?.user,e.bypass_auth=!t;let r=Pv(e);return Mv({body:e},r)}a(sg,"operation");async function U7(e){Et.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[P.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case P.OPERATIONS_ENUM.INSERT:o=await ua.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await ua.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await ua.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await Ou.deleteRecord(i);break;default:Et.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Et.info("Invalid operation in transaction"),Et.error(o)}}a(U7,"catchup");async function Ys(e){b7(e);let t,r;try{r=await rg.addJob(e),t=r.createdJob,Et.info("addJob result",r);let s=new Nv.RunnerMessage(t,e);return await Nv.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw Et.error(n),Nu(s,n)}}a(Ys,"executeJob");function M7(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new H(ua.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new H(ua.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new H(ua.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new H(Tf.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new H(Lv)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new H(Lv)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(w7)),e.set(P.OPERATIONS_ENUM.SEARCH,new H(C7)),e.set(P.OPERATIONS_ENUM.SQL,new H(L7)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new H(Ys,mf.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H(Ys,mf.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H(Ys,mf.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H(Ys,mf.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new H(An.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new H(An.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new H(An.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new H(An.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new H(An.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new H(An.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new H(An.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new H(An.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new H(pf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new H(pf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new H(pf.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new H(pf.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new H(Ou.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new H(Au.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new H(Au.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new H(Au.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new H(Au.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new H(Sf.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new H(Sf.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new H(Sf.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new H(Sf.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new H(Au.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new H(_7)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new H(d7)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new H(f7)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H(E7)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H(h7)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(m7)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(Iv.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new H(p7.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(S7)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new H(ZT.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new H(ZT.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new H(ZT.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new H(Ys,Rv.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H(Ys,Ou.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H(Ys,Ou.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H(Ys,Rv.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new H(rg.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new H(rg.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new H(eg.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new H(eg.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new H(eg.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new H(Ov.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new H(Ov.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new H(U7)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(R7.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H(Ys,Ou.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(l7)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(bv.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(bv.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new H(yv.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new H(yv.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new H(Iv.getConfiguration)),e.set(P.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new H(Pt.customFunctionsStatus)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new H(Pt.getCustomFunctions)),e.set(P.OPERATIONS_ENUM.GET_COMPONENT_FILE,new H(Pt.getComponentFile)),e.set(P.OPERATIONS_ENUM.GET_COMPONENTS,new H(Pt.getComponents)),e.set(P.OPERATIONS_ENUM.SET_COMPONENT_FILE,new H(Pt.setComponentFile)),e.set(P.OPERATIONS_ENUM.DROP_COMPONENT,new H(Pt.dropComponent)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new H(Pt.getCustomFunction)),e.set(P.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new H(Pt.setCustomFunction)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new H(Pt.dropCustomFunction)),e.set(P.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new H(Pt.addComponent)),e.set(P.OPERATIONS_ENUM.ADD_COMPONENT,new H(Pt.addComponent)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new H(Pt.dropCustomFunctionProject)),e.set(P.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new H(Pt.packageComponent)),e.set(P.OPERATIONS_ENUM.PACKAGE_COMPONENT,new H(Pt.packageComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new H(Pt.deployComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_COMPONENT,new H(Pt.deployComponent)),e.set(P.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new H(wv.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H(Ys,wv.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(Cv.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(Cv.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new H(An.getBackup)),e}a(M7,"initializeOperationFunctionMap")});var Rf=T((lfe,Fv)=>{"use strict";var ig=y(),P7=$(),yu=G(),{handleHDBError:og,hdb_errors:gf}=j(),{isMainThread:v7}=require("worker_threads"),{Readable:B7}=require("stream"),Hv=require("os"),H7=require("util"),q7=Zp(),F7=H7.promisify(q7.authorize),qv=Bv(),{createGzip:G7,constants:x7}=require("zlib");function k7(e){let t=`Found an uncaught exception with message: ${e.message}. ${Hv.EOL}Stack: ${e.stack} ${Hv.EOL}Terminating ${v7?"HDB":"thread"}.`;console.error(t),yu.fatal(t),process.exit(1)}a(k7,"handleServerUncaughtException");function V7(e,t,r){if(yu[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 s=e.statusCode?e.statusCode:gf.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(V7,"serverErrorHandler");function $7(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=og(new Error,"Invalid JSON.",gf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(P7.isEmpty(e.body.operation)){let s=og(new Error,"Request body must include an 'operation' property.",gf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a($7,"reqBodyValidationHandler");function Y7(e,t,r){let s;e.body.operation!==ig.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==ig.OPERATIONS_ENUM.LOGIN&&e.body.operation!==ig.OPERATIONS_ENUM.LOGOUT?F7(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{yu.warn(n),yu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(og(n,i,gf.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(Y7,"authHandler");async function K7(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=qv.chooseOperation(e.body);let n=await qv.processLocalTransaction(e,s);if(n instanceof B7&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(G7({level:x7.Z_BEST_SPEED})))}return n}catch(n){throw yu.error(n),n}}a(K7,"handlePostRequest");Fv.exports={authHandler:Y7,handlePostRequest:K7,handleServerUncaughtException:k7,serverErrorHandler:V7,reqBodyValidationHandler:$7}});var Vv=T((dfe,kv)=>{"use strict";var W7=require("fastify-plugin"),{handlePostRequest:Gv,authHandler:Q7,reqBodyValidationHandler:z7}=Rf();async function J7(e){e.decorate("hdbCore",{preValidation:[z7,Q7],request:t=>xv(Gv(t,response)),requestWithoutAuthentication:(t,r)=>xv(Gv(t,r,!0))})}a(J7,"hdbCore");async function xv(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(xv,"convertAsyncIterators");kv.exports=W7(J7)});var Yv=T((Efe,$v)=>{"use strict";var ag=require("fs"),la=X();la.initSync();var{CONFIG_PARAMS:Iu}=y(),X7=1024*1024*1024;function j7(e){let t=la.get(Iu.HTTP_TIMEOUT),r=la.get(Iu.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:X7,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=la.get(Iu.TLS_PRIVATEKEY),i=la.get(Iu.TLS_CERTIFICATE),o=la.get(Iu.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:ag.readFileSync(`${n}`),cert:ag.readFileSync(i)+(o?`
24
+ `},q:.8});Dt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});OP={type:"application/json",serializeStream:Qd.streamAsJSON,serialize:JSON.stringify,deserialize:G6,q:.8};Dt.set("*/*",OP);Dt.set("",OP);a(G6,"tryJSONParse");a(CT,"registerContentHandlers");x6=require("fastify-plugin"),k6=x6(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Jd(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Jd,"findBestSerializer");SP=RP.default.get(AP.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Xd,"serialize");a(si,"serializeMessage");a(V6,"streamToBuffer");a(na,"getDeserializer");a(TP,"deserializerUnknownType");a($6,"transformIterable")});var jd={};qe(jd,{start:()=>W6});async function K6(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Sl(e);let n=new ri;try{e.responseHeaders=n;let i=e.url.slice(1),o=DT.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let p=_.match(/max-age=(\d+)/)?.[1];p&&(e.expiresAt=p*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await Ge(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=na(r["content-type"],!0)(e.body)}catch(p){throw new Tu.ClientError(p,400)}switch(e.authorize=!0,s){case"GET":case"HEAD":return u.get(c,e);case"POST":return u.post(c,e.data,e);case"PUT":return u.put(c,e.data,e);case"DELETE":return u.delete(c,e);case"PATCH":return u.patch(c,e.data,e);case"OPTIONS":n.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return u.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return u.query(c,e.data,e);case"COPY":return u.copy(c,r.destination,e);case"MOVE":return u.move(c,r.destination,e);case"BREW":throw new Tu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Tu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,LT.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){Y6[0]=f;let p=String.fromCharCode(34,(Ut[0]&63)+62,(Ut[0]>>6)+(Ut[1]<<2&63)+62,(Ut[1]>>4)+(Ut[2]<<4&63)+62,(Ut[2]>>2)+62,(Ut[3]&63)+62,(Ut[3]>>6)+(Ut[4]<<2&63)+62,(Ut[4]>>4)+(Ut[5]<<4&63)+62,(Ut[5]>>2)+62,(Ut[6]&63)+62,(Ut[6]>>6)+(Ut[7]<<2&63)+62,34),S=r["if-none-match"];S&&p==S?(l?.onDone&&l.onDone(),d=304,l=void 0):n.setIfNone("ETag",p),LT.lastModified&&n.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let E={status:d,headers:n,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=Xd(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?Yi.warn(i):Yi.info(i):Yi.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=Xd(i.contentType?i:i.toString(),e,o),o}}function W6(e){LT=e,!bP&&(bP=!0,DT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return K6(t,r)}),e.server.ws(async(t,r,s)=>{Su++;let n=new ss;yP||(yP=!0,Ic(l=>{Su>0&&l.push({metric:"ws-connections",connections:Su,byThread:!0})}));let i;t.on("error",l=>{i=!0,Yi.warn(l)});let o;t.on("message",a(function(d){o||(o=na(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{Su--,Vr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=DT.getMatch(u);if(Vr(!!_,"connection","ws","connect"),!_)t.send(si(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,yr(h=>({count:h.count,total:Su}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Ge(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=si(E.value,r);t.send(h),yr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var Yi,Tu,Ut,Y6,LT,bP,DT,yP,Su,IP=Te(()=>{Xo();_n();Yi=D(G()),Tu=D(j());Tl();qa();Ei();bd();Ut=new Uint8Array(8),Y6=new Float64Array(Ut.buffer,0,1),LT={};a(K6,"http");Su=0;a(W6,"start")});var UT=T((Hde,wP)=>{var{recordAction:Zd,recordActionBinary:Q6}=(_n(),Z(wc)),z6=require("fastify-plugin"),J6=200;wP.exports=z6(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.context.config,_,l,d;u.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),Zd(o,"duration",_,d,l),Q6(n.raw.statusCode<400,"success",_,d,l);let f=J6;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Zd(performance.now()-c,"transfer",_,d,l),Zd(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Zd(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var BT=T((qde,MP)=>{var nf=require("clone"),of=ke(),X6=$(),rf=y(),j6=G(),ef=require("fs"),MT=require("joi"),{string:sf}=MT.types(),{hdb_errors:Z6,handleHDBError:gu}=j(),{HDB_ERROR_MSGS:e9,HTTP_STATUS_CODES:tf}=Z6,{common_validators:ia}=Ds(),CP=1e9,LP=" is required",t9=["insert","update","upsert"],PT={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:t9,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},r9={schema:sf.required(),table:sf.required(),action:sf.valid("insert","update","upsert")},{AWS_ACCESS_KEY:s9,AWS_SECRET:n9,AWS_BUCKET:i9,AWS_FILE_KEY:o9,REGION:a9}=rf.S3_BUCKET_AUTH_KEYS,c9={s3:{presence:!0},[`s3.${s9}`]:{presence:!0,type:"String"},[`s3.${n9}`]:{presence:!0,type:"String"},[`s3.${i9}`]:{presence:!0,type:"String"},[`s3.${o9}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${a9}`]:{presence:!0,type:"String"}},DP=nf(PT);DP.data.presence={message:LP};var UP=nf(PT);UP.file_path.presence={message:LP};var u9=Object.assign(nf(PT),c9),vT=nf(r9);vT.csv_url=sf.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();vT.passthrough_headers=MT.object();function l9(e){let t=of.validateObject(e,DP);return af(e,t)}a(l9,"dataObject");function _9(e){let t=of.validateBySchema(e,MT.object(vT));return af(e,t)}a(_9,"urlObject");function d9(e){let t=of.validateObject(e,UP);return af(e,t)}a(d9,"fileObject");function f9(e){let t=of.validateObject(e,u9);return af(e,t)}a(f9,"s3FileObject");function af(e,t){if(!t){let r=X6.checkGlobalSchemaTable(e.schema,e.table);if(r)return gu(new Error,r,tf.BAD_REQUEST);if(e.operation===rf.OPERATIONS_ENUM.CSV_FILE_LOAD){try{ef.accessSync(e.file_path,ef.constants.R_OK|ef.constants.F_OK)}catch(s){return s.code===rf.NODE_ERROR_CODES.ENOENT?gu(s,`No such file or directory ${s.path}`,tf.BAD_REQUEST):s.code===rf.NODE_ERROR_CODES.EACCES?gu(s,`Permission denied ${s.path}`,tf.BAD_REQUEST):gu(s)}try{let s=ef.statSync(e.file_path).size;if(s>CP)return gu(new Error,e9.MAX_FILE_SIZE_ERR(s,CP),tf.BAD_REQUEST)}catch(s){j6.error(s),console.error(s)}}}return t}a(af,"postValidateChecks");MP.exports={dataObject:l9,urlObject:_9,fileObject:d9,s3FileObject:f9}});var HT=T((Gde,PP)=>{"use strict";var Ru=G(),cf=y();async function E9(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===cf.OPERATIONS_ENUM.INSERT||t.operation===cf.OPERATIONS_ENUM.UPDATE||t.operation===cf.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===cf.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Ru.info(i.message),i):i.http_resp_msg?(Ru.error(`Error calling operation: ${e.name}`),Ru.error(i.http_resp_msg),i):(Ru.error(`Error calling operation: ${e.name}`),Ru.error(i),i)}}a(E9,"callOperationFunctionAsAwait");PP.exports={callOperationFunctionAsAwait:E9}});var BP=T((kde,vP)=>{"use strict";var qT=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},FT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};vP.exports={BulkLoadFileObject:qT,BulkLoadDataObject:FT}});var qP=T(($de,HP)=>{"use strict";var GT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};HP.exports=GT});var KT=T((Jde,tv)=>{"use strict";var uf=xr(),_f=BT(),h9=require("needle"),gs=y(),Kde=Ve(),oa=$(),{handleHDBError:Ye,hdb_errors:WP}=j(),{HTTP_STATUS_CODES:Mt,HDB_ERROR_MSGS:Et,CHECK_LOGS_WRAPPER:Wi}=WP,aa=G(),xT=require("papaparse");oa.promisifyPapaParse();var Rs=require("fs-extra"),m9=require("path"),{chain:FP}=require("stream-chain"),GP=require("stream-json/streamers/StreamArray"),xP=require("stream-json/utils/Batch"),kP=require("stream-chain/utils/comp"),{finished:VP}=require("stream"),p9=X(),QP=HT(),S9=bT(),{BulkLoadFileObject:VT,BulkLoadDataObject:T9}=BP(),$T=hT(),{verifyBulkLoadAttributePerms:zP}=$d(),Wde=qP(),Qde=dt(),zde=on(),{databases:g9}=(fe(),Z(Ce)),{coerceType:R9}=(df(),Z(WT)),$P="No records parsed from csv file.",Ki=`${p9.get("HDB_ROOT")}/tmp`,{schema_regex:A9}=Ds(),YP=1024*1024*2,KP=5e3,O9={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};tv.exports={csvDataLoad:N9,csvURLLoad:b9,csvFileLoad:y9,importFromS3:I9};async function N9(e,t){let r=_f.dataObject(e);if(r)throw Ye(r,r.message,Mt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=jP(e.schema,e.table),i=xT.parse(e.data,{header:!0,skipEmptyLines:!0,transform:kT.bind(null,n),dynamicTyping:!1}),o=new $T;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&zP(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 Ye(new Error,c,Mt.BAD_REQUEST,void 0,void 0,!0);let u=new T9(e.action,e.schema,e.table,i.data);return s=await QP.callOperationFunctionAsAwait(ZP,u,null),s.message===$P?$P:ev(s.records,s.number_written)}catch(n){throw Qi(n)}}a(N9,"csvDataLoad");async function b9(e){let t=_f.urlObject(e);if(t)throw Ye(t,t.message,Mt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Ki}/${r}`;try{await w9(e,r)}catch(n){throw aa.error(Et.DOWNLOAD_FILE_ERR(r)+" - "+n),Ye(n,Wi(Et.DOWNLOAD_FILE_ERR(r)))}try{let n=new VT(this.job_operation_function.name,e.action,e.schema,e.table,s,gs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await YT(n);return await lf(s),i}catch(n){throw await lf(s),Qi(n)}}a(b9,"csvURLLoad");async function y9(e){let t=_f.fileObject(e);if(t)throw Ye(t,t.message,Mt.BAD_REQUEST,void 0,void 0,!0);let r=new VT(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,gs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await YT(r)}catch(s){throw Qi(s)}}a(y9,"csvFileLoad");async function I9(e){let t=_f.s3FileObject(e);if(t)throw Ye(t,t.message,Mt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=m9.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Ki}/${n}`;let i=new VT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await C9(n,e);let o=await YT(i);return await lf(r),o}catch(s){throw await lf(r),Qi(s)}}a(I9,"importFromS3");async function w9(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await h9("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw Ye(s,n,s.statusCode,gs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}D9(r,e.csv_url),await L9(t,r.raw)}a(w9,"downloadCSVFile");async function C9(e,t){try{let r=`${Ki}/${e}`;await Rs.mkdirp(Ki),await Rs.writeFile(`${Ki}/${e}`,"",{flag:"a+"});let s=await Rs.createWriteStream(r),n=await S9.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){aa.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw aa.error(Et.S3_DOWNLOAD_ERR+" - "+r),Ye(r,Wi(Et.S3_DOWNLOAD_ERR))}}a(C9,"downloadFileFromS3");async function L9(e,t){try{await Rs.mkdirp(Ki),await Rs.writeFile(`${Ki}/${e}`,t)}catch(r){throw aa.error(Et.WRITE_TEMP_FILE_ERR),Ye(r,Wi(Et.DEFAULT_BULK_LOAD_ERR))}}a(L9,"writeFileToTempFolder");async function lf(e){if(e)try{await Rs.access(e),await Rs.unlink(e)}catch{aa.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(lf,"deleteTempFile");function D9(e,t){if(e.statusCode!==WP.HTTP_STATUS_CODES.OK)throw Ye(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Mt.BAD_REQUEST);if(!O9[e.headers["content-type"]])throw Ye(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Mt.BAD_REQUEST);if(!e.raw)throw Ye(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Mt.BAD_REQUEST)}a(D9,"validateURLResponse");async function YT(e){try{let t;switch(e.file_type){case gs.VALID_S3_FILE_TYPES.CSV:t=await U9(e);break;case gs.VALID_S3_FILE_TYPES.JSON:t=await M9(e);break;default:throw Ye(new Error,Et.DEFAULT_BULK_LOAD_ERR,Mt.BAD_REQUEST,gs.LOG_LEVELS.ERROR,Et.INVALID_FILE_EXT_ERR(e))}return ev(t.records,t.number_written)}catch(t){throw Qi(t)}}a(YT,"fileLoad");async function JP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await uf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&zP(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=Ye(c);r(u)}}a(JP,"validateChunk");async function XP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;oa.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!oa.isEmpty(c)&&!oa.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 QP.callOperationFunctionAsAwait(ZP,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Ye(c,Wi(Et.INSERT_CSV_ERR),Mt.INTERNAL_SERVER_ERROR,gs.LOG_LEVELS.ERROR,Et.INSERT_CSV_ERR+" - "+c);r(u)}}a(XP,"insertChunk");async function U9(e){let t={records:0,number_written:0},r=jP(e.schema,e.table);try{let s=new $T,n=Rs.createReadStream(e.file_path,{highWaterMark:YP});n.setEncoding("utf8"),await xT.parsePromise(n,JP.bind(null,e,s),kT.bind(null,r));let i=s.getPermsResponse();if(i)throw Ye(new Error,i,Mt.BAD_REQUEST);return n=Rs.createReadStream(e.file_path,{highWaterMark:YP}),n.setEncoding("utf8"),await xT.parsePromise(n,XP.bind(null,e,t),kT.bind(null,r)),n.destroy(),t}catch(s){throw Ye(s,Wi(Et.PAPA_PARSE_ERR),Mt.INTERNAL_SERVER_ERROR,gs.LOG_LEVELS.ERROR,Et.PAPA_PARSE_ERR+s)}}a(U9,"callPapaParse");function jP(e,t){let r=g9[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>R9(i,n));return s}a(jP,"createTransformMap");function kT(e,t,r){let s=e.get(r);return s?s(t):oa.autoCast(t)}a(kT,"typeFunction");async function M9(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new $T,n=FP([Rs.createReadStream(e.file_path,{encoding:"utf-8"}),GP.withParser(),c=>c.value,new xP({batchSize:KP}),kP(async c=>{await JP(e,s,r,c)})]);await new Promise((c,u)=>{VP(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Ye(new Error,i,Mt.BAD_REQUEST);let o=FP([Rs.createReadStream(e.file_path,{encoding:"utf-8"}),GP.withParser(),c=>c.value,new xP({batchSize:KP}),kP(async c=>{await XP(e,t,r,c)})]);return await new Promise((c,u)=>{VP(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw Ye(s,Wi(Et.INSERT_JSON_ERR),Mt.INTERNAL_SERVER_ERROR,gs.LOG_LEVELS.ERROR,Et.INSERT_JSON_ERR+s)}}a(M9,"insertJson");async function ZP(e){let t={};try{e.data&&e.data.length>0&&P9(e.data[0])?t=await v9(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",aa.info(t.message))}catch(r){throw Qi(r)}return t}a(ZP,"callBulkFileLoad");function P9(e){let t=Object.keys(e);for(let r of t)if(!A9.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(P9,"validateColumnNames");async function v9(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=uf.insert;break;case"update":i=uf.update;break;case"upsert":i=uf.upsert;break;default:throw Ye(new Error,Et.INVALID_ACTION_PARAM_ERR(s),Mt.BAD_REQUEST,gs.LOG_LEVELS.ERROR,Et.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){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=oa.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Qi(o)}}a(v9,"bulkFileLoad");function ev(e,t){return`successfully loaded ${t} of ${e} records`}a(ev,"buildResponseMsg");function Qi(e){return Ye(e,Wi(Et.DEFAULT_BULK_LOAD_ERR),Mt.INTERNAL_SERVER_ERROR,gs.LOG_LEVELS.ERROR,Et.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Qi,"buildTopLevelErrMsg")});var sv=T((jde,rv)=>{"use strict";var QT=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};rv.exports=QT});var ov=T((efe,iv)=>{"use strict";var B9=y(),nv=require("moment"),H9=require("uuid").v4,zT=class{static{a(this,"JobObject")}constructor(){this.id=H9(),this.type=void 0,this.start_datetime=nv().valueOf(),this.created_datetime=nv().valueOf(),this.end_datetime=void 0,this.status=B9.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};iv.exports=zT});var JT=T((rfe,dv)=>{"use strict";var q9=require("uuid").v4,uv=xr(),lv=Gr(),F9=Bs(),G9=wo(),x9=sv(),Ke=y(),k9=ov(),V9=Yp(),Xr=G(),$9=Za(),ca=$(),{promisify:Y9}=require("util"),zi=require("moment"),K9=Kd(),ff=BT(),av=Vh(),{deleteTransactionLogsBeforeValidator:W9}=lT(),{handleHDBError:Q9,hdb_errors:z9}=j(),{HTTP_STATUS_CODES:J9}=z9,cv=lv.searchByValue,X9=lv.searchByHash,j9=uv.insert,Z9=Y9(K9.evaluateSQL),e7=uv.update;dv.exports={addJob:s7,updateJob:i7,handleGetJob:t7,handleGetJobsByStartDate:r7,getJobById:_v};async function t7(e){try{let t=await _v(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 Xr.error("There was an error getting job",t),new Error(r)}}a(t7,"handleGetJob");async function r7(e){try{let t=await n7(e);if(Xr.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=zi(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=zi(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 Xr.error(r),new Error(r)}}a(r7,"handleGetJobsByStartDate");async function s7(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 Xr.info(l),t.error=l,t}if(!Ke.JOB_TYPE_ENUM[e.operation])return Xr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ke.OPERATIONS_ENUM.CSV_FILE_LOAD:s=ff.fileObject(e);break;case Ke.OPERATIONS_ENUM.CSV_URL_LOAD:s=ff.urlObject(e);break;case Ke.OPERATIONS_ENUM.CSV_DATA_LOAD:s=ff.dataObject(e);break;case Ke.OPERATIONS_ENUM.IMPORT_FROM_S3:s=ff.s3FileObject(e);break;case Ke.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ke.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=av(e,"date");break;case Ke.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=av(e,"timestamp");break;case Ke.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=W9(e);break;default:break}if(s)throw Q9(s,s.message,J9.BAD_REQUEST,void 0,void 0,!0);let n=new k9;n.type=e.operation===Ke.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ke.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new F9(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await cv(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return Xr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=q9();try{o=await cv(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return Xr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Xr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new $9(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await j9(u)}catch(l){return Xr.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 ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,Xr.trace(l)}return t}a(s7,"addJob");async function n7(e){let t=zi(e.from_date,zi.ISO_8601),r=zi(e.to_date,zi.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 s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new x9(s,e.hdb_user);try{return await Z9(n)}catch(i){throw Xr.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(n7,"getJobsInDateRange");async function _v(e){if(ca.isEmptyOrZeroLength(e))return ca.errorizeMessage("Invalid job ID specified.");let t=new G9(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await X9(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Xr.error(s),ca.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(_v,"getJobById");async function i7(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===Ke.JOB_STATUS_ENUM.COMPLETE||e.status===Ke.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=zi().valueOf());let t=new V9(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await e7(t),r}a(i7,"updateJob")});var Sv=T((nfe,pv)=>{"use strict";var fv=$(),ur=y(),o7=require("moment"),Ef=KT(),hf=G(),Ev=JT(),hv=Wd(),mv=bi(),a7=Je(),c7=Gd(),XT=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function u7(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(fv.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(fv.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case ur.JOB_TYPE_ENUM.csv_file_load:await Rn(e,Ef.csvFileLoad);break;case ur.JOB_TYPE_ENUM.csv_url_load:await Rn(e,Ef.csvURLLoad);break;case ur.JOB_TYPE_ENUM.csv_data_load:await Rn(e,Ef.csvDataLoad);break;case ur.JOB_TYPE_ENUM.import_from_s3:await Rn(e,Ef.importFromS3);break;case ur.JOB_TYPE_ENUM.empty_trash:break;case ur.JOB_TYPE_ENUM.export_local:await Rn(e,hv.export_local);break;case ur.JOB_TYPE_ENUM.export_to_s3:await Rn(e,hv.export_to_s3);break;case ur.JOB_TYPE_ENUM.delete_files_before:case ur.JOB_TYPE_ENUM.delete_records_before:await Rn(e,mv.deleteFilesBefore);break;case ur.JOB_TYPE_ENUM.delete_audit_logs_before:await Rn(e,mv.deleteAuditLogsBefore);break;case ur.JOB_TYPE_ENUM.delete_transaction_logs_before:await Rn(e,c7.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(u7,"parseMessage");async function Rn(e,t){try{e.job.status=ur.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=o7().valueOf(),await Ev.updateJob(e.job),await l7(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):hf.error(`There was an error running ${t.name} job with id ${e.job.id}`),hf.error(s),e.job.message=s,e.job.status=ur.JOB_STATUS_ENUM.ERROR;try{await Ev.updateJob(e.job)}catch(n){throw hf.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Rn,"runJob");async function l7(e){hf.trace("launching job thread:",e),a7.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[ur.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(l7,"launchJobThread");pv.exports={parseMessage:u7,RunnerMessage:XT}});var gv=T((ofe,Tv)=>{"use strict";var jT=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};Tv.exports=jT});var Bv=T((cfe,ng)=>{"use strict";var Tf=Gr(),tg=Kd(),mf=KT(),An=q_(),pf=gi(),Ou=bi(),_7=Lp(),Au=kr(),Sf=Fp(),Pt=uT(),ht=G(),d7=kp(),f7=rd(),E7=OS(),h7=od(),m7=NS(),p7=bS(),S7=wS(),T7=LS(),ZT=MS(),Rv=Wd(),g7=$d(),rg=JT(),P=y(),{hdb_errors:bu,handleHDBError:Nu}=j(),{HTTP_STATUS_CODES:Av}=bu,eg=qS(),Ov=Od(),Uv=require("util"),ua=xr(),R7=qn(),A7=Vo(),Nv=Sv(),bv=qc(),yv=(Cd(),Z(nu)),Iv=Rr(),wv=Gd(),Cv=Pd(),{setServerUtilities:O7}=(df(),Z(WT)),{CONTEXT:N7}=(is(),Z(BE)),{_assignPackageExport:b7}=require("../../index"),{transformReq:y7}=$(),{server:I7}=(hr(),Z(hi)),w7=HT(),Lv=Tf.searchByHash,C7=Tf.searchByValue,L7=Uv.promisify(Tf.search),D7=Uv.promisify(tg.evaluateSQL),U7={[P.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.CREATE_TABLE]:!0,[P.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[P.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.DROP_TABLE]:!0,[P.OPERATIONS_ENUM.DROP_SCHEMA]:!0},H=gv();async function Mv(e,t){try{if(e.body.operation!=="read_log"&&(ht.log_level===P.LOG_LEVELS.INFO||ht.log_level===P.LOG_LEVELS.DEBUG||ht.log_level===P.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;ht.info(o)}}catch(s){ht.error(s)}let r=await w7.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return U7[e.body.operation]&&R7.setSchemaDataToGlobal(s=>{s&&ht.error(s)}),r}a(Mv,"processLocalTransaction");var Dv=P7();ng.exports={chooseOperation:Pv,getOperationFunction:vv,operation:sg,processLocalTransaction:Mv};O7(ng.exports);I7.operation=sg;function Pv(e){let t;try{t=vv(e)}catch(n){throw ht.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=tg.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=tg.checkASTPermissions(e,i);if(o)throw ht.error(`${Av.FORBIDDEN} from operation ${e.operation}`),ht.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Nu(new Error,o,bu.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==P.OPERATIONS_ENUM.LOGIN&&e.operation!==P.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=g7.verifyPerms(i,n);if(o)throw ht.error(`${Av.FORBIDDEN} from operation ${e.operation}`),ht.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Nu(new Error,o,bu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw Nu(n,"There was an error when trying to choose an operation path")}return r}a(Pv,"chooseOperation");function vv(e){if(ht.trace(`getOperationFunction with operation: ${e.operation}`),Dv.has(e.operation))return Dv.get(e.operation);throw Nu(new Error,bu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),bu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(vv,"getOperationFunction");b7("operation",sg);function sg(e,t){e.hdb_user=this[N7]?.user,e.bypass_auth=!t;let r=Pv(e);return Mv({body:e},r)}a(sg,"operation");async function M7(e){ht.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[P.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case P.OPERATIONS_ENUM.INSERT:o=await ua.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await ua.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await ua.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await Ou.deleteRecord(i);break;default:ht.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){ht.info("Invalid operation in transaction"),ht.error(o)}}a(M7,"catchup");async function Ks(e){y7(e);let t,r;try{r=await rg.addJob(e),t=r.createdJob,ht.info("addJob result",r);let s=new Nv.RunnerMessage(t,e);return await Nv.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw ht.error(n),Nu(s,n)}}a(Ks,"executeJob");function P7(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new H(ua.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new H(ua.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new H(ua.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new H(Tf.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new H(Lv)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new H(Lv)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(C7)),e.set(P.OPERATIONS_ENUM.SEARCH,new H(L7)),e.set(P.OPERATIONS_ENUM.SQL,new H(D7)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new H(Ks,mf.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H(Ks,mf.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H(Ks,mf.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H(Ks,mf.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new H(An.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new H(An.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new H(An.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new H(An.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new H(An.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new H(An.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new H(An.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new H(An.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new H(pf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new H(pf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new H(pf.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new H(pf.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new H(Ou.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new H(Au.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new H(Au.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new H(Au.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new H(Au.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new H(Sf.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new H(Sf.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new H(Sf.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new H(Sf.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new H(Au.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new H(d7)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new H(f7)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new H(E7)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H(h7)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H(m7)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(p7)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(Iv.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new H(S7.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(T7)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new H(ZT.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new H(ZT.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new H(ZT.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new H(Ks,Rv.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H(Ks,Ou.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H(Ks,Ou.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H(Ks,Rv.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new H(rg.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new H(rg.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new H(eg.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new H(eg.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new H(eg.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new H(Ov.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new H(Ov.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new H(M7)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(A7.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H(Ks,Ou.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(_7)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(bv.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(bv.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new H(yv.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new H(yv.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new H(Iv.getConfiguration)),e.set(P.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new H(Pt.customFunctionsStatus)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new H(Pt.getCustomFunctions)),e.set(P.OPERATIONS_ENUM.GET_COMPONENT_FILE,new H(Pt.getComponentFile)),e.set(P.OPERATIONS_ENUM.GET_COMPONENTS,new H(Pt.getComponents)),e.set(P.OPERATIONS_ENUM.SET_COMPONENT_FILE,new H(Pt.setComponentFile)),e.set(P.OPERATIONS_ENUM.DROP_COMPONENT,new H(Pt.dropComponent)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new H(Pt.getCustomFunction)),e.set(P.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new H(Pt.setCustomFunction)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new H(Pt.dropCustomFunction)),e.set(P.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new H(Pt.addComponent)),e.set(P.OPERATIONS_ENUM.ADD_COMPONENT,new H(Pt.addComponent)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new H(Pt.dropCustomFunctionProject)),e.set(P.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new H(Pt.packageComponent)),e.set(P.OPERATIONS_ENUM.PACKAGE_COMPONENT,new H(Pt.packageComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new H(Pt.deployComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_COMPONENT,new H(Pt.deployComponent)),e.set(P.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new H(wv.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H(Ks,wv.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(Cv.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(Cv.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new H(An.getBackup)),e}a(P7,"initializeOperationFunctionMap")});var Rf=T((lfe,Fv)=>{"use strict";var ig=y(),v7=$(),yu=G(),{handleHDBError:og,hdb_errors:gf}=j(),{isMainThread:B7}=require("worker_threads"),{Readable:H7}=require("stream"),Hv=require("os"),q7=require("util"),F7=Zp(),G7=q7.promisify(F7.authorize),qv=Bv(),{createGzip:x7,constants:k7}=require("zlib");function V7(e){let t=`Found an uncaught exception with message: ${e.message}. ${Hv.EOL}Stack: ${e.stack} ${Hv.EOL}Terminating ${B7?"HDB":"thread"}.`;console.error(t),yu.fatal(t),process.exit(1)}a(V7,"handleServerUncaughtException");function $7(e,t,r){if(yu[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 s=e.statusCode?e.statusCode:gf.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a($7,"serverErrorHandler");function Y7(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=og(new Error,"Invalid JSON.",gf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(v7.isEmpty(e.body.operation)){let s=og(new Error,"Request body must include an 'operation' property.",gf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(Y7,"reqBodyValidationHandler");function K7(e,t,r){let s;e.body.operation!==ig.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==ig.OPERATIONS_ENUM.LOGIN&&e.body.operation!==ig.OPERATIONS_ENUM.LOGOUT?G7(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{yu.warn(n),yu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(og(n,i,gf.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(K7,"authHandler");async function W7(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=qv.chooseOperation(e.body);let n=await qv.processLocalTransaction(e,s);if(n instanceof H7&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(x7({level:k7.Z_BEST_SPEED})))}return n}catch(n){throw yu.error(n),n}}a(W7,"handlePostRequest");Fv.exports={authHandler:K7,handlePostRequest:W7,handleServerUncaughtException:V7,serverErrorHandler:$7,reqBodyValidationHandler:Y7}});var Vv=T((dfe,kv)=>{"use strict";var Q7=require("fastify-plugin"),{handlePostRequest:Gv,authHandler:z7,reqBodyValidationHandler:J7}=Rf();async function X7(e){e.decorate("hdbCore",{preValidation:[J7,z7],request:t=>xv(Gv(t,response)),requestWithoutAuthentication:(t,r)=>xv(Gv(t,r,!0))})}a(X7,"hdbCore");async function xv(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(xv,"convertAsyncIterators");kv.exports=Q7(X7)});var Yv=T((Efe,$v)=>{"use strict";var ag=require("fs"),la=X();la.initSync();var{CONFIG_PARAMS:Iu}=y(),j7=1024*1024*1024;function Z7(e){let t=la.get(Iu.HTTP_TIMEOUT),r=la.get(Iu.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:j7,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=la.get(Iu.TLS_PRIVATEKEY),i=la.get(Iu.TLS_CERTIFICATE),o=la.get(Iu.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:ag.readFileSync(`${n}`),cert:ag.readFileSync(i)+(o?`
25
25
 
26
- `+ag.readFileSync(o):"")},s.http2=!0}return s}a(j7,"getServerOptions");$v.exports=j7});var Qv=T((mfe,Wv)=>{"use strict";var cg=X();cg.initSync();var{CONFIG_PARAMS:Kv}=y();function Z7(){let e=cg.get(Kv.HTTP_CORSACCESSLIST),t=cg.get(Kv.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=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(Z7,"getCORSOptions");Wv.exports=Z7});var Xv=T((Sfe,Jv)=>{"use strict";var zv=X();zv.initSync();var eee=y();function tee(){return zv.get(eee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(tee,"getHeaderTimeoutConfig");Jv.exports=tee});var _g={};qe(_g,{customFunctionsServer:()=>nee,handleFile:()=>see,ready:()=>aee});async function see(e,t,r,s){if(!On){let c=ug.get(lg.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);On=l0(c),ut.http((await On).server)}let n=await On,i=(0,Zv.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!jv.has(i)){jv.add(i);try{n.register(oee(i,o))}catch(c){if(c.message==="Root plugin has already booted")De.warn(`Could not load root fastify route for ${r}, this may require a restart to install properly`);else throw c}}}async function nee(){try{De.info("In Custom Functions Fastify server"+process.cwd()),De.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),De.debug(`Custom Functions server process ${process.pid} starting up.`),await iee();let e=ug.get(lg.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=On=await l0(t)}catch(s){throw De.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw De.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){De.error(`Custom Functions ${process.pid} Error: ${e}`),De.error(e),process.exit(1)}}async function iee(){try{De.info("Custom Functions starting configuration."),await i0.setUsersToGlobal(),De.info("Custom Functions completed configuration.")}catch(e){De.error(e)}}function oee(e,t){return async function(r){try{De.info("Custom Functions starting buildRoutes"),De.trace("Loading fastify routes folder "+e),(0,e0.existsSync)(e)&&r.register(n0.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:De.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?De.error(n.message):n&&De.error(n),o()})}catch(s){De.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function l0(e){De.info("Custom Functions starting buildServer.");let t=(0,o0.default)(e),r=(0,t0.default)(t);r.server.headersTimeout=(0,c0.default)(),r.setErrorHandler(u0.serverErrorHandler);let s=(0,a0.default)();return s&&r.register(r0.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(s0.default),await r.register(ree),await r.after(),CT(r),De.info("Custom Functions completed buildServer."),r}function aee(){if(On)return On.then?On.then(e=>e.ready()):On.ready()}var Zv,e0,t0,r0,s0,n0,ug,lg,De,ree,i0,o0,a0,c0,u0,On,jv,_0=Te(()=>{Zv=require("path"),e0=require("fs"),t0=D(require("fastify")),r0=D(require("@fastify/cors")),s0=D(UT()),n0=D(require("@fastify/autoload")),ug=D(X()),lg=D(y()),De=D(G()),ree=D(Vv()),i0=D(xr()),o0=D(Yv()),a0=D(Qv()),c0=D(Xv()),u0=D(Rf());Xo();hr();jv=new Set;a(see,"handleFile");a(nee,"customFunctionsServer");a(iee,"setUp");a(oee,"buildRouteFolder");a(l0,"buildServer");a(aee,"ready")});var dg={};qe(dg,{start:()=>cee});function cee(e){return{handleFile(t,r,s){f0||(f0=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=d0.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,E0.default)(n,(0,h0.realpathSync)(o))}}return i(n)},{runFirst:!0})),d0.set(r,s)}}}var E0,h0,d0,f0,m0=Te(()=>{E0=D(require("send")),h0=require("fs"),d0=new Map;a(cee,"start")});function _ee(e,t=1,r){if(fg++,(0,Ji.startWorker)("server/threads/threadServer.js",{name:Nf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===Nf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});lee.push(n),await n,_a.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=Of.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=_a.indexOf(s);o>-1&&_a.splice(o,1)}if(a(i,"removeWorker"),da){let o=da;da=[];for(let c of o)g0[c.localPort](null,c)}}}),r){let s=setInterval(()=>{Eg?Eg=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Ji.shutdownWorkers)(),fg=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function R0(e=0,t){if(typeof e=="string")try{(0,bf.existsSync)(e)&&(0,bf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=dee:r=fee(t):r=hg;let s=(0,fa.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=g0[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),Eg=!0,r(o,(c,u)=>{if(!c){if(p0){let l=o._socket||new fa.Socket({handle:o,writable:!0,readable:!0});p0.deliverSocket(l,e,u),l.resume()}else fg>0?(da.length===0&&setTimeout(()=>{da.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,da.push(o)):(console.log("start up a dynamic thread to handle request"),_ee(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 fa.Socket({handle:o,writable:!0,readable:!0});pee(l,c,e)}br(!0,"socket-routed")})};let n=Nc();T0.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function hg(e,t){let r,s=0;for(let n of _a){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Af)return Af=i,t(r);s=i}Af=0,t(r)}function dee(e,t){let r={};e.getpeername(r);let s=r.address,n=Ea.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);hg(e,o=>{Ea.set(s,{worker:o,lastUsed:i}),t(o)})}function fee(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new fa.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=Ea.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);hg(s,d=>{Ea.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function hee(){Af=0;for(let e of _a)e.expectedIdle=e.recentELU.idle+Eee,e.requests=1;_a.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function pee(e,t,r){let s=mee++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),Of.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),Of.delete(s)),n.event=="destroy"&&(e.destroy(),Of.delete(s))})}var Ji,fa,Nf,T0,bf,uee,_a,da,g0,p0,fg,lee,Eg,Af,S0,Ea,Eee,Of,mee,A0=Te(()=>{Ji=D(Je()),fa=require("net"),Nf=D(y()),T0=D(G()),bf=require("fs");_n();({isMainThread:uee}=require("worker_threads")),_a=[],da=[],g0=[],fg=0,lee=[];uee&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(_ee,"startHTTPWorker");a(R0,"startSocketServer");Af=0;a(hg,"findMostIdleWorker");S0=36e5,Ea=new Map;a(dee,"findByRemoteAddressAffinity");a(fee,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ea)r.lastUsed+S0<e&&Ea.delete(t)},S0).unref();Eee=1e3;a(hee,"updateWorkerIdleness");(0,Ji.setMonitorListener)(hee);Of=new Map,mee=1;a(pee,"proxySocket")});var y0=T((Lfe,b0)=>{"use strict";var See=require("cluster"),Rs=X();Rs.initSync();var N0=y(),Ife=require("util"),Nn=G(),mg=require("fs"),Tee=require("fastify"),wfe=Nc(),gee=require("@fastify/cors"),Ree=require("@fastify/compress"),Aee=require("@fastify/static"),Oee=UT(),Nee=require("path"),{PACKAGE_ROOT:bee}=y(),yee=qn(),Iee=$(),wee=xr(),Cee=oc(),{server:Lee}=(hr(),Z(hi)),{authHandler:Dee,handlePostRequest:Uee,serverErrorHandler:Mee,reqBodyValidationHandler:Pee}=Rf(),Cfe=require("net"),{registerContentHandlers:vee}=(Xo(),Z(NP)),Bee=6e4,Hee=1024*1024*1024,qee="TRUE",{CONFIG_PARAMS:bn}=N0,Xi;b0.exports={hdbServer:O0,start:O0};async function O0(e){try{Nn.info("In Fastify server"+process.cwd()),Nn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Nn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=See.isMaster,await Fee();let t=Rs.get(bn.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;Xi=Gee(t),await Xi.ready(),e||(e={}),e.isOperationsServer=!0,Xi.server.cantCleanupProperly=!0;try{Lee.http(Xi.server,e),Xi.server.closeIdleConnections||await Xi.listen({port:0,host:"::"})}catch(r){throw Xi.close(),Nn.error(r),Nn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Nn.fatal(t),process.exit(1)}}a(O0,"operationsServer");async function Fee(){Nn.trace("Configuring HarperDB process."),yee.setSchemaDataToGlobal(),await wee.setUsersToGlobal(),await Cee.getLicense()}a(Fee,"setUp");function Gee(e){Nn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=xee(e),r=Tee(t);r.server.headersTimeout=Vee(),r.setErrorHandler(Mee);let s=kee();s&&r.register(gee,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Oee),r.register(Ree),r.register(Aee,{root:Nee.join(bee,"studio")}),vee(r);let n=Rs.get(N0.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Iee.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Pee,Dee],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Uee(i,o)}),r.get("/health",()=>"HarperDB is running."),Nn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Gee,"buildServer");function xee(e){let t=Rs.get(bn.OPERATIONSAPI_NETWORK_TIMEOUT),r=Rs.get(bn.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:Hee,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Rs.get(bn.OPERATIONSAPI_TLS_PRIVATEKEY),i=Rs.get(bn.OPERATIONSAPI_TLS_CERTIFICATE),o=Rs.get(bn.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:mg.readFileSync(n),cert:mg.readFileSync(i)+(o?`
26
+ `+ag.readFileSync(o):"")},s.http2=!0}return s}a(Z7,"getServerOptions");$v.exports=Z7});var Qv=T((mfe,Wv)=>{"use strict";var cg=X();cg.initSync();var{CONFIG_PARAMS:Kv}=y();function eee(){let e=cg.get(Kv.HTTP_CORSACCESSLIST),t=cg.get(Kv.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=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(eee,"getCORSOptions");Wv.exports=eee});var Xv=T((Sfe,Jv)=>{"use strict";var zv=X();zv.initSync();var tee=y();function ree(){return zv.get(tee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(ree,"getHeaderTimeoutConfig");Jv.exports=ree});var _g={};qe(_g,{customFunctionsServer:()=>iee,handleFile:()=>nee,ready:()=>cee});async function nee(e,t,r,s){if(!On){let c=ug.get(lg.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);On=l0(c),ut.http((await On).server)}let n=await On,i=(0,Zv.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!jv.has(i)){jv.add(i);try{n.register(aee(i,o))}catch(c){if(c.message==="Root plugin has already booted")De.warn(`Could not load root fastify route for ${r}, this may require a restart to install properly`);else throw c}}}async function iee(){try{De.info("In Custom Functions Fastify server"+process.cwd()),De.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),De.debug(`Custom Functions server process ${process.pid} starting up.`),await oee();let e=ug.get(lg.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=On=await l0(t)}catch(s){throw De.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw De.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){De.error(`Custom Functions ${process.pid} Error: ${e}`),De.error(e),process.exit(1)}}async function oee(){try{De.info("Custom Functions starting configuration."),await i0.setUsersToGlobal(),De.info("Custom Functions completed configuration.")}catch(e){De.error(e)}}function aee(e,t){return async function(r){try{De.info("Custom Functions starting buildRoutes"),De.trace("Loading fastify routes folder "+e),(0,e0.existsSync)(e)&&r.register(n0.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:De.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?De.error(n.message):n&&De.error(n),o()})}catch(s){De.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function l0(e){De.info("Custom Functions starting buildServer.");let t=(0,o0.default)(e),r=(0,t0.default)(t);r.server.headersTimeout=(0,c0.default)(),r.setErrorHandler(u0.serverErrorHandler);let s=(0,a0.default)();return s&&r.register(r0.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(s0.default),await r.register(see),await r.after(),CT(r),De.info("Custom Functions completed buildServer."),r}function cee(){if(On)return On.then?On.then(e=>e.ready()):On.ready()}var Zv,e0,t0,r0,s0,n0,ug,lg,De,see,i0,o0,a0,c0,u0,On,jv,_0=Te(()=>{Zv=require("path"),e0=require("fs"),t0=D(require("fastify")),r0=D(require("@fastify/cors")),s0=D(UT()),n0=D(require("@fastify/autoload")),ug=D(X()),lg=D(y()),De=D(G()),see=D(Vv()),i0=D(kr()),o0=D(Yv()),a0=D(Qv()),c0=D(Xv()),u0=D(Rf());Xo();hr();jv=new Set;a(nee,"handleFile");a(iee,"customFunctionsServer");a(oee,"setUp");a(aee,"buildRouteFolder");a(l0,"buildServer");a(cee,"ready")});var dg={};qe(dg,{start:()=>uee});function uee(e){return{handleFile(t,r,s){f0||(f0=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=d0.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,E0.default)(n,(0,h0.realpathSync)(o))}}return i(n)},{runFirst:!0})),d0.set(r,s)}}}var E0,h0,d0,f0,m0=Te(()=>{E0=D(require("send")),h0=require("fs"),d0=new Map;a(uee,"start")});function dee(e,t=1,r){if(fg++,(0,Ji.startWorker)("server/threads/threadServer.js",{name:Nf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===Nf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});_ee.push(n),await n,_a.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=Of.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=_a.indexOf(s);o>-1&&_a.splice(o,1)}if(a(i,"removeWorker"),da){let o=da;da=[];for(let c of o)g0[c.localPort](null,c)}}}),r){let s=setInterval(()=>{Eg?Eg=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Ji.shutdownWorkers)(),fg=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function R0(e=0,t){if(typeof e=="string")try{(0,bf.existsSync)(e)&&(0,bf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=fee:r=Eee(t):r=hg;let s=(0,fa.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=g0[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),Eg=!0,r(o,(c,u)=>{if(!c){if(p0){let l=o._socket||new fa.Socket({handle:o,writable:!0,readable:!0});p0.deliverSocket(l,e,u),l.resume()}else fg>0?(da.length===0&&setTimeout(()=>{da.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,da.push(o)):(console.log("start up a dynamic thread to handle request"),dee(0));yr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new fa.Socket({handle:o,writable:!0,readable:!0});See(l,c,e)}yr(!0,"socket-routed")})};let n=Nc();T0.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function hg(e,t){let r,s=0;for(let n of _a){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Af)return Af=i,t(r);s=i}Af=0,t(r)}function fee(e,t){let r={};e.getpeername(r);let s=r.address,n=Ea.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);hg(e,o=>{Ea.set(s,{worker:o,lastUsed:i}),t(o)})}function Eee(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new fa.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=Ea.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);hg(s,d=>{Ea.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function mee(){Af=0;for(let e of _a)e.expectedIdle=e.recentELU.idle+hee,e.requests=1;_a.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function See(e,t,r){let s=pee++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),Of.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),Of.delete(s)),n.event=="destroy"&&(e.destroy(),Of.delete(s))})}var Ji,fa,Nf,T0,bf,lee,_a,da,g0,p0,fg,_ee,Eg,Af,S0,Ea,hee,Of,pee,A0=Te(()=>{Ji=D(Je()),fa=require("net"),Nf=D(y()),T0=D(G()),bf=require("fs");_n();({isMainThread:lee}=require("worker_threads")),_a=[],da=[],g0=[],fg=0,_ee=[];lee&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(dee,"startHTTPWorker");a(R0,"startSocketServer");Af=0;a(hg,"findMostIdleWorker");S0=36e5,Ea=new Map;a(fee,"findByRemoteAddressAffinity");a(Eee,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ea)r.lastUsed+S0<e&&Ea.delete(t)},S0).unref();hee=1e3;a(mee,"updateWorkerIdleness");(0,Ji.setMonitorListener)(mee);Of=new Map,pee=1;a(See,"proxySocket")});var y0=T((Lfe,b0)=>{"use strict";var Tee=require("cluster"),As=X();As.initSync();var N0=y(),Ife=require("util"),Nn=G(),mg=require("fs"),gee=require("fastify"),wfe=Nc(),Ree=require("@fastify/cors"),Aee=require("@fastify/compress"),Oee=require("@fastify/static"),Nee=UT(),bee=require("path"),{PACKAGE_ROOT:yee}=y(),Iee=qn(),wee=$(),Cee=kr(),Lee=oc(),{server:Dee}=(hr(),Z(hi)),{authHandler:Uee,handlePostRequest:Mee,serverErrorHandler:Pee,reqBodyValidationHandler:vee}=Rf(),Cfe=require("net"),{registerContentHandlers:Bee}=(Xo(),Z(NP)),Hee=6e4,qee=1024*1024*1024,Fee="TRUE",{CONFIG_PARAMS:bn}=N0,Xi;b0.exports={hdbServer:O0,start:O0};async function O0(e){try{Nn.info("In Fastify server"+process.cwd()),Nn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Nn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Tee.isMaster,await Gee();let t=As.get(bn.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;Xi=xee(t),await Xi.ready(),e||(e={}),e.isOperationsServer=!0,Xi.server.cantCleanupProperly=!0;try{Dee.http(Xi.server,e),Xi.server.closeIdleConnections||await Xi.listen({port:0,host:"::"})}catch(r){throw Xi.close(),Nn.error(r),Nn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Nn.fatal(t),process.exit(1)}}a(O0,"operationsServer");async function Gee(){Nn.trace("Configuring HarperDB process."),Iee.setSchemaDataToGlobal(),await Cee.setUsersToGlobal(),await Lee.getLicense()}a(Gee,"setUp");function xee(e){Nn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=kee(e),r=gee(t);r.server.headersTimeout=$ee(),r.setErrorHandler(Pee);let s=Vee();s&&r.register(Ree,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Nee),r.register(Aee),r.register(Oee,{root:bee.join(yee,"studio")}),Bee(r);let n=As.get(N0.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!wee.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[vee,Uee],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Mee(i,o)}),r.get("/health",()=>"HarperDB is running."),Nn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(xee,"buildServer");function kee(e){let t=As.get(bn.OPERATIONSAPI_NETWORK_TIMEOUT),r=As.get(bn.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:qee,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=As.get(bn.OPERATIONSAPI_TLS_PRIVATEKEY),i=As.get(bn.OPERATIONSAPI_TLS_CERTIFICATE),o=As.get(bn.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:mg.readFileSync(n),cert:mg.readFileSync(i)+(o?`
27
27
 
28
- `+mg.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(xee,"getServerOptions");function kee(){let e=Rs.get(bn.OPERATIONSAPI_NETWORK_CORS),t=Rs.get(bn.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===qee)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(kee,"getCORSOpts");function Vee(){return Rs.get(bn.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Bee}a(Vee,"getHeaderTimeoutConfig")});var q0=T((vfe,H0)=>{"use strict";var{decode:$ee}=require("msgpackr"),{isMainThread:Ufe,parentPort:Yee,threadId:Mfe}=require("worker_threads"),C0=_t(),yn=Ve(),Kee=y(),wu=G(),I0=X(),L0=y();Je();var Wee=nn(),{recordAction:Qee,recordActionBinary:zee}=(_n(),Z(wc)),{publishToStream:Jee}=C0,Pfe={durable:yn.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:yn.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Xee,jee,Zee,D0,U0;H0.exports={initialize:M0,workQueueListener:B0,setSubscription:ete,setIgnoreOrigin:rte,getDatabaseSubscriptions:tte};async function M0(){U0=!0,wu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await C0.getNATSReferences();Xee=e,jee=e.info.server_name,Zee=t,D0=r}a(M0,"initialize");var If=new Map;function ete(e,t,r){let s=If.get(e);s||If.set(e,s=new Map),s.set(t,r),U0||M0().then(B0)}a(ete,"setSubscription");function tte(){return If}a(tte,"getDatabaseSubscriptions");var P0;function rte(e){P0=e}a(rte,"setIgnoreOrigin");var v0=100,w0=new Array(v0),yf=0;async function B0(){let t=await(await D0.consumers.get(yn.WORK_QUEUE_CONSUMER_NAMES.stream_name,yn.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();Yee?.on("message",async r=>{let{type:s}=r;s===L0.ITC_EVENT_TYPES.SHUTDOWN&&t.close()});for await(let r of t)await w0[yf],w0[yf]=ste(r).catch(s=>{wu.error(s)}),++yf>=v0&&(yf=0)}a(B0,"workQueueListener");async function ste(e){let t=$ee(e.data);Qee(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=I0.get(Kee.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(yn.MSG_HEADERS.TRANSACTED_NODES)&&r.values(yn.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(yn.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!P0),zee(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(yn.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;wu.trace("processing message:",o,c,_,(l?"records: "+l.map(O=>O?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),wu.trace(`messageProcessor nats msg id: ${e.headers.get(yn.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:R}=f||{},b=If.get(c)?.get(_);if(!b)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,b.send(t);else if(l.length===1&&!u)b.send({type:pg(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:R});else{let O=l.map((Y,Q)=>({type:pg(o),value:Y,expiresAt:E,id:d?.[Q],table:_}));for(;u;)O.push({type:pg(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;b.send({type:"transaction",writes:O,table:_,timestamp:p,onCommit:h,user:S,nodeName:R})}I0.get(L0.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Jee(e.subject.split(".").slice(0,-1).join("."),Wee.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){wu.error(o)}e.ack()}a(ste,"messageProcessor");function pg(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(pg,"convertOperation")});var Og={};qe(Og,{disableNATS:()=>ite,publishToStream:()=>Uf,setNATSReplicator:()=>Sg,setPublishToStream:()=>ote,setSubscription:()=>Ag,start:()=>nte});function nte(){Cf.default.get(Lf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&cte()}function ite(e=!0){V0=e}function ote(e,t){Uf=e,Ag=t}function cte(){if(V0||process.env._DISABLE_NATS)return;let e=Es(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];Sg(n,r,i)}}Ng((r,s)=>{Sg(r.tableName,r.databaseName,r),s&&Y0(r)}),!F0&&(F0=!0)}function Sg(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends Ot{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ie],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ie]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ie],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ie]})}static defineSchema(i){Y0(i)}static subscribe(){let i=new rs;return Ag(t,e,i),i}static subscribeOnThisThread(i){return i<ate}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new wf(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=$0;return i}a(s,"getNATSTransaction")}function Y0(e){let t=Cf.default.get(Lf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Uf(`${gg.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Rg.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 G0,gg,Rg,x0,k0,Cf,Lf,Df,V0,Uf,Ag,ate,$0,F0,wf,Tg,K0=Te(()=>{fe();ns();G0=D(_t()),gg=D(Ve()),Rg=D(nn());qa();x0=D(q0()),k0=D(Er()),Cf=D(X()),Lf=D(y()),Df=D(G());a(nte,"start");a(ite,"disableNATS");Uf=G0.publishToStream,Ag=x0.setSubscription;a(ote,"setPublishToStream");ate=2;a(cte,"assignReplicationSource");a(Sg,"setNATSReplicator");a(Y0,"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 s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=Cf.default.get(Lf.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,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||(Df.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,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&&s.push(Uf(`${gg.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,Rg.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw Df.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},Tg=class extends wf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,k0.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};$0=new Tg});async function Q0({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await bg.getResource(e,{});n=new Ig(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await bg.get(e);i&&i.delete()}n=new Pf(e,t)}return n}function yg(){return Mf++,Mf>65500&&(Mf=1),Mf}var W0,ha,bg,Mf,Pf,Ig,z0=Te(()=>{fe();su();W0=D(Er()),ha=D(G());Ei();bg=et({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(Q0,"getSession");Mf=1;a(yg,"getNextMessageId");Pf=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");let l=!1,d;if((_.endsWith("+")||_.endsWith("#"))&&(l=!0,_.endsWith("+")&&(d=!0),_=_.slice(0,_.length-1)),_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(_.indexOf("#")>-1||_.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let f=this.subscriptions.find(b=>b.topic===n);f&&(f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1));let E={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:i,isCollection:l,shallowWildcard:d,url:""};o&&(0,ha.trace)("Resuming subscription from",n,"from",o);let h=ti.getMatch(_);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);E.url=h.relativeURL;let p=h.path,S=h.Resource,R=await Ge(E,async()=>{let b=await S.subscribe(E);if(!b)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!b[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let O of b)try{let Y;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"||s&&!s(O))continue;r?(O.topic=n,Y=this.needsAcknowledge(O)):(O.acknowledge?.(),Y=yg());let Q=O.id;Array.isArray(Q)&&(Q=Jo(Q)),Q==null&&(Q=""),this.listener(p+"/"+Q,O.value,Y,t)}catch(Y){(0,ha.warn)(Y)}})(),b});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=yg();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(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user,t.async=!0,t.authorize=!0;let i=ti.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return Ge(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},Ig=class extends Pf{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{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,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=yg(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,ha.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,W0.getNextMonotonicTime)()),(0,ha.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),bg.put(this.sessionRecord)),t.qos}}});var Cg={};qe(Cg,{start:()=>lte});async function lte({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:_,onClose:l}=j0(o,(d,f)=>{if(o.send(d),f&&o._socket.writableNeedDrain)return new Promise(E=>this._socket.once("drain",E))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",_),o.on("close",l),o.on("error",d=>{(0,Xr.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;ute&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,Z0.getSuperUser)());let{onMessage:u,onClose:_}=j0(o,l=>o.write(l),null,c,i);o.on("data",u),o.on("close",_),o.on("error",l=>{(0,Xr.info)("Socket error",l)})},{port:t,securePort:s})}function j0(e,t,r,s,n){X0||(X0=!0,Ic(d=>{vf>0&&d.push({metric:"mqtt-connections",connections:vf,byThread:!0})}));let i;vf++;let o,c={protocolVersion:4},u=(0,Bf.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){vf--,i||(i=!0,o?.disconnect(),kr(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await ut.getUser(d.username,d.password.toString()),(0,wg.get)(In.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&J0.notify({username:s.username,status:In.AUTH_AUDIT_STATUS.SUCCESS,type:In.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,wg.get)(In.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&J0.error({username:s.username,status:In.AUTH_AUDIT_STATUS.FAILURE,type:In.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return kr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=Q0({user:s,...d}),o=await o}catch(O){return(0,Xr.error)(O),kr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:O.code||5,returnCode:O.code||128})}kr(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((O,Y,Q,F)=>{try{let w=O.indexOf("/",1),K=w>0?O.slice(0,w):O;f({cmd:"publish",topic:O,payload:E(Y),messageId:Q||Math.floor(Math.random()*1e8),qos:F.qos},K)}catch(w){(0,Xr.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let O of d.subscriptions){let Y;try{Y=(await o.addSubscription(O,O.qos>=1)).qos||0}catch(Q){(0,Xr.error)(Q),Y=128}h.push(Y)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let O of d.unsubscriptions)o.removeSubscription(O);f({cmd:"unsuback",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=na(r?.headers.get?.("content-type"))),R=d.payload?.length>0?S(d.payload):void 0,b;try{b=await o.publish(d,R)}catch(O){(0,Xr.warn)(O),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:b===!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(),kr(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Xr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,Bf.generate)(h,c);t(S),br(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return si(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Bf,Z0,wg,In,Xr,J0,ute,X0,vf,eB=Te(()=>{Bf=require("mqtt-packet");z0();Z0=D(xr());Xo();_n();hr();wg=D(X()),In=D(y()),Xr=D(G()),J0=(0,Xr.loggerWithTag)("auth-event"),ute=!0;a(lte,"start");vf=0;a(j0,"onSocket")});var rB={};qe(rB,{Request:()=>Lg,createReuseportFd:()=>Hf});var tB,Lg,Dg,Ug,Hf,Mg=Te(()=>{tB=require("os"),Lg=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let s=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=s,this.headers=new Ug(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get body(){return this.#e||(this.#e=new Dg(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},Dg=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},Ug=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,s]of this)t(s,r,this)}};(0,tB.platform)()!="win32"&&(Hf=require("node-unix-socket").createReuseportFd)});var Hd={};qe(Hd,{component_errors:()=>ma,loadComponent:()=>qf,loadComponentDirectories:()=>_B,setErrorReporter:()=>Ete});function _B(e,t){t&&(vg=t),e&&(Bg=e);let r=[];if((0,As.existsSync)(Pg)){let n=(0,As.readdirSync)(Pg,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(Pg,o);r.push(qf(c,vg,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(qf(s,vg,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{lB=!0})}function Ete(e){Du=e}async function qf(e,t,r,s,n,i){if(!nB.has(e)){nB.set(e,!0),n&&(Bg=n);try{let o;s&&(ma=new Map);let c=(0,gt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,As.existsSync)(c)?o=s?(0,uB.getConfigObj)():(0,iB.parseDocument)((0,As.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=Hg;let u=[],_=s;for(let l in o){let d=o[l];if(ma.set(s?l:(0,gt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let b=e,O;for(;!(0,As.existsSync)(O=(0,gt.join)(b,"node_modules",l));)if(b=(0,gt.dirname)(b),b.length<(0,cB.getHdbBasePath)().length){O=null;break}if(O)f=await qf(O,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=fte[l];if(!f)continue;u.push(f);let h=a(b=>(b.origin=r,et(b)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,R=!p?.https&&p?.port;if(Cu.isMainThread&&(f=await f.startOnMainThread?.({server:ut,ensureTable:h,port:R,securePort:S,resources:t,...d})||f,s&&p))for(let b of[R,S])try{if(+b&&!sB.includes(b)){let O=qg.get(Fg.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);O&&Lu.default.warn("Session affinity is not recommended and may cause memory leaks"),(O||!Hf)&&(sB.push(b),R0(b,O))}}catch(O){console.error("Error listening on socket",b,O,l)}if(t.isWorker&&(f=await f.start?.({server:ut,ensureTable:h,port:R,securePort:S,resources:t,...d})||f),Bg.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,aB.handleHDBError)("Can not reference parent directories");let b=(0,gt.join)(e,d.files).replace(/\\/g,"/"),O=b.indexOf("/*");if(O>-1&&d.files!==Hg[l]?.files&&!(0,As.existsSync)(b.slice(0,O)))throw new Error(`The path '${b.slice(0,O)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let Y of await(0,oB.default)(b,{onlyFiles:!1,objectMode:!0})){let{path:Q,dirent:F}=Y;_=!0;let w=(0,gt.relative)(e,Q).replace(/\\/g,"/");if(d.root){let x=d.root;if(x.startsWith("/")&&(x=x.slice(1)),x.endsWith("/")&&(x=x.slice(0,-1)),x+="/",w.startsWith(x))w=w.slice(x.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${w}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`)}let K=(0,gt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+K+B.slice(2):B==="."?"/"+K:"/"+K+"/"+B,B+=(B.endsWith("/")?"":"/")+w;try{if(F.isFile()){let x=await dte(Q);Cu.isMainThread&&await f.setupFile?.(x,B,Q,t),t.isWorker&&await f.handleFile?.(x,B,Q,t)}else Cu.isMainThread&&await f.setupDirectory?.(B,Q,t),t.isWorker&&await f.handleDirectory?.(B,Q,t)}catch(x){x.message=`Could not load ${F.isFile()?"file":"directory"} '${Q}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${x.message}`,Du?.(x),((0,pa.getWorkerIndex)()===0?console:Lu.default).error(x),t.set(d.path||"/",new Uu(x)),ma.set(s?l:(0,gt.basename)(e),x.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,gt.basename)(e)}' due to: ${h.message}`,Du?.(h),((0,pa.getWorkerIndex)()===0?console:Lu.default).error(h),t.set(d.path||"/",new Uu(h),null,!0),ma.set(s?l:(0,gt.basename)(e),h.message)}}if(Cu.isMainThread&&!lB&&i&&(0,pa.watchDir)(e,async()=>_B()),o.extensionModule)return await Al((0,gt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;Du?.(new Error(l)),((0,pa.getWorkerIndex)()===0?console:Lu.default).error(l),ma.set((0,gt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,Du?.(o),t.set("",new Uu(o))}}}var As,gt,Cu,iB,qg,Fg,oB,pa,Lu,aB,cB,_te,uB,dte,Pg,Bg,lB,vg,ma,fte,Hg,sB,nB,Du,Uu,qd=Te(()=>{As=require("fs"),gt=require("path"),Cu=require("worker_threads"),iB=require("yaml"),qg=D(X()),Fg=D(y());xA();YA();KA();IP();_0();m0();oB=D(require("fast-glob")),pa=D(Je()),Lu=D(G());FE();hr();aB=D(j());ns();fe();A0();cB=D(X()),_te=D(y0());Cd();K0();eB();uB=D(gr());Mg();({readFile:dte}=As.promises),Pg=qg.get(Fg.CONFIG_PARAMS.COMPONENTSROOT),Bg=new Map,ma=new Map;a(_B,"loadComponentDirectories");fte={REST:jd,rest:jd,graphqlSchema:qE,jsResource:xE,fastifyRoutes:_g,login:VE,static:dg,operationsApi:_te,customFunctions:{},http:{},clustering:Og,authentication:nu,mqtt:Cg},Hg={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(Hg,"static",{value:{files:"web/**"}});sB=[],nB=new Map;a(Ete,"setErrorReporter");a(qf,"loadComponent");Uu=class extends Ot{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 xg=T((_Ee,fB)=>{var{isMainThread:dB}=require("worker_threads"),{getTables:hte}=(fe(),Z(Ce)),{loadComponentDirectories:mte,loadComponent:pte}=(qd(),Z(Hd)),{resetResources:Ste}=(su(),Z(KU)),Tte=oT(),gte=gr(),{dirname:Rte}=require("path"),{getConnection:Ate}=_t(),Ote=X(),Nte=y(),Gg=new Map;async function bte(e=!1){!dB&&Ote.get(Nte.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Ate();try{dB&&await Tte()}catch(s){console.error(s)}let t=Ste();hte(),t.isWorker=e,await pte(Rte(gte.getConfigFilePath()),t,"hdb",!0,Gg),await mte(Gg,t);let r=[];for(let[s]of Gg)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(bte,"loadRootComponents");fB.exports.loadRootComponents=bte});var Je=T((fEe,ai)=>{"use strict";var{Worker:yte,MessageChannel:Ite,parentPort:Ks,isMainThread:Kg,threadId:wte,workerData:wn}=require("worker_threads"),{PACKAGE_ROOT:Cte}=y(),{join:mB,isAbsolute:Lte,extname:Dte}=require("path"),{server:pB}=(hr(),Z(hi)),{watch:Ute,readdir:Mte}=require("fs/promises"),{totalmem:EB}=require("os"),xf=y(),Pte=X(),Cn=G(),{randomBytes:vte}=require("crypto"),{_assignPackageExport:Bte}=require("../../index"),Hte=y(),qte=1024*1024,oi=[],jr=[],Fte=50,Wg=1e4,Gte="restart",SB="request_thread_info",TB="resource_report",gB="thread_info",RB="added-port",xte="ack",kg;Bte("threads",jr);ai.exports={startWorker:Vg,restartWorkers:zg,shutdownWorkers:Kte,workers:oi,setMonitorListener:ere,onMessageFromWorkers:Wte,onMessageByType:IB,broadcast:zte,broadcastWithAcknowledgement:Xte,setChildListenerByType:Yte,getWorkerIndex:AB,getWorkerCount:OB,getTicketKeys:NB,setMainIsWorker:Vte,setTerminateTimeout:kte,restartNumber:wn?.restartNumber||1};jr.onMessageByType=IB;jr.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=jr.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var Qg;function kte(e){Wg=e}a(kte,"setTerminateTimeout");function AB(){return wn?wn.workerIndex:Qg?0:void 0}a(AB,"getWorkerIndex");function OB(){return wn?wn.workerCount:Qg?1:void 0}a(OB,"getWorkerCount");function Vte(e){Qg=e}a(Vte,"setMainIsWorker");var Ff;function NB(){return Ff||(Ff=Kg?vte(48):wn.ticketKeys,Ff)}a(NB,"getTicketKeys");Object.defineProperty(pB,"workerIndex",{get(){return AB()}});Object.defineProperty(pB,"workerCount",{get(){return OB()}});var bB={[SB](e,t){jte(t)},[TB](e,t){Zte(t,e)}};function Vg(e,t={}){let r=process.constrainedMemory?.()||EB();r=Math.min(r,EB());let s=Math.max(Math.floor(r/qte/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[],o=[];for(let u of jr){let _=new Ite;_.existingPort=u,i.push(_),o.push(_.port2)}Dte(e)||(e+=".js");let c=new yte(Lte(e)?e:mB(Cte,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:ai.exports.restartNumber,ticketKeys:NB()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:RB,port:u,threadId:c.threadId},[u]);return kf(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>Vg(e,t),c.on("error",u=>{console.error("Worker error:",u),Cn.error("Worker error:",u)}),c.on("exit",u=>{oi.splice(oi.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Fte?(t.unexpectedRestarts=c.unexpectedRestarts+1,Vg(e,t)):Cn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{bB[u.type]?.(u,c)}),oi.push(c),rre(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(Vg,"startWorker");var $te=[xf.THREAD_TYPES.HTTP];async function zg(e=null,t=2,r=!0){if(Kg){if(r){let{loadRootComponents:o}=xg();await o()}ai.exports.restartNumber++,t<1&&(t=t*oi.length);let s=[],n=[];for(let o of oi.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Cn.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:ai.exports.restartNumber,type:xf.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=$te.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),Wg*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===Hte.ITC_EVENT_TYPES.CHILD_STARTED&&(Cn.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");Cn.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=Od();r&&(e==="http"||!e)&&Pte.get(xf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Ks.postMessage({type:Gte,workerType:e})}a(zg,"restartWorkers");function Yte(e,t){bB[e]=t}a(Yte,"setChildListenerByType");function Kte(e){return zg(e,1/0,!1)}a(Kte,"shutdownWorkers");var yB=[];function Wte(e){yB.push(e)}a(Wte,"onMessageFromWorkers");var $g=new Map;function IB(e,t){let r=$g.get(e);r||$g.set(e,r=[]),r.push(t)}a(IB,"onMessageByType");var Qte=10;async function zte(e){let t=0;for(let r of jr)try{r.postMessage(e),t++>Qte&&(t=0,await new Promise(setImmediate))}catch(s){Cn.error("Unable to send message to worker",s)}}a(zte,"broadcast");var Gf=new Map,Jte=1;function Xte(e){return new Promise(t=>{let r=0;for(let s of jr)try{let n=Jte++,i=a(()=>{Gf.delete(n),--r===0&&t(),s!==Ks&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Gf.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Gf)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Cn.error("Unable to send message to worker",n)}r===0&&t()})}a(Xte,"broadcastWithAcknowledgement");function jte(e){e.postMessage({type:gB,workers:wB()})}a(jte,"sendThreadInfo");function wB(){let e=Date.now();return oi.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(wB,"getChildWorkerInfo");function Zte(e,t){e.resources=t,e.resources.updated=Date.now()}a(Zte,"recordResourceReport");var Yg;function ere(e){Yg=e}a(ere,"setMonitorListener");var tre=1e3,hB=!1;function rre(){hB||(hB=!0,setInterval(()=>{for(let e of oi){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Yg&&Yg()},tre).unref())}a(rre,"startMonitoring");var sre=1e3;if(Ks){kf(Ks);for(let e=0,t=wn.addPorts.length;e<t;e++){let r=wn.addPorts[e];r.threadId=wn.addThreadIds[e],kf(r)}setInterval(()=>{let e=process.memoryUsage();Ks.postMessage({type:TB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},sre).unref(),kg=a(()=>new Promise((e,t)=>{Ks.on("message",r),Ks.postMessage({type:SB});function r(s){s.type===gB&&(Ks.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else kg=wB;ai.exports.getThreadInfo=kg;function kf(e,t){jr.push(e),e.on("message",r=>{if(r.type===RB)r.port.threadId=r.threadId,kf(r.port);else if(r.type===xte){let s=Gf.get(r.id);s&&s()}else{for(let n of yB)n(r,e);let s=$g.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Cn.error(i)}}}).on("close",()=>{jr.splice(jr.indexOf(e),1)}).on("exit",()=>{jr.splice(jr.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(kf,"addPort");if(Kg){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Mte(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(mB(s,i.name));try{for await(let{filename:i}of Ute(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await zg(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");ai.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Ks.on("message",async e=>{let{type:t}=e;t===xf.ITC_EVENT_TYPES.SHUTDOWN&&(ai.exports.restartNumber=e.restartNumber,Ks.unref(),setTimeout(()=>{Cn.warn("Thread did not voluntarily terminate",wte),process.exit(0)},Wg).unref())})});function LB(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Sa||((0,Pu.onMessageByType)(CB,d=>{DB(d.path)}),(0,Pu.onMessageByType)(nre,d=>{(0,Mu.trace)("confirming to proceed with txn",d.txnId)}),Sa=Object.create(null));let c=Sa[i]||(Sa[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=Jo(t);let _=new Xg(r);_.startTime=s,n&&(_.includeDescendants=n);let l=u.get(t);return l?l.push(_):(u.set(t,l=[_]),l.tables=u,l.key=t),_.subscriptions=l,_}function DB(e,t){if(!Sa)return;let r=Sa[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:Jg,exclusiveStart:!0})){Jg=n;let o=pr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Jo(o.recordId),d;do{let f=c.get(l);if(f){for(let h of f)if(!(d&&!h.includeDescendants)){if(h.startTime>=n){(0,Mu.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,Mu.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E+1):l=null,d=!0}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},Jg,!0)}function UB(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,Pu.broadcast)({type:CB,path:n}),DB(n,!0)})}}var Mu,Pu,CB,nre,Sa,TEe,Xg,Jg,MB=Te(()=>{Mu=D(G()),Pu=D(Je());qa();su();co();CB="transaction",nre="transaction-await",TEe=Buffer.alloc(4096);a(LB,"addSubscription");Xg=class extends rs{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 s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},Jg=Date.now();a(DB,"notifyFromTransactionData");a(UB,"listenToCommits")});var WT={};qe(WT,{coerceType:()=>Wf,makeTable:()=>Jf,setServerUtilities:()=>fre,updateResource:()=>qu});function Jf(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,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=[]),UB(i,u);let S=_h(i,s,u),R=0,b,O,Y,Q={},F=Promise.resolve(),w,K,B;for(let W of p)(W.assignCreatedTime||W.name==="__createdtime__")&&(w=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(K=W),W.expiresAt&&(B=W),W.isPrimaryKey&&(Q=W);let x,te=[],be=[],se=1,vt=2,Pe={},At={},es=864e5,pR,Ju,SH=10,TH=6;E&&gR();class at extends Ot{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=w;static updatedTimeProperty=K;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),O=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let C=a(I=>{let U=this.sources.slice(0,-1);if(U=U.filter(M=>M[I]&&(!M[I].reliesOnPrototype||M.prototype[I])),U.length>0)if(U.length===1){let M=U[0];return(V,z,oe)=>{if(V?.source!==M)return M[I](z,oe,V)}}else return(M,V,z)=>{let oe=[];for(let k of U){if(M?.source===k)break;oe.push(k[I](V,z,M))}return Promise.all(oe)}},"getApplyToIntermediateSource"),g=this.sources[this.sources.length-1],L=a(I=>{if(g[I]&&(!g[I].reliesOnPrototype||g.prototype[I]))return(U,M,V)=>{if(!U?.source)return g[I](M,V,U)}},"getApplyToCanonicalSource");return Pe={put:L("put"),delete:L("delete"),publish:L("publish")},At={put:C("put"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")},(async()=>{let I=!1,U=a(async(M,V)=>{let z=M.value,oe=M.table?xe[c][M.table]:at;if(c===Os.SYSTEM_SCHEMA_NAME&&(M.table===Os.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===Os.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(I=!0),M.id===void 0&&(M.id=z[oe.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let k=await oe.getResource(M.id,V,vu);switch(M.type){case"put":return k._writeUpdate(z,vu);case"delete":return k._writeDelete(vu);case"publish":return k._writePublish(z,vu);case"invalidate":return k.invalidate(vu);default:We.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=m.subscribe;M&&h==null&&(h=!0);let V=m.subscribeOnThisThread?m.subscribeOnThisThread((0,ji.getWorkerIndex)()):(0,ji.getWorkerIndex)()===0,z=M&&V&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(z){let oe;for await(let k of z)try{if(!(k.type==="transaction"?k.writes[0]:k)){We.error("Bad subscription event",k);continue}if(k.source=m,oe)if(k.beginTxn)oe.resolve();else{U(k,oe);continue}if(k.type==="end_txn")continue;let Ne=Ge(k,()=>{if(k.type==="transaction"){let ne=[];for(let Bt of k.writes)try{ne.push(U(Bt,k))}catch($t){throw $t.message+=" writing "+JSON.stringify(Bt)+" of event "+JSON.stringify(k),$t}return Promise.all(ne)}else if(k.type==="define_schema"){let ne=this.attributes.slice(0),Bt;for(let $t of k.attributes)ne.find(li=>li.name===$t.name)||(ne.push($t),Bt=!0);Bt&&(et({table:n,database:c,attributes:ne,origin:"cluster"}),Gu.signalSchemaChange(new xu.SchemaEventMsg(process.pid,Os.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return k.beginTxn?(oe=k,U(k,k),new Promise(ne=>{oe.resolve=ne})):U(k,k)});I&&(await Ne,Gu.signalUserChange(new xu.UserEventMsg(process.pid))),k.onCommit&&(Ne?.then?Ne.then(k.onCommit):k.onCommit())}catch(Ee){We.error("error in subscription handler",Ee)}}}catch(M){We.error(M)}})(),this}static getResource(m,A,C){let g=super.getResource(m,A,C);if(m!=null){Oa(m);try{if(g.hasOwnProperty(ge))return g;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let L=!C?.async||i.cache?.get(m),I=Un(A),U=I.getReadTxn();if(U?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return SR(m,A,{transaction:U},L,M=>{if(M?qu(g,M):g[ge]=null,A.onlyIfCached&&A.noCacheStore){if(!g.doesExist())throw new Qs.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let V=lE(m,M,A,g);if(V)return I?.disregardReadTxn(),g[Zg]=!0,tR(V,z=>(qu(g,z),g))}return g})}catch(L){throw L.message.includes("Unable to serialize object")&&(L.message+=": "+JSON.stringify(m)),L}}return g}ensureLoaded(){let m=lE(this[Ie],this[Ws],this[me]);if(m)return this[Zg]=!0,tR(m,A=>{this[Ws]=A,this[ge]=A.value,this[Kf]=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,es=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");es=es||(d+f)/4,_E()}static enableAuditing(m=!0){E=m,m&&gR(),at.audit=m}static coerceId(m){return m===""?null:Wf(m,Q)}static async dropTable(){if(delete xe[c][n],c===o){for(let m of p)l.remove(at.tableName+"/"+m.name),r[m.name]?.drop();l.remove(at.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));Gu.signalSchemaChange(new xu.SchemaEventMsg(process.pid,Os.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(m,A){if(m&&typeof m=="object"&&!Array.isArray(m)&&m.url===""){let C=this.getRecordCount();return{recordCount:C.recordCount,estimatedRecordRange:C.estimatedRange,records:"./",name:n,database:c,attributes:p}}return super.get(m,A)}get(m){if(typeof m=="string")return this.getProperty(m);if(this[is])return this.search(m);if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[me]?.returnNonexistent)return this}allowRead(m,A){let C=ju(m);if(C?.read){let g=C.attribute_permissions;if(g){A||(A={});let L=A.select;if(L){let I=eR(g,"read");A.select=L.filter(U=>I[U])}else A.select=g.filter(I=>I.read).map(I=>I.attribute_name);return A}else return!0}}allowUpdate(m,A){let C=ju(m);if(C?.update){let g=C.attribute_permissions;if(g){let L=eR(g,"update");for(let I in A)if(!L[I])return!1;for(let I of g){let U=I.attribute_name;!I.update&&!(U in A)&&(A[U]=this.getProperty(U))}}return!0}}allowCreate(m,A){if(this[is]){let C=ju(m);if(C?.insert){let g=C.attribute_permissions;if(g){let L=eR(g,"insert");for(let I in A)if(!L[I])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return ju(m)?.delete}update(m,A){if(!Un(this[me]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let g;if(typeof m=="object"&&m)if(A){Object.isFrozen(m)&&(m=Object.assign({},m));for(let L in this[ge])m[L]===void 0&&(m[L]=void 0);this[Ht]=m}else g=this[Ht],g&&(m=Object.assign(g,m)),this[Ht]=g=m;return this._writeUpdate(this),this}invalidate(m){let A=this[me],C=this[Ie];Oa(C),Un(this[me]).addWrite({key:C,store:i,invalidated:!0,entry:this[Ws],nodeName:this[me]?.nodeName,before:Pe.invalidate?.bind(this,A,C),beforeIntermediate:At.invalidate?.bind(this,A,C),commit:(L,I)=>{if(I?.version>L)return;let U=null;for(let M in r)U||(U={}),U[M]=this.getProperty(M);S(C,U,this[Ws],L,Vf,E,this[me],0,"invalidate")}})}static evict(m,A,C){let g=this.Source,L;if(!((O||E)&&(!A||(L=i.getEntry(m),!L||!A)||L.version!==C))){if(O){if(i.hasLock(m,L.version))return;let I;for(let U in r)I||(I={}),I[U]=A[U];if(I){S(m,I,L,C,$f,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{Xu(m,A,null)}),E)S(m,null,L,C,$f,null,null,0,null,!0);else return i.remove(m,C)}}lock(){throw new Error("Not yet implemented")}static operation(m,A){return m.table||=n,m.schema||=c,GB.operation(m,A)}async put(m){this.update(m,!0)}_writeUpdate(m,A){let C=this[me],g=Un(C),L=this[Ie];Oa(L);let I=this[Ws];this[jg]=!0;let U={key:L,store:i,entry:I,nodeName:C?.nodeName,validate:M=>{if(!m[vB]||dl(m)){if(this.validate(m),C?.source?m=Fa(m):(t&&m[t]!==L&&(m[t]=L),K&&(m[K.name]=K.type==="Date"?new Date(M):K.type==="String"?new Date(M).toISOString():M),w&&(I?.value?m[w.name]=I?.value[w.name]:m[w.name]=w.type==="Date"?new Date(M):w.type==="String"?new Date(M).toISOString():M),m=Fa(m)),m[ge])throw new Error("Can not assign a record with a record property");this[ge]=m}else g.removeWrite(U)},before:Pe.put&&(()=>Pe.put(C,L,m)),beforeIntermediate:At.put&&(()=>At.put(C,L,m)),commit:(M,V,z)=>{z&&(C&&V?.version>(C.lastModified||0)&&(C.lastModified=V.version),qu(this,V));let oe=V?.value;this[jg]=!1,We.trace("Checking timestamp for put",L,V?.version>M,V?.version,M),!(V?.version>M)&&(Xu(L,oe,m),S(L,m,V,M,0,E,C,C.expiresAt||(d?d+Date.now():0)))}};g.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[is]){for await(let A of this.search(m))(await at.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[ge]?this._writeDelete(m):!1}_writeDelete(m){let A=Un(this[me]),C=this[Ie];Oa(C);let g=this[me];return A.addWrite({key:C,store:i,resource:this,nodeName:g?.nodeName,before:Pe.delete?.bind(this,g,C),beforeIntermediate:At.delete?.bind(this,g,C),commit:(L,I,U)=>{let M=I?.value;U&&(g&&I?.version>(g.lastModified||0)&&(g.lastModified=I.version),qu(this,I)),!(I?.version>L)&&(Xu(this[Ie],M),We.trace("Write delete entry",C,L),E||h?(S(C,null,this[Ws],L,0,E,this[me],0,"delete"),E||_E()):i.remove(this[Ie]))}}),!0}search(m){let A=Un(this[me]);if(!m)throw new Error("No query provided");let C=m.reverse===!0,g=m.conditions;g?g.length===void 0&&(g=Array.from(g)):g=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Ie]&&(g=[{attribute:null,comparator:"prefix",value:this[Ie]}].concat(g));for(let k of g){let Ee=k[0]??k.attribute,Ne=Ee==null?Q:p.find(ne=>ne.name==Ee);if(Ne)Ne.type&&(k[1]===void 0?k.value=L(k.value,Ne):k[1]=L(k[1],Ne));else if(Ee!=null)throw(0,Qs.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function L(k,Ee){return Array.isArray(k)?k.map(Ne=>Wf(Ne,Ee)):Wf(k,Ee)}a(L,"coerceTypedValues"),g.length>1&&(g=(0,FB.sortBy)(g,k=>{if(k.estimated_count===void 0){let Ee=k.comparator||k.search_type;if(Ee===Hu.SEARCH_TYPES.EQUALS){let Ne=k[0]??k.attribute;if(Ne==null||Ne===t)k.estimated_count=1;else{let ne=r[Ne];k.estimated_count=ne?ne.getValuesCount(k[1]??k.value):1/0}}else Ee===Hu.SEARCH_TYPES.CONTAINS||Ee===Hu.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===Hu.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=are:k.estimated_count=ore}return k.estimated_count}));let I=A.getReadTxn();I.use();let U=m.select,M=g[0],V;if(!M)V=i.getRange(C?{end:!1,reverse:!0,transaction:I,lazy:U?.length<4}:{start:!1,transaction:I,lazy:U?.length<4}).map(({value:k})=>k?new Promise(Ee=>setImmediate(()=>Ee(k))):Yf.SKIP);else{let k=UE(M,I,C,at,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=g.slice(1).map(ME);V=oe(k,Ee)}else{for(let Ne=1;Ne<g.length;Ne++){let ne=g[Ne],Bt=UE(ne,I,C,at,m.allowFullScan);k=k.concat(Bt)}let Ee=new Set;k=k.filter(Ne=>Ee.has(Ne)?!1:(Ee.add(Ne),!0)),V=oe(k)}}(m.offset||m.limit!==void 0)&&(V=V.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0)),V.onDone=()=>{V.onDone=null,I.done()};let z=this[me];function oe(k,Ee){let Ne=Ee?.length,ne={transaction:I,lazy:Ne>0||U?.length<4,alwaysPrefetch:!0},Bt=m.ensureLoaded!==!1;function $t(li,He){if(Bt&&He!==void 0){let _r=!z.onlyIfCached&&lE(He,li,z,this);if(_r)return _r.then(AH=>$t(AH))}let bs=li?.value;if(!bs)return Yf.SKIP;for(let _r=0;_r<Ne;_r++)if(!Ee[_r](bs))return Yf.SKIP;return bs}return a($t,"processEntry"),k.map(li=>SR(li,z,ne,!1,$t))}return a(oe,"idsToRecords"),V}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||et({table:n,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let A=LB(at,this[Ie]??null,function(I,U,M,V){try{let z=U.getValue?.(i);this.send({id:I,timestamp:M,value:z,version:U.version,type:U.type,beginTxn:V})}catch(z){We.error(z)}},m.startTime,this[is]);m.crossThreads===!1&&(A.crossThreads=!1),m.supportsTransactions&&(A.supportsTransactions=!0);let C=this[Ie],g=m.previousCount;g>1e3&&(g=1e3);let L=m.startTime;if(this[is]){if(L){if(g)throw new Qs.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:I,value:U}of u.getRange({start:L,exclusiveStart:!0})){let M=pr(U,i);if(M.tableId!==s)continue;let V=M.recordId;(C==null||qB(C,V))&&A.send({id:V,timestamp:I,...M}),A.startTime=I}}else if(g){let I=[];for(let{key:U,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let V=pr(M);if(V.tableId!==s)continue;let z=V.recordId;if(C==null||qB(C,z)){let oe=V.getValue(i);if(I.push({id:z,timestamp:U,value:oe,version:V.version,type:V.type}),--g<=0)break}}catch(V){We.error("Error getting history entry",U,V)}for(let U=I.length;U>0;)A.send(I[--U]);I[0]&&(A.startTime=I[0].timestamp)}else if(!m.omitCurrent)for(let{key:I,value:U,version:M,localTime:V}of i.getRange({start:C??!1,end:C==null?void 0:[C,Qf.MAXIMUM_KEY],versions:!0}))U&&A.send({id:I,version:M,timestamp:V,value:U})}else{g&&!L&&(L=0);let I=this[Ws]?.localTime;if(We.trace("Subscription from",L,"from",C),L<I){let U=[],M=I;do{let V=u.get(M);if(V){m.omitCurrent=!0;let z=pr(V),oe=z.getValue(i);U.push({id:C,value:oe,timestamp:M,...z}),M=z.previousLocalTime}else break;g&&g--}while(M>L&&g!==0);for(let V=U.length;V>0;)A.send(U[--V]);A.startTime=I}!m.omitCurrent&&this.doesExist()&&A.send({id:C,version:this[Kf],timestamp:this[Ws]?.localTime,value:this})}return m.listener&&A.on("data",m.listener),A}doesExist(){return!!(this[ge]||this[jg])}async publish(m,A){this._writePublish(m,A)}_writePublish(m,A){let C=Un(this[me]),g=this[Ie]||null;Oa(g);let L=this[me];C.addWrite({key:g,store:i,entry:this[Ws],nodeName:L?.nodeName,validate:()=>{this.validate(m)},before:Pe.publish?.bind(this,L,g,m),beforeIntermediate:At.publish?.bind(this,L,g,m),commit:(I,U,M)=>{U===void 0&&h&&!E&&_E(),S(g,U?.value??null,U,U?.version||I,0,!0,L,U?.expiresAt,"message",!1,m)}})}validate(m){let A,C=a((g,L,I)=>{if(L.type&&g!=null)if(L.properties){typeof g!="object"&&(A||(A=[])).push(`Property ${I} must be an object${L.type?" ("+L.type+")":""}`);let U=L.properties;for(let M=0,V=U.length;M<V;M++){let z=U[M],oe=C(g[z.name],z,I+"."+z.name);oe&&(g[z.name]=oe)}}else switch(L.type){case"Int":(typeof g!="number"||g>>0!==g)&&(A||(A=[])).push(`Property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof g!="number"||!(Math.floor(g)===g&&Math.abs(g)<=9007199254740992))&&(A||(A=[])).push(`Property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof g!="number"&&(A||(A=[])).push(`Property ${I} must be a number`);break;case"ID":typeof g=="string"||g?.length>0&&g.every?.(U=>typeof U=="string")||(A||(A=[])).push(`Property ${I} must be a string, or an array of strings`);break;case"String":typeof g!="string"&&(A||(A=[])).push(`Property ${I} must be a string`);break;case"Boolean":typeof g!="boolean"&&(A||(A=[])).push(`Property ${I} must be a boolean`);break;case"Date":if(!(g instanceof Date)){if(typeof g=="string"||typeof g=="number")return new Date(g);(A||(A=[])).push(`Property ${I} must be a Date`)}break;case"Bytes":g instanceof Uint8Array||(A||(A=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(g)){if(L.elements)for(let U=0,M=g.length;U<M;U++){let V=g[U],z=C(V,L.elements,I+"[*]");z&&(g[U]=z)}}else(A||(A=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break}L.nullable===!1&&g==null&&(A||(A=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let g=0,L=p.length;g<L;g++){let I=p[g],U=C(m[I.name],I,I.name);U&&(m[I.name]=U)}if(A)throw new Qs.ClientError(A.join(". "))}getUpdatedTime(){return this[Kf]}wasLoadedFromSource(){return O?!!this[Zg]:void 0}static async addAttributes(m){let A=p.slice(0);for(let C of m){if(!C.name)throw new Qs.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new Qs.ClientError("Attribute names cannot include backticks or forward slashes");A.push(C)}return et({table:n,database:c,schemaDefined:_,attributes:A}),at.indexingOperation}static async removeAttributes(m){let A=p.filter(C=>!m.includes(C.name));return et({table:n,database:c,schemaDefined:_,attributes:A}),at.indexingOperation}static getRecordCount(m){let A=i.getStats().entryCount,C=5e3,g=1e3,L;A>C&&!m?.exactCount&&(L=g);let I=0;for(let{value:U}of i.getRange({start:!0,lazy:!0,limit:L}))U!=null&&I++;if(L){let U=I;I=0;for(let{value:Bt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:L}))Bt!=null&&I++;let M=L*2,V=(I+U)/M,z=Math.pow((I-U+1)/L/2,2)+V*(1-V)/M,oe=Math.max(Math.sqrt(z)*A,1),k=Math.round(V*A),Ee=Math.max(k-1.96*oe,0),Ne=Math.min(k+1.96*oe,A),ne=Math.pow(10,Math.round(Math.log10(oe)));return ne>k&&(ne=ne/10),I=Math.round(k/ne)*ne,{recordCount:I,estimatedRange:[Math.round(Ee),Math.round(Ne)]}}return{recordCount:I}}static updatedAttributes(){El(this,this)}static async deleteHistory(m=0){let A;for(let{key:C,value:g}of u.getRange({start:0,end:m}))await Bu(),pr(g).tableId===s&&(A=u.remove(C));await A}static async*getHistory(m=0,A=1/0){for(let{key:C,value:g}of u.getRange({start:m,end:A})){await Bu();let L=pr(g);L.tableId===s&&(yield{id:L.recordId,localTime:C,version:L.version,type:L.type,value:L.getValue(i),user:L.user})}}static async getHistoryOfRecord(m){let A=[],C=i.getEntry(m);if(!C)return A;let g=C.localTime,L=0;do{await Bu();let I=u.get(g);if(I){let U=pr(I);A.push({id:U.recordId,localTime:g,version:U.version,type:U.type,value:U.getValue(i),user:U.user}),g=U.previousLocalTime}else break}while(L<1e3&&g);return A.reverse()}static cleanup(){x?.remove()}}at.updatedAttributes();let gH=at.prototype;return gH[vB]=!0,d&&at.setTTLExpiration(d/1e3),B&&RH(),at;function Xu(W,m,A){let C;for(let g in r){let L=r[g],I=L.isIndexing,U=A?.[g],M=m?.[g];if(U===M&&!I)continue;C=!0;let V=(0,Fu.getIndexedValues)(M);if(V){PB&&L.prefetch(V.map(z=>({key:z,value:W})),HB);for(let z=0,oe=V.length;z<oe;z++)L.remove(V[z],W)}if(V=(0,Fu.getIndexedValues)(U),V){PB&&L.prefetch(V.map(z=>({key:z,value:W})),HB);for(let z=0,oe=V.length;z<oe;z++)L.put(V[z],W)}}return C}a(Xu,"updateIndices");function Oa(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>BB)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,Qf.writeKey)(W,_re,0)>BB)throw new Error("Primary key size is too large: "+W.length);return!0}a(Oa,"checkValidId");function SR(W,m,A,C,g){let L=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),A.transaction?.isDone)return g(null,W);let I=i.getEntry(W,A);return I&&m&&(I?.version>(m.lastModified||0)&&(m.lastModified=I.version),I?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=I.localTime)),g(I,W)},"whenPrefetched");return C?L():se>0?(se--,L()):new Promise((I,U)=>{se===0?(se--,i.prefetch([W],()=>{M(),V()})):(te.push(W),be.push(V),te.length>TH&&(se--,M()));function M(){if(te.length>0){let z=be;i.prefetch(te,()=>{se===-1?M():se++;for(let oe of z)oe()}),te=[],be=[],vt>2&&vt--}else se=vt,vt<SH&&vt++}a(M,"prefetch");function V(){try{I(L())}catch(z){U(z)}}a(V,"load")})}a(SR,"loadLocalRecord");function ju(W){if(!W)return;let m=W.role.permission;if(m.super_user)return dre;let A=m[c],C,g=A?.tables;if(g)return g[n];if(c==="data"&&(C=m[n])&&!C.tables)return C}a(ju,"getTablePermissions");function lE(W,m,A,C){if(O){let g;if(A.noCache?g=!0:(m?(!m.value||m.metadataFlags&(Vf|$f)||m.expiresAt&&m.expiresAt<Date.now())&&(g=!0):g=!0,kr(!g,"cache-hit",n)),g){let L=TR(W,m,A).then(I=>(I?.value?.[ge]&&We.error("Can not assign a record with a record property"),A&&(I?.version>(A.lastModified||0)&&(A.lastModified=I.version),A.lastRefreshed=Date.now()),I));if(A?.onlyIfCached||m?.value&&C?.allowStaleWhileRevalidate?.(m,W)){if(L.catch(I=>We.warn(I)),A?.onlyIfCached&&!C.doesExist())throw new Qs.ServerError("Entry is not cached",504);return}else return L}}}a(lE,"ensureLoadedFromSource");function Un(W){let m=W?.transaction;if(m){if(!m.open)throw new Error("Can not use a transaction that is not open");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 fi,m.lmdbDb=i,m;m=A}while(!0)}else return new pl}a(Un,"txnForContext");async function TR(W,m,A){let C=m?.metadataFlags,g=m?.version,L,I;if(!i.attemptLock(W,g,()=>{clearTimeout(I);let z=i.getEntry(W);!z||!z.value||z.metadataFlags&(Vf|$f)?L(TR(W,i.getEntry(W),A)):L(z)}))return new Promise(z=>{L=z,I=setTimeout(()=>{i.unlock(W,g)},lre)});let U=m?.value,M={requestContext:A,replacingRecord:U,replacingVersion:g,source:null,resourceCache:A?.resourceCache},V=A?.responseHeaders;return new Promise((z,oe)=>{let k;tR(Ge(M,async Ee=>{let Ne=performance.now(),ne,Bt,$t;try{for(let _r of at.sources)if(_r.get&&(!_r.get.reliesOnPrototype||_r.prototype.get)&&(M.source=_r,ne=await _r.get(W,M),ne))break;$t=C&Vf;let He=M.lastModified||$t&&g;Bt=$t||He>g||!U,He||(He=(0,Fu.getNextMonotonicTime)());let bs=performance.now()-Ne;if(br(bs,"cache-resolution",n),V&&V.append("Server-Timing",`cache-resolve;dur=${bs.toFixed(2)}`),Ee.timestamp=He,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==W&&(ne[t]=W)}k=!0,z({version:He,value:ne})}catch(He){He.message+=` while resolving record ${W} for ${n}`,U&&((He.code==="ECONNRESET"||He.code==="ECONNREFUSED"||He.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(He.statusCode===500||He.statusCode===502||He.statusCode===503||He.statusCode===504))?(z({version:g,value:U}),We.trace(He.message,"(returned stale record)")):oe(He),M.transaction.abort();return}if(A?.noCacheStore){M.transaction.abort();return}Un(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(He,bs)=>{if(bs?.version!==g)return;let _r=Xu(W,U,ne);ne?(At.put?.(M,W,ne),S(W,ne,bs,He,0,E&&Bt||null,M,M.expiresAt,"put",!!$t)):(At.delete?.(M,W),E||h?S(W,null,bs,He,0,E&&Bt||null,M,0,"delete",!!$t):i.remove(W,g))}})}),()=>{i.unlock(W,g)},Ee=>{i.unlock(W,g),k&&We.error("Error committing cache update",Ee)})})}a(TR,"getFromSource");function _E(){if(es!==pR&&(pR=es,(0,ji.getWorkerIndex)()===(0,ji.getWorkerCount)()-1)){if(Ju&&clearTimeout(Ju),!es)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let m=Math.ceil((Date.now()-W.getTime())/es)*es+W.getTime(),A=a(C=>{We.trace(`Scheduled next cleanup scan at ${new Date(C)}ms`),Ju=setTimeout(()=>F=F.then(async()=>{if(A(Math.max(C+es,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ju);return}We.trace(`Starting cleanup scan for ${n}`);try{let g=0;for(let{key:L,value:I,version:U,expiresAt:M}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))I===null&&!E&&U+ure<Date.now()?i.remove(L,U):M&&M+f<Date.now()&&(at.evict(L,I,U),g++),await Bu();We.trace(`Finished cleanup scan for ${n}, evicted ${g} entries`)}catch(g){We.trace(`Error in cleanup scan for ${n}:`,g)}}),Math.min(C-Date.now(),2147483647)).unref()},"startNextTimer");A(m)}}a(_E,"scheduleCleanup");function gR(){x=u?.addDeleteRemovalCallback(s,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(gR,"addDeleteRemoval");function RH(){(0,ji.getWorkerIndex)()===0&&setInterval(async()=>{try{let W=B.name,m=r[W];if(!m)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:A}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let C=i.getEntry(A);C?.value?.[W]<Date.now()&&at.evict(A,C.value,C.version),await Bu()}}catch(W){We.error("Error in evicting old records",W)}},cre).unref()}a(RH,"runRecordExpirationEviction")}function eR(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function HB(){}function fre(e){GB=e}function Wf(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Ere.test(e)&&(e+="Z"),new Date(e)):r?e:(0,zf.autoCast)(e)}function qB(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 s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function tR(e,t,r){return e?.then?e.then(t,r):t(e)}function qu(e,t){e[Ws]=t,e[ge]=t?.value??null,e[Kf]=t?.version}var Os,Yf,Fu,FB,Hu,ku,Qs,Gu,xu,We,Qf,ji,zf,ire,GB,ore,are,cre,ure,PB,lre,Kf,vB,Ws,jg,Zg,vu,Vf,$f,_re,BB,dre,BEe,Ere,Bu,df=Te(()=>{Os=D(y()),Yf=require("lmdb"),Fu=D(Er()),FB=require("lodash");ns();LE();Hu=D(ze()),ku=D(X());MB();Qs=D(j()),Gu=D(cn()),xu=D(_s());fe();Tl();We=D(G());ml();Ei();Qf=require("ordered-binary"),ji=D(Je());co();zf=D($());$a();_n();ire=new Uint8Array(9);ire[8]=192;ore=1e8,are=1e7,cre=6e4,ure=864e5;ku.initSync();PB=ku.get(Os.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),lre=1e4,Kf=Symbol.for("version"),vB=Symbol.for("incremental-update"),Ws=Symbol("entry"),jg=Symbol("is-saving"),Zg=Symbol("loaded-from-source"),vu={isNotification:!0,ensureLoaded:!1},Vf=1,$f=8,_re=Buffer.allocUnsafeSlow(8192),BB=1978,dre={read:!0,insert:!0,update:!0,delete:!0},BEe=(0,zf.convertToMS)(ku.get(Os.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Jf,"makeTable");a(eR,"attributesAsObject");a(HB,"noop");a(fre,"setServerUtilities");Ere=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Wf,"coerceType");a(qB,"isDescendantId");Bu=a(()=>new Promise(setImmediate),"rest");a(tR,"when");a(qu,"updateResource")});var Ce={};qe(Ce,{database:()=>gc,databases:()=>xe,dropDatabase:()=>op,dropTableMeta:()=>gre,getDatabases:()=>Es,getTables:()=>hre,onUpdatedTable:()=>Ng,readMetaDb:()=>Vu,resetDatabases:()=>mre,table:()=>et,tables:()=>mr});function hre(){return tE||Es(),mr||{}}function Es(){if(tE)return xe;tE=!0,Ra=new Map;let e=(0,Vt.getHdbBasePath)()&&(0,Fe.join)((0,Vt.getHdbBasePath)(),Dr.DATABASES_DIR_NAME),t=(0,Vt.get)(Dr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Vt.get)(Dr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Lr.existsSync)(e)?e:(0,Fe.join)((0,Vt.getHdbBasePath)(),Dr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Lr.existsSync)(e))for(let r of(0,Lr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Fe.basename)(r.name,".mdb");r.isFile()&&(0,Fe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Vu((0,Fe.join)(e,r.name),null,s)}if((0,Lr.existsSync)((0,ga.getBaseSchemaPath)())){for(let r of(0,Lr.readdirSync)((0,ga.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Fe.join)((0,ga.getBaseSchemaPath)(),r.name),n=(0,Fe.join)((0,ga.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Lr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Fe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Fe.join)(n,i.name);Vu((0,Fe.join)(s,i.name),(0,Fe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,Lr.existsSync)(n))for(let o of(0,Lr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Fe.extname)(o.name).toLowerCase()===".mdb"&&Vu((0,Fe.join)(n,o.name),(0,Fe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Fe.join)(c.path,(0,Fe.basename)(o+".mdb"));(0,Lr.existsSync)(u)&&Vu(u,o,r,null,!0)}}for(let r in xe){let s=Ra.get(r);if(s){let n=xe[r];r.includes("delete")&&Zr.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Zr.trace(`delete table class ${i}`),delete n[i])}else if(delete xe[r],r==="data"){for(let n in mr)delete mr[n];delete mr[rE]}}return Ra=null,xe}}function mre(){tE=!1;for(let[,e]of ci)e.needsDeletion=!0;Es();for(let[e,t]of ci)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ci.delete(e));return xe}function Vu(e,t,r=nR,s,n){let i=new rR.default(e,!1);try{let o=ci.get(e);o?o.needsDeletion=!1:(o=(0,jf.open)(i),ci.set(e,o));let c=new Zi.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Xf.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,Lr.existsSync)(s)&&(i.path=s,_=(0,jf.open)(i),_.isLegacy=!0):_=bl(o));let l=$B(r),d=l[rE],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 R=f.get(p);R||f.set(p,R={attributes:[]}),(S==null||h.is_hash_attribute)&&(R.primary=h),S!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let x of p)if(x.is_hash_attribute||x.isPrimaryKey){S=x;break}if(!S){Zr.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let R=l[E],b={},O=[],Y,Q,F=typeof S.audit=="boolean"?S.audit:(0,Vt.get)(Dr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(R)b=R.indices,O=R.attributes,R.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(Ta)||0)&&u.putSync(Ta,Y+1):(S.tableId=Y=u.get(Ta),Y||(Y=1),u.putSync(Ta,Y+1),u.putSync(S.key,S));let x=new Zi.default(!S.is_hash_attribute,S.is_hash_attribute);Q=Ll(o.openDB(S.key,x)),Q.rootStore=o,Q.tableId=Y}for(let x of p){x.attribute=x.name;try{if(!x.is_hash_attribute&&(x.indexed||x.attribute&&!x.name)){if(!b[x.name]){let be=new Zi.default(!x.is_hash_attribute,x.is_hash_attribute);b[x.name]=o.openDB(x.key,be)}let te=O.find(be=>be.name===x.name);te?O.splice(O.indexOf(te),1,x):O.push(x)}}catch(te){Zr.error("Error trying to update attribute",x,O,b,te)}}if(!R){R=YB(l,E,Jf({primaryStore:Q,auditStore:_,audit:F,expirationMS:K&&K*1e3,evictionMS:B&&B*1e3,trackDeletes:w,tableName:E,tableId:Y,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:b,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let x of iR)x(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function $B(e){let t=xe[e];if(t||(e==="data"?t=xe[e]=mr:e==="system"?Object.defineProperty(xe,"system",{value:t=Object.create(null),configurable:!0}):t=xe[e]=Object.create(null)),Ra&&!Ra.has(e)){let r=new Set;t[rE]=r,Ra.set(e,r)}return t}function YB(e,t,r){return e[t]=r,r}function gc({database:e,table:t}){e||(e=nR),Es();let r=$B(e),s=(0,Fe.join)((0,Vt.getHdbBasePath)(),Dr.DATABASES_DIR_NAME),n=(0,Vt.get)(Dr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,Vt.get)(Dr.CONFIG_PARAMS.STORAGE_PATH)||((0,Lr.existsSync)(s)?s:(0,Fe.join)((0,Vt.getHdbBasePath)(),Dr.LEGACY_DATABASES_DIR_NAME));let o=(0,Fe.join)(s,(i?t:e)+".mdb"),c=ci.get(o);if(!c){let u=new rR.default(o,!1);c=(0,jf.open)(u),ci.set(o,c)}return c}async function op(e){if(!xe[e])throw new Error("Schema does not exist");let t=xe[e];for(let r in t){let n=t[r].primaryStore.rootStore;ci.delete(n.path),n.status==="open"&&(await n.close(),await xB.remove(n.path))}if(e==="data"){for(let r in mr)delete mr[r];delete mr[rE]}delete xe[e]}function et({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=nR);let l=gc({database:t,table:e}),d=xe[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 R=new Zi.default(!1);for(let w of i)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let b,O;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let w=l.auditStore;w||(w=bl(l)),h=i.find(te=>te.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,Vt.get)(Dr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Zr.trace(`${e} table loading, opening primary store`);let K=new Zi.default(!1,!0),B=e+"/",x=Ll(l.openDB(B,K));x.rootStore=l,S=l.dbisDb=l.openDB(Xf.INTERNAL_DBIS_NAME,R),x.tableId=S.get(Ta),x.tableId||(x.tableId=1),S.putSync(Ta,x.tableId+1),h.tableId=x.tableId,f=YB(d,e,Jf({primaryStore:x,auditStore:w,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:x.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,b=!0,F(),S.put(B,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(Xf.INTERNAL_DBIS_NAME,R)),f.dbisDB=S;let Y=[];for(let{key:w,value:K}of S.getRange({start:!0})){let[B,x]=w.toString().split("/");if(x===""&&(x=K.name),x){if(B!==e)continue}else x=B;if(!i.find(be=>be.name===x)?.indexed&&K.indexed&&!K.isPrimaryKey){F(),b=!0,S.remove(w);let be=f.indices[B];be&&Y.push(be)}}let Q=[];try{for(let w of i||[]){let K=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:K,configurable:!0});let B=S.get(K);if(w.isPrimaryKey){if(B=B||S.get(K=e+"/")||{},o!==f.audit||(+r||void 0)!==(+B.expiration||void 0)||(+s||void 0)!==(+B.eviction||void 0)){let te=Object.assign({},B);typeof o=="boolean"&&(o&&f.enableAuditing(o),te.audit=o),r&&(te.expiration=+r),s&&(te.eviction=+s),b=!0,F(),S.put(K,te)}continue}B?.attribute&&!B.name&&(B.indexed=!0);let x=!B||B.type!==w.type||B.indexed!==w.indexed||JSON.stringify(B.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(B.elements)!==JSON.stringify(w.elements);if(w.indexed){let te=new Zi.default(!0,!1),be=l.openDB(K,te);(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<$u.workerData?.restartNumber)&&(b=!0,F(),B=S.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<$u.workerData?.restartNumber)&&(b=!0,w.lastIndexedKey=B?.lastIndexedKey||!1,w.indexingPID=process.pid,be.isIndexing=!0,Object.defineProperty(w,"dbi",{value:be}),Q.push(w)),S.put(K,w)),p[w.name]=be}else x&&(b=!0,F(),S.put(K,w))}}finally{O&&O()}if(b&&(f.schemaVersion++,f.updatedAttributes()),Zr.trace(`${e} table loading, running index`),Q.length>0||Y.length>0?f.indexingOperation=Tre(f,Q,Y):b&&Zf.signalSchemaChange(new eE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,b)for(let w of iR)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),Zr.trace(`${e} table loaded`),f;function F(){O||l.transactionSync(()=>({then(w){O=w}}))}a(F,"startTxn")}async function Tre(e,t,r){try{let s=e.schemaVersion;await Zf.signalSchemaChange(new eE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=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++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,kB.getIndexedValues)(l[h]);if(p)for(let S=0,R=p.length;S<R;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,Zr.error(f)}),$u.workerData&&$u.workerData.restartNumber!==VB.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>pre?await n:u>Sre&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await Zf.signalSchemaChange(new eE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Zr.error("Error in indexing",s)}}function gre({table:e,database:t}){let r=gc({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function Ng(e){iR.push(e)}var Vt,Xf,jf,Fe,Lr,ga,Zi,rR,Dr,xB,sR,kB,Zf,eE,$u,Zr,VB,nR,rE,mr,xe,Ta,iR,tE,ci,Ra,pre,Sre,fe=Te(()=>{Vt=D(X()),Xf=D(ze()),jf=require("lmdb"),Fe=require("path"),Lr=require("fs"),ga=D(ve());df();Zi=D(Dl()),rR=D(Ml()),Dr=D(y()),xB=D(require("fs-extra")),sR=require("../../index"),kB=D(Er()),Zf=D(cn()),eE=D(_s()),$u=require("worker_threads"),Zr=D(G()),VB=D(Je());co();$a();nR="data",rE=Symbol("defined-tables");(0,Vt.initSync)();mr=Object.create(null),xe=Object.create(null);(0,sR._assignPackageExport)("databases",xe);(0,sR._assignPackageExport)("tables",mr);Ta=Symbol.for("next-table-id"),iR=[],ci=new Map;a(hre,"getTables");a(Es,"getDatabases");a(mre,"resetDatabases");a(Vu,"readMetaDb");a($B,"ensureDB");a(YB,"setTable");a(gc,"database");a(op,"dropDatabase");a(et,"table");pre=1e3,Sre=10;a(Tre,"runIndexing");a(gre,"dropTableMeta");a(Ng,"onUpdatedTable")});var $=T((YEe,iH)=>{"use strict";var ui=require("path"),JB=require("fs-extra"),lr=G(),KB=require("fs-extra"),sE=require("os"),Rre=require("net"),Are=require("recursive-iterator"),Qe=y(),Ore=ZR(),WB=require("papaparse"),nE=require("moment"),{inspect:Nre}=require("util"),QB=require("is-number"),$Ee=require("lodash"),bre=require("minimist"),yre=require("https"),Ire=require("http"),{hdb_errors:iE}=j(),wre=/^((\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)))$/,XB=require("util").promisify(setTimeout),Cre=100,Lre=5,Dre="",Ure=4,zB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};iH.exports={isEmpty:Ur,isEmptyOrZeroLength:zs,arrayHasEmptyValues:vre,arrayHasEmptyOrZeroLengthValues:Bre,buildFolderPath:Hre,isBoolean:jB,errorizeMessage:Mre,stripFileExtension:Fre,autoCast:Gre,autoCastJSON:ZB,autoCastJSONDeep:aR,removeDir:xre,compareVersions:kre,isCompatibleDataVersion:Vre,escapeRawValue:$re,unescapeValue:Yre,stringifyProps:Kre,timeoutPromise:Qre,isClusterOperation:Jre,getClusterUser:jre,checkGlobalSchemaTable:Xre,getHomeDir:tH,getPropsFilePath:Wre,promisifyPapaParse:Zre,removeBOM:rH,createEventPromise:ese,checkProcessRunning:tse,checkSchemaTableExist:rse,checkSchemaExists:sH,checkTableExists:nH,getStartOfTomorrowInSeconds:sse,getLimitKey:nse,isObject:qre,isNotEmptyAndHasValue:Pre,autoCasterIsNumberCheck:eH,backtickASTSchemaItems:ise,isPortTaken:zre,createForkArgs:ose,autoCastBoolean:ase,async_set_timeout:XB,getTableHashAttribute:cse,doesSchemaExist:use,doesTableExist:lse,stringifyObj:_se,ms_to_time:dse,changeExtension:fse,getEnvCliRootPath:cR,noBootFile:Ese,httpRequest:hse,transformReq:mse,convertToMS:pse,PACKAGE_ROOT:Qe.PACKAGE_ROOT};function Mre(e){return e instanceof Error?e:new Error(e)}a(Mre,"errorizeMessage");function Ur(e){return e==null}a(Ur,"isEmpty");function Pre(e){return!Ur(e)&&(e||e===0||e===""||jB(e))}a(Pre,"isNotEmptyAndHasValue");function zs(e){return Ur(e)||e.length===0||e.size===0}a(zs,"isEmptyOrZeroLength");function vre(e){if(Ur(e))return!0;for(let t=0;t<e.length;t++)if(Ur(e[t]))return!0;return!1}a(vre,"arrayHasEmptyValues");function Bre(e){if(zs(e))return!0;for(let t=0;t<e.length;t++)if(zs(e[t]))return!0;return!1}a(Bre,"arrayHasEmptyOrZeroLengthValues");function Hre(...e){try{return e.join(ui.sep)}catch{console.error(e)}}a(Hre,"buildFolderPath");function jB(e){return Ur(e)?!1:e===!0||e===!1}a(jB,"isBoolean");function qre(e){return Ur(e)?!1:typeof e=="object"}a(qre,"isObject");function Fre(e){return zs(e)?Dre:e.slice(0,-Ure)}a(Fre,"stripFileExtension");function Gre(e){return Ur(e)||e===""||typeof e!="string"?e:zB[e]!==void 0?zB[e]:eH(e)===!0?Number(e):wre.test(e)?new Date(e):e}a(Gre,"autoCast");function ZB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(ZB,"autoCastJSON");function aR(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=aR(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=aR(r);s!==r&&(e[t]=s)}return e}else return ZB(e)}a(aR,"autoCastJSONDeep");function eH(e){if(e.startsWith("0.")&&QB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&QB(e))}a(eH,"autoCasterIsNumberCheck");async function xre(e){if(zs(e))throw new Error(`Directory path: ${e} does not exist`);try{await KB.emptyDir(e),await KB.remove(e)}catch(t){throw lr.error(`Error removing files in ${e} -- ${t}`),t}}a(xre,"removeDir");function kre(e,t){if(zs(e)){lr.info("Invalid current version sent as parameter.");return}if(zs(t)){lr.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").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(kre,"compareVersions");function Vre(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Vre,"isCompatibleDataVersion");function $re(e){if(Ur(e))return e;let t=String(e);return t==="."?Qe.UNICODE_PERIOD:t===".."?Qe.UNICODE_PERIOD+Qe.UNICODE_PERIOD:t.replace(Qe.FORWARD_SLASH_REGEX,Qe.UNICODE_FORWARD_SLASH)}a($re,"escapeRawValue");function Yre(e){if(Ur(e))return e;let t=String(e);return t===Qe.UNICODE_PERIOD?".":t===Qe.UNICODE_PERIOD+Qe.UNICODE_PERIOD?"..":String(e).replace(Qe.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Yre,"unescapeValue");function Kre(e,t){if(Ur(e))return lr.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+sE.EOL}!zs(s)&&s[0]===";"?r+=" "+s+n+sE.EOL:zs(s)||(r+=s+"="+n+sE.EOL)}catch{lr.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Kre,"stringifyProps");function tH(){let e;try{e=sE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(tH,"getHomeDir");function Wre(){let e=ui.join(tH(),Qe.HDB_HOME_DIR_NAME,Qe.BOOT_PROPS_FILE_NAME);return JB.existsSync(e)||(e=ui.join(__dirname,"../","hdb_boot_properties.file")),e}a(Wre,"getPropsFilePath");function Qre(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Qre,"timeoutPromise");async function zre(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=Rre.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(zre,"isPortTaken");function Jre(e){try{return Qe.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){lr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Jre,"isClusterOperation");function Xre(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return iE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return iE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Xre,"checkGlobalSchemaTable");function jre(e,t){if(Ur(t)){lr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Ur(e)||zs(e)){lr.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){lr.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){lr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(jre,"getClusterUser");function Zre(){WB.parsePromise=function(e,t,r){return new Promise(function(s,n){WB.parse(e,{header:!0,transformHeader:rH,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Zre,"promisifyPapaParse");function rH(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(rH,"removeBOM");function ese(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;lr.info(`Got cluster status event response: ${Nre(n)}`);try{i.cancel()}catch{lr.error("Error trying to cancel timeout.")}s(n)})})}a(ese,"createEventPromise");async function tse(e){let t=!0,r=0;do await XB(Cre*r++),(await Ore.findPs(e)).length>0&&(t=!1);while(t&&r<Lre);if(t)throw new Error(`process ${e} was not started`)}a(tse,"checkProcessRunning");function rse(e,t){let r=sH(e);if(r)return r;let s=nH(e,t);if(s)return s}a(rse,"checkSchemaTableExist");function sH(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return iE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(sH,"checkSchemaExists");function nH(e,t){let{getDatabases:r}=(fe(),Z(Ce));if(!r()[e][t])return iE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(nH,"checkTableExists");function sse(){let e=nE().utc().add(1,Qe.MOMENT_DAYS_TAG).startOf(Qe.MOMENT_DAYS_TAG).unix(),t=nE().utc().unix();return e-t}a(sse,"getStartOfTomorrowInSeconds");function nse(){return nE().utc().format("DD-MM-YYYY")}a(nse,"getLimitKey");function ise(e){try{let t=new Are(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){lr.error("Got an error back ticking items."),lr.error(t)}}a(ise,"backtickASTSchemaItems");function ose(e){return[e]}a(ose,"createForkArgs");function ase(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(ase,"autoCastBoolean");function cse(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(cse,"getTableHashAttribute");function use(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a(use,"doesSchemaExist");function lse(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a(lse,"doesTableExist");function _se(e){try{return JSON.stringify(e)}catch{return e}}a(_se,"stringifyObj");function dse(e){let t=nE.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(dse,"ms_to_time");function fse(e,t){let r=ui.basename(e,ui.extname(e));return ui.join(ui.dirname(e),r+t)}a(fse,"changeExtension");function cR(){if(process.env[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=bre(process.argv);if(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(cR,"getEnvCliRootPath");var oR;function Ese(){if(oR)return oR;let e=cR();cR()&&JB.pathExistsSync(ui.join(e,Qe.HDB_CONFIG_FILE))&&(oR=!0)}a(Ese,"noBootFile");function hse(e,t){let r;return e.protocol==="http:"?r=Ire:r=yre,new Promise((s,n)=>{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",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(hse,"httpRequest");function mse(e){if(!e.schema&&!e.database){e.schema=Qe.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(mse,"transformReq");function pse(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(pse,"convertToMS")});var X=T((WEe,cH)=>{"use strict";var uR=require("fs-extra"),Ns=require("path"),oH=require("os"),Sse=require("properties-reader"),Yu=G(),eo=$(),ee=y(),oE=gr(),Tse="Error initializing environment manager",aE="BOOT_PROPS_FILE_PATH",aH=!1,gse={[ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ln={};cH.exports={BOOT_PROPS_FILE_PATH:aE,getHdbBasePath:Rse,setHdbBasePath:Ase,get:Ose,initSync:bse,setProperty:he,initTestEnvironment:yse};function Rse(){return Ln[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(Rse,"getHdbBasePath");function Ase(e){Ln[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Ase,"setHdbBasePath");function Ose(e){let t=oE.getConfigValue(e);return t===void 0?Ln[e]:t}a(Ose,"get");function he(e,t){gse[e]&&(Ln[e]=t),oE.updateConfigObject(e,t)}a(he,"setProperty");function Nse(){let e;try{e=eo.getPropsFilePath(),uR.accessSync(e,uR.constants.F_OK|uR.constants.R_OK),aH=!0;let t=Sse(e);return Ln[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),Ln[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ln[aE]=e,!0}catch{return Yu.trace(`Environment manager found no properties file at ${e}`),!1}}a(Nse,"doesPropFileExist");function bse(e=!1){try{(aH||Nse()||eo.noBootFile())&&(oE.initConfig(e),Ln[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=oE.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Yu.error(Tse),Yu.error(t),console.error(t),process.exit(1)}}a(bse,"initSync");function yse(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Ns.join(__dirname,"../../","unitTests");Ln[aE]=Ns.join(u,"hdb_boot_properties.file"),he(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ns.join(u,"settings.test")),he(ee.HDB_SETTINGS_NAMES.INSTALL_USER,oH.userInfo()?oH.userInfo().username:void 0),he(ee.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Ns.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.HDB_SETTINGS_NAMES.CERT_KEY,Ns.join(u,"envDir","utility","keys","certificate.pem")),he(ee.CONFIG_PARAMS.TLS_PRIVATEKEY,Ns.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.CONFIG_PARAMS.TLS_CERTIFICATE,Ns.join(u,"envDir","utility","keys","certificate.pem")),he(ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),he(ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ns.join(u,"envDir","log")),he(ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),he(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ns.join(u,"envDir")),he(ee.CONFIG_PARAMS.STORAGE_PATH,Ns.join(u,"envDir")),he(ee.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,eo.isEmpty(n)?!0:n),he(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,eo.isEmpty(n)?!0:n),he(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,eo.isEmpty(i)?!1:i),he(ee.CONFIG_PARAMS.HTTP_CORS,eo.isEmpty(i)?!1:i),he(ee.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),he(ee.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ns.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),he(ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,eo.isEmpty(c)?!1:c),o&&(he("CORS_ACCESSLIST",o),he(ee.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(he(ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),he(ee.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(he(ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),he(ee.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(he(ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),he(ee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${aE}. Please check your boot props and settings files`;Yu.fatal(r),Yu.error(t)}}a(yse,"initTestEnvironment")});var Kse=T(zu=>{var{isMainThread:Ise,parentPort:Qu,threadId:Ku}=require("worker_threads"),{Socket:wse,createServer:Cse}=require("net"),{createServer:Lse,IncomingMessage:Dse}=require("http"),{createServer:Use}=require("https"),{readFileSync:Aa}=require("fs"),Js=G(),Rt=X(),Dn=y(),{server:uE}=(hr(),Z(hi)),{WebSocketServer:Mse}=require("ws"),{createServer:Pse}=require("tls"),{getTicketKeys:vse,restartNumber:Bse}=Je(),{Headers:dH}=(bd(),Z(WU)),{recordAction:Wu,recordActionBinary:Hse}=(_n(),Z(wc)),{Request:fH,node_request_key:zEe,createReuseportFd:uH}=(Mg(),Z(rB));if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Bse<=1&&Js.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:JEe,CONFIG_PARAMS:qse}=Dn;Rt.initSync();var Fse=Rt.get(qse.HTTP_SESSIONAFFINITY),Xs={};zu.registerServer=hR;zu.httpServer=mR;zu.deliverSocket=ER;zu.startServers=EH;uE.http=mR;uE.request=Vse;uE.socket=$se;uE.ws=Yse;var lR=[],_R=[],Gse,to={},cE={},xse=[],dR=[];function EH(){return xg().loadRootComponents(!0).then(()=>{Qu?.on("message",t=>{let{port:r,fd:s,data:n}=t;if(s)ER(s,r,n);else if(t.requestId)kse(t);else if(t.type===Dn.ITC_EVENT_TYPES.SHUTDOWN){Js.trace("received shutdown request",Ku);for(let i in Xs){let o=Xs[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),Js.info("Closed all http connections",i,Ku)},4e3).unref()),o.close?.(()=>{clearInterval(c),setTimeout(()=>{console.log("forced close server",i,Ku),o.cantCleanupProperly||Js.warn("Had to forcefully exit the thread",Ku),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(uH&&!Fse)for(let t in Xs){let r=Xs[t],s;try{s=uH(+t,"::")}catch(n){console.error(`Unable to bind to port ${t}`,n);continue}e.push(new Promise((n,i)=>{r.listen({fd:s},()=>{n(),Js.trace("Listening on port "+t,Ku)}).on("error",i)}))}Promise.all(e).then(()=>{Qu?.postMessage({type:Dn.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(EH,"startServers");Ise||EH();function ER(e,t,r){let s=e?.read?e:new wse({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=Xs[t];if(n.isSecure&&(s.startTime=performance.now()),n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Xs[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(Js.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(ER,"deliverSocket");var lH=new Map;function kse(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=lH.get(n),r){case"connection":i=ER(void 0,t),lH.set(n,i),i.write=(c,u,_)=>(Qu.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(Qu.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Qu.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"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(kse,"proxyRequest");function hR(e,t){+t||(t=parseInt(Rt.get(Dn.CONFIG_PARAMS.HTTP_PORT),10));let r=Xs[t];if(r){let s=r.lastServer||r;s.off("unhandled",_H),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else Xs[t]=e;e.on("unhandled",_H)}a(hR,"registerServer");function hH(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=[],Rt.get(Dn.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Rt.get(Dn.CONFIG_PARAMS.HTTP_PORT),secure:Rt.get(Dn.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Rt.get(Dn.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Rt.get(Dn.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),t}a(hH,"getPorts");function mR(e,t){for(let{port:r,secure:s}of hH(t))mH(r,s,t?.isOperationsServer),typeof e=="function"?dR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):hR(e,r),cE[r]=fR(dR,r),Gse=fR(xse,r)}a(mR,"httpServer");function mH(e,t,r){if(!to[e]){let s=r?"operationsApi_network":"http",n={keepAliveTimeout:Rt.get(s+"_keepAliveTimeout"),headersTimeout:Rt.get(s+"_headersTimeout"),requestTimeout:Rt.get(s+"_timeout")};if(t){s=r?"operationsApi_":"";let i=Rt.get(s+"tls_privateKey"),o=Rt.get(s+"tls_certificate"),c=Rt.get(s+"tls_certificateAuthority");Object.assign(n,{key:Aa(i),cert:Aa(o)+(c?`
28
+ `+mg.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(kee,"getServerOptions");function Vee(){let e=As.get(bn.OPERATIONSAPI_NETWORK_CORS),t=As.get(bn.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Fee)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(Vee,"getCORSOpts");function $ee(){return As.get(bn.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Hee}a($ee,"getHeaderTimeoutConfig")});var q0=T((vfe,H0)=>{"use strict";var{decode:Yee}=require("msgpackr"),{isMainThread:Ufe,parentPort:Kee,threadId:Mfe}=require("worker_threads"),C0=dt(),yn=Ve(),Wee=y(),wu=G(),I0=X(),L0=y();Je();var Qee=on(),{recordAction:zee,recordActionBinary:Jee}=(_n(),Z(wc)),{publishToStream:Xee}=C0,Pfe={durable:yn.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:yn.WORK_QUEUE_CONSUMER_NAMES.deliver_group},jee,Zee,ete,D0,U0;H0.exports={initialize:M0,workQueueListener:B0,setSubscription:tte,setIgnoreOrigin:ste,getDatabaseSubscriptions:rte};async function M0(){U0=!0,wu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await C0.getNATSReferences();jee=e,Zee=e.info.server_name,ete=t,D0=r}a(M0,"initialize");var If=new Map;function tte(e,t,r){let s=If.get(e);s||If.set(e,s=new Map),s.set(t,r),U0||M0().then(B0)}a(tte,"setSubscription");function rte(){return If}a(rte,"getDatabaseSubscriptions");var P0;function ste(e){P0=e}a(ste,"setIgnoreOrigin");var v0=100,w0=new Array(v0),yf=0;async function B0(){let t=await(await D0.consumers.get(yn.WORK_QUEUE_CONSUMER_NAMES.stream_name,yn.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();Kee?.on("message",async r=>{let{type:s}=r;s===L0.ITC_EVENT_TYPES.SHUTDOWN&&t.close()});for await(let r of t)await w0[yf],w0[yf]=nte(r).catch(s=>{wu.error(s)}),++yf>=v0&&(yf=0)}a(B0,"workQueueListener");async function nte(e){let t=Yee(e.data);zee(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=I0.get(Wee.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(yn.MSG_HEADERS.TRANSACTED_NODES)&&r.values(yn.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(yn.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!P0),Jee(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(yn.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;wu.trace("processing message:",o,c,_,(l?"records: "+l.map(O=>O?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),wu.trace(`messageProcessor nats msg id: ${e.headers.get(yn.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:R}=f||{},b=If.get(c)?.get(_);if(!b)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,b.send(t);else if(l.length===1&&!u)b.send({type:pg(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:R});else{let O=l.map((Y,Q)=>({type:pg(o),value:Y,expiresAt:E,id:d?.[Q],table:_}));for(;u;)O.push({type:pg(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;b.send({type:"transaction",writes:O,table:_,timestamp:p,onCommit:h,user:S,nodeName:R})}I0.get(L0.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Xee(e.subject.split(".").slice(0,-1).join("."),Qee.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){wu.error(o)}e.ack()}a(nte,"messageProcessor");function pg(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(pg,"convertOperation")});var Og={};qe(Og,{disableNATS:()=>ote,publishToStream:()=>Uf,setNATSReplicator:()=>Sg,setPublishToStream:()=>ate,setSubscription:()=>Ag,start:()=>ite});function ite(){Cf.default.get(Lf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&ute()}function ote(e=!0){V0=e}function ate(e,t){Uf=e,Ag=t}function ute(){if(V0||process.env._DISABLE_NATS)return;let e=hs(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];Sg(n,r,i)}}Ng((r,s)=>{Sg(r.tableName,r.databaseName,r),s&&Y0(r)}),!F0&&(F0=!0)}function Sg(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends Nt{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ie],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ie]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ie],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ie]})}static defineSchema(i){Y0(i)}static subscribe(){let i=new ss;return Ag(t,e,i),i}static subscribeOnThisThread(i){return i<cte}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new wf(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=$0;return i}a(s,"getNATSTransaction")}function Y0(e){let t=Cf.default.get(Lf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Uf(`${gg.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Rg.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 G0,gg,Rg,x0,k0,Cf,Lf,Df,V0,Uf,Ag,cte,$0,F0,wf,Tg,K0=Te(()=>{fe();is();G0=D(dt()),gg=D(Ve()),Rg=D(on());qa();x0=D(q0()),k0=D(Er()),Cf=D(X()),Lf=D(y()),Df=D(G());a(ite,"start");a(ote,"disableNATS");Uf=G0.publishToStream,Ag=x0.setSubscription;a(ate,"setPublishToStream");cte=2;a(ute,"assignReplicationSource");a(Sg,"setNATSReplicator");a(Y0,"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 s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=Cf.default.get(Lf.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,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||(Df.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,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&&s.push(Uf(`${gg.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,Rg.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw Df.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},Tg=class extends wf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,k0.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};$0=new Tg});async function Q0({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await bg.getResource(e,{});n=new Ig(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await bg.get(e);i&&i.delete()}n=new Pf(e,t)}return n}function yg(){return Mf++,Mf>65500&&(Mf=1),Mf}var W0,ha,bg,Mf,Pf,Ig,z0=Te(()=>{fe();su();W0=D(Er()),ha=D(G());Ei();bg=et({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(Q0,"getSession");Mf=1;a(yg,"getNextMessageId");Pf=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");let l=!1,d;if((_.endsWith("+")||_.endsWith("#"))&&(l=!0,_.endsWith("+")&&(d=!0),_=_.slice(0,_.length-1)),_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(_.indexOf("#")>-1||_.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let f=this.subscriptions.find(b=>b.topic===n);f&&(f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1));let E={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:i,isCollection:l,shallowWildcard:d,url:""};o&&(0,ha.trace)("Resuming subscription from",n,"from",o);let h=ti.getMatch(_);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);E.url=h.relativeURL;let p=h.path,S=h.Resource,R=await Ge(E,async()=>{let b=await S.subscribe(E);if(!b)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!b[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let O of b)try{let Y;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"||s&&!s(O))continue;r?(O.topic=n,Y=this.needsAcknowledge(O)):(O.acknowledge?.(),Y=yg());let Q=O.id;Array.isArray(Q)&&(Q=Jo(Q)),Q==null&&(Q=""),this.listener(p+"/"+Q,O.value,Y,t)}catch(Y){(0,ha.warn)(Y)}})(),b});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=yg();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(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user,t.async=!0,t.authorize=!0;let i=ti.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return Ge(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},Ig=class extends Pf{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{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,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=yg(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,ha.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,W0.getNextMonotonicTime)()),(0,ha.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),bg.put(this.sessionRecord)),t.qos}}});var Cg={};qe(Cg,{start:()=>_te});async function _te({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:_,onClose:l}=j0(o,(d,f)=>{if(o.send(d),f&&o._socket.writableNeedDrain)return new Promise(E=>this._socket.once("drain",E))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",_),o.on("close",l),o.on("error",d=>{(0,jr.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;lte&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,Z0.getSuperUser)());let{onMessage:u,onClose:_}=j0(o,l=>o.write(l),null,c,i);o.on("data",u),o.on("close",_),o.on("error",l=>{(0,jr.info)("Socket error",l)})},{port:t,securePort:s})}function j0(e,t,r,s,n){X0||(X0=!0,Ic(d=>{vf>0&&d.push({metric:"mqtt-connections",connections:vf,byThread:!0})}));let i;vf++;let o,c={protocolVersion:4},u=(0,Bf.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){vf--,i||(i=!0,o?.disconnect(),Vr(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await ut.getUser(d.username,d.password.toString()),(0,wg.get)(In.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&J0.notify({username:s.username,status:In.AUTH_AUDIT_STATUS.SUCCESS,type:In.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,wg.get)(In.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&J0.error({username:s.username,status:In.AUTH_AUDIT_STATUS.FAILURE,type:In.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return Vr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=Q0({user:s,...d}),o=await o}catch(O){return(0,jr.error)(O),Vr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:O.code||5,returnCode:O.code||128})}Vr(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((O,Y,Q,F)=>{try{let w=O.indexOf("/",1),K=w>0?O.slice(0,w):O;f({cmd:"publish",topic:O,payload:E(Y),messageId:Q||Math.floor(Math.random()*1e8),qos:F.qos},K)}catch(w){(0,jr.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let O of d.subscriptions){let Y;try{Y=(await o.addSubscription(O,O.qos>=1)).qos||0}catch(Q){(0,jr.error)(Q),Y=128}h.push(Y)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let O of d.unsubscriptions)o.removeSubscription(O);f({cmd:"unsuback",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=na(r?.headers.get?.("content-type"))),R=d.payload?.length>0?S(d.payload):void 0,b;try{b=await o.publish(d,R)}catch(O){(0,jr.warn)(O),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:b===!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(),Vr(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,jr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,Bf.generate)(h,c);t(S),yr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return si(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Bf,Z0,wg,In,jr,J0,lte,X0,vf,eB=Te(()=>{Bf=require("mqtt-packet");z0();Z0=D(kr());Xo();_n();hr();wg=D(X()),In=D(y()),jr=D(G()),J0=(0,jr.loggerWithTag)("auth-event"),lte=!0;a(_te,"start");vf=0;a(j0,"onSocket")});var rB={};qe(rB,{Request:()=>Lg,createReuseportFd:()=>Hf});var tB,Lg,Dg,Ug,Hf,Mg=Te(()=>{tB=require("os"),Lg=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let s=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=s,this.headers=new Ug(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get body(){return this.#e||(this.#e=new Dg(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},Dg=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},Ug=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,s]of this)t(s,r,this)}};(0,tB.platform)()!="win32"&&(Hf=require("node-unix-socket").createReuseportFd)});var Hd={};qe(Hd,{component_errors:()=>ma,loadComponent:()=>qf,loadComponentDirectories:()=>_B,setErrorReporter:()=>hte});function _B(e,t){t&&(vg=t),e&&(Bg=e);let r=[];if((0,Os.existsSync)(Pg)){let n=(0,Os.readdirSync)(Pg,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Rt.join)(Pg,o);r.push(qf(c,vg,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(qf(s,vg,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{lB=!0})}function hte(e){Du=e}async function qf(e,t,r,s,n,i){if(!nB.has(e)){nB.set(e,!0),n&&(Bg=n);try{let o;s&&(ma=new Map);let c=(0,Rt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Os.existsSync)(c)?o=s?(0,uB.getConfigObj)():(0,iB.parseDocument)((0,Os.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=Hg;let u=[],_=s;for(let l in o){let d=o[l];if(ma.set(s?l:(0,Rt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let b=e,O;for(;!(0,Os.existsSync)(O=(0,Rt.join)(b,"node_modules",l));)if(b=(0,Rt.dirname)(b),b.length<(0,cB.getHdbBasePath)().length){O=null;break}if(O)f=await qf(O,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Ete[l];if(!f)continue;u.push(f);let h=a(b=>(b.origin=r,et(b)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,R=!p?.https&&p?.port;if(Cu.isMainThread&&(f=await f.startOnMainThread?.({server:ut,ensureTable:h,port:R,securePort:S,resources:t,...d})||f,s&&p))for(let b of[R,S])try{if(+b&&!sB.includes(b)){let O=qg.get(Fg.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);O&&Lu.default.warn("Session affinity is not recommended and may cause memory leaks"),(O||!Hf)&&(sB.push(b),R0(b,O))}}catch(O){console.error("Error listening on socket",b,O,l)}if(t.isWorker&&(f=await f.start?.({server:ut,ensureTable:h,port:R,securePort:S,resources:t,...d})||f),Bg.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,aB.handleHDBError)("Can not reference parent directories");let b=(0,Rt.join)(e,d.files).replace(/\\/g,"/"),O=b.indexOf("/*");if(O>-1&&d.files!==Hg[l]?.files&&!(0,Os.existsSync)(b.slice(0,O)))throw new Error(`The path '${b.slice(0,O)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let Y of await(0,oB.default)(b,{onlyFiles:!1,objectMode:!0})){let{path:Q,dirent:F}=Y;_=!0;let w=(0,Rt.relative)(e,Q).replace(/\\/g,"/");if(d.root){let x=d.root;if(x.startsWith("/")&&(x=x.slice(1)),x.endsWith("/")&&(x=x.slice(0,-1)),x+="/",w.startsWith(x))w=w.slice(x.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${w}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`)}let K=(0,Rt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+K+B.slice(2):B==="."?"/"+K:"/"+K+"/"+B,B+=(B.endsWith("/")?"":"/")+w;try{if(F.isFile()){let x=await fte(Q);Cu.isMainThread&&await f.setupFile?.(x,B,Q,t),t.isWorker&&await f.handleFile?.(x,B,Q,t)}else Cu.isMainThread&&await f.setupDirectory?.(B,Q,t),t.isWorker&&await f.handleDirectory?.(B,Q,t)}catch(x){x.message=`Could not load ${F.isFile()?"file":"directory"} '${Q}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${x.message}`,Du?.(x),((0,pa.getWorkerIndex)()===0?console:Lu.default).error(x),t.set(d.path||"/",new Uu(x)),ma.set(s?l:(0,Rt.basename)(e),x.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,Rt.basename)(e)}' due to: ${h.message}`,Du?.(h),((0,pa.getWorkerIndex)()===0?console:Lu.default).error(h),t.set(d.path||"/",new Uu(h),null,!0),ma.set(s?l:(0,Rt.basename)(e),h.message)}}if(Cu.isMainThread&&!lB&&i&&(0,pa.watchDir)(e,async()=>_B()),o.extensionModule)return await Al((0,Rt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;Du?.(new Error(l)),((0,pa.getWorkerIndex)()===0?console:Lu.default).error(l),ma.set((0,Rt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,Du?.(o),t.set("",new Uu(o))}}}var Os,Rt,Cu,iB,qg,Fg,oB,pa,Lu,aB,cB,dte,uB,fte,Pg,Bg,lB,vg,ma,Ete,Hg,sB,nB,Du,Uu,qd=Te(()=>{Os=require("fs"),Rt=require("path"),Cu=require("worker_threads"),iB=require("yaml"),qg=D(X()),Fg=D(y());xA();YA();KA();IP();_0();m0();oB=D(require("fast-glob")),pa=D(Je()),Lu=D(G());FE();hr();aB=D(j());is();fe();A0();cB=D(X()),dte=D(y0());Cd();K0();eB();uB=D(Rr());Mg();({readFile:fte}=Os.promises),Pg=qg.get(Fg.CONFIG_PARAMS.COMPONENTSROOT),Bg=new Map,ma=new Map;a(_B,"loadComponentDirectories");Ete={REST:jd,rest:jd,graphqlSchema:qE,jsResource:xE,fastifyRoutes:_g,login:VE,static:dg,operationsApi:dte,customFunctions:{},http:{},clustering:Og,authentication:nu,mqtt:Cg},Hg={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(Hg,"static",{value:{files:"web/**"}});sB=[],nB=new Map;a(hte,"setErrorReporter");a(qf,"loadComponent");Uu=class extends Nt{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 xg=T((_Ee,fB)=>{var{isMainThread:dB}=require("worker_threads"),{getTables:mte}=(fe(),Z(Ce)),{loadComponentDirectories:pte,loadComponent:Ste}=(qd(),Z(Hd)),{resetResources:Tte}=(su(),Z(KU)),gte=oT(),Rte=Rr(),{dirname:Ate}=require("path"),{getConnection:Ote}=dt(),Nte=X(),bte=y(),Gg=new Map;async function yte(e=!1){!dB&&Nte.get(bte.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Ote();try{dB&&await gte()}catch(s){console.error(s)}let t=Tte();mte(),t.isWorker=e,await Ste(Ate(Rte.getConfigFilePath()),t,"hdb",!0,Gg),await pte(Gg,t);let r=[];for(let[s]of Gg)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(yte,"loadRootComponents");fB.exports.loadRootComponents=yte});var Je=T((fEe,ai)=>{"use strict";var{Worker:Ite,MessageChannel:wte,parentPort:Ws,isMainThread:Kg,threadId:Cte,workerData:wn}=require("worker_threads"),{PACKAGE_ROOT:Lte}=y(),{join:pB,isAbsolute:Dte,extname:Ute}=require("path"),{server:SB}=(hr(),Z(hi)),{watch:Mte,readdir:Pte}=require("fs/promises"),{totalmem:EB}=require("os"),xf=y(),vte=X(),Cn=G(),{randomBytes:Bte}=require("crypto"),{_assignPackageExport:Hte}=require("../../index"),qte=y(),hB=1024*1024,oi=[],Zr=[],Fte=50,Wg=1e4,Gte="restart",TB="request_thread_info",gB="resource_report",RB="thread_info",AB="added-port",xte="ack",kg;Hte("threads",Zr);ai.exports={startWorker:Vg,restartWorkers:zg,shutdownWorkers:Kte,workers:oi,setMonitorListener:ere,onMessageFromWorkers:Wte,onMessageByType:wB,broadcast:zte,broadcastWithAcknowledgement:Xte,setChildListenerByType:Yte,getWorkerIndex:OB,getWorkerCount:NB,getTicketKeys:bB,setMainIsWorker:Vte,setTerminateTimeout:kte,restartNumber:wn?.restartNumber||1};Zr.onMessageByType=wB;Zr.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Zr.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var Qg;function kte(e){Wg=e}a(kte,"setTerminateTimeout");function OB(){return wn?wn.workerIndex:Qg?0:void 0}a(OB,"getWorkerIndex");function NB(){return wn?wn.workerCount:Qg?1:void 0}a(NB,"getWorkerCount");function Vte(e){Qg=e}a(Vte,"setMainIsWorker");var Ff;function bB(){return Ff||(Ff=Kg?Bte(48):wn.ticketKeys,Ff)}a(bB,"getTicketKeys");Object.defineProperty(SB,"workerIndex",{get(){return OB()}});Object.defineProperty(SB,"workerCount",{get(){return NB()}});var yB={[TB](e,t){jte(t)},[gB](e,t){Zte(t,e)}};function Vg(e,t={}){let r=process.constrainedMemory?.()||EB();r=Math.min(r,EB(),2e4*hB);let s=Math.max(Math.floor(r/hB/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of Zr){let _=new wte;_.existingPort=u,i.push(_),o.push(_.port2)}Ute(e)||(e+=".js");let c=new Ite(Dte(e)?e:pB(Lte,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:ai.exports.restartNumber,ticketKeys:bB()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:AB,port:u,threadId:c.threadId},[u]);return kf(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>Vg(e,t),c.on("error",u=>{console.error("Worker error:",u),Cn.error("Worker error:",u)}),c.on("exit",u=>{oi.splice(oi.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Fte?(t.unexpectedRestarts=c.unexpectedRestarts+1,Vg(e,t)):Cn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{yB[u.type]?.(u,c)}),oi.push(c),rre(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(Vg,"startWorker");var $te=[xf.THREAD_TYPES.HTTP];async function zg(e=null,t=2,r=!0){if(Kg){if(r){let{loadRootComponents:o}=xg();await o()}ai.exports.restartNumber++,t<1&&(t=t*oi.length);let s=[],n=[];for(let o of oi.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Cn.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:ai.exports.restartNumber,type:xf.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=$te.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),Wg*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===qte.ITC_EVENT_TYPES.CHILD_STARTED&&(Cn.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");Cn.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=Od();r&&(e==="http"||!e)&&vte.get(xf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Ws.postMessage({type:Gte,workerType:e})}a(zg,"restartWorkers");function Yte(e,t){yB[e]=t}a(Yte,"setChildListenerByType");function Kte(e){return zg(e,1/0,!1)}a(Kte,"shutdownWorkers");var IB=[];function Wte(e){IB.push(e)}a(Wte,"onMessageFromWorkers");var $g=new Map;function wB(e,t){let r=$g.get(e);r||$g.set(e,r=[]),r.push(t)}a(wB,"onMessageByType");var Qte=10;async function zte(e){let t=0;for(let r of Zr)try{r.postMessage(e),t++>Qte&&(t=0,await new Promise(setImmediate))}catch(s){Cn.error("Unable to send message to worker",s)}}a(zte,"broadcast");var Gf=new Map,Jte=1;function Xte(e){return new Promise(t=>{let r=0;for(let s of Zr)try{let n=Jte++,i=a(()=>{Gf.delete(n),--r===0&&t(),s!==Ws&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Gf.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Gf)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Cn.error("Unable to send message to worker",n)}r===0&&t()})}a(Xte,"broadcastWithAcknowledgement");function jte(e){e.postMessage({type:RB,workers:CB()})}a(jte,"sendThreadInfo");function CB(){let e=Date.now();return oi.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(CB,"getChildWorkerInfo");function Zte(e,t){e.resources=t,e.resources.updated=Date.now()}a(Zte,"recordResourceReport");var Yg;function ere(e){Yg=e}a(ere,"setMonitorListener");var tre=1e3,mB=!1;function rre(){mB||(mB=!0,setInterval(()=>{for(let e of oi){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Yg&&Yg()},tre).unref())}a(rre,"startMonitoring");var sre=1e3;if(Ws){kf(Ws);for(let e=0,t=wn.addPorts.length;e<t;e++){let r=wn.addPorts[e];r.threadId=wn.addThreadIds[e],kf(r)}setInterval(()=>{let e=process.memoryUsage();Ws.postMessage({type:gB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},sre).unref(),kg=a(()=>new Promise((e,t)=>{Ws.on("message",r),Ws.postMessage({type:TB});function r(s){s.type===RB&&(Ws.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else kg=CB;ai.exports.getThreadInfo=kg;function kf(e,t){Zr.push(e),e.on("message",r=>{if(r.type===AB)r.port.threadId=r.threadId,kf(r.port);else if(r.type===xte){let s=Gf.get(r.id);s&&s()}else{for(let n of IB)n(r,e);let s=$g.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Cn.error(i)}}}).on("close",()=>{Zr.splice(Zr.indexOf(e),1)}).on("exit",()=>{Zr.splice(Zr.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(kf,"addPort");if(Kg){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Pte(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(pB(s,i.name));try{for await(let{filename:i}of Mte(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await zg(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");ai.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Ws.on("message",async e=>{let{type:t}=e;t===xf.ITC_EVENT_TYPES.SHUTDOWN&&(ai.exports.restartNumber=e.restartNumber,Ws.unref(),setTimeout(()=>{Cn.warn("Thread did not voluntarily terminate",Cte),process.exit(0)},Wg).unref())})});function DB(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Sa||((0,Pu.onMessageByType)(LB,d=>{UB(d.path)}),(0,Pu.onMessageByType)(nre,d=>{(0,Mu.trace)("confirming to proceed with txn",d.txnId)}),Sa=Object.create(null));let c=Sa[i]||(Sa[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=Jo(t);let _=new Xg(r);_.startTime=s,n&&(_.includeDescendants=n);let l=u.get(t);return l?l.push(_):(u.set(t,l=[_]),l.tables=u,l.key=t),_.subscriptions=l,_}function UB(e,t){if(!Sa)return;let r=Sa[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:Jg,exclusiveStart:!0})){Jg=n;let o=pr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Jo(o.recordId),d;do{let f=c.get(l);if(f){for(let h of f)if(!(d&&!h.includeDescendants)){if(h.startTime>=n){(0,Mu.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,Mu.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E+1):l=null,d=!0}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},Jg,!0)}function MB(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,Pu.broadcast)({type:LB,path:n}),UB(n,!0)})}}var Mu,Pu,LB,nre,Sa,TEe,Xg,Jg,PB=Te(()=>{Mu=D(G()),Pu=D(Je());qa();su();co();LB="transaction",nre="transaction-await",TEe=Buffer.alloc(4096);a(DB,"addSubscription");Xg=class extends ss{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 s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},Jg=Date.now();a(UB,"notifyFromTransactionData");a(MB,"listenToCommits")});var WT={};qe(WT,{coerceType:()=>Wf,makeTable:()=>Jf,setServerUtilities:()=>fre,updateResource:()=>qu});function Jf(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,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=[]),MB(i,u);let S=_h(i,s,u),R=0,b,O,Y,Q={},F=Promise.resolve(),w,K,B;for(let W of p)(W.assignCreatedTime||W.name==="__createdtime__")&&(w=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(K=W),W.expiresAt&&(B=W),W.isPrimaryKey&&(Q=W);let x,te=[],be=[],se=1,vt=2,Pe={},Ot={},ts=864e5,pR,Ju,TH=10,gH=6;E&&gR();class at extends Nt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=w;static updatedTimeProperty=K;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),O=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let C=a(I=>{let U=this.sources.slice(0,-1);if(U=U.filter(M=>M[I]&&(!M[I].reliesOnPrototype||M.prototype[I])),U.length>0)if(U.length===1){let M=U[0];return(V,z,oe)=>{if(V?.source!==M)return M[I](z,oe,V)}}else return(M,V,z)=>{let oe=[];for(let k of U){if(M?.source===k)break;oe.push(k[I](V,z,M))}return Promise.all(oe)}},"getApplyToIntermediateSource"),g=this.sources[this.sources.length-1],L=a(I=>{if(g[I]&&(!g[I].reliesOnPrototype||g.prototype[I]))return(U,M,V)=>{if(!U?.source)return g[I](M,V,U)}},"getApplyToCanonicalSource");return Pe={put:L("put"),delete:L("delete"),publish:L("publish")},Ot={put:C("put"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")},(async()=>{let I=!1,U=a(async(M,V)=>{let z=M.value,oe=M.table?xe[c][M.table]:at;if(c===Ns.SYSTEM_SCHEMA_NAME&&(M.table===Ns.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===Ns.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(I=!0),M.id===void 0&&(M.id=z[oe.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let k=await oe.getResource(M.id,V,vu);switch(M.type){case"put":return k._writeUpdate(z,vu);case"delete":return k._writeDelete(vu);case"publish":return k._writePublish(z,vu);case"invalidate":return k.invalidate(vu);default:We.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=m.subscribe;M&&h==null&&(h=!0);let V=m.subscribeOnThisThread?m.subscribeOnThisThread((0,ji.getWorkerIndex)()):(0,ji.getWorkerIndex)()===0,z=M&&V&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(z){let oe;for await(let k of z)try{if(!(k.type==="transaction"?k.writes[0]:k)){We.error("Bad subscription event",k);continue}if(k.source=m,oe)if(k.beginTxn)oe.resolve();else{U(k,oe);continue}if(k.type==="end_txn")continue;let Ne=Ge(k,()=>{if(k.type==="transaction"){let ne=[];for(let Bt of k.writes)try{ne.push(U(Bt,k))}catch($t){throw $t.message+=" writing "+JSON.stringify(Bt)+" of event "+JSON.stringify(k),$t}return Promise.all(ne)}else if(k.type==="define_schema"){let ne=this.attributes.slice(0),Bt;for(let $t of k.attributes)ne.find(li=>li.name===$t.name)||(ne.push($t),Bt=!0);Bt&&(et({table:n,database:c,attributes:ne,origin:"cluster"}),Gu.signalSchemaChange(new xu.SchemaEventMsg(process.pid,Ns.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return k.beginTxn?(oe=k,U(k,k),new Promise(ne=>{oe.resolve=ne})):U(k,k)});I&&(await Ne,Gu.signalUserChange(new xu.UserEventMsg(process.pid))),k.onCommit&&(Ne?.then?Ne.then(k.onCommit):k.onCommit())}catch(Ee){We.error("error in subscription handler",Ee)}}}catch(M){We.error(M)}})(),this}static getResource(m,A,C){let g=super.getResource(m,A,C);if(m!=null){Oa(m);try{if(g.hasOwnProperty(ge))return g;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let L=!C?.async||i.cache?.get(m),I=Un(A),U=I.getReadTxn();if(U?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return SR(m,A,{transaction:U},L,M=>{if(M?qu(g,M):g[ge]=null,A.onlyIfCached&&A.noCacheStore){if(!g.doesExist())throw new zs.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let V=lE(m,M,A,g);if(V)return I?.disregardReadTxn(),g[Zg]=!0,tR(V,z=>(qu(g,z),g))}return g})}catch(L){throw L.message.includes("Unable to serialize object")&&(L.message+=": "+JSON.stringify(m)),L}}return g}ensureLoaded(){let m=lE(this[Ie],this[Qs],this[me]);if(m)return this[Zg]=!0,tR(m,A=>{this[Qs]=A,this[ge]=A.value,this[Kf]=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,ts=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");ts=ts||(d+f)/4,_E()}static enableAuditing(m=!0){E=m,m&&gR(),at.audit=m}static coerceId(m){return m===""?null:Wf(m,Q)}static async dropTable(){if(delete xe[c][n],c===o){for(let m of p)l.remove(at.tableName+"/"+m.name),r[m.name]?.drop();l.remove(at.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));Gu.signalSchemaChange(new xu.SchemaEventMsg(process.pid,Ns.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(m,A){if(m&&typeof m=="object"&&!Array.isArray(m)&&m.url===""){let C=this.getRecordCount();return{recordCount:C.recordCount,estimatedRecordRange:C.estimatedRange,records:"./",name:n,database:c,attributes:p}}return super.get(m,A)}get(m){if(typeof m=="string")return this.getProperty(m);if(this[os])return this.search(m);if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[me]?.returnNonexistent)return this}allowRead(m,A){let C=ju(m);if(C?.read){let g=C.attribute_permissions;if(g){A||(A={});let L=A.select;if(L){let I=eR(g,"read");A.select=L.filter(U=>I[U])}else A.select=g.filter(I=>I.read).map(I=>I.attribute_name);return A}else return!0}}allowUpdate(m,A){let C=ju(m);if(C?.update){let g=C.attribute_permissions;if(g){let L=eR(g,"update");for(let I in A)if(!L[I])return!1;for(let I of g){let U=I.attribute_name;!I.update&&!(U in A)&&(A[U]=this.getProperty(U))}}return!0}}allowCreate(m,A){if(this[os]){let C=ju(m);if(C?.insert){let g=C.attribute_permissions;if(g){let L=eR(g,"insert");for(let I in A)if(!L[I])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return ju(m)?.delete}update(m,A){if(!Un(this[me]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let g;if(typeof m=="object"&&m)if(A){Object.isFrozen(m)&&(m=Object.assign({},m));for(let L in this[ge])m[L]===void 0&&(m[L]=void 0);this[Ht]=m}else g=this[Ht],g&&(m=Object.assign(g,m)),this[Ht]=g=m;return this._writeUpdate(this),this}invalidate(m){let A=this[me],C=this[Ie];Oa(C),Un(this[me]).addWrite({key:C,store:i,invalidated:!0,entry:this[Qs],nodeName:this[me]?.nodeName,before:Pe.invalidate?.bind(this,A,C),beforeIntermediate:Ot.invalidate?.bind(this,A,C),commit:(L,I)=>{if(I?.version>L)return;let U=null;for(let M in r)U||(U={}),U[M]=this.getProperty(M);S(C,U,this[Qs],L,Vf,E,this[me],0,"invalidate")}})}static evict(m,A,C){let g=this.Source,L;if(!((O||E)&&(!A||(L=i.getEntry(m),!L||!A)||L.version!==C))){if(O){if(i.hasLock(m,L.version))return;let I;for(let U in r)I||(I={}),I[U]=A[U];if(I){S(m,I,L,C,$f,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{Xu(m,A,null)}),E)S(m,null,L,C,$f,null,null,0,null,!0);else return i.remove(m,C)}}lock(){throw new Error("Not yet implemented")}static operation(m,A){return m.table||=n,m.schema||=c,xB.operation(m,A)}async put(m){this.update(m,!0)}_writeUpdate(m,A){let C=this[me],g=Un(C),L=this[Ie];Oa(L);let I=this[Qs];this[jg]=!0;let U={key:L,store:i,entry:I,nodeName:C?.nodeName,validate:M=>{if(!m[BB]||dl(m)){if(this.validate(m),C?.source?m=Fa(m):(t&&m[t]!==L&&(m[t]=L),K&&(m[K.name]=K.type==="Date"?new Date(M):K.type==="String"?new Date(M).toISOString():M),w&&(I?.value?m[w.name]=I?.value[w.name]:m[w.name]=w.type==="Date"?new Date(M):w.type==="String"?new Date(M).toISOString():M),m=Fa(m)),m[ge])throw new Error("Can not assign a record with a record property");this[ge]=m}else g.removeWrite(U)},before:Pe.put&&(()=>Pe.put(C,L,m)),beforeIntermediate:Ot.put&&(()=>Ot.put(C,L,m)),commit:(M,V,z)=>{z&&(C&&V?.version>(C.lastModified||0)&&(C.lastModified=V.version),qu(this,V));let oe=V?.value;this[jg]=!1,We.trace("Checking timestamp for put",L,V?.version>M,V?.version,M),!(V?.version>M)&&(Xu(L,oe,m),S(L,m,V,M,0,E,C,C.expiresAt||(d?d+Date.now():0)))}};g.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[os]){for await(let A of this.search(m))(await at.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[ge]?this._writeDelete(m):!1}_writeDelete(m){let A=Un(this[me]),C=this[Ie];Oa(C);let g=this[me];return A.addWrite({key:C,store:i,resource:this,nodeName:g?.nodeName,before:Pe.delete?.bind(this,g,C),beforeIntermediate:Ot.delete?.bind(this,g,C),commit:(L,I,U)=>{let M=I?.value;U&&(g&&I?.version>(g.lastModified||0)&&(g.lastModified=I.version),qu(this,I)),!(I?.version>L)&&(Xu(this[Ie],M),We.trace("Write delete entry",C,L),E||h?(S(C,null,this[Qs],L,0,E,this[me],0,"delete"),E||_E()):i.remove(this[Ie]))}}),!0}search(m){let A=Un(this[me]);if(!m)throw new Error("No query provided");let C=m.reverse===!0,g=m.conditions;g?g.length===void 0&&(g=Array.from(g)):g=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Ie]&&(g=[{attribute:null,comparator:"prefix",value:this[Ie]}].concat(g));for(let k of g){let Ee=k[0]??k.attribute,Ne=Ee==null?Q:p.find(ne=>ne.name==Ee);if(Ne)Ne.type&&(k[1]===void 0?k.value=L(k.value,Ne):k[1]=L(k[1],Ne));else if(Ee!=null)throw(0,zs.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function L(k,Ee){return Array.isArray(k)?k.map(Ne=>Wf(Ne,Ee)):Wf(k,Ee)}a(L,"coerceTypedValues"),g.length>1&&(g=(0,GB.sortBy)(g,k=>{if(k.estimated_count===void 0){let Ee=k.comparator||k.search_type;if(Ee===Hu.SEARCH_TYPES.EQUALS){let Ne=k[0]??k.attribute;if(Ne==null||Ne===t)k.estimated_count=1;else{let ne=r[Ne];k.estimated_count=ne?ne.getValuesCount(k[1]??k.value):1/0}}else Ee===Hu.SEARCH_TYPES.CONTAINS||Ee===Hu.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===Hu.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=are:k.estimated_count=ore}return k.estimated_count}));let I=A.getReadTxn();I.use();let U=m.select,M=g[0],V;if(!M)V=i.getRange(C?{end:!1,reverse:!0,transaction:I,lazy:U?.length<4}:{start:!1,transaction:I,lazy:U?.length<4}).map(({value:k})=>k?new Promise(Ee=>setImmediate(()=>Ee(k))):Yf.SKIP);else{let k=UE(M,I,C,at,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=g.slice(1).map(ME);V=oe(k,Ee)}else{for(let Ne=1;Ne<g.length;Ne++){let ne=g[Ne],Bt=UE(ne,I,C,at,m.allowFullScan);k=k.concat(Bt)}let Ee=new Set;k=k.filter(Ne=>Ee.has(Ne)?!1:(Ee.add(Ne),!0)),V=oe(k)}}(m.offset||m.limit!==void 0)&&(V=V.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0)),V.onDone=()=>{V.onDone=null,I.done()};let z=this[me];function oe(k,Ee){let Ne=Ee?.length,ne={transaction:I,lazy:Ne>0||U?.length<4,alwaysPrefetch:!0},Bt=m.ensureLoaded!==!1;function $t(li,He){if(Bt&&He!==void 0){let _r=!z.onlyIfCached&&lE(He,li,z,this);if(_r)return _r.then(OH=>$t(OH))}let ys=li?.value;if(!ys)return Yf.SKIP;for(let _r=0;_r<Ne;_r++)if(!Ee[_r](ys))return Yf.SKIP;return ys}return a($t,"processEntry"),k.map(li=>SR(li,z,ne,!1,$t))}return a(oe,"idsToRecords"),V}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||et({table:n,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let A=DB(at,this[Ie]??null,function(I,U,M,V){try{let z=U.getValue?.(i);this.send({id:I,timestamp:M,value:z,version:U.version,type:U.type,beginTxn:V})}catch(z){We.error(z)}},m.startTime,this[os]);m.crossThreads===!1&&(A.crossThreads=!1),m.supportsTransactions&&(A.supportsTransactions=!0);let C=this[Ie],g=m.previousCount;g>1e3&&(g=1e3);let L=m.startTime;if(this[os]){if(L){if(g)throw new zs.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:I,value:U}of u.getRange({start:L,exclusiveStart:!0})){let M=pr(U,i);if(M.tableId!==s)continue;let V=M.recordId;(C==null||FB(C,V))&&A.send({id:V,timestamp:I,...M}),A.startTime=I}}else if(g){let I=[];for(let{key:U,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let V=pr(M);if(V.tableId!==s)continue;let z=V.recordId;if(C==null||FB(C,z)){let oe=V.getValue(i);if(I.push({id:z,timestamp:U,value:oe,version:V.version,type:V.type}),--g<=0)break}}catch(V){We.error("Error getting history entry",U,V)}for(let U=I.length;U>0;)A.send(I[--U]);I[0]&&(A.startTime=I[0].timestamp)}else if(!m.omitCurrent)for(let{key:I,value:U,version:M,localTime:V}of i.getRange({start:C??!1,end:C==null?void 0:[C,Qf.MAXIMUM_KEY],versions:!0}))U&&A.send({id:I,version:M,timestamp:V,value:U})}else{g&&!L&&(L=0);let I=this[Qs]?.localTime;if(We.trace("Subscription from",L,"from",C),L<I){let U=[],M=I;do{let V=u.get(M);if(V){m.omitCurrent=!0;let z=pr(V),oe=z.getValue(i);U.push({id:C,value:oe,timestamp:M,...z}),M=z.previousLocalTime}else break;g&&g--}while(M>L&&g!==0);for(let V=U.length;V>0;)A.send(U[--V]);A.startTime=I}!m.omitCurrent&&this.doesExist()&&A.send({id:C,version:this[Kf],timestamp:this[Qs]?.localTime,value:this})}return m.listener&&A.on("data",m.listener),A}doesExist(){return!!(this[ge]||this[jg])}async publish(m,A){this._writePublish(m,A)}_writePublish(m,A){let C=Un(this[me]),g=this[Ie]||null;Oa(g);let L=this[me];C.addWrite({key:g,store:i,entry:this[Qs],nodeName:L?.nodeName,validate:()=>{this.validate(m)},before:Pe.publish?.bind(this,L,g,m),beforeIntermediate:Ot.publish?.bind(this,L,g,m),commit:(I,U,M)=>{U===void 0&&h&&!E&&_E(),S(g,U?.value??null,U,U?.version||I,0,!0,L,U?.expiresAt,"message",!1,m)}})}validate(m){let A,C=a((g,L,I)=>{if(L.type&&g!=null)if(L.properties){typeof g!="object"&&(A||(A=[])).push(`Property ${I} must be an object${L.type?" ("+L.type+")":""}`);let U=L.properties;for(let M=0,V=U.length;M<V;M++){let z=U[M],oe=C(g[z.name],z,I+"."+z.name);oe&&(g[z.name]=oe)}}else switch(L.type){case"Int":(typeof g!="number"||g>>0!==g)&&(A||(A=[])).push(`Property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof g!="number"||!(Math.floor(g)===g&&Math.abs(g)<=9007199254740992))&&(A||(A=[])).push(`Property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof g!="number"&&(A||(A=[])).push(`Property ${I} must be a number`);break;case"ID":typeof g=="string"||g?.length>0&&g.every?.(U=>typeof U=="string")||(A||(A=[])).push(`Property ${I} must be a string, or an array of strings`);break;case"String":typeof g!="string"&&(A||(A=[])).push(`Property ${I} must be a string`);break;case"Boolean":typeof g!="boolean"&&(A||(A=[])).push(`Property ${I} must be a boolean`);break;case"Date":if(!(g instanceof Date)){if(typeof g=="string"||typeof g=="number")return new Date(g);(A||(A=[])).push(`Property ${I} must be a Date`)}break;case"Bytes":g instanceof Uint8Array||(A||(A=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(g)){if(L.elements)for(let U=0,M=g.length;U<M;U++){let V=g[U],z=C(V,L.elements,I+"[*]");z&&(g[U]=z)}}else(A||(A=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break}L.nullable===!1&&g==null&&(A||(A=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let g=0,L=p.length;g<L;g++){let I=p[g],U=C(m[I.name],I,I.name);U&&(m[I.name]=U)}if(A)throw new zs.ClientError(A.join(". "))}getUpdatedTime(){return this[Kf]}wasLoadedFromSource(){return O?!!this[Zg]:void 0}static async addAttributes(m){let A=p.slice(0);for(let C of m){if(!C.name)throw new zs.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new zs.ClientError("Attribute names cannot include backticks or forward slashes");A.push(C)}return et({table:n,database:c,schemaDefined:_,attributes:A}),at.indexingOperation}static async removeAttributes(m){let A=p.filter(C=>!m.includes(C.name));return et({table:n,database:c,schemaDefined:_,attributes:A}),at.indexingOperation}static getRecordCount(m){let A=i.getStats().entryCount,C=5e3,g=1e3,L;A>C&&!m?.exactCount&&(L=g);let I=0;for(let{value:U}of i.getRange({start:!0,lazy:!0,limit:L}))U!=null&&I++;if(L){let U=I;I=0;for(let{value:Bt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:L}))Bt!=null&&I++;let M=L*2,V=(I+U)/M,z=Math.pow((I-U+1)/L/2,2)+V*(1-V)/M,oe=Math.max(Math.sqrt(z)*A,1),k=Math.round(V*A),Ee=Math.max(k-1.96*oe,0),Ne=Math.min(k+1.96*oe,A),ne=Math.pow(10,Math.round(Math.log10(oe)));return ne>k&&(ne=ne/10),I=Math.round(k/ne)*ne,{recordCount:I,estimatedRange:[Math.round(Ee),Math.round(Ne)]}}return{recordCount:I}}static updatedAttributes(){El(this,this)}static async deleteHistory(m=0){let A;for(let{key:C,value:g}of u.getRange({start:0,end:m}))await Bu(),pr(g).tableId===s&&(A=u.remove(C));await A}static async*getHistory(m=0,A=1/0){for(let{key:C,value:g}of u.getRange({start:m,end:A})){await Bu();let L=pr(g);L.tableId===s&&(yield{id:L.recordId,localTime:C,version:L.version,type:L.type,value:L.getValue(i),user:L.user})}}static async getHistoryOfRecord(m){let A=[],C=i.getEntry(m);if(!C)return A;let g=C.localTime,L=0;do{await Bu();let I=u.get(g);if(I){let U=pr(I);A.push({id:U.recordId,localTime:g,version:U.version,type:U.type,value:U.getValue(i),user:U.user}),g=U.previousLocalTime}else break}while(L<1e3&&g);return A.reverse()}static cleanup(){x?.remove()}}at.updatedAttributes();let RH=at.prototype;return RH[BB]=!0,d&&at.setTTLExpiration(d/1e3),B&&AH(),at;function Xu(W,m,A){let C;for(let g in r){let L=r[g],I=L.isIndexing,U=A?.[g],M=m?.[g];if(U===M&&!I)continue;C=!0;let V=(0,Fu.getIndexedValues)(M);if(V){vB&&L.prefetch(V.map(z=>({key:z,value:W})),qB);for(let z=0,oe=V.length;z<oe;z++)L.remove(V[z],W)}if(V=(0,Fu.getIndexedValues)(U),V){vB&&L.prefetch(V.map(z=>({key:z,value:W})),qB);for(let z=0,oe=V.length;z<oe;z++)L.put(V[z],W)}}return C}a(Xu,"updateIndices");function Oa(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>HB)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,Qf.writeKey)(W,_re,0)>HB)throw new Error("Primary key size is too large: "+W.length);return!0}a(Oa,"checkValidId");function SR(W,m,A,C,g){let L=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),A.transaction?.isDone)return g(null,W);let I=i.getEntry(W,A);return I&&m&&(I?.version>(m.lastModified||0)&&(m.lastModified=I.version),I?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=I.localTime)),g(I,W)},"whenPrefetched");return C?L():se>0?(se--,L()):new Promise((I,U)=>{se===0?(se--,i.prefetch([W],()=>{M(),V()})):(te.push(W),be.push(V),te.length>gH&&(se--,M()));function M(){if(te.length>0){let z=be;i.prefetch(te,()=>{se===-1?M():se++;for(let oe of z)oe()}),te=[],be=[],vt>2&&vt--}else se=vt,vt<TH&&vt++}a(M,"prefetch");function V(){try{I(L())}catch(z){U(z)}}a(V,"load")})}a(SR,"loadLocalRecord");function ju(W){if(!W)return;let m=W.role.permission;if(m.super_user)return dre;let A=m[c],C,g=A?.tables;if(g)return g[n];if(c==="data"&&(C=m[n])&&!C.tables)return C}a(ju,"getTablePermissions");function lE(W,m,A,C){if(O){let g;if(A.noCache?g=!0:(m?(!m.value||m.metadataFlags&(Vf|$f)||m.expiresAt&&m.expiresAt<Date.now())&&(g=!0):g=!0,Vr(!g,"cache-hit",n)),g){let L=TR(W,m,A).then(I=>(I?.value?.[ge]&&We.error("Can not assign a record with a record property"),A&&(I?.version>(A.lastModified||0)&&(A.lastModified=I.version),A.lastRefreshed=Date.now()),I));if(A?.onlyIfCached||m?.value&&C?.allowStaleWhileRevalidate?.(m,W)){if(L.catch(I=>We.warn(I)),A?.onlyIfCached&&!C.doesExist())throw new zs.ServerError("Entry is not cached",504);return}else return L}}}a(lE,"ensureLoadedFromSource");function Un(W){let m=W?.transaction;if(m){if(!m.open)throw new Error("Can not use a transaction that is not open");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 fi,m.lmdbDb=i,m;m=A}while(!0)}else return new pl}a(Un,"txnForContext");async function TR(W,m,A){let C=m?.metadataFlags,g=m?.version,L,I;if(!i.attemptLock(W,g,()=>{clearTimeout(I);let z=i.getEntry(W);!z||!z.value||z.metadataFlags&(Vf|$f)?L(TR(W,i.getEntry(W),A)):L(z)}))return new Promise(z=>{L=z,I=setTimeout(()=>{i.unlock(W,g)},lre)});let U=m?.value,M={requestContext:A,replacingRecord:U,replacingVersion:g,source:null,resourceCache:A?.resourceCache},V=A?.responseHeaders;return new Promise((z,oe)=>{let k;tR(Ge(M,async Ee=>{let Ne=performance.now(),ne,Bt,$t;try{for(let _r of at.sources)if(_r.get&&(!_r.get.reliesOnPrototype||_r.prototype.get)&&(M.source=_r,ne=await _r.get(W,M),ne))break;$t=C&Vf;let He=M.lastModified||$t&&g;Bt=$t||He>g||!U,He||(He=(0,Fu.getNextMonotonicTime)());let ys=performance.now()-Ne;if(yr(ys,"cache-resolution",n),V&&V.append("Server-Timing",`cache-resolve;dur=${ys.toFixed(2)}`),Ee.timestamp=He,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==W&&(ne[t]=W)}k=!0,z({version:He,value:ne})}catch(He){He.message+=` while resolving record ${W} for ${n}`,U&&((He.code==="ECONNRESET"||He.code==="ECONNREFUSED"||He.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(He.statusCode===500||He.statusCode===502||He.statusCode===503||He.statusCode===504))?(z({version:g,value:U}),We.trace(He.message,"(returned stale record)")):oe(He),M.transaction.abort();return}if(A?.noCacheStore){M.transaction.abort();return}Un(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(He,ys)=>{if(ys?.version!==g)return;let _r=Xu(W,U,ne);ne?(Ot.put?.(M,W,ne),S(W,ne,ys,He,0,E&&Bt||null,M,M.expiresAt,"put",!!$t)):(Ot.delete?.(M,W),E||h?S(W,null,ys,He,0,E&&Bt||null,M,0,"delete",!!$t):i.remove(W,g))}})}),()=>{i.unlock(W,g)},Ee=>{i.unlock(W,g),k&&We.error("Error committing cache update",Ee)})})}a(TR,"getFromSource");function _E(){if(ts!==pR&&(pR=ts,(0,ji.getWorkerIndex)()===(0,ji.getWorkerCount)()-1)){if(Ju&&clearTimeout(Ju),!ts)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let m=Math.ceil((Date.now()-W.getTime())/ts)*ts+W.getTime(),A=a(C=>{We.trace(`Scheduled next cleanup scan at ${new Date(C)}ms`),Ju=setTimeout(()=>F=F.then(async()=>{if(A(Math.max(C+ts,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ju);return}We.trace(`Starting cleanup scan for ${n}`);try{let g=0;for(let{key:L,value:I,version:U,expiresAt:M}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))I===null&&!E&&U+ure<Date.now()?i.remove(L,U):M&&M+f<Date.now()&&(at.evict(L,I,U),g++),await Bu();We.trace(`Finished cleanup scan for ${n}, evicted ${g} entries`)}catch(g){We.trace(`Error in cleanup scan for ${n}:`,g)}}),Math.min(C-Date.now(),2147483647)).unref()},"startNextTimer");A(m)}}a(_E,"scheduleCleanup");function gR(){x=u?.addDeleteRemovalCallback(s,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(gR,"addDeleteRemoval");function AH(){(0,ji.getWorkerIndex)()===0&&setInterval(async()=>{try{let W=B.name,m=r[W];if(!m)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:A}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let C=i.getEntry(A);C?.value?.[W]<Date.now()&&at.evict(A,C.value,C.version),await Bu()}}catch(W){We.error("Error in evicting old records",W)}},cre).unref()}a(AH,"runRecordExpirationEviction")}function eR(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function qB(){}function fre(e){xB=e}function Wf(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Ere.test(e)&&(e+="Z"),new Date(e)):r?e:(0,zf.autoCast)(e)}function FB(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 s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function tR(e,t,r){return e?.then?e.then(t,r):t(e)}function qu(e,t){e[Qs]=t,e[ge]=t?.value??null,e[Kf]=t?.version}var Ns,Yf,Fu,GB,Hu,ku,zs,Gu,xu,We,Qf,ji,zf,ire,xB,ore,are,cre,ure,vB,lre,Kf,BB,Qs,jg,Zg,vu,Vf,$f,_re,HB,dre,BEe,Ere,Bu,df=Te(()=>{Ns=D(y()),Yf=require("lmdb"),Fu=D(Er()),GB=require("lodash");is();LE();Hu=D(ze()),ku=D(X());PB();zs=D(j()),Gu=D(cn()),xu=D(ds());fe();Tl();We=D(G());ml();Ei();Qf=require("ordered-binary"),ji=D(Je());co();zf=D($());$a();_n();ire=new Uint8Array(9);ire[8]=192;ore=1e8,are=1e7,cre=6e4,ure=864e5;ku.initSync();vB=ku.get(Ns.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),lre=1e4,Kf=Symbol.for("version"),BB=Symbol.for("incremental-update"),Qs=Symbol("entry"),jg=Symbol("is-saving"),Zg=Symbol("loaded-from-source"),vu={isNotification:!0,ensureLoaded:!1},Vf=1,$f=8,_re=Buffer.allocUnsafeSlow(8192),HB=1978,dre={read:!0,insert:!0,update:!0,delete:!0},BEe=(0,zf.convertToMS)(ku.get(Ns.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Jf,"makeTable");a(eR,"attributesAsObject");a(qB,"noop");a(fre,"setServerUtilities");Ere=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Wf,"coerceType");a(FB,"isDescendantId");Bu=a(()=>new Promise(setImmediate),"rest");a(tR,"when");a(qu,"updateResource")});var Ce={};qe(Ce,{database:()=>gc,databases:()=>xe,dropDatabase:()=>op,dropTableMeta:()=>gre,getDatabases:()=>hs,getTables:()=>hre,onUpdatedTable:()=>Ng,readMetaDb:()=>Vu,resetDatabases:()=>mre,table:()=>et,tables:()=>mr});function hre(){return tE||hs(),mr||{}}function hs(){if(tE)return xe;tE=!0,Ra=new Map;let e=(0,Vt.getHdbBasePath)()&&(0,Fe.join)((0,Vt.getHdbBasePath)(),Ur.DATABASES_DIR_NAME),t=(0,Vt.get)(Ur.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Vt.get)(Ur.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Dr.existsSync)(e)?e:(0,Fe.join)((0,Vt.getHdbBasePath)(),Ur.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Dr.existsSync)(e))for(let r of(0,Dr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Fe.basename)(r.name,".mdb");r.isFile()&&(0,Fe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Vu((0,Fe.join)(e,r.name),null,s)}if((0,Dr.existsSync)((0,ga.getBaseSchemaPath)())){for(let r of(0,Dr.readdirSync)((0,ga.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Fe.join)((0,ga.getBaseSchemaPath)(),r.name),n=(0,Fe.join)((0,ga.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Dr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Fe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Fe.join)(n,i.name);Vu((0,Fe.join)(s,i.name),(0,Fe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,Dr.existsSync)(n))for(let o of(0,Dr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Fe.extname)(o.name).toLowerCase()===".mdb"&&Vu((0,Fe.join)(n,o.name),(0,Fe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Fe.join)(c.path,(0,Fe.basename)(o+".mdb"));(0,Dr.existsSync)(u)&&Vu(u,o,r,null,!0)}}for(let r in xe){let s=Ra.get(r);if(s){let n=xe[r];r.includes("delete")&&es.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(es.trace(`delete table class ${i}`),delete n[i])}else if(delete xe[r],r==="data"){for(let n in mr)delete mr[n];delete mr[rE]}}return Ra=null,xe}}function mre(){tE=!1;for(let[,e]of ci)e.needsDeletion=!0;hs();for(let[e,t]of ci)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ci.delete(e));return xe}function Vu(e,t,r=nR,s,n){let i=new rR.default(e,!1);try{let o=ci.get(e);o?o.needsDeletion=!1:(o=(0,jf.open)(i),ci.set(e,o));let c=new Zi.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Xf.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,Dr.existsSync)(s)&&(i.path=s,_=(0,jf.open)(i),_.isLegacy=!0):_=bl(o));let l=YB(r),d=l[rE],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 R=f.get(p);R||f.set(p,R={attributes:[]}),(S==null||h.is_hash_attribute)&&(R.primary=h),S!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let x of p)if(x.is_hash_attribute||x.isPrimaryKey){S=x;break}if(!S){es.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let R=l[E],b={},O=[],Y,Q,F=typeof S.audit=="boolean"?S.audit:(0,Vt.get)(Ur.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(R)b=R.indices,O=R.attributes,R.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(Ta)||0)&&u.putSync(Ta,Y+1):(S.tableId=Y=u.get(Ta),Y||(Y=1),u.putSync(Ta,Y+1),u.putSync(S.key,S));let x=new Zi.default(!S.is_hash_attribute,S.is_hash_attribute);Q=Ll(o.openDB(S.key,x)),Q.rootStore=o,Q.tableId=Y}for(let x of p){x.attribute=x.name;try{if(!x.is_hash_attribute&&(x.indexed||x.attribute&&!x.name)){if(!b[x.name]){let be=new Zi.default(!x.is_hash_attribute,x.is_hash_attribute);b[x.name]=o.openDB(x.key,be)}let te=O.find(be=>be.name===x.name);te?O.splice(O.indexOf(te),1,x):O.push(x)}}catch(te){es.error("Error trying to update attribute",x,O,b,te)}}if(!R){R=KB(l,E,Jf({primaryStore:Q,auditStore:_,audit:F,expirationMS:K&&K*1e3,evictionMS:B&&B*1e3,trackDeletes:w,tableName:E,tableId:Y,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:b,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let x of iR)x(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function YB(e){let t=xe[e];if(t||(e==="data"?t=xe[e]=mr:e==="system"?Object.defineProperty(xe,"system",{value:t=Object.create(null),configurable:!0}):t=xe[e]=Object.create(null)),Ra&&!Ra.has(e)){let r=new Set;t[rE]=r,Ra.set(e,r)}return t}function KB(e,t,r){return e[t]=r,r}function gc({database:e,table:t}){e||(e=nR),hs();let r=YB(e),s=(0,Fe.join)((0,Vt.getHdbBasePath)(),Ur.DATABASES_DIR_NAME),n=(0,Vt.get)(Ur.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,Vt.get)(Ur.CONFIG_PARAMS.STORAGE_PATH)||((0,Dr.existsSync)(s)?s:(0,Fe.join)((0,Vt.getHdbBasePath)(),Ur.LEGACY_DATABASES_DIR_NAME));let o=(0,Fe.join)(s,(i?t:e)+".mdb"),c=ci.get(o);if(!c){let u=new rR.default(o,!1);c=(0,jf.open)(u),ci.set(o,c)}return c}async function op(e){if(!xe[e])throw new Error("Schema does not exist");let t=xe[e];for(let r in t){let n=t[r].primaryStore.rootStore;ci.delete(n.path),n.status==="open"&&(await n.close(),await kB.remove(n.path))}if(e==="data"){for(let r in mr)delete mr[r];delete mr[rE]}delete xe[e]}function et({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=nR);let l=gc({database:t,table:e}),d=xe[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 R=new Zi.default(!1);for(let w of i)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let b,O;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let w=l.auditStore;w||(w=bl(l)),h=i.find(te=>te.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,Vt.get)(Ur.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),es.trace(`${e} table loading, opening primary store`);let K=new Zi.default(!1,!0),B=e+"/",x=Ll(l.openDB(B,K));x.rootStore=l,S=l.dbisDb=l.openDB(Xf.INTERNAL_DBIS_NAME,R),x.tableId=S.get(Ta),x.tableId||(x.tableId=1),S.putSync(Ta,x.tableId+1),h.tableId=x.tableId,f=KB(d,e,Jf({primaryStore:x,auditStore:w,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:x.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,b=!0,F(),S.put(B,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(Xf.INTERNAL_DBIS_NAME,R)),f.dbisDB=S;let Y=[];for(let{key:w,value:K}of S.getRange({start:!0})){let[B,x]=w.toString().split("/");if(x===""&&(x=K.name),x){if(B!==e)continue}else x=B;if(!i.find(be=>be.name===x)?.indexed&&K.indexed&&!K.isPrimaryKey){F(),b=!0,S.remove(w);let be=f.indices[B];be&&Y.push(be)}}let Q=[];try{for(let w of i||[]){let K=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:K,configurable:!0});let B=S.get(K);if(w.isPrimaryKey){if(B=B||S.get(K=e+"/")||{},o!==f.audit||(+r||void 0)!==(+B.expiration||void 0)||(+s||void 0)!==(+B.eviction||void 0)){let te=Object.assign({},B);typeof o=="boolean"&&(o&&f.enableAuditing(o),te.audit=o),r&&(te.expiration=+r),s&&(te.eviction=+s),b=!0,F(),S.put(K,te)}continue}B?.attribute&&!B.name&&(B.indexed=!0);let x=!B||B.type!==w.type||B.indexed!==w.indexed||JSON.stringify(B.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(B.elements)!==JSON.stringify(w.elements);if(w.indexed){let te=new Zi.default(!0,!1),be=l.openDB(K,te);(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<$u.workerData?.restartNumber)&&(b=!0,F(),B=S.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<$u.workerData?.restartNumber)&&(b=!0,w.lastIndexedKey=B?.lastIndexedKey||!1,w.indexingPID=process.pid,be.isIndexing=!0,Object.defineProperty(w,"dbi",{value:be}),Q.push(w)),S.put(K,w)),p[w.name]=be}else x&&(b=!0,F(),S.put(K,w))}}finally{O&&O()}if(b&&(f.schemaVersion++,f.updatedAttributes()),es.trace(`${e} table loading, running index`),Q.length>0||Y.length>0?f.indexingOperation=Tre(f,Q,Y):b&&Zf.signalSchemaChange(new eE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,b)for(let w of iR)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),es.trace(`${e} table loaded`),f;function F(){O||l.transactionSync(()=>({then(w){O=w}}))}a(F,"startTxn")}async function Tre(e,t,r){try{let s=e.schemaVersion;await Zf.signalSchemaChange(new eE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=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++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,VB.getIndexedValues)(l[h]);if(p)for(let S=0,R=p.length;S<R;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,es.error(f)}),$u.workerData&&$u.workerData.restartNumber!==$B.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>pre?await n:u>Sre&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await Zf.signalSchemaChange(new eE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){es.error("Error in indexing",s)}}function gre({table:e,database:t}){let r=gc({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function Ng(e){iR.push(e)}var Vt,Xf,jf,Fe,Dr,ga,Zi,rR,Ur,kB,sR,VB,Zf,eE,$u,es,$B,nR,rE,mr,xe,Ta,iR,tE,ci,Ra,pre,Sre,fe=Te(()=>{Vt=D(X()),Xf=D(ze()),jf=require("lmdb"),Fe=require("path"),Dr=require("fs"),ga=D(ve());df();Zi=D(Dl()),rR=D(Ml()),Ur=D(y()),kB=D(require("fs-extra")),sR=require("../../index"),VB=D(Er()),Zf=D(cn()),eE=D(ds()),$u=require("worker_threads"),es=D(G()),$B=D(Je());co();$a();nR="data",rE=Symbol("defined-tables");(0,Vt.initSync)();mr=Object.create(null),xe=Object.create(null);(0,sR._assignPackageExport)("databases",xe);(0,sR._assignPackageExport)("tables",mr);Ta=Symbol.for("next-table-id"),iR=[],ci=new Map;a(hre,"getTables");a(hs,"getDatabases");a(mre,"resetDatabases");a(Vu,"readMetaDb");a(YB,"ensureDB");a(KB,"setTable");a(gc,"database");a(op,"dropDatabase");a(et,"table");pre=1e3,Sre=10;a(Tre,"runIndexing");a(gre,"dropTableMeta");a(Ng,"onUpdatedTable")});var $=T((YEe,oH)=>{"use strict";var ui=require("path"),XB=require("fs-extra"),lr=G(),WB=require("fs-extra"),sE=require("os"),Rre=require("net"),Are=require("recursive-iterator"),Qe=y(),Ore=ZR(),QB=require("papaparse"),nE=require("moment"),{inspect:Nre}=require("util"),zB=require("is-number"),$Ee=require("lodash"),bre=require("minimist"),yre=require("https"),Ire=require("http"),{hdb_errors:iE}=j(),wre=/^((\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)))$/,jB=require("util").promisify(setTimeout),Cre=100,Lre=5,Dre="",Ure=4,JB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};oH.exports={isEmpty:Mr,isEmptyOrZeroLength:Js,arrayHasEmptyValues:vre,arrayHasEmptyOrZeroLengthValues:Bre,buildFolderPath:Hre,isBoolean:ZB,errorizeMessage:Mre,stripFileExtension:Fre,autoCast:Gre,autoCastJSON:eH,autoCastJSONDeep:aR,removeDir:xre,compareVersions:kre,isCompatibleDataVersion:Vre,escapeRawValue:$re,unescapeValue:Yre,stringifyProps:Kre,timeoutPromise:Qre,isClusterOperation:Jre,getClusterUser:jre,checkGlobalSchemaTable:Xre,getHomeDir:rH,getPropsFilePath:Wre,promisifyPapaParse:Zre,removeBOM:sH,createEventPromise:ese,checkProcessRunning:tse,checkSchemaTableExist:rse,checkSchemaExists:nH,checkTableExists:iH,getStartOfTomorrowInSeconds:sse,getLimitKey:nse,isObject:qre,isNotEmptyAndHasValue:Pre,autoCasterIsNumberCheck:tH,backtickASTSchemaItems:ise,isPortTaken:zre,createForkArgs:ose,autoCastBoolean:ase,async_set_timeout:jB,getTableHashAttribute:cse,doesSchemaExist:use,doesTableExist:lse,stringifyObj:_se,ms_to_time:dse,changeExtension:fse,getEnvCliRootPath:cR,noBootFile:Ese,httpRequest:hse,transformReq:mse,convertToMS:pse,PACKAGE_ROOT:Qe.PACKAGE_ROOT};function Mre(e){return e instanceof Error?e:new Error(e)}a(Mre,"errorizeMessage");function Mr(e){return e==null}a(Mr,"isEmpty");function Pre(e){return!Mr(e)&&(e||e===0||e===""||ZB(e))}a(Pre,"isNotEmptyAndHasValue");function Js(e){return Mr(e)||e.length===0||e.size===0}a(Js,"isEmptyOrZeroLength");function vre(e){if(Mr(e))return!0;for(let t=0;t<e.length;t++)if(Mr(e[t]))return!0;return!1}a(vre,"arrayHasEmptyValues");function Bre(e){if(Js(e))return!0;for(let t=0;t<e.length;t++)if(Js(e[t]))return!0;return!1}a(Bre,"arrayHasEmptyOrZeroLengthValues");function Hre(...e){try{return e.join(ui.sep)}catch{console.error(e)}}a(Hre,"buildFolderPath");function ZB(e){return Mr(e)?!1:e===!0||e===!1}a(ZB,"isBoolean");function qre(e){return Mr(e)?!1:typeof e=="object"}a(qre,"isObject");function Fre(e){return Js(e)?Dre:e.slice(0,-Ure)}a(Fre,"stripFileExtension");function Gre(e){return Mr(e)||e===""||typeof e!="string"?e:JB[e]!==void 0?JB[e]:tH(e)===!0?Number(e):wre.test(e)?new Date(e):e}a(Gre,"autoCast");function eH(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(eH,"autoCastJSON");function aR(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=aR(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=aR(r);s!==r&&(e[t]=s)}return e}else return eH(e)}a(aR,"autoCastJSONDeep");function tH(e){if(e.startsWith("0.")&&zB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&zB(e))}a(tH,"autoCasterIsNumberCheck");async function xre(e){if(Js(e))throw new Error(`Directory path: ${e} does not exist`);try{await WB.emptyDir(e),await WB.remove(e)}catch(t){throw lr.error(`Error removing files in ${e} -- ${t}`),t}}a(xre,"removeDir");function kre(e,t){if(Js(e)){lr.info("Invalid current version sent as parameter.");return}if(Js(t)){lr.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").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(kre,"compareVersions");function Vre(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Vre,"isCompatibleDataVersion");function $re(e){if(Mr(e))return e;let t=String(e);return t==="."?Qe.UNICODE_PERIOD:t===".."?Qe.UNICODE_PERIOD+Qe.UNICODE_PERIOD:t.replace(Qe.FORWARD_SLASH_REGEX,Qe.UNICODE_FORWARD_SLASH)}a($re,"escapeRawValue");function Yre(e){if(Mr(e))return e;let t=String(e);return t===Qe.UNICODE_PERIOD?".":t===Qe.UNICODE_PERIOD+Qe.UNICODE_PERIOD?"..":String(e).replace(Qe.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Yre,"unescapeValue");function Kre(e,t){if(Mr(e))return lr.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+sE.EOL}!Js(s)&&s[0]===";"?r+=" "+s+n+sE.EOL:Js(s)||(r+=s+"="+n+sE.EOL)}catch{lr.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Kre,"stringifyProps");function rH(){let e;try{e=sE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(rH,"getHomeDir");function Wre(){let e=ui.join(rH(),Qe.HDB_HOME_DIR_NAME,Qe.BOOT_PROPS_FILE_NAME);return XB.existsSync(e)||(e=ui.join(__dirname,"../","hdb_boot_properties.file")),e}a(Wre,"getPropsFilePath");function Qre(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Qre,"timeoutPromise");async function zre(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=Rre.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(zre,"isPortTaken");function Jre(e){try{return Qe.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){lr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Jre,"isClusterOperation");function Xre(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return iE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return iE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Xre,"checkGlobalSchemaTable");function jre(e,t){if(Mr(t)){lr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Mr(e)||Js(e)){lr.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){lr.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){lr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(jre,"getClusterUser");function Zre(){QB.parsePromise=function(e,t,r){return new Promise(function(s,n){QB.parse(e,{header:!0,transformHeader:sH,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Zre,"promisifyPapaParse");function sH(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(sH,"removeBOM");function ese(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;lr.info(`Got cluster status event response: ${Nre(n)}`);try{i.cancel()}catch{lr.error("Error trying to cancel timeout.")}s(n)})})}a(ese,"createEventPromise");async function tse(e){let t=!0,r=0;do await jB(Cre*r++),(await Ore.findPs(e)).length>0&&(t=!1);while(t&&r<Lre);if(t)throw new Error(`process ${e} was not started`)}a(tse,"checkProcessRunning");function rse(e,t){let r=nH(e);if(r)return r;let s=iH(e,t);if(s)return s}a(rse,"checkSchemaTableExist");function nH(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return iE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(nH,"checkSchemaExists");function iH(e,t){let{getDatabases:r}=(fe(),Z(Ce));if(!r()[e][t])return iE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(iH,"checkTableExists");function sse(){let e=nE().utc().add(1,Qe.MOMENT_DAYS_TAG).startOf(Qe.MOMENT_DAYS_TAG).unix(),t=nE().utc().unix();return e-t}a(sse,"getStartOfTomorrowInSeconds");function nse(){return nE().utc().format("DD-MM-YYYY")}a(nse,"getLimitKey");function ise(e){try{let t=new Are(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){lr.error("Got an error back ticking items."),lr.error(t)}}a(ise,"backtickASTSchemaItems");function ose(e){return[e]}a(ose,"createForkArgs");function ase(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(ase,"autoCastBoolean");function cse(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(cse,"getTableHashAttribute");function use(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a(use,"doesSchemaExist");function lse(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a(lse,"doesTableExist");function _se(e){try{return JSON.stringify(e)}catch{return e}}a(_se,"stringifyObj");function dse(e){let t=nE.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(dse,"ms_to_time");function fse(e,t){let r=ui.basename(e,ui.extname(e));return ui.join(ui.dirname(e),r+t)}a(fse,"changeExtension");function cR(){if(process.env[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=bre(process.argv);if(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(cR,"getEnvCliRootPath");var oR;function Ese(){if(oR)return oR;let e=cR();cR()&&XB.pathExistsSync(ui.join(e,Qe.HDB_CONFIG_FILE))&&(oR=!0)}a(Ese,"noBootFile");function hse(e,t){let r;return e.protocol==="http:"?r=Ire:r=yre,new Promise((s,n)=>{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",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(hse,"httpRequest");function mse(e){if(!e.schema&&!e.database){e.schema=Qe.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(mse,"transformReq");function pse(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(pse,"convertToMS")});var X=T((WEe,uH)=>{"use strict";var uR=require("fs-extra"),bs=require("path"),aH=require("os"),Sse=require("properties-reader"),Yu=G(),eo=$(),ee=y(),oE=Rr(),Tse="Error initializing environment manager",aE="BOOT_PROPS_FILE_PATH",cH=!1,gse={[ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ln={};uH.exports={BOOT_PROPS_FILE_PATH:aE,getHdbBasePath:Rse,setHdbBasePath:Ase,get:Ose,initSync:bse,setProperty:he,initTestEnvironment:yse};function Rse(){return Ln[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(Rse,"getHdbBasePath");function Ase(e){Ln[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Ase,"setHdbBasePath");function Ose(e){let t=oE.getConfigValue(e);return t===void 0?Ln[e]:t}a(Ose,"get");function he(e,t){gse[e]&&(Ln[e]=t),oE.updateConfigObject(e,t)}a(he,"setProperty");function Nse(){let e;try{e=eo.getPropsFilePath(),uR.accessSync(e,uR.constants.F_OK|uR.constants.R_OK),cH=!0;let t=Sse(e);return Ln[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),Ln[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ln[aE]=e,!0}catch{return Yu.trace(`Environment manager found no properties file at ${e}`),!1}}a(Nse,"doesPropFileExist");function bse(e=!1){try{(cH||Nse()||eo.noBootFile())&&(oE.initConfig(e),Ln[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=oE.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Yu.error(Tse),Yu.error(t),console.error(t),process.exit(1)}}a(bse,"initSync");function yse(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=bs.join(__dirname,"../../","unitTests");Ln[aE]=bs.join(u,"hdb_boot_properties.file"),he(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,bs.join(u,"settings.test")),he(ee.HDB_SETTINGS_NAMES.INSTALL_USER,aH.userInfo()?aH.userInfo().username:void 0),he(ee.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,bs.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.HDB_SETTINGS_NAMES.CERT_KEY,bs.join(u,"envDir","utility","keys","certificate.pem")),he(ee.CONFIG_PARAMS.TLS_PRIVATEKEY,bs.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.CONFIG_PARAMS.TLS_CERTIFICATE,bs.join(u,"envDir","utility","keys","certificate.pem")),he(ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),he(ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,bs.join(u,"envDir","log")),he(ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),he(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,bs.join(u,"envDir")),he(ee.CONFIG_PARAMS.STORAGE_PATH,bs.join(u,"envDir")),he(ee.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,eo.isEmpty(n)?!0:n),he(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,eo.isEmpty(n)?!0:n),he(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,eo.isEmpty(i)?!1:i),he(ee.CONFIG_PARAMS.HTTP_CORS,eo.isEmpty(i)?!1:i),he(ee.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),he(ee.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,bs.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),he(ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,eo.isEmpty(c)?!1:c),o&&(he("CORS_ACCESSLIST",o),he(ee.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(he(ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),he(ee.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(he(ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),he(ee.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(he(ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),he(ee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${aE}. Please check your boot props and settings files`;Yu.fatal(r),Yu.error(t)}}a(yse,"initTestEnvironment")});var Kse=T(zu=>{var{isMainThread:Ise,parentPort:Qu,threadId:Ku}=require("worker_threads"),{Socket:wse,createServer:Cse}=require("net"),{createServer:Lse,IncomingMessage:Dse}=require("http"),{createServer:Use}=require("https"),{readFileSync:Aa}=require("fs"),Xs=G(),At=X(),Dn=y(),{server:uE}=(hr(),Z(hi)),{WebSocketServer:Mse}=require("ws"),{createServer:Pse}=require("tls"),{getTicketKeys:vse,restartNumber:Bse}=Je(),{Headers:fH}=(bd(),Z(WU)),{recordAction:Wu,recordActionBinary:Hse}=(_n(),Z(wc)),{Request:EH,node_request_key:zEe,createReuseportFd:lH}=(Mg(),Z(rB));if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Bse<=1&&Xs.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:JEe,CONFIG_PARAMS:qse}=Dn;At.initSync();var Fse=At.get(qse.HTTP_SESSIONAFFINITY),js={};zu.registerServer=hR;zu.httpServer=mR;zu.deliverSocket=ER;zu.startServers=hH;uE.http=mR;uE.request=Vse;uE.socket=$se;uE.ws=Yse;var lR=[],_R=[],Gse,to={},cE={},xse=[],dR=[];function hH(){return xg().loadRootComponents(!0).then(()=>{Qu?.on("message",t=>{let{port:r,fd:s,data:n}=t;if(s)ER(s,r,n);else if(t.requestId)kse(t);else if(t.type===Dn.ITC_EVENT_TYPES.SHUTDOWN){Xs.trace("received shutdown request",Ku);for(let i in js){let o=js[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),Xs.info("Closed all http connections",i,Ku)},4e3).unref()),o.close?.(()=>{clearInterval(c),setTimeout(()=>{console.log("forced close server",i,Ku),o.cantCleanupProperly||Xs.warn("Had to forcefully exit the thread",Ku),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(lH&&!Fse)for(let t in js){let r=js[t],s;try{s=lH(+t,"::")}catch(n){console.error(`Unable to bind to port ${t}`,n);continue}e.push(new Promise((n,i)=>{r.listen({fd:s},()=>{n(),Xs.trace("Listening on port "+t,Ku)}).on("error",i)}))}Promise.all(e).then(()=>{Qu?.postMessage({type:Dn.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(hH,"startServers");Ise||hH();function ER(e,t,r){let s=e?.read?e:new wse({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=js[t];if(n.isSecure&&(s.startTime=performance.now()),n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=js[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(Xs.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(ER,"deliverSocket");var _H=new Map;function kse(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=_H.get(n),r){case"connection":i=ER(void 0,t),_H.set(n,i),i.write=(c,u,_)=>(Qu.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(Qu.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Qu.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"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(kse,"proxyRequest");function hR(e,t){+t||(t=parseInt(At.get(Dn.CONFIG_PARAMS.HTTP_PORT),10));let r=js[t];if(r){let s=r.lastServer||r;s.off("unhandled",dH),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else js[t]=e;e.on("unhandled",dH)}a(hR,"registerServer");function mH(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=[],At.get(Dn.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:At.get(Dn.CONFIG_PARAMS.HTTP_PORT),secure:At.get(Dn.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),At.get(Dn.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:At.get(Dn.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),t}a(mH,"getPorts");function mR(e,t){for(let{port:r,secure:s}of mH(t))pH(r,s,t?.isOperationsServer),typeof e=="function"?dR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):hR(e,r),cE[r]=fR(dR,r),Gse=fR(xse,r)}a(mR,"httpServer");function pH(e,t,r){if(!to[e]){let s=r?"operationsApi_network":"http",n={keepAliveTimeout:At.get(s+"_keepAliveTimeout"),headersTimeout:At.get(s+"_headersTimeout"),requestTimeout:At.get(s+"_timeout")};if(t){s=r?"operationsApi_":"";let i=At.get(s+"tls_privateKey"),o=At.get(s+"tls_certificate"),c=At.get(s+"tls_certificateAuthority");Object.assign(n,{key:Aa(i),cert:Aa(o)+(c?`
29
29
 
30
- `+Aa(c):""),ticketKeys:vse()})}to[e]=(t?Use:Lse)(n,async(i,o)=>{try{let u=performance.now(),_=new fH(i,o);r&&(_.isOperationsServer=!0);let l=await cE[e](_);if(!l){if(_._nodeResponse.statusCode)return;l=pH(_)}if(l.headers?.set?.("Server","HarperDB"),l.status===-1){for(let b of l.headers||[])o.setHeader(b[0],b[1]);return i.baseRequest=_,o.baseResponse=l,to[e].emit("unhandled",i,o)}let d=l.status||200,f=performance.now(),E=f-u,h=l.body,p;if(!l.handlesHeaders){let b=l.headers||new dH;if(h?h.length>=0&&(typeof h=="string"?b.set("Content-Length",Buffer.byteLength(h)):b.set("Content-Length",h.length),p=!0):(b.set("Content-Length","0"),p=!0),b.append){let O=`hdb;dur=${E.toFixed(2)}`;l.wasCacheMiss&&(O+=", miss"),b.append("Server-Timing",O,!0)}o.writeHead(d,b&&(b[Symbol.iterator]?Array.from(b):b)),p&&o.end(h)}let S=_.handlerPath,R=_.method;if(Wu(E,"duration",S,R,l.wasCacheMiss==null?void 0:l.wasCacheMiss?"cache-miss":"cache-hit"),Hse(d<400,"success",S,R),!p)if(h?.pipe){h.pipe(o),h.destroy&&o.on("close",()=>{h.destroy()});let b=0;h.on("data",O=>{b+=O.length}),h.on("end",()=>{Wu(performance.now()-f,"transfer",S,R),Wu(b,"bytes-sent",S,R)})}else h?.then?h.then(b=>{o.end(b)},c):o.end(h)}catch(u){c(u)}function c(u){let _=u.headers;o.writeHead(u.statusCode||500,_&&(_[Symbol.iterator]?Array.from(_):_)),o.end(u.toString()),u.statusCode?u.statusCode===500?Js.warn(u):Js.info(u):Js.error(u)}a(c,"onError")}),t&&(to[e].on("secureConnection",i=>{i._parent.startTime&&Wu(performance.now()-i._parent.startTime,"tls-handshake",e),Wu(i.isSessionReused(),"tls-reused",e)}),to[e].isSecure=!0),hR(to[e],e)}return to[e]}a(mH,"getHTTPServer");function fR(e,t){let r=pH;for(let s=e.length;s>0;){let{listener:n,port:i}=e[--s];if(i===t||i==="all"){let o=r;r=a(c=>n(c,o),"next_callback")}}return r}a(fR,"makeCallbackChain");function pH(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new dH}}a(pH,"unhandled");function Vse(e,t){mR(e,{requestOnly:!0,...t})}a(Vse,"onRequest");function $se(e,t){if(t.securePort){let r=Rt.get("tls_privateKey"),s=Rt.get("tls_certificate"),n=Rt.get("tls_certificateAuthority"),i=Pse({key:Aa(r),cert:Aa(s)+(n?`
30
+ `+Aa(c):""),ticketKeys:vse()})}to[e]=(t?Use:Lse)(n,async(i,o)=>{try{let u=performance.now(),_=new EH(i,o);r&&(_.isOperationsServer=!0);let l=await cE[e](_);if(!l){if(_._nodeResponse.statusCode)return;l=SH(_)}if(l.headers?.set?.("Server","HarperDB"),l.status===-1){for(let b of l.headers||[])o.setHeader(b[0],b[1]);return i.baseRequest=_,o.baseResponse=l,to[e].emit("unhandled",i,o)}let d=l.status||200,f=performance.now(),E=f-u,h=l.body,p;if(!l.handlesHeaders){let b=l.headers||new fH;if(h?h.length>=0&&(typeof h=="string"?b.set("Content-Length",Buffer.byteLength(h)):b.set("Content-Length",h.length),p=!0):(b.set("Content-Length","0"),p=!0),b.append){let O=`hdb;dur=${E.toFixed(2)}`;l.wasCacheMiss&&(O+=", miss"),b.append("Server-Timing",O,!0)}o.writeHead(d,b&&(b[Symbol.iterator]?Array.from(b):b)),p&&o.end(h)}let S=_.handlerPath,R=_.method;if(Wu(E,"duration",S,R,l.wasCacheMiss==null?void 0:l.wasCacheMiss?"cache-miss":"cache-hit"),Hse(d<400,"success",S,R),!p)if(h?.pipe){h.pipe(o),h.destroy&&o.on("close",()=>{h.destroy()});let b=0;h.on("data",O=>{b+=O.length}),h.on("end",()=>{Wu(performance.now()-f,"transfer",S,R),Wu(b,"bytes-sent",S,R)})}else h?.then?h.then(b=>{o.end(b)},c):o.end(h)}catch(u){c(u)}function c(u){let _=u.headers;o.writeHead(u.statusCode||500,_&&(_[Symbol.iterator]?Array.from(_):_)),o.end(u.toString()),u.statusCode?u.statusCode===500?Xs.warn(u):Xs.info(u):Xs.error(u)}a(c,"onError")}),t&&(to[e].on("secureConnection",i=>{i._parent.startTime&&Wu(performance.now()-i._parent.startTime,"tls-handshake",e),Wu(i.isSessionReused(),"tls-reused",e)}),to[e].isSecure=!0),hR(to[e],e)}return to[e]}a(pH,"getHTTPServer");function fR(e,t){let r=SH;for(let s=e.length;s>0;){let{listener:n,port:i}=e[--s];if(i===t||i==="all"){let o=r;r=a(c=>n(c,o),"next_callback")}}return r}a(fR,"makeCallbackChain");function SH(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new fH}}a(SH,"unhandled");function Vse(e,t){mR(e,{requestOnly:!0,...t})}a(Vse,"onRequest");function $se(e,t){if(t.securePort){let r=At.get("tls_privateKey"),s=At.get("tls_certificate"),n=At.get("tls_certificateAuthority"),i=Pse({key:Aa(r),cert:Aa(s)+(n?`
31
31
 
32
- `+Aa(n):"")},e);Xs[t.securePort]=i}if(t.port){let r=Cse(e);Xs[t.port]=r}}a($se,"onSocket");Object.defineProperty(Dse.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 Yse(e,t){for(let{port:r,secure:s}of hH(t)){_R[r]||(_R[r]=new Mse({server:mH(r,s)}),_R[r].on("connection",async(i,o)=>{try{let c=new fH(o);c.isWebSocket=!0;let u=cE[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let l=0;l<lR.length;l++){let d=lR[l];if(d.protocol){if(d.protocol===_){d.listener(i,c,u);break}}else d.listener(i,c,u)}}catch(c){Js.warn("Error handling WebSocket connection",c)}}));let n=t?.subProtocol||"";lR.push({listener:e,protocol:n}),cE[r]=fR(dR,r)}}a(Yse,"onWebSocket");function _H(e,t){t.writeHead(404),t.end(`Not found
33
- `)}a(_H,"defaultNotFound")});module.exports=Kse();
32
+ `+Aa(n):"")},e);js[t.securePort]=i}if(t.port){let r=Cse(e);js[t.port]=r}}a($se,"onSocket");Object.defineProperty(Dse.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 Yse(e,t){for(let{port:r,secure:s}of mH(t)){_R[r]||(_R[r]=new Mse({server:pH(r,s)}),_R[r].on("connection",async(i,o)=>{try{let c=new EH(o);c.isWebSocket=!0;let u=cE[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let l=0;l<lR.length;l++){let d=lR[l];if(d.protocol){if(d.protocol===_){d.listener(i,c,u);break}}else d.listener(i,c,u)}}catch(c){Xs.warn("Error handling WebSocket connection",c)}}));let n=t?.subProtocol||"";lR.push({listener:e,protocol:n}),cE[r]=fR(dR,r)}}a(Yse,"onWebSocket");function dH(e,t){t.writeHead(404),t.end(`Not found
33
+ `)}a(dH,"defaultNotFound")});module.exports=Kse();