harperdb 4.2.0-rc.2 → 4.2.1

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 kB=Object.create;var ha=Object.defineProperty;var VB=Object.getOwnPropertyDescriptor;var $B=Object.getOwnPropertyNames;var YB=Object.getPrototypeOf,KB=Object.prototype.hasOwnProperty;var a=(e,t)=>ha(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)ha(e,r,{get:t[r],enumerable:!0})},zR=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of $B(t))!KB.call(e,n)&&n!==r&&ha(e,n,{get:()=>t[n],enumerable:!(s=VB(t,n))||s.enumerable});return e};var U=(e,t,r)=>(r=e!=null?kB(YB(e)):{},zR(t||!e||!e.__esModule?ha(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>zR(ha({},"__esModule",{value:!0}),e);var jR=T((Wre,XR)=>{var WB=require("fast-glob"),{statSync:Wf,existsSync:Qf,readFileSync:QB,writeFileSync:zB}=require("fs"),{spawnSync:JB,spawn:XB,execFileSync:Kre}=require("child_process"),{isMainThread:jB}=require("worker_threads"),{join:wn,relative:JR}=require("path"),{PACKAGE_ROOT:Zr}=b(),{tmpdir:ZB,platform:eH}=require("os");require("source-map-support").install();var tH=["resources","server","dataLayer","components"],ma="ts-build",zf,rH=__filename.endsWith("tsBuild.js");if(rH){if(jB){let r;try{Wf(wn(Zr,ma)),r=!0}catch{}if(r)for(let s of WB.sync(tH.map(n=>n+"/**/*.ts"),{cwd:Zr})){let n=0,i=0;try{n=Wf(wn(Zr,s)).mtimeMs-5e3,i=Wf(wn(Zr,ma,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."),zf=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),zf=!0;if(zf){let s=wn(Zr,"node_modules/.bin/tsc");eH()==="win32"&&(s+=".cmd");let n=JB(s,{cwd:Zr});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=wn(ZB(),"harperdb-tsc.pid"),o;if(Qf(i))try{process.kill(+QB(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=XB(s,["--watch"],{cwd:Zr,detached:!0,stdio:"ignore"});zB(i,c.pid.toString()),c.unref()}}}}let e=XR.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Zr)&&!s[0].includes("node_modules")){let i=JR(Zr,s[0]),o;i.startsWith(ma)?o=wn(Zr,JR(ma,i)):o=wn(Zr,ma,i);let c=wn(o,r),u=c+".js";if(Qf(u))return u;if(c.includes(".")&&Qf(c))return c}return t(r,s,n)}}});var b=T((Jre,dg)=>{"use strict";var Dr=require("path"),sH=require("fs"),{relative:Qre,join:zre}=Dr,{existsSync:nH}=sH;function iH(){let e=__dirname;for(;!nH(Dr.join(e,"package.json"));){let t=Dr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(iH,"getHDBPackageRoot");var Cn=iH(),ZR="js",Gu=ZR,oH="harperdb-config.yaml",aH="defaultConfig.yaml",cH="hdb",eg=`harperdb.${Gu}`,tg=`customFunctionsServer.${Gu}`,uH=`restartHdb.${Gu}`,Xf="HarperDB",qu="Custom Functions",xu="Clustering Hub",ku="Clustering Leaf",lH="Clustering Ingest Service",_H="Clustering Reply Service",dH="foreground.pid",fH="hdb.pid",EH="data",hH={HDB:Xf,CLUSTERING_HUB:xu,CLUSTERING_LEAF:ku,CLUSTERING_INGEST_SERVICE:lH,CLUSTERING_REPLY_SERVICE:_H,CUSTOM_FUNCTIONS:qu,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"},mH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},pH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},SH={harperdb:Xf,"clustering hub":xu,"clustering leaf":ku,"custom functions":qu,custom_functions:qu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},TH={CLUSTERING_HUB_PROC_DESCRIPTOR:xu,CLUSTERING_LEAF_PROC_DESCRIPTOR:ku},Jf={HDB:Dr.join(Cn,"server/harperdb"),CUSTOM_FUNCTIONS:Dr.join(Cn,"server/customFunctions"),CLUSTERING_HUB:Dr.join(Cn,"server/nats"),CLUSTERING_LEAF:Dr.join(Cn,"server/nats")},RH={HDB:Dr.join(Jf.HDB,eg),CUSTOM_FUNCTIONS:Dr.join(Jf.CUSTOM_FUNCTIONS,tg)},gH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Dr.join(Cn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Dr.join(Cn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Dr.join(Cn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},AH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},rg="support@harperdb.io",OH="customer-success@harperdb.io",sg=1,NH=4141,ng="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",bH="https://www.harperdb.io/product",yH=`For support, please submit a request at ${ng} or contact ${rg}`,ig=`For license support, please contact ${OH}`,IH="None of the specified records were found.",wH="hash attribute not found",CH=`Your current license only supports ${sg} role. ${ig}`,LH="Your current license only supports 3 connections to a node.",DH="127.0.0.1",UH=1,MH=/^\.$/,PH=/^\.\.$/,vH="U+002E",BH=/\//g,HH="U+002F",FH=/U\+002F/g,qH=/^U\+002E$/,GH=/^U\+002EU\+002E$/,xH="d",kH=999999,VH="*",$H="--max-old-space-size=",YH="system",KH="__hdb_hash",WH=".harperdb",QH=".hdb",zH="keys",JH="hdb_boot_properties.file",XH=".updateConfig.json",jH="SIGTSTP",ZH=24,eF=6e4,tF=448,rF="blob",sF="trash",nF="database",iF="schema",oF="transactions",aF=".count",cF="id",uF="PROCESS_NAME",og={SETTINGS_PATH_KEY:"settings_path"},ag=require("lodash"),lF={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"},_F={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},dF={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},fF={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"},EF={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"},_r="hdb_internal:",hF={CREATE_SCHEMA:_r+"create_schema",CREATE_TABLE:_r+"create_table",CREATE_ATTRIBUTE:_r+"create_attribute",ADD_USER:_r+"add_user",ALTER_USER:_r+"alter_user",DROP_USER:_r+"drop_user",HDB_NODES:_r+"hdb_nodes",HDB_USERS:_r+"hdb_users",HDB_WORKERS:_r+"hdb_workers",CATCHUP:_r+"catchup",SCHEMA_CATCHUP:_r+"schema_catchup",WORKER_ROOM:_r+"cluster_workers"},mF={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"},pF="060493.ks",SF=".license",TF={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},z={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",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"},gF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},AF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},pa={};pa[z.INSERT]=z.INSERT;pa[z.UPDATE]=z.UPDATE;pa[z.UPSERT]=z.UPSERT;pa[z.DELETE]=z.DELETE;var ye=Object.create(null);ye[z.DESCRIBE_ALL]=z.DESCRIBE_ALL;ye[z.DESCRIBE_TABLE]=z.DESCRIBE_TABLE;ye[z.DESCRIBE_SCHEMA]=z.DESCRIBE_SCHEMA;ye[z.READ_LOG]=z.READ_LOG;ye[z.ADD_NODE]=z.ADD_NODE;ye[z.LIST_USERS]=z.LIST_USERS;ye[z.LIST_ROLES]=z.LIST_ROLES;ye[z.USER_INFO]=z.USER_INFO;ye[z.SQL]=z.SQL;ye[z.GET_JOB]=z.GET_JOB;ye[z.SEARCH_JOBS_BY_START_DATE]=z.SEARCH_JOBS_BY_START_DATE;ye[z.DELETE_FILES_BEFORE]=z.DELETE_FILES_BEFORE;ye[z.EXPORT_LOCAL]=z.EXPORT_LOCAL;ye[z.EXPORT_TO_S3]=z.EXPORT_TO_S3;ye[z.CLUSTER_STATUS]=z.CLUSTER_STATUS;ye[z.REMOVE_NODE]=z.REMOVE_NODE;ye[z.RESTART]=z.RESTART;ye[z.CUSTOM_FUNCTIONS_STATUS]=z.CUSTOM_FUNCTIONS_STATUS;ye[z.GET_CUSTOM_FUNCTIONS]=z.GET_CUSTOM_FUNCTIONS;ye[z.GET_CUSTOM_FUNCTION]=z.GET_CUSTOM_FUNCTION;ye[z.SET_CUSTOM_FUNCTION]=z.SET_CUSTOM_FUNCTION;ye[z.DROP_CUSTOM_FUNCTION]=z.DROP_CUSTOM_FUNCTION;ye[z.ADD_CUSTOM_FUNCTION_PROJECT]=z.ADD_CUSTOM_FUNCTION_PROJECT;ye[z.DROP_CUSTOM_FUNCTION_PROJECT]=z.DROP_CUSTOM_FUNCTION_PROJECT;ye[z.PACKAGE_CUSTOM_FUNCTION_PROJECT]=z.PACKAGE_CUSTOM_FUNCTION_PROJECT;ye[z.DEPLOY_CUSTOM_FUNCTION_PROJECT]=z.DEPLOY_CUSTOM_FUNCTION_PROJECT;var OF={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},NF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},cg={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"},bF=ag.invert(cg),yF={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"},O={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"},ug={settings_path:og.SETTINGS_PATH_KEY,hdb_root_key:O.ROOTPATH,hdb_root:O.ROOTPATH,rootpath:O.ROOTPATH,server_port_key:O.OPERATIONSAPI_NETWORK_PORT,server_port:O.OPERATIONSAPI_NETWORK_PORT,cert_key:O.TLS_CERTIFICATE,certificate:O.TLS_CERTIFICATE,private_key_key:O.TLS_PRIVATEKEY,private_key:O.TLS_PRIVATEKEY,http_secure_enabled_key:O.OPERATIONSAPI_NETWORK_HTTPS,https_on:O.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:O.OPERATIONSAPI_NETWORK_CORS,cors_on:O.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:O.LOGGING_LEVEL,log_level:O.LOGGING_LEVEL,log_path_key:O.LOGGING_ROOT,log_path:O.LOGGING_ROOT,clustering_node_name_key:O.CLUSTERING_NODENAME,node_name:O.CLUSTERING_NODENAME,clustering_enabled_key:O.CLUSTERING_ENABLED,clustering:O.CLUSTERING_ENABLED,max_http_threads:O.THREADS,max_hdb_processes:O.THREADS,server_timeout_key:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:O.LOGGING_AUDITLOG,disable_transaction_log:O.LOGGING_AUDITLOG,operation_token_timeout_key:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:O.HTTP_PORT,custom_functions_port:O.HTTP_PORT,custom_functions_directory_key:O.COMPONENTSROOT,custom_functions_directory:O.COMPONENTSROOT,max_custom_function_processes:O.THREADS,log_to_file:O.LOGGING_FILE,log_to_stdstreams:O.LOGGING_STDSTREAMS,local_studio_on:O.LOCALSTUDIO_ENABLED,clustering_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:O.CLUSTERING_USER,clustering_enabled:O.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:O.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:O.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:O.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:O.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:O.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:O.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:O.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:O.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:O.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:O.CLUSTERING_NODENAME,clustering_tls_certificate:O.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:O.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:O.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:O.CLUSTERING_TLS_INSECURE,clustering_tls_verify:O.CLUSTERING_TLS_VERIFY,clustering_loglevel:O.CLUSTERING_LOGLEVEL,clustering_republishmessages:O.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:O.CLUSTERING_DATABASELEVEL,customfunctions_network_port:O.HTTP_PORT,customfunctions_tls_certificate:O.TLS_CERTIFICATE,customfunctions_network_cors:O.HTTP_CORS,customfunctions_network_corsaccesslist:O.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:O.HTTP_HEADERSTIMEOUT,customfunctions_network_https:O.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:O.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:O.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:O.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:O.HTTP_TIMEOUT,http_threads:O.THREADS,threads:O.THREADS,http_session_affinity:O.HTTP_SESSIONAFFINITY,http_compressionthreshold:O.HTTP_COMPRESSIONTHRESHOLD,http_cors:O.HTTP_CORS,http_corsaccesslist:O.HTTP_CORSACCESSLIST,http_headerstimeout:O.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:O.HTTP_KEEPALIVETIMEOUT,http_timeout:O.HTTP_TIMEOUT,http_port:O.HTTP_PORT,http_secureport:O.HTTP_SECUREPORT,customfunctions_processes:O.THREADS,customfunctions_root:O.COMPONENTSROOT,localstudio_enabled:O.LOCALSTUDIO_ENABLED,logging_file:O.LOGGING_FILE,logging_level:O.LOGGING_LEVEL,logging_root:O.LOGGING_ROOT,logging_rotation_enabled:O.LOGGING_ROTATION_ENABLED,logging_rotation_compress:O.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:O.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:O.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:O.LOGGING_ROTATION_PATH,logging_stdstreams:O.LOGGING_STDSTREAMS,logging_auditlog:O.LOGGING_AUDITLOG,logging_auditretention:O.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:O.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:O.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:O.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:O.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:O.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:O.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:O.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:O.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:O.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:O.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:O.ROOTPATH,databases:O.DATABASES,storage_path:O.STORAGE_PATH,ignorescripts:O.IGNORE_SCRIPTS,mqtt_network_port:O.MQTT_NETWORK_PORT,mqtt_websocket:O.MQTT_WEBSOCKET,mqtt_network_secureport:O.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:O.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:O.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:O.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:O.AUTHENTICATION_CACHETTL,authentication_enablesessions:O.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:O.COMPONENTSROOT,tls_certificate:O.TLS_CERTIFICATE,tls_privatekey:O.TLS_PRIVATEKEY,tls_certificateauthority:O.TLS_CERTIFICATEAUTHORITY};for(let e in O){let t=O[e];ug[t.toLowerCase()]=t}var IF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},wF={csv_file_load:"csv_file_load",csv_data_load:z.CSV_DATA_LOAD,csv_url_load:z.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},CF={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"},LF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},DF={VERSION_DEFAULT:"2.2.0"},UF={DEVELOPMENT:8192,DEFAULT:512},MF={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"},PF={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"},vF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},lg={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},BF=Symbol("metadata"),HF="__clustering__",FF=Object.values(lg),qF=15984864e5,_g={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},GF=ag.invert(_g),xF={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"},kF=111,VF=`\r
2
- `,$F={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},YF=["*","%"],KF="unauthorized_access",WF="func_val",QF={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},zF={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},JF={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"},XF={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},jF={HTTP:"http"},ZF={STOPPED:"stopped",ONLINE:"online"},eq="3.x.x",tq={SUCCESS:"success",FAILURE:"failure"},rq={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};dg.exports={LOCAL_HARPERDB_OPERATIONS:ye,HDB_SUPPORT_ADDRESS:rg,HDB_SUPPORT_URL:ng,HDB_PRICING_URL:bH,SUPPORT_HELP_MSG:yH,LICENSE_HELP_MSG:ig,HDB_PROC_NAME:eg,HDB_PROC_DESCRIPTOR:Xf,CLUSTERING_LEAF_PROC_DESCRIPTOR:ku,CLUSTERING_HUB_PROC_DESCRIPTOR:xu,SYSTEM_SCHEMA_NAME:YH,HASH_FOLDER_NAME:KH,HDB_HOME_DIR_NAME:WH,UPDATE_FILE_NAME:XH,LICENSE_KEY_DIR_NAME:zH,BOOT_PROPS_FILE_NAME:JH,JOB_TYPE_ENUM:wF,JOB_STATUS_ENUM:TF,SYSTEM_TABLE_NAMES:fF,SYSTEM_TABLE_HASH_ATTRIBUTES:EF,OPERATIONS_ENUM:z,VALID_S3_FILE_TYPES:RF,S3_BUCKET_AUTH_KEYS:gF,VALID_SQL_OPS_ENUM:AF,GEO_CONVERSION_ENUM:NF,HDB_SETTINGS_NAMES:cg,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:bF,SERVICE_ACTIONS_ENUM:OF,CLUSTER_MESSAGE_TYPE_ENUM:CF,CLUSTER_CONNECTION_DIRECTION_ENUM:LF,CLUSTER_EVENTS_DEFS_ENUM:MF,PERIOD_REGEX:MH,DOUBLE_PERIOD_REGEX:PH,UNICODE_PERIOD:vH,FORWARD_SLASH_REGEX:BH,UNICODE_FORWARD_SLASH:HH,ESCAPED_FORWARD_SLASH_REGEX:FH,ESCAPED_PERIOD_REGEX:qH,ESCAPED_DOUBLE_PERIOD_REGEX:GH,REG_KEY_FILE_NAME:pF,RESTART_TIMEOUT_MS:eF,HDB_FILE_PERMISSIONS:tF,DATABASES_DIR_NAME:nF,LEGACY_DATABASES_DIR_NAME:iF,TRANSACTIONS_DIR_NAME:oF,LIMIT_COUNT_NAME:aF,ID_ATTRIBUTE_STRING:cF,INSERT_MODULE_ENUM:_F,UPGRADE_JSON_FIELD_NAMES_ENUM:dF,RESTART_CODE:jH,RESTART_CODE_NUM:ZH,CLUSTER_OPERATIONS:pa,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:mF,HDB_INTERNAL_SC_CHANNEL_PREFIX:_r,INTERNAL_SC_CHANNELS:hF,CLUSTERING_MESSAGE_TYPES:xF,HDB_FILE_SUFFIX:QH,BLOB_FOLDER_NAME:rF,HDB_TRASH_DIR:sF,ORIGINATOR_SET_VALUE:kF,LICENSE_VALUES:DF,RAM_ALLOCATION_ENUM:UF,TIME_STAMP_NAMES_ENUM:lg,TIME_STAMP_NAMES:FF,PERMS_UPDATE_RELEASE_TIMESTAMP:qF,SEARCH_NOT_FOUND_MESSAGE:IH,SEARCH_ATTRIBUTE_NOT_FOUND:wH,LICENSE_ROLE_DENIED_RESPONSE:CH,LICENSE_MAX_CONNS_REACHED:LH,BASIC_LICENSE_MAX_NON_CU_ROLES:sg,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:NH,VALUE_SEARCH_COMPARATORS:_g,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:GF,LICENSE_FILE_NAME:SF,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:PF,NEW_LINE:VF,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:UH,MOMENT_DAYS_TAG:xH,API_TURNOVER_SEC:kH,LOOPBACK:DH,CODE_EXTENSION:Gu,WILDCARD_SEARCH_VALUE:VH,NODE_ERROR_CODES:vF,JAVASCRIPT_EXTENSION:ZR,PERMS_CRUD_ENUM:$F,UNAUTHORIZED_PERMISSION_NAME:KF,SEARCH_WILDCARDS:YF,FUNC_VAL:WF,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:QF,JWT_ENUM:zF,CLUSTERING_FLAG:HF,ITC_EVENT_TYPES:JF,CUSTOM_FUNCTION_PROC_NAME:tg,CUSTOM_FUNCTION_PROC_DESCRIPTOR:qu,SERVICES:XF,THREAD_TYPES:jF,MEM_SETTING_KEY:$H,HDB_RESTART_SCRIPT:uH,PROCESS_DESCRIPTORS:hH,SERVICE_SERVERS:RH,SERVICE_SERVERS_CWD:Jf,PROCESS_DESCRIPTORS_VALIDATE:SH,LAUNCH_SERVICE_SCRIPTS:gH,LOG_LEVELS:pH,PROCESS_NAME_ENV_PROP:uF,LOG_NAMES:mH,PM2_PROCESS_STATUSES:ZF,CONFIG_PARAM_MAP:ug,CONFIG_PARAMS:O,HDB_CONFIG_FILE:oH,HDB_DEFAULT_CONFIG_FILE:aH,ROLE_TYPES_ENUM:AH,BOOT_PROP_PARAMS:og,INSTALL_PROMPTS:lF,HDB_ROOT_DIR_NAME:cH,CLUSTERING_PROCESSES:TH,FOREGROUND_PID_FILE:dH,PACKAGE_ROOT:Cn,PRE_4_0_0_VERSION:eq,DATABASES_PARAM_CONFIG:IF,METADATA_PROPERTY:BF,AUTH_AUDIT_STATUS:tq,AUTH_AUDIT_TYPES:rq,HDB_PID_FILE:fH,DEFAULT_DATABASE_NAME:EH,LEGACY_CONFIG_PARAMS:yF};jR()});var jf=T((jre,hg)=>{"use strict";var fg=require("minimist");hg.exports=sq;function sq(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=Eg(process.env),s=Eg(fg(process.argv))):(r=process.env,s=fg(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(sq,"assignCMDENVVariables");function Eg(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(Eg,"objKeysToLowerCase")});var G=T((ese,iE)=>{"use strict";var oi=require("fs-extra"),{workerData:nq,threadId:iq}=require("worker_threads"),Js=require("path"),Sg=require("yaml"),Tg=require("properties-reader"),ct=b(),mg=jf(),oq=require("os"),{PACKAGE_ROOT:eE}=b(),{_assignPackageExport:aq}=require("../../index"),Ta={};for(let e in console)Ta[e]||(Ta[e]=console[e]);var Yt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Rg={STDOUT:"stdOut",STDERR:"stdErr"},cq=Js.join(eE,"logs"),uq=Js.join(eE,"config/yaml/",ct.HDB_DEFAULT_CONFIG_FILE),lq=1e4,zs,Os,$t,Vu,$u,Ra,Xi,Sa;Sa===void 0&&gg();iE.exports={notify:Ng,fatal:bg,error:ga,warn:nE,info:Yu,debug:sE,trace:rE,setLogLevel:pq,log_level:$t,loggerWithTag:_q,suppressLogging:dq,initLogSettings:gg,setupConsoleLogging:Ag,logCustomLevel:hq,closeLogFile:tE,getLogFilePath:()=>Ra,OUTPUTS:Rg,AuthAuditLog:Rq};aq("logger",iE.exports);function gg(e=!1){try{if(Sa===void 0||e){tE();let t=mq(),r=mg(["ROOTPATH"]);try{Sa=Tg(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!oi.pathExistsSync(Js.join(r.ROOTPATH,ct.HDB_CONFIG_FILE)))throw s}({level:$t,config_log_path:$u,to_file:zs,to_stream:Os}=Sq(r.ROOTPATH?Js.join(r.ROOTPATH,ct.HDB_CONFIG_FILE):Sa.get("settings_path"))),Vu=ct.LOG_NAMES.HDB,Ra=Js.join($u,Vu)}}catch(t){if(Sa=void 0,t.code===ct.NODE_ERROR_CODES.ENOENT){let r=mg(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){$t=u;continue}if(c===ct.CONFIG_PARAMS.LOGGING_STDSTREAMS){Os=u;continue}c===ct.CONFIG_PARAMS.LOGGING_FILE&&(zs=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=Tq();zs=zs===void 0?n:zs,zs=pg(zs),Os=Os===void 0?i:Os,Os=pg(Os),$t=$t===void 0?s:$t,$u=cq,Vu=ct.LOG_NAMES.INSTALL,Ra=Js.join($u,Vu);return}throw ga("Error initializing log settings"),ga(t),t}process.env.DEV_MODE&&(Os=!0),Ag()}a(gg,"initLogSettings");var Zf=!0;function Ag(){Ji("error",ga),Ji("warn",nE),Ji("log",Yu),Ji("info",Yu),Ji("debug",sE),Ji("trace",rE)}a(Ag,"setupConsoleLogging");function Ji(e,t){console[e]=function(...r){if(Zf&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Ta[e](...r)}}a(Ji,"logConsole");function _q(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Ng),fatal:r(bg),error:r(ga),warn:r(nE),info:r(Yu),debug:r(sE),trace:r(rE)};function r(s){return function(...n){return s(t,...n)}}}a(_q,"loggerWithTag");function dq(e){try{Zf=!1,e()}finally{Zf=!0}}a(dq,"suppressLogging");var fq=nq?.name?.replace(/ /g,"-")||"main";function Xs(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||fq+"/"+iq);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(Xs,"createLogRecord");function Aa(e){zs&&Og(e),Os&&process.stdout.write(e)}a(Aa,"logStdOut");function Ku(e){zs&&Og(e),Os&&process.stderr.write(e)}a(Ku,"logStdErr");function Og(e){Eq(),Xi?oi.appendFileSync(Xi,e):Ta.log(e)}a(Og,"logToFile");function tE(){try{oi.closeSync(Xi)}catch{}Xi=null}a(tE,"closeLogFile");function Eq(){if(!Xi){try{if(!Ra)debugger;Xi=oi.openSync(Ra,"a")}catch(e){Ta.error(e)}setTimeout(()=>{tE()},lq).unref()}}a(Eq,"openLogFile");function Yu(...e){Yt[$t]<=Yt.info&&Aa(Xs("info",e))}a(Yu,"info");function rE(...e){Yt[$t]<=Yt.trace&&Aa(Xs("trace",e))}a(rE,"trace");function ga(...e){Yt[$t]<=Yt.error&&Ku(Xs("error",e))}a(ga,"error");function sE(...e){Yt[$t]<=Yt.debug&&Aa(Xs("debug",e))}a(sE,"debug");function Ng(...e){Yt[$t]<=Yt.notify&&Aa(Xs("notify",e))}a(Ng,"notify");function bg(...e){Yt[$t]<=Yt.fatal&&Ku(Xs("fatal",e))}a(bg,"fatal");function nE(...e){Yt[$t]<=Yt.warn&&Ku(Xs("warn",e))}a(nE,"warn");function hq(e,t,...r){t===Rg.STDERR?Ku(Xs(e,r)):Aa(Xs(e,r))}a(hq,"logCustomLevel");function mq(){let e;try{e=oq.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Js.join(e,ct.HDB_HOME_DIR_NAME,ct.BOOT_PROPS_FILE_NAME);return oi.existsSync(t)||(t=Js.join(eE,"utility/hdb_boot_properties.file")),t}a(mq,"getPropsFilePath");function pq(e){$t=e}a(pq,"setLogLevel");function pg(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(pg,"autoCastBoolean");function Sq(e){try{if(e.includes("config/settings.js")){let o=Tg(e);return{level:o.get(ct.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Js.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=Sg.parseDocument(oi.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(Sq,"getLogConfig");function Tq(){try{let e=Sg.parseDocument(oi.readFileSync(uq,"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(Tq,"getDefaultConfig");function Rq(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(Rq,"AuthAuditLog")});var Ig=T((rse,yg)=>{"use strict";var gq=require("util"),Aq=require("path"),Oq=require("child_process"),Nq=gq.promisify(Oq.execFile),bq=1e3*1e3*10;yg.exports={findPs:yq};async function yq(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await Nq("ps",["wwxo",`pid,${r}`],{maxBuffer:bq});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:Aq.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(yq,"findPs")});var ze=T((nse,Cg)=>{"use strict";var Iq="__dbis__",wq="__txns__",Cq="__environment_name__",Lq="__dbi_defintion__",Dq={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"},Uq=["__createdtime__","__updatedtime__"],Mq="\uFFFF",wg={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Pq=Object.values(wg);Cg.exports={AUDIT_STORE_NAME:wq,INTERNAL_DBIS_NAME:Iq,DBI_DEFINITION_NAME:Lq,SEARCH_TYPES:Dq,TIMESTAMP_NAMES:Uq,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Cq,TRANSACTIONS_DBI_NAMES_ENUM:wg,TRANSACTIONS_DBIS:Pq,OVERFLOW_MARKER:Mq}});var dr=T((ise,Fg)=>{"use strict";var Lg=b(),Dg=ze(),Ug={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},Mg=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Pg={500:Mg("There was an error processing your request."),400:"Invalid request"},vq=Pg[Ug.INTERNAL_SERVER_ERROR],Bq={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.`},Hq={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},Fq={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"},qq={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 ${Dg.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Dg.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"},Gq={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Lg.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 ${Lg.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"},vg={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"},xq={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."},kq={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`},Vq={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"},$q={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Yq={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`},Bg={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.`},Hg={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}`},Kq={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."},Wq={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},Qq={...vg,...Fq,...Bq,...xq,...kq,...Vq,...$q,...Yq,...Gq,...Bg,...Hg,...Kq,...Wq,...Hq};Fg.exports={CHECK_LOGS_WRAPPER:Mg,HDB_ERROR_MSGS:Qq,DEFAULT_ERROR_MSGS:Pg,DEFAULT_ERROR_RESP:vq,HTTP_STATUS_CODES:Ug,LMDB_ERRORS_ENUM:qq,AUTHENTICATION_ERROR_MSGS:vg,VALIDATION_ERROR_MSGS:Bg,ITC_ERRORS:Hg}});var j=T((ase,xg)=>{"use strict";var ji=dr(),zq=G(),Jq=b(),Wu=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,qg),this.statusCode=s||ji.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(ji.DEFAULT_ERROR_MSGS[s]?ji.DEFAULT_ERROR_MSGS[s]:ji.DEFAULT_ERROR_MSGS[ji.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&&zq[n](i)}},oE=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}},aE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function qg(e,t,r,s=Jq.LOG_LEVELS.ERROR,n=null,i=!1){if(Gg(e))return e;let o=new Wu(e,t,r,s,n);return i&&delete o.stack,o}a(qg,"handleHDBError");function Gg(e){return e.__proto__.constructor.name===Wu.name}a(Gg,"isHDBError");xg.exports={isHDBError:Gg,handleHDBError:qg,ClientError:oE,ServerError:aE,hdb_errors:ji}});var Vg=T((use,kg)=>{"use strict";var Xq={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))},jq="certificate.pem",Zq="privateKey.pem",eG="ca.pem";kg.exports={CERTIFICATE_VALUES:Xq,CERTIFICATE_PEM_NAME:jq,PRIVATEKEY_PEM_NAME:Zq,CA_PEM_NAME:eG}});var qe=T((lse,$g)=>{"use strict";var Kt=require("validate.js");Kt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Kt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Kt.validators.type.checks={Object:function(e){return Kt.isObject(e)&&!Kt.isArray(e)},Array:Kt.isArray,Integer:Kt.isInteger,Number:Kt.isNumber,String:Kt.isString,Date:Kt.isDate,Boolean:function(e){return typeof e=="boolean"}};Kt.validators.hasValidFileExt=function(e,t){return Kt.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};$g.exports={validateObject:tG,validateObjectAsync:rG,validateBySchema:sG};function tG(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Kt(e,t,{format:"flat"});return r?new Error(r):null}a(tG,"validateObject");async function rG(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Kt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(rG,"validateObjectAsync");function sG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(sG,"validateBySchema")});var uE=T((fse,zg)=>{"use strict";var Qg=require("fs-extra"),ue=require("joi"),nG=require("os"),{boolean:Ie,string:Ns,number:At,array:cE}=ue.types(),{totalmem:Yg}=require("os"),Zi=require("path"),iG=G(),zu=$(),dse=Vg(),Kg=b(),oG=qe(),Wg="log",aG="components",cG="Invalid logging.rotation.maxSize unit. Available units are G, M or K",uG="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",lG="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",_G="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",dG="rootPath config parameter is undefined",fG="clustering.enabled config parameter is undefined",ai=At.min(0).required(),Ju=cE.items({host:Ns.required(),port:ai}).empty(null),js;zg.exports={configValidator:EG,routesValidator:RG,route_constraints:Ju};function EG(e){if(js=e.rootPath,zu.isEmpty(js))throw dG;let t=Ie.required(),r=At.min(0).max(1e3).empty(null).default(TG),s=Ns.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Qu),n=Ns.optional().empty(null),i=Ns.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ue.string().empty(null).default(Qu),c=ue.custom(mG).empty(null).default(Qu),u=e.clustering?.enabled;if(zu.isEmpty(u))throw fG;let _;return u===!0?_=ue.object({enabled:t,hubServer:ue.object({cluster:ue.object({name:ue.required().empty(null),network:ue.object({port:ai,routes:Ju}).required()}).required(),leafNodes:ue.object({network:ue.object({port:ai}).required()}).required(),network:ue.object({port:ai}).required()}).required(),leafServer:ue.object({network:ue.object({port:ai,routes:Ju}).required(),streams:ue.object({maxAge:At.min(120).allow(null).optional(),maxBytes:At.min(1).allow(null).optional(),maxMsgs:At.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ue.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Ie.optional(),databaseLevel:Ie.optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ie.required(),verify:Ie.optional()}),user:Ns.optional().empty(null)}).required():_=ue.object({enabled:t,tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ie.required()})}).required(),ue.object({authentication:ue.object({authorizeLocal:Ie,cacheTTL:At.required(),enableSessions:Ie}),analytics:ue.object({aggregatePeriod:At}),componentsRoot:s.optional(),clustering:_,localStudio:ue.object({enabled:t}).required(),logging:ue.object({auditAuthEvents:ue.object({logFailed:Ie,logSuccessful:Ie}),file:Ie.required(),level:ue.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ue.object({enabled:Ie.optional(),compress:Ie.optional(),interval:Ns.custom(SG).optional().empty(null),maxSize:Ns.custom(pG).optional().empty(null),path:Ns.optional().empty(null).default(Qu)}).required(),root:s,stdStreams:Ie.required(),auditLog:Ie.required()}).required(),operationsApi:ue.object({network:ue.object({cors:Ie.optional(),corsAccessList:cE.optional(),headersTimeout:At.min(1).optional(),keepAliveTimeout:At.min(1).optional(),port:At.optional().empty(null),securePort:At.optional().empty(null),timeout:At.min(1).optional()}).optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:Ns.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ue.object({network:ue.object({port:ai,securePort:ai}).required(),webSocket:Ie.optional(),requireAuthentication:Ie.optional()}),http:ue.object({compressionThreshold:At.optional(),cors:Ie.optional(),corsAccessList:cE.optional(),headersTimeout:At.min(1).optional(),port:At.min(0).optional().empty(null),securePort:At.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:ue.object({writeAsync:Ie.required(),overlappingSync:Ie.optional(),caching:Ie.optional(),compression:Ie.optional(),noReadAhead:Ie.optional(),path:c,prefetchWrites:Ie.optional()}).required(),ignoreScripts:Ie.optional(),tls:ue.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(EG,"configValidator");function hG(e){return Qg.existsSync(e)?null:`Specified path ${e} does not exist.`}a(hG,"doesPathExist");function mG(e,t){ue.assert(e,Ns.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=hG(e);if(r)return t.message(r)}a(mG,"validatePath");function pG(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(cG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(lG):e}a(pG,"validateRotationMaxSize");function SG(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(uG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(_G):e}a(SG,"validateRotationInterval");function TG(e,t){let r=t.state.path.join("."),s=nG.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Yg();return i=Math.round(Math.min(i,Yg())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),iG.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(TG,"setDefaultThreads");function Qu(e,t){if(!zu.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(zu.isEmpty(js))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Zi.join(js,aG);case"logging.root":return Zi.join(js,Wg);case"clustering.leafServer.streams.path":return Zi.join(js,"clustering","leaf");case"storage.path":let s=Zi.join(js,Kg.LEGACY_DATABASES_DIR_NAME);return Qg.existsSync(s)?s:Zi.join(js,Kg.DATABASES_DIR_NAME);case"logging.rotation.path":return Zi.join(js,Wg);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Qu,"setDefaultRoot");function RG(e){let t=ue.object({routes:Ju});return oG.validateBySchema({routes:e},t)}a(RG,"routesValidator")});var eo={};Qe(eo,{server:()=>ut});var Jg,ut,Ur=Te(()=>{Jg=require("../../index"),ut={};(0,Jg._assignPackageExport)("server",ut)});var Er=T((mse,iA)=>{"use strict";var fr=b(),ht=$(),lt=G(),{configValidator:gG,routesValidator:Xg}=uE(),Wt=require("fs-extra"),AG=require("yaml"),es=require("path"),OG=require("is-number"),Zg=require("properties-reader"),NG=require("lodash"),{handleHDBError:bG}=j(),{HTTP_STATUS_CODES:yG,HDB_ERROR_MSGS:Xu}=dr(),hse=require("minimist"),{server:IG}=(Ur(),Z(eo)),{DATABASES_PARAM_CONFIG:Oa,CONFIG_PARAMS:Zs,CONFIG_PARAM_MAP:ts}=fr,wG="Unable to get config value because config is uninitialized",CG="Config successfully initialized",LG="Error backing up config file",DG="Empty parameter sent to getConfigValue",eA=es.join(fr.PACKAGE_ROOT,"config","yaml",fr.HDB_DEFAULT_CONFIG_FILE),UG="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",jg={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"},ju,Ot,Zu;iA.exports={createConfigFile:MG,getDefaultConfig:PG,getConfigValue:rA,initConfig:_E,flattenConfig:to,updateConfigValue:sA,updateConfigObject:BG,getConfiguration:qG,setConfiguration:GG,readConfigFile:fE,getClusteringRoutes:xG,initOldConfig:nA,getConfigFromFile:kG,getConfigFilePath:ci,addConfig:VG,deleteConfigFromFile:$G,getConfigObj:YG};function MG(e){let t=Ln(eA);ju=to(t.toJSON());let r;for(let o in e){let c=ts[o.toLowerCase()];if(c===Zs.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=lE(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){lt.error(l)}}}r&&tA(t,r),dE(t);let s=t.toJSON();Ot=to(s);let n=t.getIn(["rootPath"]),i=es.join(n,fr.HDB_CONFIG_FILE);Wt.createFileSync(i),Wt.writeFileSync(i,String(t)),lt.trace(`Config file written to ${i}`)}a(MG,"createConfigFile");function tA(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!ht.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Oa.TABLES))for(let i in s[n][Oa.TABLES])for(let o in s[n][Oa.TABLES][i]){let c=s[n][Oa.TABLES][i][o],u=[Zs.DATABASES,n,Oa.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=[Zs.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(tA,"setSchemasConfig");function PG(e){if(ju===void 0){let r=Ln(eA);ju=to(r.toJSON())}let t=ts[e.toLowerCase()];if(t!==void 0)return ju[t.toLowerCase()]}a(PG,"getDefaultConfig");function rA(e){if(e==null){lt.error(DG);return}if(Ot===void 0){lt.trace(wG);return}let t=ts[e.toLowerCase()];if(t!==void 0)return Ot[t.toLowerCase()]}a(rA,"getConfigValue");function ci(e=ht.getPropsFilePath()){let t=ht.getEnvCliRootPath();return t?es.join(t,fr.HDB_CONFIG_FILE):Zg(e).get(fr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ci,"getConfigFilePath");function _E(e=!1){if(Ot===void 0||e){let t;if(!ht.noBootFile()){t=ht.getPropsFilePath();try{Wt.accessSync(t,Wt.constants.F_OK|Wt.constants.R_OK)}catch(i){throw lt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ci(t),s;if(r.includes("config/settings.js"))try{nA(r);return}catch(i){if(i.code!==fr.NODE_ERROR_CODES.ENOENT)throw i}try{s=Ln(r)}catch(i){if(i.code===fr.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}`)}vG(s,r),dE(s);let n=s.toJSON();if(IG.config=n,Ot=to(n),Ot.logging_rotation_rotate)for(let i in jg)Ot[i]&&lt.error(`Config ${jg[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);lt.trace(CG)}}a(_E,"initConfig");function vG(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],es.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],es.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],es.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"),Wt.writeFileSync(t,String(e)))}a(vG,"checkForUpdatedConfig");function dE(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=gG(t);if(r.error)throw Xu.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(dE,"validateConfig");function BG(e,t){Ot===void 0&&(Ot={});let r=ts[e.toLowerCase()];if(r===void 0){lt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ot[r.toLowerCase()]=t}a(BG,"updateConfigObject");function sA(e,t,r=void 0,s=!1,n=!1,i=!1){Ot===void 0&&_E();let o=rA(ts.hdb_root),c=es.join(o,fr.HDB_CONFIG_FILE),u=Ln(c),_;if(r===void 0&&e.toLowerCase()===Zs.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ts[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=lE(f,t);u.setIn([...E],h)}else for(let f in r){let E=ts[f.toLowerCase()];if(E===Zs.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),S=fr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];S&&S.startsWith("customFunctions")&&u.hasIn(S.split("_"))&&(E=S,h=S.split("_"));let p=lE(E,r[f]);E==="rootPath"&&p?.endsWith("/")&&(p=p.slice(0,-1));try{u.setIn([...h],p)}catch(g){lt.error(g)}}}_&&tA(u,_),dE(u);let l=u.getIn(["rootPath"]),d=es.join(l,fr.HDB_CONFIG_FILE);s===!0&&HG(c,l),Wt.writeFileSync(d,String(u)),n&&(Ot=to(u.toJSON())),lt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(sA,"updateConfigValue");function HG(e,t){try{let r=es.join(t,"backup",`${fr.HDB_CONFIG_FILE}.bak`);Wt.copySync(e,r),lt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){lt.error(LG),lt.error(r)}}a(HG,"backupConfigFile");var FG=["databases"];function to(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)),Zu=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])&&!FG.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;!Zs[u.toUpperCase()]&&ts[u]&&(n[ts[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(to,"flattenConfig");function lE(e,t){if(e===Zs.CLUSTERING_NODENAME||e===Zs.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(OG(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ht.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 ht.autoCast(t)}a(lE,"castConfigValue");function qG(){let e=ht.getPropsFilePath(),t=ci(e);return Ln(t).toJSON()}a(qG,"getConfiguration");async function GG(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return sA(void 0,void 0,n,!0),UG}catch(i){throw typeof i=="string"||i instanceof String?bG(i,i,yG.BAD_REQUEST,void 0,void 0,!0):i}}a(GG,"setConfiguration");function fE(){let e=ht.getPropsFilePath();try{Wt.accessSync(e,Wt.constants.F_OK|Wt.constants.R_OK)}catch(s){if(!ht.noBootFile())throw lt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ci(e);return Ln(t).toJSON()}a(fE,"readConfigFile");function Ln(e){return AG.parseDocument(Wt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Ln,"parseYamlDoc");function xG(){let e=fE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ht.isEmptyOrZeroLength(t)?[]:t;let r=Xg(t);if(r)throw Xu.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ht.isEmptyOrZeroLength(s)?[]:s;let n=Xg(s);if(n)throw Xu.CONFIG_VALIDATION(n.message);if(!ht.isEmptyOrZeroLength(s)&&!ht.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!ht.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Xu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(xG,"getClusteringRoutes");function nA(e){let t=Zg(e);Ot={};for(let r in ts){let s=t.get(r.toUpperCase());if(ht.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=ts[r].toLowerCase();n===Zs.LOGGING_ROOT?Ot[n]=es.dirname(s):Ot[n]=s}return Ot}a(nA,"initOldConfig");function kG(e){let t=fE();return NG.get(t,e.replaceAll("_","."))}a(kG,"getConfigFromFile");async function VG(e,t){let r=Ln(ci());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Wt.writeFile(ci(),String(r))}a(VG,"addConfig");function $G(e){let t=ci(ht.getPropsFilePath()),r=Ln(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=es.join(s,fr.HDB_CONFIG_FILE);Wt.writeFileSync(n,String(r))}a($G,"deleteConfigFromFile");function YG(){return Zu||(_E(),Zu)}a(YG,"getConfigObj")});var X=T((Sse,cA)=>{"use strict";var EE=require("fs-extra"),rs=require("path"),oA=require("os"),KG=require("properties-reader"),Na=G(),ui=$(),ee=b(),el=Er(),WG="Error initializing environment manager",tl="BOOT_PROPS_FILE_PATH",aA=!1,QG={[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},en={};cA.exports={BOOT_PROPS_FILE_PATH:tl,getHdbBasePath:zG,setHdbBasePath:JG,get:XG,initSync:ZG,setProperty:he,initTestEnvironment:ex};function zG(){return en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(zG,"getHdbBasePath");function JG(e){en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(JG,"setHdbBasePath");function XG(e){let t=el.getConfigValue(e);return t===void 0?en[e]:t}a(XG,"get");function he(e,t){QG[e]&&(en[e]=t),el.updateConfigObject(e,t)}a(he,"setProperty");function jG(){let e;try{e=ui.getPropsFilePath(),EE.accessSync(e,EE.constants.F_OK|EE.constants.R_OK),aA=!0;let t=KG(e);return en[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),en[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),en[tl]=e,!0}catch{return Na.trace(`Environment manager found no properties file at ${e}`),!1}}a(jG,"doesPropFileExist");function ZG(e=!1){try{(aA||jG()||ui.noBootFile())&&(el.initConfig(e),en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=el.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Na.error(WG),Na.error(t),console.error(t),process.exit(1)}}a(ZG,"initSync");function ex(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=rs.join(__dirname,"../../","unitTests");en[tl]=rs.join(u,"hdb_boot_properties.file"),he(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,rs.join(u,"settings.test")),he(ee.HDB_SETTINGS_NAMES.INSTALL_USER,oA.userInfo()?oA.userInfo().username:void 0),he(ee.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,rs.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.HDB_SETTINGS_NAMES.CERT_KEY,rs.join(u,"envDir","utility","keys","certificate.pem")),he(ee.CONFIG_PARAMS.TLS_PRIVATEKEY,rs.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.CONFIG_PARAMS.TLS_CERTIFICATE,rs.join(u,"envDir","utility","keys","certificate.pem")),he(ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),he(ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,rs.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,rs.join(u,"envDir")),he(ee.CONFIG_PARAMS.STORAGE_PATH,rs.join(u,"envDir")),he(ee.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,ui.isEmpty(n)?!0:n),he(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,ui.isEmpty(n)?!0:n),he(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,ui.isEmpty(i)?!1:i),he(ee.CONFIG_PARAMS.HTTP_CORS,ui.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,rs.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),he(ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,ui.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 ${tl}. Please check your boot props and settings files`;Na.fatal(r),Na.error(t)}}a(ex,"initTestEnvironment")});var ve=T((Rse,hA)=>{"use strict";var Ca=b(),tx=$(),Qt=X(),La=require("path"),rx=require("minimist"),uA=require("fs-extra"),lA=require("lodash");Qt.initSync();var{CONFIG_PARAMS:Dn,DATABASES_PARAM_CONFIG:ba,SYSTEM_SCHEMA_NAME:rl}=Ca,ya,Ia,wa;function _A(){if(ya!==void 0)return ya;if(Qt.getHdbBasePath()!==void 0)return ya=Qt.get(Dn.STORAGE_PATH)||La.join(Qt.getHdbBasePath(),Ca.DATABASES_DIR_NAME),ya}a(_A,"getBaseSchemaPath");function dA(){if(Ia!==void 0)return Ia;if(Qt.getHdbBasePath()!==void 0)return Ia=EA(rl),Ia}a(dA,"getSystemSchemaPath");function fA(){if(wa!==void 0)return wa;if(Qt.getHdbBasePath()!==void 0)return wa=Qt.get(Ca.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||La.join(Qt.getHdbBasePath(),Ca.TRANSACTIONS_DIR_NAME),wa}a(fA,"getTransactionAuditStoreBasePath");function sx(e,t){let r=Qt.get(Dn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||La.join(fA(),e.toString())}a(sx,"getTransactionAuditStorePath");function EA(e,t){e=e.toString(),t=t&&t.toString();let r=Qt.get(Ca.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||La.join(_A(),e)}a(EA,"getSchemaPath");function nx(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,rx(process.argv));let s=r[Dn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!tx.isObject(s))throw o;i=s}for(let o of i){let c=o[rl];if(!c)continue;let u=Qt.get(Dn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[ba.PATH];if(_)return lA.set(u,[rl,ba.TABLES,t,ba.PATH],_),Qt.setProperty(Dn.DATABASES,u),_;let l=c?.[ba.PATH];if(l)return lA.set(u,[rl,ba.PATH],l),Qt.setProperty(Dn.DATABASES,u),l}}let n=r[Dn.STORAGE_PATH.toUpperCase()];if(n){if(!uA.pathExistsSync(n))throw new Error(n+" does not exist");let i=La.join(n,e);return uA.mkdirsSync(i),Qt.setProperty(Dn.STORAGE_PATH,n),i}return dA()}a(nx,"initSystemSchemaPaths");function ix(){ya=void 0,Ia=void 0,wa=void 0}a(ix,"resetPaths");hA.exports={getBaseSchemaPath:_A,getSystemSchemaPath:dA,getTransactionAuditStorePath:sx,getTransactionAuditStoreBasePath:fA,getSchemaPath:EA,initSystemSchemaPaths:nx,resetPaths:ix}});var hr=T((Nse,RA)=>{"use strict";var ox=dr().LMDB_ERRORS_ENUM,Ase=require("lmdb"),ax=ze(),Ose=require("buffer").Buffer,{OVERFLOW_MARKER:mA,MAX_SEARCH_KEY_LENGTH:sl}=ax,pA=["number","string","symbol","boolean","bigint"];function cx(e){if(e=e?.primaryStore||e,!e)throw new Error(ox.ENV_REQUIRED)}a(cx,"validateEnv");function ux(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(ux,"stringifyData");function lx(e){return e instanceof Date?e.valueOf():e}a(lx,"convertKeyValueToWrite");function _x(e){if(e==null)return;if(pA.includes(typeof e))return e.length>sl?[e.slice(0,sl)+mA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(pA.includes(typeof n))n.length>sl?t.push(n.slice(0,sl)+mA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(_x,"getIndexedValues");var nl=0,SA=0;function TA(){SA=Date.now()-performance.now()}a(TA,"adjustStartTime");TA();var dx=6e4;setInterval(TA,dx).unref();function fx(){let e=performance.now()+SA;return e>nl?(nl=e,e):(nl+=488e-6,nl)}a(fx,"getNextMonotonicTime");RA.exports={validateEnv:cx,stringifyData:ux,convertKeyValueToWrite:lx,getNextMonotonicTime:fx,getIndexedValues:_x}});var gA,ss,hE,Da=Te(()=>{gA=require("events"),ss=class extends gA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new hE;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)}},hE=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 Mr(e){return e[Bt]||(e[Bt]=Object.create(null))}function cl(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}`);Mr(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}`);Mr(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}`);Mr(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}`);Mr(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}`);Mr(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}`);Mr(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}`);Mr(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}`);Mr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Mr(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}`);Mr(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Bt];if(l&&c in l)return l[c];let d=this[Re]?.[c];if(d&&typeof d=="object"){let f=AA(d,o);if(f)return l||(l=this[Bt]=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[Bt];return u?.[o]!==void 0?u[o]:this[Re]?.[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");Mr(this)[o]=c}),i("deleteProperty",function(o){Mr(this)[o]=void 0}),i("toJSON",function(){let o=this[Bt],c;for(let _ in o)c||(c=Object.assign({},this[Re])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Re])),Object.assign(c,this)),c||this[Re]}),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 AA(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[Re]=n}},cl(r,t)),new r(e)):new il(e);case Array:let s=new al(e.length);s[Re]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=AA(o,t?.elements)),s[n]=o}return s}}function ul(e){let t=e[Bt],r;for(let n in t){r||(r=Object.assign({},e[Re]));let i=t[n];i&&typeof i=="object"&&(i=ul(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Re])),Object.assign(r,e)),r||e[Re]}function Ua(e){let t;if(e[Re]&&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=Ua(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Bt];for(let s in r){t||(t=Object.assign({},e[Re]));let n=r[s];n&&typeof n=="object"&&(n=Ua(n)),t[s]=n}return t?Object.freeze(t):e[Re]||(e.buffer?e:Object.freeze(e))}function ol(e){let t=e[Re];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[li]||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?.[Re]===n){if(ol(i))return!0}else return!0}}else{let r=e[Bt];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[Re]===i){if(ol(n))return!0}else return!0}else return!0}}return!1}var ns,Bt,il,li,al,ll=Te(()=>{is();ns=U(j()),Bt=Symbol("own-data");a(Mr,"getChanges");a(cl,"assignTrackedAccessors");a(AA,"trackObject");il=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Re]=t}};cl(il,{});a(ul,"collapseData");a(Ua,"deepFreeze");a(ol,"hasChanges");li=Symbol.for("has-array-changes"),al=class extends Array{static{a(this,"TrackedArray")}[li];constructor(t){super(t)}splice(...t){return this[li]=!0,super.splice(...t)}push(...t){return this[li]=!0,super.push(...t)}pop(){return this[li]=!0,super.pop()}unshift(...t){return this[li]=!0,super.unshift(...t)}shift(){return this[li]=!0,super.shift()}};al.prototype.constructor=Array});function px(){mx=setInterval(function(){for(let e of mE)if(e.stale){let t=e[me]?.url;OA.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},hx).unref()}var pE,OA,Ex,mE,_i,_l,hx,mx,SE=Te(()=>{pE=U(hr()),OA=U(G());is();Ex=100,mE=new Set,_i=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(),mE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(mE.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,pE.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 S=this.writes[h];if(!S)continue;let p=S[f===0?"before":"beforeIntermediate"];if(p){let g=p();E?E.push?E.push(g):E=[E,g]:E=g}}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<Ex>>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),Promise.all(i).then(()=>(this.writes=[],{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=[]}},_l=class extends _i{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,pE.getNextMonotonicTime)())}getReadTxn(){}},hx=3e3;a(px,"startMonitoringTxns");px()});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 _i;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 NA,di=Te(()=>{NA=require("../../index");is();SE();a(Ge,"transaction");(0,NA._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 gE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(Tx[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]=ys.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}if(r){let p=o;o=c,c=p,p=!_,_=!u,u=p}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new TE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let p=AE(e);if(!p)throw new TE.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:g,value:I})=>new Promise((N,Y)=>setImmediate(()=>{try{N(I&&p(I)?g:yA.SKIP)}catch(W){Y(W)}})))}let S={start:o,end:c,inclusiveEnd:u,exclusiveStart:_,values:!E,transaction:t,reverse:r};return E?h.getRange(S):h.getRange(S).map(({value:p})=>p)}function AE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case mt.SEARCH_TYPES.EQUALS:case void 0:return bs(r,n=>n===s);case mt.SEARCH_TYPES.CONTAINS:return bs(r,n=>n?.toString().includes(s));case mt.SEARCH_TYPES.ENDS_WITH:case mt.SEARCH_TYPES._ENDS_WITH:return bs(r,n=>n?.toString().endsWith(s));case mt.SEARCH_TYPES.STARTS_WITH:case mt.SEARCH_TYPES._STARTS_WITH:return bs(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()),bs(r,n=>(0,ys.compareKeys)(n,s[0])>=0&&(0,ys.compareKeys)(n,s[1])<=0);case"gt":case mt.SEARCH_TYPES.GREATER_THAN:case mt.SEARCH_TYPES._GREATER_THAN:return bs(r,n=>(0,ys.compareKeys)(n,s)>0);case"ge":case mt.SEARCH_TYPES.GREATER_THAN_EQUAL:case mt.SEARCH_TYPES._GREATER_THAN_EQUAL:return bs(r,n=>(0,ys.compareKeys)(n,s)>=0);case mt.SEARCH_TYPES.LESS_THAN:case"lt":case mt.SEARCH_TYPES._LESS_THAN:return bs(r,n=>(0,ys.compareKeys)(n,s)<0);case"le":case mt.SEARCH_TYPES.LESS_THAN_EQUAL:case mt.SEARCH_TYPES._LESS_THAN_EQUAL:return bs(r,n=>(0,ys.compareKeys)(n,s)<=0);case"ne":return bs(r,n=>(0,ys.compareKeys)(n,s)!==0);default:return}}function bs(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 dl(e){if(!e)return;let t=new RE,r,s,n,i,o,c=bA;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=Sx[_],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?Rx:bA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var TE,mt,ys,yA,Sx,Tx,bA,Rx,RE,fl=Te(()=>{TE=U(j()),mt=U(ze()),ys=require("ordered-binary"),yA=require("lmdb"),Sx={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(gE,"idsForCondition");Tx={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(AE,"filterByType");a(bs,"attributeComparator");bA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,Rx=/([^&|*=]+)([&|*=]*)/g;a(dl,"parseQuery");RE=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:()=>we,IS_COLLECTION:()=>Is,RECORD_PROPERTY:()=>Re,Resource:()=>Nt,SAVE_UPDATES_PROPERTY:()=>UA,snake_case:()=>Ax});function Ax(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function IA(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 NE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Pr(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=_[we]??_[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[UA]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,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,o);if(E?.then)return E.then(h=>{if(!h)throw new El(o.user);return typeof _?.then=="function"?_.then(S=>e(f,u,o,S)):e(f,u,o,_)});if(!E)throw new El(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function vr(e,t){let r=new DA.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 OE(e){let t=e[Re];if(t){let r=e[Bt];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 wA(e){if(typeof e=="string")return t=>OE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=OE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=OE(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 CA,LA,DA,me,we,Is,UA,Re,gx,Nt,El,NE,is=Te(()=>{CA=require("crypto");Da();LA=require("../../index"),DA=U(j());ll();di();fl();me=Symbol.for("context"),we=Symbol.for("primary-key"),Is=Symbol("is-collection"),UA=Symbol("save-updates"),Re=Symbol("stored-record"),gx={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[we]=t;let s=r?.[me];this[me]=s!==void 0?s:r||null}static get=Pr(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 _=wA(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=Pr(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):vr(t,"put")},{hasContent:!0,type:"update"});static delete=Pr(function(t,r,s,n){return t.delete?t.delete(r):vr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,CA.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):vr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Pr(function(t,r,s,n){return t.invalidate?t.invalidate(r):vr(t,"delete")},{hasContent:!1,type:"update"});static post=Pr(function(t,r,s,n){return t[we]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Pr(function(t,r,s,n){return t.connect?t.connect(n,r):vr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Pr(function(t,r,s,n){return t.subscribe?t.subscribe(r):vr(t,"subscribe")},{type:"read"});static publish=Pr(function(t,r,s,n){return t[we]!=null&&t.update?.(),t.publish?t.publish(n,r):vr(t,"publish")},{hasContent:!0,type:"create"});static search=Pr(function(t,r,s,n){let i=t.search?t.search(r):vr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=wA(o);return i.map(c)}return i},{type:"read"});static query=Pr(function(t,r,s,n){return t.search?t.search(n,r):vr(t,"search")},{hasContent:!0,type:"read"});static copy=Pr(function(t,r,s,n){return t.copy?t.copy(n,r):vr(t,"copy")},{type:"create"});static move=Pr(function(t,r,s,n){return t.move?t.move(n,r):vr(t,"move")},{type:"delete"});post(t){if(this[Is])return this.constructor.create(this[we],t,this[me]);vr(this,"post")}static isCollection(t){return t?.[Is]}static coerceId(t){return t}static parseQuery(t){return dl(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&&gx[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:IA(t,this)}}return IA(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(_=>_[we]===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[we],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 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[we]}getContext(){return this[me]}};Nt.prototype[me]=null;(0,LA._assignPackageExport)("Resource",Nt);a(Ax,"snake_case");El=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(IA,"pathToId");NE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Pr,"transactional");a(vr,"missingMethod");a(OE,"selectFromObject");a(wA,"transformForSelect")});var IE={};Qe(IE,{loadGQLSchema:()=>bx,start:()=>yE,startOnMainThread:()=>Nx});function yE({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 p of d.definitions)switch(p.kind){case u.OBJECT_TYPE_DEFINITION:let W=function(q){if(q.kind==="NonNullType"){let B=W(q.type);return B.nullable=!1,B}if(q.kind==="ListType")return{type:"array",elements:W(q.type)};let K={type:q.name?.value};return Object.defineProperty(K,"location",{value:q.loc.startToken}),K};a(W,"getProperty");let g=p.name.value,I=[],N={table:null,database:null,properties:I};f.set(g,N);for(let q of p.directives){if(q.name.value==="table"){for(let w of q.arguments)N[w.name.value]=w.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=g),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,E.push(N)}if(q.name.value==="sealed"&&(N.sealed=!0),q.name.value==="export"){N.export=!0;for(let w of q.arguments)w.name.value==="name"&&(N.export={name:w.value.value})}}let Y=!1;for(let q of p.fields){let w=W(q.type);w.name=q.name.value,I.push(w);for(let K of q.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)}}N.typeName=g,g==="Query"&&(h=N)}function S(p){let g=f.get(p.type);g?p.properties=g.properties:p.type==="array"?S(p.elements):Ox.includes(p.type)||(0,MA.getWorkerIndex)()===0&&console.error(`The type ${p.type} is unknown at line ${p.location.line}, column ${p.location.column}, in ${n}`)}a(S,"connectPropertyType");for(let p of f.values())for(let g of p.properties)S(g);for(let p of E)p.tableClass=e(p),p.export&&(p.export.name===""?i.set((0,hl.dirname)(s),p.tableClass):i.set((0,hl.dirname)(s)+"/"+(p.export.name||p.typeName),p.tableClass));if(h)for(let p of h.properties){let g=f.get(p.type);if(!g)throw new Error(`${p.type} was not found as a Query export`);i.set((0,hl.dirname)(s)+"/"+p.name,g.tableClass)}}}var hl,MA,Ox,Nx,bx,PA=Te(()=>{hl=require("path");fe();MA=U(Ze()),Ox=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(yE,"start");Nx=yE,bx=yE({ensureTable:et}).handleFile});async function ml(e){return yx?(Ma||(Ma=Ix(Cx)),(await(await Ma).import(e)).namespace):import(e)}async function Ix(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ma=new Compartment({console,Math,Date,fetch:wx,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,BA.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,vA.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Ma}function wx(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 Cx(){return{Resource:Nt,tables:mr}}var vA,BA,yx,Ma,wE=Te(()=>{is();fe();vA=require("fs/promises"),BA=require("path"),yx=!1;a(ml,"secureImport");a(Ix,"getCompartment");a(wx,"secureOnlyFetch");a(Cx,"getGlobalVars")});var LE={};Qe(LE,{handleFile:()=>Lx});async function Lx(e,t,r,s){let n=new Map,i=(0,HA.pathToFileURL)(r).toString(),o=await ml(i);u(o.default)&&s.set((0,CE.dirname)(t),o.default),c(o,(0,CE.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 HA,CE,FA=Te(()=>{HA=require("url");wE();CE=require("path");a(Lx,"handleFile")});var UE={};Qe(UE,{start:()=>Dx});function Dx({resources:e}){e.set("login",DE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var DE,qA=Te(()=>{is();a(Dx,"start");DE=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 PE=T((rne,kA)=>{"use strict";var{Readable:Ux}=require("stream"),Mx=1e4;kA.exports={streamAsJSON(e){return new ME({value:e})}};var ME=class extends Ux{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0)}*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](),o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){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),GA)}catch(n){yield GA(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);xA(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>Mx?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 xA(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}}};function GA(e){return console.error(e),JSON.stringify(e.toString())}a(GA,"handleError");function xA(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(xA,"when")});var tO=T((ine,eO)=>{"use strict";var vE=require("recursive-iterator"),Px=require("alasql"),BE=require("clone"),VA=$(),{handleHDBError:$A,hdb_errors:vx}=j(),{HDB_ERROR_MSGS:YA,HTTP_STATUS_CODES:KA}=vx,{getDatabases:Bx}=(fe(),Z(Ce)),Hx=["DISTINCT_ARRAY"],WA=Symbol("validateTables"),HE=Symbol("validateTable"),nne=Symbol("getAllColumns"),QA=Symbol("validateAllColumns"),pl=Symbol("findColumn"),zA=Symbol("validateOrderBy"),Pa=Symbol("validateSegment"),FE=Symbol("validateColumn"),JA=Symbol("setColumnsForTable"),XA=Symbol("checkColumnsForAsterisk"),jA=Symbol("validateGroupBy"),ZA=Symbol("hasColumns"),qE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[WA](),this[XA](),this[QA]()}[WA](){if(this[ZA]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[HE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[HE](t.table)})}}[ZA](){let t=!1,r=new vE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[HE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Bx();if(!r[t.databaseid])throw $A(new Error,YA.SCHEMA_NOT_FOUND(t.databaseid),KA.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw $A(new Error,YA.TABLE_NOT_FOUND(t.databaseid,t.tableid),KA.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=BE(n);i.table=BE(t),this.attributes.push(i)})}[pl](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)}[XA](){let t=new vE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[JA](r.tableid)}[JA](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new Px.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[QA](){this[Pa](this.statement.columns,!1),this[Pa](this.statement.joins,!1),this[Pa](this.statement.where,!1),this[jA](this.statement.group,!1),this[Pa](this.statement.order,!0)}[Pa](t,r){if(!t)return;let s=new vE(t),n=[];for(let{node:i,path:o}of s)!VA.isEmpty(i)&&!VA.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[zA](i):n.push(this[FE](i)));return n}[jA](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&Hx.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=BE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[pl](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[pl](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`}[zA](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[FE](t)}[FE](t){let r=this[pl](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]}};eO.exports=qE});var sO=T((ane,rO)=>{"use strict";var GE=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")}};rO.exports=GE});var iO=T((une,nO)=>{"use strict";var xE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};nO.exports=xE});var pO={};Qe(pO,{AUDIT_STORE_OPTIONS:()=>hO,createAuditEntry:()=>Rl,openAuditStore:()=>Tl,readAuditEntry:()=>pr,setAuditRetention:()=>Fx,transactionKeyEncoder:()=>EO});function Tl(e){let t=e.auditStore=e.openDB(lO.AUDIT_STORE_NAME,hO);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,dO.getWorkerIndex)()===0&&e.on("aftercommit",()=>{Ba||(Ba=setTimeout(()=>{if(Ba=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-kE})){if((n[0]&15)===$E){let i=pr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},kE/10).unref())}),t}function Fx(e){clearTimeout(Ba),Ba=null,kE=e}function Rl(e,t,r,s,n,i,o){let c=mO[i],u=1;s&&(s>1?va.setFloat64(0,s):ws.set(KE),u=9),f(0),f(t),d(r),va.setFloat64(u,e),u+=8,n?d(n):ws[u++]=0,ws[s?8:0]=c;let l=ws.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,ro.writeKey)(E,ws,u),u>130||(ws[h]=u-h-1)}function f(E){E<128?ws[u++]=E:E<16384?(va.setUint16(u,E|32767),u+=2):E<1056964608?(va.setUint32(u,E|3489660927),u+=4):(ws[u]=255,va.setUint32(u+1,E),u+=5)}}function pr(e){let t=e.dataView||(e.dataView=new YE(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:mO[s&7],tableId:i,get recordId(){return uO(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?uO(e,l,d):void 0},getValue(f){return s&VE?f.decoder.decode(e.subarray(t.position)):void 0}}}function uO(e,t,r){let s=e.subarray(t,r);return(0,ro.readKey)(s,0,r-t)}var ro,Sl,lO,_O,dO,fO,ws,va,EO,hO,kE,Ba,VE,oO,$E,aO,cO,mO,YE,so=Te(()=>{ro=require("ordered-binary"),Sl=U(X()),lO=U(ze()),_O=U(b()),dO=U(Ze()),fO=U($());Fa();(0,Sl.initSync)();ws=Buffer.alloc(1024),va=new DataView(ws.buffer,ws.byteOffset,1024),EO={writeKey(e,t,r){return e===Ha?(t.set(Ha,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,ro.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,ro.readKey)(e,t,r)}},hO={encoding:"binary",keyEncoder:EO},kE=(0,fO.convertToMS)((0,Sl.get)(_O.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Ba=null;a(Tl,"openAuditStore");a(Fx,"setAuditRetention");VE=16,oO=1,$E=2,aO=3,cO=4,mO={put:oO|VE,[oO]:"put",delete:$E,[$E]:"delete",message:aO|VE,[aO]:"message",invalidate:cO,[cO]:"invalidate"};a(Rl,"createAuditEntry");a(pr,"readAuditEntry");YE=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-1)&3489660927,this.position+=4,t):(t=this.getUint32(this.position-1)&3489660927,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(uO,"readKeySafely")});var OO={};Qe(OO,{HAS_EXPIRATION:()=>jE,LAST_TIMESTAMP_PLACEHOLDER:()=>Ha,LOCAL_TIMESTAMP:()=>qx,METADATA:()=>qa,NO_TIMESTAMP:()=>WE,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>KE,RecordEncoder:()=>XE,TIMESTAMP_ASSIGN_LAST:()=>xx,TIMESTAMP_ASSIGN_NEW:()=>RO,TIMESTAMP_ASSIGN_PREVIOUS:()=>gO,TIMESTAMP_PLACEHOLDER:()=>gl,TIMESTAMP_RECORD_PREVIOUS:()=>QE,getUpdateRecord:()=>ZE,handleLocalTimeForGets:()=>Nl});function AO(){return io[0]=io[0]^64,Gx.getFloat64(0)}function Nl(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[qa];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?.[qa]>=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?o:o.map(c=>{let u=c.value,_=u[qa];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=kx.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(io,0,d),l.timestampBytes=null,l.localTime=AO())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){n.done.isTracked=!0;let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,fi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<fi.length;u++){let _=fi[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&fi.splice(u--,1)}}}return e}function ZE(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?no=i?.localTime?QE|gO:WE:no=u?i?.localTime?QE|16384:RO|16384:WE,l>0&&(c|=jE),Ol=c,JE=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:no>0},S;try{f&&(h.ifVersion=S=i?.version??null);let p=e.put(s,n,h);if(e.cache&&p.result!==!1){let g=e.cache.get(s);g&&(c>=0?g.metadataFlags=c:g.metadataFlags>=0&&(g.metadataFlags=void 0),(l||!g.expiresAt)&&(g.expiresAt=l),h.instructedWrite&&(g.localTime||(g.localTime=1),g.timestampBytes=zE,g.timestampOffset=zE.start||0))}if(u){let g=_?.user?.username;if(E&&(Al=e.encoder.encode(E)),f&&i?.localTime){let I=i?.localTime,N=r.get(I);if(N){let Y=pr(N).previousLocalTime;return r.put(I,Rl(o,t,s,Y,g,d,Al),{ifVersion:S}),p}}r.put(Ha,Rl(o,t,s,i?.localTime?1:0,g,d,Al),{append:d!=="invalidate",instructedWrite:!0,ifVersion:S})}return p}catch(p){throw p.message+=" id: "+s+" options: "+h,p}}}var SO,TO,gl,Ha,KE,qx,qa,io,Gx,WE,RO,xx,gO,QE,jE,zE,Al,no,Ol,JE,XE,kx,fi,Fa=Te(()=>{SO=require("msgpackr");so();TO=U(G()),gl=new Uint8Array([1,1,1,1,4,64,0,0]),Ha=new Uint8Array([1,1,1,1,1,0,0,0]),KE=new Uint8Array([1,1,1,1,3,64,0,0]),qx=Symbol("local-timestamp"),qa=Symbol("metadata"),io=new Uint8Array(8),Gx=new DataView(io.buffer,0,8),WE=0,RO=0,xx=1,gO=3,QE=4,jE=16,no=0,Ol=-1,JE=0,XE=class extends SO.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(no||Ol>=0){let i=0,o=no;o&&(i+=8,no=0);let c=Ol,u=JE;c>=0&&(i+=2,Ol=-1,u&&(i+=8,JE=0));let _=zE=r.call(this,s,n|2048|i);Al=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(gl[4]=o,gl[5]=o>>8,_.set(gl,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(io,0,c),c+=8;else for(let d=0;d<8;d++)io[d]=t[c++];u=AO(),i=t[c]}let _;i<32&&(o=i,c+=2,o&jE&&(_=(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,[qa]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(AO,"getTimestamp");kx=Map.prototype.get;a(Nl,"handleLocalTimeForGets");fi=[];setInterval(()=>{for(let e=0;e<fi.length;e++){let t=fi[e].deref();!t||t.isDone||t.isCommitted?fi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&TO.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(ZE,"getUpdateRecord")});var bl=T((hne,NO)=>{"use strict";var th=X(),rh=b(),{RecordEncoder:Vx}=(Fa(),Z(OO));th.initSync();var $x=th.get(rh.CONFIG_PARAMS.STORAGE_COMPRESSION),Yx=th.get(rh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Kx=rh.UPDATES_PROPERTY,eh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=$x&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Yx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:Vx},this.alwaysLazyProperty=s=>s===Kx)}};NO.exports=eh});var Il=T((pne,yO)=>{"use strict";var oo=X(),Ga=b();oo.initSync();var Wx=oo.get(Ga.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||oo.get(Ga.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||oo.get(Ga.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",bO=oo.get(Ga.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),Qx=oo.get(Ga.CONFIG_PARAMS.STORAGE_NOREADAHEAD),yl=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=Wx,this.noFSAccess=!0,bO!==void 0&&(this.overlappingSync=bO),this.noReadAhead=Qx}};yO.exports=yl;yl.MAX_DBS=1e4});var De=T((Tne,BO)=>{"use strict";var nh=require("lmdb"),os=require("fs-extra"),Sr=require("path"),wl=hr(),CO=G(),zt=dr().LMDB_ERRORS_ENUM,Cl=iO(),ih=bl(),LO=Il(),Un=ze(),IO=b(),{table:zx,resetDatabases:Jx}=(fe(),Z(Ce)),wO=X(),as=Un.INTERNAL_DBIS_NAME,DO=Un.DBI_DEFINITION_NAME,Xx="data.mdb",jx="lock.mdb",xa=".mdb",Zx="-lock",sh=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Br(t,r),this.key_type=this.dbi[Un.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Un.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new nh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ll(e,t){if(e===void 0)throw new Error(zt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(zt.ENV_NAME_REQUIRED)}a(Ll,"pathEnvNameValidation");async function oh(e,t,r=!0){try{await os.access(e)}catch(s){throw s.code==="ENOENT"?new Error(zt.INVALID_BASE_PATH):s}try{let s=Sr.join(e,t+xa);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,Xx),os.constants.R_OK|os.constants.F_OK),Sr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(zt.INVALID_ENVIRONMENT)}else throw new Error(zt.INVALID_ENVIRONMENT);throw s}}a(oh,"validateEnvironmentPath");function Dl(e,t){if(wl.validateEnv(e),t===void 0)throw new Error(zt.DBI_NAME_REQUIRED)}a(Dl,"validateEnvDBIName");async function ek(e,t,r=!1,s=!1){Ll(e,t);let n=Sr.basename(e);t=t.toString();let i=wO.get(IO.CONFIG_PARAMS.DATABASES);i||wO.setProperty(IO.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await oh(e,t,s),UO(e,t,r)}catch(o){if(o.message===zt.INVALID_ENVIRONMENT){let c=Sr.join(e,t);await os.mkdirp(s?c:e);let u=new LO(s?c:c+xa,!1),_=nh.open(u);_.dbis=Object.create(null);let l=new ih(!1);_.openDB(as,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=ah(e,t,r);return _[Un.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(ek,"createEnvironment");async function tk(e,t,r,s=!0){Ll(e,t),t=t.toString();let n=Sr.join(e,t);return zx({table:t,database:Sr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(tk,"copyEnvironment");async function UO(e,t,r=!1){Ll(e,t),t=t.toString();let s=ah(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 oh(e,t),i=Sr.join(e,t+xa),o=n!=i,c=new LO(n,o),u=nh.open(c);u.dbis=Object.create(null);let _=PO(u);for(let l=0;l<_.length;l++)Br(u,_[l]);return u[Un.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(UO,"openEnvironment");async function rk(e,t,r=!1){Ll(e,t),t=t.toString();let s=Sr.join(e,t+xa),n=await oh(e,t);if(global.lmdb_map!==void 0){let i=ah(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await MO(o),delete global.lmdb_map[i]}}await os.remove(n),await os.remove(n===s?n+Zx:Sr.join(Sr.dirname(n),jx))}a(rk,"deleteEnvironment");async function MO(e){wl.validateEnv(e);let t=e[Un.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(MO,"closeEnvironment");function ah(e,t,r=!1){let n=`${Sr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(ah,"getCachedEnvironmentName");function sk(e){wl.validateEnv(e);let t=Object.create(null),r=Br(e,as);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==as)try{t[s]=Object.assign(new Cl,n)}catch{CO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(sk,"listDBIDefinitions");function PO(e){wl.validateEnv(e);let t=[],r=Br(e,as);for(let{key:s}of r.getRange({start:!1}))s!==as&&t.push(s);return t}a(PO,"listDBIs");function nk(e,t){let s=Br(e,as).getEntry(t),n=new Cl;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{CO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(nk,"getDBIDefinition");function vO(e,t,r,s=!r){if(Dl(e,t),t=t.toString(),t===as)throw new Error(zt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Br(e,t)}catch(n){if(n.message===zt.DBI_DOES_NOT_EXIST){let i=new ih(r,s===!0),o=e.openDB(t,i),c=new Cl(r===!0,s);return o[DO]=c,Br(e,as).putSync(t,c),e.dbis[t]=o,o}throw n}}a(vO,"createDBI");function Br(e,t){if(Dl(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==as?r=nk(e,t):r=new Cl,r===void 0)throw new Error(zt.DBI_DOES_NOT_EXIST);let s;try{let n=new ih(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(zt.DBI_DOES_NOT_EXIST):n}return s[DO]=r,e.dbis[t]=s,s}a(Br,"openDBI");function ik(e,t){Dl(e,t),t=t.toString();let r=Br(e,t),s=r.getStats();return r[Un.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(ik,"statDBI");async function ok(e,t){try{let r=Sr.join(e,t+xa);return(await os.stat(r)).size}catch{throw new Error(zt.INVALID_ENVIRONMENT)}}a(ok,"environmentDataSize");function ak(e,t){if(Dl(e,t),t=t.toString(),t===as)throw new Error(zt.CANNOT_DROP_INTERNAL_DBIS_NAME);Br(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Br(e,as).removeSync(t)}a(ak,"dropDBI");function ck(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Br(e,i)}catch(o){if(o.message===zt.DBI_DOES_NOT_EXIST)vO(e,i,i!==t,i===t),s=!0;else throw o}}s&&Jx()}a(ck,"initializeDBIs");BO.exports={openDBI:Br,openEnvironment:UO,createEnvironment:ek,listDBIs:PO,listDBIDefinitions:sk,createDBI:vO,dropDBI:ak,statDBI:ik,deleteEnvironment:rk,initializeDBIs:ck,TransactionCursor:sh,environmentDataSize:ok,copyEnvironment:tk,closeEnvironment:MO}});var FO=T((gne,HO)=>{"use strict";var ch=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};HO.exports=ch});var GO=T((One,qO)=>{"use strict";var uh=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}};qO.exports=uh});var kO=T((bne,xO)=>{"use strict";var lh=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};xO.exports=lh});var ao=T((Lne,YO)=>{"use strict";var uk=De(),lk=FO(),_k=GO(),dk=kO(),Cs=hr(),ka=dr().LMDB_ERRORS_ENUM,fk=ze(),tn=b(),Ek=$(),hk=require("uuid"),Ine=require("lmdb"),{handleHDBError:mk,hdb_errors:pk}=j(),{OVERFLOW_MARKER:wne,MAX_SEARCH_KEY_LENGTH:Cne}=fk,VO=X();VO.initSync();var Ul=VO.get(tn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),_h=tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ei=tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Sk(e,t,r,s,n=Cs.getNextMonotonicTime()){hh(e,t,r,s),dh(e,t,r);let i=new lk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];$O(_,!0,n);let l=Tk(e,t,r,_),d=_[t];o.push(l),c.push(d)}return fh(o,c,s,i,n)}a(Sk,"insertRecords");function Tk(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){Ul&&_.prefetch(u.map(l=>({key:l,value:n})),Ml);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}Ul&&e.dbis[t].prefetch([n],Ml),e.dbis[t].put(n,s,s[Ei])})}a(Tk,"insertRecord");function Rk(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Rk,"removeSkippedRecords");function $O(e,t,r){let s=r>0;(s||!Number.isInteger(e[Ei]))&&(e[Ei]=r||(r=Cs.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[_h]))&&(e[_h]=r||Cs.getNextMonotonicTime()):delete e[_h]}a($O,"setTimestamps");function dh(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),uk.initializeDBIs(e,t,r)}a(dh,"initializeTransaction");async function gk(e,t,r,s,n=Cs.getNextMonotonicTime()){hh(e,t,r,s),dh(e,t,r);let i=new _k,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Eh(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return fh(c,u,s,i,n,o)}a(gk,"updateRecords");async function Ak(e,t,r,s,n=Cs.getNextMonotonicTime()){try{hh(e,t,r,s)}catch(u){throw mk(u,u.message,pk.HTTP_STATUS_CODES.BAD_REQUEST)}dh(e,t,r);let i=new dk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;Ek.isEmpty(_[t])?(l=hk.v4(),_[t]=l):l=_[t];let d=Eh(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return fh(o,c,s,i,n)}a(Ak,"upsertRecords");async function fh(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(),Rk(r,i),s}a(fh,"finalizeWrite");function Eh(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($O(r,!l,o),Number.isInteger(r[Ei])&&_[Ei]>r[Ei])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let S=r[h],p=e.dbis[h];if(p===void 0)continue;let g=_[h];if(typeof S=="function"){let N=S([[_]]);Array.isArray(N)&&(S=N[0][tn.FUNC_VAL],r[h]=S)}if(S===g)continue;let I=Cs.getIndexedValues(g);if(I){Ul&&p.prefetch(I.map(N=>({key:N,value:s})),Ml);for(let N=0,Y=I.length;N<Y;N++)p.remove(I[N],s)}if(I=Cs.getIndexedValues(S),I){Ul&&p.prefetch(I.map(N=>({key:N,value:s})),Ml);for(let N=0,Y=I.length;N<Y;N++)p.put(I[N],s)}}let E=Object.assign({},_,r);c.put(s,E,E[Ei])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Eh(e,t,r,s,n,i,o))}a(Eh,"updateUpsertRecord");function Ok(e,t,r){if(Cs.validateEnv(e),t===void 0)throw new Error(ka.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ka.WRITE_ATTRIBUTES_REQUIRED):new Error(ka.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Ok,"validateBasic");function hh(e,t,r,s){if(Ok(e,t,r),!Array.isArray(s))throw s===void 0?new Error(ka.RECORDS_REQUIRED):new Error(ka.RECORDS_MUST_BE_ARRAY)}a(hh,"validateWrite");function Ml(){}a(Ml,"noop");YO.exports={insertRecords:Sk,updateRecords:gk,upsertRecords:Ak}});var hi=T((Une,Nk)=>{Nk.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((Mne,QO)=>{"use strict";var WO=$(),KO=b(),co=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,rn=require("joi"),Mn={schema_format:{pattern:co,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},bk=rn.alternatives(rn.string().min(1).max(Mn.schema_length.maximum).pattern(co).messages({"string.pattern.base":"{:#label} "+Mn.schema_format.message}),rn.number()).required(),yk=rn.alternatives(rn.string().min(1).max(Mn.schema_length.maximum).pattern(co).messages({"string.pattern.base":"{:#label} "+Mn.schema_format.message}),rn.number()),Ik=rn.alternatives(rn.string().min(1).max(Mn.schema_length.maximum).pattern(co).messages({"string.pattern.base":"{:#label} "+Mn.schema_format.message}),rn.number()).required();function wk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Mn.schema_length.maximum?`'${e}' maximum of 250 characters`:co.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(wk,"checkValidTable");function Ck(e,t){return WO.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(Ck,"validateSchemaExists");function Lk(e,t){let r=t.state.ancestors[0].schema;return WO.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Lk,"validateTableExists");function Dk(e,t){return e.toLowerCase()===KO.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${KO.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Dk,"validateSchemaName");QO.exports={common_validators:Mn,schema_regex:co,hdb_schema_table:bk,validateSchemaExists:Ck,validateTableExists:Lk,validateSchemaName:Dk,checkValidTable:wk,hdb_database:yk,hdb_table:Ik}});var Pl=T((vne,zO)=>{var{common_validators:Ds}=Ls(),$a=qe(),Va="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 Ya(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(Ya,"makeAttributesStrings");function Uk(e){return e=Ya(e),tt.table.presence=!1,tt.attribute.presence=!1,tt.hash_attribute.presence=!1,$a.validateObject(e,tt)}a(Uk,"schema_object");function Mk(e){return e=Ya(e),tt.table.presence={message:Va},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,$a.validateObject(e,tt)}a(Mk,"table_object");function Pk(e){return e=Ya(e),tt.table.presence={message:Va},tt.attribute.presence=!1,$a.validateObject(e,tt)}a(Pk,"create_table_object");function vk(e){return e=Ya(e),tt.table.presence={message:Va},tt.attribute.presence={message:Va},tt.hash_attribute.presence=!1,$a.validateObject(e,tt)}a(vk,"attribute_object");function Bk(e){return e=Ya(e),tt.table.presence={message:Va},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,$a.validateObject(e,tt)}a(Bk,"describe_table");function Hk(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(Hk,"validateTableResidence");zO.exports={schema_object:Uk,create_table_object:Pk,table_object:Mk,attribute_object:vk,describe_table:Bk,validateTableResidence:Hk}});var XO=T((Hne,JO)=>{"use strict";var Fk=require("uuid"),mh=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Fk.v4(),this.schema_table=`${this.schema}.${this.table}`}};JO.exports=mh});var vl=T((qne,jO)=>{"use strict";var qk=XO(),ph=class extends qk{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}};jO.exports=ph});var eN=T((xne,ZO)=>{"use strict";ZO.exports=xk;var Gk="inserted";function xk(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(xk,"returnObject")});var Bl=T((Vne,iN)=>{"use strict";var kk=b(),Sh=De(),Vk=ao(),{getSystemSchemaPath:$k,getSchemaPath:Yk}=ve(),Kk=hi(),Wk=Pl(),Qk=vl(),zk=eN(),{handleHDBError:tN,hdb_errors:sN}=j(),rN=$(),{HTTP_STATUS_CODES:Jk}=sN,Th=Kk.hdb_attribute,nN=[];for(let e=0;e<Th.attributes.length;e++)nN.push(Th.attributes[e].attribute);var Xk="inserted";iN.exports=jk;async function jk(e){let t=Wk.attribute_object(e);if(t)throw tN(new Error,t.message,sN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&rN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw tN(new Error,r,Jk.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=rN.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 Qk(e.schema,e.table,e.attribute,e.id);try{let i=await Sh.openEnvironment(Yk(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}`);Sh.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Sh.openEnvironment($k(),kk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Vk.insertRecords(o,Th.hash_attribute,nN,[n]);return zk(Xk,c,{records:[n]},u)}catch(i){throw i}}a(jk,"lmdbCreateAttribute")});var gh=T((Yne,aN)=>{var{hdb_table:Zk,hdb_database:oN}=Ls(),eV=qe(),Rh=require("joi"),tV={undefined:"undefined",null:"null"},rV=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||tV[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"),sV=Rh.object({database:oN,schema:oN,table:Zk,records:Rh.array().items(Rh.object().custom(rV)).required()});aN.exports=function(e){return eV.validateBySchema(e,sV)}});var Ka=T((Qne,uN)=>{"use strict";var sn=$(),cN=G(),Wne=gh(),{getDatabases:nV}=(fe(),Z(Ce)),{ClientError:mi}=j();uN.exports=iV;function iV(e){if(sn.isEmpty(e))throw new mi("invalid update parameters defined.");if(sn.isEmptyOrZeroLength(e.schema))throw new mi("invalid schema specified.");if(sn.isEmptyOrZeroLength(e.table))throw new mi("invalid table specified.");if(!Array.isArray(e.records))throw new mi("records must be an array");let t=nV()[e.schema]?.[e.table];if(sn.isEmpty(t))throw new mi(`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 cN.error("a valid hash attribute must be provided with update record:",o),new mi("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 cN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new mi(`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(iV,"insertUpdateValidate")});var Wa=T((Jne,lN)=>{"use strict";var oV=b().OPERATIONS_ENUM,Ah=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=oV.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};lN.exports=Ah});var Xa=T((Zne,_N)=>{"use strict";var jne=Wa(),Hl=b(),Nh=$(),Oh=G(),aV=require("uuid"),{handleHDBError:Qa,hdb_errors:cV}=j(),{HDB_ERROR_MSGS:za,HTTP_STATUS_CODES:Ja}=cV;_N.exports=uV;function uV(e,t,r){for(let n=0;n<t.length;n++)lV(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];_V(i,r,e.operation)}}a(uV,"processRows");function lV(e){if(Buffer.byteLength(String(e))>Hl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Qa(new Error,za.ATTR_NAME_LENGTH_ERR(e),Ja.BAD_REQUEST,void 0,void 0,!0);if(Nh.isEmptyOrZeroLength(e)||Nh.isEmpty(e.trim()))throw Qa(new Error,za.ATTR_NAME_NULLISH_ERR,Ja.BAD_REQUEST,void 0,void 0,!0)}a(lV,"validateAttribute");function _V(e,t,r){if(!e.hasOwnProperty(t)||Nh.isEmptyOrZeroLength(e[t])){if(r===Hl.OPERATIONS_ENUM.INSERT||r===Hl.OPERATIONS_ENUM.UPSERT){e[t]=aV.v4();return}throw Oh.error("Update transaction aborted due to record with no hash value:",e),Qa(new Error,za.RECORD_MISSING_HASH_ERR,Ja.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Hl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Oh.error(e),Qa(new Error,za.HASH_VAL_LENGTH_ERR,Ja.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Oh.error(e),Qa(new Error,za.INVALID_FORWARD_SLASH_IN_HASH_ERR,Ja.BAD_REQUEST,void 0,void 0,!0)}a(_V,"validateHash")});var fN=T((tie,dN)=>{"use strict";var bh=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};dN.exports=bh});var mN=T((sie,hN)=>{"use strict";var yh=De(),dV=G(),EN=dr().LMDB_ERRORS_ENUM;hN.exports=fV;async function fV(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 yh.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==EN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await yh.closeEnvironment(global.lmdb_map[s]),await yh.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==EN.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){dV.error(t)}}a(fV,"cleanLMDBMap")});var nn=T((iie,RN)=>{"use strict";var ja=require("crypto"),EV=X(),{CONFIG_PARAMS:hV}=b(),SN="aes-256-cbc",mV=32,pV=16,Ih=64,TN=32,SV=Ih+TN,pN=new Map;RN.exports={encrypt:TV,decrypt:RV,createNatsTableStreamName:gV};function TV(e){let t=ja.randomBytes(mV),r=ja.randomBytes(pV),s=ja.createCipheriv(SN,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(TV,"encrypt");function RV(e){let t=e.substr(0,Ih),r=e.substr(Ih,TN),s=e.substr(SV,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=ja.createDecipheriv(SN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(RV,"decrypt");function gV(e,t){let r=EV.get(hV.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=pN.get(r);return s||(s=ja.createHash("md5").update(r).digest("hex"),pN.set(r,s)),s}a(gV,"createNatsTableStreamName")});var pi=T((cie,AN)=>{"use strict";var aie=Hr(),Fl=G(),gN=Pl(),AV=nn(),ql=$(),{handleHDBError:Gl,hdb_errors:OV}=j(),{HDB_ERROR_MSGS:xl,HTTP_STATUS_CODES:wh}=OV,NV=X();NV.initSync();var{getDatabases:Ch}=(fe(),Z(Ce));AN.exports={describeAll:bV,describeTable:kl,describeSchema:yV};async function bV(e){try{let t=ql.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Ch(),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 kl({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 kl({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){Fl.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 Fl.error("Got an error in describeAll"),Fl.error(t),Gl(new Error,xl.DESCRIBE_ALL_ERR)}}a(bV,"describeAll");async function kl(e,t){ql.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=gN.describe_table(e);if(i)throw i;let c=Ch()[r];if(!c)throw Gl(new Error,xl.SCHEMA_NOT_FOUND(e.schema),wh.NOT_FOUND);let u=c[s];if(!u)throw Gl(new Error,xl.TABLE_NOT_FOUND(e.schema,e.table),wh.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=AV.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){Fl.warn(`unable to stat table dbi due to ${f}`)}return d}a(kl,"descTable");async function yV(e){ql.transformReq(e);let t=gN.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=Ch()[s];if(!i)throw Gl(new Error,xl.SCHEMA_NOT_FOUND(e.schema),wh.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),ql.isEmpty(u)||u.describe){let _=await kl({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(yV,"describeSchema")});var Pn=T((die,IN)=>{var IV=hi(),{callbackify:NN,promisify:wV}=require("util"),{getDatabases:bN}=(fe(),Z(Ce));IN.exports={setSchemaDataToGlobal:ON,getTableSchema:CV,getSystemSchema:LV,setSchemaDataToGlobalAsync:wV(ON)};var yN=pi(),lie=NN(yN.describeAll),_ie=NN(yN.describeTable);function ON(e){global.hdb_schema=bN(),e&&e()}a(ON,"setSchemaDataToGlobal");function CV(e,t,r){let s=bN()[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 LV(){return IV}a(LV,"getSystemSchema")});var Fr=T((Eie,DN)=>{"use strict";var $l=gh(),bt=$(),DV=require("util"),Yl=cs(),UV=Pn(),wN=G(),{handleHDBError:Si,hdb_errors:MV}=j(),{HTTP_STATUS_CODES:Ti}=MV,PV=DV.promisify(UV.getTableSchema),vV="updated",CN="inserted",LN="upserted";DN.exports={insert:HV,update:FV,upsert:qV,validation:BV,flush:GV};async function BV(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 PV(e.schema,e.table),r=$l(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 wN.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 wN.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(BV,"validation");async function HV(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=$l(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Yl.createRecords(e);return Vl(CN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(HV,"insertData");async function FV(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=$l(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Yl.updateRecords(e);return bt.isEmpty(s.existing_rows)?Vl(vV,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Vl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(FV,"updateData");async function qV(e){if(e.operation!=="upsert")throw Si(new Error,"invalid operation, must be upsert",Ti.INTERNAL_SERVER_ERROR);let t=$l(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Yl.upsertRecords(e);return Vl(LN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(qV,"upsertData");function Vl(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===CN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===LN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Vl,"returnObject");function GV(e){return bt.transformReq(e),Yl.flush(e.schema,e.table)}a(GV,"flush")});var Dh=T((mie,PN)=>{var xV=qe(),Lh=require("joi"),{hdb_table:kV,hdb_database:UN}=Ls(),MN={schema:UN,database:UN,table:kV},VV={date:Lh.date().iso().required()},$V={timestamp:Lh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};PN.exports=function(e,t){let r=t==="timestamp"?{...MN,...$V}:{...MN,...VV},s=Lh.object(r);return xV.validateBySchema(e,s)}});var HN=T((pie,BN)=>{var YV=qe(),Uh=require("joi"),{hdb_table:KV,hdb_database:vN}=Ls(),WV=Uh.object({schema:vN,database:vN,table:KV,hash_values:Uh.array().required(),ids:Uh.array()});BN.exports=function(e){return YV.validateBySchema(e,WV)}});var qN=T((Sie,FN)=>{"use strict";var Mh=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}},Ph=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}},vh=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};FN.exports={InsertObject:Mh,NoSQLSeachObject:Ph,DeleteResponseObject:vh}});var Ai=T((Rie,$N)=>{"use strict";var xN=Dh(),QV=HN(),Ri=$(),GN=require("moment"),kN=G(),{promisify:zV,callbackify:JV}=require("util"),gi=b(),XV=Pn(),Bh=zV(XV.getTableSchema),Hh=cs(),{DeleteResponseObject:jV}=qN(),{handleHDBError:vn,hdb_errors:ZV}=j(),{HDB_ERROR_MSGS:Kl,HTTP_STATUS_CODES:Bn}=ZV,e$="records successfully deleted",t$=JV(VN);$N.exports={delete:t$,deleteRecord:VN,deleteFilesBefore:r$,deleteAuditLogsBefore:s$};async function r$(e){let t=xN(e,"date");if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);if(Ri.transformReq(e),!GN(e.date,GN.ISO_8601).isValid())throw vn(new Error,Kl.INVALID_DATE,Bn.BAD_REQUEST,gi.LOG_LEVELS.ERROR,Kl.INVALID_DATE,!0);let s=Ri.checkSchemaTableExist(e.schema,e.table);if(s)throw vn(new Error,s,Bn.NOT_FOUND,gi.LOG_LEVELS.ERROR,s,!0);let n=await Hh.deleteRecordsBefore(e);if(await Bh(e.schema,e.table),kN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(r$,"deleteFilesBefore");async function s$(e){let t=xN(e,"timestamp");if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);if(Ri.transformReq(e),isNaN(e.timestamp))throw vn(new Error,Kl.INVALID_VALUE("Timestamp"),Bn.BAD_REQUEST,gi.LOG_LEVELS.ERROR,Kl.INVALID_VALUE("Timestamp"),!0);let r=Ri.checkSchemaTableExist(e.schema,e.table);if(r)throw vn(new Error,r,Bn.NOT_FOUND,gi.LOG_LEVELS.ERROR,r,!0);let s=await Hh.deleteAuditLogsBefore(e);return await Bh(e.schema,e.table),kN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(s$,"deleteAuditLogsBefore");async function VN(e){e.ids&&(e.hash_values=e.ids);let t=QV(e);if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);Ri.transformReq(e);let r=Ri.checkSchemaTableExist(e.schema,e.table);if(r)throw vn(new Error,r,Bn.NOT_FOUND,gi.LOG_LEVELS.ERROR,r,!0);try{await Bh(e.schema,e.table);let s=await Hh.deleteRecords(e);return Ri.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${e$}`),s}catch(s){if(s.message===gi.SEARCH_NOT_FOUND_MESSAGE){let n=new jV;return n.message=gi.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(VN,"deleteRecord")});var Wl=T((Aie,WN)=>{var n$=require("crypto"),YN=9;function i$(e){let t=a$(YN),r=KN(e+t);return t+r}a(i$,"createHash");function o$(e,t){let r=e.substr(0,YN),s=r+KN(t+r);return e===s}a(o$,"validateHash");function a$(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(a$,"generateSalt");function KN(e){return n$.createHash("md5").update(e).digest("hex")}a(KN,"md5");WN.exports={hash:i$,validate:o$}});var zN=T((Nie,QN)=>{var Fh=qe(),Ht={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 c$(e){return Ht.password.presence=!0,Ht.username.presence=!0,Ht.role.presence=!0,Ht.active.presence=!0,Fh.validateObject(e,Ht)}a(c$,"addUserValidation");function u$(e){return Ht.password.presence=!1,Ht.username.presence=!0,Ht.role.presence=!1,Ht.active.presence=!1,Fh.validateObject(e,Ht)}a(u$,"alterUserValidation");function l$(e){return Ht.password.presence=!1,Ht.username.presence=!0,Ht.role.presence=!1,Ht.active.presence=!1,Fh.validateObject(e,Ht)}a(l$,"dropUserValidation");QN.exports={addUserValidation:c$,alterUserValidation:u$,dropUserValidation:l$}});var ke=T((Iie,XN)=>{"use strict";var{platform:yie}=require("os"),_$="nats-server.zip",qh="nats-server",d$=process.platform==="win32"?`${qh}.exe`:qh,Gh="HDB",f$=/^[^\s.,*>]+$/,JN="__request__",E$=a(e=>`${e}.${JN}`,"REQUEST_SUBJECT"),h$={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},m$={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},p$={HUB:"hub.pid",LEAF:"leaf.pid"},S$={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},T$={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Gh,deliver_subject:"__HDB__.WORKQUEUE"},R$={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Gh,deliver_subject:"HDB.SCHEMAQUEUE"},g$={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Gh,deliver_subject:"HDB.USERQUEUE"},A$={SUCCESS:"success",ERROR:"error"},O$={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},N$={TXN:"txn",MSGID:"msgid"},uo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},b$={[uo.ERR]:1,[uo.WRN]:2,[uo.INF]:3,[uo.DBG]:4,[uo.TRC]:5},y$={debug:"-D",trace:"-DVV"};XN.exports={NATS_SERVER_ZIP:_$,NATS_SERVER_NAME:qh,NATS_BINARY_NAME:d$,PID_FILES:p$,NATS_CONFIG_FILES:m$,SERVER_SUFFIX:S$,WORK_QUEUE_CONSUMER_NAMES:T$,SCHEMA_QUEUE_CONSUMER_NAMES:R$,USER_QUEUE_CONSUMER_NAMES:g$,NATS_TERM_CONSTRAINTS_RX:f$,REQUEST_SUFFIX:JN,UPDATE_REMOTE_RESPONSE_STATUSES:A$,CLUSTER_STATUS_STATUSES:O$,REQUEST_SUBJECT:E$,SUBJECT_PREFIXES:N$,MSG_HEADERS:h$,LOG_LEVELS:uo,LOG_LEVEL_FLAGS:y$,LOG_LEVEL_HIERARCHY:b$}});var ZN=T((Cie,jN)=>{"use strict";var Ql=b(),zl=class{static{a(this,"BaseLicense")}constructor(t=0,r=Ql.RAM_ALLOCATION_ENUM.DEFAULT,s=Ql.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},xh=class extends zl{static{a(this,"ExtendedLicense")}constructor(t=0,r=Ql.RAM_ALLOCATION_ENUM.DEFAULT,s=Ql.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};jN.exports={BaseLicense:zl,ExtendedLicense:xh}});var Za=T((Die,ib)=>{"use strict";var _o=require("fs-extra"),eb=Wl(),tb=require("crypto"),I$=require("moment"),w$=require("uuid").v4,Ft=G(),Vh=require("path"),C$=$(),Hn=b(),L$=ZN().ExtendedLicense,lo="invalid license key format",D$="061183",U$="mofi25",M$="aes-256-cbc",P$=16,v$=32,rb=X();rb.initSync();var kh;ib.exports={validateLicense:sb,generateFingerPrint:H$,licenseSearch:nb,getLicense:G$};function $h(){return Vh.join(rb.getHdbBasePath(),Hn.LICENSE_KEY_DIR_NAME,Hn.LICENSE_FILE_NAME)}a($h,"getLicenseDirPath");function B$(){let e=$h();return Vh.join(e,Hn.LICENSE_FILE_NAME)}a(B$,"getLicenseFilePath");function Yh(){let e=$h();return Vh.join(e,Hn.REG_KEY_FILE_NAME)}a(Yh,"getFingerPrintFilePath");async function H$(){let e=Yh();try{return await _o.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await F$();throw Ft.error(`Error writing fingerprint file to ${e}`),Ft.error(t),new Error("There was an error generating the fingerprint")}}a(H$,"generateFingerPrint");async function F$(){let e=w$(),t=eb.hash(e),r=Yh();try{await _o.mkdirp($h()),await _o.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(F$,"writeFingerprint");function sb(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Hn.RAM_ALLOCATION_ENUM.DEFAULT,version:Hn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ft.error("empty license key passed to validate."),r;let s=Yh(),n=!1;try{n=_o.statSync(s)}catch(i){Ft.error(i)}if(n){let i;try{i=_o.readFileSync(s,"utf8")}catch{Ft.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(U$),c=o[1];c=Buffer.concat([Buffer.from(c)],P$);let u=Buffer.concat([Buffer.from(i)],v$),_=tb.createDecipheriv(M$,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=q$(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(lo),Ft.error(lo),new Error(lo)}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(lo),Ft.error(lo),new Error(lo)}else r.exp_date=l;r.exp_date<I$().valueOf()&&(r.valid_date=!1),eb.validate(o[1],`${D$}${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(sb,"validateLicense");function q$(e,t){try{let r=tb.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(q$,"checkOldLicense");function nb(){let e=new L$,t=[];try{t=_o.readFileSync(B$(),"utf-8").split(Hn.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(C$.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=sb(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=Hn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return kh=e,e}a(nb,"licenseSearch");async function G$(){return kh||await nb(),kh}a(G$,"getLicense")});var qr=T((Bie,gb)=>{"use strict";var ub="username is required",lb="nothing to update, must supply active, role or password to update",_b="password cannot be an empty string",db="If role is specified, it cannot be empty.",fb="active must be true or false";gb.exports={addUser:z$,alterUser:J$,dropUser:j$,getSuperUser:rY,userInfo:Z$,listUsers:Xl,listUsersExternal:eY,setUsersToGlobal:Eo,findAndValidateUser:Tb,getClusterUser:sY,USERNAME_REQUIRED:ub,ALTERUSER_NOTHING_TO_UPDATE:lb,EMPTY_PASSWORD:_b,EMPTY_ROLE:db,ACTIVE_BOOLEAN:fb};var Eb=Fr(),x$=Ai(),Qh=Wl(),hb=zN(),mb=Hr(),zh=on(),Tr=$(),pb=require("validate.js"),le=G(),{promisify:k$}=require("util"),Jh=nn(),ob=b(),ab=ke(),V$=Er(),Mie=X(),Pie=Za(),$$=hi(),{table:vie}=(fe(),Z(Ce)),{handleHDBError:Us,hdb_errors:Y$}=j(),{HTTP_STATUS_CODES:Ms,AUTHENTICATION_ERROR_MSGS:Kh,HDB_ERROR_MSGS:fo}=Y$,{UserEventMsg:Xh}=us(),Wh=require("lodash"),{server:jh}=(Ur(),Z(eo)),K$=G();jh.getUser=Tb;var Sb={username:!0,active:!0,role:!0,password:!0},cb=new Map,Jl=mb.searchByValue,W$=mb.searchByHash,Q$=k$(x$.delete);async function z$(e){let t=pb.cleanAttributes(e,Sb),r=hb.addUserValidation(t);if(r)throw Us(new Error,r.message,Ms.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 Jl(s),n=n&&Array.from(n)}catch(u){throw le.error("There was an error searching for a role in add user"),le.error(u),u}if(!n||n.length<1)throw Us(new Error,fo.ROLE_NAME_NOT_FOUND(t.role),Ms.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Us(new Error,fo.DUP_ROLES_FOUND(t.role),Ms.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Jh.encrypt(t.password)),t.password=Qh.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Eb.insert(i)}catch(u){throw le.error("There was an error searching for a user."),le.error(u),u}le.debug(o);try{await Eo()}catch(u){throw le.error("Got an error setting users to global"),le.error(u),u}if(o.skipped_hashes.length===1)throw Us(new Error,fo.USER_ALREADY_EXISTS(t.username),Ms.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],zh.signalUserChange(new Xh(process.pid)),`${c.username} successfully added`}a(z$,"addUser");async function J$(e){let t=pb.cleanAttributes(e,Sb);if(Tr.isEmptyOrZeroLength(t.username))throw new Error(ub);if(Tr.isEmptyOrZeroLength(t.password)&&Tr.isEmptyOrZeroLength(t.role)&&Tr.isEmptyOrZeroLength(t.active))throw new Error(lb);if(!Tr.isEmpty(t.password)&&Tr.isEmptyOrZeroLength(t.password.trim()))throw new Error(_b);if(!Tr.isEmpty(t.active)&&!Tr.isBoolean(t.active))throw new Error(fb);let r=X$(t.username);if(!Tr.isEmpty(t.password)&&!Tr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Jh.encrypt(t.password)),t.password=Qh.hash(t.password)),t.role==="")throw new Error(db);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 Jl(i)||[])}catch(c){throw le.error("Got an error searching for a role."),le.error(c),c}if(!o||o.length===0){let c=fo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw le.error(c),Us(new Error,c,Ms.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=fo.ALTER_USER_DUP_ROLES(t.role);throw le.error(c),Us(new Error,c,Ms.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 Eb.update(s)}catch(i){throw le.error("Error during update."),le.error(i),i}try{await Eo()}catch(i){throw le.error("Got an error setting users to global"),le.error(i),i}return zh.signalUserChange(new Xh(process.pid)),n}a(J$,"alterUser");function X$(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(X$,"isClusterUser");async function j$(e){try{let t=hb.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Tr.isEmpty(global.hdb_users.get(e.username)))throw Us(new Error,fo.USER_NOT_EXIST(e.username),Ms.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Q$(r)}catch(n){throw le.error("Got an error deleting a user."),le.error(n),n}le.debug(s);try{await Eo()}catch(n){throw le.error("Got an error setting users to global."),le.error(n),n}return zh.signalUserChange(new Xh(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(j$,"dropUser");async function Z$(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Wh.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await W$(r)}catch(n){throw le.error("Got an error searching for a role."),le.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw le.error(r),r}return t}a(Z$,"userInfo");async function eY(){let e;try{e=await Xl()}catch(t){throw le.error("Got an error listing users."),le.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(eY,"listUsersExternal");async function Xl(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Jl(e)}catch(o){throw le.error("Got an error searching for roles."),le.error(o),o}let r={};for(let o of t)r[o.id]=Wh.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 Jl(s)}catch(o){throw le.error("Got an error searching for users."),le.error(o),o}let i=new Map;for(let o of n)o=Wh.cloneDeep(o),o.role=r[o.role],tY(o.role),i.set(o.username,o);return i}catch(e){throw le.error("got an error listing users"),le.error(e),Tr.errorizeMessage(e)}return null}a(Xl,"listUsers");function tY(e){try{if(!e){le.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($$)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){le.error("Got an error trying to set system permissions."),le.error(t)}}a(tY,"appendSystemTablesToRole");async function Eo(){try{let e=await Xl();global.hdb_users=e}catch(e){throw le.error(e),e}}a(Eo,"setUsersToGlobal");async function Tb(e,t,r=!0){global.hdb_users||await Eo();let s=global.hdb_users.get(e);if(!s)throw Us(new Error,Kh.GENERIC_AUTH_FAIL,Ms.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Us(new Error,Kh.USER_INACTIVE,Ms.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(cb.get(t)===s.password)return n;if(Qh.validate(s.password,t))cb.set(t,s.password);else throw Us(new Error,Kh.GENERIC_AUTH_FAIL,Ms.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Tb,"findAndValidateUser");async function rY(){global.hdb_users||await Eo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(rY,"getSuperUser");async function sY(){let e=await Xl(),t=V$.getConfigFromFile(ob.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Tr.isEmpty(r)&&r?.role?.role===ob.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Jh.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+ab.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+ab.SERVER_SUFFIX.ADMIN,r}a(sY,"getClusterUser");var Rb=[];jh.invalidateUser=function(e){for(let t of Rb)try{t(e)}catch(r){K$.error("Error invalidating user",r)}};jh.onInvalidatedUser=function(e){Rb.push(e)}});var tc=T((Gie,bb)=>{"use strict";var Oi=G(),Rr=b(),nY=mN(),Fie=Pn(),qie=pi(),iY=qr(),{validateEvent:Ab}=us(),ec=cs(),oY=require("process"),{resetDatabases:aY}=(fe(),Z(Ce)),cY={[Rr.ITC_EVENT_TYPES.SCHEMA]:uY,[Rr.ITC_EVENT_TYPES.USER]:Nb};async function uY(e){let t=Ab(e);if(t){Oi.error(t);return}Oi.trace("ITC schemaHandler received schema event:",e),await nY(e.message),await lY(e.message)}a(uY,"schemaHandler");async function lY(e){try{ec.resetReadTxn(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ec.resetReadTxn(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ec.resetReadTxn(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=aY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Oi.error(t)}}a(lY,"syncSchemaMetadata");var Ob=[];async function Nb(e){try{try{ec.resetReadTxn(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ec.resetReadTxn(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Oi.warn(r)}let t=Ab(e);if(t){Oi.error(t);return}Oi.trace(`ITC userHandler ${Rr.HDB_ITC_CLIENT_PREFIX}${oY.pid} received user event:`,e),await iY.setUsersToGlobal();for(let r of Ob)r()}catch(t){Oi.error(t)}}a(Nb,"userHandler");Nb.addListener=function(e){Ob.push(e)};bb.exports=cY});var us=T((Kie,Ib)=>{"use strict";var kie=G(),Zh=$(),_Y=b(),{ITC_ERRORS:rc}=dr(),{parentPort:Vie,threadId:dY,isMainThread:fY,workerData:$ie}=require("worker_threads"),{onMessageFromWorkers:EY,broadcast:Yie,broadcastWithAcknowledgement:hY}=Ze();Ib.exports={sendItcEvent:mY,validateEvent:yb,SchemaEventMsg:pY,UserEventMsg:SY};var jl;EY(async(e,t)=>{jl=jl||tc(),yb(e),jl[e.type]&&await jl[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function mY(e){return!fY&&e.message&&(e.message.originator=dY),hY(e)}a(mY,"sendItcEvent");function yb(e){if(typeof e!="object")return rc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Zh.isEmpty(e.type))return rc.MISSING_TYPE;if(!e.hasOwnProperty("message")||Zh.isEmpty(e.message))return rc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Zh.isEmpty(e.message.originator))return rc.MISSING_ORIGIN;if(_Y.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return rc.INVALID_EVENT(e.type)}a(yb,"validateEvent");function pY(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(pY,"SchemaEventMsg");function SY(e){this.originator=e}a(SY,"UserEventMsg")});var on=T((zie,Db)=>{"use strict";var wb=b(),Qie=$(),Zl=G(),Cb=fN(),ho,{sendItcEvent:Lb}=us();function TY(e){try{Zl.trace("signalSchemaChange called with message:",e),ho=ho||tc();let t=new Cb(wb.ITC_EVENT_TYPES.SCHEMA,e);return ho.schema(t),Lb(t)}catch(t){Zl.error(t)}}a(TY,"signalSchemaChange");function RY(e){try{Zl.trace("signalUserChange called with message:",e),ho=ho||tc();let t=new Cb(wb.ITC_EVENT_TYPES.USER,e);return ho.user(t),Lb(t)}catch(t){Zl.error(t)}}a(RY,"signalUserChange");Db.exports={signalSchemaChange:TY,signalUserChange:RY}});var e_=T((Xie,Mb)=>{"use strict";var Ub=$(),gY=b(),AY=G(),OY=Bl(),NY=vl(),bY=on(),{SchemaEventMsg:yY}=us(),IY="already exists in";Mb.exports=wY;async function wY(e,t,r){if(Ub.isEmptyOrZeroLength(r))return r;let s=[];Ub.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 CY(e,t.schema,t.name,i)})),n}a(wY,"lmdbCheckForNewAttributes");async function CY(e,t,r,s){let n=new NY(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await LY(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(IY))AY.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(CY,"createNewAttribute");async function LY(e){let t;return t=await OY(e),bY.signalSchemaChange(new yY(process.pid,gY.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(LY,"createAttribute")});var mo=T((Zie,Pb)=>{"use strict";var em=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}};Pb.exports=em});var Bb=T((toe,vb)=>{"use strict";var DY=mo(),UY=b().OPERATIONS_ENUM,tm=class extends DY{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(UY.INSERT,r,s,n,i),this.records=t}};vb.exports=tm});var Fb=T((soe,Hb)=>{"use strict";var MY=mo(),PY=b().OPERATIONS_ENUM,rm=class extends MY{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(PY.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};Hb.exports=rm});var Gb=T((ioe,qb)=>{"use strict";var vY=mo(),BY=b().OPERATIONS_ENUM,sm=class extends vY{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(BY.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};qb.exports=sm});var kb=T((aoe,xb)=>{"use strict";var HY=mo(),FY=b().OPERATIONS_ENUM,nm=class extends HY{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(FY.DELETE,s,n,t,i),this.original_records=r}};xb.exports=nm});var sc=T((loe,Kb)=>{"use strict";var uoe=require("path"),Vb=De(),qY=Bb(),GY=Fb(),xY=Gb(),kY=kb(),po=ze(),$b=$(),{CONFIG_PARAMS:VY}=b(),Yb=X();Yb.initSync();var t_=b().OPERATIONS_ENUM,{getTransactionAuditStorePath:$Y}=ve();Kb.exports=YY;async function YY(e,t){if(Yb.get(VY.LOGGING_AUDITLOG)===!1)return;let r=$Y(e.schema,e.table),s=await Vb.openEnvironment(r,e.table,!0),n=KY(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Vb.initializeDBIs(s,po.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,po.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[po.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[po.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),$b.isEmpty(n.user_name)||s.dbis[po.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[po.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(YY,"writeTransaction");function KY(e,t){let r=$b.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===t_.INSERT)return new qY(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===t_.UPDATE)return new GY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===t_.UPSERT)return new xY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===t_.DELETE)return new kY(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(KY,"createTransactionObject")});var im=T((foe,Wb)=>{"use strict";var WY=Ka(),doe=Wa(),nc=b(),QY=Xa(),zY=ao().insertRecords,JY=De(),XY=G(),jY=e_(),{getSchemaPath:ZY}=ve(),e1=sc();Wb.exports=t1;async function t1(e){try{let{schema_table:t,attributes:r}=WY(e);QY(e,r,t.hash_attribute),e.schema!==nc.SYSTEM_SCHEMA_NAME&&(r.includes(nc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(nc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(nc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(nc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await jY(e.hdb_auth_header,t,r),n=ZY(e.schema,e.table),i=await JY.openEnvironment(n,e.table),o=await zY(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await e1(e,o)}catch(c){XY.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(t1,"lmdbCreateRecords")});var Jb=T((hoe,zb)=>{"use strict";var Qb=b(),r1=im(),s1=Wa(),n1=require("fs-extra"),{getSchemaPath:i1}=ve();zb.exports=o1;async function o1(e){let t=[{name:e.schema,createddate:Date.now()}],r=new s1(Qb.SYSTEM_SCHEMA_NAME,Qb.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await r1(r),await n1.mkdirp(i1(e.schema))}a(o1,"lmdbCreateSchema")});var jb=T((poe,Xb)=>{"use strict";var om=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}};Xb.exports=om});var ry=T((Aoe,ty)=>{"use strict";var Zb=De(),am=hr(),cm=dr().LMDB_ERRORS_ENUM,a1=ze(),ey=G(),Toe=$(),c1=require("lmdb"),u1=jb(),l1=b(),{OVERFLOW_MARKER:Roe,MAX_SEARCH_KEY_LENGTH:goe}=a1,_1=l1.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function d1(e,t,r,s){if(am.validateEnv(e),t===void 0)throw new Error(cm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(cm.IDS_REQUIRED):new Error(cm.IDS_MUST_BE_ITERABLE);try{let n=Zb.listDBIs(e);Zb.initializeDBIs(e,t,n);let i=new u1,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[_1]>s){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,c1.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let p=0;p<n.length;p++){let g=n[p];if(!h.hasOwnProperty(g)||g===t)continue;let I=e.dbis[g],N=h[g];if(N!=null)try{let Y=am.getIndexedValues(N);if(Y)for(let W=0,q=Y.length;W<q;W++)I.remove(Y[W],o)}catch{ey.warn(`cannot delete from attribute: ${g}, ${N}:${o}`)}}});c.push(S),u.push(o),i.original_records.push(h)}catch(h){ey.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=am.getNextMonotonicTime(),i}catch(n){throw n}}a(d1,"deleteRecords");ty.exports={deleteRecords:d1}});var ic=T((Noe,ny)=>{"use strict";var So=$(),f1=ry(),E1=De(),{getSchemaPath:h1}=ve(),m1=sc(),p1=G();ny.exports=S1;async function S1(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(So.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(So.isEmptyOrZeroLength(e.hash_values)&&!So.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];So.isEmpty(u)||e.hash_values.push(u)}}if(So.isEmptyOrZeroLength(e.hash_values))return sy([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(So.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=h1(e.schema,e.table),i=await E1.openEnvironment(n,e.table),o=await f1.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await m1(e,o)}catch(c){p1.error(`unable to write transaction due to ${c.message}`)}return sy(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(S1,"lmdbDeleteRecords");function sy(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(sy,"createDeleteResponse")});var lm=T((Ioe,iy)=>{"use strict";var T1=b(),yoe=hr();function um(e,t){let r=Object.create(null);if(t.length===1&&T1.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(um,"parseRow");function R1(e,t,r,s){let n=um(r,e);s.push(n)}a(R1,"searchAll");function g1(e,t,r,s){let n=um(r,e);s[t]=n}a(g1,"searchAllToMap");function A1(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(A1,"iterateDBI");function Ni(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(Ni,"pushResults");function O1(e,t,r,s,n,i){t.toString().endsWith(e)&&Ni(t,r,s,n,i)}a(O1,"endsWith");function N1(e,t,r,s,n,i){t.toString().includes(e)&&Ni(t,r,s,n,i)}a(N1,"contains");function b1(e,t,r,s,n,i){t>e&&Ni(t,r,s,n,i)}a(b1,"greaterThanCompare");function y1(e,t,r,s,n,i){t>=e&&Ni(t,r,s,n,i)}a(y1,"greaterThanEqualCompare");function I1(e,t,r,s,n,i){t<e&&Ni(t,r,s,n,i)}a(I1,"lessThanCompare");function w1(e,t,r,s,n,i){t<=e&&Ni(t,r,s,n,i)}a(w1,"lessThanEqualCompare");iy.exports={parseRow:um,searchAll:R1,searchAllToMap:g1,iterateDBI:A1,endsWith:O1,contains:N1,greaterThanCompare:b1,greaterThanEqualCompare:y1,lessThanCompare:I1,lessThanEqualCompare:w1,pushResults:Ni}});var To=T((Uoe,dy)=>{"use strict";var Fn=De(),Coe=G(),gr=hr(),r_=ze(),Je=dr().LMDB_ERRORS_ENUM,Loe=$(),C1=b(),s_=lm(),{parseRow:L1}=s_,Doe=require("lmdb"),{OVERFLOW_MARKER:oy,MAX_SEARCH_KEY_LENGTH:D1}=r_;function ay(e,t,r,s=!1,n=void 0,i=void 0){return bi(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(ay,"iterateFullIndex");function oc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return bi(e,t,r,(l,d,f,E)=>{let I={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?(I.values=!1,d.getRange(I).map(N=>({value:N}))):d.getRange(I)})}a(oc,"iterateRangeBetween");function bi(e,t,r,s){let n=e.database||e,i=Fn.openDBI(n,r);i[r_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Fn.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(bi,"setupTransaction");function cy(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(oy)){if(!n)if(r)n=Fn.openDBI(e,r);else{let u=Fn.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=Fn.openDBI(e,u[_]),!n[r_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(cy,"getOverflowCheck");function U1(e,t,r,s=!1,n=void 0,i=void 0){if(gr.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return bi(e,t,t,(o,c,u)=>(n_(r),r=ac(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>L1(_.value,r))))}a(U1,"searchAll");function M1(e,t,r,s=!1,n=void 0,i=void 0){if(gr.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);n_(r),r=ac(e.database||e,r);let o=new Map;for(let{key:c,value:u}of ay(e,t,t,s,n,i))o.set(c,s_.parseRow(u,r));return o}a(M1,"searchAllToMap");function P1(e,t,r=!1,s=void 0,n=void 0){if(gr.validateEnv(e),t===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=ay(e,void 0,t,r,s,n),c=o.transaction,u=cy(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(P1,"iterateDBI");function v1(e,t){if(gr.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return Fn.statDBI(e,t).entryCount}a(v1,"countAll");function B1(e,t,r,s,n=!1,i=void 0,o=void 0){return qn(e,r,s),bi(e,t,r,(c,u,_,l)=>(s=gr.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(B1,"equals");function H1(e,t,r){return qn(e,t,r),Fn.openDBI(e,t).getValuesCount(r)}a(H1,"count");function F1(e,t,r,s,n=!1,i=void 0,o=void 0){return qn(e,r,s),bi(e,null,r,(c,u)=>{s=gr.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(F1,"startsWith");function q1(e,t,r,s,n=!1,i=void 0,o=void 0){return uy(e,t,r,s,n,i,o,!0)}a(q1,"endsWith");function uy(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return qn(e,r,s),bi(e,null,r,(u,_,l,d)=>{let f=cy(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(oy)?_.getValues(E,{transaction:u}).map(S=>{let p=f(E,S);if(c?p.endsWith(s):p.includes(s))return{key:p,value:S}}).filter(S=>S):(c?h.endsWith(s):h.includes(s))?_[r_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(S=>({key:E,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(uy,"contains");function G1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),oc(e,t,r,s,u,n,i,o,!0,!1)}a(G1,"greaterThan");function x1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),oc(e,t,r,s,u,n,i,o,!1,!1)}a(x1,"greaterThanEqual");function k1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),oc(e,t,r,u,s,n,i,o,!1,!0)}a(k1,"lessThan");function V1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),oc(e,t,r,u,s,n,i,o,!1,!1)}a(V1,"lessThanEqual");function $1(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(gr.validateEnv(e),r===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Je.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Je.END_VALUE_REQUIRED);if(s=gr.convertKeyValueToWrite(s),n=gr.convertKeyValueToWrite(n),s>n)throw new Error(Je.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return oc(e,t,r,s,n,i,o,c)}a($1,"between");function Y1(e,t,r,s){gr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(n_(r),r=ac(n,r),s===void 0)throw new Error(Je.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=s_.parseRow(c,r)),o}a(Y1,"searchByHash");function K1(e,t,r){gr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Je.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(K1,"checkHashExists");function W1(e,t,r,s,n=[]){return _y(e,t,r,s,n),ly(e,t,r,s,n).map(i=>i[1])}a(W1,"batchSearchByHash");function Q1(e,t,r,s,n=[]){_y(e,t,r,s,n);let i=new Map;for(let[o,c]of ly(e,t,r,s,n))i.set(o,c);return i}a(Q1,"batchSearchByHashToMap");function ly(e,t,r,s,n=[]){return bi(e,t,t,(i,o,c)=>{r=ac(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,s_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(ly,"batchHashSearch");function _y(e,t,r,s,n){if(gr.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(n_(r),s==null)throw new Error(Je.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Je.IDS_MUST_BE_ITERABLE)}a(_y,"initializeBatchSearchByHash");function n_(e){if(!Array.isArray(e))throw e===void 0?new Error(Je.FETCH_ATTRIBUTES_REQUIRED):new Error(Je.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(n_,"validateFetchAttributes");function qn(e,t,r){if(gr.validateEnv(e),t===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Je.SEARCH_VALUE_REQUIRED);if(r?.length>D1)throw new Error(Je.SEARCH_VALUE_TOO_LARGE)}a(qn,"validateComparisonFunctions");function ac(e,t){return t.length===1&&C1.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Fn.listDBIs(e)),t}a(ac,"setGetWholeRowAttributes");dy.exports={searchAll:U1,searchAllToMap:M1,count:H1,countAll:v1,equals:B1,startsWith:F1,endsWith:q1,contains:uy,searchByHash:Y1,setGetWholeRowAttributes:ac,batchSearchByHash:W1,batchSearchByHashToMap:Q1,checkHashExists:K1,iterateDBI:P1,greaterThan:G1,greaterThanEqual:x1,lessThan:k1,lessThanEqual:V1,between:$1}});var Ro=T((Poe,py)=>{var fy=require("lodash"),Ey=qe(),Be=require("joi"),z1=$(),{hdb_schema_table:i_,checkValidTable:hy,hdb_table:my,hdb_database:o_}=Ls(),{handleHDBError:J1,hdb_errors:X1}=j(),{getDatabases:j1}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:Z1}=X1,eK=Be.object({database:o_,schema:o_,table:my,search_attribute:i_,search_value:Be.any().required(),get_attributes:Be.array().min(1).items(i_).optional(),desc:Be.bool(),limit:Be.number().integer().min(1),offset:Be.number().integer().min(0)}),tK=Be.object({database:o_,schema:o_,table:my,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(i_).optional(),conditions:Be.array().min(1).items(Be.object({search_attribute:i_,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()});py.exports=function(e,t){let r=null;switch(t){case"value":r=Ey.validateBySchema(e,eK);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(hy("database",e.schema)),i(hy("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=Ey.validateBySchema(e,tK);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=z1.checkGlobalSchemaTable(e.schema,e.table);if(n)return J1(new Error,n,Z1.NOT_FOUND);let o=j1()[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=fy.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!fy.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 _m=T((Boe,Sy)=>{"use strict";var rK=De(),sK=Ro(),{getSchemaPath:nK}=ve();Sy.exports=iK;function iK(e){let t=sK(e,"hashes");if(t)throw t;let r=nK(e.schema,e.table);return rK.openEnvironment(r,e.table)}a(iK,"initialize")});var dm=T((Foe,Ty)=>{"use strict";var oK=To(),aK=_m();Ty.exports=cK;async function cK(e){let t=await aK(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return oK.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(cK,"lmdbGetDataByHash")});var go=T((Goe,Ry)=>{"use strict";var fm=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};Ry.exports=fm});var Ay=T((Voe,gy)=>{"use strict";var koe=go(),uK=To(),lK=_m();gy.exports=_K;async function _K(e){let t=await lK(e),r=global.hdb_schema[e.schema][e.table];return uK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(_K,"lmdbSearchByHash")});var Ps=T((Yoe,Oy)=>{"use strict";var Em=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}};Oy.exports=Em});var a_=T((Woe,Cy)=>{"use strict";var qt=To(),dK=De(),fK=$(),ae=ze(),yi=b(),EK=hi(),Ny=dr().LMDB_ERRORS_ENUM,{getSchemaPath:hK}=ve(),an=yi.SEARCH_WILDCARDS;async function mK(e,t,r){let s;e.schema===yi.SYSTEM_SCHEMA_NAME?s=EK[e.table]:s=global.hdb_schema[e.schema][e.table];let n=wy(e,s.hash_attribute,r,t);return yy(e,n,s.hash_attribute,r)}a(mK,"prepSearch");async function yy(e,t,r,s){let n=hK(e.schema,e.table),i=await dK.openEnvironment(n,e.table),o=Iy(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(pK(e,r)===!1){let l=e.search_attribute;if(l===r)return s?by(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?by(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?qt.batchSearchByHashToMap(c,r,e.get_attributes,_):qt.batchSearchByHash(c,r,e.get_attributes,_)}a(yy,"executeSearch");function Iy(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=qt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.CONTAINS:n=qt.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=qt.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=qt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return qt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return qt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.SEARCH_ALL:return qt.searchAll(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return qt.searchAllToMap(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.BETWEEN:n=qt.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=qt.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=qt.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=qt.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=qt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Iy,"searchByType");function by(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(by,"createMapFromIterable");function pK(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(pK,"checkToFetchMore");function wy(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),an.indexOf(n)>-1)return r===!0?ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ae.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(an[0])<0&&n.indexOf(an[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(an.indexOf(i)>=0&&an.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ae.SEARCH_TYPES.CONTAINS;if(an.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ae.SEARCH_TYPES.ENDS_WITH;if(an.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ae.SEARCH_TYPES.STARTS_WITH;if(n.includes(an[0])||n.includes(an[1]))return ae.SEARCH_TYPES.EQUALS;throw new Error(Ny.UNKNOWN_SEARCH_TYPE)}else switch(s){case yi.VALUE_SEARCH_COMPARATORS.BETWEEN:return ae.SEARCH_TYPES.BETWEEN;case yi.VALUE_SEARCH_COMPARATORS.GREATER:return ae.SEARCH_TYPES.GREATER_THAN;case yi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ae.SEARCH_TYPES.GREATER_THAN_EQUAL;case yi.VALUE_SEARCH_COMPARATORS.LESS:return ae.SEARCH_TYPES.LESS_THAN;case yi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ae.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Ny.UNKNOWN_SEARCH_TYPE)}}a(wy,"createSearchTypeFromSearchObject");Cy.exports={executeSearch:yy,createSearchTypeFromSearchObject:wy,prepSearch:mK,searchByType:Iy}});var Dy=T((Joe,Ly)=>{"use strict";var zoe=Ps(),SK=Ro(),TK=$(),RK=b(),gK=a_();Ly.exports=AK;function AK(e,t){if(!TK.isEmpty(t)&&RK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=SK(e,"value");if(s)throw s;let n=!0;return gK.prepSearch(e,t,n)}a(AK,"lmdbGetDataByValue")});var cc=T((Zoe,Uy)=>{"use strict";var joe=Ps(),OK=Ro(),NK=$(),bK=b(),yK=a_();Uy.exports=IK;async function IK(e,t){if(!NK.isEmpty(t)&&bK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=OK(e,"value");if(s)throw s;return yK.prepSearch(e,t,!1)}a(IK,"lmdbSearchByValue")});var Py=T((rae,My)=>{"use strict";var tae=ze(),hm=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}},mm=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},pm=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};My.exports={SearchByConditionsObject:hm,SearchCondition:mm,SortAttribute:pm}});var qy=T((oae,Fy)=>{"use strict";var nae=Py().SearchByConditionsObject,wK=Ps(),CK=Ro(),Sm=To(),c_=ze(),{Resource:iae}=(is(),Z(bE)),Hy=a_(),LK=lm(),DK=require("lodash"),{getSchemaPath:UK}=ve(),vy=De(),{handleHDBError:MK,hdb_errors:PK}=j(),{HTTP_STATUS_CODES:vK}=PK,BK=1e8;Fy.exports=HK;async function HK(e){let t=CK(e,"conditions");if(t)throw MK(t,t.message,vK.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=UK(e.schema,e.table),s=await vy.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)vy.openDBI(s,_.search_attribute);let i=DK.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===c_.SEARCH_TYPES.EQUALS?_.estimated_count=Sm.count(s,_.search_attribute,_.search_value):l===c_.SEARCH_TYPES.CONTAINS||l===c_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=BK}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await By(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(Hy.filterByType),d=l.length,f=Sm.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=>LK.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await By(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=Sm.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(HK,"lmdbSearchByConditions");async function By(e,t,r,s){let n=new wK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===c_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Hy.searchByType(e,n,i,s).map(o=>o.value)}a(By,"executeConditionSearch")});var uc=T((cae,Gy)=>{"use strict";var FK=b().OPERATIONS_ENUM,Tm=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=FK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Gy.exports=Tm});var Rm=T((lae,Qy)=>{"use strict";var $y=Ps(),Yy=uc(),Ky=cc(),Wy=ic(),Jt=b(),xy=$(),ky=De(),{getTransactionAuditStorePath:qK,getSchemaPath:GK}=ve(),Vy=G();Qy.exports=xK;async function xK(e){try{if(xy.isEmpty(global.hdb_schema[e.schema])||xy.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await kK(e),await VK(e);let t=GK(e.schema,e.table);try{await ky.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Vy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=qK(e.schema,e.table);await ky.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Vy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(xK,"lmdbDropTable");async function kK(e){let t=new $y(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Ky(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 Yy(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Wy(n)}a(kK,"deleteAttributesFromSystem");async function VK(e){let t=new $y(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Ky(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 Yy(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Wy(n)}catch(i){throw i}}a(VK,"dropTableFromSystem")});var Jy=T((dae,zy)=>{"use strict";var $K=require("fs-extra"),YK=Ps(),KK=go(),WK=uc(),QK=Rm(),zK=ic(),JK=dm(),XK=cc(),cn=b(),{getSchemaPath:jK}=ve(),{handleHDBError:ZK,hdb_errors:eW}=j(),{HDB_ERROR_MSGS:tW,HTTP_STATUS_CODES:rW}=eW;zy.exports=sW;async function sW(e){let t;try{t=await nW(e.schema);let r=new YK(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await XK(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await QK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new WK(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await zK(n);let i=jK(t);await $K.remove(i)}catch(r){throw r}}a(sW,"lmdbDropSchema");async function nW(e){let t=new KK(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await JK(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw ZK(new Error,tW.SCHEMA_NOT_FOUND(e),rW.NOT_FOUND,void 0,void 0,!0);return s}a(nW,"validateDropSchema")});var Am=T((Eae,Xy)=>{"use strict";var gm=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Xy.exports=gm});var Zy=T((pae,jy)=>{"use strict";var iW=require("fs-extra"),u_=De(),{getTransactionAuditStorePath:oW}=ve(),Om=ze(),mae=Am();jy.exports=aW;async function aW(e){let t;try{let r=oW(e.schema,e.table);await iW.mkdirp(r),t=await u_.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{u_.createDBI(t,Om.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),u_.createDBI(t,Om.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),u_.createDBI(t,Om.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(aW,"createTransactionsAuditEnvironment")});var sI=T((Tae,rI)=>{"use strict";var Nm=b(),eI=De(),cW=ao(),{getSystemSchemaPath:uW,getSchemaPath:lW}=ve(),_W=hi(),dW=Bl(),bm=vl(),fW=G(),EW=Zy(),Im=_W.hdb_table,tI=[];for(let e=0;e<Im.attributes.length;e++)tI.push(Im.attributes[e].attribute);rI.exports=hW;async function hW(e,t){let r=lW(t.schema,t.table),s=new bm(t.schema,t.table,Nm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new bm(t.schema,t.table,Nm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new bm(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await eI.createEnvironment(r,t.table),e!==void 0){let o=await eI.openEnvironment(uW(),Nm.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await cW.insertRecords(o,Im.hash_attribute,tI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await ym(s),await ym(n),await ym(i)}await EW(t)}catch(o){throw o}}a(hW,"lmdbCreateTable");async function ym(e){try{await dW(e)}catch(t){fW.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(ym,"createAttribute")});var iI=T((gae,nI)=>{"use strict";var mW=Ka(),pW=Xa(),SW=e_(),lc=b(),TW=ao().updateRecords,RW=De(),{getSchemaPath:gW}=ve(),AW=sc(),OW=G();nI.exports=NW;async function NW(e){try{let{schema_table:t,attributes:r}=mW(e);pW(e,r,t.hash_attribute),e.schema!==lc.SYSTEM_SCHEMA_NAME&&(r.includes(lc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(lc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(lc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(lc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await SW(e.hdb_auth_header,t,r),n=gW(e.schema,e.table),i=await RW.openEnvironment(n,e.table),o=await TW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await AW(e,o)}catch(c){OW.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(NW,"lmdbUpdateRecords")});var aI=T((Oae,oI)=>{"use strict";var bW=b().OPERATIONS_ENUM,wm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=bW.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};oI.exports=wm});var uI=T((yae,cI)=>{"use strict";var bae=aI(),yW=Ka(),IW=Xa(),wW=e_(),_c=b(),CW=ao().upsertRecords,LW=De(),{getSchemaPath:DW}=ve(),UW=sc(),MW=G(),{handleHDBError:PW,hdb_errors:vW}=j();cI.exports=BW;async function BW(e){let t;try{t=yW(e)}catch(u){throw PW(u,u.message,vW.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;IW(e,s,r.hash_attribute),e.schema!==_c.SYSTEM_SCHEMA_NAME&&(s.includes(_c.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(_c.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(_c.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(_c.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await wW(e.hdb_auth_header,r,s),i=DW(e.schema,e.table),o=await LW.openEnvironment(i,e.table),c=await CW(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await UW(e,c)}catch(u){MW.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(BW,"lmdbUpsertRecords")});var _I=T((wae,lI)=>{"use strict";var Cm=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};lI.exports=Cm});var fI=T((Lae,dI)=>{"use strict";var Lm=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}};dI.exports=Lm});var mI=T((Mae,hI)=>{"use strict";var Dm=De(),{getTransactionAuditStorePath:HW}=ve(),Uae=_I(),dc=ze(),FW=$(),EI=fI(),qW=require("util").promisify,GW=qW(setTimeout),xW=1e4,kW=100;hI.exports=VW;async function VW(e){let t=HW(e.schema,e.table),r=await Dm.openEnvironment(t,e.table,!0),s=Dm.listDBIs(r);Dm.initializeDBIs(r,dc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new EI;do n=await $W(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 GW(kW);while(n.transactions_deleted>0);return i}a(VW,"deleteAuditLogsBefore");async function $W(e,t){let r=new EI;try{let s=e.dbis[dc.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[dc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];FW.isEmpty(c)||(n=e.dbis[dc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[dc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>xW)break}return await n,r}catch(s){throw s}}a($W,"deleteTransactions")});var SI=T((vae,pI)=>{"use strict";var Um=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};pI.exports=Um});var RI=T((Fae,TI)=>{"use strict";var YW=Ps(),KW=uc(),Hae=SI(),vs=b(),WW=$(),Mm=De(),QW=hi(),zW=cc(),JW=ic(),{getSchemaPath:XW}=ve();TI.exports=jW;async function jW(e,t=!0){let r;e.schema===vs.SYSTEM_SCHEMA_NAME?r=QW[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await eQ(e),n=XW(e.schema,e.table),i=await Mm.openEnvironment(n,e.table);return t===!0&&await ZW(e,i,r.hash_attribute),Mm.dropDBI(i,e.attribute),s}a(jW,"lmdbDropAttribute");async function ZW(e,t,r){let s=Mm.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(ZW,"removeAttributeFromAllObjects");async function eQ(e){let t=new YW(vs.SYSTEM_SCHEMA_NAME,vs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await zW(t)).filter(o=>o[vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(WW.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new KW(vs.SYSTEM_SCHEMA_NAME,vs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return JW(i)}a(eQ,"dropAttributeFromSystem")});var yI=T((xae,bI)=>{"use strict";var Pm=De(),Ao=ze(),Gae=hr(),vm=b(),gI=$(),{getTransactionAuditStorePath:tQ}=ve(),rQ=To(),l_=mo(),sQ=G();bI.exports=nQ;async function nQ(e){let t=tQ(e.schema,e.table),r=await Pm.openEnvironment(t,e.table,!0),s=Pm.listDBIs(r);Pm.initializeDBIs(r,Ao.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case vm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return AI(r,e.search_values);case vm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,oQ(r,e.search_values,n);case vm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return iQ(r,e.search_values);default:return AI(r)}}a(nQ,"readAuditLog");function AI(e,t=[0,Date.now()]){gI.isEmpty(t[0])&&(t[0]=0),gI.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Ao.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 l_,n))}a(AI,"searchTransactionsByTimestamp");function iQ(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[Ao.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,NI(e,i))}return Object.fromEntries(r)}a(iQ,"searchTransactionsByUsername");function oQ(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=rQ.equals(e,Ao.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ao.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=NI(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);OI(u,"records",r,l,o),OI(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(oQ,"searchTransactionsByHashValues");function OI(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 l_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new l_(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(OI,"loopRecords");function NI(e,t){let r=[];try{let s=e.dbis[Ao.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 l_,i);r.push(o)}}catch(i){sQ.warn(i)}return r}catch(s){throw s}}a(NI,"batchSearchTransactions")});var wI=T((Yae,II)=>{"use strict";var{getSchemaPath:Vae}=ve(),$ae=De(),{database:aQ}=(fe(),Z(Ce));II.exports={writeTransaction:cQ};async function cQ(e,t,r){return aQ({database:e,table:t}).transaction(r)}a(cQ,"writeTransaction")});var UI=T((Wae,DI)=>{"use strict";var{getSchemaPath:CI}=ve(),LI=De();DI.exports={flush:uQ,resetReadTxn:lQ};async function uQ(e,t){return(await LI.openEnvironment(CI(e,t),t.toString())).flushed}a(uQ,"flush");async function lQ(e,t){try{(await LI.openEnvironment(CI(e,t),t.toString())).resetReadTxn()}catch{}}a(lQ,"resetReadTxn")});var BI=T((zae,vI)=>{"use strict";var{Readable:_Q}=require("stream"),{getDatabases:dQ}=(fe(),Z(Ce)),{readSync:fQ,openSync:EQ,createReadStream:MI}=require("fs"),{open:hQ}=require("lmdb"),PI=bl(),mQ=Il(),{AUDIT_STORE_OPTIONS:pQ}=(so(),Z(pO)),{INTERNAL_DBIS_NAME:SQ,AUDIT_STORE_NAME:TQ}=ze();vI.exports=gQ;var Bm=32768,RQ=100;async function gQ(e){let t=e.database||e.schema||"data",r=dQ()[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=hQ({noSync:!0,maxDbs:mQ.MAX_DBS}),f,E=d.openDB(SQ,new PI(!1)),h=l.useReadTransaction(),S=0,p=a(async function(I,N){N.encoding="binary",N.encoder=void 0;let Y=d.openDB(I,N),W=l.openDB(I,N);for(let{key:q,version:w,value:K}of W.getRange({transaction:h,versions:W.useVersions}))f=Y.put(q,K,w),S++%RQ===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:I,value:N}of l.getRange({transaction:h,start:!1}))if(n.some(Y=>I.startsWith?.(Y+"/"))){E.put(I,N);let[,Y]=I.split("/"),W=!Y,q=new PI(!W,W);await p(I,q)}e.include_audit&&await p(TQ,Object.assign({},pQ)),await f;let g=MI(d.path);return g.headers=u(),g.on("close",()=>{h.done(),d.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=EQ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Bm);fQ(c,_,0,Bm);let l=o.useReadTransaction(),d=MI(null,{fd:c,start:Bm}),f=new _Q.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(gQ,"getBackup")});var qI=T((Xae,FI)=>{"use strict";var AQ=G(),{handleHDBError:OQ}=j(),NQ=sO(),bQ=Bl(),yQ=im(),IQ=Jb(),wQ=ic(),CQ=dm(),LQ=Ay(),DQ=Dy(),UQ=cc(),MQ=qy(),PQ=Jy(),vQ=sI(),BQ=iI(),HQ=uI(),FQ=mI(),qQ=Rm(),GQ=RI(),xQ=yI(),kQ=wI(),HI=UI(),VQ=BI(),Hm=class extends NQ{static{a(this,"LMDBBridge")}async searchByConditions(t){return MQ(t)}async getDataByHash(t){return await CQ(t)}async searchByHash(t){return await LQ(t)}async getDataByValue(t,r){return await DQ(t,r)}async searchByValue(t){return await UQ(t)}async createSchema(t){return await IQ(t)}async dropSchema(t){return await PQ(t)}async createTable(t,r){return await vQ(t,r)}async dropTable(t){return await qQ(t)}async createAttribute(t){return await bQ(t)}async createRecords(t){return await yQ(t)}async updateRecords(t){return await BQ(t)}async upsertRecords(t){try{return await HQ(t)}catch(r){throw OQ(r,null,null,AQ.ERR,r)}}async deleteRecords(t){return await wQ(t)}async dropAttribute(t){return await GQ(t)}async deleteAuditLogsBefore(t){return await FQ(t)}async readAuditLog(t){return await xQ(t)}writeTransaction(t,r,s){return kQ.writeTransaction(t,r,s)}flush(t,r){return HI.flush(t,r)}resetReadTxn(t,r){return HI.resetReadTxn(t,r)}getBackup(t){return VQ(t)}};FI.exports=Hm});var QI={};Qe(QI,{ResourceBridge:()=>Gm});function xm({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 xI(e,t){let r=Bs(e),s=xm(e,r);if(!r)throw new ls.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&&ul(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 Bs(e){let t=e.database||e.schema||YQ,r=_s()[t];if(!r)throw(0,ls.handleHDBError)(new Error,$Q.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function kI(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*VI(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 $I,__,ls,YI,KI,ds,Fm,qm,WI,$Q,YQ,KQ,WQ,GI,Gm,zI=Te(()=>{"use strict";$I=U(qI()),__=U(Ro()),ls=U(j());fe();YI=U(Ka()),KI=U(Xa()),ds=U(b()),Fm=U(on()),qm=U(us()),WI=U($());di();ll();({HDB_ERROR_MSGS:$Q}=ls.hdb_errors),YQ="data",KQ=1e4,WQ=10,Gm=class extends $I.default{static{a(this,"ResourceBridge")}constructor(t){super(t),GI=this}async searchByConditions(t){let r=(0,__.default)(t,"conditions");if(r)throw(0,ls.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=Bs(t);if(!s)throw new ls.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:xm(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 ls.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 Bs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Bs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let 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){Bs(t).dropTable()}createSchema(t){return fc({database:t.schema,table:null}),Fm.signalSchemaChange(new qm.SchemaEventMsg(process.pid,ds.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await km(t.schema),Fm.signalSchemaChange(new qm.SchemaEventMsg(process.pid,ds.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,GI.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,YI.default)(t);(0,KI.default)(t,s,r.primaryKey);let n,i=_s()[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=ul(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=_s()[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 kI(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=_s()[t.schema][t.table];if(!r.createdTimeProperty)throw new ls.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:ds.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,WI.async_set_timeout)(WQ),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%KQ===0&&await _();return u.length>0&&await _(),n?kI(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,__.default)(t,"hashes");if(r)throw r;return xI(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of xI(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&ds.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,__.default)(t,"value");if(s)throw s;let n=Bs(t);if(!n)throw new ls.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===ds.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:xm(t,n)})}async getDataByValue(t,r){let s=new Map,n=Bs(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){Bs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Bs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Bs(t),s={};switch(t.search_type){case ds.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 ds.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of VI(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return VI(r,t.search_values?.[0],t.search_values?.[1])}}};a(xm,"getSelect");a(xI,"getRecords");a(Bs,"getTable");a(kI,"createDeleteResponse");a(VI,"groupRecordsInHistory")});var cs=T((sce,JI)=>{"use strict";var{ResourceBridge:QQ}=(zI(),Z(QI)),zQ=X();zQ.initSync();var d_;function JQ(){return d_||(d_=new QQ,d_)}a(JQ,"getBridge");JI.exports=JQ()});var ew=T((ice,ZI)=>{"use strict";var XI=require("lodash"),Ec=require("mathjs"),XQ=require("jsonata"),jI=$();ZI.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?XI.uniqWith(e,XI.isEqual):e,searchJSON:jQ,mad:hc.bind(null,Ec.mad),mean:hc.bind(null,Ec.mean),mode:hc.bind(null,Ec.mode),prod:hc.bind(null,Ec.prod),median:hc.bind(null,Ec.median)};function hc(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(hc,"aggregateFunction");function jQ(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(jI.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),jI.isEmpty(this.__ala__.res[r])){let s=XQ(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(jQ,"searchJSON")});var rw=T((ace,tw)=>{"use strict";var rt=require("moment"),Vm="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;tw.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(Vm),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(Vm),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(Vm)}});var ow=T((cce,iw)=>{"use strict";var ZQ=require("@turf/area"),ez=require("@turf/length"),tz=require("@turf/circle"),rz=require("@turf/difference"),sz=require("@turf/distance"),nz=require("@turf/boolean-contains"),iz=require("@turf/boolean-equal"),oz=require("@turf/boolean-disjoint"),az=require("@turf/helpers"),sw=b(),_e=$();iw.exports={geoArea:cz,geoLength:uz,geoCircle:lz,geoDifference:_z,geoDistance:nw,geoNear:dz,geoContains:fz,geoEqual:Ez,geoCrosses:hz,geoConvert:mz};var $m="geo1 is required",Ym="geo2 is required";function cz(e){if(_e.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),ZQ.default(e)}a(cz,"geoArea");function uz(e,t){if(_e.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),ez.default(e,{units:t||"kilometers"})}a(uz,"geoLength");function lz(e,t,r){if(_e.isEmpty(e))throw new Error("point is required");if(_e.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),tz.default(e,t,{units:r||"kilometers"})}a(lz,"geoCircle");function _z(e,t){if(_e.isEmpty(e))throw new Error("poly1 is required");if(_e.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),rz(e,t)}a(_z,"geoDifference");function nw(e,t,r){if(_e.isEmpty(e))throw new Error("point1 is required");if(_e.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),sz.default(e,t,{units:r||"kilometers"})}a(nw,"geoDistance");function dz(e,t,r,s){if(_e.isEmpty(e))throw new Error("point1 is required");if(_e.isEmpty(t))throw new Error("point2 is required");if(_e.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return nw(e,t,s)<=r}a(dz,"geoNear");function fz(e,t){if(_e.isEmpty(e))throw new Error($m);if(_e.isEmpty(e))throw new Error(Ym);return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),nz.default(e,t)}a(fz,"geoContains");function Ez(e,t){if(_e.isEmpty(e))throw new Error($m);if(_e.isEmpty(e))throw new Error(Ym);return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),iz.default(e,t)}a(Ez,"geoEqual");function hz(e,t){if(_e.isEmpty(e))throw new Error($m);if(_e.isEmpty(e))throw new Error(Ym);return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),!oz.default(e,t)}a(hz,"geoCrosses");function mz(e,t,r){if(_e.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(_e.isEmpty(t))throw new Error("geo_type is required");if(_e.isEmpty(sw.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(sw.GEO_CONVERSION_ENUM).join(",")}`);return az[t](e,r)}a(mz,"geoConvert")});var f_=T((lce,aw)=>{var Ii=ew(),Ar=rw(),Hs=ow();aw.exports=e=>{e.aggr.mad=e.aggr.MAD=Ii.mad,e.aggr.mean=e.aggr.MEAN=Ii.mean,e.aggr.mode=e.aggr.MODE=Ii.mode,e.aggr.prod=e.aggr.PROD=Ii.prod,e.aggr.median=e.aggr.MEDIAN=Ii.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ii.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ii.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Ar.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Ar.current_time,e.fn.extract=e.fn.EXTRACT=Ar.extract,e.fn.date=e.fn.DATE=Ar.date,e.fn.date_format=e.fn.DATE_FORMAT=Ar.date_format,e.fn.date_add=e.fn.DATE_ADD=Ar.date_add,e.fn.date_sub=e.fn.DATE_SUB=Ar.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Ar.date_diff,e.fn.now=e.fn.NOW=Ar.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Ar.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Ar.get_server_time,e.fn.getdate=e.fn.GETDATE=Ar.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Ar.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Hs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Hs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Hs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Hs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Hs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Hs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Hs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Hs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Hs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Hs.geoNear}});var _w=T((_ce,lw)=>{"use strict";var mc=require("lodash"),yt=require("alasql");yt.options.cache=!1;var pz=f_(),cw=require("clone"),E_=require("recursive-iterator"),re=G(),ie=$(),Oo=cs(),Sz=b(),{hdb_errors:Tz}=j(),{getDatabases:uw}=(fe(),Z(Ce)),Rz="IS NULL",Es="There was a problem performing this search. Please check the logs and try again.";pz(yt);var Km=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(Es)}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(Es)}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(Es)}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(Es)}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(Es)}}_getColumns(){let t=new E_(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(cw(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=mc.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=uw()[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 E_(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 yt.yy.LogicValue({value:s}):r.right instanceof yt.yy.StringValue&&!ie.isEmpty(s)&&ie.autoCasterIsNumberCheck(s.toString())&&(r.right=new yt.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 yt.yy.LogicValue({value:i}):s instanceof yt.yy.StringValue&&ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new yt.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 E_(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(Sz.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&&mc.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 yt.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(cw(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(Rz)>-1&&this.tables.forEach(n=>{let i={columnid:uw()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=mc.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 Oo.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(Es)}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 Oo.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(Es)}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 Oo.getDataByValue(c,E.operation);if(u)for(let[S]of h)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...s[i]],this._setMergedHashAttribute(i,ie.autoCast(S)));else for(let[S,p]of h)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,p[n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,p[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(S)))}}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),re.error(l),new Error(Es)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await Oo.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(Es)}}}_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 yt.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 yt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new yt.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 yt.yy.FuncValue:new yt.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,S=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${S}.${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 "${S}.${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 yt.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 S=f[E];o.forEach(p=>{S[p.key]!==null&&S[p.key]!==void 0&&p.keys.add(S[p.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),S=mc.difference(h,[...E.keys].map(p=>p.toString()));for(let p=0,g=S.length;p<g;p++){let I=S[p];delete this.data[`${E.schema}_${E.table}`].__merged_data[I]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new E_(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=mc.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(Es)}}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 Oo.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 S=n.columns[h],p=E[S]===void 0?null:E[S];this.data[s].__merged_data[f].push(p)}}}}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 yt.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(Tz.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 Oo.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(Es)}}return Object.values(Object.values(this.data)[0].__merged_data)}};lw.exports=Km});var Hr=T((fce,dw)=>{"use strict";var gz=tO();dw.exports={searchByConditions:Oz,searchByHash:Nz,searchByValue:bz,search:yz};var Wm=cs(),{transformReq:Qm}=$(),Az=_w();async function Oz(e){return Qm(e),Wm.searchByConditions(e)}a(Oz,"searchByConditions");async function Nz(e){Qm(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Wm.searchByHash(e))r&&t.push(r);return t}a(Nz,"searchByHash");async function bz(e){Qm(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Wm.searchByValue(e))t.push(r);return t}a(bz,"searchByValue");function yz(e,t){try{let r=new gz(e);r.validate(),new Az(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(yz,"search")});var h_=T((hce,fw)=>{"use strict";var Iz=cs();fw.exports={writeTransaction:wz};function wz(e,t,r){return Iz.writeTransaction(e,t,r)}a(wz,"writeTransaction")});var pw=T((Sce,mw)=>{"use strict";var Cz=Hr(),Lz=Pn(),Ew=G(),Dz=Fr(),pce=h_(),Uz=require("clone"),Jm=require("alasql"),Mz=f_(),hw=require("util"),Pz=hw.promisify(Lz.getTableSchema),vz=hw.promisify(Cz.search),Bz=b(),zm=$();Mz(Jm);mw.exports={update:Fz};var Hz="There was a problem performing this update. Please check the logs and try again.";async function Fz({statement:e,hdb_user:t}){let r=await Pz(e.table.databaseid,e.table.tableid),s=qz(e.columns);zm.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=Uz(n),c=zm.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=Jm.parse(u).statements[0],l=await vz(_),d=Gz(s,l);return xz(o,d,t)}a(Fz,"update");function qz(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Jm.compile(`SELECT ${r.expression.toString()} AS [${Bz.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Ew.error(t),new Error(Hz)}}a(qz,"createUpdateRecord");function Gz(e,t){return zm.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Gz,"buildUpdateRecords");async function xz(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await Dz.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Ew.error(`Error delete new_attributes from update response: ${i}`)}return n}a(xz,"updateRecords")});var Tw=T((Ace,Sw)=>{var kz=require("alasql"),Vz=Hr(),$z=G(),Yz=cs(),jm=require("util"),Xm=$(),Kz=b(),Wz=Pn(),Rce=h_(),gce=Fr(),Qz="record",zz="successfully deleted",Jz=jm.callbackify(eJ),Xz=jm.promisify(Vz.search),jz=jm.promisify(Wz.getTableSchema);Sw.exports={convertDelete:Jz};function Zz(e){return`${e.deleted_hashes.length} ${Qz}${e.deleted_hashes.length===1?"":"s"} ${zz}`}a(Zz,"generateReturnMessage");async function eJ({statement:e,hdb_user:t}){let r=await jz(e.table.databaseid,e.table.tableid);Xm.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Xm.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=kz.parse(o).statements[0],u={operation:Kz.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await Xz(c);let _=await Yz.deleteRecords(u);return Xm.isEmptyOrZeroLength(_.message)&&(_.message=Zz(_)),delete _.txn_time,_}catch(_){throw $z.error(_),_.hdb_code?_.message:_}}a(eJ,"convertDelete")});var Nw=T((Nce,Ow)=>{"use strict";var tJ=pi(),{hdb_errors:Rw}=j(),{getDatabases:gw}=(fe(),Z(Ce));Ow.exports={checkSchemaExists:Aw,checkSchemaTableExists:rJ,schema_describe:tJ};async function Aw(e){if(!gw()[e])return Rw.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Aw,"checkSchemaExists");async function rJ(e,t){let r=await Aw(e);if(r)return r;if(!gw()[e][t])return Rw.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(rJ,"checkSchemaTableExists")});var pc=T((yce,sJ)=>{sJ.exports={name:"harperdb",version:"4.2.0-rc.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.418.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.10.2",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.3",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.9","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 T_={};Qe(T_,{addAnalyticsListener:()=>Rc,recordAction:()=>Or,recordActionBinary:()=>Gr,setAnalyticsEnabled:()=>nJ});function nJ(e){Pw=e}function Or(e,t,r,s,n){if(!Pw)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=S_.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},S_.set(i,o)}m_||iJ()}function Gr(e,t,r,s,n){Or(!!e,t,r,s,n)}function Rc(e){Hw.push(e)}function iJ(){m_=performance.now(),setTimeout(async()=>{let e=performance.now()-m_;m_=0;let t=[],r={time:Date.now(),period:e,threadId:wi.threadId,metrics:t};for(let[n,i]of S_){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 Fw){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let S=_[_.length-1];typeof S=="number"?_[_.length-1]={value:S,count:1+h}:S.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 qw()}let s=process.memoryUsage();t.push({metric:"memory",threadId:wi.threadId,byThread:!0,...s});for(let n of Hw)n(t);S_=new Map,wi.parentPort?wi.parentPort.postMessage({type:Bw,report:r}):kw({report:r})},vw).unref()}async function oJ(e,t=6e4){let r=tp(),s=Gw(),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:S}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:p,threadId:g}=S;for(let I of p||[]){let{path:N,method:Y,type:W,metric:q,count:w,total:K,distribution:B,threads:x,...te}=I;w||(w=1);let be=q+(N?"-"+N:"");Y!==void 0&&(be+="-"+Y),W!==void 0&&(be+="-"+W);let se=o.get(be);if(se){if(se.threads){let Pe=se.threads[g];if(Pe)se=Pe;else{se.threads[g]=Object.assign({},te);continue}}se.count||(se.count=1);let Pt=se.count;for(let Pe in te){let gt=te[Pe];typeof gt=="number"&&(se[Pe]=(se[Pe]*Pt+gt*w)/(Pt+w))}se.count+=w,K>=0&&(se.total+=K,se.ratio=se.total/se.count)}else se=Object.assign({period:t},I),delete se.distribution,o.set(be,se),se.byThread&&(se.threads=[],se.threads[g]=Object.assign({},te),u.push(se));if(B){B=B.map(Pe=>typeof Pe=="number"?{value:Pe,count:1}:Pe);let Pt=c.get(be);Pt?Pt.push(...B):c.set(be,B)}}await qw()}for(let h of u){let{path:S,method:p,type:g,metric:I,count:N,total:Y,distribution:W,threads:q,...w}=h;q=q.filter(K=>K);for(let K in w){if(typeof h[K]!="number")continue;let B=0;for(let x of q){let te=x[K];typeof te=="number"&&(B+=te)}h[K]=B}h.count=q.length,delete h.threads,delete h.byThread}for(let[h,S]of c){let p=o.get(h);S.sort((Pe,gt)=>Pe.value>gt.value?1:-1);let g=p.count-1,I=[],N=0,Y=0,W;for(let Pe of Fw){let gt=g*Pe;for(;N<gt;)W=S[Y++],N+=W.count,Y===1&&N--;let jr=S[Y>1?Y-2:0];W||(W=S[0]),I.push(W.value-(W.value-jr.value)*(N-gt)/W.count)}let[q,w,K,B,x,te,be,se,Pt]=I;Object.assign(p,{p1:q,p10:w,p25:K,median:B,p75:x,p90:te,p95:be,p99:se,p999:Pt})}let l;for(let[h,S]of o)S.id=(0,p_.getNextMonotonicTime)(),S.time=_,s.primaryStore.put(S.id,S,{append:!0}).then(p=>{p||s.primaryStore.put(S.id,S)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,p_.getNextMonotonicTime)(),S={id:h,metric:"main-thread-utilization",idle:f-bw,active:E-yw,time:d,...process.memoryUsage()};s.primaryStore.put(h,S,{append:!0}).then(p=>{p||s.primaryStore.put(h,S)})}bw=f,yw=E}async function Iw(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 ww||(ww=et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Gw(){return Cw||(Cw=et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function uJ(){xw=!0;let e=(0,Tc.get)(ep.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await oJ(vw,e),await Iw(tp(),aJ),await Iw(Gw(),cJ)},Math.min(e/2,2147483647)).unref()}function kw(e,t){let r=e.report;r.threadId=t?.threadId||wi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(Lw+=s.mean*s.count);r.totalBytesProcessed=Lw,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(Dw.get(t))}),Dw.set(t,t.performance.eventLoopUtilization())),r.id=(0,p_.getNextMonotonicTime)(),tp().primaryStore.put(r.id,r),xw||uJ(),lJ&&(Vw=dJ(r))}async function dJ(e){if(await Vw,!Gn){let r=(0,Sc.dirname)((0,Mw.getLogFilePath)());try{Gn=await(0,Zm.open)((0,Sc.join)(r,"analytics.log"),"r+")}catch{Gn=await(0,Zm.open)((0,Sc.join)(r,"analytics.log"),"w+")}}let t=(await Gn.stat()).size;if(t>_J){let r=Buffer.alloc(t);await Gn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Gn.write(r,{position:0}),await Gn.truncate(r.length),t=r.length}await Gn.write(JSON.stringify(e)+`
6
- `,t)}var wi,Uw,Mw,Sc,Zm,p_,Tc,ep,S_,Pw,m_,vw,Bw,Hw,Fw,bw,yw,qw,aJ,cJ,ww,Cw,xw,Lw,Dw,lJ,Vw,Gn,_J,xn=Te(()=>{wi=require("worker_threads"),Uw=U(Ze());fe();Mw=U(G()),Sc=require("path"),Zm=require("fs/promises"),p_=U(hr()),Tc=U(X()),ep=U(b());Ur();(0,Tc.initSync)();S_=new Map,Pw=(0,Tc.get)(ep.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(nJ,"setAnalyticsEnabled");a(Or,"recordAction");ut.recordAnalytics=Or;a(Gr,"recordActionBinary");m_=0,vw=1e3,Bw="analytics-report",Hw=[];a(Rc,"addAnalyticsListener");Fw=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(iJ,"sendAnalytics");a(oJ,"aggregation");bw=0,yw=0,qw=a(()=>new Promise(setImmediate),"rest");a(Iw,"cleanup");aJ=36e5,cJ=31536e6;a(tp,"getRawAnalyticsTable");a(Gw,"getAnalyticsTable");(0,Uw.setChildListenerByType)(Bw,kw);a(uJ,"startScheduledTasks");Lw=0,Dw=new Map,lJ=!1;a(kw,"recordAnalytics");_J=1e6;a(dJ,"logAnalytics")});var _t=T((Gce,cC)=>{"use strict";var It=X();It.initSync();var fJ=require("fs-extra"),EJ=require("semver"),Oc=require("path"),{monotonicFactory:hJ}=require("ulidx"),Yw=hJ(),mJ=require("util"),Kw=require("child_process"),pJ=mJ.promisify(Kw.exec),SJ=Kw.spawn,ge=ke(),Oe=b(),ip=$(),xr=G(),R_=nn(),TJ=h_(),gc=Er(),{onMessageByType:RJ}=Ze(),{isMainThread:gJ}=require("worker_threads"),{Encoder:AJ,decode:op}=require("msgpackr"),Ww=new AJ,{isEmpty:Ci}=ip,Qw=qr(),OJ=48*36e11,NJ=5e9;gJ&&RJ(Oe.ITC_EVENT_TYPES.RESTART,()=>{hs=void 0,yo=void 0});var{connect:bJ,StorageType:zw,RetentionPolicy:Jw,AckPolicy:g_,DeliverPolicy:A_,DiscardPolicy:yJ,NatsConnection:Bce,JetStreamManager:Hce,JetStreamClient:Fce,StringCodec:qce,JSONCodec:IJ,createInbox:ap,headers:wJ,ErrorCode:$w}=require("nats"),{PACKAGE_ROOT:CJ}=b(),LJ=pc(),{recordAction:DJ}=(xn(),Z(T_)),Xw=IJ(),UJ="clustering",MJ=LJ.engines[ge.NATS_SERVER_NAME],PJ=Oc.join(CJ,"dependencies"),np=Oc.join(PJ,`${process.platform}-${process.arch}`,ge.NATS_BINARY_NAME),rp,sp,Ac,No,bo;cC.exports={runCommand:jw,checkNATSServerInstalled:vJ,createConnection:cp,getConnection:O_,getJetStreamManager:Nc,getJetStream:Zw,getNATSReferences:Xt,getServerList:HJ,createLocalStream:up,listStreams:eC,deleteLocalStream:FJ,getServerConfig:bc,listRemoteStreams:qJ,viewStream:GJ,viewStreamIterator:xJ,publishToStream:kJ,createWorkQueueStream:VJ,addSourceToWorkStream:rC,request:YJ,removeSourceFromWorkStream:nC,reloadNATS:lp,reloadNATSHub:KJ,reloadNATSLeaf:WJ,extractServerName:sC,requestErrorHandler:QJ,updateWorkStream:zJ,createLocalTableStream:oC,createTableStreams:JJ,purgeTableStream:aC,purgeSchemaTableStreams:XJ,getStreamInfo:jJ,updateLocalStreams:e2,closeConnection:BJ,getJsmServerName:yc,addNatsMsgHeader:tC,updateIngestStreamConsumer:$J};async function jw(e,t=void 0){let{stdout:r,stderr:s}=await pJ(e,{cwd:t});if(s)throw new Error(s.replace(`
1
+ "use strict";var KB=Object.create;var Sa=Object.defineProperty;var WB=Object.getOwnPropertyDescriptor;var QB=Object.getOwnPropertyNames;var zB=Object.getPrototypeOf,JB=Object.prototype.hasOwnProperty;var a=(e,t)=>Sa(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)Sa(e,r,{get:t[r],enumerable:!0})},jR=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of QB(t))!JB.call(e,n)&&n!==r&&Sa(e,n,{get:()=>t[n],enumerable:!(s=WB(t,n))||s.enumerable});return e};var M=(e,t,r)=>(r=e!=null?KB(zB(e)):{},jR(t||!e||!e.__esModule?Sa(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>jR(Sa({},"__esModule",{value:!0}),e);var tg=T((Xre,eg)=>{var XB=require("fast-glob"),{statSync:Jf,existsSync:Xf,readFileSync:jB,writeFileSync:ZB}=require("fs"),{spawnSync:eH,spawn:tH,execFileSync:Jre}=require("child_process"),{isMainThread:rH}=require("worker_threads"),{join:wn,relative:ZR}=require("path"),{PACKAGE_ROOT:es}=b(),{tmpdir:sH,platform:nH}=require("os");require("source-map-support").install();var iH=["resources","server","dataLayer","components"],Ta="ts-build",jf,oH=__filename.endsWith("tsBuild.js");if(oH){if(rH){let r;try{Jf(wn(es,Ta)),r=!0}catch{}if(r)for(let s of XB.sync(iH.map(n=>n+"/**/*.ts"),{cwd:es})){let n=0,i=0;try{n=Jf(wn(es,s)).mtimeMs-5e3,i=Jf(wn(es,Ta,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."),jf=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),jf=!0;if(jf){let s=wn(es,"node_modules/.bin/tsc");nH()==="win32"&&(s+=".cmd");let n=eH(s,{cwd:es});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=wn(sH(),"harperdb-tsc.pid"),o;if(Xf(i))try{process.kill(+jB(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=tH(s,["--watch"],{cwd:es,detached:!0,stdio:"ignore"});ZB(i,c.pid.toString()),c.unref()}}}}let e=eg.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(es)&&!s[0].includes("node_modules")){let i=ZR(es,s[0]),o;i.startsWith(Ta)?o=wn(es,ZR(Ta,i)):o=wn(es,Ta,i);let c=wn(o,r),u=c+".js";if(Xf(u))return u;if(c.includes(".")&&Xf(c))return c}return t(r,s,n)}}});var b=T((ese,hg)=>{"use strict";var Dr=require("path"),aH=require("fs"),{relative:jre,join:Zre}=Dr,{existsSync:cH}=aH;function uH(){let e=__dirname;for(;!cH(Dr.join(e,"package.json"));){let t=Dr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(uH,"getHDBPackageRoot");var Cn=uH(),rg="js",ku=rg,lH="harperdb-config.yaml",_H="defaultConfig.yaml",dH="hdb",sg=`harperdb.${ku}`,ng=`customFunctionsServer.${ku}`,fH=`restartHdb.${ku}`,eE="HarperDB",xu="Custom Functions",Vu="Clustering Hub",$u="Clustering Leaf",EH="Clustering Ingest Service",hH="Clustering Reply Service",mH="foreground.pid",pH="hdb.pid",SH="data",TH={HDB:eE,CLUSTERING_HUB:Vu,CLUSTERING_LEAF:$u,CLUSTERING_INGEST_SERVICE:EH,CLUSTERING_REPLY_SERVICE:hH,CUSTOM_FUNCTIONS:xu,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"},RH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},gH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},AH={harperdb:eE,"clustering hub":Vu,"clustering leaf":$u,"custom functions":xu,custom_functions:xu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},OH={CLUSTERING_HUB_PROC_DESCRIPTOR:Vu,CLUSTERING_LEAF_PROC_DESCRIPTOR:$u},Zf={HDB:Dr.join(Cn,"server/harperdb"),CUSTOM_FUNCTIONS:Dr.join(Cn,"server/customFunctions"),CLUSTERING_HUB:Dr.join(Cn,"server/nats"),CLUSTERING_LEAF:Dr.join(Cn,"server/nats")},NH={HDB:Dr.join(Zf.HDB,sg),CUSTOM_FUNCTIONS:Dr.join(Zf.CUSTOM_FUNCTIONS,ng)},bH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Dr.join(Cn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Dr.join(Cn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Dr.join(Cn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},yH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},ig="support@harperdb.io",IH="customer-success@harperdb.io",og=1,wH=4141,ag="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",CH="https://www.harperdb.io/product",LH=`For support, please submit a request at ${ag} or contact ${ig}`,cg=`For license support, please contact ${IH}`,DH="None of the specified records were found.",UH="hash attribute not found",MH=`Your current license only supports ${og} role. ${cg}`,PH="Your current license only supports 3 connections to a node.",vH="127.0.0.1",BH=1,HH=/^\.$/,FH=/^\.\.$/,qH="U+002E",GH=/\//g,xH="U+002F",kH=/U\+002F/g,VH=/^U\+002E$/,$H=/^U\+002EU\+002E$/,YH="d",KH=999999,WH="*",QH="--max-old-space-size=",zH="system",JH="__hdb_hash",XH=".harperdb",jH=".hdb",ZH="keys",eF="hdb_boot_properties.file",tF=".updateConfig.json",rF="SIGTSTP",sF=24,nF=6e4,iF=448,oF="blob",aF="trash",cF="database",uF="schema",lF="transactions",_F=".count",dF="id",fF="PROCESS_NAME",ug={SETTINGS_PATH_KEY:"settings_path"},lg=require("lodash"),EF={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"},hF={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},mF={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},pF={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"},SF={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"},_r="hdb_internal:",TF={CREATE_SCHEMA:_r+"create_schema",CREATE_TABLE:_r+"create_table",CREATE_ATTRIBUTE:_r+"create_attribute",ADD_USER:_r+"add_user",ALTER_USER:_r+"alter_user",DROP_USER:_r+"drop_user",HDB_NODES:_r+"hdb_nodes",HDB_USERS:_r+"hdb_users",HDB_WORKERS:_r+"hdb_workers",CATCHUP:_r+"catchup",SCHEMA_CATCHUP:_r+"schema_catchup",WORKER_ROOM:_r+"cluster_workers"},RF={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"},gF="060493.ks",AF=".license",OF={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"},NF={CSV:".csv",JSON:".json"},bF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},yF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Ra={};Ra[J.INSERT]=J.INSERT;Ra[J.UPDATE]=J.UPDATE;Ra[J.UPSERT]=J.UPSERT;Ra[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"},wF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},_g={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"},CF=lg.invert(_g),LF={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"},O={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"},dg={settings_path:ug.SETTINGS_PATH_KEY,hdb_root_key:O.ROOTPATH,hdb_root:O.ROOTPATH,rootpath:O.ROOTPATH,server_port_key:O.OPERATIONSAPI_NETWORK_PORT,server_port:O.OPERATIONSAPI_NETWORK_PORT,cert_key:O.TLS_CERTIFICATE,certificate:O.TLS_CERTIFICATE,private_key_key:O.TLS_PRIVATEKEY,private_key:O.TLS_PRIVATEKEY,http_secure_enabled_key:O.OPERATIONSAPI_NETWORK_HTTPS,https_on:O.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:O.OPERATIONSAPI_NETWORK_CORS,cors_on:O.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:O.LOGGING_LEVEL,log_level:O.LOGGING_LEVEL,log_path_key:O.LOGGING_ROOT,log_path:O.LOGGING_ROOT,clustering_node_name_key:O.CLUSTERING_NODENAME,node_name:O.CLUSTERING_NODENAME,clustering_enabled_key:O.CLUSTERING_ENABLED,clustering:O.CLUSTERING_ENABLED,max_http_threads:O.THREADS,max_hdb_processes:O.THREADS,server_timeout_key:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:O.LOGGING_AUDITLOG,disable_transaction_log:O.LOGGING_AUDITLOG,operation_token_timeout_key:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:O.HTTP_PORT,custom_functions_port:O.HTTP_PORT,custom_functions_directory_key:O.COMPONENTSROOT,custom_functions_directory:O.COMPONENTSROOT,max_custom_function_processes:O.THREADS,log_to_file:O.LOGGING_FILE,log_to_stdstreams:O.LOGGING_STDSTREAMS,local_studio_on:O.LOCALSTUDIO_ENABLED,clustering_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:O.CLUSTERING_USER,clustering_enabled:O.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:O.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:O.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:O.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:O.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:O.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:O.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:O.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:O.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:O.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:O.CLUSTERING_NODENAME,clustering_tls_certificate:O.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:O.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:O.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:O.CLUSTERING_TLS_INSECURE,clustering_tls_verify:O.CLUSTERING_TLS_VERIFY,clustering_loglevel:O.CLUSTERING_LOGLEVEL,clustering_republishmessages:O.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:O.CLUSTERING_DATABASELEVEL,customfunctions_network_port:O.HTTP_PORT,customfunctions_tls_certificate:O.TLS_CERTIFICATE,customfunctions_network_cors:O.HTTP_CORS,customfunctions_network_corsaccesslist:O.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:O.HTTP_HEADERSTIMEOUT,customfunctions_network_https:O.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:O.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:O.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:O.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:O.HTTP_TIMEOUT,http_threads:O.THREADS,threads:O.THREADS,http_session_affinity:O.HTTP_SESSIONAFFINITY,http_compressionthreshold:O.HTTP_COMPRESSIONTHRESHOLD,http_cors:O.HTTP_CORS,http_corsaccesslist:O.HTTP_CORSACCESSLIST,http_headerstimeout:O.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:O.HTTP_KEEPALIVETIMEOUT,http_timeout:O.HTTP_TIMEOUT,http_port:O.HTTP_PORT,http_secureport:O.HTTP_SECUREPORT,customfunctions_processes:O.THREADS,customfunctions_root:O.COMPONENTSROOT,localstudio_enabled:O.LOCALSTUDIO_ENABLED,logging_file:O.LOGGING_FILE,logging_level:O.LOGGING_LEVEL,logging_root:O.LOGGING_ROOT,logging_rotation_enabled:O.LOGGING_ROTATION_ENABLED,logging_rotation_compress:O.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:O.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:O.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:O.LOGGING_ROTATION_PATH,logging_stdstreams:O.LOGGING_STDSTREAMS,logging_auditlog:O.LOGGING_AUDITLOG,logging_auditretention:O.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:O.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:O.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:O.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:O.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:O.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:O.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:O.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:O.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:O.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:O.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:O.ROOTPATH,databases:O.DATABASES,storage_path:O.STORAGE_PATH,ignorescripts:O.IGNORE_SCRIPTS,mqtt_network_port:O.MQTT_NETWORK_PORT,mqtt_websocket:O.MQTT_WEBSOCKET,mqtt_network_secureport:O.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:O.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:O.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:O.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:O.AUTHENTICATION_CACHETTL,authentication_enablesessions:O.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:O.COMPONENTSROOT,tls_certificate:O.TLS_CERTIFICATE,tls_privatekey:O.TLS_PRIVATEKEY,tls_certificateauthority:O.TLS_CERTIFICATEAUTHORITY};for(let e in O){let t=O[e];dg[t.toLowerCase()]=t}var DF={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"},MF={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"},PF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},vF={VERSION_DEFAULT:"2.2.0"},BF={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"},FF={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"},qF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},fg={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},GF=Symbol("metadata"),xF="__clustering__",kF=Object.values(fg),VF=15984864e5,Eg={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},$F=lg.invert(Eg),YF={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"},KF=111,WF=`\r
2
+ `,QF={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},zF=["*","%"],JF="unauthorized_access",XF="func_val",jF={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},ZF={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},eq={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"},tq={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},rq={HTTP:"http"},sq={STOPPED:"stopped",ONLINE:"online"},nq="3.x.x",iq={SUCCESS:"success",FAILURE:"failure"},oq={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};hg.exports={LOCAL_HARPERDB_OPERATIONS:ye,HDB_SUPPORT_ADDRESS:ig,HDB_SUPPORT_URL:ag,HDB_PRICING_URL:CH,SUPPORT_HELP_MSG:LH,LICENSE_HELP_MSG:cg,HDB_PROC_NAME:sg,HDB_PROC_DESCRIPTOR:eE,CLUSTERING_LEAF_PROC_DESCRIPTOR:$u,CLUSTERING_HUB_PROC_DESCRIPTOR:Vu,SYSTEM_SCHEMA_NAME:zH,HASH_FOLDER_NAME:JH,HDB_HOME_DIR_NAME:XH,UPDATE_FILE_NAME:tF,LICENSE_KEY_DIR_NAME:ZH,BOOT_PROPS_FILE_NAME:eF,JOB_TYPE_ENUM:UF,JOB_STATUS_ENUM:OF,SYSTEM_TABLE_NAMES:pF,SYSTEM_TABLE_HASH_ATTRIBUTES:SF,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:NF,S3_BUCKET_AUTH_KEYS:bF,VALID_SQL_OPS_ENUM:yF,GEO_CONVERSION_ENUM:wF,HDB_SETTINGS_NAMES:_g,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:CF,SERVICE_ACTIONS_ENUM:IF,CLUSTER_MESSAGE_TYPE_ENUM:MF,CLUSTER_CONNECTION_DIRECTION_ENUM:PF,CLUSTER_EVENTS_DEFS_ENUM:HF,PERIOD_REGEX:HH,DOUBLE_PERIOD_REGEX:FH,UNICODE_PERIOD:qH,FORWARD_SLASH_REGEX:GH,UNICODE_FORWARD_SLASH:xH,ESCAPED_FORWARD_SLASH_REGEX:kH,ESCAPED_PERIOD_REGEX:VH,ESCAPED_DOUBLE_PERIOD_REGEX:$H,REG_KEY_FILE_NAME:gF,RESTART_TIMEOUT_MS:nF,HDB_FILE_PERMISSIONS:iF,DATABASES_DIR_NAME:cF,LEGACY_DATABASES_DIR_NAME:uF,TRANSACTIONS_DIR_NAME:lF,LIMIT_COUNT_NAME:_F,ID_ATTRIBUTE_STRING:dF,INSERT_MODULE_ENUM:hF,UPGRADE_JSON_FIELD_NAMES_ENUM:mF,RESTART_CODE:rF,RESTART_CODE_NUM:sF,CLUSTER_OPERATIONS:Ra,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:RF,HDB_INTERNAL_SC_CHANNEL_PREFIX:_r,INTERNAL_SC_CHANNELS:TF,CLUSTERING_MESSAGE_TYPES:YF,HDB_FILE_SUFFIX:jH,BLOB_FOLDER_NAME:oF,HDB_TRASH_DIR:aF,ORIGINATOR_SET_VALUE:KF,LICENSE_VALUES:vF,RAM_ALLOCATION_ENUM:BF,TIME_STAMP_NAMES_ENUM:fg,TIME_STAMP_NAMES:kF,PERMS_UPDATE_RELEASE_TIMESTAMP:VF,SEARCH_NOT_FOUND_MESSAGE:DH,SEARCH_ATTRIBUTE_NOT_FOUND:UH,LICENSE_ROLE_DENIED_RESPONSE:MH,LICENSE_MAX_CONNS_REACHED:PH,BASIC_LICENSE_MAX_NON_CU_ROLES:og,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:wH,VALUE_SEARCH_COMPARATORS:Eg,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:$F,LICENSE_FILE_NAME:AF,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:FF,NEW_LINE:WF,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:BH,MOMENT_DAYS_TAG:YH,API_TURNOVER_SEC:KH,LOOPBACK:vH,CODE_EXTENSION:ku,WILDCARD_SEARCH_VALUE:WH,NODE_ERROR_CODES:qF,JAVASCRIPT_EXTENSION:rg,PERMS_CRUD_ENUM:QF,UNAUTHORIZED_PERMISSION_NAME:JF,SEARCH_WILDCARDS:zF,FUNC_VAL:XF,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:jF,JWT_ENUM:ZF,CLUSTERING_FLAG:xF,ITC_EVENT_TYPES:eq,CUSTOM_FUNCTION_PROC_NAME:ng,CUSTOM_FUNCTION_PROC_DESCRIPTOR:xu,SERVICES:tq,THREAD_TYPES:rq,MEM_SETTING_KEY:QH,HDB_RESTART_SCRIPT:fH,PROCESS_DESCRIPTORS:TH,SERVICE_SERVERS:NH,SERVICE_SERVERS_CWD:Zf,PROCESS_DESCRIPTORS_VALIDATE:AH,LAUNCH_SERVICE_SCRIPTS:bH,LOG_LEVELS:gH,PROCESS_NAME_ENV_PROP:fF,LOG_NAMES:RH,PM2_PROCESS_STATUSES:sq,CONFIG_PARAM_MAP:dg,CONFIG_PARAMS:O,HDB_CONFIG_FILE:lH,HDB_DEFAULT_CONFIG_FILE:_H,ROLE_TYPES_ENUM:yH,BOOT_PROP_PARAMS:ug,INSTALL_PROMPTS:EF,HDB_ROOT_DIR_NAME:dH,CLUSTERING_PROCESSES:OH,FOREGROUND_PID_FILE:mH,PACKAGE_ROOT:Cn,PRE_4_0_0_VERSION:nq,DATABASES_PARAM_CONFIG:DF,METADATA_PROPERTY:GF,AUTH_AUDIT_STATUS:iq,AUTH_AUDIT_TYPES:oq,HDB_PID_FILE:pH,DEFAULT_DATABASE_NAME:SH,LEGACY_CONFIG_PARAMS:LF};tg()});var tE=T((rse,Sg)=>{"use strict";var mg=require("minimist");Sg.exports=aq;function aq(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=pg(process.env),s=pg(mg(process.argv))):(r=process.env,s=mg(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(aq,"assignCMDENVVariables");function pg(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(pg,"objKeysToLowerCase")});var G=T((nse,cE)=>{"use strict";var oi=require("fs-extra"),{workerData:cq,threadId:uq}=require("worker_threads"),Js=require("path"),gg=require("yaml"),Ag=require("properties-reader"),ct=b(),Tg=tE(),lq=require("os"),{PACKAGE_ROOT:sE}=b(),{_assignPackageExport:_q}=require("../../index"),Aa={};for(let e in console)Aa[e]||(Aa[e]=console[e]);var Yt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Og={STDOUT:"stdOut",STDERR:"stdErr"},dq=Js.join(sE,"logs"),fq=Js.join(sE,"config/yaml/",ct.HDB_DEFAULT_CONFIG_FILE),Eq=1e4,zs,Ns,$t,Yu,Ku,Oa,Xi,ga;ga===void 0&&Ng();cE.exports={notify:Ig,fatal:wg,error:Na,warn:aE,info:Wu,debug:oE,trace:iE,setLogLevel:gq,log_level:$t,loggerWithTag:hq,suppressLogging:mq,initLogSettings:Ng,setupConsoleLogging:bg,logCustomLevel:Tq,closeLogFile:nE,getLogFilePath:()=>Oa,OUTPUTS:Og,AuthAuditLog:Nq};_q("logger",cE.exports);function Ng(e=!1){try{if(ga===void 0||e){nE();let t=Rq(),r=Tg(["ROOTPATH"]);try{ga=Ag(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!oi.pathExistsSync(Js.join(r.ROOTPATH,ct.HDB_CONFIG_FILE)))throw s}({level:$t,config_log_path:Ku,to_file:zs,to_stream:Ns}=Aq(r.ROOTPATH?Js.join(r.ROOTPATH,ct.HDB_CONFIG_FILE):ga.get("settings_path"))),Yu=ct.LOG_NAMES.HDB,Oa=Js.join(Ku,Yu)}}catch(t){if(ga=void 0,t.code===ct.NODE_ERROR_CODES.ENOENT){let r=Tg(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){$t=u;continue}if(c===ct.CONFIG_PARAMS.LOGGING_STDSTREAMS){Ns=u;continue}c===ct.CONFIG_PARAMS.LOGGING_FILE&&(zs=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=Oq();zs=zs===void 0?n:zs,zs=Rg(zs),Ns=Ns===void 0?i:Ns,Ns=Rg(Ns),$t=$t===void 0?s:$t,Ku=dq,Yu=ct.LOG_NAMES.INSTALL,Oa=Js.join(Ku,Yu);return}throw Na("Error initializing log settings"),Na(t),t}process.env.DEV_MODE&&(Ns=!0),bg()}a(Ng,"initLogSettings");var rE=!0;function bg(){Ji("error",Na),Ji("warn",aE),Ji("log",Wu),Ji("info",Wu),Ji("debug",oE),Ji("trace",iE)}a(bg,"setupConsoleLogging");function Ji(e,t){console[e]=function(...r){if(rE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Aa[e](...r)}}a(Ji,"logConsole");function hq(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Ig),fatal:r(wg),error:r(Na),warn:r(aE),info:r(Wu),debug:r(oE),trace:r(iE)};function r(s){return function(...n){return s(t,...n)}}}a(hq,"loggerWithTag");function mq(e){try{rE=!1,e()}finally{rE=!0}}a(mq,"suppressLogging");var pq=cq?.name?.replace(/ /g,"-")||"main";function Xs(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||pq+"/"+uq);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(Xs,"createLogRecord");function ba(e){zs&&yg(e),Ns&&process.stdout.write(e)}a(ba,"logStdOut");function Qu(e){zs&&yg(e),Ns&&process.stderr.write(e)}a(Qu,"logStdErr");function yg(e){Sq(),Xi?oi.appendFileSync(Xi,e):Aa.log(e)}a(yg,"logToFile");function nE(){try{oi.closeSync(Xi)}catch{}Xi=null}a(nE,"closeLogFile");function Sq(){if(!Xi){try{if(!Oa)debugger;Xi=oi.openSync(Oa,"a")}catch(e){Aa.error(e)}setTimeout(()=>{nE()},Eq).unref()}}a(Sq,"openLogFile");function Wu(...e){Yt[$t]<=Yt.info&&ba(Xs("info",e))}a(Wu,"info");function iE(...e){Yt[$t]<=Yt.trace&&ba(Xs("trace",e))}a(iE,"trace");function Na(...e){Yt[$t]<=Yt.error&&Qu(Xs("error",e))}a(Na,"error");function oE(...e){Yt[$t]<=Yt.debug&&ba(Xs("debug",e))}a(oE,"debug");function Ig(...e){Yt[$t]<=Yt.notify&&ba(Xs("notify",e))}a(Ig,"notify");function wg(...e){Yt[$t]<=Yt.fatal&&Qu(Xs("fatal",e))}a(wg,"fatal");function aE(...e){Yt[$t]<=Yt.warn&&Qu(Xs("warn",e))}a(aE,"warn");function Tq(e,t,...r){t===Og.STDERR?Qu(Xs(e,r)):ba(Xs(e,r))}a(Tq,"logCustomLevel");function Rq(){let e;try{e=lq.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Js.join(e,ct.HDB_HOME_DIR_NAME,ct.BOOT_PROPS_FILE_NAME);return oi.existsSync(t)||(t=Js.join(sE,"utility/hdb_boot_properties.file")),t}a(Rq,"getPropsFilePath");function gq(e){$t=e}a(gq,"setLogLevel");function Rg(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Rg,"autoCastBoolean");function Aq(e){try{if(e.includes("config/settings.js")){let o=Ag(e);return{level:o.get(ct.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Js.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=gg.parseDocument(oi.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(Aq,"getLogConfig");function Oq(){try{let e=gg.parseDocument(oi.readFileSync(fq,"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(Oq,"getDefaultConfig");function Nq(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(Nq,"AuthAuditLog")});var Lg=T((ose,Cg)=>{"use strict";var bq=require("util"),yq=require("path"),Iq=require("child_process"),wq=bq.promisify(Iq.execFile),Cq=1e3*1e3*10;Cg.exports={findPs:Lq};async function Lq(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await wq("ps",["wwxo",`pid,${r}`],{maxBuffer:Cq});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:yq.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(Lq,"findPs")});var ze=T((cse,Ug)=>{"use strict";var Dq="__dbis__",Uq="__txns__",Mq="__environment_name__",Pq="__dbi_defintion__",vq={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"},Bq=["__createdtime__","__updatedtime__"],Hq="\uFFFF",Dg={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Fq=Object.values(Dg);Ug.exports={AUDIT_STORE_NAME:Uq,INTERNAL_DBIS_NAME:Dq,DBI_DEFINITION_NAME:Pq,SEARCH_TYPES:vq,TIMESTAMP_NAMES:Bq,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Mq,TRANSACTIONS_DBI_NAMES_ENUM:Dg,TRANSACTIONS_DBIS:Fq,OVERFLOW_MARKER:Hq}});var dr=T((use,xg)=>{"use strict";var Mg=b(),Pg=ze(),vg={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},Bg=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Hg={500:Bg("There was an error processing your request."),400:"Invalid request"},qq=Hg[vg.INTERNAL_SERVER_ERROR],Gq={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.`},xq={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},kq={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"},Vq={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 ${Pg.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Pg.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"},$q={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Mg.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 ${Mg.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"},Fg={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"},Yq={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."},Kq={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`},Wq={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"},Qq={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},zq={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`},qg={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.`},Gg={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}`},Jq={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."},Xq={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},jq={...Fg,...kq,...Gq,...Yq,...Kq,...Wq,...Qq,...zq,...$q,...qg,...Gg,...Jq,...Xq,...xq};xg.exports={CHECK_LOGS_WRAPPER:Bg,HDB_ERROR_MSGS:jq,DEFAULT_ERROR_MSGS:Hg,DEFAULT_ERROR_RESP:qq,HTTP_STATUS_CODES:vg,LMDB_ERRORS_ENUM:Vq,AUTHENTICATION_ERROR_MSGS:Fg,VALIDATION_ERROR_MSGS:qg,ITC_ERRORS:Gg}});var j=T((_se,$g)=>{"use strict";var ji=dr(),Zq=G(),eG=b(),zu=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,kg),this.statusCode=s||ji.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(ji.DEFAULT_ERROR_MSGS[s]?ji.DEFAULT_ERROR_MSGS[s]:ji.DEFAULT_ERROR_MSGS[ji.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&&Zq[n](i)}},uE=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}},lE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function kg(e,t,r,s=eG.LOG_LEVELS.ERROR,n=null,i=!1){if(Vg(e))return e;let o=new zu(e,t,r,s,n);return i&&delete o.stack,o}a(kg,"handleHDBError");function Vg(e){return e.__proto__.constructor.name===zu.name}a(Vg,"isHDBError");$g.exports={isHDBError:Vg,handleHDBError:kg,ClientError:uE,ServerError:lE,hdb_errors:ji}});var Kg=T((fse,Yg)=>{"use strict";var tG={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))},rG="certificate.pem",sG="privateKey.pem",nG="ca.pem";Yg.exports={CERTIFICATE_VALUES:tG,CERTIFICATE_PEM_NAME:rG,PRIVATEKEY_PEM_NAME:sG,CA_PEM_NAME:nG}});var qe=T((Ese,Wg)=>{"use strict";var Kt=require("validate.js");Kt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Kt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Kt.validators.type.checks={Object:function(e){return Kt.isObject(e)&&!Kt.isArray(e)},Array:Kt.isArray,Integer:Kt.isInteger,Number:Kt.isNumber,String:Kt.isString,Date:Kt.isDate,Boolean:function(e){return typeof e=="boolean"}};Kt.validators.hasValidFileExt=function(e,t){return Kt.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};Wg.exports={validateObject:iG,validateObjectAsync:oG,validateBySchema:aG};function iG(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Kt(e,t,{format:"flat"});return r?new Error(r):null}a(iG,"validateObject");async function oG(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Kt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(oG,"validateObjectAsync");function aG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(aG,"validateBySchema")});var dE=T((pse,jg)=>{"use strict";var Xg=require("fs-extra"),ue=require("joi"),cG=require("os"),{boolean:Ie,string:bs,number:At,array:_E}=ue.types(),{totalmem:Qg}=require("os"),Zi=require("path"),uG=G(),Xu=$(),mse=Kg(),zg=b(),lG=qe(),Jg="log",_G="components",dG="Invalid logging.rotation.maxSize unit. Available units are G, M or K",fG="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",EG="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",hG="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",mG="rootPath config parameter is undefined",pG="clustering.enabled config parameter is undefined",ai=At.min(0).required(),ju=_E.items({host:bs.required(),port:ai}).empty(null),js;jg.exports={configValidator:SG,routesValidator:NG,route_constraints:ju};function SG(e){if(js=e.rootPath,Xu.isEmpty(js))throw mG;let t=Ie.required(),r=At.min(0).max(1e3).empty(null).default(OG),s=bs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Ju),n=bs.optional().empty(null),i=bs.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ue.string().empty(null).default(Ju),c=ue.custom(RG).empty(null).default(Ju),u=e.clustering?.enabled;if(Xu.isEmpty(u))throw pG;let _;return u===!0?_=ue.object({enabled:t,hubServer:ue.object({cluster:ue.object({name:ue.required().empty(null),network:ue.object({port:ai,routes:ju}).required()}).required(),leafNodes:ue.object({network:ue.object({port:ai}).required()}).required(),network:ue.object({port:ai}).required()}).required(),leafServer:ue.object({network:ue.object({port:ai,routes:ju}).required(),streams:ue.object({maxAge:At.min(120).allow(null).optional(),maxBytes:At.min(1).allow(null).optional(),maxMsgs:At.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ue.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Ie.optional(),databaseLevel:Ie.optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ie.required(),verify:Ie.optional()}),user:bs.optional().empty(null)}).required():_=ue.object({enabled:t,tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ie.required()})}).required(),ue.object({authentication:ue.object({authorizeLocal:Ie,cacheTTL:At.required(),enableSessions:Ie}),analytics:ue.object({aggregatePeriod:At}),componentsRoot:s.optional(),clustering:_,localStudio:ue.object({enabled:t}).required(),logging:ue.object({auditAuthEvents:ue.object({logFailed:Ie,logSuccessful:Ie}),file:Ie.required(),level:ue.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ue.object({enabled:Ie.optional(),compress:Ie.optional(),interval:bs.custom(AG).optional().empty(null),maxSize:bs.custom(gG).optional().empty(null),path:bs.optional().empty(null).default(Ju)}).required(),root:s,stdStreams:Ie.required(),auditLog:Ie.required()}).required(),operationsApi:ue.object({network:ue.object({cors:Ie.optional(),corsAccessList:_E.optional(),headersTimeout:At.min(1).optional(),keepAliveTimeout:At.min(1).optional(),port:At.optional().empty(null),securePort:At.optional().empty(null),timeout:At.min(1).optional()}).optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:bs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ue.object({network:ue.object({port:ai,securePort:ai}).required(),webSocket:Ie.optional(),requireAuthentication:Ie.optional()}),http:ue.object({compressionThreshold:At.optional(),cors:Ie.optional(),corsAccessList:_E.optional(),headersTimeout:At.min(1).optional(),port:At.min(0).optional().empty(null),securePort:At.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:ue.object({writeAsync:Ie.required(),overlappingSync:Ie.optional(),caching:Ie.optional(),compression:Ie.optional(),noReadAhead:Ie.optional(),path:c,prefetchWrites:Ie.optional()}).required(),ignoreScripts:Ie.optional(),tls:ue.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(SG,"configValidator");function TG(e){return Xg.existsSync(e)?null:`Specified path ${e} does not exist.`}a(TG,"doesPathExist");function RG(e,t){ue.assert(e,bs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=TG(e);if(r)return t.message(r)}a(RG,"validatePath");function gG(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(dG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(EG):e}a(gG,"validateRotationMaxSize");function AG(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(fG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(hG):e}a(AG,"validateRotationInterval");function OG(e,t){let r=t.state.path.join("."),s=cG.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Qg();return i=Math.round(Math.min(i,Qg())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),uG.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(OG,"setDefaultThreads");function Ju(e,t){if(!Xu.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Xu.isEmpty(js))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Zi.join(js,_G);case"logging.root":return Zi.join(js,Jg);case"clustering.leafServer.streams.path":return Zi.join(js,"clustering","leaf");case"storage.path":let s=Zi.join(js,zg.LEGACY_DATABASES_DIR_NAME);return Xg.existsSync(s)?s:Zi.join(js,zg.DATABASES_DIR_NAME);case"logging.rotation.path":return Zi.join(js,Jg);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Ju,"setDefaultRoot");function NG(e){let t=ue.object({routes:ju});return lG.validateBySchema({routes:e},t)}a(NG,"routesValidator")});var eo={};Qe(eo,{server:()=>ut});var Zg,ut,Ur=Te(()=>{Zg=require("../../index"),ut={};(0,Zg._assignPackageExport)("server",ut)});var Er=T((Rse,cA)=>{"use strict";var fr=b(),ht=$(),lt=G(),{configValidator:bG,routesValidator:eA}=dE(),Wt=require("fs-extra"),yG=require("yaml"),ts=require("path"),IG=require("is-number"),rA=require("properties-reader"),wG=require("lodash"),{handleHDBError:CG}=j(),{HTTP_STATUS_CODES:LG,HDB_ERROR_MSGS:Zu}=dr(),Tse=require("minimist"),{server:DG}=(Ur(),Z(eo)),{DATABASES_PARAM_CONFIG:ya,CONFIG_PARAMS:Zs,CONFIG_PARAM_MAP:rs}=fr,UG="Unable to get config value because config is uninitialized",MG="Config successfully initialized",PG="Error backing up config file",vG="Empty parameter sent to getConfigValue",sA=ts.join(fr.PACKAGE_ROOT,"config","yaml",fr.HDB_DEFAULT_CONFIG_FILE),BG="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",tA={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"},el,Ot,tl;cA.exports={createConfigFile:HG,getDefaultConfig:FG,getConfigValue:iA,initConfig:EE,flattenConfig:to,updateConfigValue:oA,updateConfigObject:GG,getConfiguration:VG,setConfiguration:$G,readConfigFile:mE,getClusteringRoutes:YG,initOldConfig:aA,getConfigFromFile:KG,getConfigFilePath:ci,addConfig:WG,deleteConfigFromFile:QG,getConfigObj:zG};function HG(e){let t=Ln(sA);el=to(t.toJSON());let r;for(let o in e){let c=rs[o.toLowerCase()];if(c===Zs.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=fE(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){lt.error(l)}}}r&&nA(t,r),hE(t);let s=t.toJSON();Ot=to(s);let n=t.getIn(["rootPath"]),i=ts.join(n,fr.HDB_CONFIG_FILE);Wt.createFileSync(i),Wt.writeFileSync(i,String(t)),lt.trace(`Config file written to ${i}`)}a(HG,"createConfigFile");function nA(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!ht.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(ya.TABLES))for(let i in s[n][ya.TABLES])for(let o in s[n][ya.TABLES][i]){let c=s[n][ya.TABLES][i][o],u=[Zs.DATABASES,n,ya.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=[Zs.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(nA,"setSchemasConfig");function FG(e){if(el===void 0){let r=Ln(sA);el=to(r.toJSON())}let t=rs[e.toLowerCase()];if(t!==void 0)return el[t.toLowerCase()]}a(FG,"getDefaultConfig");function iA(e){if(e==null){lt.error(vG);return}if(Ot===void 0){lt.trace(UG);return}let t=rs[e.toLowerCase()];if(t!==void 0)return Ot[t.toLowerCase()]}a(iA,"getConfigValue");function ci(e=ht.getPropsFilePath()){let t=ht.getEnvCliRootPath();return t?ts.join(t,fr.HDB_CONFIG_FILE):rA(e).get(fr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ci,"getConfigFilePath");function EE(e=!1){if(Ot===void 0||e){let t;if(!ht.noBootFile()){t=ht.getPropsFilePath();try{Wt.accessSync(t,Wt.constants.F_OK|Wt.constants.R_OK)}catch(i){throw lt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ci(t),s;if(r.includes("config/settings.js"))try{aA(r);return}catch(i){if(i.code!==fr.NODE_ERROR_CODES.ENOENT)throw i}try{s=Ln(r)}catch(i){if(i.code===fr.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}`)}qG(s,r),hE(s);let n=s.toJSON();if(DG.config=n,Ot=to(n),Ot.logging_rotation_rotate)for(let i in tA)Ot[i]&&lt.error(`Config ${tA[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);lt.trace(MG)}}a(EE,"initConfig");function qG(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ts.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ts.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ts.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"),Wt.writeFileSync(t,String(e)))}a(qG,"checkForUpdatedConfig");function hE(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=bG(t);if(r.error)throw Zu.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(hE,"validateConfig");function GG(e,t){Ot===void 0&&(Ot={});let r=rs[e.toLowerCase()];if(r===void 0){lt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ot[r.toLowerCase()]=t}a(GG,"updateConfigObject");function oA(e,t,r=void 0,s=!1,n=!1,i=!1){Ot===void 0&&EE();let o=iA(rs.hdb_root),c=ts.join(o,fr.HDB_CONFIG_FILE),u=Ln(c),_;if(r===void 0&&e.toLowerCase()===Zs.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=rs[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=fE(f,t);u.setIn([...E],h)}else for(let f in r){let E=rs[f.toLowerCase()];if(E===Zs.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=fr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=fE(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(A){lt.error(A)}}}_&&nA(u,_),hE(u);let l=u.getIn(["rootPath"]),d=ts.join(l,fr.HDB_CONFIG_FILE);s===!0&&xG(c,l),Wt.writeFileSync(d,String(u)),n&&(Ot=to(u.toJSON())),lt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(oA,"updateConfigValue");function xG(e,t){try{let r=ts.join(t,"backup",`${fr.HDB_CONFIG_FILE}.bak`);Wt.copySync(e,r),lt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){lt.error(PG),lt.error(r)}}a(xG,"backupConfigFile");var kG=["databases"];function to(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)),tl=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])&&!kG.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;!Zs[u.toUpperCase()]&&rs[u]&&(n[rs[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(to,"flattenConfig");function fE(e,t){if(e===Zs.CLUSTERING_NODENAME||e===Zs.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(IG(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ht.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 ht.autoCast(t)}a(fE,"castConfigValue");function VG(){let e=ht.getPropsFilePath(),t=ci(e);return Ln(t).toJSON()}a(VG,"getConfiguration");async function $G(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return oA(void 0,void 0,n,!0),BG}catch(i){throw typeof i=="string"||i instanceof String?CG(i,i,LG.BAD_REQUEST,void 0,void 0,!0):i}}a($G,"setConfiguration");function mE(){let e=ht.getPropsFilePath();try{Wt.accessSync(e,Wt.constants.F_OK|Wt.constants.R_OK)}catch(s){if(!ht.noBootFile())throw lt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ci(e);return Ln(t).toJSON()}a(mE,"readConfigFile");function Ln(e){return yG.parseDocument(Wt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Ln,"parseYamlDoc");function YG(){let e=mE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ht.isEmptyOrZeroLength(t)?[]:t;let r=eA(t);if(r)throw Zu.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ht.isEmptyOrZeroLength(s)?[]:s;let n=eA(s);if(n)throw Zu.CONFIG_VALIDATION(n.message);if(!ht.isEmptyOrZeroLength(s)&&!ht.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!ht.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Zu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(YG,"getClusteringRoutes");function aA(e){let t=rA(e);Ot={};for(let r in rs){let s=t.get(r.toUpperCase());if(ht.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=rs[r].toLowerCase();n===Zs.LOGGING_ROOT?Ot[n]=ts.dirname(s):Ot[n]=s}return Ot}a(aA,"initOldConfig");function KG(e){let t=mE();return wG.get(t,e.replaceAll("_","."))}a(KG,"getConfigFromFile");async function WG(e,t){let r=Ln(ci());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Wt.writeFile(ci(),String(r))}a(WG,"addConfig");function QG(e){let t=ci(ht.getPropsFilePath()),r=Ln(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=ts.join(s,fr.HDB_CONFIG_FILE);Wt.writeFileSync(n,String(r))}a(QG,"deleteConfigFromFile");function zG(){return tl||(EE(),tl)}a(zG,"getConfigObj")});var X=T((Ase,_A)=>{"use strict";var pE=require("fs-extra"),ss=require("path"),uA=require("os"),JG=require("properties-reader"),Ia=G(),ui=$(),ee=b(),rl=Er(),XG="Error initializing environment manager",sl="BOOT_PROPS_FILE_PATH",lA=!1,jG={[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},en={};_A.exports={BOOT_PROPS_FILE_PATH:sl,getHdbBasePath:ZG,setHdbBasePath:ex,get:tx,initSync:sx,setProperty:he,initTestEnvironment:nx};function ZG(){return en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(ZG,"getHdbBasePath");function ex(e){en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(ex,"setHdbBasePath");function tx(e){let t=rl.getConfigValue(e);return t===void 0?en[e]:t}a(tx,"get");function he(e,t){jG[e]&&(en[e]=t),rl.updateConfigObject(e,t)}a(he,"setProperty");function rx(){let e;try{e=ui.getPropsFilePath(),pE.accessSync(e,pE.constants.F_OK|pE.constants.R_OK),lA=!0;let t=JG(e);return en[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),en[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),en[sl]=e,!0}catch{return Ia.trace(`Environment manager found no properties file at ${e}`),!1}}a(rx,"doesPropFileExist");function sx(e=!1){try{(lA||rx()||ui.noBootFile())&&(rl.initConfig(e),en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=rl.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Ia.error(XG),Ia.error(t),console.error(t),process.exit(1)}}a(sx,"initSync");function nx(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=ss.join(__dirname,"../../","unitTests");en[sl]=ss.join(u,"hdb_boot_properties.file"),he(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,ss.join(u,"settings.test")),he(ee.HDB_SETTINGS_NAMES.INSTALL_USER,uA.userInfo()?uA.userInfo().username:void 0),he(ee.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,ss.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.HDB_SETTINGS_NAMES.CERT_KEY,ss.join(u,"envDir","utility","keys","certificate.pem")),he(ee.CONFIG_PARAMS.TLS_PRIVATEKEY,ss.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.CONFIG_PARAMS.TLS_CERTIFICATE,ss.join(u,"envDir","utility","keys","certificate.pem")),he(ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),he(ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,ss.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,ss.join(u,"envDir")),he(ee.CONFIG_PARAMS.STORAGE_PATH,ss.join(u,"envDir")),he(ee.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,ui.isEmpty(n)?!0:n),he(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,ui.isEmpty(n)?!0:n),he(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,ui.isEmpty(i)?!1:i),he(ee.CONFIG_PARAMS.HTTP_CORS,ui.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,ss.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),he(ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,ui.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 ${sl}. Please check your boot props and settings files`;Ia.fatal(r),Ia.error(t)}}a(nx,"initTestEnvironment")});var ve=T((Nse,SA)=>{"use strict";var Ua=b(),ix=$(),Qt=X(),Ma=require("path"),ox=require("minimist"),dA=require("fs-extra"),fA=require("lodash");Qt.initSync();var{CONFIG_PARAMS:Dn,DATABASES_PARAM_CONFIG:wa,SYSTEM_SCHEMA_NAME:nl}=Ua,Ca,La,Da;function EA(){if(Ca!==void 0)return Ca;if(Qt.getHdbBasePath()!==void 0)return Ca=Qt.get(Dn.STORAGE_PATH)||Ma.join(Qt.getHdbBasePath(),Ua.DATABASES_DIR_NAME),Ca}a(EA,"getBaseSchemaPath");function hA(){if(La!==void 0)return La;if(Qt.getHdbBasePath()!==void 0)return La=pA(nl),La}a(hA,"getSystemSchemaPath");function mA(){if(Da!==void 0)return Da;if(Qt.getHdbBasePath()!==void 0)return Da=Qt.get(Ua.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Ma.join(Qt.getHdbBasePath(),Ua.TRANSACTIONS_DIR_NAME),Da}a(mA,"getTransactionAuditStoreBasePath");function ax(e,t){let r=Qt.get(Dn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Ma.join(mA(),e.toString())}a(ax,"getTransactionAuditStorePath");function pA(e,t){e=e.toString(),t=t&&t.toString();let r=Qt.get(Ua.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Ma.join(EA(),e)}a(pA,"getSchemaPath");function cx(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,ox(process.argv));let s=r[Dn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!ix.isObject(s))throw o;i=s}for(let o of i){let c=o[nl];if(!c)continue;let u=Qt.get(Dn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[wa.PATH];if(_)return fA.set(u,[nl,wa.TABLES,t,wa.PATH],_),Qt.setProperty(Dn.DATABASES,u),_;let l=c?.[wa.PATH];if(l)return fA.set(u,[nl,wa.PATH],l),Qt.setProperty(Dn.DATABASES,u),l}}let n=r[Dn.STORAGE_PATH.toUpperCase()];if(n){if(!dA.pathExistsSync(n))throw new Error(n+" does not exist");let i=Ma.join(n,e);return dA.mkdirsSync(i),Qt.setProperty(Dn.STORAGE_PATH,n),i}return hA()}a(cx,"initSystemSchemaPaths");function ux(){Ca=void 0,La=void 0,Da=void 0}a(ux,"resetPaths");SA.exports={getBaseSchemaPath:EA,getSystemSchemaPath:hA,getTransactionAuditStorePath:ax,getTransactionAuditStoreBasePath:mA,getSchemaPath:pA,initSystemSchemaPaths:cx,resetPaths:ux}});var hr=T((wse,OA)=>{"use strict";var lx=dr().LMDB_ERRORS_ENUM,yse=require("lmdb"),_x=ze(),Ise=require("buffer").Buffer,{OVERFLOW_MARKER:TA,MAX_SEARCH_KEY_LENGTH:il}=_x,RA=["number","string","symbol","boolean","bigint"];function dx(e){if(e=e?.primaryStore||e,!e)throw new Error(lx.ENV_REQUIRED)}a(dx,"validateEnv");function fx(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(fx,"stringifyData");function Ex(e){return e instanceof Date?e.valueOf():e}a(Ex,"convertKeyValueToWrite");function hx(e){if(e==null)return;if(RA.includes(typeof e))return e.length>il?[e.slice(0,il)+TA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(RA.includes(typeof n))n.length>il?t.push(n.slice(0,il)+TA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(hx,"getIndexedValues");var ol=0,gA=0;function AA(){gA=Date.now()-performance.now()}a(AA,"adjustStartTime");AA();var mx=6e4;setInterval(AA,mx).unref();function px(){let e=performance.now()+gA;return e>ol?(ol=e,e):(ol+=488e-6,ol)}a(px,"getNextMonotonicTime");OA.exports={validateEnv:dx,stringifyData:fx,convertKeyValueToWrite:Ex,getNextMonotonicTime:px,getIndexedValues:hx}});var NA,ns,SE,Pa=Te(()=>{NA=require("events"),ns=class extends NA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new SE;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)}},SE=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 Mr(e){return e[Bt]||(e[Bt]=Object.create(null))}function ll(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 is.ClientError(`${c} must be a string, attempt to assign ${l}`);Mr(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 is.ClientError(`${c} must be a string, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new is.ClientError(`${c} must be a number, attempt to assign ${l}`);Mr(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 is.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Mr(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 is.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new is.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Mr(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 is.ClientError(`${c} must be a Date, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new is.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Mr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new is.ClientError(`${c} must be an object, attempt to assign ${l}`);Mr(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Bt];if(l&&c in l)return l[c];let d=this[Re]?.[c];if(d&&typeof d=="object"){let f=bA(d,o);if(f)return l||(l=this[Bt]=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[Bt];return u?.[o]!==void 0?u[o]:this[Re]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new is.ClientError("Can not add a property to a sealed table schema");Mr(this)[o]=c}),i("deleteProperty",function(o){Mr(this)[o]=void 0}),i("toJSON",function(){let o=this[Bt],c;for(let _ in o)c||(c=Object.assign({},this[Re])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Re])),Object.assign(c,this)),c||this[Re]}),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 bA(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[Re]=n}},ll(r,t)),new r(e)):new al(e);case Array:let s=new ul(e.length);s[Re]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=bA(o,t?.elements)),s[n]=o}return s}}function _l(e){let t=e[Bt],r;for(let n in t){r||(r=Object.assign({},e[Re]));let i=t[n];i&&typeof i=="object"&&(i=_l(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Re])),Object.assign(r,e)),r||e[Re]}function va(e){let t;if(e[Re]&&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=va(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Bt];for(let s in r){t||(t=Object.assign({},e[Re]));let n=r[s];n&&typeof n=="object"&&(n=va(n)),t[s]=n}return t?Object.freeze(t):e[Re]||(e.buffer?e:Object.freeze(e))}function cl(e){let t=e[Re];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[li]||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?.[Re]===n){if(cl(i))return!0}else return!0}}else{let r=e[Bt];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[Re]===i){if(cl(n))return!0}else return!0}else return!0}}return!1}var is,Bt,al,li,ul,dl=Te(()=>{os();is=M(j()),Bt=Symbol("own-data");a(Mr,"getChanges");a(ll,"assignTrackedAccessors");a(bA,"trackObject");al=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Re]=t}};ll(al,{});a(_l,"collapseData");a(va,"deepFreeze");a(cl,"hasChanges");li=Symbol.for("has-array-changes"),ul=class extends Array{static{a(this,"TrackedArray")}[li];constructor(t){super(t)}splice(...t){return this[li]=!0,super.splice(...t)}push(...t){return this[li]=!0,super.push(...t)}pop(){return this[li]=!0,super.pop()}unshift(...t){return this[li]=!0,super.unshift(...t)}shift(){return this[li]=!0,super.shift()}};ul.prototype.constructor=Array});function gx(){Rx=setInterval(function(){for(let e of TE)if(e.stale){let t=e[me]?.url;yA.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},Tx).unref()}var RE,yA,Sx,TE,_i,fl,Tx,Rx,gE=Te(()=>{RE=M(hr()),yA=M(G());os();Sx=100,TE=new Set,_i=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(),TE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(TE.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,RE.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 A=S();E?E.push?E.push(A):E=[E,A]:E=A}}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<Sx>>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=[]}},fl=class extends _i{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,RE.getNextMonotonicTime)())}getReadTxn(){}},Tx=3e4;a(gx,"startMonitoringTxns");gx()});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 _i;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 IA,di=Te(()=>{IA=require("../../index");os();gE();a(Ge,"transaction");(0,IA._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 OE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;if(l==null)throw new ro.ClientError("Invalid value provided for query, must be non-null value");l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(LA[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]=Is.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 ro.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 ro.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=NE(e);if(!S)throw new ro.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:A,value:I})=>new Promise((N,Y)=>setImmediate(()=>{try{N(I&&S(I)?A:CA.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 NE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),LA[t]||t){case mt.SEARCH_TYPES.EQUALS:case void 0:return ys(r,n=>n===s);case mt.SEARCH_TYPES.CONTAINS:return ys(r,n=>n?.toString().includes(s));case mt.SEARCH_TYPES.ENDS_WITH:case mt.SEARCH_TYPES._ENDS_WITH:return ys(r,n=>n?.toString().endsWith(s));case mt.SEARCH_TYPES.STARTS_WITH:case mt.SEARCH_TYPES._STARTS_WITH:return ys(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()),ys(r,n=>(0,Is.compareKeys)(n,s[0])>=0&&(0,Is.compareKeys)(n,s[1])<=0);case"gt":case mt.SEARCH_TYPES.GREATER_THAN:case mt.SEARCH_TYPES._GREATER_THAN:return ys(r,n=>(0,Is.compareKeys)(n,s)>0);case"ge":case mt.SEARCH_TYPES.GREATER_THAN_EQUAL:case mt.SEARCH_TYPES._GREATER_THAN_EQUAL:return ys(r,n=>(0,Is.compareKeys)(n,s)>=0);case mt.SEARCH_TYPES.LESS_THAN:case"lt":case mt.SEARCH_TYPES._LESS_THAN:return ys(r,n=>(0,Is.compareKeys)(n,s)<0);case"le":case mt.SEARCH_TYPES.LESS_THAN_EQUAL:case mt.SEARCH_TYPES._LESS_THAN_EQUAL:return ys(r,n=>(0,Is.compareKeys)(n,s)<=0);case"ne":return ys(r,n=>(0,Is.compareKeys)(n,s)!==0);default:throw new ro.ClientError(`Unknown query comparator "${t}"`)}}function ys(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 El(e){if(!e)return;let t=new AE,r,s,n,i,o,c=wA;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=Ax[_],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?Ox:wA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var ro,mt,Is,CA,Ax,LA,wA,Ox,AE,hl=Te(()=>{ro=M(j()),mt=M(ze()),Is=require("ordered-binary"),CA=require("lmdb"),Ax={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(OE,"idsForCondition");LA={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(NE,"filterByType");a(ys,"attributeComparator");wA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,Ox=/([^&|*=]+)([&|*=]*)/g;a(El,"parseQuery");AE=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 IE={};Qe(IE,{CONTEXT:()=>me,ID_PROPERTY:()=>we,IS_COLLECTION:()=>ws,RECORD_PROPERTY:()=>Re,Resource:()=>Nt,SAVE_UPDATES_PROPERTY:()=>BA,snake_case:()=>bx});function bx(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function DA(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 yE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Pr(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=_[we]??_[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[BA]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,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,o);if(E?.then)return E.then(h=>{if(!h)throw new ml(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new ml(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function vr(e,t){let r=new vA.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 bE(e){let t=e[Re];if(t){let r=e[Bt];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 UA(e){if(typeof e=="string")return t=>bE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=bE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=bE(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 MA,PA,vA,me,we,ws,BA,Re,Nx,Nt,ml,yE,os=Te(()=>{MA=require("crypto");Pa();PA=require("../../index"),vA=M(j());dl();di();hl();me=Symbol.for("context"),we=Symbol.for("primary-key"),ws=Symbol("is-collection"),BA=Symbol("save-updates"),Re=Symbol("stored-record"),Nx={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[we]=t;let s=r?.[me];this[me]=s!==void 0?s:r||null}static get=Pr(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 _=UA(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=Pr(function(t,r,s,n){if(Array.isArray(n)&&t[ws]){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):vr(t,"put")},{hasContent:!0,type:"update"});static delete=Pr(function(t,r,s,n){return t.delete?t.delete(r):vr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,MA.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):vr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Pr(function(t,r,s,n){return t.invalidate?t.invalidate(r):vr(t,"delete")},{hasContent:!1,type:"update"});static post=Pr(function(t,r,s,n){return t[we]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Pr(function(t,r,s,n){return t.connect?t.connect(n,r):vr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Pr(function(t,r,s,n){return t.subscribe?t.subscribe(r):vr(t,"subscribe")},{type:"read"});static publish=Pr(function(t,r,s,n){return t[we]!=null&&t.update?.(),t.publish?t.publish(n,r):vr(t,"publish")},{hasContent:!0,type:"create"});static search=Pr(function(t,r,s,n){let i=t.search?t.search(r):vr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=UA(o);return i.map(c)}return i},{type:"read"});static query=Pr(function(t,r,s,n){return t.search?t.search(n,r):vr(t,"search")},{hasContent:!0,type:"read"});static copy=Pr(function(t,r,s,n){return t.copy?t.copy(n,r):vr(t,"copy")},{type:"create"});static move=Pr(function(t,r,s,n){return t.move?t.move(n,r):vr(t,"move")},{type:"delete"});post(t){if(this[ws])return this.constructor.create(this[we],t,this[me]);vr(this,"post")}static isCollection(t){return t?.[ws]}static coerceId(t){return t}static parseQuery(t){return El(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&&Nx[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:DA(t,this)}}return DA(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(_=>_[we]===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[we],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[ws]=!0),n}subscribe(t){return new ns}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new ns}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[we]}getContext(){return this[me]}};Nt.prototype[me]=null;(0,PA._assignPackageExport)("Resource",Nt);a(bx,"snake_case");ml=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(DA,"pathToId");yE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Pr,"transactional");a(vr,"missingMethod");a(bE,"selectFromObject");a(UA,"transformForSelect")});var CE={};Qe(CE,{loadGQLSchema:()=>wx,start:()=>wE,startOnMainThread:()=>Ix});function wE({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(q){if(q.kind==="NonNullType"){let B=Q(q.type);return B.nullable=!1,B}if(q.kind==="ListType")return{type:"array",elements:Q(q.type)};let K={type:q.name?.value};return Object.defineProperty(K,"location",{value:q.loc.startToken}),K};a(Q,"getProperty");let A=S.name.value,I=[],N={table:null,database:null,properties:I};f.set(A,N);for(let q of S.directives){if(q.name.value==="table"){for(let w of q.arguments)N[w.name.value]=w.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=A),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,E.push(N)}if(q.name.value==="sealed"&&(N.sealed=!0),q.name.value==="export"){N.export=!0;for(let w of q.arguments)w.name.value==="name"&&(N.export={name:w.value.value})}}let Y=!1;for(let q of S.fields){let w=Q(q.type);w.name=q.name.value,I.push(w);for(let K of q.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)}}N.typeName=A,A==="Query"&&(h=N)}function p(S){let A=f.get(S.type);A?S.properties=A.properties:S.type==="array"?p(S.elements):yx.includes(S.type)||(0,HA.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 A of S.properties)p(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,pl.dirname)(s),S.tableClass):i.set((0,pl.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass));if(h)for(let S of h.properties){let A=f.get(S.type);if(!A)throw new Error(`${S.type} was not found as a Query export`);i.set((0,pl.dirname)(s)+"/"+S.name,A.tableClass)}}}var pl,HA,yx,Ix,wx,FA=Te(()=>{pl=require("path");fe();HA=M(Ze()),yx=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(wE,"start");Ix=wE,wx=wE({ensureTable:et}).handleFile});async function Sl(e){return Cx?(Ba||(Ba=Lx(Ux)),(await(await Ba).import(e)).namespace):import(e)}async function Lx(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ba=new Compartment({console,Math,Date,fetch:Dx,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,GA.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,qA.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Ba}function Dx(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 Ux(){return{Resource:Nt,tables:mr}}var qA,GA,Cx,Ba,LE=Te(()=>{os();fe();qA=require("fs/promises"),GA=require("path"),Cx=!1;a(Sl,"secureImport");a(Lx,"getCompartment");a(Dx,"secureOnlyFetch");a(Ux,"getGlobalVars")});var UE={};Qe(UE,{handleFile:()=>Mx});async function Mx(e,t,r,s){let n=new Map,i=(0,xA.pathToFileURL)(r).toString(),o=await Sl(i);u(o.default)&&s.set((0,DE.dirname)(t),o.default),c(o,(0,DE.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 xA,DE,kA=Te(()=>{xA=require("url");LE();DE=require("path");a(Mx,"handleFile")});var PE={};Qe(PE,{start:()=>Px});function Px({resources:e}){e.set("login",ME),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var ME,VA=Te(()=>{os();a(Px,"start");ME=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 BE=T((one,KA)=>{"use strict";var{Readable:vx}=require("stream"),Bx=1e4;KA.exports={streamAsJSON(e){return new vE({value:e})}};var vE=class extends vx{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),$A)}catch(n){yield $A(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);YA(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>Bx?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 YA(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 $A(e){return console.error(e),JSON.stringify(e.toString())}a($A,"handleError");function YA(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(YA,"when")});var iO=T((une,nO)=>{"use strict";var HE=require("recursive-iterator"),Hx=require("alasql"),FE=require("clone"),WA=$(),{handleHDBError:QA,hdb_errors:Fx}=j(),{HDB_ERROR_MSGS:zA,HTTP_STATUS_CODES:JA}=Fx,{getDatabases:qx}=(fe(),Z(Ce)),Gx=["DISTINCT_ARRAY"],XA=Symbol("validateTables"),qE=Symbol("validateTable"),cne=Symbol("getAllColumns"),jA=Symbol("validateAllColumns"),Tl=Symbol("findColumn"),ZA=Symbol("validateOrderBy"),Ha=Symbol("validateSegment"),GE=Symbol("validateColumn"),eO=Symbol("setColumnsForTable"),tO=Symbol("checkColumnsForAsterisk"),rO=Symbol("validateGroupBy"),sO=Symbol("hasColumns"),xE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[XA](),this[tO](),this[jA]()}[XA](){if(this[sO]()){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)})}}[sO](){let t=!1,r=new HE(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=qx();if(!r[t.databaseid])throw QA(new Error,zA.SCHEMA_NOT_FOUND(t.databaseid),JA.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw QA(new Error,zA.TABLE_NOT_FOUND(t.databaseid,t.tableid),JA.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=FE(n);i.table=FE(t),this.attributes.push(i)})}[Tl](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)}[tO](){let t=new HE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[eO](r.tableid)}[eO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new Hx.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[jA](){this[Ha](this.statement.columns,!1),this[Ha](this.statement.joins,!1),this[Ha](this.statement.where,!1),this[rO](this.statement.group,!1),this[Ha](this.statement.order,!0)}[Ha](t,r){if(!t)return;let s=new HE(t),n=[];for(let{node:i,path:o}of s)!WA.isEmpty(i)&&!WA.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[ZA](i):n.push(this[GE](i)));return n}[rO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&Gx.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=FE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Tl](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[Tl](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`}[ZA](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[GE](t)}[GE](t){let r=this[Tl](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]}};nO.exports=xE});var aO=T((_ne,oO)=>{"use strict";var kE=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")}};oO.exports=kE});var uO=T((fne,cO)=>{"use strict";var VE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};cO.exports=VE});var gO={};Qe(gO,{AUDIT_STORE_OPTIONS:()=>TO,createAuditEntry:()=>Al,openAuditStore:()=>gl,readAuditEntry:()=>pr,setAuditRetention:()=>xx,transactionKeyEncoder:()=>SO});function gl(e){let t=e.auditStore=e.openDB(EO.AUDIT_STORE_NAME,TO);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,mO.getWorkerIndex)()===0&&e.on("aftercommit",()=>{Fa||(Fa=setTimeout(()=>{if(Fa=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-$E})){if((n[0]&15)===KE){let i=pr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},$E/10).unref())}),t}function xx(e){clearTimeout(Fa),Fa=null,$E=e}function Al(e,t,r,s,n,i,o){let c=RO[i],u=1;s&&(s>1?so.setFloat64(0,s):Br.set(zE),u=9),f(0),f(t),d(r),so.setFloat64(u,e),u+=8,n?d(n):Br[u++]=0,Br[s?8:0]=c;let l=Br.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,no.writeKey)(E,Br,u);let p=u-h-1;p>127?p>16383?(QE.error("Key or username was too large for audit entry",E),u=h+1,Br[h]=0):(Br.copyWithin(h+2,h+1,u),so.setUint16(h,p|32768),u++):Br[h]=p}function f(E){E<128?Br[u++]=E:E<16384?(so.setUint16(u,E|32768),u+=2):E<1056964608?(so.setUint32(u,E|3221225472),u+=4):(Br[u]=255,so.setUint32(u+1,E),u+=5)}}function pr(e){try{let t=e.dataView||(e.dataView=new WE(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:RO[s&7],tableId:i,get recordId(){return fO(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?fO(e,l,d):void 0},getValue(f){return s&YE?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return QE.error("Reading audit entry error",e),{}}}function fO(e,t,r){let s=e.subarray(t,r);return(0,no.readKey)(s,0,r-t)}var no,Rl,EO,hO,mO,pO,QE,Br,so,SO,TO,$E,Fa,YE,lO,KE,_O,dO,RO,WE,io=Te(()=>{no=require("ordered-binary"),Rl=M(X()),EO=M(ze()),hO=M(b()),mO=M(Ze()),pO=M($());Ga();QE=M(G());(0,Rl.initSync)();Br=Buffer.alloc(1024),so=new DataView(Br.buffer,Br.byteOffset,1024),SO={writeKey(e,t,r){return e===qa?(t.set(qa,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,no.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,no.readKey)(e,t,r)}},TO={encoding:"binary",keyEncoder:SO},$E=(0,pO.convertToMS)((0,Rl.get)(hO.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Fa=null;a(gl,"openAuditStore");a(xx,"setAuditRetention");YE=16,lO=1,KE=2,_O=3,dO=4,RO={put:lO|YE,[lO]:"put",delete:KE,[KE]:"delete",message:_O|YE,[_O]:"message",invalidate:dO,[dO]:"invalidate"};a(Al,"createAuditEntry");a(pr,"readAuditEntry");WE=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(fO,"readKeySafely")});var IO={};Qe(IO,{HAS_EXPIRATION:()=>th,LAST_TIMESTAMP_PLACEHOLDER:()=>qa,LOCAL_TIMESTAMP:()=>kx,METADATA:()=>xa,NO_TIMESTAMP:()=>JE,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>zE,RecordEncoder:()=>eh,TIMESTAMP_ASSIGN_LAST:()=>$x,TIMESTAMP_ASSIGN_NEW:()=>NO,TIMESTAMP_ASSIGN_PREVIOUS:()=>bO,TIMESTAMP_PLACEHOLDER:()=>Ol,TIMESTAMP_RECORD_PREVIOUS:()=>XE,getUpdateRecord:()=>rh,handleLocalTimeForGets:()=>yl});function yO(){return ao[0]=ao[0]^64,Vx.getFloat64(0)}function yl(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[xa];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?.[xa]>=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?o:o.map(c=>{let u=c.value,_=u[xa];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=Yx.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(ao,0,d),l.timestampBytes=null,l.localTime=yO())}}}}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,fi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<fi.length;u++){let _=fi[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&fi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function rh(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?oo=i?.localTime?XE|bO:JE:oo=u?i?.localTime?XE|16384:NO|16384:JE,l>0&&(c|=th),bl=c,ZE=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:oo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(e.cache&&S.result!==!1){let A=e.cache.get(s);A&&(c>=0?A.metadataFlags=c:A.metadataFlags>=0&&(A.metadataFlags=void 0),(l||!A.expiresAt)&&(A.expiresAt=l),h.instructedWrite&&(A.localTime||(A.localTime=1),A.timestampBytes=jE,A.timestampOffset=jE.start||0))}if(u){let A=_?.user?.username;if(E&&(Nl=e.encoder.encode(E)),f&&i?.localTime){let I=i?.localTime,N=r.get(I);if(N){let Y=pr(N).previousLocalTime;return r.put(I,Al(o,t,s,Y,A,d,Nl),{ifVersion:p}),S}}r.put(qa,Al(o,t,s,i?.localTime?1:0,A,d,Nl),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var AO,OO,Ol,qa,zE,kx,xa,ao,Vx,JE,NO,$x,bO,XE,th,jE,Nl,oo,bl,ZE,eh,Yx,fi,Ga=Te(()=>{AO=require("msgpackr");io();OO=M(G()),Ol=new Uint8Array([1,1,1,1,4,64,0,0]),qa=new Uint8Array([1,1,1,1,1,0,0,0]),zE=new Uint8Array([1,1,1,1,3,64,0,0]),kx=Symbol("local-timestamp"),xa=Symbol("metadata"),ao=new Uint8Array(8),Vx=new DataView(ao.buffer,0,8),JE=0,NO=0,$x=1,bO=3,XE=4,th=16,oo=0,bl=-1,ZE=0,eh=class extends AO.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(oo||bl>=0){let i=0,o=oo;o&&(i+=8,oo=0);let c=bl,u=ZE;c>=0&&(i+=2,bl=-1,u&&(i+=8,ZE=0));let _=jE=r.call(this,s,n|2048|i);Nl=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(Ol[4]=o,Ol[5]=o>>8,_.set(Ol,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(ao,0,c),c+=8;else for(let d=0;d<8;d++)ao[d]=t[c++];u=yO(),i=t[c]}let _;i<32&&(o=i,c+=2,o&th&&(_=(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,[xa]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(yO,"getTimestamp");Yx=Map.prototype.get;a(yl,"handleLocalTimeForGets");fi=[];setInterval(()=>{for(let e=0;e<fi.length;e++){let t=fi[e].deref();!t||t.isDone||t.isCommitted?fi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&OO.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(rh,"getUpdateRecord")});var Il=T((Tne,wO)=>{"use strict";var nh=X(),ih=b(),{RecordEncoder:Kx}=(Ga(),Z(IO));nh.initSync();var Wx=nh.get(ih.CONFIG_PARAMS.STORAGE_COMPRESSION),Qx=nh.get(ih.CONFIG_PARAMS.STORAGE_CACHING)!==!1,zx=ih.UPDATES_PROPERTY,sh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=Wx&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Qx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:Kx},this.alwaysLazyProperty=s=>s===zx)}};wO.exports=sh});var Cl=T((gne,LO)=>{"use strict";var co=X(),ka=b();co.initSync();var Jx=co.get(ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||co.get(ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||co.get(ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",CO=co.get(ka.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),Xx=co.get(ka.CONFIG_PARAMS.STORAGE_NOREADAHEAD),wl=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=Jx,this.noFSAccess=!0,CO!==void 0&&(this.overlappingSync=CO),this.noReadAhead=Xx}};LO.exports=wl;wl.MAX_DBS=1e4});var Ue=T((One,GO)=>{"use strict";var ah=require("lmdb"),as=require("fs-extra"),Sr=require("path"),Ll=hr(),MO=G(),zt=dr().LMDB_ERRORS_ENUM,Dl=uO(),ch=Il(),PO=Cl(),Un=ze(),DO=b(),{table:jx,resetDatabases:Zx}=(fe(),Z(Ce)),UO=X(),cs=Un.INTERNAL_DBIS_NAME,vO=Un.DBI_DEFINITION_NAME,ek="data.mdb",tk="lock.mdb",Va=".mdb",rk="-lock",oh=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Hr(t,r),this.key_type=this.dbi[Un.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Un.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new ah.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ul(e,t){if(e===void 0)throw new Error(zt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(zt.ENV_NAME_REQUIRED)}a(Ul,"pathEnvNameValidation");async function uh(e,t,r=!0){try{await as.access(e)}catch(s){throw s.code==="ENOENT"?new Error(zt.INVALID_BASE_PATH):s}try{let s=Sr.join(e,t+Va);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,ek),as.constants.R_OK|as.constants.F_OK),Sr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(zt.INVALID_ENVIRONMENT)}else throw new Error(zt.INVALID_ENVIRONMENT);throw s}}a(uh,"validateEnvironmentPath");function Ml(e,t){if(Ll.validateEnv(e),t===void 0)throw new Error(zt.DBI_NAME_REQUIRED)}a(Ml,"validateEnvDBIName");async function sk(e,t,r=!1,s=!1){Ul(e,t);let n=Sr.basename(e);t=t.toString();let i=UO.get(DO.CONFIG_PARAMS.DATABASES);i||UO.setProperty(DO.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await uh(e,t,s),BO(e,t,r)}catch(o){if(o.message===zt.INVALID_ENVIRONMENT){let c=Sr.join(e,t);await as.mkdirp(s?c:e);let u=new PO(s?c:c+Va,!1),_=ah.open(u);_.dbis=Object.create(null);let l=new ch(!1);_.openDB(cs,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=lh(e,t,r);return _[Un.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(sk,"createEnvironment");async function nk(e,t,r,s=!0){Ul(e,t),t=t.toString();let n=Sr.join(e,t);return jx({table:t,database:Sr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(nk,"copyEnvironment");async function BO(e,t,r=!1){Ul(e,t),t=t.toString();let s=lh(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 uh(e,t),i=Sr.join(e,t+Va),o=n!=i,c=new PO(n,o),u=ah.open(c);u.dbis=Object.create(null);let _=FO(u);for(let l=0;l<_.length;l++)Hr(u,_[l]);return u[Un.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(BO,"openEnvironment");async function ik(e,t,r=!1){Ul(e,t),t=t.toString();let s=Sr.join(e,t+Va),n=await uh(e,t);if(global.lmdb_map!==void 0){let i=lh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await HO(o),delete global.lmdb_map[i]}}await as.remove(n),await as.remove(n===s?n+rk:Sr.join(Sr.dirname(n),tk))}a(ik,"deleteEnvironment");async function HO(e){Ll.validateEnv(e);let t=e[Un.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(HO,"closeEnvironment");function lh(e,t,r=!1){let n=`${Sr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(lh,"getCachedEnvironmentName");function ok(e){Ll.validateEnv(e);let t=Object.create(null),r=Hr(e,cs);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==cs)try{t[s]=Object.assign(new Dl,n)}catch{MO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(ok,"listDBIDefinitions");function FO(e){Ll.validateEnv(e);let t=[],r=Hr(e,cs);for(let{key:s}of r.getRange({start:!1}))s!==cs&&t.push(s);return t}a(FO,"listDBIs");function ak(e,t){let s=Hr(e,cs).getEntry(t),n=new Dl;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{MO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(ak,"getDBIDefinition");function qO(e,t,r,s=!r){if(Ml(e,t),t=t.toString(),t===cs)throw new Error(zt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Hr(e,t)}catch(n){if(n.message===zt.DBI_DOES_NOT_EXIST){let i=new ch(r,s===!0),o=e.openDB(t,i),c=new Dl(r===!0,s);return o[vO]=c,Hr(e,cs).putSync(t,c),e.dbis[t]=o,o}throw n}}a(qO,"createDBI");function Hr(e,t){if(Ml(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==cs?r=ak(e,t):r=new Dl,r===void 0)throw new Error(zt.DBI_DOES_NOT_EXIST);let s;try{let n=new ch(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(zt.DBI_DOES_NOT_EXIST):n}return s[vO]=r,e.dbis[t]=s,s}a(Hr,"openDBI");function ck(e,t){Ml(e,t),t=t.toString();let r=Hr(e,t),s=r.getStats();return r[Un.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(ck,"statDBI");async function uk(e,t){try{let r=Sr.join(e,t+Va);return(await as.stat(r)).size}catch{throw new Error(zt.INVALID_ENVIRONMENT)}}a(uk,"environmentDataSize");function lk(e,t){if(Ml(e,t),t=t.toString(),t===cs)throw new Error(zt.CANNOT_DROP_INTERNAL_DBIS_NAME);Hr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Hr(e,cs).removeSync(t)}a(lk,"dropDBI");function _k(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Hr(e,i)}catch(o){if(o.message===zt.DBI_DOES_NOT_EXIST)qO(e,i,i!==t,i===t),s=!0;else throw o}}s&&Zx()}a(_k,"initializeDBIs");GO.exports={openDBI:Hr,openEnvironment:BO,createEnvironment:sk,listDBIs:FO,listDBIDefinitions:ok,createDBI:qO,dropDBI:lk,statDBI:ck,deleteEnvironment:ik,initializeDBIs:_k,TransactionCursor:oh,environmentDataSize:uk,copyEnvironment:nk,closeEnvironment:HO}});var kO=T((bne,xO)=>{"use strict";var _h=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};xO.exports=_h});var $O=T((Ine,VO)=>{"use strict";var dh=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}};VO.exports=dh});var KO=T((Cne,YO)=>{"use strict";var fh=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};YO.exports=fh});var uo=T((Pne,zO)=>{"use strict";var dk=Ue(),fk=kO(),Ek=$O(),hk=KO(),Cs=hr(),$a=dr().LMDB_ERRORS_ENUM,mk=ze(),tn=b(),pk=$(),Sk=require("uuid"),Dne=require("lmdb"),{handleHDBError:Tk,hdb_errors:Rk}=j(),{OVERFLOW_MARKER:Une,MAX_SEARCH_KEY_LENGTH:Mne}=mk,WO=X();WO.initSync();var Pl=WO.get(tn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Eh=tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ei=tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function gk(e,t,r,s,n=Cs.getNextMonotonicTime()){Sh(e,t,r,s),hh(e,t,r);let i=new fk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];QO(_,!0,n);let l=Ak(e,t,r,_),d=_[t];o.push(l),c.push(d)}return mh(o,c,s,i,n)}a(gk,"insertRecords");function Ak(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){Pl&&_.prefetch(u.map(l=>({key:l,value:n})),vl);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}Pl&&e.dbis[t].prefetch([n],vl),e.dbis[t].put(n,s,s[Ei])})}a(Ak,"insertRecord");function Ok(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Ok,"removeSkippedRecords");function QO(e,t,r){let s=r>0;(s||!Number.isInteger(e[Ei]))&&(e[Ei]=r||(r=Cs.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Eh]))&&(e[Eh]=r||Cs.getNextMonotonicTime()):delete e[Eh]}a(QO,"setTimestamps");function hh(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),dk.initializeDBIs(e,t,r)}a(hh,"initializeTransaction");async function Nk(e,t,r,s,n=Cs.getNextMonotonicTime()){Sh(e,t,r,s),hh(e,t,r);let i=new Ek,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=ph(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return mh(c,u,s,i,n,o)}a(Nk,"updateRecords");async function bk(e,t,r,s,n=Cs.getNextMonotonicTime()){try{Sh(e,t,r,s)}catch(u){throw Tk(u,u.message,Rk.HTTP_STATUS_CODES.BAD_REQUEST)}hh(e,t,r);let i=new hk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;pk.isEmpty(_[t])?(l=Sk.v4(),_[t]=l):l=_[t];let d=ph(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return mh(o,c,s,i,n)}a(bk,"upsertRecords");async function mh(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(),Ok(r,i),s}a(mh,"finalizeWrite");function ph(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(QO(r,!l,o),Number.isInteger(r[Ei])&&_[Ei]>r[Ei])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 A=_[h];if(typeof p=="function"){let N=p([[_]]);Array.isArray(N)&&(p=N[0][tn.FUNC_VAL],r[h]=p)}if(p===A)continue;let I=Cs.getIndexedValues(A);if(I){Pl&&S.prefetch(I.map(N=>({key:N,value:s})),vl);for(let N=0,Y=I.length;N<Y;N++)S.remove(I[N],s)}if(I=Cs.getIndexedValues(p),I){Pl&&S.prefetch(I.map(N=>({key:N,value:s})),vl);for(let N=0,Y=I.length;N<Y;N++)S.put(I[N],s)}}let E=Object.assign({},_,r);c.put(s,E,E[Ei])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:ph(e,t,r,s,n,i,o))}a(ph,"updateUpsertRecord");function yk(e,t,r){if(Cs.validateEnv(e),t===void 0)throw new Error($a.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error($a.WRITE_ATTRIBUTES_REQUIRED):new Error($a.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(yk,"validateBasic");function Sh(e,t,r,s){if(yk(e,t,r),!Array.isArray(s))throw s===void 0?new Error($a.RECORDS_REQUIRED):new Error($a.RECORDS_MUST_BE_ARRAY)}a(Sh,"validateWrite");function vl(){}a(vl,"noop");zO.exports={insertRecords:gk,updateRecords:Nk,upsertRecords:bk}});var hi=T((Bne,Ik)=>{Ik.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((Hne,jO)=>{"use strict";var XO=$(),JO=b(),lo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,rn=require("joi"),Mn={schema_format:{pattern:lo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},wk=rn.alternatives(rn.string().min(1).max(Mn.schema_length.maximum).pattern(lo).messages({"string.pattern.base":"{:#label} "+Mn.schema_format.message}),rn.number()).required(),Ck=rn.alternatives(rn.string().min(1).max(Mn.schema_length.maximum).pattern(lo).messages({"string.pattern.base":"{:#label} "+Mn.schema_format.message}),rn.number()),Lk=rn.alternatives(rn.string().min(1).max(Mn.schema_length.maximum).pattern(lo).messages({"string.pattern.base":"{:#label} "+Mn.schema_format.message}),rn.number()).required();function Dk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Mn.schema_length.maximum?`'${e}' maximum of 250 characters`:lo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Dk,"checkValidTable");function Uk(e,t){return XO.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(Uk,"validateSchemaExists");function Mk(e,t){let r=t.state.ancestors[0].schema;return XO.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Mk,"validateTableExists");function Pk(e,t){return e.toLowerCase()===JO.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${JO.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Pk,"validateSchemaName");jO.exports={common_validators:Mn,schema_regex:lo,hdb_schema_table:wk,validateSchemaExists:Uk,validateTableExists:Mk,validateSchemaName:Pk,checkValidTable:Dk,hdb_database:Ck,hdb_table:Lk}});var Bl=T((qne,ZO)=>{var{common_validators:Ds}=Ls(),Ka=qe(),Ya="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 Wa(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(Wa,"makeAttributesStrings");function vk(e){return e=Wa(e),tt.table.presence=!1,tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ka.validateObject(e,tt)}a(vk,"schema_object");function Bk(e){return e=Wa(e),tt.table.presence={message:Ya},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ka.validateObject(e,tt)}a(Bk,"table_object");function Hk(e){return e=Wa(e),tt.table.presence={message:Ya},tt.attribute.presence=!1,Ka.validateObject(e,tt)}a(Hk,"create_table_object");function Fk(e){return e=Wa(e),tt.table.presence={message:Ya},tt.attribute.presence={message:Ya},tt.hash_attribute.presence=!1,Ka.validateObject(e,tt)}a(Fk,"attribute_object");function qk(e){return e=Wa(e),tt.table.presence={message:Ya},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ka.validateObject(e,tt)}a(qk,"describe_table");function Gk(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(Gk,"validateTableResidence");ZO.exports={schema_object:vk,create_table_object:Hk,table_object:Bk,attribute_object:Fk,describe_table:qk,validateTableResidence:Gk}});var tN=T((xne,eN)=>{"use strict";var xk=require("uuid"),Th=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||xk.v4(),this.schema_table=`${this.schema}.${this.table}`}};eN.exports=Th});var Hl=T((Vne,rN)=>{"use strict";var kk=tN(),Rh=class extends kk{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}};rN.exports=Rh});var nN=T((Yne,sN)=>{"use strict";sN.exports=$k;var Vk="inserted";function $k(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Vk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a($k,"returnObject")});var Fl=T((Wne,uN)=>{"use strict";var Yk=b(),gh=Ue(),Kk=uo(),{getSystemSchemaPath:Wk,getSchemaPath:Qk}=ve(),zk=hi(),Jk=Bl(),Xk=Hl(),jk=nN(),{handleHDBError:iN,hdb_errors:aN}=j(),oN=$(),{HTTP_STATUS_CODES:Zk}=aN,Ah=zk.hdb_attribute,cN=[];for(let e=0;e<Ah.attributes.length;e++)cN.push(Ah.attributes[e].attribute);var eV="inserted";uN.exports=tV;async function tV(e){let t=Jk.attribute_object(e);if(t)throw iN(new Error,t.message,aN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&oN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw iN(new Error,r,Zk.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=oN.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 Xk(e.schema,e.table,e.attribute,e.id);try{let i=await gh.openEnvironment(Qk(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}`);gh.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await gh.openEnvironment(Wk(),Yk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Kk.insertRecords(o,Ah.hash_attribute,cN,[n]);return jk(eV,c,{records:[n]},u)}catch(i){throw i}}a(tV,"lmdbCreateAttribute")});var Nh=T((zne,_N)=>{var{hdb_table:rV,hdb_database:lN}=Ls(),sV=qe(),Oh=require("joi"),nV={undefined:"undefined",null:"null"},iV=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||nV[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"),oV=Oh.object({database:lN,schema:lN,table:rV,records:Oh.array().items(Oh.object().custom(iV)).required()});_N.exports=function(e){return sV.validateBySchema(e,oV)}});var Qa=T((jne,fN)=>{"use strict";var sn=$(),dN=G(),Xne=Nh(),{getDatabases:aV}=(fe(),Z(Ce)),{ClientError:mi}=j();fN.exports=cV;function cV(e){if(sn.isEmpty(e))throw new mi("invalid update parameters defined.");if(sn.isEmptyOrZeroLength(e.schema))throw new mi("invalid schema specified.");if(sn.isEmptyOrZeroLength(e.table))throw new mi("invalid table specified.");if(!Array.isArray(e.records))throw new mi("records must be an array");let t=aV()[e.schema]?.[e.table];if(sn.isEmpty(t))throw new mi(`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 dN.error("a valid hash attribute must be provided with update record:",o),new mi("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 dN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new mi(`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(cV,"insertUpdateValidate")});var za=T((eie,EN)=>{"use strict";var uV=b().OPERATIONS_ENUM,bh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=uV.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};EN.exports=bh});var Za=T((sie,hN)=>{"use strict";var rie=za(),ql=b(),Ih=$(),yh=G(),lV=require("uuid"),{handleHDBError:Ja,hdb_errors:_V}=j(),{HDB_ERROR_MSGS:Xa,HTTP_STATUS_CODES:ja}=_V;hN.exports=dV;function dV(e,t,r){for(let n=0;n<t.length;n++)fV(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];EV(i,r,e.operation)}}a(dV,"processRows");function fV(e){if(Buffer.byteLength(String(e))>ql.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ja(new Error,Xa.ATTR_NAME_LENGTH_ERR(e),ja.BAD_REQUEST,void 0,void 0,!0);if(Ih.isEmptyOrZeroLength(e)||Ih.isEmpty(e.trim()))throw Ja(new Error,Xa.ATTR_NAME_NULLISH_ERR,ja.BAD_REQUEST,void 0,void 0,!0)}a(fV,"validateAttribute");function EV(e,t,r){if(!e.hasOwnProperty(t)||Ih.isEmptyOrZeroLength(e[t])){if(r===ql.OPERATIONS_ENUM.INSERT||r===ql.OPERATIONS_ENUM.UPSERT){e[t]=lV.v4();return}throw yh.error("Update transaction aborted due to record with no hash value:",e),Ja(new Error,Xa.RECORD_MISSING_HASH_ERR,ja.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>ql.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw yh.error(e),Ja(new Error,Xa.HASH_VAL_LENGTH_ERR,ja.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw yh.error(e),Ja(new Error,Xa.INVALID_FORWARD_SLASH_IN_HASH_ERR,ja.BAD_REQUEST,void 0,void 0,!0)}a(EV,"validateHash")});var pN=T((iie,mN)=>{"use strict";var wh=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};mN.exports=wh});var RN=T((aie,TN)=>{"use strict";var Ch=Ue(),hV=G(),SN=dr().LMDB_ERRORS_ENUM;TN.exports=mV;async function mV(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 Ch.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==SN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Ch.closeEnvironment(global.lmdb_map[s]),await Ch.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==SN.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){hV.error(t)}}a(mV,"cleanLMDBMap")});var nn=T((uie,NN)=>{"use strict";var ec=require("crypto"),pV=X(),{CONFIG_PARAMS:SV}=b(),AN="aes-256-cbc",TV=32,RV=16,Lh=64,ON=32,gV=Lh+ON,gN=new Map;NN.exports={encrypt:AV,decrypt:OV,createNatsTableStreamName:NV};function AV(e){let t=ec.randomBytes(TV),r=ec.randomBytes(RV),s=ec.createCipheriv(AN,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(AV,"encrypt");function OV(e){let t=e.substr(0,Lh),r=e.substr(Lh,ON),s=e.substr(gV,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=ec.createDecipheriv(AN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(OV,"decrypt");function NV(e,t){let r=pV.get(SV.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=gN.get(r);return s||(s=ec.createHash("md5").update(r).digest("hex"),gN.set(r,s)),s}a(NV,"createNatsTableStreamName")});var pi=T((die,yN)=>{"use strict";var _ie=Fr(),Gl=G(),bN=Bl(),bV=nn(),xl=$(),{handleHDBError:kl,hdb_errors:yV}=j(),{HDB_ERROR_MSGS:Vl,HTTP_STATUS_CODES:Dh}=yV,IV=X();IV.initSync();var{getDatabases:Uh}=(fe(),Z(Ce));yN.exports={describeAll:wV,describeTable:$l,describeSchema:CV};async function wV(e){try{let t=xl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Uh(),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 $l({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 $l({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){Gl.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 Gl.error("Got an error in describeAll"),Gl.error(t),kl(new Error,Vl.DESCRIBE_ALL_ERR)}}a(wV,"describeAll");async function $l(e,t){xl.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=bN.describe_table(e);if(i)throw i;let c=Uh()[r];if(!c)throw kl(new Error,Vl.SCHEMA_NOT_FOUND(e.schema),Dh.NOT_FOUND);let u=c[s];if(!u)throw kl(new Error,Vl.TABLE_NOT_FOUND(e.schema,e.table),Dh.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=bV.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){Gl.warn(`unable to stat table dbi due to ${f}`)}return d}a($l,"descTable");async function CV(e){xl.transformReq(e);let t=bN.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=Uh()[s];if(!i)throw kl(new Error,Vl.SCHEMA_NOT_FOUND(e.schema),Dh.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),xl.isEmpty(u)||u.describe){let _=await $l({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(CV,"describeSchema")});var Pn=T((mie,DN)=>{var LV=hi(),{callbackify:wN,promisify:DV}=require("util"),{getDatabases:CN}=(fe(),Z(Ce));DN.exports={setSchemaDataToGlobal:IN,getTableSchema:UV,getSystemSchema:MV,setSchemaDataToGlobalAsync:DV(IN)};var LN=pi(),Eie=wN(LN.describeAll),hie=wN(LN.describeTable);function IN(e){global.hdb_schema=CN(),e&&e()}a(IN,"setSchemaDataToGlobal");function UV(e,t,r){let s=CN()[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 MV(){return LV}a(MV,"getSystemSchema")});var qr=T((Sie,vN)=>{"use strict";var Kl=Nh(),bt=$(),PV=require("util"),Wl=us(),vV=Pn(),UN=G(),{handleHDBError:Si,hdb_errors:BV}=j(),{HTTP_STATUS_CODES:Ti}=BV,HV=PV.promisify(vV.getTableSchema),FV="updated",MN="inserted",PN="upserted";vN.exports={insert:GV,update:xV,upsert:kV,validation:qV,flush:VV};async function qV(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 HV(e.schema,e.table),r=Kl(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 UN.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 UN.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(qV,"validation");async function GV(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Kl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Wl.createRecords(e);return Yl(MN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(GV,"insertData");async function xV(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Kl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Wl.updateRecords(e);return bt.isEmpty(s.existing_rows)?Yl(FV,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Yl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(xV,"updateData");async function kV(e){if(e.operation!=="upsert")throw Si(new Error,"invalid operation, must be upsert",Ti.INTERNAL_SERVER_ERROR);let t=Kl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Wl.upsertRecords(e);return Yl(PN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(kV,"upsertData");function Yl(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===MN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===PN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Yl,"returnObject");function VV(e){return bt.transformReq(e),Wl.flush(e.schema,e.table)}a(VV,"flush")});var Ph=T((Rie,FN)=>{var $V=qe(),Mh=require("joi"),{hdb_table:YV,hdb_database:BN}=Ls(),HN={schema:BN,database:BN,table:YV},KV={date:Mh.date().iso().required()},WV={timestamp:Mh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};FN.exports=function(e,t){let r=t==="timestamp"?{...HN,...WV}:{...HN,...KV},s=Mh.object(r);return $V.validateBySchema(e,s)}});var xN=T((gie,GN)=>{var QV=qe(),vh=require("joi"),{hdb_table:zV,hdb_database:qN}=Ls(),JV=vh.object({schema:qN,database:qN,table:zV,hash_values:vh.array().required(),ids:vh.array()});GN.exports=function(e){return QV.validateBySchema(e,JV)}});var VN=T((Aie,kN)=>{"use strict";var Bh=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}},Hh=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}},Fh=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};kN.exports={InsertObject:Bh,NoSQLSeachObject:Hh,DeleteResponseObject:Fh}});var Ai=T((Nie,QN)=>{"use strict";var YN=Ph(),XV=xN(),Ri=$(),$N=require("moment"),KN=G(),{promisify:jV,callbackify:ZV}=require("util"),gi=b(),e$=Pn(),qh=jV(e$.getTableSchema),Gh=us(),{DeleteResponseObject:t$}=VN(),{handleHDBError:vn,hdb_errors:r$}=j(),{HDB_ERROR_MSGS:Ql,HTTP_STATUS_CODES:Bn}=r$,s$="records successfully deleted",n$=ZV(WN);QN.exports={delete:n$,deleteRecord:WN,deleteFilesBefore:i$,deleteAuditLogsBefore:o$};async function i$(e){let t=YN(e,"date");if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);if(Ri.transformReq(e),!$N(e.date,$N.ISO_8601).isValid())throw vn(new Error,Ql.INVALID_DATE,Bn.BAD_REQUEST,gi.LOG_LEVELS.ERROR,Ql.INVALID_DATE,!0);let s=Ri.checkSchemaTableExist(e.schema,e.table);if(s)throw vn(new Error,s,Bn.NOT_FOUND,gi.LOG_LEVELS.ERROR,s,!0);let n=await Gh.deleteRecordsBefore(e);if(await qh(e.schema,e.table),KN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(i$,"deleteFilesBefore");async function o$(e){let t=YN(e,"timestamp");if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);if(Ri.transformReq(e),isNaN(e.timestamp))throw vn(new Error,Ql.INVALID_VALUE("Timestamp"),Bn.BAD_REQUEST,gi.LOG_LEVELS.ERROR,Ql.INVALID_VALUE("Timestamp"),!0);let r=Ri.checkSchemaTableExist(e.schema,e.table);if(r)throw vn(new Error,r,Bn.NOT_FOUND,gi.LOG_LEVELS.ERROR,r,!0);let s=await Gh.deleteAuditLogsBefore(e);return await qh(e.schema,e.table),KN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(o$,"deleteAuditLogsBefore");async function WN(e){e.ids&&(e.hash_values=e.ids);let t=XV(e);if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);Ri.transformReq(e);let r=Ri.checkSchemaTableExist(e.schema,e.table);if(r)throw vn(new Error,r,Bn.NOT_FOUND,gi.LOG_LEVELS.ERROR,r,!0);try{await qh(e.schema,e.table);let s=await Gh.deleteRecords(e);return Ri.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${s$}`),s}catch(s){if(s.message===gi.SEARCH_NOT_FOUND_MESSAGE){let n=new t$;return n.message=gi.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(WN,"deleteRecord")});var zl=T((yie,XN)=>{var a$=require("crypto"),zN=9;function c$(e){let t=l$(zN),r=JN(e+t);return t+r}a(c$,"createHash");function u$(e,t){let r=e.substr(0,zN),s=r+JN(t+r);return e===s}a(u$,"validateHash");function l$(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(l$,"generateSalt");function JN(e){return a$.createHash("md5").update(e).digest("hex")}a(JN,"md5");XN.exports={hash:c$,validate:u$}});var ZN=T((wie,jN)=>{var xh=qe(),Ht={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 _$(e){return Ht.password.presence=!0,Ht.username.presence=!0,Ht.role.presence=!0,Ht.active.presence=!0,xh.validateObject(e,Ht)}a(_$,"addUserValidation");function d$(e){return Ht.password.presence=!1,Ht.username.presence=!0,Ht.role.presence=!1,Ht.active.presence=!1,xh.validateObject(e,Ht)}a(d$,"alterUserValidation");function f$(e){return Ht.password.presence=!1,Ht.username.presence=!0,Ht.role.presence=!1,Ht.active.presence=!1,xh.validateObject(e,Ht)}a(f$,"dropUserValidation");jN.exports={addUserValidation:_$,alterUserValidation:d$,dropUserValidation:f$}});var ke=T((Die,tb)=>{"use strict";var{platform:Lie}=require("os"),E$="nats-server.zip",kh="nats-server",h$=process.platform==="win32"?`${kh}.exe`:kh,Vh="HDB",m$=/^[^\s.,*>]+$/,eb="__request__",p$=a(e=>`${e}.${eb}`,"REQUEST_SUBJECT"),S$={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},T$={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},R$={HUB:"hub.pid",LEAF:"leaf.pid"},g$={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},A$={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Vh,deliver_subject:"__HDB__.WORKQUEUE"},O$={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Vh,deliver_subject:"HDB.SCHEMAQUEUE"},N$={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Vh,deliver_subject:"HDB.USERQUEUE"},b$={SUCCESS:"success",ERROR:"error"},y$={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},I$={TXN:"txn",MSGID:"msgid"},_o={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},w$={[_o.ERR]:1,[_o.WRN]:2,[_o.INF]:3,[_o.DBG]:4,[_o.TRC]:5},C$={debug:"-D",trace:"-DVV"};tb.exports={NATS_SERVER_ZIP:E$,NATS_SERVER_NAME:kh,NATS_BINARY_NAME:h$,PID_FILES:R$,NATS_CONFIG_FILES:T$,SERVER_SUFFIX:g$,WORK_QUEUE_CONSUMER_NAMES:A$,SCHEMA_QUEUE_CONSUMER_NAMES:O$,USER_QUEUE_CONSUMER_NAMES:N$,NATS_TERM_CONSTRAINTS_RX:m$,REQUEST_SUFFIX:eb,UPDATE_REMOTE_RESPONSE_STATUSES:b$,CLUSTER_STATUS_STATUSES:y$,REQUEST_SUBJECT:p$,SUBJECT_PREFIXES:I$,MSG_HEADERS:S$,LOG_LEVELS:_o,LOG_LEVEL_FLAGS:C$,LOG_LEVEL_HIERARCHY:w$}});var sb=T((Mie,rb)=>{"use strict";var Jl=b(),Xl=class{static{a(this,"BaseLicense")}constructor(t=0,r=Jl.RAM_ALLOCATION_ENUM.DEFAULT,s=Jl.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},$h=class extends Xl{static{a(this,"ExtendedLicense")}constructor(t=0,r=Jl.RAM_ALLOCATION_ENUM.DEFAULT,s=Jl.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};rb.exports={BaseLicense:Xl,ExtendedLicense:$h}});var tc=T((vie,ub)=>{"use strict";var Eo=require("fs-extra"),nb=zl(),ib=require("crypto"),L$=require("moment"),D$=require("uuid").v4,Ft=G(),Kh=require("path"),U$=$(),Hn=b(),M$=sb().ExtendedLicense,fo="invalid license key format",P$="061183",v$="mofi25",B$="aes-256-cbc",H$=16,F$=32,ob=X();ob.initSync();var Yh;ub.exports={validateLicense:ab,generateFingerPrint:G$,licenseSearch:cb,getLicense:V$};function Wh(){return Kh.join(ob.getHdbBasePath(),Hn.LICENSE_KEY_DIR_NAME,Hn.LICENSE_FILE_NAME)}a(Wh,"getLicenseDirPath");function q$(){let e=Wh();return Kh.join(e,Hn.LICENSE_FILE_NAME)}a(q$,"getLicenseFilePath");function Qh(){let e=Wh();return Kh.join(e,Hn.REG_KEY_FILE_NAME)}a(Qh,"getFingerPrintFilePath");async function G$(){let e=Qh();try{return await Eo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await x$();throw Ft.error(`Error writing fingerprint file to ${e}`),Ft.error(t),new Error("There was an error generating the fingerprint")}}a(G$,"generateFingerPrint");async function x$(){let e=D$(),t=nb.hash(e),r=Qh();try{await Eo.mkdirp(Wh()),await Eo.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(x$,"writeFingerprint");function ab(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Hn.RAM_ALLOCATION_ENUM.DEFAULT,version:Hn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ft.error("empty license key passed to validate."),r;let s=Qh(),n=!1;try{n=Eo.statSync(s)}catch(i){Ft.error(i)}if(n){let i;try{i=Eo.readFileSync(s,"utf8")}catch{Ft.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(v$),c=o[1];c=Buffer.concat([Buffer.from(c)],H$);let u=Buffer.concat([Buffer.from(i)],F$),_=ib.createDecipheriv(B$,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=k$(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(fo),Ft.error(fo),new Error(fo)}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(fo),Ft.error(fo),new Error(fo)}else r.exp_date=l;r.exp_date<L$().valueOf()&&(r.valid_date=!1),nb.validate(o[1],`${P$}${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(ab,"validateLicense");function k$(e,t){try{let r=ib.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(k$,"checkOldLicense");function cb(){let e=new M$,t=[];try{t=Eo.readFileSync(q$(),"utf-8").split(Hn.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(U$.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=ab(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=Hn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Yh=e,e}a(cb,"licenseSearch");async function V$(){return Yh||await cb(),Yh}a(V$,"getLicense")});var Gr=T((Gie,bb)=>{"use strict";var fb="username is required",Eb="nothing to update, must supply active, role or password to update",hb="password cannot be an empty string",mb="If role is specified, it cannot be empty.",pb="active must be true or false";bb.exports={addUser:j$,alterUser:Z$,dropUser:tY,getSuperUser:iY,userInfo:rY,listUsers:Zl,listUsersExternal:sY,setUsersToGlobal:mo,findAndValidateUser:Ob,getClusterUser:oY,USERNAME_REQUIRED:fb,ALTERUSER_NOTHING_TO_UPDATE:Eb,EMPTY_PASSWORD:hb,EMPTY_ROLE:mb,ACTIVE_BOOLEAN:pb};var Sb=qr(),$$=Ai(),Xh=zl(),Tb=ZN(),Rb=Fr(),jh=on(),Tr=$(),gb=require("validate.js"),_e=G(),{promisify:Y$}=require("util"),Zh=nn(),lb=b(),_b=ke(),K$=Er(),Hie=X(),Fie=tc(),W$=hi(),{table:qie}=(fe(),Z(Ce)),{handleHDBError:Us,hdb_errors:Q$}=j(),{HTTP_STATUS_CODES:Ms,AUTHENTICATION_ERROR_MSGS:zh,HDB_ERROR_MSGS:ho}=Q$,{UserEventMsg:em}=ls(),Jh=require("lodash"),{server:tm}=(Ur(),Z(eo)),z$=G();tm.getUser=Ob;var Ab={username:!0,active:!0,role:!0,password:!0},db=new Map,jl=Rb.searchByValue,J$=Rb.searchByHash,X$=Y$($$.delete);async function j$(e){let t=gb.cleanAttributes(e,Ab),r=Tb.addUserValidation(t);if(r)throw Us(new Error,r.message,Ms.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 jl(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 Us(new Error,ho.ROLE_NAME_NOT_FOUND(t.role),Ms.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Us(new Error,ho.DUP_ROLES_FOUND(t.role),Ms.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Zh.encrypt(t.password)),t.password=Xh.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Sb.insert(i)}catch(u){throw _e.error("There was an error searching for a user."),_e.error(u),u}_e.debug(o);try{await mo()}catch(u){throw _e.error("Got an error setting users to global"),_e.error(u),u}if(o.skipped_hashes.length===1)throw Us(new Error,ho.USER_ALREADY_EXISTS(t.username),Ms.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],jh.signalUserChange(new em(process.pid)),`${c.username} successfully added`}a(j$,"addUser");async function Z$(e){let t=gb.cleanAttributes(e,Ab);if(Tr.isEmptyOrZeroLength(t.username))throw new Error(fb);if(Tr.isEmptyOrZeroLength(t.password)&&Tr.isEmptyOrZeroLength(t.role)&&Tr.isEmptyOrZeroLength(t.active))throw new Error(Eb);if(!Tr.isEmpty(t.password)&&Tr.isEmptyOrZeroLength(t.password.trim()))throw new Error(hb);if(!Tr.isEmpty(t.active)&&!Tr.isBoolean(t.active))throw new Error(pb);let r=eY(t.username);if(!Tr.isEmpty(t.password)&&!Tr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Zh.encrypt(t.password)),t.password=Xh.hash(t.password)),t.role==="")throw new Error(mb);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 jl(i)||[])}catch(c){throw _e.error("Got an error searching for a role."),_e.error(c),c}if(!o||o.length===0){let c=ho.ALTER_USER_ROLE_NOT_FOUND(t.role);throw _e.error(c),Us(new Error,c,Ms.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=ho.ALTER_USER_DUP_ROLES(t.role);throw _e.error(c),Us(new Error,c,Ms.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 Sb.update(s)}catch(i){throw _e.error("Error during update."),_e.error(i),i}try{await mo()}catch(i){throw _e.error("Got an error setting users to global"),_e.error(i),i}return jh.signalUserChange(new em(process.pid)),n}a(Z$,"alterUser");function eY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(eY,"isClusterUser");async function tY(e){try{let t=Tb.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Tr.isEmpty(global.hdb_users.get(e.username)))throw Us(new Error,ho.USER_NOT_EXIST(e.username),Ms.NOT_FOUND,void 0,void 0,!0);let s;try{s=await X$(r)}catch(n){throw _e.error("Got an error deleting a user."),_e.error(n),n}_e.debug(s);try{await mo()}catch(n){throw _e.error("Got an error setting users to global."),_e.error(n),n}return jh.signalUserChange(new em(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(tY,"dropUser");async function rY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Jh.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await J$(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(rY,"userInfo");async function sY(){let e;try{e=await Zl()}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(sY,"listUsersExternal");async function Zl(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await jl(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]=Jh.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 jl(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=Jh.cloneDeep(o),o.role=r[o.role],nY(o.role),i.set(o.username,o);return i}catch(e){throw _e.error("got an error listing users"),_e.error(e),Tr.errorizeMessage(e)}return null}a(Zl,"listUsers");function nY(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(W$)){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(nY,"appendSystemTablesToRole");async function mo(){try{let e=await Zl();global.hdb_users=e}catch(e){throw _e.error(e),e}}a(mo,"setUsersToGlobal");async function Ob(e,t,r=!0){global.hdb_users||await mo();let s=global.hdb_users.get(e);if(!s)throw Us(new Error,zh.GENERIC_AUTH_FAIL,Ms.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Us(new Error,zh.USER_INACTIVE,Ms.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(db.get(t)===s.password)return n;if(Xh.validate(s.password,t))db.set(t,s.password);else throw Us(new Error,zh.GENERIC_AUTH_FAIL,Ms.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Ob,"findAndValidateUser");async function iY(){global.hdb_users||await mo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(iY,"getSuperUser");async function oY(){let e=await Zl(),t=K$.getConfigFromFile(lb.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Tr.isEmpty(r)&&r?.role?.role===lb.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Zh.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+_b.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+_b.SERVER_SUFFIX.ADMIN,r}a(oY,"getClusterUser");var Nb=[];tm.invalidateUser=function(e){for(let t of Nb)try{t(e)}catch(r){z$.error("Error invalidating user",r)}};tm.onInvalidatedUser=function(e){Nb.push(e)}});var sc=T(($ie,Cb)=>{"use strict";var Oi=G(),Rr=b(),aY=RN(),kie=Pn(),Vie=pi(),cY=Gr(),{validateEvent:yb}=ls(),rc=us(),uY=require("process"),{resetDatabases:lY}=(fe(),Z(Ce)),_Y={[Rr.ITC_EVENT_TYPES.SCHEMA]:dY,[Rr.ITC_EVENT_TYPES.USER]:wb};async function dY(e){let t=yb(e);if(t){Oi.error(t);return}Oi.trace("ITC schemaHandler received schema event:",e),await aY(e.message),await fY(e.message)}a(dY,"schemaHandler");async function fY(e){try{rc.resetReadTxn(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),rc.resetReadTxn(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),rc.resetReadTxn(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=lY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Oi.error(t)}}a(fY,"syncSchemaMetadata");var Ib=[];async function wb(e){try{try{rc.resetReadTxn(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),rc.resetReadTxn(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Oi.warn(r)}let t=yb(e);if(t){Oi.error(t);return}Oi.trace(`ITC userHandler ${Rr.HDB_ITC_CLIENT_PREFIX}${uY.pid} received user event:`,e),await cY.setUsersToGlobal();for(let r of Ib)r()}catch(t){Oi.error(t)}}a(wb,"userHandler");wb.addListener=function(e){Ib.push(e)};Cb.exports=_Y});var ls=T((Jie,Db)=>{"use strict";var Kie=G(),rm=$(),EY=b(),{ITC_ERRORS:nc}=dr(),{parentPort:Wie,threadId:hY,isMainThread:mY,workerData:Qie}=require("worker_threads"),{onMessageFromWorkers:pY,broadcast:zie,broadcastWithAcknowledgement:SY}=Ze();Db.exports={sendItcEvent:TY,validateEvent:Lb,SchemaEventMsg:RY,UserEventMsg:gY};var e_;pY(async(e,t)=>{e_=e_||sc(),Lb(e),e_[e.type]&&await e_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function TY(e){return!mY&&e.message&&(e.message.originator=hY),SY(e)}a(TY,"sendItcEvent");function Lb(e){if(typeof e!="object")return nc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||rm.isEmpty(e.type))return nc.MISSING_TYPE;if(!e.hasOwnProperty("message")||rm.isEmpty(e.message))return nc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||rm.isEmpty(e.message.originator))return nc.MISSING_ORIGIN;if(EY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return nc.INVALID_EVENT(e.type)}a(Lb,"validateEvent");function RY(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(RY,"SchemaEventMsg");function gY(e){this.originator=e}a(gY,"UserEventMsg")});var on=T((Zie,vb)=>{"use strict";var Ub=b(),jie=$(),t_=G(),Mb=pN(),po,{sendItcEvent:Pb}=ls();function AY(e){try{t_.trace("signalSchemaChange called with message:",e),po=po||sc();let t=new Mb(Ub.ITC_EVENT_TYPES.SCHEMA,e);return po.schema(t),Pb(t)}catch(t){t_.error(t)}}a(AY,"signalSchemaChange");function OY(e){try{t_.trace("signalUserChange called with message:",e),po=po||sc();let t=new Mb(Ub.ITC_EVENT_TYPES.USER,e);return po.user(t),Pb(t)}catch(t){t_.error(t)}}a(OY,"signalUserChange");vb.exports={signalSchemaChange:AY,signalUserChange:OY}});var r_=T((toe,Hb)=>{"use strict";var Bb=$(),NY=b(),bY=G(),yY=Fl(),IY=Hl(),wY=on(),{SchemaEventMsg:CY}=ls(),LY="already exists in";Hb.exports=DY;async function DY(e,t,r){if(Bb.isEmptyOrZeroLength(r))return r;let s=[];Bb.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 UY(e,t.schema,t.name,i)})),n}a(DY,"lmdbCheckForNewAttributes");async function UY(e,t,r,s){let n=new IY(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await MY(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(LY))bY.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(UY,"createNewAttribute");async function MY(e){let t;return t=await yY(e),wY.signalSchemaChange(new CY(process.pid,NY.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(MY,"createAttribute")});var So=T((soe,Fb)=>{"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}};Fb.exports=sm});var Gb=T((ioe,qb)=>{"use strict";var PY=So(),vY=b().OPERATIONS_ENUM,nm=class extends PY{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(vY.INSERT,r,s,n,i),this.records=t}};qb.exports=nm});var kb=T((aoe,xb)=>{"use strict";var BY=So(),HY=b().OPERATIONS_ENUM,im=class extends BY{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(HY.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};xb.exports=im});var $b=T((uoe,Vb)=>{"use strict";var FY=So(),qY=b().OPERATIONS_ENUM,om=class extends FY{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(qY.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};Vb.exports=om});var Kb=T((_oe,Yb)=>{"use strict";var GY=So(),xY=b().OPERATIONS_ENUM,am=class extends GY{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(xY.DELETE,s,n,t,i),this.original_records=r}};Yb.exports=am});var ic=T((Eoe,Jb)=>{"use strict";var foe=require("path"),Wb=Ue(),kY=Gb(),VY=kb(),$Y=$b(),YY=Kb(),To=ze(),Qb=$(),{CONFIG_PARAMS:KY}=b(),zb=X();zb.initSync();var s_=b().OPERATIONS_ENUM,{getTransactionAuditStorePath:WY}=ve();Jb.exports=QY;async function QY(e,t){if(zb.get(KY.LOGGING_AUDITLOG)===!1)return;let r=WY(e.schema,e.table),s=await Wb.openEnvironment(r,e.table,!0),n=zY(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Wb.initializeDBIs(s,To.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,To.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[To.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[To.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Qb.isEmpty(n.user_name)||s.dbis[To.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[To.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(QY,"writeTransaction");function zY(e,t){let r=Qb.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===s_.INSERT)return new kY(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===s_.UPDATE)return new VY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===s_.UPSERT)return new $Y(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===s_.DELETE)return new YY(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(zY,"createTransactionObject")});var cm=T((poe,Xb)=>{"use strict";var JY=Qa(),moe=za(),oc=b(),XY=Za(),jY=uo().insertRecords,ZY=Ue(),e1=G(),t1=r_(),{getSchemaPath:r1}=ve(),s1=ic();Xb.exports=n1;async function n1(e){try{let{schema_table:t,attributes:r}=JY(e);XY(e,r,t.hash_attribute),e.schema!==oc.SYSTEM_SCHEMA_NAME&&(r.includes(oc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(oc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(oc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(oc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await t1(e.hdb_auth_header,t,r),n=r1(e.schema,e.table),i=await ZY.openEnvironment(n,e.table),o=await jY(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await s1(e,o)}catch(c){e1.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(n1,"lmdbCreateRecords")});var ey=T((Toe,Zb)=>{"use strict";var jb=b(),i1=cm(),o1=za(),a1=require("fs-extra"),{getSchemaPath:c1}=ve();Zb.exports=u1;async function u1(e){let t=[{name:e.schema,createddate:Date.now()}],r=new o1(jb.SYSTEM_SCHEMA_NAME,jb.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await i1(r),await a1.mkdirp(c1(e.schema))}a(u1,"lmdbCreateSchema")});var ry=T((goe,ty)=>{"use strict";var um=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}};ty.exports=um});var oy=T((yoe,iy)=>{"use strict";var sy=Ue(),lm=hr(),_m=dr().LMDB_ERRORS_ENUM,l1=ze(),ny=G(),Ooe=$(),_1=require("lmdb"),d1=ry(),f1=b(),{OVERFLOW_MARKER:Noe,MAX_SEARCH_KEY_LENGTH:boe}=l1,E1=f1.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function h1(e,t,r,s){if(lm.validateEnv(e),t===void 0)throw new Error(_m.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(_m.IDS_REQUIRED):new Error(_m.IDS_MUST_BE_ITERABLE);try{let n=sy.listDBIs(e);sy.initializeDBIs(e,t,n);let i=new d1,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[E1]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,_1.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let A=n[S];if(!h.hasOwnProperty(A)||A===t)continue;let I=e.dbis[A],N=h[A];if(N!=null)try{let Y=lm.getIndexedValues(N);if(Y)for(let Q=0,q=Y.length;Q<q;Q++)I.remove(Y[Q],o)}catch{ny.warn(`cannot delete from attribute: ${A}, ${N}:${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=lm.getNextMonotonicTime(),i}catch(n){throw n}}a(h1,"deleteRecords");iy.exports={deleteRecords:h1}});var ac=T((woe,cy)=>{"use strict";var Ro=$(),m1=oy(),p1=Ue(),{getSchemaPath:S1}=ve(),T1=ic(),R1=G();cy.exports=g1;async function g1(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ro.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ro.isEmptyOrZeroLength(e.hash_values)&&!Ro.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Ro.isEmpty(u)||e.hash_values.push(u)}}if(Ro.isEmptyOrZeroLength(e.hash_values))return ay([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ro.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=S1(e.schema,e.table),i=await p1.openEnvironment(n,e.table),o=await m1.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await T1(e,o)}catch(c){R1.error(`unable to write transaction due to ${c.message}`)}return ay(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(g1,"lmdbDeleteRecords");function ay(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(ay,"createDeleteResponse")});var fm=T((Doe,uy)=>{"use strict";var A1=b(),Loe=hr();function dm(e,t){let r=Object.create(null);if(t.length===1&&A1.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(dm,"parseRow");function O1(e,t,r,s){let n=dm(r,e);s.push(n)}a(O1,"searchAll");function N1(e,t,r,s){let n=dm(r,e);s[t]=n}a(N1,"searchAllToMap");function b1(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(b1,"iterateDBI");function Ni(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(Ni,"pushResults");function y1(e,t,r,s,n,i){t.toString().endsWith(e)&&Ni(t,r,s,n,i)}a(y1,"endsWith");function I1(e,t,r,s,n,i){t.toString().includes(e)&&Ni(t,r,s,n,i)}a(I1,"contains");function w1(e,t,r,s,n,i){t>e&&Ni(t,r,s,n,i)}a(w1,"greaterThanCompare");function C1(e,t,r,s,n,i){t>=e&&Ni(t,r,s,n,i)}a(C1,"greaterThanEqualCompare");function L1(e,t,r,s,n,i){t<e&&Ni(t,r,s,n,i)}a(L1,"lessThanCompare");function D1(e,t,r,s,n,i){t<=e&&Ni(t,r,s,n,i)}a(D1,"lessThanEqualCompare");uy.exports={parseRow:dm,searchAll:O1,searchAllToMap:N1,iterateDBI:b1,endsWith:y1,contains:I1,greaterThanCompare:w1,greaterThanEqualCompare:C1,lessThanCompare:L1,lessThanEqualCompare:D1,pushResults:Ni}});var go=T((Boe,my)=>{"use strict";var Fn=Ue(),Moe=G(),gr=hr(),n_=ze(),Je=dr().LMDB_ERRORS_ENUM,Poe=$(),U1=b(),i_=fm(),{parseRow:M1}=i_,voe=require("lmdb"),{OVERFLOW_MARKER:ly,MAX_SEARCH_KEY_LENGTH:P1}=n_;function _y(e,t,r,s=!1,n=void 0,i=void 0){return bi(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(_y,"iterateFullIndex");function cc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return bi(e,t,r,(l,d,f,E)=>{let I={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?(I.values=!1,d.getRange(I).map(N=>({value:N}))):d.getRange(I)})}a(cc,"iterateRangeBetween");function bi(e,t,r,s){let n=e.database||e,i=Fn.openDBI(n,r);i[n_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Fn.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(bi,"setupTransaction");function dy(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(ly)){if(!n)if(r)n=Fn.openDBI(e,r);else{let u=Fn.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=Fn.openDBI(e,u[_]),!n[n_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(dy,"getOverflowCheck");function v1(e,t,r,s=!1,n=void 0,i=void 0){if(gr.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return bi(e,t,t,(o,c,u)=>(o_(r),r=uc(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>M1(_.value,r))))}a(v1,"searchAll");function B1(e,t,r,s=!1,n=void 0,i=void 0){if(gr.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);o_(r),r=uc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of _y(e,t,t,s,n,i))o.set(c,i_.parseRow(u,r));return o}a(B1,"searchAllToMap");function H1(e,t,r=!1,s=void 0,n=void 0){if(gr.validateEnv(e),t===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=_y(e,void 0,t,r,s,n),c=o.transaction,u=dy(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(H1,"iterateDBI");function F1(e,t){if(gr.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return Fn.statDBI(e,t).entryCount}a(F1,"countAll");function q1(e,t,r,s,n=!1,i=void 0,o=void 0){return qn(e,r,s),bi(e,t,r,(c,u,_,l)=>(s=gr.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(q1,"equals");function G1(e,t,r){return qn(e,t,r),Fn.openDBI(e,t).getValuesCount(r)}a(G1,"count");function x1(e,t,r,s,n=!1,i=void 0,o=void 0){return qn(e,r,s),bi(e,null,r,(c,u)=>{s=gr.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(x1,"startsWith");function k1(e,t,r,s,n=!1,i=void 0,o=void 0){return fy(e,t,r,s,n,i,o,!0)}a(k1,"endsWith");function fy(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return qn(e,r,s),bi(e,null,r,(u,_,l,d)=>{let f=dy(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))?_[n_.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(fy,"contains");function V1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),cc(e,t,r,s,u,n,i,o,!0,!1)}a(V1,"greaterThan");function $1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),cc(e,t,r,s,u,n,i,o,!1,!1)}a($1,"greaterThanEqual");function Y1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),cc(e,t,r,u,s,n,i,o,!1,!0)}a(Y1,"lessThan");function K1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),cc(e,t,r,u,s,n,i,o,!1,!1)}a(K1,"lessThanEqual");function W1(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(gr.validateEnv(e),r===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Je.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Je.END_VALUE_REQUIRED);if(s=gr.convertKeyValueToWrite(s),n=gr.convertKeyValueToWrite(n),s>n)throw new Error(Je.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return cc(e,t,r,s,n,i,o,c)}a(W1,"between");function Q1(e,t,r,s){gr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(o_(r),r=uc(n,r),s===void 0)throw new Error(Je.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=i_.parseRow(c,r)),o}a(Q1,"searchByHash");function z1(e,t,r){gr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Je.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(z1,"checkHashExists");function J1(e,t,r,s,n=[]){return hy(e,t,r,s,n),Ey(e,t,r,s,n).map(i=>i[1])}a(J1,"batchSearchByHash");function X1(e,t,r,s,n=[]){hy(e,t,r,s,n);let i=new Map;for(let[o,c]of Ey(e,t,r,s,n))i.set(o,c);return i}a(X1,"batchSearchByHashToMap");function Ey(e,t,r,s,n=[]){return bi(e,t,t,(i,o,c)=>{r=uc(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,i_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(Ey,"batchHashSearch");function hy(e,t,r,s,n){if(gr.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(o_(r),s==null)throw new Error(Je.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Je.IDS_MUST_BE_ITERABLE)}a(hy,"initializeBatchSearchByHash");function o_(e){if(!Array.isArray(e))throw e===void 0?new Error(Je.FETCH_ATTRIBUTES_REQUIRED):new Error(Je.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(o_,"validateFetchAttributes");function qn(e,t,r){if(gr.validateEnv(e),t===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Je.SEARCH_VALUE_REQUIRED);if(r?.length>P1)throw new Error(Je.SEARCH_VALUE_TOO_LARGE)}a(qn,"validateComparisonFunctions");function uc(e,t){return t.length===1&&U1.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Fn.listDBIs(e)),t}a(uc,"setGetWholeRowAttributes");my.exports={searchAll:v1,searchAllToMap:B1,count:G1,countAll:F1,equals:q1,startsWith:x1,endsWith:k1,contains:fy,searchByHash:Q1,setGetWholeRowAttributes:uc,batchSearchByHash:J1,batchSearchByHashToMap:X1,checkHashExists:z1,iterateDBI:H1,greaterThan:V1,greaterThanEqual:$1,lessThan:Y1,lessThanEqual:K1,between:W1}});var Ao=T((Foe,gy)=>{var py=require("lodash"),Sy=qe(),Be=require("joi"),j1=$(),{hdb_schema_table:a_,checkValidTable:Ty,hdb_table:Ry,hdb_database:c_}=Ls(),{handleHDBError:Z1,hdb_errors:eK}=j(),{getDatabases:tK}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:rK}=eK,sK=Be.object({database:c_,schema:c_,table:Ry,search_attribute:a_,search_value:Be.any().required(),get_attributes:Be.array().min(1).items(a_).optional(),desc:Be.bool(),limit:Be.number().integer().min(1),offset:Be.number().integer().min(0)}),nK=Be.object({database:c_,schema:c_,table:Ry,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(a_).optional(),conditions:Be.array().min(1).items(Be.object({search_attribute:a_,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()});gy.exports=function(e,t){let r=null;switch(t){case"value":r=Sy.validateBySchema(e,sK);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Ty("database",e.schema)),i(Ty("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=Sy.validateBySchema(e,nK);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=j1.checkGlobalSchemaTable(e.schema,e.table);if(n)return Z1(new Error,n,rK.NOT_FOUND);let o=tK()[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=py.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!py.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 Em=T((Goe,Ay)=>{"use strict";var iK=Ue(),oK=Ao(),{getSchemaPath:aK}=ve();Ay.exports=cK;function cK(e){let t=oK(e,"hashes");if(t)throw t;let r=aK(e.schema,e.table);return iK.openEnvironment(r,e.table)}a(cK,"initialize")});var hm=T((koe,Oy)=>{"use strict";var uK=go(),lK=Em();Oy.exports=_K;async function _K(e){let t=await lK(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(_K,"lmdbGetDataByHash")});var Oo=T(($oe,Ny)=>{"use strict";var mm=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};Ny.exports=mm});var yy=T((Woe,by)=>{"use strict";var Koe=Oo(),dK=go(),fK=Em();by.exports=EK;async function EK(e){let t=await fK(e),r=global.hdb_schema[e.schema][e.table];return dK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(EK,"lmdbSearchByHash")});var Ps=T((zoe,Iy)=>{"use strict";var pm=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}};Iy.exports=pm});var u_=T((Xoe,My)=>{"use strict";var qt=go(),hK=Ue(),mK=$(),ae=ze(),yi=b(),pK=hi(),wy=dr().LMDB_ERRORS_ENUM,{getSchemaPath:SK}=ve(),an=yi.SEARCH_WILDCARDS;async function TK(e,t,r){let s;e.schema===yi.SYSTEM_SCHEMA_NAME?s=pK[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Uy(e,s.hash_attribute,r,t);return Ly(e,n,s.hash_attribute,r)}a(TK,"prepSearch");async function Ly(e,t,r,s){let n=SK(e.schema,e.table),i=await hK.openEnvironment(n,e.table),o=Dy(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(RK(e,r)===!1){let l=e.search_attribute;if(l===r)return s?Cy(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?Cy(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?qt.batchSearchByHashToMap(c,r,e.get_attributes,_):qt.batchSearchByHash(c,r,e.get_attributes,_)}a(Ly,"executeSearch");function Dy(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=qt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.CONTAINS:n=qt.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=qt.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=qt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return qt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return qt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.SEARCH_ALL:return qt.searchAll(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return qt.searchAllToMap(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.BETWEEN:n=qt.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=qt.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=qt.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=qt.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=qt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Dy,"searchByType");function Cy(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Cy,"createMapFromIterable");function RK(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(RK,"checkToFetchMore");function Uy(e,t,r,s){if(mK.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),an.indexOf(n)>-1)return r===!0?ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ae.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(an[0])<0&&n.indexOf(an[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(an.indexOf(i)>=0&&an.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ae.SEARCH_TYPES.CONTAINS;if(an.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ae.SEARCH_TYPES.ENDS_WITH;if(an.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ae.SEARCH_TYPES.STARTS_WITH;if(n.includes(an[0])||n.includes(an[1]))return ae.SEARCH_TYPES.EQUALS;throw new Error(wy.UNKNOWN_SEARCH_TYPE)}else switch(s){case yi.VALUE_SEARCH_COMPARATORS.BETWEEN:return ae.SEARCH_TYPES.BETWEEN;case yi.VALUE_SEARCH_COMPARATORS.GREATER:return ae.SEARCH_TYPES.GREATER_THAN;case yi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ae.SEARCH_TYPES.GREATER_THAN_EQUAL;case yi.VALUE_SEARCH_COMPARATORS.LESS:return ae.SEARCH_TYPES.LESS_THAN;case yi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ae.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(wy.UNKNOWN_SEARCH_TYPE)}}a(Uy,"createSearchTypeFromSearchObject");My.exports={executeSearch:Ly,createSearchTypeFromSearchObject:Uy,prepSearch:TK,searchByType:Dy}});var vy=T((eae,Py)=>{"use strict";var Zoe=Ps(),gK=Ao(),AK=$(),OK=b(),NK=u_();Py.exports=bK;function bK(e,t){if(!AK.isEmpty(t)&&OK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=gK(e,"value");if(s)throw s;let n=!0;return NK.prepSearch(e,t,n)}a(bK,"lmdbGetDataByValue")});var lc=T((sae,By)=>{"use strict";var rae=Ps(),yK=Ao(),IK=$(),wK=b(),CK=u_();By.exports=LK;async function LK(e,t){if(!IK.isEmpty(t)&&wK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=yK(e,"value");if(s)throw s;return CK.prepSearch(e,t,!1)}a(LK,"lmdbSearchByValue")});var Fy=T((oae,Hy)=>{"use strict";var iae=ze(),Sm=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}},Tm=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Rm=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Hy.exports={SearchByConditionsObject:Sm,SearchCondition:Tm,SortAttribute:Rm}});var Vy=T((lae,ky)=>{"use strict";var cae=Fy().SearchByConditionsObject,DK=Ps(),UK=Ao(),gm=go(),l_=ze(),{Resource:uae}=(os(),Z(IE)),xy=u_(),MK=fm(),PK=require("lodash"),{getSchemaPath:vK}=ve(),qy=Ue(),{handleHDBError:BK,hdb_errors:HK}=j(),{HTTP_STATUS_CODES:FK}=HK,qK=1e8;ky.exports=GK;async function GK(e){let t=UK(e,"conditions");if(t)throw BK(t,t.message,FK.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=vK(e.schema,e.table),s=await qy.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)qy.openDBI(s,_.search_attribute);let i=PK.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===l_.SEARCH_TYPES.EQUALS?_.estimated_count=gm.count(s,_.search_attribute,_.search_value):l===l_.SEARCH_TYPES.CONTAINS||l===l_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=qK}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Gy(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(xy.filterByType),d=l.length,f=gm.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=>MK.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await Gy(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=gm.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(GK,"lmdbSearchByConditions");async function Gy(e,t,r,s){let n=new DK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===l_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,xy.searchByType(e,n,i,s).map(o=>o.value)}a(Gy,"executeConditionSearch")});var _c=T((dae,$y)=>{"use strict";var xK=b().OPERATIONS_ENUM,Am=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=xK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};$y.exports=Am});var Om=T((Eae,jy)=>{"use strict";var Qy=Ps(),zy=_c(),Jy=lc(),Xy=ac(),Jt=b(),Yy=$(),Ky=Ue(),{getTransactionAuditStorePath:kK,getSchemaPath:VK}=ve(),Wy=G();jy.exports=$K;async function $K(e){try{if(Yy.isEmpty(global.hdb_schema[e.schema])||Yy.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await YK(e),await KK(e);let t=VK(e.schema,e.table);try{await Ky.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Wy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=kK(e.schema,e.table);await Ky.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Wy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a($K,"lmdbDropTable");async function YK(e){let t=new Qy(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Jy(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 zy(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Xy(n)}a(YK,"deleteAttributesFromSystem");async function KK(e){let t=new Qy(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Jy(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 zy(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Xy(n)}catch(i){throw i}}a(KK,"dropTableFromSystem")});var eI=T((mae,Zy)=>{"use strict";var WK=require("fs-extra"),QK=Ps(),zK=Oo(),JK=_c(),XK=Om(),jK=ac(),ZK=hm(),eW=lc(),cn=b(),{getSchemaPath:tW}=ve(),{handleHDBError:rW,hdb_errors:sW}=j(),{HDB_ERROR_MSGS:nW,HTTP_STATUS_CODES:iW}=sW;Zy.exports=oW;async function oW(e){let t;try{t=await aW(e.schema);let r=new QK(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await eW(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await XK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new JK(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await jK(n);let i=tW(t);await WK.remove(i)}catch(r){throw r}}a(oW,"lmdbDropSchema");async function aW(e){let t=new zK(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await ZK(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw rW(new Error,nW.SCHEMA_NOT_FOUND(e),iW.NOT_FOUND,void 0,void 0,!0);return s}a(aW,"validateDropSchema")});var bm=T((Sae,tI)=>{"use strict";var Nm=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};tI.exports=Nm});var sI=T((gae,rI)=>{"use strict";var cW=require("fs-extra"),__=Ue(),{getTransactionAuditStorePath:uW}=ve(),ym=ze(),Rae=bm();rI.exports=lW;async function lW(e){let t;try{let r=uW(e.schema,e.table);await cW.mkdirp(r),t=await __.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{__.createDBI(t,ym.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),__.createDBI(t,ym.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),__.createDBI(t,ym.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(lW,"createTransactionsAuditEnvironment")});var aI=T((Oae,oI)=>{"use strict";var Im=b(),nI=Ue(),_W=uo(),{getSystemSchemaPath:dW,getSchemaPath:fW}=ve(),EW=hi(),hW=Fl(),wm=Hl(),mW=G(),pW=sI(),Lm=EW.hdb_table,iI=[];for(let e=0;e<Lm.attributes.length;e++)iI.push(Lm.attributes[e].attribute);oI.exports=SW;async function SW(e,t){let r=fW(t.schema,t.table),s=new wm(t.schema,t.table,Im.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new wm(t.schema,t.table,Im.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new wm(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(dW(),Im.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await _W.insertRecords(o,Lm.hash_attribute,iI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Cm(s),await Cm(n),await Cm(i)}await pW(t)}catch(o){throw o}}a(SW,"lmdbCreateTable");async function Cm(e){try{await hW(e)}catch(t){mW.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Cm,"createAttribute")});var uI=T((bae,cI)=>{"use strict";var TW=Qa(),RW=Za(),gW=r_(),dc=b(),AW=uo().updateRecords,OW=Ue(),{getSchemaPath:NW}=ve(),bW=ic(),yW=G();cI.exports=IW;async function IW(e){try{let{schema_table:t,attributes:r}=TW(e);RW(e,r,t.hash_attribute),e.schema!==dc.SYSTEM_SCHEMA_NAME&&(r.includes(dc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(dc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(dc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(dc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await gW(e.hdb_auth_header,t,r),n=NW(e.schema,e.table),i=await OW.openEnvironment(n,e.table),o=await AW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await bW(e,o)}catch(c){yW.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(IW,"lmdbUpdateRecords")});var _I=T((Iae,lI)=>{"use strict";var wW=b().OPERATIONS_ENUM,Dm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=wW.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};lI.exports=Dm});var fI=T((Lae,dI)=>{"use strict";var Cae=_I(),CW=Qa(),LW=Za(),DW=r_(),fc=b(),UW=uo().upsertRecords,MW=Ue(),{getSchemaPath:PW}=ve(),vW=ic(),BW=G(),{handleHDBError:HW,hdb_errors:FW}=j();dI.exports=qW;async function qW(e){let t;try{t=CW(e)}catch(u){throw HW(u,u.message,FW.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;LW(e,s,r.hash_attribute),e.schema!==fc.SYSTEM_SCHEMA_NAME&&(s.includes(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await DW(e.hdb_auth_header,r,s),i=PW(e.schema,e.table),o=await MW.openEnvironment(i,e.table),c=await UW(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await vW(e,c)}catch(u){BW.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(qW,"lmdbUpsertRecords")});var hI=T((Uae,EI)=>{"use strict";var Um=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};EI.exports=Um});var pI=T((Pae,mI)=>{"use strict";var Mm=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}};mI.exports=Mm});var RI=T((Hae,TI)=>{"use strict";var Pm=Ue(),{getTransactionAuditStorePath:GW}=ve(),Bae=hI(),Ec=ze(),xW=$(),SI=pI(),kW=require("util").promisify,VW=kW(setTimeout),$W=1e4,YW=100;TI.exports=KW;async function KW(e){let t=GW(e.schema,e.table),r=await Pm.openEnvironment(t,e.table,!0),s=Pm.listDBIs(r);Pm.initializeDBIs(r,Ec.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new SI;do n=await WW(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 VW(YW);while(n.transactions_deleted>0);return i}a(KW,"deleteAuditLogsBefore");async function WW(e,t){let r=new SI;try{let s=e.dbis[Ec.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[Ec.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];xW.isEmpty(c)||(n=e.dbis[Ec.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Ec.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>$W)break}return await n,r}catch(s){throw s}}a(WW,"deleteTransactions")});var AI=T((qae,gI)=>{"use strict";var vm=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};gI.exports=vm});var NI=T((kae,OI)=>{"use strict";var QW=Ps(),zW=_c(),xae=AI(),vs=b(),JW=$(),Bm=Ue(),XW=hi(),jW=lc(),ZW=ac(),{getSchemaPath:eQ}=ve();OI.exports=tQ;async function tQ(e,t=!0){let r;e.schema===vs.SYSTEM_SCHEMA_NAME?r=XW[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await sQ(e),n=eQ(e.schema,e.table),i=await Bm.openEnvironment(n,e.table);return t===!0&&await rQ(e,i,r.hash_attribute),Bm.dropDBI(i,e.attribute),s}a(tQ,"lmdbDropAttribute");async function rQ(e,t,r){let s=Bm.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(rQ,"removeAttributeFromAllObjects");async function sQ(e){let t=new QW(vs.SYSTEM_SCHEMA_NAME,vs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await jW(t)).filter(o=>o[vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(JW.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new zW(vs.SYSTEM_SCHEMA_NAME,vs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return ZW(i)}a(sQ,"dropAttributeFromSystem")});var LI=T((Yae,CI)=>{"use strict";var Hm=Ue(),No=ze(),$ae=hr(),Fm=b(),bI=$(),{getTransactionAuditStorePath:nQ}=ve(),iQ=go(),d_=So(),oQ=G();CI.exports=aQ;async function aQ(e){let t=nQ(e.schema,e.table),r=await Hm.openEnvironment(t,e.table,!0),s=Hm.listDBIs(r);Hm.initializeDBIs(r,No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Fm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return yI(r,e.search_values);case Fm.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 Fm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return cQ(r,e.search_values);default:return yI(r)}}a(aQ,"readAuditLog");function yI(e,t=[0,Date.now()]){bI.isEmpty(t[0])&&(t[0]=0),bI.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[No.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 d_,n))}a(yI,"searchTransactionsByTimestamp");function cQ(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[No.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,wI(e,i))}return Object.fromEntries(r)}a(cQ,"searchTransactionsByUsername");function uQ(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=iQ.equals(e,No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,No.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=wI(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);II(u,"records",r,l,o),II(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(uQ,"searchTransactionsByHashValues");function II(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 d_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new d_(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(II,"loopRecords");function wI(e,t){let r=[];try{let s=e.dbis[No.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 d_,i);r.push(o)}}catch(i){oQ.warn(i)}return r}catch(s){throw s}}a(wI,"batchSearchTransactions")});var UI=T((zae,DI)=>{"use strict";var{getSchemaPath:Wae}=ve(),Qae=Ue(),{database:lQ}=(fe(),Z(Ce));DI.exports={writeTransaction:_Q};async function _Q(e,t,r){return lQ({database:e,table:t}).transaction(r)}a(_Q,"writeTransaction")});var BI=T((Xae,vI)=>{"use strict";var{getSchemaPath:MI}=ve(),PI=Ue();vI.exports={flush:dQ,resetReadTxn:fQ};async function dQ(e,t){return(await PI.openEnvironment(MI(e,t),t.toString())).flushed}a(dQ,"flush");async function fQ(e,t){try{(await PI.openEnvironment(MI(e,t),t.toString())).resetReadTxn()}catch{}}a(fQ,"resetReadTxn")});var GI=T((Zae,qI)=>{"use strict";var{Readable:EQ}=require("stream"),{getDatabases:hQ}=(fe(),Z(Ce)),{readSync:mQ,openSync:pQ,createReadStream:HI}=require("fs"),{open:SQ}=require("lmdb"),FI=Il(),TQ=Cl(),{AUDIT_STORE_OPTIONS:RQ}=(io(),Z(gO)),{INTERNAL_DBIS_NAME:gQ,AUDIT_STORE_NAME:AQ}=ze();qI.exports=NQ;var qm=32768,OQ=100;async function NQ(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=SQ({noSync:!0,maxDbs:TQ.MAX_DBS}),f,E=d.openDB(gQ,new FI(!1)),h=l.useReadTransaction(),p=0,S=a(async function(I,N){N.encoding="binary",N.encoder=void 0;let Y=d.openDB(I,N),Q=l.openDB(I,N);for(let{key:q,version:w,value:K}of Q.getRange({transaction:h,versions:Q.useVersions}))f=Y.put(q,K,w),p++%OQ===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:I,value:N}of l.getRange({transaction:h,start:!1}))if(n.some(Y=>I.startsWith?.(Y+"/"))){E.put(I,N);let[,Y]=I.split("/"),Q=!Y,q=new FI(!Q,Q);await S(I,q)}e.include_audit&&await S(AQ,Object.assign({},RQ)),await f;let A=HI(d.path);return A.headers=u(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=pQ(o.path);return o.transaction(()=>{let _=Buffer.alloc(qm);mQ(c,_,0,qm);let l=o.useReadTransaction(),d=HI(null,{fd:c,start:qm}),f=new EQ.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(NQ,"getBackup")});var VI=T((tce,kI)=>{"use strict";var bQ=G(),{handleHDBError:yQ}=j(),IQ=aO(),wQ=Fl(),CQ=cm(),LQ=ey(),DQ=ac(),UQ=hm(),MQ=yy(),PQ=vy(),vQ=lc(),BQ=Vy(),HQ=eI(),FQ=aI(),qQ=uI(),GQ=fI(),xQ=RI(),kQ=Om(),VQ=NI(),$Q=LI(),YQ=UI(),xI=BI(),KQ=GI(),Gm=class extends IQ{static{a(this,"LMDBBridge")}async searchByConditions(t){return BQ(t)}async getDataByHash(t){return await UQ(t)}async searchByHash(t){return await MQ(t)}async getDataByValue(t,r){return await PQ(t,r)}async searchByValue(t){return await vQ(t)}async createSchema(t){return await LQ(t)}async dropSchema(t){return await HQ(t)}async createTable(t,r){return await FQ(t,r)}async dropTable(t){return await kQ(t)}async createAttribute(t){return await wQ(t)}async createRecords(t){return await CQ(t)}async updateRecords(t){return await qQ(t)}async upsertRecords(t){try{return await GQ(t)}catch(r){throw yQ(r,null,null,bQ.ERR,r)}}async deleteRecords(t){return await DQ(t)}async dropAttribute(t){return await VQ(t)}async deleteAuditLogsBefore(t){return await xQ(t)}async readAuditLog(t){return await $Q(t)}writeTransaction(t,r,s){return YQ.writeTransaction(t,r,s)}flush(t,r){return xI.flush(t,r)}resetReadTxn(t,r){return xI.resetReadTxn(t,r)}getBackup(t){return KQ(t)}};kI.exports=Gm});var jI={};Qe(jI,{ResourceBridge:()=>Vm});function $m({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 YI(e,t){let r=Bs(e),s=$m(e,r);if(!r)throw new _s.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&&_l(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Bs(e){let t=e.database||e.schema||QQ,r=ds()[t];if(!r)throw(0,_s.handleHDBError)(new Error,WQ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function KI(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*WI(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 QI,f_,_s,zI,JI,Es,xm,km,XI,WQ,QQ,zQ,JQ,$I,Vm,ZI=Te(()=>{"use strict";QI=M(VI()),f_=M(Ao()),_s=M(j());fe();zI=M(Qa()),JI=M(Za()),Es=M(b()),xm=M(on()),km=M(ls()),XI=M($());di();dl();({HDB_ERROR_MSGS:WQ}=_s.hdb_errors),QQ="data",zQ=1e4,JQ=10,Vm=class extends QI.default{static{a(this,"ResourceBridge")}constructor(t){super(t),$I=this}async searchByConditions(t){let r=(0,f_.default)(t,"conditions");if(r)throw(0,_s.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=Bs(t);if(!s)throw new _s.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:$m(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 _s.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 Bs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Bs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let 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){Bs(t).dropTable()}createSchema(t){return hc({database:t.schema,table:null}),xm.signalSchemaChange(new km.SchemaEventMsg(process.pid,Es.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Ym(t.schema),xm.signalSchemaChange(new km.SchemaEventMsg(process.pid,Es.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,$I.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,zI.default)(t);(0,JI.default)(t,s,r.primaryKey);let n,i=ds()[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=_l(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=ds()[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 KI(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=ds()[t.schema][t.table];if(!r.createdTimeProperty)throw new _s.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:Es.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,XI.async_set_timeout)(JQ),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%zQ===0&&await _();return u.length>0&&await _(),n?KI(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,f_.default)(t,"hashes");if(r)throw r;return YI(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of YI(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&Es.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,f_.default)(t,"value");if(s)throw s;let n=Bs(t);if(!n)throw new _s.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===Es.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:$m(t,n)})}async getDataByValue(t,r){let s=new Map,n=Bs(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){Bs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Bs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Bs(t),s={};switch(t.search_type){case Es.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 Es.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of WI(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return WI(r,t.search_values?.[0],t.search_values?.[1])}}};a($m,"getSelect");a(YI,"getRecords");a(Bs,"getTable");a(KI,"createDeleteResponse");a(WI,"groupRecordsInHistory")});var us=T((ace,ew)=>{"use strict";var{ResourceBridge:XQ}=(ZI(),Z(jI)),jQ=X();jQ.initSync();var E_;function ZQ(){return E_||(E_=new XQ,E_)}a(ZQ,"getBridge");ew.exports=ZQ()});var nw=T((uce,sw)=>{"use strict";var tw=require("lodash"),mc=require("mathjs"),ez=require("jsonata"),rw=$();sw.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?tw.uniqWith(e,tw.isEqual):e,searchJSON:tz,mad:pc.bind(null,mc.mad),mean:pc.bind(null,mc.mean),mode:pc.bind(null,mc.mode),prod:pc.bind(null,mc.prod),median:pc.bind(null,mc.median)};function pc(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(pc,"aggregateFunction");function tz(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(rw.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),rw.isEmpty(this.__ala__.res[r])){let s=ez(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(tz,"searchJSON")});var ow=T((_ce,iw)=>{"use strict";var rt=require("moment"),Km="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;iw.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(Km),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(Km),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(Km)}});var lw=T((dce,uw)=>{"use strict";var rz=require("@turf/area"),sz=require("@turf/length"),nz=require("@turf/circle"),iz=require("@turf/difference"),oz=require("@turf/distance"),az=require("@turf/boolean-contains"),cz=require("@turf/boolean-equal"),uz=require("@turf/boolean-disjoint"),lz=require("@turf/helpers"),aw=b(),de=$();uw.exports={geoArea:_z,geoLength:dz,geoCircle:fz,geoDifference:Ez,geoDistance:cw,geoNear:hz,geoContains:mz,geoEqual:pz,geoCrosses:Sz,geoConvert:Tz};var Wm="geo1 is required",Qm="geo2 is required";function _z(e){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),rz.default(e)}a(_z,"geoArea");function dz(e,t){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),sz.default(e,{units:t||"kilometers"})}a(dz,"geoLength");function fz(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)),nz.default(e,t,{units:r||"kilometers"})}a(fz,"geoCircle");function Ez(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(Ez,"geoDifference");function cw(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)),oz.default(e,t,{units:r||"kilometers"})}a(cw,"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 cw(e,t,s)<=r}a(hz,"geoNear");function mz(e,t){if(de.isEmpty(e))throw new Error(Wm);if(de.isEmpty(e))throw new Error(Qm);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),az.default(e,t)}a(mz,"geoContains");function pz(e,t){if(de.isEmpty(e))throw new Error(Wm);if(de.isEmpty(e))throw new Error(Qm);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),cz.default(e,t)}a(pz,"geoEqual");function Sz(e,t){if(de.isEmpty(e))throw new Error(Wm);if(de.isEmpty(e))throw new Error(Qm);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),!uz.default(e,t)}a(Sz,"geoCrosses");function Tz(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(aw.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(aw.GEO_CONVERSION_ENUM).join(",")}`);return lz[t](e,r)}a(Tz,"geoConvert")});var h_=T((Ece,_w)=>{var Ii=nw(),Ar=ow(),Hs=lw();_w.exports=e=>{e.aggr.mad=e.aggr.MAD=Ii.mad,e.aggr.mean=e.aggr.MEAN=Ii.mean,e.aggr.mode=e.aggr.MODE=Ii.mode,e.aggr.prod=e.aggr.PROD=Ii.prod,e.aggr.median=e.aggr.MEDIAN=Ii.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ii.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ii.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Ar.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Ar.current_time,e.fn.extract=e.fn.EXTRACT=Ar.extract,e.fn.date=e.fn.DATE=Ar.date,e.fn.date_format=e.fn.DATE_FORMAT=Ar.date_format,e.fn.date_add=e.fn.DATE_ADD=Ar.date_add,e.fn.date_sub=e.fn.DATE_SUB=Ar.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Ar.date_diff,e.fn.now=e.fn.NOW=Ar.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Ar.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Ar.get_server_time,e.fn.getdate=e.fn.GETDATE=Ar.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Ar.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Hs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Hs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Hs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Hs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Hs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Hs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Hs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Hs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Hs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Hs.geoNear}});var hw=T((hce,Ew)=>{"use strict";var Sc=require("lodash"),yt=require("alasql");yt.options.cache=!1;var Rz=h_(),dw=require("clone"),m_=require("recursive-iterator"),re=G(),ie=$(),bo=us(),gz=b(),{hdb_errors:Az}=j(),{getDatabases:fw}=(fe(),Z(Ce)),Oz="IS NULL",hs="There was a problem performing this search. Please check the logs and try again.";Rz(yt);var zm=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(hs)}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(hs)}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(hs)}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(hs)}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(hs)}}_getColumns(){let t=new m_(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(dw(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Sc.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=fw()[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 m_(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 yt.yy.LogicValue({value:s}):r.right instanceof yt.yy.StringValue&&!ie.isEmpty(s)&&ie.autoCasterIsNumberCheck(s.toString())&&(r.right=new yt.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 yt.yy.LogicValue({value:i}):s instanceof yt.yy.StringValue&&ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new yt.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 m_(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(gz.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&&Sc.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 yt.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(dw(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(Oz)>-1&&this.tables.forEach(n=>{let i={columnid:fw()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Sc.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 bo.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(hs)}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 bo.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(hs)}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 bo.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(hs)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await bo.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(hs)}}}_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 yt.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 yt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new yt.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 yt.yy.FuncValue:new yt.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 yt.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=Sc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,A=p.length;S<A;S++){let I=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[I]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new m_(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=Sc.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(hs)}}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 bo.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 yt.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(Az.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 bo.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(hs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Ew.exports=zm});var Fr=T((pce,mw)=>{"use strict";var Nz=iO();mw.exports={searchByConditions:yz,searchByHash:Iz,searchByValue:wz,search:Cz};var Jm=us(),{transformReq:Xm}=$(),bz=hw();async function yz(e){return Xm(e),Jm.searchByConditions(e)}a(yz,"searchByConditions");async function Iz(e){Xm(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Jm.searchByHash(e))r&&t.push(r);return t}a(Iz,"searchByHash");async function wz(e){Xm(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Jm.searchByValue(e))t.push(r);return t}a(wz,"searchByValue");function Cz(e,t){try{let r=new Nz(e);r.validate(),new bz(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(Cz,"search")});var p_=T((Tce,pw)=>{"use strict";var Lz=us();pw.exports={writeTransaction:Dz};function Dz(e,t,r){return Lz.writeTransaction(e,t,r)}a(Dz,"writeTransaction")});var gw=T((Ace,Rw)=>{"use strict";var Uz=Fr(),Mz=Pn(),Sw=G(),Pz=qr(),gce=p_(),vz=require("clone"),Zm=require("alasql"),Bz=h_(),Tw=require("util"),Hz=Tw.promisify(Mz.getTableSchema),Fz=Tw.promisify(Uz.search),qz=b(),jm=$();Bz(Zm);Rw.exports={update:xz};var Gz="There was a problem performing this update. Please check the logs and try again.";async function xz({statement:e,hdb_user:t}){let r=await Hz(e.table.databaseid,e.table.tableid),s=kz(e.columns);jm.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=vz(n),c=jm.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=Zm.parse(u).statements[0],l=await Fz(_),d=Vz(s,l);return $z(o,d,t)}a(xz,"update");function kz(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Zm.compile(`SELECT ${r.expression.toString()} AS [${qz.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Sw.error(t),new Error(Gz)}}a(kz,"createUpdateRecord");function Vz(e,t){return jm.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Vz,"buildUpdateRecords");async function $z(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await Pz.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Sw.error(`Error delete new_attributes from update response: ${i}`)}return n}a($z,"updateRecords")});var Ow=T((yce,Aw)=>{var Yz=require("alasql"),Kz=Fr(),Wz=G(),Qz=us(),tp=require("util"),ep=$(),zz=b(),Jz=Pn(),Nce=p_(),bce=qr(),Xz="record",jz="successfully deleted",Zz=tp.callbackify(sJ),eJ=tp.promisify(Kz.search),tJ=tp.promisify(Jz.getTableSchema);Aw.exports={convertDelete:Zz};function rJ(e){return`${e.deleted_hashes.length} ${Xz}${e.deleted_hashes.length===1?"":"s"} ${jz}`}a(rJ,"generateReturnMessage");async function sJ({statement:e,hdb_user:t}){let r=await tJ(e.table.databaseid,e.table.tableid);ep.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=ep.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=Yz.parse(o).statements[0],u={operation:zz.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await eJ(c);let _=await Qz.deleteRecords(u);return ep.isEmptyOrZeroLength(_.message)&&(_.message=rJ(_)),delete _.txn_time,_}catch(_){throw Wz.error(_),_.hdb_code?_.message:_}}a(sJ,"convertDelete")});var ww=T((wce,Iw)=>{"use strict";var nJ=pi(),{hdb_errors:Nw}=j(),{getDatabases:bw}=(fe(),Z(Ce));Iw.exports={checkSchemaExists:yw,checkSchemaTableExists:iJ,schema_describe:nJ};async function yw(e){if(!bw()[e])return Nw.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(yw,"checkSchemaExists");async function iJ(e,t){let r=await yw(e);if(r)return r;if(!bw()[e][t])return Nw.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(iJ,"checkSchemaTableExists")});var Tc=T((Lce,oJ)=>{oJ.exports={name:"harperdb",version:"4.2.1",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test: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 g_={};Qe(g_,{addAnalyticsListener:()=>Ac,recordAction:()=>Or,recordActionBinary:()=>xr,setAnalyticsEnabled:()=>aJ});function aJ(e){Fw=e}function Or(e,t,r,s,n){if(!Fw)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=R_.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},R_.set(i,o)}S_||cJ()}function xr(e,t,r,s,n){Or(!!e,t,r,s,n)}function Ac(e){xw.push(e)}function cJ(){S_=performance.now(),setTimeout(async()=>{let e=performance.now()-S_;S_=0;let t=[],r={time:Date.now(),period:e,threadId:wi.threadId,metrics:t};for(let[n,i]of R_){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 kw){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 Vw()}let s=process.memoryUsage();t.push({metric:"memory",threadId:wi.threadId,byThread:!0,...s});for(let n of xw)n(t);R_=new Map,wi.parentPort?wi.parentPort.postMessage({type:Gw,report:r}):Kw({report:r})},qw).unref()}async function uJ(e,t=6e4){let r=np(),s=$w(),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:A}=p;for(let I of S||[]){let{path:N,method:Y,type:Q,metric:q,count:w,total:K,distribution:B,threads:x,...te}=I;w||(w=1);let be=q+(N?"-"+N:"");Y!==void 0&&(be+="-"+Y),Q!==void 0&&(be+="-"+Q);let se=o.get(be);if(se){if(se.threads){let Pe=se.threads[A];if(Pe)se=Pe;else{se.threads[A]=Object.assign({},te);continue}}se.count||(se.count=1);let Pt=se.count;for(let Pe in te){let gt=te[Pe];typeof gt=="number"&&(se[Pe]=(se[Pe]*Pt+gt*w)/(Pt+w))}se.count+=w,K>=0&&(se.total+=K,se.ratio=se.total/se.count)}else se=Object.assign({period:t},I),delete se.distribution,o.set(be,se),se.byThread&&(se.threads=[],se.threads[A]=Object.assign({},te),u.push(se));if(B){B=B.map(Pe=>typeof Pe=="number"?{value:Pe,count:1}:Pe);let Pt=c.get(be);Pt?Pt.push(...B):c.set(be,B)}}await Vw()}for(let h of u){let{path:p,method:S,type:A,metric:I,count:N,total:Y,distribution:Q,threads:q,...w}=h;q=q.filter(K=>K);for(let K in w){if(typeof h[K]!="number")continue;let B=0;for(let x of q){let te=x[K];typeof te=="number"&&(B+=te)}h[K]=B}h.count=q.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((Pe,gt)=>Pe.value>gt.value?1:-1);let A=S.count-1,I=[],N=0,Y=0,Q;for(let Pe of kw){let gt=A*Pe;for(;N<gt;)Q=p[Y++],N+=Q.count,Y===1&&N--;let Zr=p[Y>1?Y-2:0];Q||(Q=p[0]),I.push(Q.value-(Q.value-Zr.value)*(N-gt)/Q.count)}let[q,w,K,B,x,te,be,se,Pt]=I;Object.assign(S,{p1:q,p10:w,p25:K,median:B,p75:x,p90:te,p95:be,p99:se,p999:Pt})}let l;for(let[h,p]of o)p.id=(0,T_.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,T_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-Cw,active:E-Lw,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}Cw=f,Lw=E}async function Dw(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function np(){return Uw||(Uw=et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function $w(){return Mw||(Mw=et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function dJ(){Yw=!0;let e=(0,gc.get)(sp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await uJ(qw,e),await Dw(np(),lJ),await Dw($w(),_J)},Math.min(e/2,2147483647)).unref()}function Kw(e,t){let r=e.report;r.threadId=t?.threadId||wi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(Pw+=s.mean*s.count);r.totalBytesProcessed=Pw,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(vw.get(t))}),vw.set(t,t.performance.eventLoopUtilization())),r.id=(0,T_.getNextMonotonicTime)(),np().primaryStore.put(r.id,r),Yw||dJ(),fJ&&(Ww=hJ(r))}async function hJ(e){if(await Ww,!Gn){let r=(0,Rc.dirname)((0,Hw.getLogFilePath)());try{Gn=await(0,rp.open)((0,Rc.join)(r,"analytics.log"),"r+")}catch{Gn=await(0,rp.open)((0,Rc.join)(r,"analytics.log"),"w+")}}let t=(await Gn.stat()).size;if(t>EJ){let r=Buffer.alloc(t);await Gn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Gn.write(r,{position:0}),await Gn.truncate(r.length),t=r.length}await Gn.write(JSON.stringify(e)+`
6
+ `,t)}var wi,Bw,Hw,Rc,rp,T_,gc,sp,R_,Fw,S_,qw,Gw,xw,kw,Cw,Lw,Vw,lJ,_J,Uw,Mw,Yw,Pw,vw,fJ,Ww,Gn,EJ,xn=Te(()=>{wi=require("worker_threads"),Bw=M(Ze());fe();Hw=M(G()),Rc=require("path"),rp=require("fs/promises"),T_=M(hr()),gc=M(X()),sp=M(b());Ur();(0,gc.initSync)();R_=new Map,Fw=(0,gc.get)(sp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(aJ,"setAnalyticsEnabled");a(Or,"recordAction");ut.recordAnalytics=Or;a(xr,"recordActionBinary");S_=0,qw=1e3,Gw="analytics-report",xw=[];a(Ac,"addAnalyticsListener");kw=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(cJ,"sendAnalytics");a(uJ,"aggregation");Cw=0,Lw=0,Vw=a(()=>new Promise(setImmediate),"rest");a(Dw,"cleanup");lJ=36e5,_J=31536e6;a(np,"getRawAnalyticsTable");a($w,"getAnalyticsTable");(0,Bw.setChildListenerByType)(Gw,Kw);a(dJ,"startScheduledTasks");Pw=0,vw=new Map,fJ=!1;a(Kw,"recordAnalytics");EJ=1e6;a(hJ,"logAnalytics")});var _t=T(($ce,dC)=>{"use strict";var It=X();It.initSync();var mJ=require("fs-extra"),pJ=require("semver"),bc=require("path"),{monotonicFactory:SJ}=require("ulidx"),zw=SJ(),TJ=require("util"),Jw=require("child_process"),RJ=TJ.promisify(Jw.exec),gJ=Jw.spawn,ge=ke(),Oe=b(),cp=$(),kr=G(),A_=nn(),AJ=p_(),Oc=Er(),{onMessageByType:OJ}=Ze(),{isMainThread:NJ}=require("worker_threads"),{Encoder:bJ,decode:up}=require("msgpackr"),Xw=new bJ,{isEmpty:Ci}=cp,jw=Gr(),yJ=48*36e11,IJ=5e9;NJ&&OJ(Oe.ITC_EVENT_TYPES.RESTART,()=>{ms=void 0,wo=void 0});var{connect:wJ,StorageType:Zw,RetentionPolicy:eC,AckPolicy:O_,DeliverPolicy:N_,DiscardPolicy:CJ,NatsConnection:Gce,JetStreamManager:xce,JetStreamClient:kce,StringCodec:Vce,JSONCodec:LJ,createInbox:lp,headers:DJ,ErrorCode:Qw}=require("nats"),{PACKAGE_ROOT:UJ}=b(),MJ=Tc(),{recordAction:PJ}=(xn(),Z(g_)),tC=LJ(),vJ="clustering",BJ=MJ.engines[ge.NATS_SERVER_NAME],HJ=bc.join(UJ,"dependencies"),ap=bc.join(HJ,`${process.platform}-${process.arch}`,ge.NATS_BINARY_NAME),ip,op,Nc,yo,Io;dC.exports={runCommand:rC,checkNATSServerInstalled:FJ,createConnection:_p,getConnection:b_,getJetStreamManager:yc,getJetStream:sC,getNATSReferences:Xt,getServerList:GJ,createLocalStream:dp,listStreams:nC,deleteLocalStream:xJ,getServerConfig:Ic,listRemoteStreams:kJ,viewStream:VJ,viewStreamIterator:$J,publishToStream:YJ,createWorkQueueStream:KJ,addSourceToWorkStream:oC,request:QJ,removeSourceFromWorkStream:cC,reloadNATS:fp,reloadNATSHub:zJ,reloadNATSLeaf:JJ,extractServerName:aC,requestErrorHandler:XJ,updateWorkStream:jJ,createLocalTableStream:lC,createTableStreams:ZJ,purgeTableStream:_C,purgeSchemaTableStreams:e2,getStreamInfo:t2,updateLocalStreams:s2,closeConnection:qJ,getJsmServerName:wc,addNatsMsgHeader:iC,updateIngestStreamConsumer:WJ};async function rC(e,t=void 0){let{stdout:r,stderr:s}=await RJ(e,{cwd:t});if(s)throw new Error(s.replace(`
7
7
  `,""));return r.replace(`
8
- `,"")}a(jw,"runCommand");async function vJ(){try{await fJ.access(np)}catch{return!1}let e=await jw(`${np} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return EJ.eq(t,MJ)}a(vJ,"checkNATSServerInstalled");async function cp(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await Qw.getClusterUser();if(Ci(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}xr.trace("create nats connection called");let i=await bJ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return xr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(cp,"createConnection");async function BJ(){hs&&(await hs.drain(),hs=void 0,No=void 0,bo=void 0,yo=void 0)}a(BJ,"closeConnection");var hs,yo;async function O_(){return yo||(yo=cp(It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),hs=await yo),hs||yo}a(O_,"getConnection");async function Nc(){if(No)return No;Ci(hs)&&await O_();let{domain:e}=bc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return No=await hs.jetstreamManager({domain:e}),No}a(Nc,"getJetStreamManager");async function Zw(){if(bo)return bo;Ci(hs)&&await O_();let{domain:e}=bc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return bo=hs.jetstream({domain:e}),bo}a(Zw,"getJetStream");async function Xt(){let e=hs||await O_(),t=No||await Nc(),r=bo||await Zw();return{connection:e,jsm:t,js:r}}a(Xt,"getNATSReferences");async function HJ(e){let t=It.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await Qw.getClusterUser(),n=await cp(t,r,s),i=ap(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=Xw.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 ip.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(HJ,"getServerList");async function up(e,t){let{jsm:r}=await Xt(),s=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:zw.File,retention:Jw.Limits,subjects:t,discard:yJ.Old,max_msgs:n,max_bytes:i,max_age:s})}a(up,"createLocalStream");async function eC(){let{jsm:e}=await Xt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(eC,"listStreams");async function FJ(e){let{jsm:t}=await Xt();await t.streams.delete(e)}a(FJ,"deleteLocalStream");async function qJ(e){let{connection:t}=await Xt(),r=[],s=ap(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(Xw.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(qJ,"listRemoteStreams");async function GJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=Yw(),o={durable_name:i,ack_policy:g_.Explicit};t&&(o.deliver_policy=A_.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=op(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(ge.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(GJ,"viewStream");async function*xJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=Yw(),o={durable_name:i,ack_policy:g_.Explicit};t&&(o.deliver_policy=A_.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=op(_.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(ge.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(xJ,"viewStreamIterator");async function kJ(e,t,r,s){xr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=tC(s,r);let{js:n}=await Xt(),i=await yc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:Ww.encode(s);try{xr.trace(`publishToStream publishing to subject: ${o}`),DJ(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 iC(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){xr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await up(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(kJ,"publishToStream");function tC(e,t){t===void 0&&(t=wJ());let r=It.get(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ge.MSG_HEADERS.ORIGIN)&&r&&t.append(ge.MSG_HEADERS.ORIGIN,r),t}a(tC,"addNatsMsgHeader");function bc(e){e=e.toLowerCase();let t=Oc.join(It.get(Oe.CONFIG_PARAMS.ROOTPATH),UJ);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ci(sp)&&(sp={port:gc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:gc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.HUB,config_file:ge.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Oc.join(t,ge.PID_FILES.HUB),hdb_nats_path:t}),sp;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ci(rp)&&(rp={port:gc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:gc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,config_file:ge.NATS_CONFIG_FILES.LEAF_SERVER,domain:gc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,pid_file_path:Oc.join(t,ge.PID_FILES.LEAF),hdb_nats_path:t}),rp;xr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(bc,"getServerConfig");async function VJ(e){let{jsm:t}=await Xt(),r=await yc();try{await t.streams.add({name:e.stream_name,storage:zw.File,retention:Jw.Limits,max_age:OJ,max_bytes:NJ,subjects:[`${ge.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:g_.Explicit,durable_name:e.durable_name,deliver_policy:A_.All,max_ack_pending:1e4});else throw s}}a(VJ,"createWorkQueueStream");async function $J(){let{jsm:e}=await Xt();(await e.consumers.info(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(xr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name),xr.info("Adding pull consumer to ingest stream"),await e.consumers.add(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:g_.Explicit,durable_name:ge.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:A_.All,max_ack_pending:1e4}))}a($J,"updateIngestStreamConsumer");async function rC(e,t,r){let{jsm:s}=await Xt(),n=await s.streams.info(t),i=sC(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=R_.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 S=0,p=n.config.sources.length;S<p;S++)if(d=n.config.sources[S],f=S,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 S=`txn.${c}.${u}.${e}`;await s.streams.purge(t,{filter:S}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${ge.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(rC,"addSourceToWorkStream");function sC(e){return e.split(".")[1]}a(sC,"extractServerName");async function nC(e,t,r){let{jsm:s}=await Xt(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=R_.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(nC,"removeSourceFromWorkStream");async function YJ(e,t,r=2e4,s=ap()){if(!ip.isObject(t))throw new Error("data param must be an object");let n=Ww.encode(t),{connection:i}=await Xt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return op(c.data)}a(YJ,"request");function lp(e){return new Promise(async(t,r)=>{let s=SJ(np,["--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(lp,"reloadNATS");async function KJ(){let{pid_file_path:e}=bc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await lp(e)}a(KJ,"reloadNATSHub");async function WJ(){let{pid_file_path:e}=bc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await lp(e)}a(WJ,"reloadNATSLeaf");function QJ(e,t,r){let s;switch(e.code){case $w.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case $w.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(QJ,"requestErrorHandler");async function zJ(e,t){let r=t+ge.SERVER_SUFFIX.LEAF;await iC(async()=>{e.subscribe===!0?await rC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await nC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(zJ,"updateWorkStream");function iC(e){return TJ.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(iC,"exclusiveLock");async function oC(e,t){let r=R_.createNatsTableStreamName(e,t),s=await yc(),n=ZJ(e,t,s);await up(r,[n])}a(oC,"createLocalTableStream");async function JJ(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await oC(s,n)}}a(JJ,"createTableStreams");async function aC(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=R_.createNatsTableStreamName(e,t),{jsm:s}=await Xt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")xr.warn(r);else throw r}}a(aC,"purgeTableStream");async function XJ(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await aC(e,t[r])}a(XJ,"purgeSchemaTableStreams");async function jJ(e){return(await Nc()).streams.info(e)}a(jJ,"getStreamInfo");function ZJ(e,t,r){return`${ge.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(ZJ,"createSubjectName");async function yc(){if(Ac)return Ac;if(Ac=(await Nc())?.nc?.info?.server_name,Ac===void 0)throw new Error("Unable to get jetstream manager server name");return Ac}a(yc,"getJsmServerName");async function e2(){let e=await Nc(),t=await yc(),r=await eC();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=t2(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;xr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;xr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");xr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(e2,"updateLocalStreams");function t2(e){let{config:t}=e,r=!1;if(t.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=It.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(t2,"updateStreamLimits")});var I_=T((Vce,dC)=>{"use strict";var Io=Pl(),wo=Nw(),r2=G(),s2=require("uuid").v4,kce=require("clone"),b_=on(),Co=b(),n2=require("util"),kn=cs(),{handleHDBError:jt,hdb_errors:i2}=j(),{HDB_ERROR_MSGS:N_,HTTP_STATUS_CODES:Zt}=i2,{SchemaEventMsg:y_}=us(),uC=_t(),{getDatabases:o2}=(fe(),Z(Ce)),{transformReq:Lo}=$();dC.exports={createSchema:a2,createSchemaStructure:lC,createTable:c2,createTableStructure:_C,createAttribute:f2,dropSchema:u2,dropTable:l2,dropAttribute:_2,getBackup:E2};async function a2(e){let t=await lC(e);return b_.signalSchemaChange(new y_(process.pid,e.operation,e.schema)),t}a(a2,"createSchema");async function lC(e){let t=Io.schema_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Lo(e),!await wo.checkSchemaExists(e.schema))throw jt(new Error,N_.SCHEMA_EXISTS_ERR(e.schema),Zt.BAD_REQUEST,Co.LOG_LEVELS.ERROR,N_.SCHEMA_EXISTS_ERR(e.schema),!0);return await kn.createSchema(e),`database '${e.schema}' successfully created`}a(lC,"createSchemaStructure");async function c2(e){return Lo(e),e.hash_attribute=e.primary_key??e.hash_attribute,await _C(e)}a(c2,"createTable");async function _C(e){let t=Io.create_table_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Io.validateTableResidence(e.residence),!await wo.checkSchemaTableExists(e.schema,e.table))throw jt(new Error,N_.TABLE_EXISTS_ERR(e.schema,e.table),Zt.BAD_REQUEST,Co.LOG_LEVELS.ERROR,N_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:s2(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await kn.createTable(s,e);else throw jt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Zt.BAD_REQUEST);else await kn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(_C,"createTableStructure");async function u2(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Io.schema_object(e),s=t??r;if(s)throw jt(s,s.message,Zt.BAD_REQUEST,void 0,void 0,!0);Lo(e);let n=await wo.checkSchemaExists(e.schema);if(n)throw jt(new Error,n,Zt.NOT_FOUND,Co.LOG_LEVELS.ERROR,n,!0);let i=await wo.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await kn.dropSchema(e),b_.signalSchemaChange(new y_(process.pid,e.operation,e.schema)),await uC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(u2,"dropSchema");async function l2(e){let t=Io.table_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);Lo(e);let r=await wo.checkSchemaTableExists(e.schema,e.table);if(r)throw jt(new Error,r,Zt.NOT_FOUND,Co.LOG_LEVELS.ERROR,r,!0);return await kn.dropTable(e),await uC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(l2,"dropTable");async function _2(e){let t=Io.attribute_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);Lo(e);let r=await wo.checkSchemaTableExists(e.schema,e.table);if(r)throw jt(new Error,r,Zt.NOT_FOUND,Co.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw jt(new Error,"You cannot drop a hash attribute",Zt.BAD_REQUEST,void 0,void 0,!0);if(Co.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw jt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Zt.BAD_REQUEST,void 0,void 0,!0);try{return await kn.dropAttribute(e),d2(e),b_.signalSchemaChange(new y_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw r2.error(`Got an error deleting attribute ${n2.inspect(e)}.`),s}}a(_2,"dropAttribute");function d2(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(d2,"dropAttributeFromGlobal");async function f2(e){Lo(e);let t=o2()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw jt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Zt.BAD_REQUEST,void 0,void 0,!0);return await kn.createAttribute(e),b_.signalSchemaChange(new y_(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(f2,"createAttribute");function E2(e){return kn.getBackup(e)}a(E2,"getBackup")});var EC=T((Yce,fC)=>{"use strict";var{OPERATIONS_ENUM:h2}=b(),_p=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=h2.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};fC.exports=_p});var dp=T((Qce,TC)=>{"use strict";var m2=cs(),Wce=EC(),w_=$(),C_=b(),p2=X(),{handleHDBError:hC,hdb_errors:S2}=j(),{HDB_ERROR_MSGS:mC,HTTP_STATUS_CODES:pC}=S2,T2=Object.values(C_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),SC="To use this operation audit log must be enabled in harperdb-config.yaml";TC.exports=R2;async function R2(e){if(w_.isEmpty(e.schema))throw new Error(mC.SCHEMA_REQUIRED_ERR);if(w_.isEmpty(e.table))throw new Error(mC.TABLE_REQUIRED_ERR);if(!p2.get(C_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw hC(new Error,SC,pC.BAD_REQUEST,C_.LOG_LEVELS.ERROR,SC,!0);let t=w_.checkSchemaTableExist(e.schema,e.table);if(t)throw hC(new Error,t,pC.NOT_FOUND,C_.LOG_LEVELS.ERROR,t,!0);if(!w_.isEmpty(e.search_type)&&T2.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await m2.readAuditLog(e)}a(R2,"readAuditLog")});var gC=T((Jce,RC)=>{"use strict";var{OPERATIONS_ENUM:g2}=b(),fp=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=g2.GET_BACKUP,this.schema=t,this.table=r}};RC.exports=fp});var NC=T((eue,OC)=>{"use strict";var A2=cs(),jce=gC(),Ep=$(),O2=b(),Zce=X(),{handleHDBError:N2,hdb_errors:b2}=j(),{HDB_ERROR_MSGS:AC,HTTP_STATUS_CODES:y2}=b2;OC.exports=I2;async function I2(e){if(Ep.isEmpty(e.schema))throw new Error(AC.SCHEMA_REQUIRED_ERR);if(Ep.isEmpty(e.table))throw new Error(AC.TABLE_REQUIRED_ERR);let t=Ep.checkSchemaTableExist(e.schema,e.table);if(t)throw N2(new Error,t,y2.NOT_FOUND,O2.LOG_LEVELS.ERROR,t,!0);return await A2.getBackup(read_audit_log_object)}a(I2,"getBackup")});var LC=T((rue,CC)=>{var Vn=require("validate.js"),yC=qe(),Do=b(),{handleHDBError:w2,hdb_errors:C2}=j(),{HDB_ERROR_MSGS:Xe,HTTP_STATUS_CODES:L2}=C2,hp=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),D2={STRUCTURE_USER:"structure_user"},bC=Object.values(Do.ROLE_TYPES_ENUM),U2="attribute_permissions",M2="attribute_name",{PERMS_CRUD_ENUM:Uo}=Do,P2=[U2,...Object.values(Uo)],IC=[Uo.READ,Uo.INSERT,Uo.UPDATE],v2=[M2,...IC];function B2(e){let t=hp();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,wC(e,t)}a(B2,"addRoleValidation");function H2(e){let t=hp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,wC(e,t)}a(H2,"alterRoleValidation");function F2(e){let t=hp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,yC.validateObject(e,t)}a(F2,"dropRoleValidation");var q2=["operation","role","id","permission","hdb_user","hdb_auth_header"];function wC(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)q2.includes(s[o])||n.push(s[o]);n.length>0&&st(Xe.INVALID_ROLE_JSON_KEYS(n),r);let i=yC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{st(o,r)}),e.permission){let o=G2(e);o&&st(o,r),bC.forEach(c=>{e.permission[c]&&!Vn.isBoolean(e.permission[c])&&st(Xe.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(bC.indexOf(o)<0){if(o===D2.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(Xe.SCHEMA_NOT_FOUND(d),r)}continue}st(Xe.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){st(Xe.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(Xe.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{P2.includes(l)||st(Xe.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Uo).forEach(l=>{Vn.isDefined(_[l])?Vn.isBoolean(_[l])||st(Xe.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):st(Xe.TABLE_PERM_MISSING(l),r,o,u)}),Vn.isDefined(_.attribute_permissions)){if(!Vn.isArray(_.attribute_permissions)){st(Xe.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{st(Xe.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(S=>{!v2.includes(S)&&S!==Uo.DELETE&&st(Xe.INVALID_ATTR_PERM_KEY(S),r,o,u)}),!Vn.isDefined(E.attribute_name)){st(Xe.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){st(Xe.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}IC.forEach(S=>{Vn.isDefined(E[S])?Vn.isBoolean(E[S])||st(Xe.ATTR_PERM_NOT_BOOLEAN(S,h),r,o,u):st(Xe.ATTR_PERM_MISSING(S,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(Xe.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return x2(r)}a(wC,"customValidate");CC.exports={addRoleValidation:B2,alterRoleValidation:H2,dropRoleValidation:F2};function G2(e){let{operation:t,permission:r}=e;if(t===Do.OPERATIONS_ENUM.ADD_ROLE||t===Do.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 Xe.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Do.ROLE_TYPES_ENUM.SUPER_USER:Do.ROLE_TYPES_ENUM.CLUSTER_USER;return Xe.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(G2,"validateNoSUPerms");function x2(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Xe.ROLE_PERMS_ERROR,...e};return w2(new Error,s,L2.BAD_REQUEST)}else return null}a(x2,"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 gp=T((nue,PC)=>{"use strict";var DC=Fr(),UC=Hr(),k2=Ai(),pp=LC(),Sp=on(),V2=require("uuid").v4,$2=require("util"),L_=b(),Y2=$(),Tp=UC.searchByValue,K2=UC.searchByHash,W2=$2.promisify(k2.delete),Q2=Ps(),z2=go(),{hdb_errors:J2,handleHDBError:Mo}=j(),{HDB_ERROR_MSGS:MC,HTTP_STATUS_CODES:D_}=J2,{UserEventMsg:Rp}=us();PC.exports={addRole:X2,alterRole:j2,dropRole:Z2,listRoles:e4};function mp(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(mp,"scrubRoleDetails");async function X2(e){let t=pp.addRoleValidation(e);if(t)throw t;e=mp(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 Tp(r)||[])}catch(i){throw Mo(i)}if(s&&s.length>0)throw Mo(new Error,MC.ROLE_ALREADY_EXISTS(e.role),D_.CONFLICT,void 0,void 0,!0);e.id||(e.id=V2());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await DC.insert(n),Sp.signalUserChange(new Rp(process.pid)),e=mp(e),e}a(X2,"addRole");async function j2(e){let t=pp.alterRoleValidation(e);if(t)throw t;e=mp(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await DC.update(r)}catch(n){throw Mo(n)}if(s&&s?.message==="updated 0 of 1 records")throw Mo(new Error,"Invalid role id",D_.BAD_REQUEST,void 0,void 0,!0);return await Sp.signalUserChange(new Rp(process.pid)),e}a(j2,"alterRole");async function Z2(e){let t=pp.dropRoleValidation(e);if(t)throw Mo(new Error,t,D_.BAD_REQUEST,void 0,void 0,!0);let r=new z2(L_.SYSTEM_SCHEMA_NAME,L_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await K2(r));if(s.length===0)throw Mo(new Error,MC.ROLE_NOT_FOUND,D_.NOT_FOUND,void 0,void 0,!0);let n=new Q2(L_.SYSTEM_SCHEMA_NAME,L_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Tp(n)),o=!1;if(Y2.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 W2(c),Sp.signalUserChange(new Rp(process.pid)),`${s[0].role} successfully deleted`}a(Z2,"dropRole");async function e4(){return Tp({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(e4,"listRoles")});var FC=T((oue,HC)=>{"use strict";var t4=X(),$n=require("joi"),r4=qe(),vC=require("moment"),s4=require("fs-extra"),Ap=require("path"),n4=require("lodash"),Ic=b(),{LOG_LEVELS:Li}=b(),i4="YYYY-MM-DD hh:mm:ss",o4=Ap.resolve(__dirname,"../logs");HC.exports=function(e){return r4.validateBySchema(e,a4)};var a4=$n.object({from:$n.custom(BC),until:$n.custom(BC),level:$n.valid(Li.NOTIFY,Li.FATAL,Li.ERROR,Li.WARN,Li.INFO,Li.DEBUG,Li.TRACE),order:$n.valid("asc","desc"),limit:$n.number().min(1),start:$n.number().min(0),log_name:$n.custom(c4)});function BC(e,t){if(vC(e,vC.ISO_8601).format(i4)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(BC,"validateDatetime");function c4(e,t){if(n4.invert(Ic.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=t4.get(Ic.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Ic.LOG_NAMES.HDB:e,i=n===Ic.LOG_NAMES.INSTALL?Ap.join(o4,Ic.LOG_NAMES.INSTALL):Ap.join(s,n);return s4.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(c4,"validateReadLogPath")});var Np=T((cue,GC)=>{"use strict";var U_=b(),u4=G(),l4=X(),_4=FC(),Op=require("path"),qC=require("fs-extra"),{once:d4}=require("events"),{handleHDBError:f4,hdb_errors:E4}=j(),{PACKAGE_ROOT:h4}=b(),m4=Op.join(h4,"logs"),p4=1e3,S4=200;GC.exports=T4;async function T4(e){let t=_4(e);if(t)throw f4(t,t.message,E4.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=l4.get(U_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?U_.LOG_NAMES.HDB:e.log_name,n=s===U_.LOG_NAMES.INSTALL?Op.join(m4,U_.LOG_NAMES.INSTALL):Op.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?p4:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,S=0;f==="desc"&&!u&&!l&&(S=Math.max(qC.statSync(n).size-(h+5)*S4,0));let p=qC.createReadStream(n,{start:S});p.on("error",q=>{u4.error(q)});let g=0,I=[],N="",Y;p.on("data",q=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;q=N+q;let K=0,B;for(;(B=w.exec(q))&&!p.destroyed;){Y&&(Y.message=q.slice(K,B.index),W(Y));let[x,te,be]=B,se=be.split("] ["),Pt=se[0],Pe=se[1];se.splice(0,2),Y={timestamp:te,thread:Pt,level:Pe,tags:se,message:""},K=B.index+x.length}N=q.slice(K)}),p.on("end",q=>{p.destroyed||Y&&(Y.message=N.trim(),W(Y))}),p.resume();function W(q){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(q.timestamp),K=new Date(u),B=new Date(l),q.level===o&&w>=K&&w<=B&&g<E?g++:q.level===o&&w>=K&&w<=B&&(Yn(q,f,I),g++,g===h&&p.destroy());break;case(i&&c):w=new Date(q.timestamp),K=new Date(u),q.level===o&&w>=K&&g<E?g++:q.level===o&&w>=K&&(Yn(q,f,I),g++,g===h&&p.destroy());break;case(i&&_):w=new Date(q.timestamp),B=new Date(l),q.level===o&&w<=B&&g<E?g++:q.level===o&&w<=B&&(Yn(q,f,I),g++,g===h&&p.destroy());break;case(c&&_):w=new Date(q.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&g<E?g++:w>=K&&w<=B&&(Yn(q,f,I),g++,g===h&&p.destroy());break;case i:q.level===o&&g<E?g++:q.level===o&&(Yn(q,f,I),g++,g===h&&p.destroy());break;case c:w=new Date(q.timestamp),K=new Date(u),w>=K&&g<E?g++:w>=K&&g>=E&&(Yn(q,f,I),g++,g===h&&p.destroy());break;case _:w=new Date(q.timestamp),B=new Date(l),w<=B&&g<E?g++:w<=B&&g>=E&&(Yn(q,f,I),g++,g===h&&p.destroy());break;default:g<E?g++:(Yn(q,f,I),g++,g===h&&p.destroy())}}return a(W,"onLogMessage"),await d4(p,"close"),I}a(T4,"readLog");function Yn(e,t,r){t==="desc"?R4(e,r):t==="asc"?g4(e,r):r.push(e)}a(Yn,"pushLineToResult");function R4(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(R4,"insertDescending");function g4(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(g4,"insertAscending")});var P_=T((fue,$C)=>{"use strict";var bp=require("joi"),{string:M_,boolean:xC,date:A4}=bp.types(),O4=qe(),{validateSchemaExists:lue,validateTableExists:_ue,validateSchemaName:due}=Ls(),N4=b(),b4=ke(),kC=X();kC.initSync();var y4=M_.invalid(kC.get(N4.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(b4.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(),VC={operation:M_.valid("add_node","update_node"),node_name:y4,subscriptions:bp.array().items({table:M_.optional(),schema:M_.required(),subscribe:xC.required(),publish:xC.required().custom(w4),start_time:A4.iso()}).min(1).required()};function I4(e){return O4.validateBySchema(e,bp.object(VC))}a(I4,"addUpdateNodeValidator");function w4(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(w4,"checkForFalsy");$C.exports={addUpdateNodeValidator:I4,validation_schema:VC}});var KC=T((hue,YC)=>{var C4=qe(),L4={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};YC.exports=function(e){return C4.validateObject(e,L4)}});var Ip=T((mue,WC)=>{"use strict";var D4=b().OPERATIONS_ENUM,yp=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=D4.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};WC.exports=yp});var zC=T((Sue,QC)=>{"use strict";var U4={OPERATION:"operation",REFRESH:"refresh"},wp=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Cp=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};QC.exports={JWTTokens:wp,TOKEN_TYPE_ENUM:U4,JWTRSAKeys:Cp}});var Lc=T((Rue,ZC)=>{"use strict";var Cc=require("jsonwebtoken"),Lp=require("fs-extra"),Dp=$(),kr=b(),{handleHDBError:er,hdb_errors:M4}=j(),{HTTP_STATUS_CODES:tr,AUTHENTICATION_ERROR_MSGS:rr}=M4,wc=G(),JC=Wl(),Pp=qr(),P4=Fr().update,v4=Ip(),B4=on(),{UserEventMsg:H4}=us(),Kn=X();Kn.initSync();var Up=require("path"),{JWTTokens:F4,JWTRSAKeys:q4,TOKEN_TYPE_ENUM:v_}=zC(),G4=Kn.get(kr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Kn.get(kr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",x4=Kn.get(kr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Kn.get(kr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",B_="RS256",Mp;ZC.exports={createTokens:k4,validateOperationToken:$4,refreshOperationToken:V4,validateRefreshToken:jC};async function k4(e){if(Dp.isEmpty(e)||typeof e!="object")throw er(new Error,rr.INVALID_AUTH_OBJECT,tr.BAD_REQUEST,void 0,void 0,!0);if(Dp.isEmpty(e.username))throw er(new Error,rr.USERNAME_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);if(Dp.isEmpty(e.password))throw er(new Error,rr.PASSWORD_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Pp.findAndValidateUser(e.username,e.password),!t)throw er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw wc.error(f),er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}let r=await H_(),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 XC(i,r.private_key,r.passphrase),c=await Cc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:x4,algorithm:B_,subject:v_.REFRESH}),u=JC.hash(c),_=new v4(kr.SYSTEM_SCHEMA_NAME,kr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await P4(_)}catch(f){wc.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw er(new Error,rr.REFRESH_TOKEN_SAVE_FAILED,tr.INTERNAL_SERVER_ERROR);return B4.signalUserChange(new H4(process.pid)),new F4(o,c)}a(k4,"createTokens");async function XC(e,t,r){return await Cc.sign(e,{key:t,passphrase:r},{expiresIn:G4,algorithm:B_,subject:v_.OPERATION})}a(XC,"signOperationToken");async function H_(){if(Mp===void 0)try{let e=Up.join(Kn.getHdbBasePath(),kr.LICENSE_KEY_DIR_NAME,kr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Up.join(Kn.getHdbBasePath(),kr.LICENSE_KEY_DIR_NAME,kr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Up.join(Kn.getHdbBasePath(),kr.LICENSE_KEY_DIR_NAME,kr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Lp.readFile(e)).toString(),n=(await Lp.readFile(t)).toString(),i=(await Lp.readFile(r)).toString();Mp=new q4(i,n,s)}catch(e){throw wc.error(e),er(new Error,rr.NO_ENCRYPTION_KEYS,tr.INTERNAL_SERVER_ERROR)}return Mp}a(H_,"getJWTRSAKeys");async function V4(e){if(!e)throw er(new Error,rr.INVALID_BODY,tr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw er(new Error,rr.REFRESH_TOKEN_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);await jC(e.refresh_token);let t=await H_(),r=await Cc.decode(e.refresh_token);return{operation_token:await XC({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(V4,"refreshOperationToken");async function $4(e){try{let t=await H_(),r=await Cc.verify(e,t.public_key,{algorithms:B_,subject:v_.OPERATION});return await Pp.findAndValidateUser(r.username,void 0,!1)}catch(t){throw wc.warn(t),t.name&&t.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}}a($4,"validateOperationToken");async function jC(e){let t;try{let r=await H_(),s=await Cc.verify(e,r.public_key,{algorithms:B_,subject:v_.REFRESH});t=await Pp.findAndValidateUser(s.username,void 0,!1)}catch(r){throw wc.warn(r),r.name&&r.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}if(!JC.validate(t.refresh_token,e))throw er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED);return t}a(jC,"validateRefreshToken")});var vp=T((Oue,rL)=>{"use strict";var Y4=KC(),Po=require("passport"),K4=require("passport-local").Strategy,W4=require("passport-http").BasicStrategy,Q4=require("util"),z4=qr(),tL=Q4.callbackify(z4.findAndValidateUser),Aue=dr(),J4=b(),eL=Lc();Po.use(new K4(function(e,t,r){tL(e,t,r)}));Po.use(new W4(function(e,t,r){tL(e,t,r)}));Po.serializeUser(function(e,t){t(null,e)});Po.deserializeUser(function(e,t){t(null,e)});function X4(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":Po.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===J4.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?eL.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):eL.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Po.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(X4,"authorize");function j4(e,t){let r=Y4(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(j4,"checkPermissions");rL.exports={authorize:X4,checkPermissions:j4}});var vo=T((bue,sL)=>{"use strict";var Bp=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Hp=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};sL.exports={Node:Bp,NodeSubscription:Hp}});var iL=T((Iue,nL)=>{"use strict";var Z4=b().OPERATIONS_ENUM,Fp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=Z4.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};nL.exports=Fp});var Dc=T((Cue,oL)=>{"use strict";var qp=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},Gp=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)}};oL.exports={RemotePayloadObject:qp,RemotePayloadSubscription:Gp}});var cL=T((Due,aL)=>{"use strict";var xp=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}};aL.exports=xp});var _L=T((Bue,lL)=>{"use strict";var e3=cL(),Mue=ze(),uL=De(),t3=G(),{getSchemaPath:Pue,getTransactionAuditStorePath:vue}=ve(),{getDatabases:r3}=(fe(),Z(Ce));lL.exports=s3;async function s3(e){let t=new e3;try{let r=r3()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await uL.environmentDataSize(schema_path,e.name),o=await uL.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){t3.warn(`unable to stat table dbi due to ${r}`)}return t}a(s3,"lmdbGetTableSize")});var fL=T((Fue,dL)=>{"use strict";var kp=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}};dL.exports=kp});var Bo=T((kue,pL)=>{"use strict";var n3=require("fs-extra"),i3=require("path"),Gt=require("systeminformation"),Wn=G(),o3=_t(),Vp=ke(),q_=b(),a3=_L(),mL=pi(),{getThreadInfo:EL}=Ze(),Zp=X();Zp.initSync();var c3=fL(),{openEnvironment:Gue}=De(),{getSchemaPath:xue}=ve(),{database:u3}=(fe(),Z(Ce)),F_;pL.exports={getHDBProcessInfo:Wp,getNetworkInfo:zp,getDiskInfo:Qp,getMemoryInfo:Kp,getCPUInfo:Yp,getTimeInfo:$p,getSystemInformation:Jp,systemInformation:l3,getTableSize:Xp,getMetrics:jp};function $p(){return Gt.time()}a($p,"getTimeInfo");async function Yp(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Gt.cpu();l.cpu_speed=await Gt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:S,raw_currentload_user:p,cpus:g,...I}=await Gt.currentLoad();return I.cpus=[],g.forEach(N=>{let{raw_load:Y,raw_load_idle:W,raw_load_irq:q,raw_load_nice:w,raw_load_system:K,raw_load_user:B,...x}=N;I.cpus.push(x)}),l.current_load=I,l}catch(e){return Wn.error(`error in getCPUInfo: ${e}`),{}}}a(Yp,"getCPUInfo");async function Kp(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Gt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Wn.error(`error in getMemoryInfo: ${e}`),{}}}a(Kp,"getMemoryInfo");async function Wp(){let e={core:[],clustering:[]};try{let t=await Gt.processes(),r;try{r=Number.parseInt(await n3.readFile(i3.join(Zp.get(q_.CONFIG_PARAMS.ROOTPATH),q_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===q_.NODE_ERROR_CODES.ENOENT)Wn.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 Wn.error(`error in getHDBProcessInfo: ${t}`),e}}a(Wp,"getHDBProcessInfo");async function Qp(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Gt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Gt.fsStats();return e.read_write=_,e.size=await Gt.fsSize(),e}catch(t){return Wn.error(`error in getDiskInfo: ${t}`),e}}a(Qp,"getDiskInfo");async function zp(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Gt.networkInterfaceDefault(),e.latency=await Gt.inetChecksite("google.com"),(await Gt.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 Gt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Wn.error(`error in getNetworkInfo: ${t}`),e}}a(zp,"getNetworkInfo");async function Jp(){if(F_!==void 0)return F_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Gt.osInfo();e=c;let u=await Gt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,F_=e,F_}catch(t){return Wn.error(`error in getSystemInformation: ${t}`),e}}a(Jp,"getSystemInformation");async function Xp(){let e=[],t=await mL.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await a3(s));return e}a(Xp,"getTableSize");async function jp(){let e=await mL.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=u3({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){Wn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(jp,"getMetrics");async function hL(){if(Zp.get(q_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await o3.getNATSReferences(),r=await t.streams.info(Vp.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Vp.WORK_QUEUE_CONSUMER_NAMES.stream_name,Vp.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(hL,"getNatsStreamInfo");async function l3(e){let t=new c3;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await Jp(),t.time=$p(),t.cpu=await Yp(),t.memory=await Kp(),t.disk=await Qp(),t.network=await zp(),t.harperdb_processes=await Wp(),t.table_size=await Xp(),t.metrics=await jp(),t.threads=await EL(),t.replication=await hL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await Jp();break;case"time":t.time=$p();break;case"cpu":t.cpu=await Yp();break;case"memory":t.memory=await Kp();break;case"disk":t.disk=await Qp();break;case"network":t.network=await zp();break;case"harperdb_processes":t.harperdb_processes=await Wp();break;case"table_size":t.table_size=await Xp();break;case"database_metrics":case"metrics":t.metrics=await jp();break;case"threads":t.threads=await EL();break;case"replication":t.replication=await hL();break;default:break}return t}a(l3,"systemInformation")});var eS=T(($ue,SL)=>{"use strict";SL.exports={version:_3,printVersion:d3};var G_=pc();function _3(){if(G_)return G_.version}a(_3,"version");function d3(){G_&&console.log(`HarperDB Version ${G_.version}`)}a(d3,"printVersion")});var un=T((Que,AL)=>{"use strict";var f3=Fr(),tS=$(),E3=require("util"),Di=b(),TL=X();TL.initSync();var h3=vp(),RL=Hr(),{Node:Kue,NodeSubscription:Wue}=vo(),m3=go(),p3=iL(),{RemotePayloadObject:S3,RemotePayloadSubscription:T3}=Dc(),{handleHDBError:R3,hdb_errors:g3}=j(),{HTTP_STATUS_CODES:A3,HDB_ERROR_MSGS:O3}=g3,N3=Ps(),b3=Bo(),y3=eS(),{getDatabases:I3}=(fe(),Z(Ce)),w3=E3.promisify(h3.authorize),C3=RL.searchByHash,L3=RL.searchByValue;AL.exports={authHeaderToUser:D3,isEmpty:U3,getNodeRecord:M3,upsertNodeRecord:P3,buildNodePayloads:v3,checkClusteringEnabled:B3,getAllNodeRecords:H3,getSystemInfo:F3,reverseSubscription:gL};async function D3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await w3(t,null),e}a(D3,"authHeaderToUser");function U3(e){return e==null}a(U3,"isEmpty");async function M3(e){let t=new m3(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return C3(t)}a(M3,"getNodeRecord");async function P3(e){let t=new p3(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return f3.upsert(t)}a(P3,"upsertNodeRecord");function gL(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(gL,"reverseSubscription");function v3(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}=gL(c),E=I3()[u]?.[_],h=new T3(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new S3(r,t,n,s)}a(v3,"buildNodePayloads");function B3(){if(!TL.get(Di.CONFIG_PARAMS.CLUSTERING_ENABLED))throw R3(new Error,O3.CLUSTERING_NOT_ENABLED,A3.BAD_REQUEST,void 0,void 0,!0)}a(B3,"checkClusteringEnabled");async function H3(){let e=new N3(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await L3(e))}a(H3,"getAllNodeRecords");async function F3(){let e=await b3.getSystemInformation();return{hdb_version:y3.version(),node_version:e.node_version,platform:e.platform}}a(F3,"getSystemInfo")});var rS=T((Jue,LL)=>{"use strict";var x_=_t(),OL=$(),NL=ke(),bL=b(),k_=G(),yL=I_(),q3=Am(),{RemotePayloadObject:G3}=Dc(),{handleHDBError:IL,hdb_errors:x3}=j(),{HTTP_STATUS_CODES:wL}=x3,{NodeSubscription:CL}=vo();LL.exports=k3;async function k3(e,t){let r;try{r=await x_.request(`${t}.${NL.REQUEST_SUFFIX}`,new G3(bL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),k_.trace("Response from remote describe all request:",r)}catch(o){k_.error(`addNode received error from describe all request to remote node: ${o}`);let c=x_.requestErrorHandler(o,"add_node",t);throw IL(new Error,c,wL.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===NL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw IL(new Error,o,wL.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===bL.SYSTEM_SCHEMA_NAME){await x_.createLocalTableStream(c,u);let h=new CL(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=OL.doesSchemaExist(c),l=s[c]!==void 0,d=u?OL.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(k_.trace(`addNode creating schema: ${c}`),await yL.createSchema({operation:"create_schema",schema:c})),!d&&f){k_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new q3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await yL.createTable(h)}await x_.createLocalTableStream(c,u);let E=new CL(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(k3,"reviewSubscriptions")});var Y_=T((jue,ML)=>{"use strict";var{handleHDBError:V_,hdb_errors:V3}=j(),{HTTP_STATUS_CODES:$_}=V3,{addUpdateNodeValidator:$3}=P_(),Uc=G(),UL=b(),DL=ke(),Y3=$(),sS=_t(),Mc=un(),K3=X(),W3=rS(),{Node:Q3,NodeSubscription:z3}=vo(),{broadcast:J3}=Ze(),X3="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",j3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Z3=K3.get(UL.CONFIG_PARAMS.CLUSTERING_NODENAME);ML.exports=eX;async function eX(e,t=!1){Uc.trace("addNode called with:",e),Mc.checkClusteringEnabled();let r=$3(e);if(r)throw V_(r,r.message,$_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Mc.getNodeRecord(s);if(!Y3.isEmptyOrZeroLength(d))throw V_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,$_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await W3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=X3,o;let c=Mc.buildNodePayloads(n,Z3,UL.OPERATIONS_ENUM.ADD_NODE,await Mc.getSystemInfo());Uc.trace("addNode sending remote payload:",c);let u;try{u=await sS.request(`${s}.${DL.REQUEST_SUFFIX}`,c)}catch(d){Uc.error(`addNode received error from request: ${d}`);let f=sS.requestErrorHandler(d,"add_node",s);throw V_(new Error,f,$_.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===DL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw V_(new Error,d,$_.INTERNAL_SERVER_ERROR,"error",d)}Uc.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];Uc.trace("Add node updating work stream for node:",s,"subscriptions:",E),await sS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new z3(E.schema,E.table,E.publish,E.subscribe))}let l=new Q3(s,_,u.system_info);return await Mc.upsertNodeRecord(l),J3({type:"nats_update"}),i.length>0?o.message=j3:o.message=`Successfully added '${s}' to manifest`,o}a(eX,"addNode")});var iS=T((ele,BL)=>{"use strict";var{handleHDBError:K_,hdb_errors:tX}=j(),{HTTP_STATUS_CODES:W_}=tX,{addUpdateNodeValidator:rX}=P_(),Pc=G(),vL=b(),PL=ke(),sX=$(),nS=_t(),vc=un(),nX=X(),{cloneDeep:iX}=require("lodash"),oX=rS(),{NodeSubscription:aX}=vo(),{broadcast:cX}=Ze(),uX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",lX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",_X=nX.get(vL.CONFIG_PARAMS.CLUSTERING_NODENAME);BL.exports=dX;async function dX(e){Pc.trace("updateNode called with:",e),vc.checkClusteringEnabled();let t=rX(e);if(t)throw K_(t,t.message,W_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=iX(await vc.getNodeRecord(r));if(sX.isEmptyOrZeroLength(s))throw K_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,W_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await oX(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=uX,o;let c=vc.buildNodePayloads(n,_X,vL.OPERATIONS_ENUM.UPDATE_NODE,await vc.getSystemInfo());Pc.trace("updateNode sending remote payload:",c);let u;try{u=await nS.request(`${r}.${PL.REQUEST_SUFFIX}`,c)}catch(_){Pc.error(`updateNode received error from request: ${_}`);let l=nS.requestErrorHandler(_,"update_node",r);throw K_(new Error,l,W_.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===PL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw K_(new Error,_,W_.INTERNAL_SERVER_ERROR,"error",_)}Pc.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];Pc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await nS.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=lX:o.message=`Successfully updated '${r}'`,o}a(dX,"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 aX(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await vc.upsertNodeRecord(s),cX({type:"nats_update"})}a(fX,"updateNodeTable")});var xL=T((rle,GL)=>{"use strict";var qL=require("joi"),{string:HL}=qL.types(),EX=qe(),FL=b(),hX=X(),mX=ke();GL.exports=pX;function pX(e){let t=HL.invalid(hX.get(FL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(mX.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=qL.object({operation:HL.valid(FL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return EX.validateBySchema(e,r)}a(pX,"removeNodeValidator")});var z_=T((nle,WL)=>{"use strict";var{handleHDBError:kL,hdb_errors:SX}=j(),{HTTP_STATUS_CODES:VL}=SX,TX=xL(),Bc=G(),$L=un(),RX=$(),Q_=b(),YL=ke(),KL=_t(),gX=X(),{RemotePayloadObject:AX}=Dc(),{NodeSubscription:OX}=vo(),NX=uc(),bX=Ai(),{broadcast:yX}=Ze(),IX=gX.get(Q_.CONFIG_PARAMS.CLUSTERING_NODENAME);WL.exports=wX;async function wX(e){Bc.trace("removeNode called with:",e),$L.checkClusteringEnabled();let t=TX(e);if(t)throw kL(t,t.message,VL.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await $L.getNodeRecord(r);if(RX.isEmptyOrZeroLength(s))throw kL(new Error,`Node '${r}' was not found.`,VL.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new AX(Q_.OPERATIONS_ENUM.REMOVE_NODE,IX,[]),i,o=!1;try{i=await KL.request(`${r}.${YL.REQUEST_SUFFIX}`,n),Bc.trace("Remove node reply from remote node:",r,i)}catch(u){Bc.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];Bc.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new OX(l.schema,l.table,!1,!1);await KL.updateWorkStream(d,r)}let c=new NX(Q_.SYSTEM_SCHEMA_NAME,Q_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await bX.deleteRecord(c),yX({type:"nats_update"}),i?.status===YL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Bc.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(wX,"removeNode")});var JL=T((ole,zL)=>{"use strict";var QL=require("joi"),{string:CX,array:LX}=QL.types(),DX=qe(),UX=P_();zL.exports=MX;function MX(e){let t=QL.object({operation:CX.valid("configure_cluster").required(),connections:LX.items(UX.validation_schema).required()});return DX.validateBySchema(e,t)}a(MX,"configureClusterValidator")});var oS=T((cle,tD)=>{"use strict";var PX=b(),J_=G(),vX=$(),BX=z_(),HX=Y_(),XL=un(),FX=JL(),{handleHDBError:jL,hdb_errors:qX}=j(),{HTTP_STATUS_CODES:ZL}=qX,GX="Configure cluster complete.",xX="Failed to configure the cluster. Check the logs for more details.",kX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";tD.exports=VX;async function VX(e){J_.trace("configure cluster called with:",e),XL.checkClusteringEnabled();let t=FX(e);if(t)throw jL(t,t.message,ZL.BAD_REQUEST,void 0,void 0,!0);let r=await XL.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(eD(BX,{operation:PX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);J_.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(eD(HX,E,E.node_name))}let c=await Promise.allSettled(i);J_.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"&&(J_.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let S=h?.value?.result;typeof S=="string"&&S.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(vX.isEmptyOrZeroLength(u))return{message:GX,connections:_};if(l)return{message:kX,failed_nodes:u,connections:_};throw jL(new Error,xX,ZL.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(VX,"configureCluster");async function eD(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(eD,"functionWrapper")});var sD=T((lle,rD)=>{"use strict";var X_=require("joi"),$X=qe(),{validateSchemaExists:YX,validateTableExists:KX,validateSchemaName:WX}=Ls(),QX=X_.object({operation:X_.string().valid("purge_stream"),schema:X_.string().custom(YX).custom(WX).required(),table:X_.string().custom(KX).required()});function zX(e){return $X.validateBySchema(e,QX)}a(zX,"purgeStreamValidator");rD.exports=zX});var aS=T((dle,nD)=>{"use strict";var{handleHDBError:JX,hdb_errors:XX}=j(),{HTTP_STATUS_CODES:jX}=XX,ZX=sD(),ej=_t(),tj=un();nD.exports=rj;async function rj(e){let t=ZX(e);if(t)throw JX(t,t.message,jX.BAD_REQUEST,void 0,void 0,!0);tj.checkClusteringEnabled();let{schema:r,table:s}=e;return await ej.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(rj,"purgeStream")});var lS=T((Ele,lD)=>{"use strict";var uS=un(),sj=_t(),aD=X(),j_=b(),Ui=ke(),nj=$(),cS=G(),{RemotePayloadObject:ij}=Dc(),{ErrorCode:iD}=require("nats"),oD=aD.get(j_.CONFIG_PARAMS.CLUSTERING_ENABLED),cD=aD.get(j_.CONFIG_PARAMS.CLUSTERING_NODENAME);lD.exports={clusterStatus:oj,buildNodeStatus:uD};async function oj(){let e={node_name:cD,is_enabled:oD,connections:[]};if(!oD)return e;let t=await uS.getAllNodeRecords();if(nj.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(uD(t[s],e.connections));return await Promise.allSettled(r),e}a(oj,"clusterStatus");async function uD(e,t){let r=e.name,s=new ij(j_.OPERATIONS_ENUM.CLUSTER_STATUS,cD,void 0,await uS.getSystemInfo()),n,i,o=Ui.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await sj.request(Ui.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Ui.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ui.CLUSTER_STATUS_STATUSES.CLOSED,cS.error(`Error getting node status from ${r} `,n))}catch(u){cS.warn(`Error getting node status from ${r}`,u),u.code===iD.NoResponders?o=Ui.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===iD.Timeout?o=Ui.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ui.CLUSTER_STATUS_STATUSES.CLOSED}let c=new aj(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!==j_.PRE_4_0_0_VERSION&&await uS.upsertNodeRecord(u)}catch(u){cS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(uD,"buildNodeStatus");function aj(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(aj,"NodeStatusObject")});var dS=T((mle,_D)=>{"use strict";var{handleHDBError:cj,hdb_errors:uj}=j(),{HTTP_STATUS_CODES:lj}=uj,_j=_t(),dj=un(),_S=$(),Z_=require("joi"),fj=qe(),Ej=2e3,hj=Z_.object({timeout:Z_.number().min(1),connected_nodes:Z_.boolean(),routes:Z_.boolean()});_D.exports=mj;async function mj(e){dj.checkClusteringEnabled();let t=fj.validateBySchema(e,hj);if(t)throw cj(t,t.message,lj.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||_S.autoCastBoolean(s),o=n===void 0||_S.autoCastBoolean(n),c={nodes:[]},u=await _j.getServerList(r??Ej),_={};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(S=>{h.connected_nodes.includes(S.name.slice(0,-4))||h.connected_nodes.push(S.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(S=>({host:S.split(":")[0],port:_S.autoCast(S.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(mj,"clusterNetwork")});var hD=T((Sle,ED)=>{"use strict";var fS=require("joi"),dD=qe(),{route_constraints:fD}=uE();ED.exports={setRoutesValidator:pj,deleteRoutesValidator:Sj};function pj(e){let t=fS.object({server:fS.valid("hub","leaf").required(),routes:fD.required()});return dD.validateBySchema(e,t)}a(pj,"setRoutesValidator");function Sj(e){let t=fS.object({routes:fD.required()});return dD.validateBySchema(e,t)}a(Sj,"deleteRoutesValidator")});var hS=T((Rle,TD)=>{"use strict";var Mi=Er(),ES=$(),ed=b(),mD=hD(),{handleHDBError:pD,hdb_errors:Tj}=j(),{HTTP_STATUS_CODES:SD}=Tj,Rj="cluster routes successfully set",gj="cluster routes successfully deleted";TD.exports={setRoutes:Aj,getRoutes:Oj,deleteRoutes:Nj};function Aj(e){let t=mD.setRoutesValidator(e);if(t)throw pD(t,t.message,SD.BAD_REQUEST,void 0,void 0,!0);let r=Mi.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=ES.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"?Mi.updateConfigValue(ed.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Mi.updateConfigValue(ed.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:Rj,set:o,skipped:i}}a(Aj,"setRoutes");function Oj(){let e=Mi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Oj,"getRoutes");function Nj(e){let t=mD.deleteRoutesValidator(e);if(t)throw pD(t,t.message,SD.BAD_REQUEST,void 0,void 0,!0);let r=Mi.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 S=s[E];if(d.host===S.host&&d.port===S.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,S=n.length;h<S;h++){let p=n[h];if(d.host===p.host&&d.port===p.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=ES.isEmptyOrZeroLength(s)?null:s,Mi.updateConfigValue(ed.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=ES.isEmptyOrZeroLength(n)?null:n,Mi.updateConfigValue(ed.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:gj,deleted:i,skipped:o}}a(Nj,"deleteRoutes")});var gD=T((Ale,RD)=>{"use strict";var Hc=require("alasql"),Pi=require("recursive-iterator"),ms=G(),bj=$(),Fc=b(),mS=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,Ij(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=>Fc.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=>!Fc.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][Fc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=yj(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(_=>!Fc.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Hc.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 yj(e){return e.filter(t=>t[Fc.PERMS_CRUD_ENUM.READ])}a(yj,"filterReadRestrictedAttrs");function Ij(e,t,r,s,n){wj(e,t,r,s,n)}a(Ij,"interpretAST");function qc(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(qc,"addSchemaTableToMap");function wj(e,t,r,s,n){if(!e){ms.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Hc.yy.Insert?Uj(e,t,r):e instanceof Hc.yy.Select?Cj(e,t,r,s,n):e instanceof Hc.yy.Update?Lj(e,t,r):e instanceof Hc.yy.Delete?Dj(e,t,r):ms.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(wj,"getRecordAttributesAST");function Cj(e,t,r,s,n){if(!e){ms.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(bj.isEmptyOrZeroLength(i)){ms.error("No schema specified");return}e.from.forEach(c=>{qc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),qc(c.table,t,r,s,n)});let o=new Pi(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{ms.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 Pi(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{ms.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 Pi(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{ms.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 Pi(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{ms.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(Cj,"getSelectAttributes");function Lj(e,t,r){if(!e){ms.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Pi(e.columns),n=e.table.databaseid;qc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&pS(e.table.tableid,n,i.columnid,t,r)}a(Lj,"getUpdateAttributes");function Dj(e,t,r){if(!e){ms.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Pi(e.where),n=e.table.databaseid;qc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&pS(e.table.tableid,n,i.columnid,t,r)}a(Dj,"getDeleteAttributes");function Uj(e,t,r){if(!e){ms.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Pi(e.columns),n=e.into.databaseid;qc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&pS(e.into.tableid,n,i.columnid,t,r)}a(Uj,"getInsertAttributes");function pS(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(pS,"pushAttribute");RD.exports=mS});var RS=T((Nle,bD)=>{var td=Za(),AD=require("chalk"),Nr=G(),OD=require("prompt"),{promisify:Mj}=require("util"),SS=b(),Pj=require("fs-extra"),vj=require("path"),Bj=$(),Hj=eS(),ND=X();ND.initSync();var Fj=require("moment"),qj=Mj(OD.get),Gj=vj.join(ND.getHdbBasePath(),SS.LICENSE_KEY_DIR_NAME,SS.LICENSE_FILE_NAME,SS.LICENSE_FILE_NAME);bD.exports={getFingerprint:kj,setLicense:xj,parseLicense:TS,register:Vj,getRegistrationInfo:Yj};async function xj(e){if(e&&e.key&&e.company){try{Nr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await TS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Nr.error(r),Nr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(xj,"setLicense");async function kj(){let e={};try{e=await td.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Nr.error(r),Nr.error(t),new Error(r)}return e}a(kj,"getFingerprint");async function TS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Nr.info("Validating license input...");let r=td.validateLicense(e,t);if(Nr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Nr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Nr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Nr.info("writing license to disk"),await Pj.writeFile(Gj,JSON.stringify({license_key:e,company:t}))}catch(s){throw Nr.error("Failed to write License"),s}return"Registration successful."}a(TS,"parseLicense");async function Vj(){let e=await $j();return TS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Vj,"register");async function $j(){let e=await td.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:AD.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:AD.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{OD.start()}catch(s){Nr.error(s)}let r;try{r=await qj(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a($j,"promptForRegistration");async function Yj(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await td.getLicense()}catch(r){throw Nr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Bj.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Hj.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Fj.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Yj,"getRegistrationInfo")});var ID=T((yle,yD)=>{"use strict";var Kj=ke(),gS=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+Kj.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"}};yD.exports=gS});var LD=T((wle,CD)=>{"use strict";var wD=ke(),AS=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+wD.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+wD.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"}};CD.exports=AS});var UD=T((Lle,DD)=>{"use strict";var OS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};DD.exports=OS});var PD=T((Ule,MD)=>{"use strict";var Wj=ke(),NS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Wj.SERVER_SUFFIX.ADMIN,this.password=r}};MD.exports=NS});var IS=T((Ple,HD)=>{"use strict";var Ho=require("path"),nd=require("fs-extra"),Qj=ID(),zj=LD(),Jj=UD(),Xj=PD(),bS=qr(),qo=$(),sr=Er(),sd=b(),Gc=ke(),{CONFIG_PARAMS:je}=sd,xc=G(),kc=X(),vD=nn(),yS=_t(),Fo="clustering",jj=1e4,BD=5;HD.exports={generateNatsConfig:eZ,removeNatsConfig:tZ,getHubConfigPath:Zj};function Zj(){let e=kc.get(je.ROOTPATH);return Ho.join(e,Fo,Gc.NATS_CONFIG_FILES.HUB_SERVER)}a(Zj,"getHubConfigPath");async function eZ(e=!1,t=void 0){kc.initSync();let r=kc.get(je.ROOTPATH),s=Ho.join(r,Fo,Gc.PID_FILES.HUB),n=Ho.join(r,Fo,Gc.PID_FILES.LEAF),i=sr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Ho.join(r,Fo,Gc.NATS_CONFIG_FILES.HUB_SERVER),c=Ho.join(r,Fo,Gc.NATS_CONFIG_FILES.LEAF_SERVER),u=sr.getConfigFromFile(je.CLUSTERING_TLS_CERTIFICATE),_=sr.getConfigFromFile(je.CLUSTERING_TLS_PRIVATEKEY),l=sr.getConfigFromFile(je.CLUSTERING_TLS_CERT_AUTH),d=sr.getConfigFromFile(je.CLUSTERING_TLS_INSECURE),f=sr.getConfigFromFile(je.CLUSTERING_TLS_VERIFY),E=sr.getConfigFromFile(je.CLUSTERING_NODENAME),h=sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await yS.checkNATSServerInstalled()||id("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await bS.listUsers(),p=sr.getConfigFromFile(je.CLUSTERING_USER),g=await bS.getClusterUser();(qo.isEmpty(g)||g.active!==!0)&&id(`Invalid cluster user '${p}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await rd(je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await rd(je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await rd(je.CLUSTERING_HUBSERVER_NETWORK_PORT),await rd(je.CLUSTERING_LEAFSERVER_NETWORK_PORT));let I=[],N=[];for(let[x,te]of S.entries())te.role.role===sd.ROLE_TYPES_ENUM.CLUSTER_USER&&te.active&&(I.push(new Xj(te.username,vD.decrypt(te.hash))),N.push(new Jj(te.username,vD.decrypt(te.hash))));let Y=[],{hub_routes:W}=sr.getClusteringRoutes();if(!qo.isEmptyOrZeroLength(W))for(let x of W)Y.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${x.host}:${x.port}`);let q=new Qj(sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_CLUSTER_NAME),sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,I,N);l==null&&(delete q.tls.ca_file,delete q.leafnodes.tls.ca_file),t=qo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===sd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await nd.writeJson(o,q),xc.trace(`Hub server config written to ${o}`));let w=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new zj(sr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],I,N,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===sd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await nd.writeJson(c,B),xc.trace(`Leaf server config written to ${c}`))}a(eZ,"generateNatsConfig");async function rd(e){let t=kc.get(e);return qo.isEmpty(t)&&id(`port undefined for '${e}'`),await qo.isPortTaken(t)&&id(`'${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(rd,"isPortAvailable");function id(e){let t=`Error generating clustering config: ${e}`;xc.error(t),console.error(t),process.exit(1)}a(id,"generateNatsConfigError");async function tZ(e){let{port:t,config_file:r}=yS.getServerConfig(e),{username:s,decrypt_hash:n}=await bS.getClusterUser(),i=0,o=2e3;for(;i<BD;){try{let _=await yS.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){xc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=BD)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 qo.async_set_timeout(o*(i*2))}let c="0".repeat(jj),u=Ho.join(kc.get(je.ROOTPATH),Fo,r);await nd.writeFile(u,c),await nd.remove(u),xc.notify(e,"started.")}a(tZ,"removeNatsConfig")});var ud=T((Ble,$D)=>{"use strict";var rZ=require("minimist"),{isMainThread:LS,parentPort:GD}=require("worker_threads"),Ve=b(),{PROCESS_DESCRIPTORS_VALIDATE:Vc}=Ve,Fs=G(),DS=$(),od=IS(),Go=_t(),wS=ke(),xD=Er(),qs=MS(),FD=Bo(),sZ=jf(),{restartWorkers:ad,onMessageByType:nZ}=Ze(),{handleHDBError:iZ,hdb_errors:oZ}=j(),{HTTP_STATUS_CODES:aZ}=oZ,cd=X();cd.initSync();var $c=`Restarting HarperDB. This may take up to ${Ve.RESTART_TIMEOUT_MS/1e3} seconds.`,cZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",qD="Clustering is not enabled so cannot be restarted",uZ="Invalid service",xo,Vr;$D.exports={restart:kD,restartService:US};LS&&nZ(Ve.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?US({service:e.workerType}):kD({operation:"restart"})});async function kD(e){Vr=Object.keys(e).length===0,xo=await qs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR);let t=rZ(process.argv);if(t.service){await US(t);return}if(Vr&&!xo){console.error(cZ);return}if(Vr&&console.log($c),xo){qs.enterPM2Mode(),Fs.notify($c);let r=sZ(Object.keys(Ve.CONFIG_PARAM_MAP),!0);return DS.isEmptyOrZeroLength(Object.keys(r))||xD.updateConfigValue(void 0,void 0,r,!0,!0),_Z(),$c}return LS?(Fs.notify($c),setTimeout(()=>{ad()},50)):GD.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART}),$c}a(kD,"restart");async function US(e){let{service:t}=e;if(Ve.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw iZ(new Error,uZ,aZ.BAD_REQUEST,void 0,void 0,!0);if(xo=await qs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR),!LS)return GD.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Vc.clustering:if(!cd.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=qD;break}Vr&&console.log("Restarting clustering"),Fs.notify("Restarting clustering"),await VD();break;case Vc.clustering_config:case Vc["clustering config"]:if(!cd.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=qD;break}Vr&&console.log("Restarting clustering_config"),Fs.notify("Restarting clustering_config"),await qs.reloadClustering();break;case"custom_functions":case"custom functions":case Vc.harperdb:case Vc.http_workers:if(Vr&&!xo){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}Vr&&console.log("Restarting http_workers"),Fs.notify("Restarting http_workers"),Vr?await qs.restart(Ve.HDB_PROC_DESCRIPTOR):setTimeout(()=>{ad("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Fs.error(r),Vr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(US,"restartService");async function lZ(){await Go.publishToStream(`${wS.SUBJECT_PREFIXES.TXN}.${wS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,wS.WORK_QUEUE_CONSUMER_NAMES.stream_name,Go.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(lZ,"postDummyNatsMsg");async function _Z(){await VD(),await qs.restart(Ve.HDB_PROC_DESCRIPTOR),await DS.async_set_timeout(2e3),cd.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await CS(),Vr&&(await Go.closeConnection(),process.exit(0))}a(_Z,"restartPM2Mode");async function VD(){if(!xD.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await FD.getHDBProcessInfo()).clustering.length===0)Fs.trace("Clustering not running, restart will start clustering services"),await od.generateNatsConfig(!0),await qs.startClusteringProcesses(),await qs.startClusteringThreads(),await CS(),Vr&&await Go.closeConnection();else{await lZ(),await od.generateNatsConfig(!0),xo?(Fs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await qs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await qs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await FD.getHDBProcessInfo()).clustering.forEach(n=>{Fs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await DS.async_set_timeout(3e3),await CS(),await Go.updateLocalStreams(),Vr&&await Go.closeConnection(),Fs.trace("Restart clustering restarting ingest and reply service threads");let t=ad(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=ad(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(VD,"restartClustering");async function CS(){await od.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await od.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(CS,"removeNatsConfig")});var tU=T((qle,eU)=>{"use strict";var Fle=require("lodash"),nr=b(),{handleHDBError:YD,hdb_errors:dZ}=j(),{HDB_ERROR_MSGS:fZ,HTTP_STATUS_CODES:EZ}=dZ,PS=G();eU.exports={getRolePermissions:mZ};var vi=Object.create(null),hZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),zD=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),JD=a((e=!1,t=!1,r=!1,s=!1)=>({[nr.PERMS_CRUD_ENUM.READ]:e,[nr.PERMS_CRUD_ENUM.INSERT]:t,[nr.PERMS_CRUD_ENUM.UPDATE]:r,[nr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),vS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...JD(t,r,s,n)}),"table_perms_template"),KD=a((e,t=JD())=>({attribute_name:e,describe:ZD(t),[Yc]:t[Yc],[BS]:t[BS],[HS]:t[HS]}),"attr_perms_template"),WD=a((e,t=!1)=>({attribute_name:e,describe:t,[Yc]:t}),"timestamp_attr_perms_template"),{READ:Yc,INSERT:BS,UPDATE:HS}=nr.PERMS_CRUD_ENUM,XD=Object.values(nr.PERMS_CRUD_ENUM),jD=[Yc,BS,HS];function mZ(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[nr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(vi[t]&&vi[t].key===s)return vi[t].perms;let n=pZ(e,r);return vi[t]?vi[t].key=s:vi[t]=hZ(s),vi[t].perms=n,n}catch(r){if(!e[nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<nr.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 PS.error(s),PS.debug(r),YD(new Error,fZ.OUTDATED_PERMS_TRANSLATION_ERROR,EZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
9
- ${r.stack}`;throw PS.error(s),YD(new Error)}}}a(mZ,"getRolePermissions");function pZ(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[nr.SYSTEM_SCHEMA_NAME]=s[nr.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]=SZ(t[i]);return}r[i]=zD(),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],_=TZ(c,u);r[i].describe||XD.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=vS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=vS()})}),r}a(pZ,"translateRolePermissions");function SZ(e){let t=zD(!0);return Object.keys(e).forEach(r=>{t.tables[r]=vS(!0,!0,!0,!0,!0)}),t}a(SZ,"createStructureUserPermissions");function TZ(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 nr.TIME_STAMP_NAMES.includes(d)&&(f=WD(d,l[Yc])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=KD(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=ZD(l),n.attribute_permissions.push(l),c||RZ(l,u)}else if(_!==o){let l;nr.TIME_STAMP_NAMES.includes(_)?l=WD(_):l=KD(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=QD(n),n}else return e.describe=QD(e),e}a(TZ,"getTableAttrPerms");function QD(e){return XD.filter(t=>e[t]).length>0}a(QD,"getSchemaTableDescribePerm");function ZD(e){return jD.filter(t=>e[t]).length>0}a(ZD,"getAttributeDescribePerm");function RZ(e,t){jD.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(RZ,"checkForHashPerms")});var rU={};Qe(rU,{Resources:()=>ld,keyArrayToString:()=>ko,resetResources:()=>gZ,resources:()=>Qn});function gZ(){return Qn=new ld}function ko(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var ld,Qn,Kc=Te(()=>{di();ld=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(gZ,"resetResources");a(ko,"keyArrayToString")});var Bi,FS=Te(()=>{Bi=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 Wc={};Qe(Wc,{authentication:()=>lU,bypassAuth:()=>wZ,login:()=>LZ,logout:()=>DZ,start:()=>CZ});function wZ(){uU=!0}async function lU(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let E=e.isOperationsServer?bZ?NZ:[]:OZ?AZ:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Bi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return _d&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),_d&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(_d){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let S=n.indexOf(";",h),p=n.indexOf("=",h);c=n.slice(p+1,S===-1?n.length:S),u=await nU.get(c)}e.session=u||(u={})}e.user=null;let _=a((E,h,S)=>{let p=new fd.AuthAuditLog(E,h,wt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);p.auth_strategy=S,c&&(p.session_id=c),r.referer&&(p.referer=r.referer),r.origin&&(p.origin=r.origin),h===wt.AUTH_AUDIT_STATUS.SUCCESS?sU.notify(p):sU.error(p)},"authAuditLog"),l;if(s){if(l=Hi.get(s),!l){let[E,h]=s.split(" "),S,p;try{switch(E){case"Basic":[S,p]=atob(h).split(":"),l=S||p?await ut.getUser(S,p):null;break;case"Bearer":try{l=await(0,dd.validateOperationToken)(h)}catch(g){if(g.message==="invalid token")try{return await(0,dd.validateRefreshToken)(h),{status:-1}}catch{throw g}}break}}catch(g){return IZ&&(Hi.get(h)||(Hi.set(h,h),_(S,wt.AUTH_AUDIT_STATUS.FAILURE,E))),{status:401,body:zn({error:g.message},e)}}Hi.set(s,l),yZ&&_(l.username,wt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=l}else u?.user?e.user=await ut.getUser(u.user,null,!1):uU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,oU.getSuperUser)());_d&&(e.session.update=function(E){if(!c){c=(0,aU.v4)();let S=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${c}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",S):d?.headers?.set&&d.headers.set("Set-Cookie",S)}return E.id=c,nU.put(E)},e.login=async function(E,h){e.user=await ut.getUser(E,h),e.session.update({user:e.user.username})},(l&&!u||u?.user?.username!==l?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let d=await t(e);if(!d)return d;d.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Qn.loginPath?(d.status=302,d.headers.set("Location",Qn.loginPath(e))):d.headers.set("WWW-Authenticate","Basic"));let f=o.length;if(f>0){let E=d.headers;E||(d.headers=E=new Bi);for(let h=0;h<f;){let S=o[h++];E.set(S,o[h++])}}return o=null,d}function CZ({server:e,port:t}){e.request(lU,{port:t||"all"}),iU||(iU=!0,setInterval(()=>{Hi=new Map},$r.get(wt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),cU.user.addListener(()=>{Hi=new Map}))}async function LZ(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 DZ(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var oU,dd,aU,$r,wt,fd,cU,sU,AZ,OZ,NZ,bZ,nU,_d,uU,yZ,IZ,Hi,iU,Ed=Te(()=>{oU=U(qr());Ur();Kc();dd=U(Lc());fe();aU=require("uuid"),$r=U(X()),wt=U(b()),fd=U(G()),cU=U(tc());FS();Vo();sU=(0,fd.loggerWithTag)("auth-event");$r.initSync();AZ=$r.get(wt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),OZ=$r.get(wt.CONFIG_PARAMS.HTTP_CORS),NZ=$r.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),bZ=$r.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),nU=et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),_d=$r.get(wt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,uU=$r.get(wt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,yZ=$r.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,IZ=$r.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Hi=new Map;ut.onInvalidatedUser(()=>{Hi=new Map});a(wZ,"bypassAuth");a(lU,"authentication");a(CZ,"start");a(LZ,"login");a(DZ,"logout")});var pU=T((Xle,mU)=>{"use strict";var pe=require("joi"),_U=require("fs-extra"),dU=require("path"),_n=qe(),fU=X(),EU=b(),hU=G(),{hdb_errors:UZ}=j(),{HDB_ERROR_MSGS:xt}=UZ,ln=/^[a-zA-Z0-9-_]+$/;mU.exports={getDropCustomFunctionValidator:PZ,setCustomFunctionValidator:vZ,addComponentValidator:qZ,dropCustomFunctionProjectValidator:GZ,packageComponentValidator:xZ,deployComponentValidator:kZ,setComponentFileValidator:BZ,getComponentFileValidator:FZ,dropComponentFileValidator:HZ};function hd(e,t,r){try{let s=fU.get(EU.CONFIG_PARAMS.COMPONENTSROOT),n=dU.join(s,t);return _U.existsSync(n)?e?t:r.message(xt.PROJECT_EXISTS):e?r.message(xt.NO_PROJECT):t}catch(s){return hU.error(s),r.message(xt.VALIDATION_ERR)}}a(hd,"checkProjectExists");function Qc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Qc,"checkFilePath");function MZ(e,t,r,s){try{let n=fU.get(EU.CONFIG_PARAMS.COMPONENTSROOT),i=dU.join(n,e,t,r+".js");return _U.existsSync(i)?r:s.message(xt.NO_FILE)}catch(n){return hU.error(n),s.message(xt.VALIDATION_ERR)}}a(MZ,"checkFileExists");function PZ(e){let t=pe.object({project:pe.string().pattern(ln).custom(hd.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),type:pe.string().valid("helpers","routes").required(),file:pe.string().pattern(ln).custom(MZ.bind(null,e.project,e.type)).custom(Qc).required().messages({"string.pattern.base":xt.BAD_FILE_NAME})});return _n.validateBySchema(e,t)}a(PZ,"getDropCustomFunctionValidator");function vZ(e){let t=pe.object({project:pe.string().pattern(ln).custom(hd.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),type:pe.string().valid("helpers","routes").required(),file:pe.string().custom(Qc).required(),function_content:pe.string().required()});return _n.validateBySchema(e,t)}a(vZ,"setCustomFunctionValidator");function BZ(e){let t=pe.object({project:pe.string().pattern(ln).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),file:pe.string().custom(Qc).required(),payload:pe.string().allow("").optional(),encoding:pe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return _n.validateBySchema(e,t)}a(BZ,"setComponentFileValidator");function HZ(e){let t=pe.object({project:pe.string().pattern(ln).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),file:pe.string().custom(Qc).optional()});return _n.validateBySchema(e,t)}a(HZ,"dropComponentFileValidator");function FZ(e){let t=pe.object({project:pe.string().required(),file:pe.string().custom(Qc).required(),encoding:pe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return _n.validateBySchema(e,t)}a(FZ,"getComponentFileValidator");function qZ(e){let t=pe.object({project:pe.string().pattern(ln).custom(hd.bind(null,!1)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME})});return _n.validateBySchema(e,t)}a(qZ,"addComponentValidator");function GZ(e){let t=pe.object({project:pe.string().pattern(ln).custom(hd.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME})});return _n.validateBySchema(e,t)}a(GZ,"dropCustomFunctionProjectValidator");function xZ(e){let t=pe.object({project:pe.string().pattern(ln).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),skip_node_modules:pe.boolean()});return _n.validateBySchema(e,t)}a(xZ,"packageComponentValidator");function kZ(e){let t=pe.object({project:pe.string().pattern(ln).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),payload:pe.string().optional().messages({"string.pattern.base":xt.BAD_PACKAGE}),package:pe.string().optional()});return _n.validateBySchema(e,t)}a(kZ,"deployComponentValidator")});var Td=T((Zle,NU)=>{"use strict";var md=require("joi"),pd=require("path"),SU=require("fs-extra"),{exec:VZ}=require("child_process"),$Z=require("util"),TU=$Z.promisify(VZ),zc=b(),{handleHDBError:$o,hdb_errors:YZ}=j(),{HTTP_STATUS_CODES:Yo}=YZ,Jc=X(),KZ=qe(),Ko=G();Jc.initSync();var qS=Jc.get(zc.CONFIG_PARAMS.COMPONENTSROOT),RU="npm install --omit=dev --json",WZ=`${RU} --dry-run`;NU.exports={installModules:XZ,auditModules:jZ,installAllRootModules:QZ,uninstallRootModule:zZ,linkHarperdb:JZ};async function QZ(e=!1){await Sd(),await Xc(e?"npm install --ignore-scripts":"npm install",Jc.get(zc.CONFIG_PARAMS.ROOTPATH))}a(QZ,"installAllRootModules");async function zZ(e){await Xc(`npm uninstall ${e}`,Jc.get(zc.CONFIG_PARAMS.ROOTPATH))}a(zZ,"uninstallRootModule");async function JZ(){await Sd(),await Xc(`npm link ${zc.PACKAGE_ROOT}`,Jc.get(zc.CONFIG_PARAMS.ROOTPATH))}a(JZ,"linkHarperdb");async function Xc(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await TU(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
10
- `,""))}return s&&!s.includes("Debugger listening")&&Ko.error("Error running NPM command:",e,s),Ko.trace(r,s),r.replace(`
11
- `,"")}a(Xc,"runCommand");async function XZ(e){Ko.info(`starting installModules for request: ${e}`);let t=OU(e);if(t)throw $o(t,t.message,Yo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?WZ:RU;await Sd(),await AU(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 _=pd.join(qS,u),l,d=null;try{let{stdout:f,stderr:E}=await TU(n,{cwd:_});l=f?f.replace(`
8
+ `,"")}a(rC,"runCommand");async function FJ(){try{await mJ.access(ap)}catch{return!1}let e=await rC(`${ap} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return pJ.eq(t,BJ)}a(FJ,"checkNATSServerInstalled");async function _p(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await jw.getClusterUser();if(Ci(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}kr.trace("create nats connection called");let i=await wJ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return kr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(_p,"createConnection");async function qJ(){ms&&(await ms.drain(),ms=void 0,yo=void 0,Io=void 0,wo=void 0)}a(qJ,"closeConnection");var ms,wo;async function b_(){return wo||(wo=_p(It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ms=await wo),ms||wo}a(b_,"getConnection");async function yc(){if(yo)return yo;Ci(ms)&&await b_();let{domain:e}=Ic(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return yo=await ms.jetstreamManager({domain:e}),yo}a(yc,"getJetStreamManager");async function sC(){if(Io)return Io;Ci(ms)&&await b_();let{domain:e}=Ic(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Io=ms.jetstream({domain:e}),Io}a(sC,"getJetStream");async function Xt(){let e=ms||await b_(),t=yo||await yc(),r=Io||await sC();return{connection:e,jsm:t,js:r}}a(Xt,"getNATSReferences");async function GJ(e){let t=It.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await jw.getClusterUser(),n=await _p(t,r,s),i=lp(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=tC.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 cp.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(GJ,"getServerList");async function dp(e,t){let{jsm:r}=await Xt(),s=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Zw.File,retention:eC.Limits,subjects:t,discard:CJ.Old,max_msgs:n,max_bytes:i,max_age:s})}a(dp,"createLocalStream");async function nC(){let{jsm:e}=await Xt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(nC,"listStreams");async function xJ(e){let{jsm:t}=await Xt();await t.streams.delete(e)}a(xJ,"deleteLocalStream");async function kJ(e){let{connection:t}=await Xt(),r=[],s=lp(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(tC.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(kJ,"listRemoteStreams");async function VJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=zw(),o={durable_name:i,ack_policy:O_.Explicit};t&&(o.deliver_policy=N_.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=up(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(ge.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(VJ,"viewStream");async function*$J(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=zw(),o={durable_name:i,ack_policy:O_.Explicit};t&&(o.deliver_policy=N_.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=up(_.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(ge.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a($J,"viewStreamIterator");async function YJ(e,t,r,s){kr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=iC(s,r);let{js:n}=await Xt(),i=await wc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:Xw.encode(s);try{kr.trace(`publishToStream publishing to subject: ${o}`),PJ(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 uC(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){kr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await dp(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(YJ,"publishToStream");function iC(e,t){t===void 0&&(t=DJ());let r=It.get(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ge.MSG_HEADERS.ORIGIN)&&r&&t.append(ge.MSG_HEADERS.ORIGIN,r),t}a(iC,"addNatsMsgHeader");function Ic(e){e=e.toLowerCase();let t=bc.join(It.get(Oe.CONFIG_PARAMS.ROOTPATH),vJ);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ci(op)&&(op={port:Oc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Oc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.HUB,config_file:ge.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:bc.join(t,ge.PID_FILES.HUB),hdb_nats_path:t}),op;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ci(ip)&&(ip={port:Oc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Oc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,config_file:ge.NATS_CONFIG_FILES.LEAF_SERVER,domain:Oc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,pid_file_path:bc.join(t,ge.PID_FILES.LEAF),hdb_nats_path:t}),ip;kr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ic,"getServerConfig");async function KJ(e){let{jsm:t}=await Xt(),r=await wc();try{await t.streams.add({name:e.stream_name,storage:Zw.File,retention:eC.Limits,max_age:yJ,max_bytes:IJ,subjects:[`${ge.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:O_.Explicit,durable_name:e.durable_name,deliver_policy:N_.All,max_ack_pending:1e4});else throw s}}a(KJ,"createWorkQueueStream");async function WJ(){let{jsm:e}=await Xt();(await e.consumers.info(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(kr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name),kr.info("Adding pull consumer to ingest stream"),await e.consumers.add(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:O_.Explicit,durable_name:ge.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:N_.All,max_ack_pending:1e4}))}a(WJ,"updateIngestStreamConsumer");async function oC(e,t,r){let{jsm:s}=await Xt(),n=await s.streams.info(t),i=aC(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=A_.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:`${ge.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(oC,"addSourceToWorkStream");function aC(e){return e.split(".")[1]}a(aC,"extractServerName");async function cC(e,t,r){let{jsm:s}=await Xt(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=A_.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(cC,"removeSourceFromWorkStream");async function QJ(e,t,r=2e4,s=lp()){if(!cp.isObject(t))throw new Error("data param must be an object");let n=Xw.encode(t),{connection:i}=await Xt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return up(c.data)}a(QJ,"request");function fp(e){return new Promise(async(t,r)=>{let s=gJ(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(fp,"reloadNATS");async function zJ(){let{pid_file_path:e}=Ic(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await fp(e)}a(zJ,"reloadNATSHub");async function JJ(){let{pid_file_path:e}=Ic(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await fp(e)}a(JJ,"reloadNATSLeaf");function XJ(e,t,r){let s;switch(e.code){case Qw.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case Qw.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(XJ,"requestErrorHandler");async function jJ(e,t){let r=t+ge.SERVER_SUFFIX.LEAF;await uC(async()=>{e.subscribe===!0?await oC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await cC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(jJ,"updateWorkStream");function uC(e){return AJ.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(uC,"exclusiveLock");async function lC(e,t){let r=A_.createNatsTableStreamName(e,t),s=await wc(),n=r2(e,t,s);await dp(r,[n])}a(lC,"createLocalTableStream");async function ZJ(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(ZJ,"createTableStreams");async function _C(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=A_.createNatsTableStreamName(e,t),{jsm:s}=await Xt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")kr.warn(r);else throw r}}a(_C,"purgeTableStream");async function e2(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await _C(e,t[r])}a(e2,"purgeSchemaTableStreams");async function t2(e){return(await yc()).streams.info(e)}a(t2,"getStreamInfo");function r2(e,t,r){return`${ge.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(r2,"createSubjectName");async function wc(){if(Nc)return Nc;if(Nc=(await yc())?.nc?.info?.server_name,Nc===void 0)throw new Error("Unable to get jetstream manager server name");return Nc}a(wc,"getJsmServerName");async function s2(){let e=await yc(),t=await wc(),r=await nC();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=n2(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;kr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;kr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");kr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(s2,"updateLocalStreams");function n2(e){let{config:t}=e,r=!1;if(t.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=It.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(n2,"updateStreamLimits")});var C_=T((Wce,mC)=>{"use strict";var Co=Bl(),Lo=ww(),i2=G(),o2=require("uuid").v4,Kce=require("clone"),I_=on(),Do=b(),a2=require("util"),kn=us(),{handleHDBError:jt,hdb_errors:c2}=j(),{HDB_ERROR_MSGS:y_,HTTP_STATUS_CODES:Zt}=c2,{SchemaEventMsg:w_}=ls(),fC=_t(),{getDatabases:u2}=(fe(),Z(Ce)),{transformReq:Uo}=$();mC.exports={createSchema:l2,createSchemaStructure:EC,createTable:_2,createTableStructure:hC,createAttribute:m2,dropSchema:d2,dropTable:f2,dropAttribute:E2,getBackup:p2};async function l2(e){let t=await EC(e);return I_.signalSchemaChange(new w_(process.pid,e.operation,e.schema)),t}a(l2,"createSchema");async function EC(e){let t=Co.schema_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Uo(e),!await Lo.checkSchemaExists(e.schema))throw jt(new Error,y_.SCHEMA_EXISTS_ERR(e.schema),Zt.BAD_REQUEST,Do.LOG_LEVELS.ERROR,y_.SCHEMA_EXISTS_ERR(e.schema),!0);return await kn.createSchema(e),`database '${e.schema}' successfully created`}a(EC,"createSchemaStructure");async function _2(e){return Uo(e),e.hash_attribute=e.primary_key??e.hash_attribute,await hC(e)}a(_2,"createTable");async function hC(e){let t=Co.create_table_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Co.validateTableResidence(e.residence),!await Lo.checkSchemaTableExists(e.schema,e.table))throw jt(new Error,y_.TABLE_EXISTS_ERR(e.schema,e.table),Zt.BAD_REQUEST,Do.LOG_LEVELS.ERROR,y_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:o2(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await kn.createTable(s,e);else throw jt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Zt.BAD_REQUEST);else await kn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(hC,"createTableStructure");async function d2(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Co.schema_object(e),s=t??r;if(s)throw jt(s,s.message,Zt.BAD_REQUEST,void 0,void 0,!0);Uo(e);let n=await Lo.checkSchemaExists(e.schema);if(n)throw jt(new Error,n,Zt.NOT_FOUND,Do.LOG_LEVELS.ERROR,n,!0);let i=await Lo.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await kn.dropSchema(e),I_.signalSchemaChange(new w_(process.pid,e.operation,e.schema)),await fC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(d2,"dropSchema");async function f2(e){let t=Co.table_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);Uo(e);let r=await Lo.checkSchemaTableExists(e.schema,e.table);if(r)throw jt(new Error,r,Zt.NOT_FOUND,Do.LOG_LEVELS.ERROR,r,!0);return await kn.dropTable(e),await fC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(f2,"dropTable");async function E2(e){let t=Co.attribute_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);Uo(e);let r=await Lo.checkSchemaTableExists(e.schema,e.table);if(r)throw jt(new Error,r,Zt.NOT_FOUND,Do.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw jt(new Error,"You cannot drop a hash attribute",Zt.BAD_REQUEST,void 0,void 0,!0);if(Do.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw jt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Zt.BAD_REQUEST,void 0,void 0,!0);try{return await kn.dropAttribute(e),h2(e),I_.signalSchemaChange(new w_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw i2.error(`Got an error deleting attribute ${a2.inspect(e)}.`),s}}a(E2,"dropAttribute");function h2(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(h2,"dropAttributeFromGlobal");async function m2(e){Uo(e);let t=u2()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw jt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Zt.BAD_REQUEST,void 0,void 0,!0);return await kn.createAttribute(e),I_.signalSchemaChange(new w_(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(m2,"createAttribute");function p2(e){return kn.getBackup(e)}a(p2,"getBackup")});var SC=T((zce,pC)=>{"use strict";var{OPERATIONS_ENUM:S2}=b(),Ep=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=S2.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};pC.exports=Ep});var hp=T((jce,OC)=>{"use strict";var T2=us(),Xce=SC(),L_=$(),D_=b(),R2=X(),{handleHDBError:TC,hdb_errors:g2}=j(),{HDB_ERROR_MSGS:RC,HTTP_STATUS_CODES:gC}=g2,A2=Object.values(D_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),AC="To use this operation audit log must be enabled in harperdb-config.yaml";OC.exports=O2;async function O2(e){if(L_.isEmpty(e.schema))throw new Error(RC.SCHEMA_REQUIRED_ERR);if(L_.isEmpty(e.table))throw new Error(RC.TABLE_REQUIRED_ERR);if(!R2.get(D_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw TC(new Error,AC,gC.BAD_REQUEST,D_.LOG_LEVELS.ERROR,AC,!0);let t=L_.checkSchemaTableExist(e.schema,e.table);if(t)throw TC(new Error,t,gC.NOT_FOUND,D_.LOG_LEVELS.ERROR,t,!0);if(!L_.isEmpty(e.search_type)&&A2.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await T2.readAuditLog(e)}a(O2,"readAuditLog")});var bC=T((eue,NC)=>{"use strict";var{OPERATIONS_ENUM:N2}=b(),mp=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=N2.GET_BACKUP,this.schema=t,this.table=r}};NC.exports=mp});var wC=T((nue,IC)=>{"use strict";var b2=us(),rue=bC(),pp=$(),y2=b(),sue=X(),{handleHDBError:I2,hdb_errors:w2}=j(),{HDB_ERROR_MSGS:yC,HTTP_STATUS_CODES:C2}=w2;IC.exports=L2;async function L2(e){if(pp.isEmpty(e.schema))throw new Error(yC.SCHEMA_REQUIRED_ERR);if(pp.isEmpty(e.table))throw new Error(yC.TABLE_REQUIRED_ERR);let t=pp.checkSchemaTableExist(e.schema,e.table);if(t)throw I2(new Error,t,C2.NOT_FOUND,y2.LOG_LEVELS.ERROR,t,!0);return await b2.getBackup(read_audit_log_object)}a(L2,"getBackup")});var PC=T((oue,MC)=>{var Vn=require("validate.js"),LC=qe(),Mo=b(),{handleHDBError:D2,hdb_errors:U2}=j(),{HDB_ERROR_MSGS:Xe,HTTP_STATUS_CODES:M2}=U2,Sp=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),P2={STRUCTURE_USER:"structure_user"},CC=Object.values(Mo.ROLE_TYPES_ENUM),v2="attribute_permissions",B2="attribute_name",{PERMS_CRUD_ENUM:Po}=Mo,H2=[v2,...Object.values(Po)],DC=[Po.READ,Po.INSERT,Po.UPDATE],F2=[B2,...DC];function q2(e){let t=Sp();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,UC(e,t)}a(q2,"addRoleValidation");function G2(e){let t=Sp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,UC(e,t)}a(G2,"alterRoleValidation");function x2(e){let t=Sp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,LC.validateObject(e,t)}a(x2,"dropRoleValidation");var k2=["operation","role","id","permission","hdb_user","hdb_auth_header"];function UC(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)k2.includes(s[o])||n.push(s[o]);n.length>0&&st(Xe.INVALID_ROLE_JSON_KEYS(n),r);let i=LC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{st(o,r)}),e.permission){let o=V2(e);o&&st(o,r),CC.forEach(c=>{e.permission[c]&&!Vn.isBoolean(e.permission[c])&&st(Xe.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(CC.indexOf(o)<0){if(o===P2.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(Xe.SCHEMA_NOT_FOUND(d),r)}continue}st(Xe.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){st(Xe.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(Xe.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{H2.includes(l)||st(Xe.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Po).forEach(l=>{Vn.isDefined(_[l])?Vn.isBoolean(_[l])||st(Xe.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):st(Xe.TABLE_PERM_MISSING(l),r,o,u)}),Vn.isDefined(_.attribute_permissions)){if(!Vn.isArray(_.attribute_permissions)){st(Xe.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{st(Xe.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=>{!F2.includes(p)&&p!==Po.DELETE&&st(Xe.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!Vn.isDefined(E.attribute_name)){st(Xe.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){st(Xe.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}DC.forEach(p=>{Vn.isDefined(E[p])?Vn.isBoolean(E[p])||st(Xe.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):st(Xe.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(Xe.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return $2(r)}a(UC,"customValidate");MC.exports={addRoleValidation:q2,alterRoleValidation:G2,dropRoleValidation:x2};function V2(e){let{operation:t,permission:r}=e;if(t===Mo.OPERATIONS_ENUM.ADD_ROLE||t===Mo.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 Xe.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Mo.ROLE_TYPES_ENUM.SUPER_USER:Mo.ROLE_TYPES_ENUM.CLUSTER_USER;return Xe.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(V2,"validateNoSUPerms");function $2(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Xe.ROLE_PERMS_ERROR,...e};return D2(new Error,s,M2.BAD_REQUEST)}else return null}a($2,"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 Np=T((cue,FC)=>{"use strict";var vC=qr(),BC=Fr(),Y2=Ai(),Rp=PC(),gp=on(),K2=require("uuid").v4,W2=require("util"),U_=b(),Q2=$(),Ap=BC.searchByValue,z2=BC.searchByHash,J2=W2.promisify(Y2.delete),X2=Ps(),j2=Oo(),{hdb_errors:Z2,handleHDBError:vo}=j(),{HDB_ERROR_MSGS:HC,HTTP_STATUS_CODES:M_}=Z2,{UserEventMsg:Op}=ls();FC.exports={addRole:e4,alterRole:t4,dropRole:r4,listRoles:s4};function Tp(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(Tp,"scrubRoleDetails");async function e4(e){let t=Rp.addRoleValidation(e);if(t)throw t;e=Tp(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 Ap(r)||[])}catch(i){throw vo(i)}if(s&&s.length>0)throw vo(new Error,HC.ROLE_ALREADY_EXISTS(e.role),M_.CONFLICT,void 0,void 0,!0);e.id||(e.id=K2());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await vC.insert(n),gp.signalUserChange(new Op(process.pid)),e=Tp(e),e}a(e4,"addRole");async function t4(e){let t=Rp.alterRoleValidation(e);if(t)throw t;e=Tp(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await vC.update(r)}catch(n){throw vo(n)}if(s&&s?.message==="updated 0 of 1 records")throw vo(new Error,"Invalid role id",M_.BAD_REQUEST,void 0,void 0,!0);return await gp.signalUserChange(new Op(process.pid)),e}a(t4,"alterRole");async function r4(e){let t=Rp.dropRoleValidation(e);if(t)throw vo(new Error,t,M_.BAD_REQUEST,void 0,void 0,!0);let r=new j2(U_.SYSTEM_SCHEMA_NAME,U_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await z2(r));if(s.length===0)throw vo(new Error,HC.ROLE_NOT_FOUND,M_.NOT_FOUND,void 0,void 0,!0);let n=new X2(U_.SYSTEM_SCHEMA_NAME,U_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Ap(n)),o=!1;if(Q2.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 J2(c),gp.signalUserChange(new Op(process.pid)),`${s[0].role} successfully deleted`}a(r4,"dropRole");async function s4(){return Ap({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(s4,"listRoles")});var kC=T((lue,xC)=>{"use strict";var n4=X(),$n=require("joi"),i4=qe(),qC=require("moment"),o4=require("fs-extra"),bp=require("path"),a4=require("lodash"),Cc=b(),{LOG_LEVELS:Li}=b(),c4="YYYY-MM-DD hh:mm:ss",u4=bp.resolve(__dirname,"../logs");xC.exports=function(e){return i4.validateBySchema(e,l4)};var l4=$n.object({from:$n.custom(GC),until:$n.custom(GC),level:$n.valid(Li.NOTIFY,Li.FATAL,Li.ERROR,Li.WARN,Li.INFO,Li.DEBUG,Li.TRACE),order:$n.valid("asc","desc"),limit:$n.number().min(1),start:$n.number().min(0),log_name:$n.custom(_4)});function GC(e,t){if(qC(e,qC.ISO_8601).format(c4)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(GC,"validateDatetime");function _4(e,t){if(a4.invert(Cc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=n4.get(Cc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Cc.LOG_NAMES.HDB:e,i=n===Cc.LOG_NAMES.INSTALL?bp.join(u4,Cc.LOG_NAMES.INSTALL):bp.join(s,n);return o4.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(_4,"validateReadLogPath")});var Ip=T((due,$C)=>{"use strict";var P_=b(),d4=G(),f4=X(),E4=kC(),yp=require("path"),VC=require("fs-extra"),{once:h4}=require("events"),{handleHDBError:m4,hdb_errors:p4}=j(),{PACKAGE_ROOT:S4}=b(),T4=yp.join(S4,"logs"),R4=1e3,g4=200;$C.exports=A4;async function A4(e){let t=E4(e);if(t)throw m4(t,t.message,p4.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=f4.get(P_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?P_.LOG_NAMES.HDB:e.log_name,n=s===P_.LOG_NAMES.INSTALL?yp.join(T4,P_.LOG_NAMES.INSTALL):yp.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?R4: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(VC.statSync(n).size-(h+5)*g4,0));let S=VC.createReadStream(n,{start:p});S.on("error",q=>{d4.error(q)});let A=0,I=[],N="",Y;S.on("data",q=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;q=N+q;let K=0,B;for(;(B=w.exec(q))&&!S.destroyed;){Y&&(Y.message=q.slice(K,B.index),Q(Y));let[x,te,be]=B,se=be.split("] ["),Pt=se[0],Pe=se[1];se.splice(0,2),Y={timestamp:te,thread:Pt,level:Pe,tags:se,message:""},K=B.index+x.length}N=q.slice(K)}),S.on("end",q=>{S.destroyed||Y&&(Y.message=N.trim(),Q(Y))}),S.resume();function Q(q){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(q.timestamp),K=new Date(u),B=new Date(l),q.level===o&&w>=K&&w<=B&&A<E?A++:q.level===o&&w>=K&&w<=B&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case(i&&c):w=new Date(q.timestamp),K=new Date(u),q.level===o&&w>=K&&A<E?A++:q.level===o&&w>=K&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case(i&&_):w=new Date(q.timestamp),B=new Date(l),q.level===o&&w<=B&&A<E?A++:q.level===o&&w<=B&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case(c&&_):w=new Date(q.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&A<E?A++:w>=K&&w<=B&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case i:q.level===o&&A<E?A++:q.level===o&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case c:w=new Date(q.timestamp),K=new Date(u),w>=K&&A<E?A++:w>=K&&A>=E&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case _:w=new Date(q.timestamp),B=new Date(l),w<=B&&A<E?A++:w<=B&&A>=E&&(Yn(q,f,I),A++,A===h&&S.destroy());break;default:A<E?A++:(Yn(q,f,I),A++,A===h&&S.destroy())}}return a(Q,"onLogMessage"),await h4(S,"close"),I}a(A4,"readLog");function Yn(e,t,r){t==="desc"?O4(e,r):t==="asc"?N4(e,r):r.push(e)}a(Yn,"pushLineToResult");function O4(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(O4,"insertDescending");function N4(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(N4,"insertAscending")});var B_=T((pue,QC)=>{"use strict";var wp=require("joi"),{string:v_,boolean:YC,date:b4}=wp.types(),y4=qe(),{validateSchemaExists:Eue,validateTableExists:hue,validateSchemaName:mue}=Ls(),I4=b(),w4=ke(),KC=X();KC.initSync();var C4=v_.invalid(KC.get(I4.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(w4.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(),WC={operation:v_.valid("add_node","update_node"),node_name:C4,subscriptions:wp.array().items({table:v_.optional(),schema:v_.required(),subscribe:YC.required(),publish:YC.required().custom(D4),start_time:b4.iso()}).min(1).required()};function L4(e){return y4.validateBySchema(e,wp.object(WC))}a(L4,"addUpdateNodeValidator");function D4(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(D4,"checkForFalsy");QC.exports={addUpdateNodeValidator:L4,validation_schema:WC}});var JC=T((Tue,zC)=>{var U4=qe(),M4={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};zC.exports=function(e){return U4.validateObject(e,M4)}});var Lp=T((Rue,XC)=>{"use strict";var P4=b().OPERATIONS_ENUM,Cp=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=P4.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};XC.exports=Cp});var ZC=T((Aue,jC)=>{"use strict";var v4={OPERATION:"operation",REFRESH:"refresh"},Dp=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Up=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};jC.exports={JWTTokens:Dp,TOKEN_TYPE_ENUM:v4,JWTRSAKeys:Up}});var Uc=T((Nue,sL)=>{"use strict";var Dc=require("jsonwebtoken"),Mp=require("fs-extra"),Pp=$(),Vr=b(),{handleHDBError:er,hdb_errors:B4}=j(),{HTTP_STATUS_CODES:tr,AUTHENTICATION_ERROR_MSGS:rr}=B4,Lc=G(),eL=zl(),Hp=Gr(),H4=qr().update,F4=Lp(),q4=on(),{UserEventMsg:G4}=ls(),Kn=X();Kn.initSync();var vp=require("path"),{JWTTokens:x4,JWTRSAKeys:k4,TOKEN_TYPE_ENUM:H_}=ZC(),V4=Kn.get(Vr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Kn.get(Vr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",$4=Kn.get(Vr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Kn.get(Vr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",F_="RS256",Bp;sL.exports={createTokens:Y4,validateOperationToken:W4,refreshOperationToken:K4,validateRefreshToken:rL};async function Y4(e){if(Pp.isEmpty(e)||typeof e!="object")throw er(new Error,rr.INVALID_AUTH_OBJECT,tr.BAD_REQUEST,void 0,void 0,!0);if(Pp.isEmpty(e.username))throw er(new Error,rr.USERNAME_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);if(Pp.isEmpty(e.password))throw er(new Error,rr.PASSWORD_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Hp.findAndValidateUser(e.username,e.password),!t)throw er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Lc.error(f),er(new Error,rr.INVALID_CREDENTIALS,tr.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 tL(i,r.private_key,r.passphrase),c=await Dc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:$4,algorithm:F_,subject:H_.REFRESH}),u=eL.hash(c),_=new F4(Vr.SYSTEM_SCHEMA_NAME,Vr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await H4(_)}catch(f){Lc.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw er(new Error,rr.REFRESH_TOKEN_SAVE_FAILED,tr.INTERNAL_SERVER_ERROR);return q4.signalUserChange(new G4(process.pid)),new x4(o,c)}a(Y4,"createTokens");async function tL(e,t,r){return await Dc.sign(e,{key:t,passphrase:r},{expiresIn:V4,algorithm:F_,subject:H_.OPERATION})}a(tL,"signOperationToken");async function q_(){if(Bp===void 0)try{let e=vp.join(Kn.getHdbBasePath(),Vr.LICENSE_KEY_DIR_NAME,Vr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=vp.join(Kn.getHdbBasePath(),Vr.LICENSE_KEY_DIR_NAME,Vr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=vp.join(Kn.getHdbBasePath(),Vr.LICENSE_KEY_DIR_NAME,Vr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Mp.readFile(e)).toString(),n=(await Mp.readFile(t)).toString(),i=(await Mp.readFile(r)).toString();Bp=new k4(i,n,s)}catch(e){throw Lc.error(e),er(new Error,rr.NO_ENCRYPTION_KEYS,tr.INTERNAL_SERVER_ERROR)}return Bp}a(q_,"getJWTRSAKeys");async function K4(e){if(!e)throw er(new Error,rr.INVALID_BODY,tr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw er(new Error,rr.REFRESH_TOKEN_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);await rL(e.refresh_token);let t=await q_(),r=await Dc.decode(e.refresh_token);return{operation_token:await tL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(K4,"refreshOperationToken");async function W4(e){try{let t=await q_(),r=await Dc.verify(e,t.public_key,{algorithms:F_,subject:H_.OPERATION});return await Hp.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Lc.warn(t),t.name&&t.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}}a(W4,"validateOperationToken");async function rL(e){let t;try{let r=await q_(),s=await Dc.verify(e,r.public_key,{algorithms:F_,subject:H_.REFRESH});t=await Hp.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Lc.warn(r),r.name&&r.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}if(!eL.validate(t.refresh_token,e))throw er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED);return t}a(rL,"validateRefreshToken")});var Fp=T((Iue,oL)=>{"use strict";var Q4=JC(),Bo=require("passport"),z4=require("passport-local").Strategy,J4=require("passport-http").BasicStrategy,X4=require("util"),j4=Gr(),iL=X4.callbackify(j4.findAndValidateUser),yue=dr(),Z4=b(),nL=Uc();Bo.use(new z4(function(e,t,r){iL(e,t,r)}));Bo.use(new J4(function(e,t,r){iL(e,t,r)}));Bo.serializeUser(function(e,t){t(null,e)});Bo.deserializeUser(function(e,t){t(null,e)});function e3(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":Bo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Z4.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:Bo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(e3,"authorize");function t3(e,t){let r=Q4(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(t3,"checkPermissions");oL.exports={authorize:e3,checkPermissions:t3}});var Ho=T((Cue,aL)=>{"use strict";var qp=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Gp=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};aL.exports={Node:qp,NodeSubscription:Gp}});var uL=T((Due,cL)=>{"use strict";var r3=b().OPERATIONS_ENUM,xp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=r3.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};cL.exports=xp});var Mc=T((Mue,lL)=>{"use strict";var kp=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},Vp=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:kp,RemotePayloadSubscription:Vp}});var dL=T((vue,_L)=>{"use strict";var $p=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}};_L.exports=$p});var hL=T((Gue,EL)=>{"use strict";var s3=dL(),Hue=ze(),fL=Ue(),n3=G(),{getSchemaPath:Fue,getTransactionAuditStorePath:que}=ve(),{getDatabases:i3}=(fe(),Z(Ce));EL.exports=o3;async function o3(e){let t=new s3;try{let r=i3()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await fL.environmentDataSize(schema_path,e.name),o=await fL.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){n3.warn(`unable to stat table dbi due to ${r}`)}return t}a(o3,"lmdbGetTableSize")});var pL=T((kue,mL)=>{"use strict";var Yp=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}};mL.exports=Yp});var Fo=T((Kue,gL)=>{"use strict";var a3=require("fs-extra"),c3=require("path"),Gt=require("systeminformation"),Wn=G(),u3=_t(),Kp=ke(),x_=b(),l3=hL(),RL=pi(),{getThreadInfo:SL}=Ze(),rS=X();rS.initSync();var _3=pL(),{openEnvironment:$ue}=Ue(),{getSchemaPath:Yue}=ve(),{database:d3}=(fe(),Z(Ce)),G_;gL.exports={getHDBProcessInfo:Jp,getNetworkInfo:jp,getDiskInfo:Xp,getMemoryInfo:zp,getCPUInfo:Qp,getTimeInfo:Wp,getSystemInformation:Zp,systemInformation:f3,getTableSize:eS,getMetrics:tS};function Wp(){return Gt.time()}a(Wp,"getTimeInfo");async function Qp(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Gt.cpu();l.cpu_speed=await Gt.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:A,...I}=await Gt.currentLoad();return I.cpus=[],A.forEach(N=>{let{raw_load:Y,raw_load_idle:Q,raw_load_irq:q,raw_load_nice:w,raw_load_system:K,raw_load_user:B,...x}=N;I.cpus.push(x)}),l.current_load=I,l}catch(e){return Wn.error(`error in getCPUInfo: ${e}`),{}}}a(Qp,"getCPUInfo");async function zp(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Gt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Wn.error(`error in getMemoryInfo: ${e}`),{}}}a(zp,"getMemoryInfo");async function Jp(){let e={core:[],clustering:[]};try{let t=await Gt.processes(),r;try{r=Number.parseInt(await a3.readFile(c3.join(rS.get(x_.CONFIG_PARAMS.ROOTPATH),x_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===x_.NODE_ERROR_CODES.ENOENT)Wn.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 Wn.error(`error in getHDBProcessInfo: ${t}`),e}}a(Jp,"getHDBProcessInfo");async function Xp(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Gt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Gt.fsStats();return e.read_write=_,e.size=await Gt.fsSize(),e}catch(t){return Wn.error(`error in getDiskInfo: ${t}`),e}}a(Xp,"getDiskInfo");async function jp(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Gt.networkInterfaceDefault(),e.latency=await Gt.inetChecksite("google.com"),(await Gt.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 Gt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Wn.error(`error in getNetworkInfo: ${t}`),e}}a(jp,"getNetworkInfo");async function Zp(){if(G_!==void 0)return G_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Gt.osInfo();e=c;let u=await Gt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,G_=e,G_}catch(t){return Wn.error(`error in getSystemInformation: ${t}`),e}}a(Zp,"getSystemInformation");async function eS(){let e=[],t=await RL.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await l3(s));return e}a(eS,"getTableSize");async function tS(){let e=await RL.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=d3({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){Wn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(tS,"getMetrics");async function TL(){if(rS.get(x_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await u3.getNATSReferences(),r=await t.streams.info(Kp.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Kp.WORK_QUEUE_CONSUMER_NAMES.stream_name,Kp.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(TL,"getNatsStreamInfo");async function f3(e){let t=new _3;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await Zp(),t.time=Wp(),t.cpu=await Qp(),t.memory=await zp(),t.disk=await Xp(),t.network=await jp(),t.harperdb_processes=await Jp(),t.table_size=await eS(),t.metrics=await tS(),t.threads=await SL(),t.replication=await TL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await Zp();break;case"time":t.time=Wp();break;case"cpu":t.cpu=await Qp();break;case"memory":t.memory=await zp();break;case"disk":t.disk=await Xp();break;case"network":t.network=await jp();break;case"harperdb_processes":t.harperdb_processes=await Jp();break;case"table_size":t.table_size=await eS();break;case"database_metrics":case"metrics":t.metrics=await tS();break;case"threads":t.threads=await SL();break;case"replication":t.replication=await TL();break;default:break}return t}a(f3,"systemInformation")});var sS=T((Que,AL)=>{"use strict";AL.exports={version:E3,printVersion:h3};var k_=Tc();function E3(){if(k_)return k_.version}a(E3,"version");function h3(){k_&&console.log(`HarperDB Version ${k_.version}`)}a(h3,"printVersion")});var un=T((jue,yL)=>{"use strict";var m3=qr(),nS=$(),p3=require("util"),Di=b(),OL=X();OL.initSync();var S3=Fp(),NL=Fr(),{Node:Jue,NodeSubscription:Xue}=Ho(),T3=Oo(),R3=uL(),{RemotePayloadObject:g3,RemotePayloadSubscription:A3}=Mc(),{handleHDBError:O3,hdb_errors:N3}=j(),{HTTP_STATUS_CODES:b3,HDB_ERROR_MSGS:y3}=N3,I3=Ps(),w3=Fo(),C3=sS(),{getDatabases:L3}=(fe(),Z(Ce)),D3=p3.promisify(S3.authorize),U3=NL.searchByHash,M3=NL.searchByValue;yL.exports={authHeaderToUser:P3,isEmpty:v3,getNodeRecord:B3,upsertNodeRecord:H3,buildNodePayloads:F3,checkClusteringEnabled:q3,getAllNodeRecords:G3,getSystemInfo:x3,reverseSubscription:bL};async function P3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await D3(t,null),e}a(P3,"authHeaderToUser");function v3(e){return e==null}a(v3,"isEmpty");async function B3(e){let t=new T3(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return U3(t)}a(B3,"getNodeRecord");async function H3(e){let t=new R3(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return m3.upsert(t)}a(H3,"upsertNodeRecord");function bL(e){if(nS.isEmpty(e.subscribe)||nS.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(bL,"reverseSubscription");function F3(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=nS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=bL(c),E=L3()[u]?.[_],h=new A3(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new g3(r,t,n,s)}a(F3,"buildNodePayloads");function q3(){if(!OL.get(Di.CONFIG_PARAMS.CLUSTERING_ENABLED))throw O3(new Error,y3.CLUSTERING_NOT_ENABLED,b3.BAD_REQUEST,void 0,void 0,!0)}a(q3,"checkClusteringEnabled");async function G3(){let e=new I3(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await M3(e))}a(G3,"getAllNodeRecords");async function x3(){let e=await w3.getSystemInformation();return{hdb_version:C3.version(),node_version:e.node_version,platform:e.platform}}a(x3,"getSystemInfo")});var iS=T((ele,PL)=>{"use strict";var V_=_t(),IL=$(),wL=ke(),CL=b(),$_=G(),LL=C_(),k3=bm(),{RemotePayloadObject:V3}=Mc(),{handleHDBError:DL,hdb_errors:$3}=j(),{HTTP_STATUS_CODES:UL}=$3,{NodeSubscription:ML}=Ho();PL.exports=Y3;async function Y3(e,t){let r;try{r=await V_.request(`${t}.${wL.REQUEST_SUFFIX}`,new V3(CL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),$_.trace("Response from remote describe all request:",r)}catch(o){$_.error(`addNode received error from describe all request to remote node: ${o}`);let c=V_.requestErrorHandler(o,"add_node",t);throw DL(new Error,c,UL.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===wL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw DL(new Error,o,UL.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===CL.SYSTEM_SCHEMA_NAME){await V_.createLocalTableStream(c,u);let h=new ML(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=IL.doesSchemaExist(c),l=s[c]!==void 0,d=u?IL.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&($_.trace(`addNode creating schema: ${c}`),await LL.createSchema({operation:"create_schema",schema:c})),!d&&f){$_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new k3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await LL.createTable(h)}await V_.createLocalTableStream(c,u);let E=new ML(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(Y3,"reviewSubscriptions")});var W_=T((rle,HL)=>{"use strict";var{handleHDBError:Y_,hdb_errors:K3}=j(),{HTTP_STATUS_CODES:K_}=K3,{addUpdateNodeValidator:W3}=B_(),Pc=G(),BL=b(),vL=ke(),Q3=$(),oS=_t(),vc=un(),z3=X(),J3=iS(),{Node:X3,NodeSubscription:j3}=Ho(),{broadcast:Z3}=Ze(),eX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",tX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",rX=z3.get(BL.CONFIG_PARAMS.CLUSTERING_NODENAME);HL.exports=sX;async function sX(e,t=!1){Pc.trace("addNode called with:",e),vc.checkClusteringEnabled();let r=W3(e);if(r)throw Y_(r,r.message,K_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await vc.getNodeRecord(s);if(!Q3.isEmptyOrZeroLength(d))throw Y_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,K_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await J3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=eX,o;let c=vc.buildNodePayloads(n,rX,BL.OPERATIONS_ENUM.ADD_NODE,await vc.getSystemInfo());Pc.trace("addNode sending remote payload:",c);let u;try{u=await oS.request(`${s}.${vL.REQUEST_SUFFIX}`,c)}catch(d){Pc.error(`addNode received error from request: ${d}`);let f=oS.requestErrorHandler(d,"add_node",s);throw Y_(new Error,f,K_.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===vL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw Y_(new Error,d,K_.INTERNAL_SERVER_ERROR,"error",d)}Pc.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];Pc.trace("Add node updating work stream for node:",s,"subscriptions:",E),await oS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new j3(E.schema,E.table,E.publish,E.subscribe))}let l=new X3(s,_,u.system_info);return await vc.upsertNodeRecord(l),Z3({type:"nats_update"}),i.length>0?o.message=tX:o.message=`Successfully added '${s}' to manifest`,o}a(sX,"addNode")});var cS=T((nle,GL)=>{"use strict";var{handleHDBError:Q_,hdb_errors:nX}=j(),{HTTP_STATUS_CODES:z_}=nX,{addUpdateNodeValidator:iX}=B_(),Bc=G(),qL=b(),FL=ke(),oX=$(),aS=_t(),Hc=un(),aX=X(),{cloneDeep:cX}=require("lodash"),uX=iS(),{NodeSubscription:lX}=Ho(),{broadcast:_X}=Ze(),dX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",fX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",EX=aX.get(qL.CONFIG_PARAMS.CLUSTERING_NODENAME);GL.exports=hX;async function hX(e){Bc.trace("updateNode called with:",e),Hc.checkClusteringEnabled();let t=iX(e);if(t)throw Q_(t,t.message,z_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=cX(await Hc.getNodeRecord(r));if(oX.isEmptyOrZeroLength(s))throw Q_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,z_.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=dX,o;let c=Hc.buildNodePayloads(n,EX,qL.OPERATIONS_ENUM.UPDATE_NODE,await Hc.getSystemInfo());Bc.trace("updateNode sending remote payload:",c);let u;try{u=await aS.request(`${r}.${FL.REQUEST_SUFFIX}`,c)}catch(_){Bc.error(`updateNode received error from request: ${_}`);let l=aS.requestErrorHandler(_,"update_node",r);throw Q_(new Error,l,z_.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===FL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw Q_(new Error,_,z_.INTERNAL_SERVER_ERROR,"error",_)}Bc.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];Bc.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 mX(s[0],n,u.system_info),i.length>0?o.message=fX:o.message=`Successfully updated '${r}'`,o}a(hX,"updateNode");async function mX(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 lX(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Hc.upsertNodeRecord(s),_X({type:"nats_update"})}a(mX,"updateNodeTable")});var YL=T((ole,$L)=>{"use strict";var VL=require("joi"),{string:xL}=VL.types(),pX=qe(),kL=b(),SX=X(),TX=ke();$L.exports=RX;function RX(e){let t=xL.invalid(SX.get(kL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(TX.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=VL.object({operation:xL.valid(kL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return pX.validateBySchema(e,r)}a(RX,"removeNodeValidator")});var X_=T((cle,XL)=>{"use strict";var{handleHDBError:KL,hdb_errors:gX}=j(),{HTTP_STATUS_CODES:WL}=gX,AX=YL(),Fc=G(),QL=un(),OX=$(),J_=b(),zL=ke(),JL=_t(),NX=X(),{RemotePayloadObject:bX}=Mc(),{NodeSubscription:yX}=Ho(),IX=_c(),wX=Ai(),{broadcast:CX}=Ze(),LX=NX.get(J_.CONFIG_PARAMS.CLUSTERING_NODENAME);XL.exports=DX;async function DX(e){Fc.trace("removeNode called with:",e),QL.checkClusteringEnabled();let t=AX(e);if(t)throw KL(t,t.message,WL.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await QL.getNodeRecord(r);if(OX.isEmptyOrZeroLength(s))throw KL(new Error,`Node '${r}' was not found.`,WL.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new bX(J_.OPERATIONS_ENUM.REMOVE_NODE,LX,[]),i,o=!1;try{i=await JL.request(`${r}.${zL.REQUEST_SUFFIX}`,n),Fc.trace("Remove node reply from remote node:",r,i)}catch(u){Fc.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];Fc.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new yX(l.schema,l.table,!1,!1);await JL.updateWorkStream(d,r)}let c=new IX(J_.SYSTEM_SCHEMA_NAME,J_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await wX.deleteRecord(c),CX({type:"nats_update"}),i?.status===zL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Fc.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(DX,"removeNode")});var eD=T((lle,ZL)=>{"use strict";var jL=require("joi"),{string:UX,array:MX}=jL.types(),PX=qe(),vX=B_();ZL.exports=BX;function BX(e){let t=jL.object({operation:UX.valid("configure_cluster").required(),connections:MX.items(vX.validation_schema).required()});return PX.validateBySchema(e,t)}a(BX,"configureClusterValidator")});var uS=T((dle,iD)=>{"use strict";var HX=b(),j_=G(),FX=$(),qX=X_(),GX=W_(),tD=un(),xX=eD(),{handleHDBError:rD,hdb_errors:kX}=j(),{HTTP_STATUS_CODES:sD}=kX,VX="Configure cluster complete.",$X="Failed to configure the cluster. Check the logs for more details.",YX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";iD.exports=KX;async function KX(e){j_.trace("configure cluster called with:",e),tD.checkClusteringEnabled();let t=xX(e);if(t)throw rD(t,t.message,sD.BAD_REQUEST,void 0,void 0,!0);let r=await tD.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(nD(qX,{operation:HX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);j_.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(GX,E,E.node_name))}let c=await Promise.allSettled(i);j_.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"&&(j_.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(FX.isEmptyOrZeroLength(u))return{message:VX,connections:_};if(l)return{message:YX,failed_nodes:u,connections:_};throw rD(new Error,$X,sD.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(KX,"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 aD=T((Ele,oD)=>{"use strict";var Z_=require("joi"),WX=qe(),{validateSchemaExists:QX,validateTableExists:zX,validateSchemaName:JX}=Ls(),XX=Z_.object({operation:Z_.string().valid("purge_stream"),schema:Z_.string().custom(QX).custom(JX).required(),table:Z_.string().custom(zX).required()});function jX(e){return WX.validateBySchema(e,XX)}a(jX,"purgeStreamValidator");oD.exports=jX});var lS=T((mle,cD)=>{"use strict";var{handleHDBError:ZX,hdb_errors:ej}=j(),{HTTP_STATUS_CODES:tj}=ej,rj=aD(),sj=_t(),nj=un();cD.exports=ij;async function ij(e){let t=rj(e);if(t)throw ZX(t,t.message,tj.BAD_REQUEST,void 0,void 0,!0);nj.checkClusteringEnabled();let{schema:r,table:s}=e;return await sj.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(ij,"purgeStream")});var fS=T((Sle,ED)=>{"use strict";var dS=un(),oj=_t(),_D=X(),ed=b(),Ui=ke(),aj=$(),_S=G(),{RemotePayloadObject:cj}=Mc(),{ErrorCode:uD}=require("nats"),lD=_D.get(ed.CONFIG_PARAMS.CLUSTERING_ENABLED),dD=_D.get(ed.CONFIG_PARAMS.CLUSTERING_NODENAME);ED.exports={clusterStatus:uj,buildNodeStatus:fD};async function uj(){let e={node_name:dD,is_enabled:lD,connections:[]};if(!lD)return e;let t=await dS.getAllNodeRecords();if(aj.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(fD(t[s],e.connections));return await Promise.allSettled(r),e}a(uj,"clusterStatus");async function fD(e,t){let r=e.name,s=new cj(ed.OPERATIONS_ENUM.CLUSTER_STATUS,dD,void 0,await dS.getSystemInfo()),n,i,o=Ui.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await oj.request(Ui.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Ui.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ui.CLUSTER_STATUS_STATUSES.CLOSED,_S.error(`Error getting node status from ${r} `,n))}catch(u){_S.warn(`Error getting node status from ${r}`,u),u.code===uD.NoResponders?o=Ui.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===uD.Timeout?o=Ui.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ui.CLUSTER_STATUS_STATUSES.CLOSED}let c=new lj(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!==ed.PRE_4_0_0_VERSION&&await dS.upsertNodeRecord(u)}catch(u){_S.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(fD,"buildNodeStatus");function lj(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(lj,"NodeStatusObject")});var hS=T((Rle,hD)=>{"use strict";var{handleHDBError:_j,hdb_errors:dj}=j(),{HTTP_STATUS_CODES:fj}=dj,Ej=_t(),hj=un(),ES=$(),td=require("joi"),mj=qe(),pj=2e3,Sj=td.object({timeout:td.number().min(1),connected_nodes:td.boolean(),routes:td.boolean()});hD.exports=Tj;async function Tj(e){hj.checkClusteringEnabled();let t=mj.validateBySchema(e,Sj);if(t)throw _j(t,t.message,fj.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||ES.autoCastBoolean(s),o=n===void 0||ES.autoCastBoolean(n),c={nodes:[]},u=await Ej.getServerList(r??pj),_={};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:ES.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Tj,"clusterNetwork")});var TD=T((Ale,SD)=>{"use strict";var mS=require("joi"),mD=qe(),{route_constraints:pD}=dE();SD.exports={setRoutesValidator:Rj,deleteRoutesValidator:gj};function Rj(e){let t=mS.object({server:mS.valid("hub","leaf").required(),routes:pD.required()});return mD.validateBySchema(e,t)}a(Rj,"setRoutesValidator");function gj(e){let t=mS.object({routes:pD.required()});return mD.validateBySchema(e,t)}a(gj,"deleteRoutesValidator")});var SS=T((Nle,OD)=>{"use strict";var Mi=Er(),pS=$(),rd=b(),RD=TD(),{handleHDBError:gD,hdb_errors:Aj}=j(),{HTTP_STATUS_CODES:AD}=Aj,Oj="cluster routes successfully set",Nj="cluster routes successfully deleted";OD.exports={setRoutes:bj,getRoutes:yj,deleteRoutes:Ij};function bj(e){let t=RD.setRoutesValidator(e);if(t)throw gD(t,t.message,AD.BAD_REQUEST,void 0,void 0,!0);let r=Mi.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=pS.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"?Mi.updateConfigValue(rd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Mi.updateConfigValue(rd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:Oj,set:o,skipped:i}}a(bj,"setRoutes");function yj(){let e=Mi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(yj,"getRoutes");function Ij(e){let t=RD.deleteRoutesValidator(e);if(t)throw gD(t,t.message,AD.BAD_REQUEST,void 0,void 0,!0);let r=Mi.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=pS.isEmptyOrZeroLength(s)?null:s,Mi.updateConfigValue(rd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=pS.isEmptyOrZeroLength(n)?null:n,Mi.updateConfigValue(rd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:Nj,deleted:i,skipped:o}}a(Ij,"deleteRoutes")});var bD=T((yle,ND)=>{"use strict";var qc=require("alasql"),Pi=require("recursive-iterator"),ps=G(),wj=$(),Gc=b(),TS=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,Lj(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=>Gc.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=>!Gc.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][Gc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Cj(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(_=>!Gc.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new qc.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 Cj(e){return e.filter(t=>t[Gc.PERMS_CRUD_ENUM.READ])}a(Cj,"filterReadRestrictedAttrs");function Lj(e,t,r,s,n){Dj(e,t,r,s,n)}a(Lj,"interpretAST");function xc(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(xc,"addSchemaTableToMap");function Dj(e,t,r,s,n){if(!e){ps.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof qc.yy.Insert?vj(e,t,r):e instanceof qc.yy.Select?Uj(e,t,r,s,n):e instanceof qc.yy.Update?Mj(e,t,r):e instanceof qc.yy.Delete?Pj(e,t,r):ps.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Dj,"getRecordAttributesAST");function Uj(e,t,r,s,n){if(!e){ps.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(wj.isEmptyOrZeroLength(i)){ps.error("No schema specified");return}e.from.forEach(c=>{xc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),xc(c.table,t,r,s,n)});let o=new Pi(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{ps.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 Pi(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{ps.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 Pi(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{ps.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 Pi(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{ps.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(Uj,"getSelectAttributes");function Mj(e,t,r){if(!e){ps.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Pi(e.columns),n=e.table.databaseid;xc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&RS(e.table.tableid,n,i.columnid,t,r)}a(Mj,"getUpdateAttributes");function Pj(e,t,r){if(!e){ps.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Pi(e.where),n=e.table.databaseid;xc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&RS(e.table.tableid,n,i.columnid,t,r)}a(Pj,"getDeleteAttributes");function vj(e,t,r){if(!e){ps.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Pi(e.columns),n=e.into.databaseid;xc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&RS(e.into.tableid,n,i.columnid,t,r)}a(vj,"getInsertAttributes");function RS(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(RS,"pushAttribute");ND.exports=TS});var OS=T((wle,CD)=>{var sd=tc(),yD=require("chalk"),Nr=G(),ID=require("prompt"),{promisify:Bj}=require("util"),gS=b(),Hj=require("fs-extra"),Fj=require("path"),qj=$(),Gj=sS(),wD=X();wD.initSync();var xj=require("moment"),kj=Bj(ID.get),Vj=Fj.join(wD.getHdbBasePath(),gS.LICENSE_KEY_DIR_NAME,gS.LICENSE_FILE_NAME,gS.LICENSE_FILE_NAME);CD.exports={getFingerprint:Yj,setLicense:$j,parseLicense:AS,register:Kj,getRegistrationInfo:Qj};async function $j(e){if(e&&e.key&&e.company){try{Nr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await AS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Nr.error(r),Nr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a($j,"setLicense");async function Yj(){let e={};try{e=await sd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Nr.error(r),Nr.error(t),new Error(r)}return e}a(Yj,"getFingerprint");async function AS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Nr.info("Validating license input...");let r=sd.validateLicense(e,t);if(Nr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Nr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Nr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Nr.info("writing license to disk"),await Hj.writeFile(Vj,JSON.stringify({license_key:e,company:t}))}catch(s){throw Nr.error("Failed to write License"),s}return"Registration successful."}a(AS,"parseLicense");async function Kj(){let e=await Wj();return AS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Kj,"register");async function Wj(){let e=await sd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:yD.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:yD.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{ID.start()}catch(s){Nr.error(s)}let r;try{r=await kj(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(Wj,"promptForRegistration");async function Qj(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await sd.getLicense()}catch(r){throw Nr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(qj.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Gj.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=xj.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Qj,"getRegistrationInfo")});var DD=T((Lle,LD)=>{"use strict";var zj=ke(),NS=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+zj.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"}};LD.exports=NS});var PD=T((Ule,MD)=>{"use strict";var UD=ke(),bS=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+UD.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+UD.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"}};MD.exports=bS});var BD=T((Ple,vD)=>{"use strict";var yS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};vD.exports=yS});var FD=T((Ble,HD)=>{"use strict";var Jj=ke(),IS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Jj.SERVER_SUFFIX.ADMIN,this.password=r}};HD.exports=IS});var LS=T((Fle,xD)=>{"use strict";var qo=require("path"),od=require("fs-extra"),Xj=DD(),jj=PD(),Zj=BD(),eZ=FD(),wS=Gr(),xo=$(),sr=Er(),id=b(),kc=ke(),{CONFIG_PARAMS:je}=id,Vc=G(),$c=X(),qD=nn(),CS=_t(),Go="clustering",tZ=1e4,GD=5;xD.exports={generateNatsConfig:sZ,removeNatsConfig:nZ,getHubConfigPath:rZ};function rZ(){let e=$c.get(je.ROOTPATH);return qo.join(e,Go,kc.NATS_CONFIG_FILES.HUB_SERVER)}a(rZ,"getHubConfigPath");async function sZ(e=!1,t=void 0){$c.initSync();let r=$c.get(je.ROOTPATH),s=qo.join(r,Go,kc.PID_FILES.HUB),n=qo.join(r,Go,kc.PID_FILES.LEAF),i=sr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=qo.join(r,Go,kc.NATS_CONFIG_FILES.HUB_SERVER),c=qo.join(r,Go,kc.NATS_CONFIG_FILES.LEAF_SERVER),u=sr.getConfigFromFile(je.CLUSTERING_TLS_CERTIFICATE),_=sr.getConfigFromFile(je.CLUSTERING_TLS_PRIVATEKEY),l=sr.getConfigFromFile(je.CLUSTERING_TLS_CERT_AUTH),d=sr.getConfigFromFile(je.CLUSTERING_TLS_INSECURE),f=sr.getConfigFromFile(je.CLUSTERING_TLS_VERIFY),E=sr.getConfigFromFile(je.CLUSTERING_NODENAME),h=sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await CS.checkNATSServerInstalled()||ad("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await wS.listUsers(),S=sr.getConfigFromFile(je.CLUSTERING_USER),A=await wS.getClusterUser();(xo.isEmpty(A)||A.active!==!0)&&ad(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await nd(je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await nd(je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await nd(je.CLUSTERING_HUBSERVER_NETWORK_PORT),await nd(je.CLUSTERING_LEAFSERVER_NETWORK_PORT));let I=[],N=[];for(let[x,te]of p.entries())te.role.role===id.ROLE_TYPES_ENUM.CLUSTER_USER&&te.active&&(I.push(new eZ(te.username,qD.decrypt(te.hash))),N.push(new Zj(te.username,qD.decrypt(te.hash))));let Y=[],{hub_routes:Q}=sr.getClusteringRoutes();if(!xo.isEmptyOrZeroLength(Q))for(let x of Q)Y.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${x.host}:${x.port}`);let q=new Xj(sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_CLUSTER_NAME),sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,I,N);l==null&&(delete q.tls.ca_file,delete q.leafnodes.tls.ca_file),t=xo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===id.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await od.writeJson(o,q),Vc.trace(`Hub server config written to ${o}`));let w=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new jj(sr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],I,N,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===id.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await od.writeJson(c,B),Vc.trace(`Leaf server config written to ${c}`))}a(sZ,"generateNatsConfig");async function nd(e){let t=$c.get(e);return xo.isEmpty(t)&&ad(`port undefined for '${e}'`),await xo.isPortTaken(t)&&ad(`'${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(nd,"isPortAvailable");function ad(e){let t=`Error generating clustering config: ${e}`;Vc.error(t),console.error(t),process.exit(1)}a(ad,"generateNatsConfigError");async function nZ(e){let{port:t,config_file:r}=CS.getServerConfig(e),{username:s,decrypt_hash:n}=await wS.getClusterUser(),i=0,o=2e3;for(;i<GD;){try{let _=await CS.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Vc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=GD)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 xo.async_set_timeout(o*(i*2))}let c="0".repeat(tZ),u=qo.join($c.get(je.ROOTPATH),Go,r);await od.writeFile(u,c),await od.remove(u),Vc.notify(e,"started.")}a(nZ,"removeNatsConfig")});var _d=T((Gle,QD)=>{"use strict";var iZ=require("minimist"),{isMainThread:MS,parentPort:$D}=require("worker_threads"),Ve=b(),{PROCESS_DESCRIPTORS_VALIDATE:Yc}=Ve,Fs=G(),PS=$(),cd=LS(),ko=_t(),DS=ke(),YD=Er(),qs=BS(),kD=Fo(),oZ=tE(),{restartWorkers:ud,onMessageByType:aZ}=Ze(),{handleHDBError:cZ,hdb_errors:uZ}=j(),{HTTP_STATUS_CODES:lZ}=uZ,ld=X();ld.initSync();var Kc=`Restarting HarperDB. This may take up to ${Ve.RESTART_TIMEOUT_MS/1e3} seconds.`,_Z="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",VD="Clustering is not enabled so cannot be restarted",dZ="Invalid service",Vo,$r;QD.exports={restart:KD,restartService:vS};MS&&aZ(Ve.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?vS({service:e.workerType}):KD({operation:"restart"})});async function KD(e){$r=Object.keys(e).length===0,Vo=await qs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR);let t=iZ(process.argv);if(t.service){await vS(t);return}if($r&&!Vo){console.error(_Z);return}if($r&&console.log(Kc),Vo){qs.enterPM2Mode(),Fs.notify(Kc);let r=oZ(Object.keys(Ve.CONFIG_PARAM_MAP),!0);return PS.isEmptyOrZeroLength(Object.keys(r))||YD.updateConfigValue(void 0,void 0,r,!0,!0),EZ(),Kc}return MS?(Fs.notify(Kc),setTimeout(()=>{ud()},50)):$D.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART}),Kc}a(KD,"restart");async function vS(e){let{service:t}=e;if(Ve.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw cZ(new Error,dZ,lZ.BAD_REQUEST,void 0,void 0,!0);if(Vo=await qs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR),!MS)return $D.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Yc.clustering:if(!ld.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=VD;break}$r&&console.log("Restarting clustering"),Fs.notify("Restarting clustering"),await WD();break;case Yc.clustering_config:case Yc["clustering config"]:if(!ld.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=VD;break}$r&&console.log("Restarting clustering_config"),Fs.notify("Restarting clustering_config"),await qs.reloadClustering();break;case"custom_functions":case"custom functions":case Yc.harperdb:case Yc.http_workers:if($r&&!Vo){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}$r&&console.log("Restarting http_workers"),Fs.notify("Restarting http_workers"),$r?await qs.restart(Ve.HDB_PROC_DESCRIPTOR):setTimeout(()=>{ud("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Fs.error(r),$r&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(vS,"restartService");async function fZ(){await ko.publishToStream(`${DS.SUBJECT_PREFIXES.TXN}.${DS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,DS.WORK_QUEUE_CONSUMER_NAMES.stream_name,ko.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(fZ,"postDummyNatsMsg");async function EZ(){await WD(),await qs.restart(Ve.HDB_PROC_DESCRIPTOR),await PS.async_set_timeout(2e3),ld.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await US(),$r&&(await ko.closeConnection(),process.exit(0))}a(EZ,"restartPM2Mode");async function WD(){if(!YD.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await kD.getHDBProcessInfo()).clustering.length===0)Fs.trace("Clustering not running, restart will start clustering services"),await cd.generateNatsConfig(!0),await qs.startClusteringProcesses(),await qs.startClusteringThreads(),await US(),$r&&await ko.closeConnection();else{await fZ(),await cd.generateNatsConfig(!0),Vo?(Fs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await qs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await qs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await kD.getHDBProcessInfo()).clustering.forEach(n=>{Fs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await PS.async_set_timeout(3e3),await US(),await ko.updateLocalStreams(),$r&&await ko.closeConnection(),Fs.trace("Restart clustering restarting ingest and reply service threads");let t=ud(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=ud(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(WD,"restartClustering");async function US(){await cd.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await cd.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(US,"removeNatsConfig")});var iU=T((Vle,nU)=>{"use strict";var kle=require("lodash"),nr=b(),{handleHDBError:zD,hdb_errors:hZ}=j(),{HDB_ERROR_MSGS:mZ,HTTP_STATUS_CODES:pZ}=hZ,HS=G();nU.exports={getRolePermissions:TZ};var vi=Object.create(null),SZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),ZD=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),eU=a((e=!1,t=!1,r=!1,s=!1)=>({[nr.PERMS_CRUD_ENUM.READ]:e,[nr.PERMS_CRUD_ENUM.INSERT]:t,[nr.PERMS_CRUD_ENUM.UPDATE]:r,[nr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),FS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...eU(t,r,s,n)}),"table_perms_template"),JD=a((e,t=eU())=>({attribute_name:e,describe:sU(t),[Wc]:t[Wc],[qS]:t[qS],[GS]:t[GS]}),"attr_perms_template"),XD=a((e,t=!1)=>({attribute_name:e,describe:t,[Wc]:t}),"timestamp_attr_perms_template"),{READ:Wc,INSERT:qS,UPDATE:GS}=nr.PERMS_CRUD_ENUM,tU=Object.values(nr.PERMS_CRUD_ENUM),rU=[Wc,qS,GS];function TZ(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[nr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(vi[t]&&vi[t].key===s)return vi[t].perms;let n=RZ(e,r);return vi[t]?vi[t].key=s:vi[t]=SZ(s),vi[t].perms=n,n}catch(r){if(!e[nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<nr.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 HS.error(s),HS.debug(r),zD(new Error,mZ.OUTDATED_PERMS_TRANSLATION_ERROR,pZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
9
+ ${r.stack}`;throw HS.error(s),zD(new Error)}}}a(TZ,"getRolePermissions");function RZ(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[nr.SYSTEM_SCHEMA_NAME]=s[nr.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]=gZ(t[i]);return}r[i]=ZD(),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],_=AZ(c,u);r[i].describe||tU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=FS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=FS()})}),r}a(RZ,"translateRolePermissions");function gZ(e){let t=ZD(!0);return Object.keys(e).forEach(r=>{t.tables[r]=FS(!0,!0,!0,!0,!0)}),t}a(gZ,"createStructureUserPermissions");function AZ(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 nr.TIME_STAMP_NAMES.includes(d)&&(f=XD(d,l[Wc])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=JD(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=sU(l),n.attribute_permissions.push(l),c||OZ(l,u)}else if(_!==o){let l;nr.TIME_STAMP_NAMES.includes(_)?l=XD(_):l=JD(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=jD(n),n}else return e.describe=jD(e),e}a(AZ,"getTableAttrPerms");function jD(e){return tU.filter(t=>e[t]).length>0}a(jD,"getSchemaTableDescribePerm");function sU(e){return rU.filter(t=>e[t]).length>0}a(sU,"getAttributeDescribePerm");function OZ(e,t){rU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(OZ,"checkForHashPerms")});var oU={};Qe(oU,{Resources:()=>dd,keyArrayToString:()=>$o,resetResources:()=>NZ,resources:()=>Qn});function NZ(){return Qn=new dd}function $o(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var dd,Qn,Qc=Te(()=>{di();dd=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(NZ,"resetResources");a($o,"keyArrayToString")});var Bi,xS=Te(()=>{Bi=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 zc={};Qe(zc,{authentication:()=>EU,bypassAuth:()=>DZ,login:()=>MZ,logout:()=>PZ,start:()=>UZ});function DZ(){fU=!0}async function EU(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?wZ?IZ:[]:yZ?bZ:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Bi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return fd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),fd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(fd){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 cU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new hd.AuthAuditLog(E,h,wt.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===wt.AUTH_AUDIT_STATUS.SUCCESS?aU.notify(S):aU.error(S)},"authAuditLog"),d;if(s){if(d=Hi.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,Ed.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,Ed.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return LZ&&(Hi.get(h)||(Hi.set(h,h),l(p,wt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:zn({error:A.message},e)})}Hi.set(s,d),CZ&&l(d.username,wt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await ut.getUser(_.user,null,!1):fU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,lU.getSuperUser)());fd&&(e.session.update=function(E){if(!u){u=(0,_U.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,cU.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")&&Qn.loginPath?(f.status=302,f.headers.set("Location",Qn.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 Bi);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function UZ({server:e,port:t}){e.request(EU,{port:t||"all"}),uU||(uU=!0,setInterval(()=>{Hi=new Map},Yr.get(wt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),dU.user.addListener(()=>{Hi=new Map}))}async function MZ(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 PZ(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var lU,Ed,_U,Yr,wt,hd,dU,aU,bZ,yZ,IZ,wZ,cU,fd,fU,CZ,LZ,Hi,uU,md=Te(()=>{lU=M(Gr());Ur();Qc();Ed=M(Uc());fe();_U=require("uuid"),Yr=M(X()),wt=M(b()),hd=M(G()),dU=M(sc());xS();Yo();aU=(0,hd.loggerWithTag)("auth-event");Yr.initSync();bZ=Yr.get(wt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),yZ=Yr.get(wt.CONFIG_PARAMS.HTTP_CORS),IZ=Yr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),wZ=Yr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),cU=et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),fd=Yr.get(wt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,fU=Yr.get(wt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,CZ=Yr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,LZ=Yr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Hi=new Map;ut.onInvalidatedUser(()=>{Hi=new Map});a(DZ,"bypassAuth");a(EU,"authentication");a(UZ,"start");a(MZ,"login");a(PZ,"logout")});var gU=T((t_e,RU)=>{"use strict";var pe=require("joi"),hU=require("fs-extra"),mU=require("path"),_n=qe(),pU=X(),SU=b(),TU=G(),{hdb_errors:vZ}=j(),{HDB_ERROR_MSGS:xt}=vZ,ln=/^[a-zA-Z0-9-_]+$/;RU.exports={getDropCustomFunctionValidator:HZ,setCustomFunctionValidator:FZ,addComponentValidator:kZ,dropCustomFunctionProjectValidator:VZ,packageComponentValidator:$Z,deployComponentValidator:YZ,setComponentFileValidator:qZ,getComponentFileValidator:xZ,dropComponentFileValidator:GZ};function pd(e,t,r){try{let s=pU.get(SU.CONFIG_PARAMS.COMPONENTSROOT),n=mU.join(s,t);return hU.existsSync(n)?e?t:r.message(xt.PROJECT_EXISTS):e?r.message(xt.NO_PROJECT):t}catch(s){return TU.error(s),r.message(xt.VALIDATION_ERR)}}a(pd,"checkProjectExists");function Jc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Jc,"checkFilePath");function BZ(e,t,r,s){try{let n=pU.get(SU.CONFIG_PARAMS.COMPONENTSROOT),i=mU.join(n,e,t,r+".js");return hU.existsSync(i)?r:s.message(xt.NO_FILE)}catch(n){return TU.error(n),s.message(xt.VALIDATION_ERR)}}a(BZ,"checkFileExists");function HZ(e){let t=pe.object({project:pe.string().pattern(ln).custom(pd.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),type:pe.string().valid("helpers","routes").required(),file:pe.string().pattern(ln).custom(BZ.bind(null,e.project,e.type)).custom(Jc).required().messages({"string.pattern.base":xt.BAD_FILE_NAME})});return _n.validateBySchema(e,t)}a(HZ,"getDropCustomFunctionValidator");function FZ(e){let t=pe.object({project:pe.string().pattern(ln).custom(pd.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),type:pe.string().valid("helpers","routes").required(),file:pe.string().custom(Jc).required(),function_content:pe.string().required()});return _n.validateBySchema(e,t)}a(FZ,"setCustomFunctionValidator");function qZ(e){let t=pe.object({project:pe.string().pattern(ln).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),file:pe.string().custom(Jc).required(),payload:pe.string().allow("").optional(),encoding:pe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return _n.validateBySchema(e,t)}a(qZ,"setComponentFileValidator");function GZ(e){let t=pe.object({project:pe.string().pattern(ln).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),file:pe.string().custom(Jc).optional()});return _n.validateBySchema(e,t)}a(GZ,"dropComponentFileValidator");function xZ(e){let t=pe.object({project:pe.string().required(),file:pe.string().custom(Jc).required(),encoding:pe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return _n.validateBySchema(e,t)}a(xZ,"getComponentFileValidator");function kZ(e){let t=pe.object({project:pe.string().pattern(ln).custom(pd.bind(null,!1)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME})});return _n.validateBySchema(e,t)}a(kZ,"addComponentValidator");function VZ(e){let t=pe.object({project:pe.string().pattern(ln).custom(pd.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME})});return _n.validateBySchema(e,t)}a(VZ,"dropCustomFunctionProjectValidator");function $Z(e){let t=pe.object({project:pe.string().pattern(ln).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),skip_node_modules:pe.boolean()});return _n.validateBySchema(e,t)}a($Z,"packageComponentValidator");function YZ(e){let t=pe.object({project:pe.string().pattern(ln).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),payload:pe.string().optional().messages({"string.pattern.base":xt.BAD_PACKAGE}),package:pe.string().optional()});return _n.validateBySchema(e,t)}a(YZ,"deployComponentValidator")});var gd=T((s_e,wU)=>{"use strict";var Sd=require("joi"),Td=require("path"),AU=require("fs-extra"),{exec:KZ}=require("child_process"),WZ=require("util"),OU=WZ.promisify(KZ),Xc=b(),{handleHDBError:Ko,hdb_errors:QZ}=j(),{HTTP_STATUS_CODES:Wo}=QZ,jc=X(),zZ=qe(),Qo=G();jc.initSync();var kS=jc.get(Xc.CONFIG_PARAMS.COMPONENTSROOT),NU="npm install --omit=dev --json",JZ=`${NU} --dry-run`;wU.exports={installModules:e5,auditModules:t5,installAllRootModules:XZ,uninstallRootModule:jZ,linkHarperdb:ZZ};async function XZ(e=!1){await Rd(),await Zc(e?"npm install --ignore-scripts":"npm install",jc.get(Xc.CONFIG_PARAMS.ROOTPATH))}a(XZ,"installAllRootModules");async function jZ(e){await Zc(`npm uninstall ${e}`,jc.get(Xc.CONFIG_PARAMS.ROOTPATH))}a(jZ,"uninstallRootModule");async function ZZ(){await Rd(),await Zc(`npm link ${Xc.PACKAGE_ROOT}`,jc.get(Xc.CONFIG_PARAMS.ROOTPATH))}a(ZZ,"linkHarperdb");async function Zc(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await OU(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
10
+ `,""))}return s&&!s.includes("Debugger listening")&&Qo.error("Error running NPM command:",e,s),Qo.trace(r,s),r.replace(`
11
+ `,"")}a(Zc,"runCommand");async function e5(e){Qo.info(`starting installModules for request: ${e}`);let t=IU(e);if(t)throw Ko(t,t.message,Wo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?JZ:NU;await Rd(),await yU(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 _=Td.join(kS,u),l,d=null;try{let{stdout:f,stderr:E}=await OU(n,{cwd:_});l=f?f.replace(`
12
12
  `,""):null,d=E?E.replace(`
13
- `,""):null}catch(f){f.stderr?i[u].npm_error=gU(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 Ko.info(`finished installModules with response ${i}`),i}a(XZ,"installModules");function gU(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(gU,"parseNPMStdErr");async function jZ(e){Ko.info(`starting auditModules for request: ${e}`);let t=OU(e);if(t)throw $o(t,t.message,Yo.BAD_REQUEST);let{projects:r}=e;await Sd(),await AU(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=pd.join(qS,o);s[o]={npm_output:null,npm_error:null};try{let u=await Xc("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=gU(u.stderr)}}return Ko.info(`finished auditModules with response ${s}`),s}a(jZ,"auditModules");async function Sd(){try{return await Xc("npm -v"),!0}catch{throw $o(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Yo.BAD_REQUEST,void 0,void 0,!0)}}a(Sd,"checkNPMInstalled");async function AU(e){if(!Array.isArray(e)||e.length===0)throw $o(new Error,"projects argument must be an array with at least 1 element",Yo.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=pd.join(qS,i.toString());if(!await SU.pathExists(o)){t.push(i);continue}let u=pd.join(o,"package.json");await SU.pathExists(u)||r.push(i)}if(t.length>0)throw $o(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Yo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw $o(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Yo.BAD_REQUEST,void 0,void 0,!0)}a(AU,"checkProjectPaths");function OU(e){let t=md.object({projects:md.array().min(1).items(md.string()).required(),dry_run:md.boolean().default(!1)});return KZ.validateBySchema(e,t)}a(OU,"modulesValidator")});var xS=T((t_e,CU)=>{"use strict";var Wo=require("fs-extra"),GS=require("path"),Rd=G(),bU=$(),gd=b(),wU=X(),ZZ=Er();CU.exports=e5;async function e5(){let e=t5(),t=wU.get(gd.CONFIG_PARAMS.ROOTPATH),r=GS.join(t,"package.json"),s={dependencies:{harperdb:"file:"+gd.PACKAGE_ROOT}},n=GS.join(t,"node_modules");await Wo.ensureDir(n);let i,o=!0,c=!1;try{i=await Wo.readJson(r)}catch(u){if(bU.isEmptyOrZeroLength(e))return;if(u.code!==gd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!bU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await yU(_);s.dependencies[u]=l+_}if(!o){Rd.notify("Installing components"),await IU(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await yU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Rd.notify("Removing component",u),c=!0);c&&(Rd.notify("Updating components."),await IU(r,s,i))}a(e5,"installComponents");function t5(){let e=ZZ.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(t5,"getComponentsConfig");async function yU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":GS.extname(e)||await Wo.pathExists(e)?"file:":"github:"}a(yU,"getPkgPrefix");async function IU(e,t,r){Rd.trace("npm installing components package.json",t),await Wo.writeFile(e,JSON.stringify(t,null," "));try{await Td().installAllRootModules(wU.get(gd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await Wo.writeFile(e,JSON.stringify(r,null," ")):await Wo.unlink(e),s}}a(IU,"installPackages")});var $S=T((n_e,MU)=>{"use strict";var Ue=require("fs-extra"),kS=require("fast-glob"),de=require("path"),DU=require("tar-fs"),s_e=require("uuid").v4,VS=require("normalize-path"),Gs=pU(),pt=G(),Me=b(),nt=X(),jc=Er(),r5=$(),{PACKAGE_ROOT:s5}=b(),{handleHDBError:St,hdb_errors:n5}=j(),{basename:i5}=require("path"),o5=xS(),UU=X(),a5=b(),{Readable:c5}=require("stream"),{HDB_ERROR_MSGS:Fi,HTTP_STATUS_CODES:Tt}=n5,u5=de.join(s5,"application-template"),LU=de.join(nt.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function l5(){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,Fi.FUNCTION_STATUS,Tt.INTERNAL_SERVER_ERROR,pt.ERR,t)}return e}a(l5,"customFunctionsStatus");function _5(){pt.trace("getting custom api endpoints");let e={},t=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT);try{kS.sync(VS(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:kS.sync(VS(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:kS.sync(VS(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw St(new Error,Fi.GET_FUNCTIONS,Tt.INTERNAL_SERVER_ERROR,pt.ERR,r)}return e}a(_5,"getCustomFunctions");function d5(e){e.project&&(e.project=de.parse(e.project).name),e.file&&(e.file=de.parse(e.file).name);let t=Gs.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=de.join(r,s,n,i+".js");try{return Ue.readFileSync(o,{encoding:"utf8"})}catch(c){throw St(new Error,Fi.GET_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,c)}}a(d5,"getCustomFunction");function f5(e){e.project&&(e.project=de.parse(e.project).name),e.file&&(e.file=de.parse(e.file).name);let t=Gs.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 Ue.outputFileSync(de.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw St(new Error,Fi.SET_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,c)}}a(f5,"setCustomFunction");function E5(e){e.project&&(e.project=de.parse(e.project).name),e.file&&(e.file=de.parse(e.file).name);let t=Gs.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 Ue.unlinkSync(de.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw St(new Error,Fi.DROP_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,o)}}a(E5,"dropCustomFunction");function h5(e){e.project&&(e.project=de.parse(e.project).name);let t=Gs.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=de.join(r,s);return Ue.mkdirSync(n,{recursive:!0}),Ue.copySync(u5,n),`Successfully added project: ${s}`}catch(n){throw St(new Error,Fi.ADD_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,n)}}a(h5,"addComponent");function m5(e){e.project&&(e.project=de.parse(e.project).name);let t=Gs.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(!r5.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 jc.updateConfigValue(Me.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=de.join(r,s);return Ue.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw St(new Error,Fi.DROP_FUNCTION_PROJECT,Tt.INTERNAL_SERVER_ERROR,pt.ERR,i)}}a(m5,"dropCustomFunctionProject");async function p5(e){e.project&&(e.project=de.parse(e.project).name);let t=Gs.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 Ue.realpath(de.join(r,s))}catch(u){if(u.code!==Me.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Ue.realpath(de.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 Ue.ensureDir(LU);let i=de.join(LU,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(de.join(n,"node_modules"))}),DU.pack(n,o).pipe(Ue.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Ue.readFileSync(i,{encoding:"base64"});return await Ue.remove(i),{project:s,payload:c}}a(p5,"packageComponent");async function S5(e){e.project&&(e.project=de.parse(e.project).name);let t=Gs.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=de.join(r,s),i="file:"+o,await Ue.ensureDir(o);let f=c5.from(Buffer.from(n,"base64"));await new Promise((h,S)=>{f.pipe(DU.extract(o,{finish:h})).on("error",S)});let E=await Ue.readdir(o);E.length===1&&E[0]==="package"&&(await Ue.copy(de.join(o,"package"),o),await Ue.remove(de.join(o,"package")))}if(jc.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),!n){await o5();let f=UU.get(a5.CONFIG_PARAMS.ROOTPATH);o=de.join(f,"node_modules",s)}let c=new Map;c.isWorker=!0;let u=(Od(),Z(Ad)),_;u.setErrorReporter(f=>_=f);let l=i5(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(S5,"deployComponent");async function T5(){let e=jc.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 Ue.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=de.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Ue.stat(d),E={name:de.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(de.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(de.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(Od(),Z(Ad)).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(T5,"getComponents");async function R5(e){let t=Gs.getComponentFileValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let s=jc.getConfigObj()[e.project]||e.project==="harperdb"?de.join(UU.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules"):nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await Ue.readFile(de.join(s,e.project,e.file),n)}catch(i){throw i.code===Me.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${de.join(e.project,e.file)}'`):i}}a(R5,"getComponentFile");async function g5(e){let t=Gs.setComponentFileValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=de.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Ue.ensureFile(s),await Ue.outputFile(s,e.payload,r)):await Ue.ensureDir(s),"Successfully set component: "+e.file}a(g5,"setComponentFile");async function A5(e){let t=Gs.dropComponentFileValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=e.file?de.join(e.project,e.file):e.project,s=de.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ue.pathExists(s)&&await Ue.remove(s),jc.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(A5,"dropComponent");MU.exports={customFunctionsStatus:l5,getCustomFunctions:_5,getCustomFunction:d5,setCustomFunction:f5,dropCustomFunction:E5,addComponent:h5,dropCustomFunctionProject:m5,packageComponent:p5,deployComponent:S5,getComponents:T5,getComponentFile:R5,setComponentFile:g5,dropComponent:A5}});var YS=T((o_e,vU)=>{"use strict";var xs=require("joi"),PU=qe();vU.exports={readTransactionLogValidator:O5,deleteTransactionLogsBeforeValidator:N5};function O5(e){let t=xs.object({schema:xs.string().required(),table:xs.string().required(),from:xs.date().timestamp(),to:xs.date().timestamp(),limit:xs.number().min(1)});return PU.validateBySchema(e,t)}a(O5,"readTransactionLogValidator");function N5(e){let t=xs.object({schema:xs.string().required(),table:xs.string().required(),timestamp:xs.date().timestamp().required()});return PU.validateBySchema(e,t)}a(N5,"deleteTransactionLogsBeforeValidator")});var bd=T((c_e,GU)=>{"use strict";var KS=b(),Nd=_t(),BU=$(),HU=X(),FU=nn(),{handleHDBError:Qo,hdb_errors:b5}=j(),{HTTP_STATUS_CODES:zo}=b5,{readTransactionLogValidator:y5,deleteTransactionLogsBeforeValidator:I5}=YS(),qU="This operation relies on clustering and cannot run with it disable.",w5="Logs successfully deleted from transaction log.",C5="All logs successfully deleted from transaction log.";GU.exports={readTransactionLog:L5,deleteTransactionLogsBefore:D5};async function*L5(e){let t=y5(e);if(t)throw Qo(t,t.message,zo.BAD_REQUEST,void 0,void 0,!0);if(!HU.get(KS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Qo(new Error,qU,zo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=BU.checkSchemaTableExist(r,s);if(n)throw Qo(new Error,n,zo.NOT_FOUND,void 0,void 0,!0);let i=FU.createNatsTableStreamName(r,s),o=await Nd.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===KS.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(L5,"readTransactionLog");async function D5(e){let t=I5(e);if(t)throw Qo(t,t.message,zo.BAD_REQUEST,void 0,void 0,!0);if(!HU.get(KS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Qo(new Error,qU,zo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=BU.checkSchemaTableExist(r,s);if(i)throw Qo(new Error,i,zo.NOT_FOUND,void 0,void 0,!0);let o=FU.createNatsTableStreamName(r,s),{jsm:c}=await Nd.getNATSReferences(),u=await Nd.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=w5,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=C5):d=(await Nd.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(D5,"deleteTransactionLogsBefore")});var kU=T((l_e,xU)=>{"use strict";var WS=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}};xU.exports=WS});var $U=T((d_e,VU)=>{"use strict";var QS=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};VU.exports=QS});var JS=T((E_e,KU)=>{"use strict";var YU=kU(),U5=$U(),{HDB_ERROR_MSGS:M5}=dr(),zS=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=M5.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 YU(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new U5(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 YU(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}};KU.exports=zS});var Cd=T((m_e,cM)=>{"use strict";var XS=Fr(),yd=Hr(),Kr=I_(),tu=pi(),jS=Ai(),P5=dp(),v5=NC(),ru=qr(),Id=gp(),dt=G(),B5=Np(),H5=Y_(),F5=iS(),q5=z_(),G5=oS(),x5=aS(),k5=lS(),V5=dS(),ZS=hS(),dn=$(),$5=gD(),eT=RS(),zU=ud(),Yr=b(),JU=tU(),Y5=Bo(),XU=Lc(),jU=(Ed(),Z(Wc)),ZU=Er(),br=$S(),K5=require("alasql"),eM=bd(),tM=Td(),rM=JS(),{handleHDBError:ir,hdb_errors:sM}=j(),{HDB_ERROR_MSGS:Ct,HTTP_STATUS_CODES:Zc}=sM,v=new Map,nM="delete",Jn="insert",fn="read",qi="update",eu="describe",WU=tu.describeSchema.name,QU=tu.describeTable.name,iM={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},W5="catchup",Q5="handleGetJob",z5="handleGetJobsByStartDate",wd={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},J5=[Kr.createTable.name,Kr.createAttribute.name,Kr.dropTable.name,Kr.dropAttribute.name],oM={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},F=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};v.set(XS.insert.name,new F(!1,[Jn]));v.set(XS.update.name,new F(!1,[qi]));v.set(XS.upsert.name,new F(!1,[Jn,qi]));v.set(yd.searchByConditions.name,new F(!1,[fn]));v.set(yd.searchByHash.name,new F(!1,[fn]));v.set(yd.searchByValue.name,new F(!1,[fn]));v.set(yd.search.name,new F(!1,[fn]));v.set(Kr.createSchema.name,new F(!0,[]));v.set(Kr.createTable.name,new F(!0,[]));v.set(Kr.createAttribute.name,new F(!1,[Jn]));v.set(Kr.dropSchema.name,new F(!0,[]));v.set(Kr.dropTable.name,new F(!0,[]));v.set(Kr.dropAttribute.name,new F(!0,[]));v.set(tu.describeSchema.name,new F(!1,[fn]));v.set(tu.describeTable.name,new F(!1,[fn]));v.set(jS.deleteRecord.name,new F(!1,[nM]));v.set(ru.addUser.name,new F(!0,[]));v.set(ru.alterUser.name,new F(!0,[]));v.set(ru.dropUser.name,new F(!0,[]));v.set(ru.listUsersExternal.name,new F(!0,[]));v.set(Id.listRoles.name,new F(!0,[]));v.set(Id.addRole.name,new F(!0,[]));v.set(Id.alterRole.name,new F(!0,[]));v.set(Id.dropRole.name,new F(!0,[]));v.set(B5.name,new F(!0,[]));v.set(H5.name,new F(!0,[]));v.set(F5.name,new F(!0,[]));v.set(q5.name,new F(!0,[]));v.set(G5.name,new F(!0,[]));v.set(x5.name,new F(!0,[]));v.set(ZS.setRoutes.name,new F(!0,[]));v.set(ZS.getRoutes.name,new F(!0,[]));v.set(ZS.deleteRoutes.name,new F(!0,[]));v.set(ZU.setConfiguration.name,new F(!0,[]));v.set(k5.clusterStatus.name,new F(!0,[]));v.set(V5.name,new F(!0,[]));v.set(eT.getFingerprint.name,new F(!0,[]));v.set(eT.setLicense.name,new F(!0,[]));v.set(jS.deleteFilesBefore.name,new F(!0,[]));v.set(jS.deleteAuditLogsBefore.name,new F(!0,[]));v.set(zU.restart.name,new F(!0,[]));v.set(zU.restartService.name,new F(!0,[]));v.set(P5.name,new F(!0,[]));v.set(v5.name,new F(!0,[fn]));v.set(Y5.systemInformation.name,new F(!0,[]));v.set(ZU.getConfiguration.name,new F(!0,[]));v.set(eM.readTransactionLog.name,new F(!0,[]));v.set(eM.deleteTransactionLogsBefore.name,new F(!0,[]));v.set(tM.installModules.name,new F(!0,[]));v.set(tM.auditModules.name,new F(!0,[]));v.set(XU.createTokens.name,new F(!1,[]));v.set(XU.refreshOperationToken.name,new F(!1,[]));v.set(jU.login.name,new F(!1,[]));v.set(jU.logout.name,new F(!1,[]));v.set(br.customFunctionsStatus.name,new F(!0,[]));v.set(br.getCustomFunctions.name,new F(!0,[]));v.set(br.getComponents.name,new F(!0,[]));v.set(br.getComponentFile.name,new F(!0,[]));v.set(br.setComponentFile.name,new F(!0,[]));v.set(br.dropComponent.name,new F(!0,[]));v.set(br.getCustomFunction.name,new F(!0,[]));v.set(br.setCustomFunction.name,new F(!0,[]));v.set(br.dropCustomFunction.name,new F(!0,[]));v.set(br.addComponent.name,new F(!0,[]));v.set(br.dropCustomFunctionProject.name,new F(!0,[]));v.set(br.packageComponent.name,new F(!0,[]));v.set(br.deployComponent.name,new F(!0,[]));v.set(eT.getRegistrationInfo.name,new F(!1,[]));v.set(ru.userInfo.name,new F(!1,[]));v.set(tu.describeAll.name,new F(!1,[]));v.set(Q5,new F(!1,[]));v.set(z5,new F(!0,[]));v.set(W5,new F(!0,[]));v.set(wd.CSV_DATA_LOAD,new F(!1,[Jn,qi]));v.set(wd.CSV_URL_LOAD,new F(!1,[Jn,qi]));v.set(wd.CSV_FILE_LOAD,new F(!1,[Jn,qi]));v.set(wd.IMPORT_FROM_S3,new F(!1,[Jn,qi]));v.set(oM.EXPORT_TO_S3,new F(!0,[]));v.set(oM.EXPORT_LOCAL,new F(!0,[]));v.set(Yr.VALID_SQL_OPS_ENUM.DELETE,new F(!1,[nM]));v.set(Yr.VALID_SQL_OPS_ENUM.SELECT,new F(!1,[fn]));v.set(Yr.VALID_SQL_OPS_ENUM.INSERT,new F(!1,[Jn]));v.set(Yr.VALID_SQL_OPS_ENUM.UPDATE,new F(!1,[qi]));cM.exports={verifyPerms:j5,verifyPermsAst:X5,verifyBulkLoadAttributePerms:e8};function X5(e,t,r){if(dn.isEmptyOrZeroLength(e))throw dt.info("verify_perms_ast has an empty user parameter"),ir(new Error);if(dn.isEmptyOrZeroLength(t))throw dt.info("verify_perms_ast has an empty user parameter"),ir(new Error);if(dn.isEmptyOrZeroLength(r))throw dt.info("verify_perms_ast has a null operation parameter"),ir(new Error);try{let s=new rM,n=new $5(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."),ir(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&iM[r])throw ir(new Error,Ct.DROP_SYSTEM,Zc.FORBIDDEN);if(c&&!u)return null;let _=JU.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof K5.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=aM(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]),S=rT(t.role.permission,f,d[E]);tT(h,S,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw ir(s)}}a(X5,"verifyPermsAst");function j5(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw dt.info("null required parameter in verifyPerms"),ir(new Error,Ct.DEFAULT_INVALID_REQUEST,Zc.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 rM;if(dn.isEmptyOrZeroLength(e.hdb_user.role)||dn.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(Ct.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(Yr.SYSTEM_SCHEMA_NAME)||n===Yr.SYSTEM_SCHEMA_NAME;if(l&&iM[r])throw ir(new Error,Ct.DROP_SYSTEM,Zc.FORBIDDEN);if(u&&!l||_===!0&&(r===Kr.createSchema.name||r===Kr.dropSchema.name))return null;if(J5.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=JU.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===WU||r===QU){if(n===Yr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ct.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===WU&&(!d[n]||!d[n][eu]))return c.handleInvalidItem(Ct.SCHEMA_NOT_FOUND(n));if(r===QU&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][eu]))return c.handleInvalidItem(Ct.TABLE_NOT_FOUND(n,i))}}let f=aM(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&&Yr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let S=[],p=d[n].tables[i];p[Yr.PERMS_CRUD_ENUM.READ]&&(p.attribute_permissions.length>0?p.attribute_permissions.filter(I=>I[Yr.PERMS_CRUD_ENUM.READ]).forEach(I=>{S.push(I.attribute_name)}):S=global.hdb_schema[n][i].attributes.map(g=>g.attribute),e.get_attributes=S)}let E=Z5(e),h=rT(e.hdb_user.role.permission,n,i);return tT(E,h,r,i,n,c,s),c.getPermsResponse()}a(j5,"verifyPerms");function aM(e,t,r,s,n){if(dn.arrayHasEmptyValues([e,t,r]))throw dt.info("hasPermissions has an invalid parameter"),ir(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.`),ir(new Error,Ct.OP_NOT_FOUND(t),Zc.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return dt.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ct.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][eu]===!1){s.addInvalidItem(Ct.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ct.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[eu]===!1)s.addInvalidItem(Ct.TABLE_NOT_FOUND(u,l));else try{let f=[],E=v.get(t).perms;!dn.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let S=E[h],p=d[S];(p==null||p===!1)&&(dt.info(`Required ${S} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(S))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=Ct.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw dt.error(E),dt.error(f),ir(sM.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(aM,"hasPermissions");function tT(e,t,r,s,n,i,o){if(!e||!t)throw dt.info("no attributes specified in checkAttributePerms."),ir(new Error);let c=v.get(r).perms;if(!c||c==="")throw dt.info(`no permissions found for ${r} in checkAttributePerms().`),ir(new Error);if(dn.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[eu]===!1){i.addInvalidItem(Ct.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(Yr.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==fn)throw ir(new Error,Ct.SYSTEM_TIMESTAMP_PERMS_ERR,Zc.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Ct.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(tT,"checkAttributePerms");function Z5(e){let t=new Set;try{if(e.action)return t;if(e.operation===Yr.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(Z5,"getRecordAttributes");function rT(e,t,r){let s=new Map;if(dn.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 e8(e,t,r,s,n,i,o){let c=new Set(i),u=rT(e,s,n);tT(c,u,t,n,s,o,r)}a(e8,"verifyBulkLoadAttributePerms")});var Dd=T((S_e,fM)=>{"use strict";fM.exports={evaluateSQL:f8,processAST:dM,convertSQLToAST:_M,checkASTPermissions:lM};var t8=Fr(),uM=require("util"),r8=uM.callbackify(t8.insert),s8=Hr().search,n8=pw().update,i8=uM.callbackify(n8),o8=Tw().convertDelete,Xn=require("alasql"),a8=Cd(),Ld=G(),c8=f_(),u8=$(),su=b(),{hdb_errors:l8,handleHDBError:sT}=j(),{HTTP_STATUS_CODES:nT}=l8;c8(Xn);var _8=403,d8="There was a problem performing this insert. Please check the logs and try again.",iT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function f8(e,t){let r=e.parsed_sql_object;if(!r){r=_M(e.sql);let s,n=r.ast.statements[0];if(n instanceof Xn.yy.Insert?s=n.into.databaseid:n instanceof Xn.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Xn.yy.Update||n instanceof Xn.yy.Delete?s=n.table.databaseid:Ld.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Xn.yy.Select)&&u8.isEmptyOrZeroLength(s))return t("No schema specified",null)}dM(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(f8,"evaluateSQL");function lM(e,t){let r;try{r=a8.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(lM,"checkASTPermissions");function _M(e){let t=new iT;if(!e)throw sT(new Error,"The 'sql' parameter is missing from the request body",nT.BAD_REQUEST);try{let r=e.trim(),s=Xn.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
15
- `);throw s[1]?sT(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,nT.BAD_REQUEST):sT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",nT.BAD_REQUEST)}return t}a(_M,"convertSQLToAST");function dM(e,t,r){try{let s=E8;if(!e.bypass_auth&&!t.permissions_checked){let i=lM(e,t);if(i&&i.length>0)return r(_8,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case su.VALID_SQL_OPS_ENUM.SELECT:s=s8,n=t.ast.statements[0];break;case su.VALID_SQL_OPS_ENUM.INSERT:s=h8;break;case su.VALID_SQL_OPS_ENUM.UPDATE:s=i8;break;case su.VALID_SQL_OPS_ENUM.DELETE:s=o8;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(dM,"processAST");function E8(e,t){Ld.info(e),t("unknown sql statement")}a(E8,"nullFunction");function h8({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=m8(i,e.values)}catch(o){return r(o)}r8(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Ld.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(h8,"convertInsert");function m8(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]]=Xn.compile(`SELECT ${n.toString()} AS [${su.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Ld.error(r),new Error(d8)}}a(m8,"createDataObjects")});var oT=T((R_e,hM)=>{"use strict";var{S3:p8,GetObjectCommand:S8}=require("@aws-sdk/client-s3");hM.exports={getFileStreamFromS3:T8,getS3AuthObj:EM};async function T8(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await EM(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new S8(r))).Body}a(T8,"getFileStreamFromS3");function EM(e,t,r){return new p8({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(EM,"getS3AuthObj")});var Ud=T((A_e,bM)=>{"use strict";var SM=Hr(),R8=Dd(),g8=oT(),{AsyncParser:A8,Transform:O8}=require("json2csv"),iu=require("stream"),yr=$(),aT=require("fs-extra"),N8=require("path"),Wr=G(),{promisify:TM}=require("util"),nu=$(),{handleHDBError:it,hdb_errors:b8}=j(),{HDB_ERROR_MSGS:or,HTTP_STATUS_CODES:ot}=b8,{streamAsJSON:y8}=PE(),{Upload:I8}=require("@aws-sdk/lib-storage"),mM=["search_by_value","search_by_hash","sql"],pM=["json","csv"],RM="json",gM="csv",w8="Successfully exported JSON locally.",C8="Successfully exported CSV locally.",L8=1e3,D8=SM.searchByHash,U8=SM.searchByValue,M8=TM(R8.evaluateSQL),P8=TM(iu.finished);bM.exports={export_to_s3:F8,export_local:v8,toCsvStream:AM};async function v8(e){Wr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=OM(e);if(!yr.isEmpty(t))throw Wr.error(t),it(new Error,t,ot.BAD_REQUEST,void 0,void 0,!0);if(yr.isEmpty(e.path))throw Wr.error(or.MISSING_VALUE("path")),it(new Error,or.MISSING_VALUE("path"),ot.BAD_REQUEST,void 0,void 0,!0);let r=(yr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(N8.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=yr.buildFolderPath(e.path,r);await B8(e.path);let n=await NM(e);return await H8(s,e.format,n)}a(v8,"export_local");async function B8(e){if(Wr.trace("in confirmPath"),yr.isEmptyOrZeroLength(e))throw it(new Error,`Invalid path: ${e}`,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await aT.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,Wr.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 Wr.error(r),it(new Error,r,ot.BAD_REQUEST,void 0,void 0,!0)}return!0}a(B8,"confirmPath");async function H8(e,t,r){if(Wr.trace("in saveToLocal"),nu.isEmptyOrZeroLength(e))throw it(new Error,or.INVALID_VALUE("file_path"),ot.BAD_REQUEST,void 0,void 0,!0);if(nu.isEmptyOrZeroLength(t))throw it(new Error,or.INVALID_VALUE("Source format"),ot.BAD_REQUEST,void 0,void 0,!0);if(nu.isEmpty(r))throw it(new Error,or.NOT_FOUND("Data"),ot.BAD_REQUEST,void 0,void 0,!0);if(t===RM){let s=aT.createWriteStream(e);return y8(r).pipe(s),await P8(s),{message:w8,path:e}}else if(t===gM){let s=aT.createWriteStream(e),n=iu.Readable.from(r),i={},o={objectMode:!0};return await new A8(i,o).fromInput(n).toOutput(s).promise(!1),{message:C8,path:e}}throw it(new Error,or.INVALID_VALUE("format"),ot.BAD_REQUEST)}a(H8,"saveToLocal");async function F8(e){if(!e.s3||Object.keys(e.s3).length===0)throw it(new Error,or.MISSING_VALUE("S3 object"),ot.BAD_REQUEST);if(yr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw it(new Error,or.MISSING_VALUE("aws_access_key_id"),ot.BAD_REQUEST);if(yr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw it(new Error,or.MISSING_VALUE("aws_secret_access_key"),ot.BAD_REQUEST);if(yr.isEmptyOrZeroLength(e.s3.bucket))throw it(new Error,or.MISSING_VALUE("bucket"),ot.BAD_REQUEST);if(yr.isEmptyOrZeroLength(e.s3.key))throw it(new Error,or.MISSING_VALUE("key"),ot.BAD_REQUEST);if(yr.isEmptyOrZeroLength(e.s3.region))throw it(new Error,or.MISSING_VALUE("region"),ot.BAD_REQUEST);let t=OM(e);if(!yr.isEmpty(t))throw it(new Error,t,ot.BAD_REQUEST);Wr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await NM(e)}catch(u){throw Wr.error(u),u}let s,n=await g8.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new iu.PassThrough;if(e.format===gM){i=e.s3.key+".csv";let u=AM(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===RM){i=e.s3.key+".json";let u=new iu.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%L8===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw it(new Error,or.INVALID_VALUE("format"),ot.BAD_REQUEST);return new I8({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(F8,"export_to_s3");function AM(e){let t=iu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new O8(r,s);return t.pipe(n)}a(AM,"toCsvStream");function OM(e){if(Wr.trace("in exportCoreValidation"),yr.isEmpty(e.format))return"format missing";if(pM.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${pM.join(", ")}`;let t=e.search_operation.operation;if(yr.isEmpty(t))return"search_operation.operation missing";if(mM.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${mM.join(", ")}`}a(OM,"exportCoreValidation");async function NM(e){Wr.trace("in getRecords");let t,r;if(nu.isEmpty(e.search_operation)||nu.isEmptyOrZeroLength(e.search_operation.operation))throw it(new Error,or.INVALID_VALUE("Search operation"),ot.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=U8;break;case"search_by_hash":t=D8;break;case"sql":t=M8;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Wr.error(r),it(new Error,r,ot.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(NM,"getRecords")});var MM={};Qe(MM,{contentTypes:()=>uT,findBestSerializer:()=>vd,getDeserializer:()=>Jo,registerContentHandlers:()=>lT,serialize:()=>Bd,serializeMessage:()=>zn});function q8(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function lT(e){e.register(x8,{serializers:[{regex:/^application\/json$/,serializer:Md.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Gi.EncoderStream(ou).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Pd.Readable.from((0,ks.encodeIter)(t,ou)):(0,ks.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,cT.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,ks.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Gi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function vd(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 S=h.indexOf("=");f[h.substring(0,S)]=h.substring(S+1)}d=+f.q;let E=Lt.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(Lt.keys()).join(", "))}};s=Lt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function Bd(e,t,r){let s=IM&&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=vd(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,En.createBrotliCompress)({params:{[En.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?En.constants.BROTLI_MODE_TEXT:En.constants.BROTLI_MODE_GENERIC,[En.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>IM?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,En.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function zn(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=vd(t);return r=t.serialize=s.serializer.serialize,r(e)}function k8(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 Jo(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Lt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Lt.get(e)?.deserialize||wM(e,s);return o=>k8(o).then(i)}return e&&Lt.get(e)?.deserialize||wM(e,s)}function wM(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 V8(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 Md,cT,ks,Gi,En,Pd,CM,LM,DM,ou,Lt,uT,yM,UM,G8,x8,IM,Vo=Te(()=>{Md=U(PE()),cT=U(Ud()),ks=require("msgpackr"),Gi=require("cbor-x"),En=require("zlib"),Pd=require("stream");Ur();CM=require("../../index"),LM=U(X()),DM=U(b()),ou={useRecords:!1,useToJSON:!0},Lt=new Map,uT=Lt;ut.contentTypes=uT;(0,CM._assignPackageExport)("contentTypes",uT);Lt.set("application/json",{serializeStream:Md.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});yM=new Gi.Encoder(ou);Lt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Gi.EncoderStream(ou).end(e)},serialize:yM.encode,deserialize:yM.decode,q:1});Lt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Pd.Readable.from((0,ks.encodeIter)(e,ou)):(0,ks.pack)(e)},serialize:ks.pack,deserialize:ks.unpack,q:.9});Lt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,cT.toCsvStream)(e)},q:.1});Lt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Lt.set("text/event-stream",{serializeStream:function(e){return Pd.Readable.from(V8(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=bU(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 Qo.info(`finished installModules with response ${i}`),i}a(e5,"installModules");function bU(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(bU,"parseNPMStdErr");async function t5(e){Qo.info(`starting auditModules for request: ${e}`);let t=IU(e);if(t)throw Ko(t,t.message,Wo.BAD_REQUEST);let{projects:r}=e;await Rd(),await yU(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=Td.join(kS,o);s[o]={npm_output:null,npm_error:null};try{let u=await Zc("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=bU(u.stderr)}}return Qo.info(`finished auditModules with response ${s}`),s}a(t5,"auditModules");async function Rd(){try{return await Zc("npm -v"),!0}catch{throw Ko(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Wo.BAD_REQUEST,void 0,void 0,!0)}}a(Rd,"checkNPMInstalled");async function yU(e){if(!Array.isArray(e)||e.length===0)throw Ko(new Error,"projects argument must be an array with at least 1 element",Wo.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=Td.join(kS,i.toString());if(!await AU.pathExists(o)){t.push(i);continue}let u=Td.join(o,"package.json");await AU.pathExists(u)||r.push(i)}if(t.length>0)throw Ko(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Wo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ko(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Wo.BAD_REQUEST,void 0,void 0,!0)}a(yU,"checkProjectPaths");function IU(e){let t=Sd.object({projects:Sd.array().min(1).items(Sd.string()).required(),dry_run:Sd.boolean().default(!1)});return zZ.validateBySchema(e,t)}a(IU,"modulesValidator")});var $S=T((i_e,MU)=>{"use strict";var zo=require("fs-extra"),VS=require("path"),Ad=G(),CU=$(),Od=b(),UU=X(),r5=Er();MU.exports=s5;async function s5(){let e=n5(),t=UU.get(Od.CONFIG_PARAMS.ROOTPATH),r=VS.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Od.PACKAGE_ROOT}},n=VS.join(t,"node_modules");await zo.ensureDir(n);let i,o=!0,c=!1;try{i=await zo.readJson(r)}catch(u){if(CU.isEmptyOrZeroLength(e))return;if(u.code!==Od.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!CU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await LU(_);s.dependencies[u]=l+_}if(!o){Ad.notify("Installing components"),await DU(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await LU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Ad.notify("Removing component",u),c=!0);c&&(Ad.notify("Updating components."),await DU(r,s,i))}a(s5,"installComponents");function n5(){let e=r5.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(n5,"getComponentsConfig");async function LU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":VS.extname(e)||await zo.pathExists(e)?"file:":"github:"}a(LU,"getPkgPrefix");async function DU(e,t,r){Ad.trace("npm installing components package.json",t),await zo.writeFile(e,JSON.stringify(t,null," "));try{await gd().installAllRootModules(UU.get(Od.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await zo.writeFile(e,JSON.stringify(r,null," ")):await zo.unlink(e),s}}a(DU,"installPackages")});var WS=T((c_e,HU)=>{"use strict";var Le=require("fs-extra"),YS=require("fast-glob"),le=require("path"),vU=require("tar-fs"),a_e=require("uuid").v4,KS=require("normalize-path"),Gs=gU(),pt=G(),Me=b(),nt=X(),eu=Er(),i5=$(),{PACKAGE_ROOT:o5}=b(),{handleHDBError:St,hdb_errors:a5}=j(),{basename:c5}=require("path"),u5=$S(),BU=X(),l5=b(),{Readable:_5}=require("stream"),{HDB_ERROR_MSGS:Fi,HTTP_STATUS_CODES:Tt}=a5,d5=le.join(o5,"application-template"),PU=le.join(nt.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function f5(){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,Fi.FUNCTION_STATUS,Tt.INTERNAL_SERVER_ERROR,pt.ERR,t)}return e}a(f5,"customFunctionsStatus");function E5(){pt.trace("getting custom api endpoints");let e={},t=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT);try{YS.sync(KS(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:YS.sync(KS(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:YS.sync(KS(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw St(new Error,Fi.GET_FUNCTIONS,Tt.INTERNAL_SERVER_ERROR,pt.ERR,r)}return e}a(E5,"getCustomFunctions");function h5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Gs.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,Fi.GET_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,c)}}a(h5,"getCustomFunction");function m5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Gs.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,Fi.SET_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,c)}}a(m5,"setCustomFunction");function p5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Gs.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,Fi.DROP_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,o)}}a(p5,"dropCustomFunction");function S5(e){e.project&&(e.project=le.parse(e.project).name);let t=Gs.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(d5,n),`Successfully added project: ${s}`}catch(n){throw St(new Error,Fi.ADD_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,n)}}a(S5,"addComponent");function T5(e){e.project&&(e.project=le.parse(e.project).name);let t=Gs.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(!i5.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 eu.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,Fi.DROP_FUNCTION_PROJECT,Tt.INTERNAL_SERVER_ERROR,pt.ERR,i)}}a(T5,"dropCustomFunctionProject");async function R5(e){e.project&&(e.project=le.parse(e.project).name);let t=Gs.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(PU);let i=le.join(PU,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(le.join(n,"node_modules"))}),vU.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(R5,"packageComponent");async function g5(e){e.project&&(e.project=le.parse(e.project).name);let t=Gs.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=_5.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(vU.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 eu.addConfig(s,{package:i}),!n){await u5();let f=BU.get(l5.CONFIG_PARAMS.ROOTPATH);o=le.join(f,"node_modules",s)}let c=new Map;c.isWorker=!0;let u=(bd(),Z(Nd)),_;u.setErrorReporter(f=>_=f);let l=c5(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(g5,"deployComponent");async function A5(){let e=eu.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=(bd(),Z(Nd)).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(A5,"getComponents");async function O5(e){let t=Gs.getComponentFileValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let s=eu.getConfigObj()[e.project]||e.project==="harperdb"?le.join(BU.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(O5,"getComponentFile");async function N5(e){let t=Gs.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(N5,"setComponentFile");async function b5(e){let t=Gs.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),eu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(b5,"dropComponent");HU.exports={customFunctionsStatus:f5,getCustomFunctions:E5,getCustomFunction:h5,setCustomFunction:m5,dropCustomFunction:p5,addComponent:S5,dropCustomFunctionProject:T5,packageComponent:R5,deployComponent:g5,getComponents:A5,getComponentFile:O5,setComponentFile:N5,dropComponent:b5}});var QS=T((l_e,qU)=>{"use strict";var xs=require("joi"),FU=qe();qU.exports={readTransactionLogValidator:y5,deleteTransactionLogsBeforeValidator:I5};function y5(e){let t=xs.object({schema:xs.string().required(),table:xs.string().required(),from:xs.date().timestamp(),to:xs.date().timestamp(),limit:xs.number().min(1)});return FU.validateBySchema(e,t)}a(y5,"readTransactionLogValidator");function I5(e){let t=xs.object({schema:xs.string().required(),table:xs.string().required(),timestamp:xs.date().timestamp().required()});return FU.validateBySchema(e,t)}a(I5,"deleteTransactionLogsBeforeValidator")});var Id=T((d_e,$U)=>{"use strict";var zS=b(),yd=_t(),GU=$(),xU=X(),kU=nn(),{handleHDBError:Jo,hdb_errors:w5}=j(),{HTTP_STATUS_CODES:Xo}=w5,{readTransactionLogValidator:C5,deleteTransactionLogsBeforeValidator:L5}=QS(),VU="This operation relies on clustering and cannot run with it disable.",D5="Logs successfully deleted from transaction log.",U5="All logs successfully deleted from transaction log.";$U.exports={readTransactionLog:M5,deleteTransactionLogsBefore:P5};async function*M5(e){let t=C5(e);if(t)throw Jo(t,t.message,Xo.BAD_REQUEST,void 0,void 0,!0);if(!xU.get(zS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Jo(new Error,VU,Xo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=GU.checkSchemaTableExist(r,s);if(n)throw Jo(new Error,n,Xo.NOT_FOUND,void 0,void 0,!0);let i=kU.createNatsTableStreamName(r,s),o=await yd.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===zS.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(M5,"readTransactionLog");async function P5(e){let t=L5(e);if(t)throw Jo(t,t.message,Xo.BAD_REQUEST,void 0,void 0,!0);if(!xU.get(zS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Jo(new Error,VU,Xo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=GU.checkSchemaTableExist(r,s);if(i)throw Jo(new Error,i,Xo.NOT_FOUND,void 0,void 0,!0);let o=kU.createNatsTableStreamName(r,s),{jsm:c}=await yd.getNATSReferences(),u=await yd.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=D5,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=U5):d=(await yd.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(P5,"deleteTransactionLogsBefore")});var KU=T((E_e,YU)=>{"use strict";var JS=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}};YU.exports=JS});var QU=T((m_e,WU)=>{"use strict";var XS=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};WU.exports=XS});var ZS=T((S_e,JU)=>{"use strict";var zU=KU(),v5=QU(),{HDB_ERROR_MSGS:B5}=dr(),jS=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=B5.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 zU(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new v5(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 zU(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}};JU.exports=jS});var Dd=T((R_e,dM)=>{"use strict";var eT=qr(),wd=Fr(),Wr=C_(),su=pi(),tT=Ai(),H5=hp(),F5=wC(),nu=Gr(),Cd=Np(),dt=G(),q5=Ip(),G5=W_(),x5=cS(),k5=X_(),V5=uS(),$5=lS(),Y5=fS(),K5=hS(),rT=SS(),dn=$(),W5=bD(),sT=OS(),ZU=_d(),Kr=b(),eM=iU(),Q5=Fo(),tM=Uc(),rM=(md(),Z(zc)),sM=Er(),br=WS(),z5=require("alasql"),nM=Id(),iM=gd(),oM=ZS(),{handleHDBError:ir,hdb_errors:aM}=j(),{HDB_ERROR_MSGS:Ct,HTTP_STATUS_CODES:tu}=aM,v=new Map,cM="delete",Jn="insert",fn="read",qi="update",ru="describe",XU=su.describeSchema.name,jU=su.describeTable.name,uM={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},J5="catchup",X5="handleGetJob",j5="handleGetJobsByStartDate",Ld={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Z5=[Wr.createTable.name,Wr.createAttribute.name,Wr.dropTable.name,Wr.dropAttribute.name],lM={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},F=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};v.set(eT.insert.name,new F(!1,[Jn]));v.set(eT.update.name,new F(!1,[qi]));v.set(eT.upsert.name,new F(!1,[Jn,qi]));v.set(wd.searchByConditions.name,new F(!1,[fn]));v.set(wd.searchByHash.name,new F(!1,[fn]));v.set(wd.searchByValue.name,new F(!1,[fn]));v.set(wd.search.name,new F(!1,[fn]));v.set(Wr.createSchema.name,new F(!0,[]));v.set(Wr.createTable.name,new F(!0,[]));v.set(Wr.createAttribute.name,new F(!1,[Jn]));v.set(Wr.dropSchema.name,new F(!0,[]));v.set(Wr.dropTable.name,new F(!0,[]));v.set(Wr.dropAttribute.name,new F(!0,[]));v.set(su.describeSchema.name,new F(!1,[fn]));v.set(su.describeTable.name,new F(!1,[fn]));v.set(tT.deleteRecord.name,new F(!1,[cM]));v.set(nu.addUser.name,new F(!0,[]));v.set(nu.alterUser.name,new F(!0,[]));v.set(nu.dropUser.name,new F(!0,[]));v.set(nu.listUsersExternal.name,new F(!0,[]));v.set(Cd.listRoles.name,new F(!0,[]));v.set(Cd.addRole.name,new F(!0,[]));v.set(Cd.alterRole.name,new F(!0,[]));v.set(Cd.dropRole.name,new F(!0,[]));v.set(q5.name,new F(!0,[]));v.set(G5.name,new F(!0,[]));v.set(x5.name,new F(!0,[]));v.set(k5.name,new F(!0,[]));v.set(V5.name,new F(!0,[]));v.set($5.name,new F(!0,[]));v.set(rT.setRoutes.name,new F(!0,[]));v.set(rT.getRoutes.name,new F(!0,[]));v.set(rT.deleteRoutes.name,new F(!0,[]));v.set(sM.setConfiguration.name,new F(!0,[]));v.set(Y5.clusterStatus.name,new F(!0,[]));v.set(K5.name,new F(!0,[]));v.set(sT.getFingerprint.name,new F(!0,[]));v.set(sT.setLicense.name,new F(!0,[]));v.set(tT.deleteFilesBefore.name,new F(!0,[]));v.set(tT.deleteAuditLogsBefore.name,new F(!0,[]));v.set(ZU.restart.name,new F(!0,[]));v.set(ZU.restartService.name,new F(!0,[]));v.set(H5.name,new F(!0,[]));v.set(F5.name,new F(!0,[fn]));v.set(Q5.systemInformation.name,new F(!0,[]));v.set(sM.getConfiguration.name,new F(!0,[]));v.set(nM.readTransactionLog.name,new F(!0,[]));v.set(nM.deleteTransactionLogsBefore.name,new F(!0,[]));v.set(iM.installModules.name,new F(!0,[]));v.set(iM.auditModules.name,new F(!0,[]));v.set(tM.createTokens.name,new F(!1,[]));v.set(tM.refreshOperationToken.name,new F(!1,[]));v.set(rM.login.name,new F(!1,[]));v.set(rM.logout.name,new F(!1,[]));v.set(br.customFunctionsStatus.name,new F(!0,[]));v.set(br.getCustomFunctions.name,new F(!0,[]));v.set(br.getComponents.name,new F(!0,[]));v.set(br.getComponentFile.name,new F(!0,[]));v.set(br.setComponentFile.name,new F(!0,[]));v.set(br.dropComponent.name,new F(!0,[]));v.set(br.getCustomFunction.name,new F(!0,[]));v.set(br.setCustomFunction.name,new F(!0,[]));v.set(br.dropCustomFunction.name,new F(!0,[]));v.set(br.addComponent.name,new F(!0,[]));v.set(br.dropCustomFunctionProject.name,new F(!0,[]));v.set(br.packageComponent.name,new F(!0,[]));v.set(br.deployComponent.name,new F(!0,[]));v.set(sT.getRegistrationInfo.name,new F(!1,[]));v.set(nu.userInfo.name,new F(!1,[]));v.set(su.describeAll.name,new F(!1,[]));v.set(X5,new F(!1,[]));v.set(j5,new F(!0,[]));v.set(J5,new F(!0,[]));v.set(Ld.CSV_DATA_LOAD,new F(!1,[Jn,qi]));v.set(Ld.CSV_URL_LOAD,new F(!1,[Jn,qi]));v.set(Ld.CSV_FILE_LOAD,new F(!1,[Jn,qi]));v.set(Ld.IMPORT_FROM_S3,new F(!1,[Jn,qi]));v.set(lM.EXPORT_TO_S3,new F(!0,[]));v.set(lM.EXPORT_LOCAL,new F(!0,[]));v.set(Kr.VALID_SQL_OPS_ENUM.DELETE,new F(!1,[cM]));v.set(Kr.VALID_SQL_OPS_ENUM.SELECT,new F(!1,[fn]));v.set(Kr.VALID_SQL_OPS_ENUM.INSERT,new F(!1,[Jn]));v.set(Kr.VALID_SQL_OPS_ENUM.UPDATE,new F(!1,[qi]));dM.exports={verifyPerms:t8,verifyPermsAst:e8,verifyBulkLoadAttributePerms:s8};function e8(e,t,r){if(dn.isEmptyOrZeroLength(e))throw dt.info("verify_perms_ast has an empty user parameter"),ir(new Error);if(dn.isEmptyOrZeroLength(t))throw dt.info("verify_perms_ast has an empty user parameter"),ir(new Error);if(dn.isEmptyOrZeroLength(r))throw dt.info("verify_perms_ast has a null operation parameter"),ir(new Error);try{let s=new oM,n=new W5(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."),ir(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&uM[r])throw ir(new Error,Ct.DROP_SYSTEM,tu.FORBIDDEN);if(c&&!u)return null;let _=eM.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof z5.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=_M(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=iT(t.role.permission,f,d[E]);nT(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw ir(s)}}a(e8,"verifyPermsAst");function t8(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw dt.info("null required parameter in verifyPerms"),ir(new Error,Ct.DEFAULT_INVALID_REQUEST,tu.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 oM;if(dn.isEmptyOrZeroLength(e.hdb_user.role)||dn.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(Ct.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(Kr.SYSTEM_SCHEMA_NAME)||n===Kr.SYSTEM_SCHEMA_NAME;if(l&&uM[r])throw ir(new Error,Ct.DROP_SYSTEM,tu.FORBIDDEN);if(u&&!l||_===!0&&(r===Wr.createSchema.name||r===Wr.dropSchema.name))return null;if(Z5.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=eM.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===XU||r===jU){if(n===Kr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ct.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===XU&&(!d[n]||!d[n][ru]))return c.handleInvalidItem(Ct.SCHEMA_NOT_FOUND(n));if(r===jU&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][ru]))return c.handleInvalidItem(Ct.TABLE_NOT_FOUND(n,i))}}let f=_M(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&&Kr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[Kr.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(I=>I[Kr.PERMS_CRUD_ENUM.READ]).forEach(I=>{p.push(I.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(A=>A.attribute),e.get_attributes=p)}let E=r8(e),h=iT(e.hdb_user.role.permission,n,i);return nT(E,h,r,i,n,c,s),c.getPermsResponse()}a(t8,"verifyPerms");function _M(e,t,r,s,n){if(dn.arrayHasEmptyValues([e,t,r]))throw dt.info("hasPermissions has an invalid parameter"),ir(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.`),ir(new Error,Ct.OP_NOT_FOUND(t),tu.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return dt.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ct.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][ru]===!1){s.addInvalidItem(Ct.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ct.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[ru]===!1)s.addInvalidItem(Ct.TABLE_NOT_FOUND(u,l));else try{let f=[],E=v.get(t).perms;!dn.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=Ct.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw dt.error(E),dt.error(f),ir(aM.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(_M,"hasPermissions");function nT(e,t,r,s,n,i,o){if(!e||!t)throw dt.info("no attributes specified in checkAttributePerms."),ir(new Error);let c=v.get(r).perms;if(!c||c==="")throw dt.info(`no permissions found for ${r} in checkAttributePerms().`),ir(new Error);if(dn.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[ru]===!1){i.addInvalidItem(Ct.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(Kr.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==fn)throw ir(new Error,Ct.SYSTEM_TIMESTAMP_PERMS_ERR,tu.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Ct.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(nT,"checkAttributePerms");function r8(e){let t=new Set;try{if(e.action)return t;if(e.operation===Kr.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(r8,"getRecordAttributes");function iT(e,t,r){let s=new Map;if(dn.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(iT,"getAttributePermissions");function s8(e,t,r,s,n,i,o){let c=new Set(i),u=iT(e,s,n);nT(c,u,t,n,s,o,r)}a(s8,"verifyBulkLoadAttributePerms")});var Md=T((A_e,pM)=>{"use strict";pM.exports={evaluateSQL:m8,processAST:mM,convertSQLToAST:hM,checkASTPermissions:EM};var n8=qr(),fM=require("util"),i8=fM.callbackify(n8.insert),o8=Fr().search,a8=gw().update,c8=fM.callbackify(a8),u8=Ow().convertDelete,Xn=require("alasql"),l8=Dd(),Ud=G(),_8=h_(),d8=$(),iu=b(),{hdb_errors:f8,handleHDBError:oT}=j(),{HTTP_STATUS_CODES:aT}=f8;_8(Xn);var E8=403,h8="There was a problem performing this insert. Please check the logs and try again.",cT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function m8(e,t){let r=e.parsed_sql_object;if(!r){r=hM(e.sql);let s,n=r.ast.statements[0];if(n instanceof Xn.yy.Insert?s=n.into.databaseid:n instanceof Xn.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Xn.yy.Update||n instanceof Xn.yy.Delete?s=n.table.databaseid:Ud.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Xn.yy.Select)&&d8.isEmptyOrZeroLength(s))return t("No schema specified",null)}mM(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(m8,"evaluateSQL");function EM(e,t){let r;try{r=l8.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(EM,"checkASTPermissions");function hM(e){let t=new cT;if(!e)throw oT(new Error,"The 'sql' parameter is missing from the request body",aT.BAD_REQUEST);try{let r=e.trim(),s=Xn.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
15
+ `);throw s[1]?oT(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,aT.BAD_REQUEST):oT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",aT.BAD_REQUEST)}return t}a(hM,"convertSQLToAST");function mM(e,t,r){try{let s=p8;if(!e.bypass_auth&&!t.permissions_checked){let i=EM(e,t);if(i&&i.length>0)return r(E8,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case iu.VALID_SQL_OPS_ENUM.SELECT:s=o8,n=t.ast.statements[0];break;case iu.VALID_SQL_OPS_ENUM.INSERT:s=S8;break;case iu.VALID_SQL_OPS_ENUM.UPDATE:s=c8;break;case iu.VALID_SQL_OPS_ENUM.DELETE:s=u8;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(mM,"processAST");function p8(e,t){Ud.info(e),t("unknown sql statement")}a(p8,"nullFunction");function S8({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=T8(i,e.values)}catch(o){return r(o)}i8(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Ud.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(S8,"convertInsert");function T8(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]]=Xn.compile(`SELECT ${n.toString()} AS [${iu.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Ud.error(r),new Error(h8)}}a(T8,"createDataObjects")});var uT=T((N_e,TM)=>{"use strict";var{S3:R8,GetObjectCommand:g8}=require("@aws-sdk/client-s3");TM.exports={getFileStreamFromS3:A8,getS3AuthObj:SM};async function A8(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await SM(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new g8(r))).Body}a(A8,"getFileStreamFromS3");function SM(e,t,r){return new R8({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(SM,"getS3AuthObj")});var Pd=T((y_e,CM)=>{"use strict";var AM=Fr(),O8=Md(),N8=uT(),{AsyncParser:b8,Transform:y8}=require("json2csv"),au=require("stream"),yr=$(),lT=require("fs-extra"),I8=require("path"),Qr=G(),{promisify:OM}=require("util"),ou=$(),{handleHDBError:it,hdb_errors:w8}=j(),{HDB_ERROR_MSGS:or,HTTP_STATUS_CODES:ot}=w8,{streamAsJSON:C8}=BE(),{Upload:L8}=require("@aws-sdk/lib-storage"),RM=["search_by_value","search_by_hash","sql"],gM=["json","csv"],NM="json",bM="csv",D8="Successfully exported JSON locally.",U8="Successfully exported CSV locally.",M8=1e3,P8=AM.searchByHash,v8=AM.searchByValue,B8=OM(O8.evaluateSQL),H8=OM(au.finished);CM.exports={export_to_s3:x8,export_local:F8,toCsvStream:yM};async function F8(e){Qr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=IM(e);if(!yr.isEmpty(t))throw Qr.error(t),it(new Error,t,ot.BAD_REQUEST,void 0,void 0,!0);if(yr.isEmpty(e.path))throw Qr.error(or.MISSING_VALUE("path")),it(new Error,or.MISSING_VALUE("path"),ot.BAD_REQUEST,void 0,void 0,!0);let r=(yr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(I8.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=yr.buildFolderPath(e.path,r);await q8(e.path);let n=await wM(e);return await G8(s,e.format,n)}a(F8,"export_local");async function q8(e){if(Qr.trace("in confirmPath"),yr.isEmptyOrZeroLength(e))throw it(new Error,`Invalid path: ${e}`,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await lT.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,Qr.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 Qr.error(r),it(new Error,r,ot.BAD_REQUEST,void 0,void 0,!0)}return!0}a(q8,"confirmPath");async function G8(e,t,r){if(Qr.trace("in saveToLocal"),ou.isEmptyOrZeroLength(e))throw it(new Error,or.INVALID_VALUE("file_path"),ot.BAD_REQUEST,void 0,void 0,!0);if(ou.isEmptyOrZeroLength(t))throw it(new Error,or.INVALID_VALUE("Source format"),ot.BAD_REQUEST,void 0,void 0,!0);if(ou.isEmpty(r))throw it(new Error,or.NOT_FOUND("Data"),ot.BAD_REQUEST,void 0,void 0,!0);if(t===NM){let s=lT.createWriteStream(e);return C8(r).pipe(s),await H8(s),{message:D8,path:e}}else if(t===bM){let s=lT.createWriteStream(e),n=au.Readable.from(r),i={},o={objectMode:!0};return await new b8(i,o).fromInput(n).toOutput(s).promise(!1),{message:U8,path:e}}throw it(new Error,or.INVALID_VALUE("format"),ot.BAD_REQUEST)}a(G8,"saveToLocal");async function x8(e){if(!e.s3||Object.keys(e.s3).length===0)throw it(new Error,or.MISSING_VALUE("S3 object"),ot.BAD_REQUEST);if(yr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw it(new Error,or.MISSING_VALUE("aws_access_key_id"),ot.BAD_REQUEST);if(yr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw it(new Error,or.MISSING_VALUE("aws_secret_access_key"),ot.BAD_REQUEST);if(yr.isEmptyOrZeroLength(e.s3.bucket))throw it(new Error,or.MISSING_VALUE("bucket"),ot.BAD_REQUEST);if(yr.isEmptyOrZeroLength(e.s3.key))throw it(new Error,or.MISSING_VALUE("key"),ot.BAD_REQUEST);if(yr.isEmptyOrZeroLength(e.s3.region))throw it(new Error,or.MISSING_VALUE("region"),ot.BAD_REQUEST);let t=IM(e);if(!yr.isEmpty(t))throw it(new Error,t,ot.BAD_REQUEST);Qr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await wM(e)}catch(u){throw Qr.error(u),u}let s,n=await N8.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new au.PassThrough;if(e.format===bM){i=e.s3.key+".csv";let u=yM(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===NM){i=e.s3.key+".json";let u=new au.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%M8===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw it(new Error,or.INVALID_VALUE("format"),ot.BAD_REQUEST);return new L8({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(x8,"export_to_s3");function yM(e){let t=au.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new y8(r,s);return t.pipe(n)}a(yM,"toCsvStream");function IM(e){if(Qr.trace("in exportCoreValidation"),yr.isEmpty(e.format))return"format missing";if(gM.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${gM.join(", ")}`;let t=e.search_operation.operation;if(yr.isEmpty(t))return"search_operation.operation missing";if(RM.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${RM.join(", ")}`}a(IM,"exportCoreValidation");async function wM(e){Qr.trace("in getRecords");let t,r;if(ou.isEmpty(e.search_operation)||ou.isEmptyOrZeroLength(e.search_operation.operation))throw it(new Error,or.INVALID_VALUE("Search operation"),ot.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=v8;break;case"search_by_hash":t=P8;break;case"sql":t=B8;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Qr.error(r),it(new Error,r,ot.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(wM,"getRecords")});var HM={};Qe(HM,{contentTypes:()=>dT,findBestSerializer:()=>Hd,getDeserializer:()=>jo,registerContentHandlers:()=>fT,serialize:()=>Fd,serializeMessage:()=>zn});function k8(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function fT(e){e.register($8,{serializers:[{regex:/^application\/json$/,serializer:vd.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Gi.EncoderStream(cu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Bd.Readable.from((0,ks.encodeIter)(t,cu)):(0,ks.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,_T.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,ks.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Gi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Hd(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=Lt.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(Lt.keys()).join(", "))}};s=Lt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function Fd(e,t,r){let s=DM&&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=Hd(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,En.createBrotliCompress)({params:{[En.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?En.constants.BROTLI_MODE_TEXT:En.constants.BROTLI_MODE_GENERIC,[En.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>DM?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,En.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function zn(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=Hd(t);return r=t.serialize=s.serializer.serialize,r(e)}function Y8(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 jo(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Lt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Lt.get(e)?.deserialize||UM(e,s);return o=>Y8(o).then(i)}return e&&Lt.get(e)?.deserialize||UM(e,s)}function UM(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 K8(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 vd,_T,ks,Gi,En,Bd,MM,PM,vM,cu,Lt,dT,LM,BM,V8,$8,DM,Yo=Te(()=>{vd=M(BE()),_T=M(Pd()),ks=require("msgpackr"),Gi=require("cbor-x"),En=require("zlib"),Bd=require("stream");Ur();MM=require("../../index"),PM=M(X()),vM=M(b()),cu={useRecords:!1,useToJSON:!0},Lt=new Map,dT=Lt;ut.contentTypes=dT;(0,MM._assignPackageExport)("contentTypes",dT);Lt.set("application/json",{serializeStream:vd.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});LM=new Gi.Encoder(cu);Lt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Gi.EncoderStream(cu).end(e)},serialize:LM.encode,deserialize:LM.decode,q:1});Lt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Bd.Readable.from((0,ks.encodeIter)(e,cu)):(0,ks.pack)(e)},serialize:ks.pack,deserialize:ks.unpack,q:.9});Lt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,_T.toCsvStream)(e)},q:.1});Lt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Lt.set("text/event-stream",{serializeStream:function(e){return Bd.Readable.from(K8(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,8 +21,8 @@
21
21
 
22
22
  `:`data: ${e}
23
23
 
24
- `},q:.8});Lt.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()}});UM={type:"application/json",serializeStream:Md.streamAsJSON,serialize:JSON.stringify,deserialize:q8,q:.8};Lt.set("*/*",UM);Lt.set("",UM);a(q8,"tryJSONParse");a(lT,"registerContentHandlers");G8=require("fastify-plugin"),x8=G8(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=vd(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(vd,"findBestSerializer");IM=LM.default.get(DM.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Bd,"serialize");a(zn,"serializeMessage");a(k8,"streamToBuffer");a(Jo,"getDeserializer");a(wM,"deserializerUnknownType");a(V8,"transformIterable")});var Hd={};Qe(Hd,{start:()=>K8});async function Y8(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&dl(e);let n=new Bi;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 S=_.match(/max-age=(\d+)/)?.[1];S&&(e.expiresAt=S*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=Jo(r["content-type"],!0)(e.body)}catch(S){throw new cu.ClientError(S,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 cu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new cu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,_T.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){$8[0]=f;let S=String.fromCharCode(34,(Dt[0]&63)+62,(Dt[0]>>6)+(Dt[1]<<2&63)+62,(Dt[1]>>4)+(Dt[2]<<4&63)+62,(Dt[2]>>2)+62,(Dt[3]&63)+62,(Dt[3]>>6)+(Dt[4]<<2&63)+62,(Dt[4]>>4)+(Dt[5]<<4&63)+62,(Dt[5]>>2)+62,(Dt[6]&63)+62,(Dt[6]>>6)+(Dt[7]<<2&63)+62,34),p=r["if-none-match"];p&&S==p?(l?.onDone&&l.onDone(),d=304,l=void 0):n.setIfNone("ETag",S),_T.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=Bd(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?xi.warn(i):xi.info(i):xi.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=Bd(i.contentType?i:i.toString(),e,o),o}}function K8(e){_T=e,!PM&&(PM=!0,dT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Y8(t,r)}),e.server.ws(async(t,r,s)=>{au++;let n=new ss;vM||(vM=!0,Rc(l=>{au>0&&l.push({metric:"ws-connections",connections:au,byThread:!0})}));let i;t.on("error",l=>{i=!0,xi.warn(l)});let o;t.on("message",a(function(d){o||(o=Jo(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{au--,Gr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=dT.getMatch(u);if(Gr(!!_,"connection","ws","connect"),!_)t.send(zn(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,Or(h=>({count:h.count,total:au}),"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=zn(E.value,r);t.send(h),Or(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var xi,cu,Dt,$8,_T,PM,dT,vM,au,BM=Te(()=>{Vo();xn();xi=U(G()),cu=U(j());fl();Da();di();FS();Dt=new Uint8Array(8),$8=new Float64Array(Dt.buffer,0,1),_T={};a(Y8,"http");au=0;a(K8,"start")});var fT=T((M_e,HM)=>{var{recordAction:Fd,recordActionBinary:W8}=(xn(),Z(T_)),Q8=require("fastify-plugin"),z8=200;HM.exports=Q8(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),Fd(o,"duration",_,d,l),W8(n.raw.statusCode<400,"success",_,d,l);let f=z8;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Fd(performance.now()-c,"transfer",_,d,l),Fd(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Fd(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var pT=T((P_e,kM)=>{var Vd=require("clone"),$d=qe(),J8=$(),xd=b(),X8=G(),qd=require("fs"),ET=require("joi"),{string:kd}=ET.types(),{hdb_errors:j8,handleHDBError:uu}=j(),{HDB_ERROR_MSGS:Z8,HTTP_STATUS_CODES:Gd}=j8,{common_validators:Xo}=Ls(),FM=1e9,qM=" is required",e6=["insert","update","upsert"],hT={database:{presence:!1,format:Xo.schema_format,length:Xo.schema_length},schema:{presence:!1,format:Xo.schema_format,length:Xo.schema_length},table:{presence:!0,format:Xo.schema_format,length:Xo.schema_length},action:{inclusion:{within:e6,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},t6={schema:kd.required(),table:kd.required(),action:kd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:r6,AWS_SECRET:s6,AWS_BUCKET:n6,AWS_FILE_KEY:i6,REGION:o6}=xd.S3_BUCKET_AUTH_KEYS,a6={s3:{presence:!0},[`s3.${r6}`]:{presence:!0,type:"String"},[`s3.${s6}`]:{presence:!0,type:"String"},[`s3.${n6}`]:{presence:!0,type:"String"},[`s3.${i6}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${o6}`]:{presence:!0,type:"String"}},GM=Vd(hT);GM.data.presence={message:qM};var xM=Vd(hT);xM.file_path.presence={message:qM};var c6=Object.assign(Vd(hT),a6),mT=Vd(t6);mT.csv_url=kd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();mT.passthrough_headers=ET.object();function u6(e){let t=$d.validateObject(e,GM);return Yd(e,t)}a(u6,"dataObject");function l6(e){let t=$d.validateBySchema(e,ET.object(mT));return Yd(e,t)}a(l6,"urlObject");function _6(e){let t=$d.validateObject(e,xM);return Yd(e,t)}a(_6,"fileObject");function d6(e){let t=$d.validateObject(e,c6);return Yd(e,t)}a(d6,"s3FileObject");function Yd(e,t){if(!t){let r=J8.checkGlobalSchemaTable(e.schema,e.table);if(r)return uu(new Error,r,Gd.BAD_REQUEST);if(e.operation===xd.OPERATIONS_ENUM.CSV_FILE_LOAD){try{qd.accessSync(e.file_path,qd.constants.R_OK|qd.constants.F_OK)}catch(s){return s.code===xd.NODE_ERROR_CODES.ENOENT?uu(s,`No such file or directory ${s.path}`,Gd.BAD_REQUEST):s.code===xd.NODE_ERROR_CODES.EACCES?uu(s,`Permission denied ${s.path}`,Gd.BAD_REQUEST):uu(s)}try{let s=qd.statSync(e.file_path).size;if(s>FM)return uu(new Error,Z8.MAX_FILE_SIZE_ERR(s,FM),Gd.BAD_REQUEST)}catch(s){X8.error(s),console.error(s)}}}return t}a(Yd,"postValidateChecks");kM.exports={dataObject:u6,urlObject:l6,fileObject:_6,s3FileObject:d6}});var ST=T((B_e,VM)=>{"use strict";var lu=G(),Kd=b();async function f6(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===Kd.OPERATIONS_ENUM.INSERT||t.operation===Kd.OPERATIONS_ENUM.UPDATE||t.operation===Kd.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Kd.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(lu.info(i.message),i):i.http_resp_msg?(lu.error(`Error calling operation: ${e.name}`),lu.error(i.http_resp_msg),i):(lu.error(`Error calling operation: ${e.name}`),lu.error(i),i)}}a(f6,"callOperationFunctionAsAwait");VM.exports={callOperationFunctionAsAwait:f6}});var YM=T((F_e,$M)=>{"use strict";var TT=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}},RT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};$M.exports={BulkLoadFileObject:TT,BulkLoadDataObject:RT}});var WM=T((G_e,KM)=>{"use strict";var gT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};KM.exports=gT});var IT=T((K_e,lP)=>{"use strict";var Wd=Fr(),zd=pT(),E6=require("needle"),ps=b(),k_e=ke(),jo=$(),{handleHDBError:$e,hdb_errors:rP}=j(),{HTTP_STATUS_CODES:Ut,HDB_ERROR_MSGS:ft,CHECK_LOGS_WRAPPER:Vi}=rP,Zo=G(),AT=require("papaparse");jo.promisifyPapaParse();var Ss=require("fs-extra"),h6=require("path"),{chain:QM}=require("stream-chain"),zM=require("stream-json/streamers/StreamArray"),JM=require("stream-json/utils/Batch"),XM=require("stream-chain/utils/comp"),{finished:jM}=require("stream"),m6=X(),sP=ST(),p6=oT(),{BulkLoadFileObject:NT,BulkLoadDataObject:S6}=YM(),bT=JS(),{verifyBulkLoadAttributePerms:nP}=Cd(),V_e=WM(),$_e=_t(),Y_e=nn(),{databases:T6}=(fe(),Z(Ce)),{coerceType:R6}=(Jd(),Z(wT)),ZM="No records parsed from csv file.",ki=`${m6.get("HDB_ROOT")}/tmp`,{schema_regex:g6}=Ls(),eP=1024*1024*2,tP=5e3,A6={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};lP.exports={csvDataLoad:O6,csvURLLoad:N6,csvFileLoad:b6,importFromS3:y6};async function O6(e,t){let r=zd.dataObject(e);if(r)throw $e(r,r.message,Ut.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=aP(e.schema,e.table),i=AT.parse(e.data,{header:!0,skipEmptyLines:!0,transform:OT.bind(null,n),dynamicTyping:!1}),o=new bT;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&nP(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 $e(new Error,c,Ut.BAD_REQUEST,void 0,void 0,!0);let u=new S6(e.action,e.schema,e.table,i.data);return s=await sP.callOperationFunctionAsAwait(cP,u,null),s.message===ZM?ZM:uP(s.records,s.number_written)}catch(n){throw $i(n)}}a(O6,"csvDataLoad");async function N6(e){let t=zd.urlObject(e);if(t)throw $e(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${ki}/${r}`;try{await I6(e,r)}catch(n){throw Zo.error(ft.DOWNLOAD_FILE_ERR(r)+" - "+n),$e(n,Vi(ft.DOWNLOAD_FILE_ERR(r)))}try{let n=new NT(this.job_operation_function.name,e.action,e.schema,e.table,s,ps.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await yT(n);return await Qd(s),i}catch(n){throw await Qd(s),$i(n)}}a(N6,"csvURLLoad");async function b6(e){let t=zd.fileObject(e);if(t)throw $e(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=new NT(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,ps.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await yT(r)}catch(s){throw $i(s)}}a(b6,"csvFileLoad");async function y6(e){let t=zd.s3FileObject(e);if(t)throw $e(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=h6.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${ki}/${n}`;let i=new NT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await w6(n,e);let o=await yT(i);return await Qd(r),o}catch(s){throw await Qd(r),$i(s)}}a(y6,"importFromS3");async function I6(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await E6("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 $e(s,n,s.statusCode,ps.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}L6(r,e.csv_url),await C6(t,r.raw)}a(I6,"downloadCSVFile");async function w6(e,t){try{let r=`${ki}/${e}`;await Ss.mkdirp(ki),await Ss.writeFile(`${ki}/${e}`,"",{flag:"a+"});let s=await Ss.createWriteStream(r),n=await p6.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(){Zo.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Zo.error(ft.S3_DOWNLOAD_ERR+" - "+r),$e(r,Vi(ft.S3_DOWNLOAD_ERR))}}a(w6,"downloadFileFromS3");async function C6(e,t){try{await Ss.mkdirp(ki),await Ss.writeFile(`${ki}/${e}`,t)}catch(r){throw Zo.error(ft.WRITE_TEMP_FILE_ERR),$e(r,Vi(ft.DEFAULT_BULK_LOAD_ERR))}}a(C6,"writeFileToTempFolder");async function Qd(e){if(e)try{await Ss.access(e),await Ss.unlink(e)}catch{Zo.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Qd,"deleteTempFile");function L6(e,t){if(e.statusCode!==rP.HTTP_STATUS_CODES.OK)throw $e(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Ut.BAD_REQUEST);if(!A6[e.headers["content-type"]])throw $e(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Ut.BAD_REQUEST);if(!e.raw)throw $e(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Ut.BAD_REQUEST)}a(L6,"validateURLResponse");async function yT(e){try{let t;switch(e.file_type){case ps.VALID_S3_FILE_TYPES.CSV:t=await D6(e);break;case ps.VALID_S3_FILE_TYPES.JSON:t=await U6(e);break;default:throw $e(new Error,ft.DEFAULT_BULK_LOAD_ERR,Ut.BAD_REQUEST,ps.LOG_LEVELS.ERROR,ft.INVALID_FILE_EXT_ERR(e))}return uP(t.records,t.number_written)}catch(t){throw $i(t)}}a(yT,"fileLoad");async function iP(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 Wd.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&nP(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=$e(c);r(u)}}a(iP,"validateChunk");async function oP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;jo.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!jo.isEmpty(c)&&!jo.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 sP.callOperationFunctionAsAwait(cP,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=$e(c,Vi(ft.INSERT_CSV_ERR),Ut.INTERNAL_SERVER_ERROR,ps.LOG_LEVELS.ERROR,ft.INSERT_CSV_ERR+" - "+c);r(u)}}a(oP,"insertChunk");async function D6(e){let t={records:0,number_written:0},r=aP(e.schema,e.table);try{let s=new bT,n=Ss.createReadStream(e.file_path,{highWaterMark:eP});n.setEncoding("utf8"),await AT.parsePromise(n,iP.bind(null,e,s),OT.bind(null,r));let i=s.getPermsResponse();if(i)throw $e(new Error,i,Ut.BAD_REQUEST);return n=Ss.createReadStream(e.file_path,{highWaterMark:eP}),n.setEncoding("utf8"),await AT.parsePromise(n,oP.bind(null,e,t),OT.bind(null,r)),n.destroy(),t}catch(s){throw $e(s,Vi(ft.PAPA_PARSE_ERR),Ut.INTERNAL_SERVER_ERROR,ps.LOG_LEVELS.ERROR,ft.PAPA_PARSE_ERR+s)}}a(D6,"callPapaParse");function aP(e,t){let r=T6[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>R6(i,n));return s}a(aP,"createTransformMap");function OT(e,t,r){let s=e.get(r);return s?s(t):jo.autoCast(t)}a(OT,"typeFunction");async function U6(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new bT,n=QM([Ss.createReadStream(e.file_path,{encoding:"utf-8"}),zM.withParser(),c=>c.value,new JM({batchSize:tP}),XM(async c=>{await iP(e,s,r,c)})]);await new Promise((c,u)=>{jM(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw $e(new Error,i,Ut.BAD_REQUEST);let o=QM([Ss.createReadStream(e.file_path,{encoding:"utf-8"}),zM.withParser(),c=>c.value,new JM({batchSize:tP}),XM(async c=>{await oP(e,t,r,c)})]);return await new Promise((c,u)=>{jM(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw $e(s,Vi(ft.INSERT_JSON_ERR),Ut.INTERNAL_SERVER_ERROR,ps.LOG_LEVELS.ERROR,ft.INSERT_JSON_ERR+s)}}a(U6,"insertJson");async function cP(e){let t={};try{e.data&&e.data.length>0&&M6(e.data[0])?t=await P6(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Zo.info(t.message))}catch(r){throw $i(r)}return t}a(cP,"callBulkFileLoad");function M6(e){let t=Object.keys(e);for(let r of t)if(!g6.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(M6,"validateColumnNames");async function P6(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Wd.insert;break;case"update":i=Wd.update;break;case"upsert":i=Wd.upsert;break;default:throw $e(new Error,ft.INVALID_ACTION_PARAM_ERR(s),Ut.BAD_REQUEST,ps.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=jo.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw $i(o)}}a(P6,"bulkFileLoad");function uP(e,t){return`successfully loaded ${t} of ${e} records`}a(uP,"buildResponseMsg");function $i(e){return $e(e,Vi(ft.DEFAULT_BULK_LOAD_ERR),Ut.INTERNAL_SERVER_ERROR,ps.LOG_LEVELS.ERROR,ft.DEFAULT_BULK_LOAD_ERR+" - "+e)}a($i,"buildTopLevelErrMsg")});var dP=T((Q_e,_P)=>{"use strict";var CT=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};_P.exports=CT});var hP=T((J_e,EP)=>{"use strict";var v6=b(),fP=require("moment"),B6=require("uuid").v4,LT=class{static{a(this,"JobObject")}constructor(){this.id=B6(),this.type=void 0,this.start_datetime=fP().valueOf(),this.created_datetime=fP().valueOf(),this.end_datetime=void 0,this.status=v6.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};EP.exports=LT});var DT=T((j_e,gP)=>{"use strict";var H6=require("uuid").v4,SP=Fr(),TP=Hr(),F6=Ps(),q6=go(),G6=dP(),Ye=b(),x6=hP(),k6=Ip(),Qr=G(),V6=Wa(),ea=$(),{promisify:$6}=require("util"),Yi=require("moment"),Y6=Dd(),Xd=pT(),mP=Dh(),{deleteTransactionLogsBeforeValidator:K6}=YS(),{handleHDBError:W6,hdb_errors:Q6}=j(),{HTTP_STATUS_CODES:z6}=Q6,pP=TP.searchByValue,J6=TP.searchByHash,X6=SP.insert,j6=$6(Y6.evaluateSQL),Z6=SP.update;gP.exports={addJob:r9,updateJob:n9,handleGetJob:e9,handleGetJobsByStartDate:t9,getJobById:RP};async function e9(e){try{let t=await RP(e.id);return ea.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 Qr.error("There was an error getting job",t),new Error(r)}}a(e9,"handleGetJob");async function t9(e){try{let t=await s9(e);if(Qr.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=Yi(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Yi(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 Qr.error(r),new Error(r)}}a(t9,"handleGetJobsByStartDate");async function r9(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||ea.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return Qr.info(l),t.error=l,t}if(!Ye.JOB_TYPE_ENUM[e.operation])return Qr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ye.OPERATIONS_ENUM.CSV_FILE_LOAD:s=Xd.fileObject(e);break;case Ye.OPERATIONS_ENUM.CSV_URL_LOAD:s=Xd.urlObject(e);break;case Ye.OPERATIONS_ENUM.CSV_DATA_LOAD:s=Xd.dataObject(e);break;case Ye.OPERATIONS_ENUM.IMPORT_FROM_S3:s=Xd.s3FileObject(e);break;case Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=mP(e,"date");break;case Ye.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=mP(e,"timestamp");break;case Ye.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=K6(e);break;default:break}if(s)throw W6(s,s.message,z6.BAD_REQUEST,void 0,void 0,!0);let n=new x6;n.type=e.operation===Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new F6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await pP(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return Qr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=H6();try{o=await pP(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return Qr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Qr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new V6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await X6(u)}catch(l){return Qr.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,Qr.trace(l)}return t}a(r9,"addJob");async function s9(e){let t=Yi(e.from_date,Yi.ISO_8601),r=Yi(e.to_date,Yi.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 G6(s,e.hdb_user);try{return await j6(n)}catch(i){throw Qr.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(s9,"getJobsInDateRange");async function RP(e){if(ea.isEmptyOrZeroLength(e))return ea.errorizeMessage("Invalid job ID specified.");let t=new q6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await J6(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Qr.error(s),ea.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(RP,"getJobById");async function n9(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(ea.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ye.JOB_STATUS_ENUM.COMPLETE||e.status===Ye.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Yi().valueOf());let t=new k6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Z6(t),r}a(n9,"updateJob")});var IP=T((ede,yP)=>{"use strict";var AP=$(),ar=b(),i9=require("moment"),jd=IT(),Zd=G(),OP=DT(),NP=Ud(),bP=Ai(),o9=Ze(),a9=bd(),UT=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function c9(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(AP.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(AP.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case ar.JOB_TYPE_ENUM.csv_file_load:await hn(e,jd.csvFileLoad);break;case ar.JOB_TYPE_ENUM.csv_url_load:await hn(e,jd.csvURLLoad);break;case ar.JOB_TYPE_ENUM.csv_data_load:await hn(e,jd.csvDataLoad);break;case ar.JOB_TYPE_ENUM.import_from_s3:await hn(e,jd.importFromS3);break;case ar.JOB_TYPE_ENUM.empty_trash:break;case ar.JOB_TYPE_ENUM.export_local:await hn(e,NP.export_local);break;case ar.JOB_TYPE_ENUM.export_to_s3:await hn(e,NP.export_to_s3);break;case ar.JOB_TYPE_ENUM.delete_files_before:case ar.JOB_TYPE_ENUM.delete_records_before:await hn(e,bP.deleteFilesBefore);break;case ar.JOB_TYPE_ENUM.delete_audit_logs_before:await hn(e,bP.deleteAuditLogsBefore);break;case ar.JOB_TYPE_ENUM.delete_transaction_logs_before:await hn(e,a9.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(c9,"parseMessage");async function hn(e,t){try{e.job.status=ar.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=i9().valueOf(),await OP.updateJob(e.job),await u9(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):Zd.error(`There was an error running ${t.name} job with id ${e.job.id}`),Zd.error(s),e.job.message=s,e.job.status=ar.JOB_STATUS_ENUM.ERROR;try{await OP.updateJob(e.job)}catch(n){throw Zd.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(hn,"runJob");async function u9(e){Zd.trace("launching job thread:",e),o9.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[ar.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(u9,"launchJobThread");yP.exports={parseMessage:c9,RunnerMessage:UT}});var CP=T((rde,wP)=>{"use strict";var MT=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};wP.exports=MT});var YP=T((nde,qT)=>{"use strict";var sf=Hr(),BT=Dd(),ef=IT(),mn=I_(),tf=pi(),du=Ai(),l9=dp(),_u=qr(),rf=gp(),Mt=$S(),Et=G(),_9=Np(),d9=Y_(),f9=iS(),E9=z_(),h9=oS(),m9=aS(),p9=lS(),S9=dS(),PT=hS(),LP=Ud(),T9=Cd(),HT=DT(),M=b(),{hdb_errors:Eu,handleHDBError:fu}=j(),{HTTP_STATUS_CODES:DP}=Eu,vT=RS(),UP=ud(),xP=require("util"),ta=Fr(),R9=Pn(),g9=Bo(),MP=IP(),PP=Lc(),vP=(Ed(),Z(Wc)),BP=Er(),HP=bd(),FP=Td(),{setServerUtilities:A9}=(Jd(),Z(wT)),{CONTEXT:O9}=(is(),Z(bE)),{_assignPackageExport:N9}=require("../../index"),{transformReq:b9}=$(),{server:y9}=(Ur(),Z(eo)),I9=ST(),qP=sf.searchByHash,w9=sf.searchByValue,C9=xP.promisify(sf.search),L9=xP.promisify(BT.evaluateSQL),D9={[M.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[M.OPERATIONS_ENUM.CREATE_TABLE]:!0,[M.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[M.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[M.OPERATIONS_ENUM.DROP_TABLE]:!0,[M.OPERATIONS_ENUM.DROP_SCHEMA]:!0},H=CP();async function kP(e,t){try{if(e.body.operation!=="read_log"&&(Et.log_level===M.LOG_LEVELS.INFO||Et.log_level===M.LOG_LEVELS.DEBUG||Et.log_level===M.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 I9.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return D9[e.body.operation]&&R9.setSchemaDataToGlobal(s=>{s&&Et.error(s)}),r}a(kP,"processLocalTransaction");var GP=M9();qT.exports={chooseOperation:VP,getOperationFunction:$P,operation:FT,processLocalTransaction:kP};A9(qT.exports);y9.operation=FT;function VP(e){let t;try{t=$P(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=BT.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=BT.checkASTPermissions(e,i);if(o)throw Et.error(`${DP.FORBIDDEN} from operation ${e.operation}`),Et.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),fu(new Error,o,Eu.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==M.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==M.OPERATIONS_ENUM.LOGIN&&e.operation!==M.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=T9.verifyPerms(i,n);if(o)throw Et.error(`${DP.FORBIDDEN} from operation ${e.operation}`),Et.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),fu(new Error,o,Eu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw fu(n,"There was an error when trying to choose an operation path")}return r}a(VP,"chooseOperation");function $P(e){if(Et.trace(`getOperationFunction with operation: ${e.operation}`),GP.has(e.operation))return GP.get(e.operation);throw fu(new Error,Eu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Eu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a($P,"getOperationFunction");N9("operation",FT);function FT(e,t){e.hdb_user=this[O9]?.user,e.bypass_auth=!t;let r=VP(e);return kP({body:e},r)}a(FT,"operation");async function U9(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[M.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case M.OPERATIONS_ENUM.INSERT:o=await ta.insert(i);break;case M.OPERATIONS_ENUM.UPDATE:o=await ta.update(i);break;case M.OPERATIONS_ENUM.UPSERT:o=await ta.upsert(i);break;case M.OPERATIONS_ENUM.DELETE:o=await du.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(U9,"catchup");async function Vs(e){b9(e);let t,r;try{r=await HT.addJob(e),t=r.createdJob,Et.info("addJob result",r);let s=new MP.RunnerMessage(t,e);return await MP.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),fu(s,n)}}a(Vs,"executeJob");function M9(){let e=new Map;return e.set(M.OPERATIONS_ENUM.INSERT,new H(ta.insert)),e.set(M.OPERATIONS_ENUM.UPDATE,new H(ta.update)),e.set(M.OPERATIONS_ENUM.UPSERT,new H(ta.upsert)),e.set(M.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new H(sf.searchByConditions)),e.set(M.OPERATIONS_ENUM.SEARCH_BY_HASH,new H(qP)),e.set(M.OPERATIONS_ENUM.SEARCH_BY_ID,new H(qP)),e.set(M.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(w9)),e.set(M.OPERATIONS_ENUM.SEARCH,new H(C9)),e.set(M.OPERATIONS_ENUM.SQL,new H(L9)),e.set(M.OPERATIONS_ENUM.CSV_DATA_LOAD,new H(Vs,ef.csvDataLoad)),e.set(M.OPERATIONS_ENUM.CSV_FILE_LOAD,new H(Vs,ef.csvFileLoad)),e.set(M.OPERATIONS_ENUM.CSV_URL_LOAD,new H(Vs,ef.csvURLLoad)),e.set(M.OPERATIONS_ENUM.IMPORT_FROM_S3,new H(Vs,ef.importFromS3)),e.set(M.OPERATIONS_ENUM.CREATE_SCHEMA,new H(mn.createSchema)),e.set(M.OPERATIONS_ENUM.CREATE_DATABASE,new H(mn.createSchema)),e.set(M.OPERATIONS_ENUM.CREATE_TABLE,new H(mn.createTable)),e.set(M.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new H(mn.createAttribute)),e.set(M.OPERATIONS_ENUM.DROP_SCHEMA,new H(mn.dropSchema)),e.set(M.OPERATIONS_ENUM.DROP_DATABASE,new H(mn.dropSchema)),e.set(M.OPERATIONS_ENUM.DROP_TABLE,new H(mn.dropTable)),e.set(M.OPERATIONS_ENUM.DROP_ATTRIBUTE,new H(mn.dropAttribute)),e.set(M.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new H(tf.describeSchema)),e.set(M.OPERATIONS_ENUM.DESCRIBE_DATABASE,new H(tf.describeSchema)),e.set(M.OPERATIONS_ENUM.DESCRIBE_TABLE,new H(tf.describeTable)),e.set(M.OPERATIONS_ENUM.DESCRIBE_ALL,new H(tf.describeAll)),e.set(M.OPERATIONS_ENUM.DELETE,new H(du.deleteRecord)),e.set(M.OPERATIONS_ENUM.ADD_USER,new H(_u.addUser)),e.set(M.OPERATIONS_ENUM.ALTER_USER,new H(_u.alterUser)),e.set(M.OPERATIONS_ENUM.DROP_USER,new H(_u.dropUser)),e.set(M.OPERATIONS_ENUM.LIST_USERS,new H(_u.listUsersExternal)),e.set(M.OPERATIONS_ENUM.LIST_ROLES,new H(rf.listRoles)),e.set(M.OPERATIONS_ENUM.ADD_ROLE,new H(rf.addRole)),e.set(M.OPERATIONS_ENUM.ALTER_ROLE,new H(rf.alterRole)),e.set(M.OPERATIONS_ENUM.DROP_ROLE,new H(rf.dropRole)),e.set(M.OPERATIONS_ENUM.USER_INFO,new H(_u.userInfo)),e.set(M.OPERATIONS_ENUM.READ_LOG,new H(_9)),e.set(M.OPERATIONS_ENUM.ADD_NODE,new H(d9)),e.set(M.OPERATIONS_ENUM.UPDATE_NODE,new H(f9)),e.set(M.OPERATIONS_ENUM.REMOVE_NODE,new H(E9)),e.set(M.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H(h9)),e.set(M.OPERATIONS_ENUM.PURGE_STREAM,new H(m9)),e.set(M.OPERATIONS_ENUM.SET_CONFIGURATION,new H(BP.setConfiguration)),e.set(M.OPERATIONS_ENUM.CLUSTER_STATUS,new H(p9.clusterStatus)),e.set(M.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(S9)),e.set(M.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new H(PT.setRoutes)),e.set(M.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new H(PT.getRoutes)),e.set(M.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new H(PT.deleteRoutes)),e.set(M.OPERATIONS_ENUM.EXPORT_TO_S3,new H(Vs,LP.export_to_s3)),e.set(M.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H(Vs,du.deleteFilesBefore)),e.set(M.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H(Vs,du.deleteFilesBefore)),e.set(M.OPERATIONS_ENUM.EXPORT_LOCAL,new H(Vs,LP.export_local)),e.set(M.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new H(HT.handleGetJobsByStartDate)),e.set(M.OPERATIONS_ENUM.GET_JOB,new H(HT.handleGetJob)),e.set(M.OPERATIONS_ENUM.GET_FINGERPRINT,new H(vT.getFingerprint)),e.set(M.OPERATIONS_ENUM.SET_LICENSE,new H(vT.setLicense)),e.set(M.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new H(vT.getRegistrationInfo)),e.set(M.OPERATIONS_ENUM.RESTART,new H(UP.restart)),e.set(M.OPERATIONS_ENUM.RESTART_SERVICE,new H(UP.restartService)),e.set(M.OPERATIONS_ENUM.CATCHUP,new H(U9)),e.set(M.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(g9.systemInformation)),e.set(M.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H(Vs,du.deleteAuditLogsBefore)),e.set(M.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(l9)),e.set(M.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(PP.createTokens)),e.set(M.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(PP.refreshOperationToken)),e.set(M.OPERATIONS_ENUM.LOGIN,new H(vP.login)),e.set(M.OPERATIONS_ENUM.LOGOUT,new H(vP.logout)),e.set(M.OPERATIONS_ENUM.GET_CONFIGURATION,new H(BP.getConfiguration)),e.set(M.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new H(Mt.customFunctionsStatus)),e.set(M.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new H(Mt.getCustomFunctions)),e.set(M.OPERATIONS_ENUM.GET_COMPONENT_FILE,new H(Mt.getComponentFile)),e.set(M.OPERATIONS_ENUM.GET_COMPONENTS,new H(Mt.getComponents)),e.set(M.OPERATIONS_ENUM.SET_COMPONENT_FILE,new H(Mt.setComponentFile)),e.set(M.OPERATIONS_ENUM.DROP_COMPONENT,new H(Mt.dropComponent)),e.set(M.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new H(Mt.getCustomFunction)),e.set(M.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new H(Mt.setCustomFunction)),e.set(M.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new H(Mt.dropCustomFunction)),e.set(M.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new H(Mt.addComponent)),e.set(M.OPERATIONS_ENUM.ADD_COMPONENT,new H(Mt.addComponent)),e.set(M.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new H(Mt.dropCustomFunctionProject)),e.set(M.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new H(Mt.packageComponent)),e.set(M.OPERATIONS_ENUM.PACKAGE_COMPONENT,new H(Mt.packageComponent)),e.set(M.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new H(Mt.deployComponent)),e.set(M.OPERATIONS_ENUM.DEPLOY_COMPONENT,new H(Mt.deployComponent)),e.set(M.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new H(HP.readTransactionLog)),e.set(M.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H(Vs,HP.deleteTransactionLogsBefore)),e.set(M.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(FP.installModules)),e.set(M.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(FP.auditModules)),e.set(M.OPERATIONS_ENUM.GET_BACKUP,new H(mn.getBackup)),e}a(M9,"initializeOperationFunctionMap")});var of=T((ode,QP)=>{"use strict";var GT=b(),P9=$(),hu=G(),{handleHDBError:xT,hdb_errors:nf}=j(),{isMainThread:v9}=require("worker_threads"),{Readable:B9}=require("stream"),KP=require("os"),H9=require("util"),F9=vp(),q9=H9.promisify(F9.authorize),WP=YP(),{createGzip:G9,constants:x9}=require("zlib");function k9(e){let t=`Found an uncaught exception with message: ${e.message}. ${KP.EOL}Stack: ${e.stack} ${KP.EOL}Terminating ${v9?"HDB":"thread"}.`;console.error(t),hu.fatal(t),process.exit(1)}a(k9,"handleServerUncaughtException");function V9(e,t,r){if(hu[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:nf.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(V9,"serverErrorHandler");function $9(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=xT(new Error,"Invalid JSON.",nf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(P9.isEmpty(e.body.operation)){let s=xT(new Error,"Request body must include an 'operation' property.",nf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a($9,"reqBodyValidationHandler");function Y9(e,t,r){let s;e.body.operation!==GT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==GT.OPERATIONS_ENUM.LOGIN&&e.body.operation!==GT.OPERATIONS_ENUM.LOGOUT?q9(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{hu.warn(n),hu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(xT(n,i,nf.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(Y9,"authHandler");async function K9(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=WP.chooseOperation(e.body);let n=await WP.processLocalTransaction(e,s);if(n instanceof B9&&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(G9({level:x9.Z_BEST_SPEED})))}return n}catch(n){throw hu.error(n),n}}a(K9,"handlePostRequest");QP.exports={authHandler:Y9,handlePostRequest:K9,handleServerUncaughtException:k9,serverErrorHandler:V9,reqBodyValidationHandler:$9}});var jP=T((cde,XP)=>{"use strict";var W9=require("fastify-plugin"),{handlePostRequest:zP,authHandler:Q9,reqBodyValidationHandler:z9}=of();async function J9(e){e.decorate("hdbCore",{preValidation:[z9,Q9],request:t=>JP(zP(t,response)),requestWithoutAuthentication:(t,r)=>JP(zP(t,r,!0))})}a(J9,"hdbCore");async function JP(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(JP,"convertAsyncIterators");XP.exports=W9(J9)});var ev=T((lde,ZP)=>{"use strict";var kT=require("fs"),ra=X();ra.initSync();var{CONFIG_PARAMS:mu}=b(),X9=1024*1024*1024;function j9(e){let t=ra.get(mu.HTTP_TIMEOUT),r=ra.get(mu.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:X9,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=ra.get(mu.TLS_PRIVATEKEY),i=ra.get(mu.TLS_CERTIFICATE),o=ra.get(mu.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:kT.readFileSync(`${n}`),cert:kT.readFileSync(i)+(o?`
24
+ `},q:.8});Lt.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()}});BM={type:"application/json",serializeStream:vd.streamAsJSON,serialize:JSON.stringify,deserialize:k8,q:.8};Lt.set("*/*",BM);Lt.set("",BM);a(k8,"tryJSONParse");a(fT,"registerContentHandlers");V8=require("fastify-plugin"),$8=V8(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Hd(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Hd,"findBestSerializer");DM=PM.default.get(vM.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Fd,"serialize");a(zn,"serializeMessage");a(Y8,"streamToBuffer");a(jo,"getDeserializer");a(UM,"deserializerUnknownType");a(K8,"transformIterable")});var qd={};Qe(qd,{start:()=>z8});async function Q8(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&El(e);let n=new Bi;try{e.responseHeaders=n;let i=e.url.slice(1),o=hT.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=jo(r["content-type"],!0)(e.body)}catch(p){throw new lu.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 lu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new lu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,ET.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){W8[0]=f;let p=String.fromCharCode(34,(Dt[0]&63)+62,(Dt[0]>>6)+(Dt[1]<<2&63)+62,(Dt[1]>>4)+(Dt[2]<<4&63)+62,(Dt[2]>>2)+62,(Dt[3]&63)+62,(Dt[3]>>6)+(Dt[4]<<2&63)+62,(Dt[4]>>4)+(Dt[5]<<4&63)+62,(Dt[5]>>2)+62,(Dt[6]&63)+62,(Dt[6]>>6)+(Dt[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),ET.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=Fd(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?xi.warn(i):xi.info(i):xi.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=Fd(i.contentType?i:i.toString(),e,o),o}}function z8(e){ET=e,!FM&&(FM=!0,hT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Q8(t,r)}),e.server.ws(async(t,r,s)=>{uu++;let n=new ns;qM||(qM=!0,Ac(l=>{uu>0&&l.push({metric:"ws-connections",connections:uu,byThread:!0})}));let i;t.on("error",l=>{i=!0,xi.warn(l)});let o;t.on("message",a(function(d){o||(o=jo(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{uu--,xr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=hT.getMatch(u);if(xr(!!_,"connection","ws","connect"),!_)t.send(zn(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,Or(h=>({count:h.count,total:uu}),"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=zn(E.value,r);t.send(h),Or(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var xi,lu,Dt,W8,ET,FM,hT,qM,uu,GM=Te(()=>{Yo();xn();xi=M(G()),lu=M(j());hl();Pa();di();xS();Dt=new Uint8Array(8),W8=new Float64Array(Dt.buffer,0,1),ET={};a(Q8,"http");uu=0;a(z8,"start")});var mT=T((H_e,xM)=>{var{recordAction:Gd,recordActionBinary:J8}=(xn(),Z(g_)),X8=require("fastify-plugin"),j8=200;xM.exports=X8(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),Gd(o,"duration",_,d,l),J8(n.raw.statusCode<400,"success",_,d,l);let f=j8;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Gd(performance.now()-c,"transfer",_,d,l),Gd(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Gd(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var RT=T((F_e,KM)=>{var Yd=require("clone"),Kd=qe(),Z8=$(),Vd=b(),e6=G(),xd=require("fs"),pT=require("joi"),{string:$d}=pT.types(),{hdb_errors:t6,handleHDBError:_u}=j(),{HDB_ERROR_MSGS:r6,HTTP_STATUS_CODES:kd}=t6,{common_validators:Zo}=Ls(),kM=1e9,VM=" is required",s6=["insert","update","upsert"],ST={database:{presence:!1,format:Zo.schema_format,length:Zo.schema_length},schema:{presence:!1,format:Zo.schema_format,length:Zo.schema_length},table:{presence:!0,format:Zo.schema_format,length:Zo.schema_length},action:{inclusion:{within:s6,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},n6={schema:$d.required(),table:$d.required(),action:$d.valid("insert","update","upsert")},{AWS_ACCESS_KEY:i6,AWS_SECRET:o6,AWS_BUCKET:a6,AWS_FILE_KEY:c6,REGION:u6}=Vd.S3_BUCKET_AUTH_KEYS,l6={s3:{presence:!0},[`s3.${i6}`]:{presence:!0,type:"String"},[`s3.${o6}`]:{presence:!0,type:"String"},[`s3.${a6}`]:{presence:!0,type:"String"},[`s3.${c6}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${u6}`]:{presence:!0,type:"String"}},$M=Yd(ST);$M.data.presence={message:VM};var YM=Yd(ST);YM.file_path.presence={message:VM};var _6=Object.assign(Yd(ST),l6),TT=Yd(n6);TT.csv_url=$d.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();TT.passthrough_headers=pT.object();function d6(e){let t=Kd.validateObject(e,$M);return Wd(e,t)}a(d6,"dataObject");function f6(e){let t=Kd.validateBySchema(e,pT.object(TT));return Wd(e,t)}a(f6,"urlObject");function E6(e){let t=Kd.validateObject(e,YM);return Wd(e,t)}a(E6,"fileObject");function h6(e){let t=Kd.validateObject(e,_6);return Wd(e,t)}a(h6,"s3FileObject");function Wd(e,t){if(!t){let r=Z8.checkGlobalSchemaTable(e.schema,e.table);if(r)return _u(new Error,r,kd.BAD_REQUEST);if(e.operation===Vd.OPERATIONS_ENUM.CSV_FILE_LOAD){try{xd.accessSync(e.file_path,xd.constants.R_OK|xd.constants.F_OK)}catch(s){return s.code===Vd.NODE_ERROR_CODES.ENOENT?_u(s,`No such file or directory ${s.path}`,kd.BAD_REQUEST):s.code===Vd.NODE_ERROR_CODES.EACCES?_u(s,`Permission denied ${s.path}`,kd.BAD_REQUEST):_u(s)}try{let s=xd.statSync(e.file_path).size;if(s>kM)return _u(new Error,r6.MAX_FILE_SIZE_ERR(s,kM),kd.BAD_REQUEST)}catch(s){e6.error(s),console.error(s)}}}return t}a(Wd,"postValidateChecks");KM.exports={dataObject:d6,urlObject:f6,fileObject:E6,s3FileObject:h6}});var gT=T((G_e,WM)=>{"use strict";var du=G(),Qd=b();async function m6(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===Qd.OPERATIONS_ENUM.INSERT||t.operation===Qd.OPERATIONS_ENUM.UPDATE||t.operation===Qd.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Qd.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(du.info(i.message),i):i.http_resp_msg?(du.error(`Error calling operation: ${e.name}`),du.error(i.http_resp_msg),i):(du.error(`Error calling operation: ${e.name}`),du.error(i),i)}}a(m6,"callOperationFunctionAsAwait");WM.exports={callOperationFunctionAsAwait:m6}});var zM=T((k_e,QM)=>{"use strict";var AT=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}},OT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};QM.exports={BulkLoadFileObject:AT,BulkLoadDataObject:OT}});var XM=T(($_e,JM)=>{"use strict";var NT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};JM.exports=NT});var LT=T((J_e,EP)=>{"use strict";var zd=qr(),Xd=RT(),p6=require("needle"),Ss=b(),K_e=ke(),ea=$(),{handleHDBError:$e,hdb_errors:oP}=j(),{HTTP_STATUS_CODES:Ut,HDB_ERROR_MSGS:ft,CHECK_LOGS_WRAPPER:Vi}=oP,ta=G(),bT=require("papaparse");ea.promisifyPapaParse();var Ts=require("fs-extra"),S6=require("path"),{chain:jM}=require("stream-chain"),ZM=require("stream-json/streamers/StreamArray"),eP=require("stream-json/utils/Batch"),tP=require("stream-chain/utils/comp"),{finished:rP}=require("stream"),T6=X(),aP=gT(),R6=uT(),{BulkLoadFileObject:IT,BulkLoadDataObject:g6}=zM(),wT=ZS(),{verifyBulkLoadAttributePerms:cP}=Dd(),W_e=XM(),Q_e=_t(),z_e=nn(),{databases:A6}=(fe(),Z(Ce)),{coerceType:O6}=(jd(),Z(DT)),sP="No records parsed from csv file.",ki=`${T6.get("HDB_ROOT")}/tmp`,{schema_regex:N6}=Ls(),nP=1024*1024*2,iP=5e3,b6={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};EP.exports={csvDataLoad:y6,csvURLLoad:I6,csvFileLoad:w6,importFromS3:C6};async function y6(e,t){let r=Xd.dataObject(e);if(r)throw $e(r,r.message,Ut.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=_P(e.schema,e.table),i=bT.parse(e.data,{header:!0,skipEmptyLines:!0,transform:yT.bind(null,n),dynamicTyping:!1}),o=new wT;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&cP(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 $e(new Error,c,Ut.BAD_REQUEST,void 0,void 0,!0);let u=new g6(e.action,e.schema,e.table,i.data);return s=await aP.callOperationFunctionAsAwait(dP,u,null),s.message===sP?sP:fP(s.records,s.number_written)}catch(n){throw $i(n)}}a(y6,"csvDataLoad");async function I6(e){let t=Xd.urlObject(e);if(t)throw $e(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${ki}/${r}`;try{await L6(e,r)}catch(n){throw ta.error(ft.DOWNLOAD_FILE_ERR(r)+" - "+n),$e(n,Vi(ft.DOWNLOAD_FILE_ERR(r)))}try{let n=new IT(this.job_operation_function.name,e.action,e.schema,e.table,s,Ss.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await CT(n);return await Jd(s),i}catch(n){throw await Jd(s),$i(n)}}a(I6,"csvURLLoad");async function w6(e){let t=Xd.fileObject(e);if(t)throw $e(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=new IT(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ss.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await CT(r)}catch(s){throw $i(s)}}a(w6,"csvFileLoad");async function C6(e){let t=Xd.s3FileObject(e);if(t)throw $e(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=S6.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${ki}/${n}`;let i=new IT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await D6(n,e);let o=await CT(i);return await Jd(r),o}catch(s){throw await Jd(r),$i(s)}}a(C6,"importFromS3");async function L6(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await p6("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 $e(s,n,s.statusCode,Ss.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}M6(r,e.csv_url),await U6(t,r.raw)}a(L6,"downloadCSVFile");async function D6(e,t){try{let r=`${ki}/${e}`;await Ts.mkdirp(ki),await Ts.writeFile(`${ki}/${e}`,"",{flag:"a+"});let s=await Ts.createWriteStream(r),n=await R6.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(){ta.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw ta.error(ft.S3_DOWNLOAD_ERR+" - "+r),$e(r,Vi(ft.S3_DOWNLOAD_ERR))}}a(D6,"downloadFileFromS3");async function U6(e,t){try{await Ts.mkdirp(ki),await Ts.writeFile(`${ki}/${e}`,t)}catch(r){throw ta.error(ft.WRITE_TEMP_FILE_ERR),$e(r,Vi(ft.DEFAULT_BULK_LOAD_ERR))}}a(U6,"writeFileToTempFolder");async function Jd(e){if(e)try{await Ts.access(e),await Ts.unlink(e)}catch{ta.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Jd,"deleteTempFile");function M6(e,t){if(e.statusCode!==oP.HTTP_STATUS_CODES.OK)throw $e(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Ut.BAD_REQUEST);if(!b6[e.headers["content-type"]])throw $e(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Ut.BAD_REQUEST);if(!e.raw)throw $e(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Ut.BAD_REQUEST)}a(M6,"validateURLResponse");async function CT(e){try{let t;switch(e.file_type){case Ss.VALID_S3_FILE_TYPES.CSV:t=await P6(e);break;case Ss.VALID_S3_FILE_TYPES.JSON:t=await v6(e);break;default:throw $e(new Error,ft.DEFAULT_BULK_LOAD_ERR,Ut.BAD_REQUEST,Ss.LOG_LEVELS.ERROR,ft.INVALID_FILE_EXT_ERR(e))}return fP(t.records,t.number_written)}catch(t){throw $i(t)}}a(CT,"fileLoad");async function uP(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 zd.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&cP(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=$e(c);r(u)}}a(uP,"validateChunk");async function lP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;ea.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!ea.isEmpty(c)&&!ea.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 aP.callOperationFunctionAsAwait(dP,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=$e(c,Vi(ft.INSERT_CSV_ERR),Ut.INTERNAL_SERVER_ERROR,Ss.LOG_LEVELS.ERROR,ft.INSERT_CSV_ERR+" - "+c);r(u)}}a(lP,"insertChunk");async function P6(e){let t={records:0,number_written:0},r=_P(e.schema,e.table);try{let s=new wT,n=Ts.createReadStream(e.file_path,{highWaterMark:nP});n.setEncoding("utf8"),await bT.parsePromise(n,uP.bind(null,e,s),yT.bind(null,r));let i=s.getPermsResponse();if(i)throw $e(new Error,i,Ut.BAD_REQUEST);return n=Ts.createReadStream(e.file_path,{highWaterMark:nP}),n.setEncoding("utf8"),await bT.parsePromise(n,lP.bind(null,e,t),yT.bind(null,r)),n.destroy(),t}catch(s){throw $e(s,Vi(ft.PAPA_PARSE_ERR),Ut.INTERNAL_SERVER_ERROR,Ss.LOG_LEVELS.ERROR,ft.PAPA_PARSE_ERR+s)}}a(P6,"callPapaParse");function _P(e,t){let r=A6[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>O6(i,n));return s}a(_P,"createTransformMap");function yT(e,t,r){let s=e.get(r);return s?s(t):ea.autoCast(t)}a(yT,"typeFunction");async function v6(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new wT,n=jM([Ts.createReadStream(e.file_path,{encoding:"utf-8"}),ZM.withParser(),c=>c.value,new eP({batchSize:iP}),tP(async c=>{await uP(e,s,r,c)})]);await new Promise((c,u)=>{rP(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw $e(new Error,i,Ut.BAD_REQUEST);let o=jM([Ts.createReadStream(e.file_path,{encoding:"utf-8"}),ZM.withParser(),c=>c.value,new eP({batchSize:iP}),tP(async c=>{await lP(e,t,r,c)})]);return await new Promise((c,u)=>{rP(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw $e(s,Vi(ft.INSERT_JSON_ERR),Ut.INTERNAL_SERVER_ERROR,Ss.LOG_LEVELS.ERROR,ft.INSERT_JSON_ERR+s)}}a(v6,"insertJson");async function dP(e){let t={};try{e.data&&e.data.length>0&&B6(e.data[0])?t=await H6(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",ta.info(t.message))}catch(r){throw $i(r)}return t}a(dP,"callBulkFileLoad");function B6(e){let t=Object.keys(e);for(let r of t)if(!N6.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(B6,"validateColumnNames");async function H6(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=zd.insert;break;case"update":i=zd.update;break;case"upsert":i=zd.upsert;break;default:throw $e(new Error,ft.INVALID_ACTION_PARAM_ERR(s),Ut.BAD_REQUEST,Ss.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=ea.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw $i(o)}}a(H6,"bulkFileLoad");function fP(e,t){return`successfully loaded ${t} of ${e} records`}a(fP,"buildResponseMsg");function $i(e){return $e(e,Vi(ft.DEFAULT_BULK_LOAD_ERR),Ut.INTERNAL_SERVER_ERROR,Ss.LOG_LEVELS.ERROR,ft.DEFAULT_BULK_LOAD_ERR+" - "+e)}a($i,"buildTopLevelErrMsg")});var mP=T((j_e,hP)=>{"use strict";var UT=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};hP.exports=UT});var TP=T((ede,SP)=>{"use strict";var F6=b(),pP=require("moment"),q6=require("uuid").v4,MT=class{static{a(this,"JobObject")}constructor(){this.id=q6(),this.type=void 0,this.start_datetime=pP().valueOf(),this.created_datetime=pP().valueOf(),this.end_datetime=void 0,this.status=F6.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};SP.exports=MT});var PT=T((rde,bP)=>{"use strict";var G6=require("uuid").v4,AP=qr(),OP=Fr(),x6=Ps(),k6=Oo(),V6=mP(),Ye=b(),$6=TP(),Y6=Lp(),zr=G(),K6=za(),ra=$(),{promisify:W6}=require("util"),Yi=require("moment"),Q6=Md(),Zd=RT(),RP=Ph(),{deleteTransactionLogsBeforeValidator:z6}=QS(),{handleHDBError:J6,hdb_errors:X6}=j(),{HTTP_STATUS_CODES:j6}=X6,gP=OP.searchByValue,Z6=OP.searchByHash,e9=AP.insert,t9=W6(Q6.evaluateSQL),r9=AP.update;bP.exports={addJob:i9,updateJob:a9,handleGetJob:s9,handleGetJobsByStartDate:n9,getJobById:NP};async function s9(e){try{let t=await NP(e.id);return ra.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 zr.error("There was an error getting job",t),new Error(r)}}a(s9,"handleGetJob");async function n9(e){try{let t=await o9(e);if(zr.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=Yi(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Yi(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 zr.error(r),new Error(r)}}a(n9,"handleGetJobsByStartDate");async function i9(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||ra.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return zr.info(l),t.error=l,t}if(!Ye.JOB_TYPE_ENUM[e.operation])return zr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ye.OPERATIONS_ENUM.CSV_FILE_LOAD:s=Zd.fileObject(e);break;case Ye.OPERATIONS_ENUM.CSV_URL_LOAD:s=Zd.urlObject(e);break;case Ye.OPERATIONS_ENUM.CSV_DATA_LOAD:s=Zd.dataObject(e);break;case Ye.OPERATIONS_ENUM.IMPORT_FROM_S3:s=Zd.s3FileObject(e);break;case Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=RP(e,"date");break;case Ye.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=RP(e,"timestamp");break;case Ye.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=z6(e);break;default:break}if(s)throw J6(s,s.message,j6.BAD_REQUEST,void 0,void 0,!0);let n=new $6;n.type=e.operation===Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new x6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await gP(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return zr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=G6();try{o=await gP(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return zr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return zr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new K6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await e9(u)}catch(l){return zr.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,zr.trace(l)}return t}a(i9,"addJob");async function o9(e){let t=Yi(e.from_date,Yi.ISO_8601),r=Yi(e.to_date,Yi.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 V6(s,e.hdb_user);try{return await t9(n)}catch(i){throw zr.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(o9,"getJobsInDateRange");async function NP(e){if(ra.isEmptyOrZeroLength(e))return ra.errorizeMessage("Invalid job ID specified.");let t=new k6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Z6(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return zr.error(s),ra.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(NP,"getJobById");async function a9(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(ra.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ye.JOB_STATUS_ENUM.COMPLETE||e.status===Ye.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Yi().valueOf());let t=new Y6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await r9(t),r}a(a9,"updateJob")});var DP=T((nde,LP)=>{"use strict";var yP=$(),ar=b(),c9=require("moment"),ef=LT(),tf=G(),IP=PT(),wP=Pd(),CP=Ai(),u9=Ze(),l9=Id(),vT=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function _9(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(yP.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(yP.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case ar.JOB_TYPE_ENUM.csv_file_load:await hn(e,ef.csvFileLoad);break;case ar.JOB_TYPE_ENUM.csv_url_load:await hn(e,ef.csvURLLoad);break;case ar.JOB_TYPE_ENUM.csv_data_load:await hn(e,ef.csvDataLoad);break;case ar.JOB_TYPE_ENUM.import_from_s3:await hn(e,ef.importFromS3);break;case ar.JOB_TYPE_ENUM.empty_trash:break;case ar.JOB_TYPE_ENUM.export_local:await hn(e,wP.export_local);break;case ar.JOB_TYPE_ENUM.export_to_s3:await hn(e,wP.export_to_s3);break;case ar.JOB_TYPE_ENUM.delete_files_before:case ar.JOB_TYPE_ENUM.delete_records_before:await hn(e,CP.deleteFilesBefore);break;case ar.JOB_TYPE_ENUM.delete_audit_logs_before:await hn(e,CP.deleteAuditLogsBefore);break;case ar.JOB_TYPE_ENUM.delete_transaction_logs_before:await hn(e,l9.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(_9,"parseMessage");async function hn(e,t){try{e.job.status=ar.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=c9().valueOf(),await IP.updateJob(e.job),await d9(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):tf.error(`There was an error running ${t.name} job with id ${e.job.id}`),tf.error(s),e.job.message=s,e.job.status=ar.JOB_STATUS_ENUM.ERROR;try{await IP.updateJob(e.job)}catch(n){throw tf.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(hn,"runJob");async function d9(e){tf.trace("launching job thread:",e),u9.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[ar.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(d9,"launchJobThread");LP.exports={parseMessage:_9,RunnerMessage:vT}});var MP=T((ode,UP)=>{"use strict";var BT=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};UP.exports=BT});var zP=T((cde,kT)=>{"use strict";var of=Fr(),qT=Md(),rf=LT(),mn=C_(),sf=pi(),Eu=Ai(),f9=hp(),fu=Gr(),nf=Np(),Mt=WS(),Et=G(),E9=Ip(),h9=W_(),m9=cS(),p9=X_(),S9=uS(),T9=lS(),R9=fS(),g9=hS(),HT=SS(),PP=Pd(),A9=Dd(),GT=PT(),P=b(),{hdb_errors:mu,handleHDBError:hu}=j(),{HTTP_STATUS_CODES:vP}=mu,FT=OS(),BP=_d(),YP=require("util"),sa=qr(),O9=Pn(),N9=Fo(),HP=DP(),FP=Uc(),qP=(md(),Z(zc)),GP=Er(),xP=Id(),kP=gd(),{setServerUtilities:b9}=(jd(),Z(DT)),{CONTEXT:y9}=(os(),Z(IE)),{_assignPackageExport:I9}=require("../../index"),{transformReq:w9}=$(),{server:C9}=(Ur(),Z(eo)),L9=gT(),VP=of.searchByHash,D9=of.searchByValue,U9=YP.promisify(of.search),M9=YP.promisify(qT.evaluateSQL),P9={[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=MP();async function KP(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 L9.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return P9[e.body.operation]&&O9.setSchemaDataToGlobal(s=>{s&&Et.error(s)}),r}a(KP,"processLocalTransaction");var $P=B9();kT.exports={chooseOperation:WP,getOperationFunction:QP,operation:xT,processLocalTransaction:KP};b9(kT.exports);C9.operation=xT;function WP(e){let t;try{t=QP(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=qT.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=qT.checkASTPermissions(e,i);if(o)throw Et.error(`${vP.FORBIDDEN} from operation ${e.operation}`),Et.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),hu(new Error,o,mu.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=A9.verifyPerms(i,n);if(o)throw Et.error(`${vP.FORBIDDEN} from operation ${e.operation}`),Et.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),hu(new Error,o,mu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw hu(n,"There was an error when trying to choose an operation path")}return r}a(WP,"chooseOperation");function QP(e){if(Et.trace(`getOperationFunction with operation: ${e.operation}`),$P.has(e.operation))return $P.get(e.operation);throw hu(new Error,mu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),mu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(QP,"getOperationFunction");I9("operation",xT);function xT(e,t){e.hdb_user=this[y9]?.user,e.bypass_auth=!t;let r=WP(e);return KP({body:e},r)}a(xT,"operation");async function v9(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 sa.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await sa.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await sa.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await Eu.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(v9,"catchup");async function Vs(e){w9(e);let t,r;try{r=await GT.addJob(e),t=r.createdJob,Et.info("addJob result",r);let s=new HP.RunnerMessage(t,e);return await HP.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),hu(s,n)}}a(Vs,"executeJob");function B9(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new H(sa.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new H(sa.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new H(sa.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new H(of.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new H(VP)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new H(VP)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(D9)),e.set(P.OPERATIONS_ENUM.SEARCH,new H(U9)),e.set(P.OPERATIONS_ENUM.SQL,new H(M9)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new H(Vs,rf.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H(Vs,rf.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H(Vs,rf.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H(Vs,rf.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new H(mn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new H(mn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new H(mn.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new H(mn.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new H(mn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new H(mn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new H(mn.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new H(mn.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new H(sf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new H(sf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new H(sf.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new H(sf.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new H(Eu.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new H(fu.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new H(fu.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new H(fu.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new H(fu.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new H(nf.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new H(nf.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new H(nf.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new H(nf.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new H(fu.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new H(E9)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new H(h9)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new H(m9)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H(p9)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H(S9)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(T9)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(GP.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new H(R9.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(g9)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new H(HT.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new H(HT.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new H(HT.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new H(Vs,PP.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H(Vs,Eu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H(Vs,Eu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H(Vs,PP.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new H(GT.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new H(GT.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new H(FT.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new H(FT.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new H(FT.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new H(BP.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new H(BP.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new H(v9)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(N9.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H(Vs,Eu.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(f9)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(FP.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(FP.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new H(qP.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new H(qP.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new H(GP.getConfiguration)),e.set(P.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new H(Mt.customFunctionsStatus)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new H(Mt.getCustomFunctions)),e.set(P.OPERATIONS_ENUM.GET_COMPONENT_FILE,new H(Mt.getComponentFile)),e.set(P.OPERATIONS_ENUM.GET_COMPONENTS,new H(Mt.getComponents)),e.set(P.OPERATIONS_ENUM.SET_COMPONENT_FILE,new H(Mt.setComponentFile)),e.set(P.OPERATIONS_ENUM.DROP_COMPONENT,new H(Mt.dropComponent)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new H(Mt.getCustomFunction)),e.set(P.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new H(Mt.setCustomFunction)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new H(Mt.dropCustomFunction)),e.set(P.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new H(Mt.addComponent)),e.set(P.OPERATIONS_ENUM.ADD_COMPONENT,new H(Mt.addComponent)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new H(Mt.dropCustomFunctionProject)),e.set(P.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new H(Mt.packageComponent)),e.set(P.OPERATIONS_ENUM.PACKAGE_COMPONENT,new H(Mt.packageComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new H(Mt.deployComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_COMPONENT,new H(Mt.deployComponent)),e.set(P.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new H(xP.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H(Vs,xP.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(kP.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(kP.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new H(mn.getBackup)),e}a(B9,"initializeOperationFunctionMap")});var cf=T((lde,jP)=>{"use strict";var VT=b(),H9=$(),pu=G(),{handleHDBError:$T,hdb_errors:af}=j(),{isMainThread:F9}=require("worker_threads"),{Readable:q9}=require("stream"),JP=require("os"),G9=require("util"),x9=Fp(),k9=G9.promisify(x9.authorize),XP=zP(),{createGzip:V9,constants:$9}=require("zlib");function Y9(e){let t=`Found an uncaught exception with message: ${e.message}. ${JP.EOL}Stack: ${e.stack} ${JP.EOL}Terminating ${F9?"HDB":"thread"}.`;console.error(t),pu.fatal(t),process.exit(1)}a(Y9,"handleServerUncaughtException");function K9(e,t,r){if(pu[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:af.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(K9,"serverErrorHandler");function W9(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=$T(new Error,"Invalid JSON.",af.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(H9.isEmpty(e.body.operation)){let s=$T(new Error,"Request body must include an 'operation' property.",af.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(W9,"reqBodyValidationHandler");function Q9(e,t,r){let s;e.body.operation!==VT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==VT.OPERATIONS_ENUM.LOGIN&&e.body.operation!==VT.OPERATIONS_ENUM.LOGOUT?k9(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{pu.warn(n),pu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r($T(n,i,af.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(Q9,"authHandler");async function z9(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=XP.chooseOperation(e.body);let n=await XP.processLocalTransaction(e,s);if(n instanceof q9&&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(V9({level:$9.Z_BEST_SPEED})))}return n}catch(n){throw pu.error(n),n}}a(z9,"handlePostRequest");jP.exports={authHandler:Q9,handlePostRequest:z9,handleServerUncaughtException:Y9,serverErrorHandler:K9,reqBodyValidationHandler:W9}});var rv=T((dde,tv)=>{"use strict";var J9=require("fastify-plugin"),{handlePostRequest:ZP,authHandler:X9,reqBodyValidationHandler:j9}=cf();async function Z9(e){e.decorate("hdbCore",{preValidation:[j9,X9],request:t=>ev(ZP(t,response)),requestWithoutAuthentication:(t,r)=>ev(ZP(t,r,!0))})}a(Z9,"hdbCore");async function ev(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(ev,"convertAsyncIterators");tv.exports=J9(Z9)});var nv=T((Ede,sv)=>{"use strict";var YT=require("fs"),na=X();na.initSync();var{CONFIG_PARAMS:Su}=b(),e7=1024*1024*1024;function t7(e){let t=na.get(Su.HTTP_TIMEOUT),r=na.get(Su.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:e7,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=na.get(Su.TLS_PRIVATEKEY),i=na.get(Su.TLS_CERTIFICATE),o=na.get(Su.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:YT.readFileSync(`${n}`),cert:YT.readFileSync(i)+(o?`
25
25
 
26
- `+kT.readFileSync(o):"")},s.http2=!0}return s}a(j9,"getServerOptions");ZP.exports=j9});var sv=T((dde,rv)=>{"use strict";var VT=X();VT.initSync();var{CONFIG_PARAMS:tv}=b();function Z9(){let e=VT.get(tv.HTTP_CORSACCESSLIST),t=VT.get(tv.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(Z9,"getCORSOptions");rv.exports=Z9});var ov=T((Ede,iv)=>{"use strict";var nv=X();nv.initSync();var e7=b();function t7(){return nv.get(e7.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(t7,"getHeaderTimeoutConfig");iv.exports=t7});var KT={};Qe(KT,{customFunctionsServer:()=>n7,handleFile:()=>s7,ready:()=>a7});async function s7(e,t,r,s){if(!pn){let c=$T.get(YT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);pn=Tv(c),ut.http((await pn).server)}let n=await pn,i=(0,cv.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!av.has(i)){av.add(i);try{n.register(o7(i,o))}catch(c){if(c.message==="Root plugin has already booted")Le.warn(`Could not load root fastify route for ${r}, this may require a restart to install properly`);else throw c}}}async function n7(){try{Le.info("In Custom Functions Fastify server"+process.cwd()),Le.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Le.debug(`Custom Functions server process ${process.pid} starting up.`),await i7();let e=$T.get(YT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=pn=await Tv(t)}catch(s){throw Le.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw Le.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){Le.error(`Custom Functions ${process.pid} Error: ${e}`),Le.error(e),process.exit(1)}}async function i7(){try{Le.info("Custom Functions starting configuration."),await Ev.setUsersToGlobal(),Le.info("Custom Functions completed configuration.")}catch(e){Le.error(e)}}function o7(e,t){return async function(r){try{Le.info("Custom Functions starting buildRoutes"),Le.trace("Loading fastify routes folder "+e),(0,uv.existsSync)(e)&&r.register(fv.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Le.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Le.error(n.message):n&&Le.error(n),o()})}catch(s){Le.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function Tv(e){Le.info("Custom Functions starting buildServer.");let t=(0,hv.default)(e),r=(0,lv.default)(t);r.server.headersTimeout=(0,pv.default)(),r.setErrorHandler(Sv.serverErrorHandler);let s=(0,mv.default)();return s&&r.register(_v.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(dv.default),await r.register(r7),await r.after(),lT(r),Le.info("Custom Functions completed buildServer."),r}function a7(){if(pn)return pn.then?pn.then(e=>e.ready()):pn.ready()}var cv,uv,lv,_v,dv,fv,$T,YT,Le,r7,Ev,hv,mv,pv,Sv,pn,av,Rv=Te(()=>{cv=require("path"),uv=require("fs"),lv=U(require("fastify")),_v=U(require("@fastify/cors")),dv=U(fT()),fv=U(require("@fastify/autoload")),$T=U(X()),YT=U(b()),Le=U(G()),r7=U(jP()),Ev=U(qr()),hv=U(ev()),mv=U(sv()),pv=U(ov()),Sv=U(of());Vo();Ur();av=new Set;a(s7,"handleFile");a(n7,"customFunctionsServer");a(i7,"setUp");a(o7,"buildRouteFolder");a(Tv,"buildServer");a(a7,"ready")});var WT={};Qe(WT,{start:()=>c7});function c7(e){return{handleFile(t,r,s){Av||(Av=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=gv.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,Ov.default)(n,(0,Nv.realpathSync)(o))}}return i(n)},{runFirst:!0})),gv.set(r,s)}}}var Ov,Nv,gv,Av,bv=Te(()=>{Ov=U(require("send")),Nv=require("fs"),gv=new Map;a(c7,"start")});function _7(e,t=1,r){if(QT++,(0,Ki.startWorker)("server/threads/threadServer.js",{name:uf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===uf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});l7.push(n),await n,sa.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=cf.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=sa.indexOf(s);o>-1&&sa.splice(o,1)}if(a(i,"removeWorker"),na){let o=na;na=[];for(let c of o)Cv[c.localPort](null,c)}}}),r){let s=setInterval(()=>{zT?zT=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Ki.shutdownWorkers)(),QT=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function Lv(e=0,t){if(typeof e=="string")try{(0,lf.existsSync)(e)&&(0,lf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=d7:r=f7(t):r=JT;let s=(0,ia.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=Cv[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),zT=!0,r(o,(c,u)=>{if(!c){if(yv){let l=o._socket||new ia.Socket({handle:o,writable:!0,readable:!0});yv.deliverSocket(l,e,u),l.resume()}else QT>0?(na.length===0&&setTimeout(()=>{na.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,na.push(o)):(console.log("start up a dynamic thread to handle request"),_7(0));Or(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new ia.Socket({handle:o,writable:!0,readable:!0});p7(l,c,e)}Or(!0,"socket-routed")})};let n=pc();wv.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 JT(e,t){let r,s=0;for(let n of sa){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 d7(e,t){let r={};e.getpeername(r);let s=r.address,n=oa.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);JT(e,o=>{oa.set(s,{worker:o,lastUsed:i}),t(o)})}function f7(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new ia.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=oa.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);JT(s,d=>{oa.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function h7(){af=0;for(let e of sa)e.expectedIdle=e.recentELU.idle+E7,e.requests=1;sa.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function p7(e,t,r){let s=m7++;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(),cf.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")),cf.delete(s)),n.event=="destroy"&&(e.destroy(),cf.delete(s))})}var Ki,ia,uf,wv,lf,u7,sa,na,Cv,yv,QT,l7,zT,af,Iv,oa,E7,cf,m7,Dv=Te(()=>{Ki=U(Ze()),ia=require("net"),uf=U(b()),wv=U(G()),lf=require("fs");xn();({isMainThread:u7}=require("worker_threads")),sa=[],na=[],Cv=[],QT=0,l7=[];u7&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(_7,"startHTTPWorker");a(Lv,"startSocketServer");af=0;a(JT,"findMostIdleWorker");Iv=36e5,oa=new Map;a(d7,"findByRemoteAddressAffinity");a(f7,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of oa)r.lastUsed+Iv<e&&oa.delete(t)},Iv).unref();E7=1e3;a(h7,"updateWorkerIdleness");(0,Ki.setMonitorListener)(h7);cf=new Map,m7=1;a(p7,"proxySocket")});var vv=T((yde,Pv)=>{"use strict";var S7=require("cluster"),Ts=X();Ts.initSync();var Mv=b(),Ode=require("util"),Sn=G(),XT=require("fs"),T7=require("fastify"),Nde=pc(),R7=require("@fastify/cors"),g7=require("@fastify/compress"),A7=require("@fastify/static"),O7=fT(),N7=require("path"),{PACKAGE_ROOT:b7}=b(),y7=Pn(),I7=$(),w7=qr(),C7=Za(),{server:L7}=(Ur(),Z(eo)),{authHandler:D7,handlePostRequest:U7,serverErrorHandler:M7,reqBodyValidationHandler:P7}=of(),bde=require("net"),{registerContentHandlers:v7}=(Vo(),Z(MM)),B7=6e4,H7=1024*1024*1024,F7="TRUE",{CONFIG_PARAMS:Tn}=Mv,Wi;Pv.exports={hdbServer:Uv,start:Uv};async function Uv(e){try{Sn.info("In Fastify server"+process.cwd()),Sn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Sn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=S7.isMaster,await q7();let t=Ts.get(Tn.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;Wi=G7(t),await Wi.ready(),e||(e={}),e.isOperationsServer=!0,Wi.server.cantCleanupProperly=!0;try{L7.http(Wi.server,e),Wi.server.closeIdleConnections||await Wi.listen({port:0,host:"::"})}catch(r){throw Wi.close(),Sn.error(r),Sn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Sn.fatal(t),process.exit(1)}}a(Uv,"operationsServer");async function q7(){Sn.trace("Configuring HarperDB process."),y7.setSchemaDataToGlobal(),await w7.setUsersToGlobal(),await C7.getLicense()}a(q7,"setUp");function G7(e){Sn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=x7(e),r=T7(t);r.server.headersTimeout=V7(),r.setErrorHandler(M7);let s=k7();s&&r.register(R7,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(O7),r.register(g7),r.register(A7,{root:N7.join(b7,"studio")}),v7(r);let n=Ts.get(Mv.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!I7.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[P7,D7],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),U7(i,o)}),r.get("/health",()=>"HarperDB is running."),Sn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(G7,"buildServer");function x7(e){let t=Ts.get(Tn.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ts.get(Tn.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:H7,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Ts.get(Tn.OPERATIONSAPI_TLS_PRIVATEKEY),i=Ts.get(Tn.OPERATIONSAPI_TLS_CERTIFICATE),o=Ts.get(Tn.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:XT.readFileSync(n),cert:XT.readFileSync(i)+(o?`
26
+ `+YT.readFileSync(o):"")},s.http2=!0}return s}a(t7,"getServerOptions");sv.exports=t7});var av=T((mde,ov)=>{"use strict";var KT=X();KT.initSync();var{CONFIG_PARAMS:iv}=b();function r7(){let e=KT.get(iv.HTTP_CORSACCESSLIST),t=KT.get(iv.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(r7,"getCORSOptions");ov.exports=r7});var lv=T((Sde,uv)=>{"use strict";var cv=X();cv.initSync();var s7=b();function n7(){return cv.get(s7.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(n7,"getHeaderTimeoutConfig");uv.exports=n7});var zT={};Qe(zT,{customFunctionsServer:()=>a7,handleFile:()=>o7,ready:()=>l7});async function o7(e,t,r,s){if(!pn){let c=WT.get(QT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);pn=Ov(c),ut.http((await pn).server)}let n=await pn,i=(0,dv.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!_v.has(i)){_v.add(i);try{n.register(u7(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 a7(){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 c7();let e=WT.get(QT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=pn=await Ov(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 c7(){try{De.info("Custom Functions starting configuration."),await Sv.setUsersToGlobal(),De.info("Custom Functions completed configuration.")}catch(e){De.error(e)}}function u7(e,t){return async function(r){try{De.info("Custom Functions starting buildRoutes"),De.trace("Loading fastify routes folder "+e),(0,fv.existsSync)(e)&&r.register(pv.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 Ov(e){De.info("Custom Functions starting buildServer.");let t=(0,Tv.default)(e),r=(0,Ev.default)(t);r.server.headersTimeout=(0,gv.default)(),r.setErrorHandler(Av.serverErrorHandler);let s=(0,Rv.default)();return s&&r.register(hv.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(mv.default),await r.register(i7),await r.after(),fT(r),De.info("Custom Functions completed buildServer."),r}function l7(){if(pn)return pn.then?pn.then(e=>e.ready()):pn.ready()}var dv,fv,Ev,hv,mv,pv,WT,QT,De,i7,Sv,Tv,Rv,gv,Av,pn,_v,Nv=Te(()=>{dv=require("path"),fv=require("fs"),Ev=M(require("fastify")),hv=M(require("@fastify/cors")),mv=M(mT()),pv=M(require("@fastify/autoload")),WT=M(X()),QT=M(b()),De=M(G()),i7=M(rv()),Sv=M(Gr()),Tv=M(nv()),Rv=M(av()),gv=M(lv()),Av=M(cf());Yo();Ur();_v=new Set;a(o7,"handleFile");a(a7,"customFunctionsServer");a(c7,"setUp");a(u7,"buildRouteFolder");a(Ov,"buildServer");a(l7,"ready")});var JT={};Qe(JT,{start:()=>_7});function _7(e){return{handleFile(t,r,s){yv||(yv=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=bv.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,Iv.default)(n,(0,wv.realpathSync)(o))}}return i(n)},{runFirst:!0})),bv.set(r,s)}}}var Iv,wv,bv,yv,Cv=Te(()=>{Iv=M(require("send")),wv=require("fs"),bv=new Map;a(_7,"start")});function E7(e,t=1,r){if(XT++,(0,Ki.startWorker)("server/threads/threadServer.js",{name:_f.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===_f.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});f7.push(n),await n,ia.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=lf.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=ia.indexOf(s);o>-1&&ia.splice(o,1)}if(a(i,"removeWorker"),oa){let o=oa;oa=[];for(let c of o)Mv[c.localPort](null,c)}}}),r){let s=setInterval(()=>{jT?jT=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Ki.shutdownWorkers)(),XT=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function Pv(e=0,t){if(typeof e=="string")try{(0,df.existsSync)(e)&&(0,df.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=h7:r=m7(t):r=ZT;let s=(0,aa.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=Mv[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),jT=!0,r(o,(c,u)=>{if(!c){if(Lv){let l=o._socket||new aa.Socket({handle:o,writable:!0,readable:!0});Lv.deliverSocket(l,e,u),l.resume()}else XT>0?(oa.length===0&&setTimeout(()=>{oa.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,oa.push(o)):(console.log("start up a dynamic thread to handle request"),E7(0));Or(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new aa.Socket({handle:o,writable:!0,readable:!0});R7(l,c,e)}Or(!0,"socket-routed")})};let n=Tc();Uv.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 ZT(e,t){let r,s=0;for(let n of ia){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=uf)return uf=i,t(r);s=i}uf=0,t(r)}function h7(e,t){let r={};e.getpeername(r);let s=r.address,n=ca.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);ZT(e,o=>{ca.set(s,{worker:o,lastUsed:i}),t(o)})}function m7(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new aa.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=ca.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);ZT(s,d=>{ca.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function S7(){uf=0;for(let e of ia)e.expectedIdle=e.recentELU.idle+p7,e.requests=1;ia.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function R7(e,t,r){let s=T7++;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(),lf.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")),lf.delete(s)),n.event=="destroy"&&(e.destroy(),lf.delete(s))})}var Ki,aa,_f,Uv,df,d7,ia,oa,Mv,Lv,XT,f7,jT,uf,Dv,ca,p7,lf,T7,vv=Te(()=>{Ki=M(Ze()),aa=require("net"),_f=M(b()),Uv=M(G()),df=require("fs");xn();({isMainThread:d7}=require("worker_threads")),ia=[],oa=[],Mv=[],XT=0,f7=[];d7&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(E7,"startHTTPWorker");a(Pv,"startSocketServer");uf=0;a(ZT,"findMostIdleWorker");Dv=36e5,ca=new Map;a(h7,"findByRemoteAddressAffinity");a(m7,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of ca)r.lastUsed+Dv<e&&ca.delete(t)},Dv).unref();p7=1e3;a(S7,"updateWorkerIdleness");(0,Ki.setMonitorListener)(S7);lf=new Map,T7=1;a(R7,"proxySocket")});var qv=T((Lde,Fv)=>{"use strict";var g7=require("cluster"),Rs=X();Rs.initSync();var Hv=b(),Ide=require("util"),Sn=G(),eR=require("fs"),A7=require("fastify"),wde=Tc(),O7=require("@fastify/cors"),N7=require("@fastify/compress"),b7=require("@fastify/static"),y7=mT(),I7=require("path"),{PACKAGE_ROOT:w7}=b(),C7=Pn(),L7=$(),D7=Gr(),U7=tc(),{server:M7}=(Ur(),Z(eo)),{authHandler:P7,handlePostRequest:v7,serverErrorHandler:B7,reqBodyValidationHandler:H7}=cf(),Cde=require("net"),{registerContentHandlers:F7}=(Yo(),Z(HM)),q7=6e4,G7=1024*1024*1024,x7="TRUE",{CONFIG_PARAMS:Tn}=Hv,Wi;Fv.exports={hdbServer:Bv,start:Bv};async function Bv(e){try{Sn.info("In Fastify server"+process.cwd()),Sn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Sn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=g7.isMaster,await k7();let t=Rs.get(Tn.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;Wi=V7(t),await Wi.ready(),e||(e={}),e.isOperationsServer=!0,Wi.server.cantCleanupProperly=!0;try{M7.http(Wi.server,e),Wi.server.closeIdleConnections||await Wi.listen({port:0,host:"::"})}catch(r){throw Wi.close(),Sn.error(r),Sn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Sn.fatal(t),process.exit(1)}}a(Bv,"operationsServer");async function k7(){Sn.trace("Configuring HarperDB process."),C7.setSchemaDataToGlobal(),await D7.setUsersToGlobal(),await U7.getLicense()}a(k7,"setUp");function V7(e){Sn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=$7(e),r=A7(t);r.server.headersTimeout=K7(),r.setErrorHandler(B7);let s=Y7();s&&r.register(O7,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(y7),r.register(N7),r.register(b7,{root:I7.join(w7,"studio")}),F7(r);let n=Rs.get(Hv.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!L7.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[H7,P7],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),v7(i,o)}),r.get("/health",()=>"HarperDB is running."),Sn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(V7,"buildServer");function $7(e){let t=Rs.get(Tn.OPERATIONSAPI_NETWORK_TIMEOUT),r=Rs.get(Tn.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:G7,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Rs.get(Tn.OPERATIONSAPI_TLS_PRIVATEKEY),i=Rs.get(Tn.OPERATIONSAPI_TLS_CERTIFICATE),o=Rs.get(Tn.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:eR.readFileSync(n),cert:eR.readFileSync(i)+(o?`
27
27
 
28
- `+XT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(x7,"getServerOptions");function k7(){let e=Ts.get(Tn.OPERATIONSAPI_NETWORK_CORS),t=Ts.get(Tn.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===F7)&&(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(k7,"getCORSOpts");function V7(){return Ts.get(Tn.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??B7}a(V7,"getHeaderTimeoutConfig")});var Kv=T((Lde,Yv)=>{"use strict";var{decode:$7}=require("msgpackr"),{isMainThread:Y7,parentPort:K7,threadId:wde}=require("worker_threads"),ZT=_t(),Rn=ke(),W7=b(),pu=G(),Bv=X(),Fv=b();Ze();var Q7=nn(),{recordAction:z7,recordActionBinary:J7}=(xn(),Z(T_)),{publishToStream:X7}=ZT,Cde={durable:Rn.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Rn.WORK_QUEUE_CONSUMER_NAMES.deliver_group},j7,Z7,eee,qv,Gv;Yv.exports={initialize:xv,workQueueListener:$v,setSubscription:tee,setIgnoreOrigin:see,getDatabaseSubscriptions:ree};async function xv(){Gv=!0,pu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await ZT.getNATSReferences();j7=e,Z7=e.info.server_name,eee=t,qv=r}a(xv,"initialize");var df=new Map;function tee(e,t,r){let s=df.get(e);s||df.set(e,s=new Map),s.set(t,r),Gv||xv().then($v)}a(tee,"setSubscription");function ree(){return df}a(ree,"getDatabaseSubscriptions");var kv;function see(e){kv=e}a(see,"setIgnoreOrigin");var Vv=100,Hv=new Array(Vv),_f=0;async function $v(){let t=await(await qv.consumers.get(Rn.WORK_QUEUE_CONSUMER_NAMES.stream_name,Rn.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await Hv[_f],Hv[_f]=nee(r).catch(s=>{pu.error(s)}),++_f>=Vv&&(_f=0)}a($v,"workQueueListener");Y7||K7.on("message",async e=>{let{type:t}=e;t===Fv.ITC_EVENT_TYPES.SHUTDOWN&&ZT.closeConnection()});async function nee(e){let t=$7(e.data);z7(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=Bv.get(W7.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Rn.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Rn.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(Rn.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!kv),J7(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(Rn.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;pu.trace("processing message:",o,c,_,(l?"records: "+l.map(N=>N?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),pu.trace(`messageProcessor nats msg id: ${e.headers.get(Rn.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:S,user:p,node_name:g}=f||{},I=df.get(c)?.get(_);if(!I)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,I.send(t);else if(l.length===1&&!u)I.send({type:jT(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:p,nodeName:g});else{let N=l.map((Y,W)=>({type:jT(o),value:Y,expiresAt:E,id:d?.[W],table:_}));for(;u;)N.push({type:jT(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;I.send({type:"transaction",writes:N,table:_,timestamp:S,onCommit:h,user:p,nodeName:g})}Bv.get(Fv.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&X7(e.subject.split(".").slice(0,-1).join("."),Q7.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){pu.error(o)}e.ack()}a(nee,"messageProcessor");function jT(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(jT,"convertOperation")});var iR={};Qe(iR,{disableNATS:()=>oee,publishToStream:()=>mf,setNATSReplicator:()=>eR,setPublishToStream:()=>aee,setSubscription:()=>nR,start:()=>iee});function iee(){Ef.default.get(hf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&uee()}function oee(e=!0){jv=e}function aee(e,t){mf=e,nR=t}function uee(){if(jv||process.env._DISABLE_NATS)return;let e=_s(),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];eR(n,r,i)}}oR((r,s)=>{eR(r.tableName,r.databaseName,r),s&&e0(r)}),!Wv&&(Wv=!0)}function eR(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[we],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[we]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[we],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[we]})}static defineSchema(i){e0(i)}static subscribe(){let i=new ss;return nR(t,e,i),i}static subscribeOnThisThread(i){return i<cee}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 ff(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=Zv;return i}a(s,"getNATSTransaction")}function e0(e){let t=Ef.default.get(hf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);mf(`${rR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,sR.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var Qv,rR,sR,zv,Jv,Ef,hf,Xv,jv,mf,nR,cee,Zv,Wv,ff,tR,t0=Te(()=>{fe();is();Qv=U(_t()),rR=U(ke()),sR=U(nn());Da();zv=U(Kv()),Jv=U(hr()),Ef=U(X()),hf=U(b()),Xv=U(G());a(iee,"start");a(oee,"disableNATS");mf=Qv.publishToStream,nR=zv.setSubscription;a(aee,"setPublishToStream");cee=2;a(uee,"assignReplicationSource");a(eR,"setNATSReplicator");a(e0,"publishSchema");ff=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=Ef.default.get(hf.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||(Xv.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(mf(`${rR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,sR.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},tR=class extends ff{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,Jv.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};Zv=new tR});async function s0({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await aR.getResource(e,{});n=new uR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await aR.get(e);i&&i.delete()}n=new Sf(e,t)}return n}function cR(){return pf++,pf>65500&&(pf=1),pf}var r0,aa,aR,pf,Sf,uR,n0=Te(()=>{fe();Kc();r0=U(hr()),aa=U(G());di();aR=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(s0,"getSession");pf=1;a(cR,"getNextMessageId");Sf=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(I=>I.topic===n);f&&(f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1));let E={search:u,async:!0,user:this.user,startTime:o,omitCurrent:i,isCollection:l,shallowWildcard:d,url:""};o&&(0,aa.trace)("Resuming subscription from",n,"from",o);let h=Qn.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 S=h.path,p=h.Resource,g=await Ge(E,async()=>{let I=await p.subscribe(E);if(!I)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!I[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let N of I)try{let Y;if(N.type&&N.type!=="put"&&N.type!=="delete"&&N.type!=="message"||s&&!s(N))continue;r?(N.topic=n,Y=this.needsAcknowledge(N)):(N.acknowledge?.(),Y=cR());let W=N.id;Array.isArray(W)&&(W=ko(W)),W==null&&(W=""),this.listener(S+"/"+W,N.value,Y,t)}catch(Y){(0,aa.warn)(Y)}})(),I});return g.topic=n,g.qos=t.qos,this.subscriptions.push(g),g}resume(){}needsAcknowledge(t){let r=cR();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;let i=Qn.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=[]}},uR=class extends Sf{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=cR(),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,aa.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,r0.getNextMonotonicTime)()),(0,aa.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),aR.put(this.sessionRecord)),t.qos}}});var _R={};Qe(_R,{start:()=>_ee});async function _ee({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}=a0(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,zr.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;lee&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,c0.getSuperUser)());let{onMessage:u,onClose:_}=a0(o,l=>o.write(l),null,c,i);o.on("data",u),o.on("close",_),o.on("error",l=>{(0,zr.info)("Socket error",l)})},{port:t,securePort:s})}function a0(e,t,r,s,n){o0||(o0=!0,Rc(d=>{Tf>0&&d.push({metric:"mqtt-connections",connections:Tf,byThread:!0})}));let i;Tf++;let o,c={protocolVersion:4},u=(0,Rf.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){Tf--,i||(i=!0,o?.disconnect(),Gr(!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,lR.get)(gn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&i0.notify({username:s.username,status:gn.AUTH_AUDIT_STATUS.SUCCESS,type:gn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,lR.get)(gn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&i0.error({username:s.username,status:gn.AUTH_AUDIT_STATUS.FAILURE,type:gn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return Gr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=s0({user:s,...d}),o=await o}catch(N){return(0,zr.error)(N),Gr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:N.code||5,returnCode:N.code||128})}Gr(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((N,Y,W,q)=>{try{let w=N.indexOf("/",1),K=w>0?N.slice(0,w):N;f({cmd:"publish",topic:N,payload:E(Y),messageId:W||Math.floor(Math.random()*1e8),qos:q.qos},K)}catch(w){(0,zr.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let N of d.subscriptions){let Y;try{Y=(await o.addSubscription(N,N.qos>=1)).qos||0}catch(W){(0,zr.error)(W),Y=128}h.push(Y)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let N of d.unsubscriptions)o.removeSubscription(N);f({cmd:"unsuback",messageId:d.messageId});break;case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let S=d.qos===2?"pubrec":"puback",p=e.deserialize||(e.deserialize=Jo(r?.headers.get?.("content-type"))),g=d.payload?.length>0?p(d.payload):void 0,I;try{I=await o.publish(d,g)}catch(N){(0,zr.warn)(N),d.qos>0&&f({cmd:S,messageId:d.messageId,reasonCode:128,returnCode:128},d.topic)}d.qos>0&&f({cmd:S,messageId:d.messageId,reasonCode:I===!1?144:0,returnCode:I===!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(),Gr(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,zr.error)(h),f({cmd:"disconnect"})}function f(h,S){let p=(0,Rf.generate)(h,c);t(p),Or(p.length,"bytes-sent",S,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return zn(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Rf,c0,lR,gn,zr,i0,lee,o0,Tf,u0=Te(()=>{Rf=require("mqtt-packet");n0();c0=U(qr());Vo();xn();Ur();lR=U(X()),gn=U(b()),zr=U(G()),i0=(0,zr.loggerWithTag)("auth-event"),lee=!0;a(_ee,"start");Tf=0;a(a0,"onSocket")});var _0,l0,dR,d0=Te(()=>{_0=require("os"),l0=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,_0.platform)()!="win32"&&(dR=require("node-unix-socket").createReuseportFd)});var Ad={};Qe(Ad,{component_errors:()=>ca,loadComponent:()=>gf,loadComponentDirectories:()=>g0,setErrorReporter:()=>hee});function g0(e,t){t&&(ER=t),e&&(hR=e);let r=[];if((0,Rs.existsSync)(fR)){let n=(0,Rs.readdirSync)(fR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Rt.join)(fR,o);r.push(gf(c,ER,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(gf(s,ER,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{R0=!0})}function hee(e){Ru=e}async function gf(e,t,r,s,n,i){if(!E0.has(e)){E0.set(e,!0),n&&(hR=n);try{let o;s&&(ca=new Map);let c=(0,Rt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Rs.existsSync)(c)?o=s?(0,T0.getConfigObj)():(0,h0.parseDocument)((0,Rs.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=mR;let u=[],_=s;for(let l in o){let d=o[l];if(ca.set(s?l:(0,Rt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let I=e,N;for(;!(0,Rs.existsSync)(N=(0,Rt.join)(I,"node_modules",l));)if(I=(0,Rt.dirname)(I),I.length<(0,S0.getHdbBasePath)().length){N=null;break}if(N)f=await gf(N,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Eee[l];if(!f)continue;u.push(f);let h=a(I=>(I.origin=r,et(I)),"ensureTable"),S=d.network||(d.port||d.securePort)&&d,p=S?.securePort||S?.https&&S.port,g=!S?.https&&S?.port;if(Su.isMainThread&&(f=await f.startOnMainThread?.({server:ut,ensureTable:h,port:g,securePort:p,resources:t,...d})||f,s&&S))for(let I of[g,p])try{if(+I&&!f0.includes(I)){let N=pR.get(SR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);N&&Tu.default.warn("Session affinity is not recommended and may cause memory leaks"),(N||!dR)&&(f0.push(I),Lv(I,N))}}catch(N){console.error("Error listening on socket",I,N,l)}if(t.isWorker&&(f=await f.start?.({server:ut,ensureTable:h,port:g,securePort:p,resources:t,...d})||f),hR.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,p0.handleHDBError)("Can not reference parent directories");let I=(0,Rt.join)(e,d.files).replace(/\\/g,"/"),N=I.indexOf("/*");if(N>-1&&d.files!==mR[l]?.files&&!(0,Rs.existsSync)(I.slice(0,N)))throw new Error(`The path '${I.slice(0,N)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let Y of await(0,m0.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:W,dirent:q}=Y;_=!0;let w=(0,Rt.relative)(e,W).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(q.isFile()){let x=await fee(W);Su.isMainThread&&await f.setupFile?.(x,B,W,t),t.isWorker&&await f.handleFile?.(x,B,W,t)}else Su.isMainThread&&await f.setupDirectory?.(B,W,t),t.isWorker&&await f.handleDirectory?.(B,W,t)}catch(x){x.message=`Could not load ${q.isFile()?"file":"directory"} '${W}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${x.message}`,Ru?.(x),((0,ua.getWorkerIndex)()===0?console:Tu.default).error(x),t.set(d.path||"/",new gu(x)),ca.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}`,Ru?.(h),((0,ua.getWorkerIndex)()===0?console:Tu.default).error(h),t.set(d.path||"/",new gu(h),null,!0),ca.set(s?l:(0,Rt.basename)(e),h.message)}}if(Su.isMainThread&&!R0&&i&&(0,ua.watchDir)(e,async()=>g0()),o.extensionModule)return await ml((0,Rt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;Ru?.(new Error(l)),((0,ua.getWorkerIndex)()===0?console:Tu.default).error(l),ca.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}`,Ru?.(o),t.set("",new gu(o))}}}var Rs,Rt,Su,h0,pR,SR,m0,ua,Tu,p0,S0,dee,T0,fee,fR,hR,R0,ER,ca,Eee,mR,f0,E0,Ru,gu,Od=Te(()=>{Rs=require("fs"),Rt=require("path"),Su=require("worker_threads"),h0=require("yaml"),pR=U(X()),SR=U(b());PA();FA();qA();BM();Rv();bv();m0=U(require("fast-glob")),ua=U(Ze()),Tu=U(G());wE();Ur();p0=U(j());is();fe();Dv();S0=U(X()),dee=U(vv());Ed();t0();u0();T0=U(Er());d0();({readFile:fee}=Rs.promises),fR=pR.get(SR.CONFIG_PARAMS.COMPONENTSROOT),hR=new Map,ca=new Map;a(g0,"loadComponentDirectories");Eee={REST:Hd,rest:Hd,graphqlSchema:IE,jsResource:LE,fastifyRoutes:KT,login:UE,static:WT,operationsApi:dee,customFunctions:{},http:{},clustering:iR,authentication:Wc,mqtt:_R},mR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(mR,"static",{value:{files:"web/**"}});f0=[],E0=new Map;a(hee,"setErrorReporter");a(gf,"loadComponent");gu=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 N0=T((afe,O0)=>{var{isMainThread:A0}=require("worker_threads"),{getTables:mee}=(fe(),Z(Ce)),{loadComponentDirectories:pee,loadComponent:See}=(Od(),Z(Ad)),{resetResources:Tee}=(Kc(),Z(rU)),Ree=xS(),gee=Er(),{dirname:Aee}=require("path"),{getConnection:Oee}=_t(),Nee=X(),bee=b(),TR=new Map;async function yee(e=!1){!A0&&Nee.get(bee.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Oee();try{A0&&await Ree()}catch(s){console.error(s)}let t=Tee();mee(),t.isWorker=e,await See(Aee(gee.getConfigFilePath()),t,"hdb",!0,TR),await pee(TR,t);let r=[];for(let[s]of TR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(yee,"loadRootComponents");O0.exports.loadRootComponents=yee});var Ze=T((ufe,Zn)=>{"use strict";var{Worker:Iee,MessageChannel:wee,parentPort:$s,isMainThread:NR,threadId:Cee,workerData:An}=require("worker_threads"),{PACKAGE_ROOT:Lee}=b(),{join:I0,isAbsolute:Dee,extname:Uee}=require("path"),{server:w0}=(Ur(),Z(eo)),{watch:Mee,readdir:Pee}=require("fs/promises"),{totalmem:b0}=require("os"),Nf=b(),vee=X(),On=G(),{randomBytes:Bee}=require("crypto"),{_assignPackageExport:Hee}=require("../../index"),Fee=b(),qee=1024*1024,jn=[],Jr=[],Gee=50,bR=1e4,xee="restart",C0="request_thread_info",L0="resource_report",D0="thread_info",U0="added-port",kee="ack",RR;Hee("threads",Jr);Zn.exports={startWorker:gR,restartWorkers:IR,shutdownWorkers:Wee,workers:jn,setMonitorListener:tte,onMessageFromWorkers:Qee,onMessageByType:F0,broadcast:Jee,broadcastWithAcknowledgement:jee,setChildListenerByType:Kee,getWorkerIndex:M0,getWorkerCount:P0,getTicketKeys:v0,setMainIsWorker:$ee,setTerminateTimeout:Vee,restartNumber:An?.restartNumber||1};Jr.onMessageByType=F0;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 yR;function Vee(e){bR=e}a(Vee,"setTerminateTimeout");function M0(){return An?An.workerIndex:yR?0:void 0}a(M0,"getWorkerIndex");function P0(){return An?An.workerCount:yR?1:void 0}a(P0,"getWorkerCount");function $ee(e){yR=e}a($ee,"setMainIsWorker");var Af;function v0(){return Af||(Af=NR?Bee(48):An.ticketKeys,Af)}a(v0,"getTicketKeys");Object.defineProperty(w0,"workerIndex",{get(){return M0()}});Object.defineProperty(w0,"workerCount",{get(){return P0()}});var B0={[C0](e,t){Zee(t)},[L0](e,t){ete(t,e)}};function gR(e,t={}){let r=process.constrainedMemory?.()||b0();r=Math.min(r,b0());let s=Math.max(Math.floor(r/qee/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[],o=[];for(let u of Jr){let _=new wee;_.existingPort=u,i.push(_),o.push(_.port2)}Uee(e)||(e+=".js");let c=new Iee(Dee(e)?e:I0(Lee,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:Zn.exports.restartNumber,ticketKeys:v0()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:U0,port:u,threadId:c.threadId},[u]);return bf(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>gR(e,t),c.on("error",u=>{console.error("Worker error:",u),On.error("Worker error:",u)}),c.on("exit",u=>{jn.splice(jn.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Gee?(t.unexpectedRestarts=c.unexpectedRestarts+1,gR(e,t)):On.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{B0[u.type]?.(u,c)}),jn.push(c),ste(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(gR,"startWorker");var Yee=[Nf.THREAD_TYPES.HTTP];async function IR(e=null,t=2,r=!0){if(NR){if(r){let{loadRootComponents:o}=N0();await o()}Zn.exports.restartNumber++,t<1&&(t=t*jn.length);let s=[],n=[];for(let o of jn.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;On.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Zn.exports.restartNumber,type:Nf.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Yee.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),bR*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===Fee.ITC_EVENT_TYPES.CHILD_STARTED&&(On.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");On.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}=ud();r&&(e==="http"||!e)&&vee.get(Nf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else $s.postMessage({type:xee,workerType:e})}a(IR,"restartWorkers");function Kee(e,t){B0[e]=t}a(Kee,"setChildListenerByType");function Wee(e){return IR(e,1/0,!1)}a(Wee,"shutdownWorkers");var H0=[];function Qee(e){H0.push(e)}a(Qee,"onMessageFromWorkers");var AR=new Map;function F0(e,t){let r=AR.get(e);r||AR.set(e,r=[]),r.push(t)}a(F0,"onMessageByType");var zee=10;async function Jee(e){let t=0;for(let r of Jr)try{r.postMessage(e),t++>zee&&(t=0,await new Promise(setImmediate))}catch(s){On.error("Unable to send message to worker",s)}}a(Jee,"broadcast");var Of=new Map,Xee=1;function jee(e){return new Promise(t=>{let r=0;for(let s of Jr)try{let n=Xee++,i=a(()=>{Of.delete(n),--r===0&&t(),s!==$s&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Of.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Of)o.port===s&&o()})),s.postMessage(e),r++}catch(n){On.error("Unable to send message to worker",n)}r===0&&t()})}a(jee,"broadcastWithAcknowledgement");function Zee(e){e.postMessage({type:D0,workers:q0()})}a(Zee,"sendThreadInfo");function q0(){let e=Date.now();return jn.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(q0,"getChildWorkerInfo");function ete(e,t){e.resources=t,e.resources.updated=Date.now()}a(ete,"recordResourceReport");var OR;function tte(e){OR=e}a(tte,"setMonitorListener");var rte=1e3,y0=!1;function ste(){y0||(y0=!0,setInterval(()=>{for(let e of jn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}OR&&OR()},rte).unref())}a(ste,"startMonitoring");var nte=1e3;if($s){bf($s);for(let e=0,t=An.addPorts.length;e<t;e++){let r=An.addPorts[e];r.threadId=An.addThreadIds[e],bf(r)}setInterval(()=>{let e=process.memoryUsage();$s.postMessage({type:L0,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},nte).unref(),RR=a(()=>new Promise((e,t)=>{$s.on("message",r),$s.postMessage({type:C0});function r(s){s.type===D0&&($s.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else RR=q0;Zn.exports.getThreadInfo=RR;function bf(e,t){Jr.push(e),e.on("message",r=>{if(r.type===U0)r.port.threadId=r.threadId,bf(r.port);else if(r.type===kee){let s=Of.get(r.id);s&&s()}else{for(let n of H0)n(r,e);let s=AR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){On.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(bf,"addPort");if(NR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Pee(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(I0(s,i.name));try{for await(let{filename:i}of Mee(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await IR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");Zn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else $s.on("message",async e=>{let{type:t}=e;t===Nf.ITC_EVENT_TYPES.SHUTDOWN&&(Zn.exports.restartNumber=e.restartNumber,$s.unref(),setTimeout(()=>{On.warn("Thread did not voluntarily terminate",Cee),process.exit(0)},bR).unref())})});function x0(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;la||((0,Ou.onMessageByType)(G0,d=>{k0(d.path)}),(0,Ou.onMessageByType)(ite,d=>{(0,Au.trace)("confirming to proceed with txn",d.txnId)}),la=Object.create(null));let c=la[i]||(la[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=ko(t);let _=new CR(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 k0(e,t){if(!la)return;let r=la[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:wR,exclusiveStart:!0})){wR=n;let o=pr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=ko(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,Au.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let S;h.supportsTransactions&&h.txnInProgress!==o.version&&(S=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,S)}catch(S){console.error(S),(0,Au.info)(S)}}}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"},wR,!0)}function V0(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,Ou.broadcast)({type:G0,path:n}),k0(n,!0)})}}var Au,Ou,G0,ite,la,hfe,CR,wR,$0=Te(()=>{Au=U(G()),Ou=U(Ze());Da();Kc();so();G0="transaction",ite="transaction-await",hfe=Buffer.alloc(4096);a(x0,"addSubscription");CR=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"}}},wR=Date.now();a(k0,"notifyFromTransactionData");a(V0,"listenToCommits")});var wT={};Qe(wT,{coerceType:()=>Lf,makeTable:()=>Uf,setServerUtilities:()=>dte,updateResource:()=>Iu});function Uf(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:S}=e;S||(S=[]),V0(i,u);let p=ZE(i,s,u),g=0,I,N,Y,W={},q=Promise.resolve(),w,K,B;for(let J of S)(J.assignCreatedTime||J.name==="__createdtime__")&&(w=J),(J.assignUpdatedTime||J.name==="__updatedtime__")&&(K=J),J.expiresAt&&(B=J),J.isPrimaryKey&&(W=J);let x,te=[],be=[],se=1,Pt=2,Pe={},gt={},jr=864e5,YR,Hu,HB=10,FB=6;E&&QR();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=S;static expirationTimer;static createdTimeProperty=w;static updatedTimeProperty=K;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,R){R&&(this.sourceOptions=R,(R.expiration||R.eviction||R.scanInterval)&&this.setTTLExpiration(R)),R?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),N=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let P=a(y=>{let L=this.sources.slice(0,-1);if(L=L.filter(D=>D[y]&&(!D[y].reliesOnPrototype||D.prototype[y])),L.length>0)if(L.length===1){let D=L[0];return(V,Q,oe)=>{if(V?.source!==D)return D[y](Q,oe,V)}}else return(D,V,Q)=>{let oe=[];for(let k of L){if(D?.source===k)break;oe.push(k[y](V,Q,D))}return Promise.all(oe)}},"getApplyToIntermediateSource"),A=this.sources[this.sources.length-1],C=a(y=>{if(A[y]&&(!A[y].reliesOnPrototype||A.prototype[y]))return(L,D,V)=>{if(!L?.source)return A[y](D,V,L)}},"getApplyToCanonicalSource");return Pe={put:C("put"),delete:C("delete"),publish:C("publish")},gt={put:P("put"),delete:P("delete"),publish:P("publish"),invalidate:P("invalidate")},(async()=>{let y=!1,L=a(async(D,V)=>{let Q=D.value,oe=D.table?xe[c][D.table]:at;if(c===gs.SYSTEM_SCHEMA_NAME&&(D.table===gs.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||D.table===gs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(y=!0),D.id===void 0&&(D.id=Q[oe.primaryKey],D.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(D));D.source=m;let k=await oe.getResource(D.id,V,Nu);switch(D.type){case"put":return k._writeUpdate(Q,Nu);case"delete":return k._writeDelete(Nu);case"publish":return k._writePublish(Q,Nu);case"invalidate":return k.invalidate(Nu);default:Ke.error("Unknown operation",D.type,D.id)}},"writeUpdate");try{let D=m.subscribe;D&&h==null&&(h=!0);let V=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Qi.getWorkerIndex)()):(0,Qi.getWorkerIndex)()===0,Q=D&&V&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(Q){let oe;for await(let k of Q)try{if(!(k.type==="transaction"?k.writes[0]:k)){Ke.error("Bad subscription event",k);continue}if(k.source=m,oe)if(k.beginTxn)oe.resolve();else{L(k,oe);continue}if(k.type==="end_txn")continue;let Ne=Ge(k,()=>{if(k.type==="transaction"){let ne=[];for(let vt of k.writes)try{ne.push(L(vt,k))}catch(Vt){throw Vt.message+=" writing "+JSON.stringify(vt)+" of event "+JSON.stringify(k),Vt}return Promise.all(ne)}else if(k.type==="define_schema"){let ne=this.attributes.slice(0),vt;for(let Vt of k.attributes)ne.find(ii=>ii.name===Vt.name)||(ne.push(Vt),vt=!0);vt&&(et({table:n,database:c,attributes:ne,origin:"cluster"}),Cu.signalSchemaChange(new Lu.SchemaEventMsg(process.pid,gs.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return k.beginTxn?(oe=k,L(k,k),new Promise(ne=>{oe.resolve=ne})):L(k,k)});y&&(await Ne,Cu.signalUserChange(new Lu.UserEventMsg(process.pid))),k.onCommit&&(Ne?.then?Ne.then(k.onCommit):k.onCommit())}catch(Ee){Ke.error("error in subscription handler",Ee)}}}catch(D){Ke.error(D)}})(),this}static getResource(m,R,P){let A=super.getResource(m,R,P);if(m!=null)try{if(A.hasOwnProperty(Re))return A;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let C=!P?.async||i.cache?.get(m),y=In(R),L=y.getReadTxn();if(L?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return KR(m,R,{transaction:L},C,D=>{if(D?Iu(A,D):A[Re]=null,R.onlyIfCached&&R.noCacheStore){if(!A.doesExist())throw new Ks.ServerError("Entry is not cached",504)}else if(P?.ensureLoaded){let V=Yf(m,D,R,A);if(V)return y?.disregardReadTxn(),A[DR]=!0,MR(V,Q=>(Iu(A,Q),A))}return A})}catch(C){throw C.message.includes("Unable to serialize object")&&(C.message+=": "+JSON.stringify(m)),C}return A}ensureLoaded(){let m=Yf(this[we],this[Ys],this[me]);if(m)return this[DR]=!0,MR(m,R=>{this[Ys]=R,this[Re]=R.value,this[Cf]=R.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,jr=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");jr=jr||(d+f)/4,Kf()}static enableAuditing(m=!0){E=m,m&&QR(),at.audit=m}static coerceId(m){return m===""?null:Lf(m,W)}static async dropTable(){if(delete xe[c][n],c===o){for(let m of S)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));Cu.signalSchemaChange(new Lu.SchemaEventMsg(process.pid,gs.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(m,R){if(m&&typeof m=="object"&&!Array.isArray(m)&&m.url===""){let P=this.getRecordCount();return{recordCount:P.recordCount,estimatedRecordRange:P.estimatedRange,records:"./",name:n,database:c,attributes:S}}return super.get(m,R)}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}static allowRead(m,R){if(!m)return!1;let P=m.role.permission;if(P.super_user)return!0;if(P[n]?.read){let A=P[n].attribute_permissions;if(A){R||(R={});let C=R.select;if(C){let y=UR(A,"read");R.select=C.filter(L=>y[L])}else R.select=A.filter(y=>y.read).map(y=>y.attribute_name);return R}else return!0}}allowUpdate(m,R,P){if(!m)return!1;let A=m.role.permission;if(A.super_user)return!0;if(A[n]?.update){let C=A[n].attribute_permissions;if(C){let y=UR(C,"update");for(let L in R)if(!y[L])return!1;if(P)for(let L of C){let D=L.attribute_name;!L.update&&!(D in R)&&(R[D]=this.getProperty(D))}}else return!0}}allowCreate(m,R){return this.allowUpdate(m,{})}static allowCreate(m,R){if(!m)return!1;let P=m.role.permission;if(P.super_user)return!0;if(P[n]?.insert){let A=P[n].attribute_permissions;if(A){let C=UR(A,"insert");for(let y in R)if(!C[y])return!1}else return!0}}static allowDelete(m){if(!m)return!1;let R=m.role.permission;if(R.super_user||R[n]?.delete)return!0}update(m,R){if(!In(this[me]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let A;if(typeof m=="object"&&m)if(R){Object.isFrozen(m)&&(m=Object.assign({},m));for(let C in this[Re])m[C]===void 0&&(m[C]=void 0);this[Bt]=m}else A=this[Bt],A&&(m=Object.assign(A,m)),this[Bt]=A=m;return this._writeUpdate(this),this}invalidate(m){let R=this[me],P=this[we];In(this[me]).addWrite({key:P,store:i,invalidated:!0,entry:this[Ys],nodeName:this[me]?.nodeName,before:Pe.invalidate?.bind(this,R,P),beforeIntermediate:gt.invalidate?.bind(this,R,P),commit:(C,y)=>{if(y?.version>C)return;let L=null;for(let D in r)L||(L={}),L[D]=this.getProperty(D);p(P,L,this[Ys],C,yf,E,this[me],0,"invalidate")}})}static evict(m,R,P){let A=this.Source,C;if(!((N||E)&&(!R||(C=i.getEntry(m),!C||!R)||C.version!==P))){if(N){if(i.hasLock(m,C.version))return;let y;for(let L in r)y||(y={}),y[L]=R[L];if(y){p(m,y,C,P,If,null,null,0,null,!0);return}}if(i.ifVersion(P,()=>{Fu(m,R,null)}),E)p(m,null,C,P,If,null,null,0,null,!0);else return i.remove(m,P)}}lock(){throw new Error("Not yet implemented")}static operation(m,R){return m.table||=n,m.schema||=c,X0.operation(m,R)}async put(m){this.update(m,!0)}_writeUpdate(m,R){let P=this[me],A=In(P),C=this[we];if(C===void 0)throw new Error("Can not save record without an id");let y=this[Ys];this[LR]=!0;let L={key:C,store:i,entry:y,nodeName:P?.nodeName,validate:D=>{if(!m[K0]||ol(m)){if(this.validate(m),P?.source?m=Ua(m):(t&&m[t]!==C&&(m[t]=C),K&&(m[K.name]=K.type==="Date"?new Date(D):K.type==="String"?new Date(D).toISOString():D),w&&(y?.value?m[w.name]=y?.value[w.name]:m[w.name]=w.type==="Date"?new Date(D):w.type==="String"?new Date(D).toISOString():D),m=Ua(m)),m[Re])throw new Error("Can not assign a record with a record property");this[Re]=m}else A.removeWrite(L)},before:Pe.put&&(()=>Pe.put(P,C,m)),beforeIntermediate:gt.put&&(()=>gt.put(P,C,m)),commit:(D,V,Q)=>{Q&&(P&&V?.version>(P.lastModified||0)&&(P.lastModified=V.version),Iu(this,V));let oe=V?.value;this[LR]=!1,Ke.trace("Checking timestamp for put",C,V?.version>D,V?.version,D),!(V?.version>D)&&(Fu(C,oe,m),p(C,m,V,D,0,E,P,P.expiresAt||(d?d+Date.now():0)))}};A.addWrite(L)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[Is]){for await(let R of this.search(m))(await at.getResource(R[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Re]?this._writeDelete(m):!1}_writeDelete(m){let R=In(this[me]),P,A=this[we],C=this[me];return R.addWrite({key:A,store:i,resource:this,nodeName:C?.nodeName,before:Pe.delete?.bind(this,C,A),beforeIntermediate:gt.delete?.bind(this,C,A),commit:(y,L,D)=>{let V=L?.value;D&&(C&&L?.version>(C.lastModified||0)&&(C.lastModified=L.version),Iu(this,L)),!(L?.version>y)&&(Fu(this[we],V),Ke.trace("Write delete entry",A,y),E||h?(p(A,null,this[Ys],y,0,E,this[me],0,"delete"),E||Kf()):i.remove(this[we]))}}),!0}search(m){let R=In(this[me]);if(!m)throw new Error("No query provided");let P=m.reverse===!0,A=m.conditions;A?A.length===void 0&&(A=Array.from(A)):A=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[we]&&(A=[{attribute:null,comparator:"prefix",value:this[we]}].concat(A));for(let k of A){let Ee=k[0]??k.attribute,Ne=Ee==null?W:S.find(ne=>ne.name==Ee);if(Ne)Ne.type&&(k[1]===void 0?k.value=C(k.value,Ne):k[1]=C(k[1],Ne));else if(Ee!=null)throw(0,Ks.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function C(k,Ee){return Array.isArray(k)?k.map(Ne=>Lf(Ne,Ee)):Lf(k,Ee)}a(C,"coerceTypedValues"),A.length>1&&(A=(0,z0.sortBy)(A,k=>{if(k.estimated_count===void 0){let Ee=k.comparator||k.search_type;if(Ee===yu.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===yu.SEARCH_TYPES.CONTAINS||Ee===yu.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===yu.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=cte:k.estimated_count=ate}return k.estimated_count}));let y=R.getReadTxn();y.use();let L=m.select,D=A[0],V;if(!D)V=i.getRange(P?{end:!1,reverse:!0,transaction:y,lazy:L?.length<4}:{start:!1,transaction:y,lazy:L?.length<4}).map(({value:k})=>k?new Promise(Ee=>setImmediate(()=>Ee(k))):wf.SKIP);else{let k=gE(D,y,P,at,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=A.slice(1).map(AE);V=oe(k,Ee)}else{for(let Ne=1;Ne<A.length;Ne++){let ne=A[Ne],vt=gE(ne,y,P,at,m.allowFullScan);k=k.concat(vt)}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=()=>{y.done()};let Q=this[me];function oe(k,Ee){let Ne=Ee?.length,ne={transaction:y,lazy:Ne>0||L?.length<4,alwaysPrefetch:!0},vt=m.ensureLoaded!==!1;function Vt(ii,He){if(vt&&He!==void 0){let lr=!Q.onlyIfCached&&Yf(He,ii,Q,this);if(lr)return lr.then(xB=>Vt(xB))}let As=ii?.value;if(!As)return wf.SKIP;for(let lr=0;lr<Ne;lr++)if(!Ee[lr](As))return wf.SKIP;return As}return a(Vt,"processEntry"),k.map(ii=>KR(ii,Q,ne,!1,Vt))}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:S,audit:!0}),m||(m={});let R=x0(at,this[we]??null,function(y,L,D,V){try{let Q=L.getValue?.(i);this.send({id:y,timestamp:D,value:Q,version:L.version,type:L.type,beginTxn:V})}catch(Q){Ke.error(Q)}},m.startTime,this[Is]);m.crossThreads===!1&&(R.crossThreads=!1),m.supportsTransactions&&(R.supportsTransactions=!0);let P=this[we],A=m.previousCount;A>1e3&&(A=1e3);let C=m.startTime;if(this[Is]){if(C){if(A)throw new Ks.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:L}of u.getRange({start:C,exclusiveStart:!0})){let D=pr(L,i);if(D.tableId!==s)continue;let V=D.recordId;(P==null||Q0(P,V))&&R.send({id:V,timestamp:y,...D}),R.startTime=y}}else if(A){let y=[];for(let{key:L,value:D}of u.getRange({start:"z",end:!1,reverse:!0}))try{let V=pr(D);if(V.tableId!==s)continue;let Q=V.recordId;if(P==null||Q0(P,Q)){let oe=V.getValue(i);if(y.push({id:Q,timestamp:L,value:oe,version:V.version,type:V.type}),--A<=0)break}}catch(V){Ke.error("Error getting history entry",L,V)}for(let L=y.length;L>0;)R.send(y[--L]);y[0]&&(R.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:L,version:D,localTime:V}of i.getRange({start:P??!1,end:P==null?void 0:[P,J0.MAXIMUM_KEY],versions:!0}))L&&R.send({id:y,version:D,timestamp:V,value:L})}else{A&&!C&&(C=0);let y=this[Ys]?.localTime;if(Ke.trace("Subscription from",C,"from",P),C<y){let L=[],D=y;do{let V=u.get(D);if(V){m.omitCurrent=!0;let Q=pr(V),oe=Q.getValue(i);L.push({id:P,value:oe,timestamp:D,...Q}),D=Q.previousLocalTime}else break;A&&A--}while(D>C&&A!==0);for(let V=L.length;V>0;)R.send(L[--V]);R.startTime=y}!m.omitCurrent&&this.doesExist()&&R.send({id:P,version:this[Cf],timestamp:this[Ys]?.localTime,value:this})}return m.listener&&R.on("data",m.listener),R}doesExist(){return!!(this[Re]||this[LR])}async publish(m,R){this._writePublish(m,R)}_writePublish(m,R){let P=In(this[me]),A=this[we]||null,C=this[me];P.addWrite({key:A,store:i,entry:this[Ys],nodeName:C?.nodeName,validate:()=>{this.validate(m)},before:Pe.publish?.bind(this,C,A,m),beforeIntermediate:gt.publish?.bind(this,C,A,m),commit:(y,L,D)=>{L===void 0&&h&&!E&&Kf(),p(A,L?.value??null,L,L?.version||y,0,!0,C,L?.expiresAt,"message",!1,m)}})}validate(m){let R,P=a((A,C,y)=>{if(C.type&&A!=null)if(C.properties){typeof A!="object"&&(R||(R=[])).push(`Property ${y} must be an object${C.type?" ("+C.type+")":""}`);let L=C.properties;for(let D=0,V=L.length;D<V;D++){let Q=L[D],oe=P(A[Q.name],Q,y+"."+Q.name);oe&&(A[Q.name]=oe)}}else switch(C.type){case"Int":(typeof A!="number"||A>>0!==A)&&(R||(R=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof A!="number"||!(Math.floor(A)===A&&Math.abs(A)<=9007199254740992))&&(R||(R=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof A!="number"&&(R||(R=[])).push(`Property ${y} must be a number`);break;case"ID":typeof A=="string"||A?.length>0&&A.every?.(L=>typeof L=="string")||(R||(R=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof A!="string"&&(R||(R=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof A!="boolean"&&(R||(R=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(A instanceof Date)){if(typeof A=="string"||typeof A=="number")return new Date(A);(R||(R=[])).push(`Property ${y} must be a Date`)}break;case"Bytes":A instanceof Uint8Array||(R||(R=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(A)){if(C.elements)for(let L=0,D=A.length;L<D;L++){let V=A[L],Q=P(V,C.elements,y+"[*]");Q&&(A[L]=Q)}}else(R||(R=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}C.nullable===!1&&A==null&&(R||(R=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let A=0,C=S.length;A<C;A++){let y=S[A],L=P(m[y.name],y,y.name);L&&(m[y.name]=L)}if(R)throw new Ks.ClientError(R.join(". "))}getUpdatedTime(){return this[Cf]}wasLoadedFromSource(){return N?!!this[DR]:void 0}static async addAttributes(m){let R=S.slice(0);for(let P of m){if(!P.name)throw new Ks.ClientError("Attribute name is required");if(P.name.match(/[`/]/))throw new Ks.ClientError("Attribute names cannot include backticks or forward slashes");R.push(P)}return et({table:n,database:c,schemaDefined:_,attributes:R}),at.indexingOperation}static async removeAttributes(m){let R=S.filter(P=>!m.includes(P.name));return et({table:n,database:c,schemaDefined:_,attributes:R}),at.indexingOperation}static getRecordCount(m){let R=i.getStats().entryCount,P=5e3,A=1e3,C;R>P&&!m?.exactCount&&(C=A);let y=0;for(let{value:L}of i.getRange({start:!0,lazy:!0,limit:C}))L!=null&&y++;if(C){let L=y;y=0;for(let{value:vt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:C}))vt!=null&&y++;let D=C*2,V=(y+L)/D,Q=Math.pow((y-L+1)/C/2,2)+V*(1-V)/D,oe=Math.max(Math.sqrt(Q)*R,1),k=Math.round(V*R),Ee=Math.max(k-1.96*oe,0),Ne=Math.min(k+1.96*oe,R),ne=Math.pow(10,Math.round(Math.log10(oe)));return ne>k&&(ne=ne/10),y=Math.round(k/ne)*ne,{recordCount:y,estimatedRange:[Math.round(Ee),Math.round(Ne)]}}return{recordCount:y}}static updatedAttributes(){cl(this,this)}static async deleteHistory(m=0){let R;for(let{key:P,value:A}of u.getRange({start:0,end:m}))await bu(),pr(A).tableId===s&&(R=u.remove(P));await R}static async*getHistory(m=0,R=1/0){for(let{key:P,value:A}of u.getRange({start:m,end:R})){await bu();let C=pr(A);C.tableId===s&&(yield{id:C.recordId,localTime:P,version:C.version,type:C.type,value:C.getValue(i),user:C.user})}}static async getHistoryOfRecord(m){let R=[],P=i.getEntry(m);if(!P)return R;let A=P.localTime,C=0;do{await bu();let y=u.get(A);if(y){let L=pr(y);R.push({id:L.recordId,localTime:A,version:L.version,type:L.type,value:L.getValue(i),user:L.user}),A=L.previousLocalTime}else break}while(C<1e3&&A);return R.reverse()}static cleanup(){x?.remove()}}at.updatedAttributes();let qB=at.prototype;return qB[K0]=!0,d&&at.setTTLExpiration(d/1e3),B&&GB(),at;function Fu(J,m,R){let P;for(let A in r){let C=r[A],y=C.isIndexing,L=R?.[A],D=m?.[A];if(L===D&&!y)continue;P=!0;let V=(0,wu.getIndexedValues)(D);if(V){Y0&&C.prefetch(V.map(Q=>({key:Q,value:J})),W0);for(let Q=0,oe=V.length;Q<oe;Q++)C.remove(V[Q],J)}if(V=(0,wu.getIndexedValues)(L),V){Y0&&C.prefetch(V.map(Q=>({key:Q,value:J})),W0);for(let Q=0,oe=V.length;Q<oe;Q++)C.put(V[Q],J)}}return P}a(Fu,"updateIndices");function KR(J,m,R,P,A){let C=a(()=>{m?.transaction?.stale&&(m.transaction.stale=!1);let y=i.getEntry(J,R);return y&&m&&(y?.version>(m.lastModified||0)&&(m.lastModified=y.version),y?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=y.localTime)),A(y,J)},"whenPrefetched");return P?C():se>0?(se--,C()):new Promise((y,L)=>{se===0?(se--,i.prefetch([J],()=>{D(),V()})):(te.push(J),be.push(V),te.length>FB&&(se--,D()));function D(){if(te.length>0){let Q=be;i.prefetch(te,()=>{se===-1?D():se++;for(let oe of Q)oe()}),te=[],be=[],Pt>2&&Pt--}else se=Pt,Pt<HB&&Pt++}a(D,"prefetch");function V(){try{y(C())}catch(Q){L(Q)}}a(V,"load")})}a(KR,"loadLocalRecord");function Yf(J,m,R,P){if(N){let A;if(R.noCache?A=!0:(m?(!m.value||m.metadataFlags&(yf|If)||m.expiresAt&&m.expiresAt<Date.now())&&(A=!0):A=!0,Gr(!A,"cache-hit",n)),A){let C=WR(J,m,R).then(y=>(y?.value?.[Re]&&Ke.error("Can not assign a record with a record property"),R&&(y?.version>(R.lastModified||0)&&(R.lastModified=y.version),R.lastRefreshed=Date.now()),y));if(R?.onlyIfCached||m?.value&&P?.allowStaleWhileRevalidate?.(m,J)){if(C.catch(y=>Ke.warn(y)),R?.onlyIfCached&&!P.doesExist())throw new Ks.ServerError("Entry is not cached",504);return}else return C}}}a(Yf,"ensureLoadedFromSource");function In(J){let m=J?.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 R=m.next;if(!R)return m=m.next=new _i,m.lmdbDb=i,m;m=R}while(!0)}else return new _l}a(In,"txnForContext");async function WR(J,m,R){let P=m?.metadataFlags,A=m?.version,C,y;if(!i.attemptLock(J,A,()=>{clearTimeout(y);let Q=i.getEntry(J);!Q||!Q.value||Q.metadataFlags&(yf|If)?C(WR(J,i.getEntry(J),R)):C(Q)}))return new Promise(Q=>{C=Q,y=setTimeout(()=>{i.unlock(J,A)},_te)});let L=m?.value,D={requestContext:R,replacingRecord:L,replacingVersion:A,source:null,resourceCache:R?.resourceCache},V=R?.responseHeaders;return new Promise((Q,oe)=>{let k;MR(Ge(D,async Ee=>{let Ne=performance.now(),ne,vt,Vt;try{for(let lr of at.sources)if(lr.get&&(!lr.get.reliesOnPrototype||lr.prototype.get)&&(D.source=lr,ne=await lr.get(J,D),ne))break;Vt=P&yf;let He=D.lastModified||Vt&&A;vt=Vt||He>A||!L,He||(He=(0,wu.getNextMonotonicTime)());let As=performance.now()-Ne;if(Or(As,"cache-resolution",n),V&&V.append("Server-Timing",`cache-resolve;dur=${As.toFixed(2)}`),Ee.timestamp=He,d&&!D.expiresAt&&(D.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]!==J&&(ne[t]=J)}k=!0,Q({version:He,value:ne})}catch(He){He.message+=` while resolving record ${J} for ${n}`,L&&((He.code==="ECONNRESET"||He.code==="ECONNREFUSED"||He.code==="EAI_AGAIN")&&!R?.mustRevalidate||R?.staleIfError&&(He.statusCode===500||He.statusCode===502||He.statusCode===503||He.statusCode===504))?(Q({version:A,value:L}),Ke.trace(He.message,"(returned stale record)")):oe(He),D.transaction.abort();return}if(R?.noCacheStore){D.transaction.abort();return}In(D).addWrite({key:J,store:i,entry:m,nodeName:"source",commit:(He,As)=>{if(As?.version!==A)return;let lr=Fu(J,L,ne);ne?(gt.put?.(D,J,ne),p(J,ne,As,He,0,E&&vt||null,D,D.expiresAt,"put",!!Vt)):(gt.delete?.(D,J),E||h?p(J,null,As,He,0,E&&vt||null,D,0,"delete",!!Vt):i.remove(J,A))}})}),()=>{i.unlock(J,A)},Ee=>{i.unlock(J,A),k&&Ke.error("Error committing cache update",Ee)})})}a(WR,"getFromSource");function Kf(){if(jr!==YR&&(YR=jr,(0,Qi.getWorkerIndex)()===(0,Qi.getWorkerCount)()-1)){if(Hu&&clearTimeout(Hu),!jr)return;let J=new Date;J.setMonth(0),J.setDate(1),J.setHours(0),J.setMinutes(0),J.setSeconds(0);let m=Math.ceil((Date.now()-J.getTime())/jr)*jr+J.getTime(),R=a(P=>{Ke.trace(`Scheduled next cleanup scan at ${new Date(P)}ms`),Hu=setTimeout(()=>q=q.then(async()=>{if(R(Math.max(P+jr,Date.now())),i.rootStore.status!=="open"){clearTimeout(Hu);return}Ke.trace(`Starting cleanup scan for ${n}`);try{let A=0;for(let{key:C,value:y,version:L,expiresAt:D}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))y===null&&!E&&L+lte<Date.now()?i.remove(C,L):D&&D+f<Date.now()&&(at.evict(C,y,L),A++),await bu();Ke.trace(`Finished cleanup scan for ${n}, evicted ${A} entries`)}catch(A){Ke.trace(`Error in cleanup scan for ${n}:`,A)}}),Math.min(P-Date.now(),2147483647)).unref()},"startNextTimer");R(m)}}a(Kf,"scheduleCleanup");function QR(){x=u?.addDeleteRemovalCallback(s,J=>{let m=i.getEntry(J);m?.value===null&&i.remove(J,m.version)})}a(QR,"addDeleteRemoval");function GB(){(0,Qi.getWorkerIndex)()===0&&setInterval(async()=>{try{let J=B.name,m=r[J];if(!m)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:R}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let P=i.getEntry(R);P?.value?.[J]<Date.now()&&at.evict(R,P.value,P.version),await bu()}}catch(J){Ke.error("Error in evicting old records",J)}},ute).unref()}a(GB,"runRecordExpirationEviction")}function UR(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 W0(){}function dte(e){X0=e}function Lf(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"&&!fte.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Df.autoCast)(e)}function Q0(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 MR(e,t,r){return e?.then?e.then(t,r):t(e)}function Iu(e,t){e[Ys]=t,e[Re]=t?.value??null,e[Cf]=t?.version}var gs,wf,wu,z0,yu,Du,Ks,Cu,Lu,Ke,J0,Qi,Df,ote,X0,ate,cte,ute,lte,Y0,_te,Cf,K0,Ys,LR,DR,Nu,yf,If,Ufe,fte,bu,Jd=Te(()=>{gs=U(b()),wf=require("lmdb"),wu=U(hr()),z0=require("lodash");is();SE();yu=U(ze()),Du=U(X());$0();Ks=U(j()),Cu=U(on()),Lu=U(us());fe();fl();Ke=U(G());ll();di();J0=require("ordered-binary"),Qi=U(Ze());so();Df=U($());Fa();xn();ote=new Uint8Array(9);ote[8]=192;ate=1e8,cte=1e7,ute=6e4,lte=864e5;Du.initSync();Y0=Du.get(gs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),_te=1e4,Cf=Symbol.for("version"),K0=Symbol.for("incremental-update"),Ys=Symbol("entry"),LR=Symbol("is-saving"),DR=Symbol("loaded-from-source"),Nu={isNotification:!0,ensureLoaded:!1},yf=1,If=8,Ufe=(0,Df.convertToMS)(Du.get(gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Uf,"makeTable");a(UR,"attributesAsObject");a(W0,"noop");a(dte,"setServerUtilities");fte=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Lf,"coerceType");a(Q0,"isDescendantId");bu=a(()=>new Promise(setImmediate),"rest");a(MR,"when");a(Iu,"updateResource")});var Ce={};Qe(Ce,{database:()=>fc,databases:()=>xe,dropDatabase:()=>km,dropTableMeta:()=>Tte,getDatabases:()=>_s,getTables:()=>Ete,onUpdatedTable:()=>oR,readMetaDb:()=>Uu,resetDatabases:()=>hte,table:()=>et,tables:()=>mr});function Ete(){return Hf||_s(),mr||{}}function _s(){if(Hf)return xe;Hf=!0,fa=new Map;let e=(0,kt.getHdbBasePath)()&&(0,Fe.join)((0,kt.getHdbBasePath)(),wr.DATABASES_DIR_NAME),t=(0,kt.get)(wr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,kt.get)(wr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Ir.existsSync)(e)?e:(0,Fe.join)((0,kt.getHdbBasePath)(),wr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Ir.existsSync)(e))for(let r of(0,Ir.readdirSync)(e,{withFileTypes:!0})){let s=(0,Fe.basename)(r.name,".mdb");r.isFile()&&(0,Fe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Uu((0,Fe.join)(e,r.name),null,s)}if((0,Ir.existsSync)((0,da.getBaseSchemaPath)())){for(let r of(0,Ir.readdirSync)((0,da.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Fe.join)((0,da.getBaseSchemaPath)(),r.name),n=(0,Fe.join)((0,da.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Ir.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Fe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Fe.join)(n,i.name);Uu((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,Ir.existsSync)(n))for(let o of(0,Ir.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Fe.extname)(o.name).toLowerCase()===".mdb"&&Uu((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,Ir.existsSync)(u)&&Uu(u,o,r,null,!0)}}for(let r in xe){let s=fa.get(r);if(s){let n=xe[r];r.includes("delete")&&Xr.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Xr.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[Ff]}}return fa=null,xe}}function hte(){Hf=!1;for(let[,e]of ei)e.needsDeletion=!0;_s();for(let[e,t]of ei)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ei.delete(e));return xe}function Uu(e,t,r=BR,s,n){let i=new PR.default(e,!1);try{let o=ei.get(e);o?o.needsDeletion=!1:(o=(0,Pf.open)(i),ei.set(e,o));let c=new zi.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Mf.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,Ir.existsSync)(s)&&(i.path=s,_=(0,Pf.open)(i),_.isLegacy=!0):_=Tl(o));let l=tB(r),d=l[Ff],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[S,p]=E.toString().split("/");p===""?p=h.name:p||(p=S,S=t,h.name||(h.name=p,h.indexed=!h.is_hash_attribute)),d?.add(S);let g=f.get(S);g||f.set(S,g={attributes:[]}),(p==null||h.is_hash_attribute)&&(g.primary=h),p!=null&&g.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:S,primary:p}=h;if(!p){for(let x of S)if(x.is_hash_attribute||x.isPrimaryKey){p=x;break}if(!p){Xr.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(S)}`);continue}}let g=l[E],I={},N=[],Y,W,q=typeof p.audit=="boolean"?p.audit:(0,kt.get)(wr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=p.trackDeletes,K=p.expiration,B=p.eviction;if(g)I=g.indices,N=g.attributes,g.schemaVersion++;else{Y=p.tableId,Y?Y>=(u.get(_a)||0)&&u.putSync(_a,Y+1):(p.tableId=Y=u.get(_a),Y||(Y=1),u.putSync(_a,Y+1),u.putSync(p.key,p));let x=new zi.default(!p.is_hash_attribute,p.is_hash_attribute);W=Nl(o.openDB(p.key,x)),W.rootStore=o,W.tableId=Y}for(let x of S){x.attribute=x.name;try{if(!x.is_hash_attribute&&(x.indexed||x.attribute&&!x.name)){if(!I[x.name]){let be=new zi.default(!x.is_hash_attribute,x.is_hash_attribute);I[x.name]=o.openDB(x.key,be)}let te=N.find(be=>be.name===x.name);te?N.splice(N.indexOf(te),1,x):N.push(x)}}catch(te){Xr.error("Error trying to update attribute",x,N,I,te)}}if(!g){g=rB(l,E,Uf({primaryStore:W,auditStore:_,audit:q,expirationMS:K&&K*1e3,evictionMS:B&&B*1e3,trackDeletes:w,tableName:E,tableId:Y,primaryKey:p.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:I,attributes:S,schemaDefined:p.schemaDefined,dbisDB:u})),g.schemaVersion=1;for(let x of HR)x(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function tB(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)),fa&&!fa.has(e)){let r=new Set;t[Ff]=r,fa.set(e,r)}return t}function rB(e,t,r){return e[t]=r,r}function fc({database:e,table:t}){e||(e=BR),_s();let r=tB(e),s=(0,Fe.join)((0,kt.getHdbBasePath)(),wr.DATABASES_DIR_NAME),n=(0,kt.get)(wr.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,kt.get)(wr.CONFIG_PARAMS.STORAGE_PATH)||((0,Ir.existsSync)(s)?s:(0,Fe.join)((0,kt.getHdbBasePath)(),wr.LEGACY_DATABASES_DIR_NAME));let o=(0,Fe.join)(s,(i?t:e)+".mdb"),c=ei.get(o);if(!c){let u=new PR.default(o,!1);c=(0,Pf.open)(u),ei.set(o,c)}return c}async function km(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;ei.delete(n.path),n.status==="open"&&(await n.close(),await j0.remove(n.path))}if(e==="data"){for(let r in mr)delete mr[r];delete mr[Ff]}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=BR);let l=fc({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,S,p;u==null&&(u=!0);let g=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 I,N;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=Tl(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,kt.get)(wr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Xr.trace(`${e} table loading, opening primary store`);let K=new zi.default(!1,!0),B=e+"/",x=Nl(l.openDB(B,K));x.rootStore=l,p=l.dbisDb=l.openDB(Mf.INTERNAL_DBIS_NAME,g),x.tableId=p.get(_a),x.tableId||(x.tableId=1),p.putSync(_a,x.tableId+1),h.tableId=x.tableId,f=rB(d,e,Uf({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:p})),f.schemaVersion=1,I=!0,q(),p.put(B,h)}S=f.indices,p=p||(l.dbisDb=l.openDB(Mf.INTERNAL_DBIS_NAME,g)),f.dbisDB=p;let Y=[];for(let{key:w,value:K}of p.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){q(),I=!0,p.remove(w);let be=f.indices[B];be&&Y.push(be)}}let W=[];try{for(let w of i||[]){let K=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:K,configurable:!0});let B=p.get(K);if(w.isPrimaryKey){if(B=B||p.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),I=!0,q(),p.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<Mu.workerData?.restartNumber)&&(I=!0,q(),B=p.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<Mu.workerData?.restartNumber)&&(I=!0,w.lastIndexedKey=B?.lastIndexedKey||!1,w.indexingPID=process.pid,be.isIndexing=!0,Object.defineProperty(w,"dbi",{value:be}),W.push(w)),p.put(K,w)),S[w.name]=be}else x&&(I=!0,q(),p.put(K,w))}}finally{N&&N()}if(I&&(f.schemaVersion++,f.updatedAttributes()),Xr.trace(`${e} table loading, running index`),W.length>0||Y.length>0?f.indexingOperation=Ste(f,W,Y):I&&vf.signalSchemaChange(new Bf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let w of HR)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),Xr.trace(`${e} table loaded`),f;function q(){N||l.transactionSync(()=>({then(w){N=w}}))}a(q,"startTxn")}async function Ste(e,t,r){try{let s=e.schemaVersion;await vf.signalSchemaChange(new Bf.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,S=(0,Z0.getIndexedValues)(l[h]);if(S)for(let p=0,g=S.length;p<g;p++)E.dbi.put(S[p],_)}}),n.then(()=>u--,f=>{u--,Xr.error(f)}),Mu.workerData&&Mu.workerData.restartNumber!==eB.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>mte?await n:u>pte&&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 vf.signalSchemaChange(new Bf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Xr.error("Error in indexing",s)}}function Tte({table:e,database:t}){let r=fc({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 oR(e){HR.push(e)}var kt,Mf,Pf,Fe,Ir,da,zi,PR,wr,j0,vR,Z0,vf,Bf,Mu,Xr,eB,BR,Ff,mr,xe,_a,HR,Hf,ei,fa,mte,pte,fe=Te(()=>{kt=U(X()),Mf=U(ze()),Pf=require("lmdb"),Fe=require("path"),Ir=require("fs"),da=U(ve());Jd();zi=U(bl()),PR=U(Il()),wr=U(b()),j0=U(require("fs-extra")),vR=require("../../index"),Z0=U(hr()),vf=U(on()),Bf=U(us()),Mu=require("worker_threads"),Xr=U(G()),eB=U(Ze());so();Fa();BR="data",Ff=Symbol("defined-tables");(0,kt.initSync)();mr=Object.create(null),xe=Object.create(null);(0,vR._assignPackageExport)("databases",xe);(0,vR._assignPackageExport)("tables",mr);_a=Symbol.for("next-table-id"),HR=[],ei=new Map;a(Ete,"getTables");a(_s,"getDatabases");a(hte,"resetDatabases");a(Uu,"readMetaDb");a(tB,"ensureDB");a(rB,"setTable");a(fc,"database");a(km,"dropDatabase");a(et,"table");mte=1e3,pte=10;a(Ste,"runIndexing");a(Tte,"dropTableMeta");a(oR,"onUpdatedTable")});var $=T((xfe,mB)=>{"use strict";var ti=require("path"),aB=require("fs-extra"),cr=G(),sB=require("fs-extra"),qf=require("os"),Rte=require("net"),gte=require("recursive-iterator"),We=b(),Ate=Ig(),nB=require("papaparse"),Gf=require("moment"),{inspect:Ote}=require("util"),iB=require("is-number"),Gfe=require("lodash"),Nte=require("minimist"),bte=require("https"),yte=require("http"),{hdb_errors:xf}=j(),Ite=/^((\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)))$/,cB=require("util").promisify(setTimeout),wte=100,Cte=5,Lte="",Dte=4,oB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};mB.exports={isEmpty:Cr,isEmptyOrZeroLength:Ws,arrayHasEmptyValues:Pte,arrayHasEmptyOrZeroLengthValues:vte,buildFolderPath:Bte,isBoolean:uB,errorizeMessage:Ute,stripFileExtension:Fte,autoCast:qte,autoCastJSON:lB,autoCastJSONDeep:qR,removeDir:Gte,compareVersions:xte,isCompatibleDataVersion:kte,escapeRawValue:Vte,unescapeValue:$te,stringifyProps:Yte,timeoutPromise:Wte,isClusterOperation:zte,getClusterUser:Xte,checkGlobalSchemaTable:Jte,getHomeDir:dB,getPropsFilePath:Kte,promisifyPapaParse:jte,removeBOM:fB,createEventPromise:Zte,checkProcessRunning:ere,checkSchemaTableExist:tre,checkSchemaExists:EB,checkTableExists:hB,getStartOfTomorrowInSeconds:rre,getLimitKey:sre,isObject:Hte,isNotEmptyAndHasValue:Mte,autoCasterIsNumberCheck:_B,backtickASTSchemaItems:nre,isPortTaken:Qte,createForkArgs:ire,autoCastBoolean:ore,async_set_timeout:cB,getTableHashAttribute:are,doesSchemaExist:cre,doesTableExist:ure,stringifyObj:lre,ms_to_time:_re,changeExtension:dre,getEnvCliRootPath:GR,noBootFile:fre,httpRequest:Ere,transformReq:hre,convertToMS:mre,PACKAGE_ROOT:We.PACKAGE_ROOT};function Ute(e){return e instanceof Error?e:new Error(e)}a(Ute,"errorizeMessage");function Cr(e){return e==null}a(Cr,"isEmpty");function Mte(e){return!Cr(e)&&(e||e===0||e===""||uB(e))}a(Mte,"isNotEmptyAndHasValue");function Ws(e){return Cr(e)||e.length===0||e.size===0}a(Ws,"isEmptyOrZeroLength");function Pte(e){if(Cr(e))return!0;for(let t=0;t<e.length;t++)if(Cr(e[t]))return!0;return!1}a(Pte,"arrayHasEmptyValues");function vte(e){if(Ws(e))return!0;for(let t=0;t<e.length;t++)if(Ws(e[t]))return!0;return!1}a(vte,"arrayHasEmptyOrZeroLengthValues");function Bte(...e){try{return e.join(ti.sep)}catch{console.error(e)}}a(Bte,"buildFolderPath");function uB(e){return Cr(e)?!1:e===!0||e===!1}a(uB,"isBoolean");function Hte(e){return Cr(e)?!1:typeof e=="object"}a(Hte,"isObject");function Fte(e){return Ws(e)?Lte:e.slice(0,-Dte)}a(Fte,"stripFileExtension");function qte(e){return Cr(e)||e===""||typeof e!="string"?e:oB[e]!==void 0?oB[e]:_B(e)===!0?Number(e):Ite.test(e)?new Date(e):e}a(qte,"autoCast");function lB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(lB,"autoCastJSON");function qR(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=qR(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=qR(r);s!==r&&(e[t]=s)}return e}else return lB(e)}a(qR,"autoCastJSONDeep");function _B(e){if(e.startsWith("0.")&&iB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&iB(e))}a(_B,"autoCasterIsNumberCheck");async function Gte(e){if(Ws(e))throw new Error(`Directory path: ${e} does not exist`);try{await sB.emptyDir(e),await sB.remove(e)}catch(t){throw cr.error(`Error removing files in ${e} -- ${t}`),t}}a(Gte,"removeDir");function xte(e,t){if(Ws(e)){cr.info("Invalid current version sent as parameter.");return}if(Ws(t)){cr.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(xte,"compareVersions");function kte(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(kte,"isCompatibleDataVersion");function Vte(e){if(Cr(e))return e;let t=String(e);return t==="."?We.UNICODE_PERIOD:t===".."?We.UNICODE_PERIOD+We.UNICODE_PERIOD:t.replace(We.FORWARD_SLASH_REGEX,We.UNICODE_FORWARD_SLASH)}a(Vte,"escapeRawValue");function $te(e){if(Cr(e))return e;let t=String(e);return t===We.UNICODE_PERIOD?".":t===We.UNICODE_PERIOD+We.UNICODE_PERIOD?"..":String(e).replace(We.ESCAPED_FORWARD_SLASH_REGEX,"/")}a($te,"unescapeValue");function Yte(e,t){if(Cr(e))return cr.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+qf.EOL}!Ws(s)&&s[0]===";"?r+=" "+s+n+qf.EOL:Ws(s)||(r+=s+"="+n+qf.EOL)}catch{cr.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Yte,"stringifyProps");function dB(){let e;try{e=qf.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(dB,"getHomeDir");function Kte(){let e=ti.join(dB(),We.HDB_HOME_DIR_NAME,We.BOOT_PROPS_FILE_NAME);return aB.existsSync(e)||(e=ti.join(__dirname,"../","hdb_boot_properties.file")),e}a(Kte,"getPropsFilePath");function Wte(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Wte,"timeoutPromise");async function Qte(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=Rte.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Qte,"isPortTaken");function zte(e){try{return We.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){cr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(zte,"isClusterOperation");function Jte(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return xf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return xf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Jte,"checkGlobalSchemaTable");function Xte(e,t){if(Cr(t)){cr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Cr(e)||Ws(e)){cr.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){cr.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){cr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Xte,"getClusterUser");function jte(){nB.parsePromise=function(e,t,r){return new Promise(function(s,n){nB.parse(e,{header:!0,transformHeader:fB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(jte,"promisifyPapaParse");function fB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(fB,"removeBOM");function Zte(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;cr.info(`Got cluster status event response: ${Ote(n)}`);try{i.cancel()}catch{cr.error("Error trying to cancel timeout.")}s(n)})})}a(Zte,"createEventPromise");async function ere(e){let t=!0,r=0;do await cB(wte*r++),(await Ate.findPs(e)).length>0&&(t=!1);while(t&&r<Cte);if(t)throw new Error(`process ${e} was not started`)}a(ere,"checkProcessRunning");function tre(e,t){let r=EB(e);if(r)return r;let s=hB(e,t);if(s)return s}a(tre,"checkSchemaTableExist");function EB(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return xf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(EB,"checkSchemaExists");function hB(e,t){let{getDatabases:r}=(fe(),Z(Ce));if(!r()[e][t])return xf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(hB,"checkTableExists");function rre(){let e=Gf().utc().add(1,We.MOMENT_DAYS_TAG).startOf(We.MOMENT_DAYS_TAG).unix(),t=Gf().utc().unix();return e-t}a(rre,"getStartOfTomorrowInSeconds");function sre(){return Gf().utc().format("DD-MM-YYYY")}a(sre,"getLimitKey");function nre(e){try{let t=new gte(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){cr.error("Got an error back ticking items."),cr.error(t)}}a(nre,"backtickASTSchemaItems");function ire(e){return[e]}a(ire,"createForkArgs");function ore(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(ore,"autoCastBoolean");function are(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(are,"getTableHashAttribute");function cre(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a(cre,"doesSchemaExist");function ure(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a(ure,"doesTableExist");function lre(e){try{return JSON.stringify(e)}catch{return e}}a(lre,"stringifyObj");function _re(e){let t=Gf.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(_re,"ms_to_time");function dre(e,t){let r=ti.basename(e,ti.extname(e));return ti.join(ti.dirname(e),r+t)}a(dre,"changeExtension");function GR(){if(process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Nte(process.argv);if(e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(GR,"getEnvCliRootPath");var FR;function fre(){if(FR)return FR;let e=GR();GR()&&aB.pathExistsSync(ti.join(e,We.HDB_CONFIG_FILE))&&(FR=!0)}a(fre,"noBootFile");function Ere(e,t){let r;return e.protocol==="http:"?r=yte:r=bte,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(Ere,"httpRequest");function hre(e){if(!e.schema&&!e.database){e.schema=We.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(hre,"transformReq");function mre(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(mre,"convertToMS")});var AB=T((Vfe,gB)=>{"use strict";var Lr=X(),pre=Za(),ce=b(),Pu=ke(),Nn=require("path"),{PACKAGE_ROOT:Vf}=b(),pB=X(),kf=$(),Ea="/dev/null",Sre=Nn.join(Vf,"launchServiceScripts"),SB=Nn.join(Vf,"utility/scripts"),Tre=Nn.join(SB,ce.HDB_RESTART_SCRIPT),TB=Nn.resolve(Vf,"dependencies",`${process.platform}-${process.arch}`,Pu.NATS_BINARY_NAME);function RB(){let t=pre.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 kf.noBootFile()&&(s[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=kf.getEnvCliRootPath()),{name:ce.PROCESS_DESCRIPTORS.HDB,script:ce.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:Vf}}a(RB,"generateMainServerConfig");var Rre=9930;function gre(){Lr.initSync(!0);let e=Lr.get(ce.CONFIG_PARAMS.ROOTPATH),t=Nn.join(e,"clustering",Pu.NATS_CONFIG_FILES.HUB_SERVER),r=Nn.join(Lr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=pB.get(ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Pu.LOG_LEVEL_FLAGS[Lr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==Rre?"-"+s:""),script:TB,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 Lr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ea,i.error_file=Ea),i}a(gre,"generateNatsHubServerConfig");var Are=9940;function Ore(){Lr.initSync(!0);let e=Lr.get(ce.CONFIG_PARAMS.ROOTPATH),t=Nn.join(e,"clustering",Pu.NATS_CONFIG_FILES.LEAF_SERVER),r=Nn.join(Lr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=pB.get(ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Pu.LOG_LEVEL_FLAGS[Lr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==Are?"-"+s:""),script:TB,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 Lr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ea,i.error_file=Ea),i}a(Ore,"generateNatsLeafServerConfig");function Nre(){Lr.initSync();let e=Nn.join(Lr.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:Sre,autorestart:!1};return Lr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Ea,t.error_file=Ea),t}a(Nre,"generateClusteringUpgradeV4ServiceConfig");function bre(){let e={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.RESTART_HDB};return kf.noBootFile()&&(e[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=kf.getEnvCliRootPath()),{...{name:ce.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:SB},script:Tre}}a(bre,"generateRestart");function yre(){return{apps:[RB()]}}a(yre,"generateAllServiceConfigs");gB.exports={generateAllServiceConfigs:yre,generateMainServerConfig:RB,generateRestart:bre,generateNatsHubServerConfig:gre,generateNatsLeafServerConfig:Ore,generateClusteringUpgradeV4ServiceConfig:Nre}});var MS=T((Kfe,vB)=>{"use strict";var Ae=b(),Ire=$(),bn=IS(),vu=_t(),Qs=ke(),ri=AB(),$f=X(),si=G(),wre=un(),{startWorker:OB,onMessageFromWorkers:Cre}=Ze(),Lre=Bo(),Yfe=require("util"),Dre=require("child_process"),Ure=require("fs"),{execFile:Mre}=Dre,Se;vB.exports={enterPM2Mode:Pre,start:ni,stop:xR,reload:bB,restart:yB,list:kR,describe:wB,connect:yn,kill:qre,startAllServices:Gre,startService:VR,getUniqueServicesList:CB,restartAllServices:xre,isServiceRegistered:LB,reloadStopStart:DB,restartHdb:IB,deleteProcess:Hre,startClusteringProcesses:MB,startClusteringThreads:PB,isHdbRestartRunning:Fre,isClusteringRunning:Vre,stopClustering:kre,reloadClustering:$re};var Bu=!1;Cre(e=>{e.type==="restart"&&$f.initSync(!0)});function Pre(){Bu=!0}a(Pre,"enterPM2Mode");function yn(){return Se||(Se=require("pm2")),new Promise((e,t)=>{Se.connect((r,s)=>{si.setupConsoleLogging(),r&&t(r),e(s)})})}a(yn,"connect");var ur,vre=10,NB;function ni(e,t=!1){if(Bu)return Bre(e);let r=Mre(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=ur.indexOf(r);o>-1&&ur.splice(o,1),!NB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<vre&&(Ure.existsSync(bn.getHubConfigPath())?ni(e):(await bn.generateNatsConfig(!0),ni(e),await new Promise(c=>setTimeout(c,3e3)),await bn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await bn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=$f.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Qs.LOG_LEVEL_HIERARCHY[o]>=Qs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Qs.LOG_LEVELS.ERR||l===Qs.LOG_LEVELS.WRN?si.OUTPUTS.STDERR:si.OUTPUTS.STDOUT;si.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=Qs.LOG_LEVELS[f]}if(Qs.LOG_LEVEL_HIERARCHY[o]>=Qs.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Qs.LOG_LEVELS.ERR||l===Qs.LOG_LEVELS.WRN?si.OUTPUTS.STDERR:si.OUTPUTS.STDOUT;si.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),ur=[],!ur&&!t){let i=a(()=>{NB=!0,ur&&(ur.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}ur.push(r)}a(ni,"start");function Bre(e){return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.start(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(Bre,"startWithPM2");function xR(e){if(!Bu){for(let t of ur||[])t.name===e&&(ur.splice(ur.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.stop(e,async(s,n)=>{s&&(Se.disconnect(),r(s)),Se.delete(e,(i,o)=>{i&&(Se.disconnect(),r(s)),Se.disconnect(),t(o)})})})}a(xR,"stop");function bB(e){return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.reload(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(bB,"reload");function yB(e){if(!Bu)for(let t of ur||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.restart(e,(s,n)=>{Se.disconnect(),t(n)})})}a(yB,"restart");function Hre(e){return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.delete(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(Hre,"deleteProcess");async function IB(){await ni(ri.generateRestart())}a(IB,"restartHdb");async function Fre(){let e=await kR();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Fre,"isHdbRestartRunning");function kR(){return new Promise(async(e,t)=>{try{await yn()}catch(r){t(r)}Se.list((r,s)=>{r&&(Se.disconnect(),t(r)),Se.disconnect(),e(s)})})}a(kR,"list");function wB(e){return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.describe(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(wB,"describe");function qre(){if(!Bu){for(let e of ur||[])e.kill();ur=[];return}return new Promise(async(e,t)=>{try{await yn()}catch(r){t(r)}Se.killDaemon((r,s)=>{r&&(Se.disconnect(),t(r)),Se.disconnect(),e(s)})})}a(qre,"kill");async function Gre(){try{await MB(),await PB(),await ni(ri.generateAllServiceConfigs())}catch(e){throw Se?.disconnect(),e}}a(Gre,"startAllServices");async function VR(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ri.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ri.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ri.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ri.generateNatsHubServerConfig(),await ni(r,t),await bn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ri.generateNatsLeafServerConfig(),await ni(r,t),await bn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ri.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ni(r)}catch(r){throw Se?.disconnect(),r}}a(VR,"startService");async function CB(){try{let e=await kR(),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 Se?.disconnect(),e}}a(CB,"getUniqueServicesList");async function xre(e=[]){try{let t=!1,r=await CB();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 yB(o))}t&&await DB(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Se?.disconnect(),t}}a(xre,"restartAllServices");async function LB(e){if(ur?.find(r=>r.name===e))return!0;let t=await Lre.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(LB,"isServiceRegistered");async function DB(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?$f.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):$f.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await wB(e),s=Ire.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await xR(e),await VR(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await IB():await bB(e)}a(DB,"reloadStopStart");var UB;async function MB(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await VR(r,e)}}a(MB,"startClusteringProcesses");async function PB(){UB=OB(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await vu.createWorkQueueStream(Qs.WORK_QUEUE_CONSUMER_NAMES),await vu.updateIngestStreamConsumer(),await vu.updateLocalStreams();let e=await wre.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){si.info("Starting clustering upgrade 4.0.0 process"),OB(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(PB,"startClusteringThreads");async function kre(){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 UB.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await xR(t)}}a(kre,"stopClustering");async function Vre(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await LB(t)===!1)return!1}return!0}a(Vre,"isClusteringRunning");async function $re(){await bn.generateNatsConfig(!0),await vu.reloadNATSHub(),await vu.reloadNATSLeaf(),await bn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await bn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a($re,"reloadClustering")});var $R=MS(),BB=b();a(async function(){try{let t=await $R.describe(BB.PROCESS_DESCRIPTORS.HDB);for(let r of t)await $R.reload(r.pm_id);await $R.deleteProcess(BB.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
28
+ `+eR.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a($7,"getServerOptions");function Y7(){let e=Rs.get(Tn.OPERATIONSAPI_NETWORK_CORS),t=Rs.get(Tn.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===x7)&&(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(Y7,"getCORSOpts");function K7(){return Rs.get(Tn.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??q7}a(K7,"getHeaderTimeoutConfig")});var Jv=T((Pde,zv)=>{"use strict";var{decode:W7}=require("msgpackr"),{isMainThread:Q7,parentPort:z7,threadId:Ude}=require("worker_threads"),rR=_t(),Rn=ke(),J7=b(),Tu=G(),Gv=X(),kv=b();Ze();var X7=nn(),{recordAction:j7,recordActionBinary:Z7}=(xn(),Z(g_)),{publishToStream:eee}=rR,Mde={durable:Rn.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Rn.WORK_QUEUE_CONSUMER_NAMES.deliver_group},tee,ree,see,Vv,$v;zv.exports={initialize:Yv,workQueueListener:Qv,setSubscription:nee,setIgnoreOrigin:oee,getDatabaseSubscriptions:iee};async function Yv(){$v=!0,Tu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await rR.getNATSReferences();tee=e,ree=e.info.server_name,see=t,Vv=r}a(Yv,"initialize");var Ef=new Map;function nee(e,t,r){let s=Ef.get(e);s||Ef.set(e,s=new Map),s.set(t,r),$v||Yv().then(Qv)}a(nee,"setSubscription");function iee(){return Ef}a(iee,"getDatabaseSubscriptions");var Kv;function oee(e){Kv=e}a(oee,"setIgnoreOrigin");var Wv=100,xv=new Array(Wv),ff=0;async function Qv(){let t=await(await Vv.consumers.get(Rn.WORK_QUEUE_CONSUMER_NAMES.stream_name,Rn.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await xv[ff],xv[ff]=aee(r).catch(s=>{Tu.error(s)}),++ff>=Wv&&(ff=0)}a(Qv,"workQueueListener");Q7||z7.on("message",async e=>{let{type:t}=e;t===kv.ITC_EVENT_TYPES.SHUTDOWN&&rR.closeConnection()});async function aee(e){let t=W7(e.data);j7(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=Gv.get(J7.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Rn.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Rn.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(Rn.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!Kv),Z7(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(Rn.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;Tu.trace("processing message:",o,c,_,(l?"records: "+l.map(N=>N?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Tu.trace(`messageProcessor nats msg id: ${e.headers.get(Rn.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:A}=f||{},I=Ef.get(c)?.get(_);if(!I)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,I.send(t);else if(l.length===1&&!u)I.send({type:tR(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:A});else{let N=l.map((Y,Q)=>({type:tR(o),value:Y,expiresAt:E,id:d?.[Q],table:_}));for(;u;)N.push({type:tR(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;I.send({type:"transaction",writes:N,table:_,timestamp:p,onCommit:h,user:S,nodeName:A})}Gv.get(kv.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&eee(e.subject.split(".").slice(0,-1).join("."),X7.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){Tu.error(o)}e.ack()}a(aee,"messageProcessor");function tR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(tR,"convertOperation")});var cR={};Qe(cR,{disableNATS:()=>uee,publishToStream:()=>Sf,setNATSReplicator:()=>sR,setPublishToStream:()=>lee,setSubscription:()=>aR,start:()=>cee});function cee(){mf.default.get(pf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&dee()}function uee(e=!0){r0=e}function lee(e,t){Sf=e,aR=t}function dee(){if(r0||process.env._DISABLE_NATS)return;let e=ds(),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];sR(n,r,i)}}uR((r,s)=>{sR(r.tableName,r.databaseName,r),s&&n0(r)}),!Xv&&(Xv=!0)}function sR(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[we],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[we]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[we],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[we]})}static defineSchema(i){n0(i)}static subscribe(){let i=new ns;return aR(t,e,i),i}static subscribeOnThisThread(i){return i<_ee}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 hf(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=s0;return i}a(s,"getNATSTransaction")}function n0(e){let t=mf.default.get(pf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Sf(`${iR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,oR.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 jv,iR,oR,Zv,e0,mf,pf,t0,r0,Sf,aR,_ee,s0,Xv,hf,nR,i0=Te(()=>{fe();os();jv=M(_t()),iR=M(ke()),oR=M(nn());Pa();Zv=M(Jv()),e0=M(hr()),mf=M(X()),pf=M(b()),t0=M(G());a(cee,"start");a(uee,"disableNATS");Sf=jv.publishToStream,aR=Zv.setSubscription;a(lee,"setPublishToStream");_ee=2;a(dee,"assignReplicationSource");a(sR,"setNATSReplicator");a(n0,"publishSchema");hf=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=mf.default.get(pf.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||(t0.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(Sf(`${iR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,oR.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},nR=class extends hf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,e0.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};s0=new nR});async function a0({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await lR.getResource(e,{});n=new dR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await lR.get(e);i&&i.delete()}n=new Rf(e,t)}return n}function _R(){return Tf++,Tf>65500&&(Tf=1),Tf}var o0,ua,lR,Tf,Rf,dR,c0=Te(()=>{fe();Qc();o0=M(hr()),ua=M(G());di();lR=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(a0,"getSession");Tf=1;a(_R,"getNextMessageId");Rf=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(I=>I.topic===n);f&&(f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1));let E={search:u,async:!0,user:this.user,startTime:o,omitCurrent:i,isCollection:l,shallowWildcard:d,url:""};o&&(0,ua.trace)("Resuming subscription from",n,"from",o);let h=Qn.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,A=await Ge(E,async()=>{let I=await S.subscribe(E);if(!I)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!I[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let N of I)try{let Y;if(N.type&&N.type!=="put"&&N.type!=="delete"&&N.type!=="message"||s&&!s(N))continue;r?(N.topic=n,Y=this.needsAcknowledge(N)):(N.acknowledge?.(),Y=_R());let Q=N.id;Array.isArray(Q)&&(Q=$o(Q)),Q==null&&(Q=""),this.listener(p+"/"+Q,N.value,Y,t)}catch(Y){(0,ua.warn)(Y)}})(),I});return A.topic=n,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=_R();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;let i=Qn.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=[]}},dR=class extends Rf{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=_R(),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,ua.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,o0.getNextMonotonicTime)()),(0,ua.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),lR.put(this.sessionRecord)),t.qos}}});var ER={};Qe(ER,{start:()=>Eee});async function Eee({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}=_0(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;fee&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,d0.getSuperUser)());let{onMessage:u,onClose:_}=_0(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 _0(e,t,r,s,n){l0||(l0=!0,Ac(d=>{gf>0&&d.push({metric:"mqtt-connections",connections:gf,byThread:!0})}));let i;gf++;let o,c={protocolVersion:4},u=(0,Af.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){gf--,i||(i=!0,o?.disconnect(),xr(!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,fR.get)(gn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&u0.notify({username:s.username,status:gn.AUTH_AUDIT_STATUS.SUCCESS,type:gn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,fR.get)(gn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&u0.error({username:s.username,status:gn.AUTH_AUDIT_STATUS.FAILURE,type:gn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return xr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=a0({user:s,...d}),o=await o}catch(N){return(0,Jr.error)(N),xr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:N.code||5,returnCode:N.code||128})}xr(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((N,Y,Q,q)=>{try{let w=N.indexOf("/",1),K=w>0?N.slice(0,w):N;f({cmd:"publish",topic:N,payload:E(Y),messageId:Q||Math.floor(Math.random()*1e8),qos:q.qos},K)}catch(w){(0,Jr.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let N of d.subscriptions){let Y;try{Y=(await o.addSubscription(N,N.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 N of d.unsubscriptions)o.removeSubscription(N);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=jo(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,I;try{I=await o.publish(d,A)}catch(N){(0,Jr.warn)(N),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128,returnCode:128},d.topic)}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:I===!1?144:0,returnCode:I===!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(),xr(!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,Af.generate)(h,c);t(S),Or(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return zn(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Af,d0,fR,gn,Jr,u0,fee,l0,gf,f0=Te(()=>{Af=require("mqtt-packet");c0();d0=M(Gr());Yo();xn();Ur();fR=M(X()),gn=M(b()),Jr=M(G()),u0=(0,Jr.loggerWithTag)("auth-event"),fee=!0;a(Eee,"start");gf=0;a(_0,"onSocket")});var h0,E0,hR,m0=Te(()=>{h0=require("os"),E0=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,h0.platform)()!="win32"&&(hR=require("node-unix-socket").createReuseportFd)});var Nd={};Qe(Nd,{component_errors:()=>la,loadComponent:()=>Of,loadComponentDirectories:()=>b0,setErrorReporter:()=>See});function b0(e,t){t&&(pR=t),e&&(SR=e);let r=[];if((0,gs.existsSync)(mR)){let n=(0,gs.readdirSync)(mR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Rt.join)(mR,o);r.push(Of(c,pR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Of(s,pR,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{N0=!0})}function See(e){Au=e}async function Of(e,t,r,s,n,i){if(!S0.has(e)){S0.set(e,!0),n&&(SR=n);try{let o;s&&(la=new Map);let c=(0,Rt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,gs.existsSync)(c)?o=s?(0,O0.getConfigObj)():(0,T0.parseDocument)((0,gs.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=TR;let u=[],_=s;for(let l in o){let d=o[l];if(la.set(s?l:(0,Rt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let I=e,N;for(;!(0,gs.existsSync)(N=(0,Rt.join)(I,"node_modules",l));)if(I=(0,Rt.dirname)(I),I.length<(0,A0.getHdbBasePath)().length){N=null;break}if(N)f=await Of(N,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=pee[l];if(!f)continue;u.push(f);let h=a(I=>(I.origin=r,et(I)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,A=!p?.https&&p?.port;if(Ru.isMainThread&&(f=await f.startOnMainThread?.({server:ut,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,s&&p))for(let I of[A,S])try{if(+I&&!p0.includes(I)){let N=RR.get(gR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);N&&gu.default.warn("Session affinity is not recommended and may cause memory leaks"),(N||!hR)&&(p0.push(I),Pv(I,N))}}catch(N){console.error("Error listening on socket",I,N,l)}if(t.isWorker&&(f=await f.start?.({server:ut,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),SR.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,g0.handleHDBError)("Can not reference parent directories");let I=(0,Rt.join)(e,d.files).replace(/\\/g,"/"),N=I.indexOf("/*");if(N>-1&&d.files!==TR[l]?.files&&!(0,gs.existsSync)(I.slice(0,N)))throw new Error(`The path '${I.slice(0,N)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let Y of await(0,R0.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:Q,dirent:q}=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(q.isFile()){let x=await mee(Q);Ru.isMainThread&&await f.setupFile?.(x,B,Q,t),t.isWorker&&await f.handleFile?.(x,B,Q,t)}else Ru.isMainThread&&await f.setupDirectory?.(B,Q,t),t.isWorker&&await f.handleDirectory?.(B,Q,t)}catch(x){x.message=`Could not load ${q.isFile()?"file":"directory"} '${Q}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${x.message}`,Au?.(x),((0,_a.getWorkerIndex)()===0?console:gu.default).error(x),t.set(d.path||"/",new Ou(x)),la.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}`,Au?.(h),((0,_a.getWorkerIndex)()===0?console:gu.default).error(h),t.set(d.path||"/",new Ou(h),null,!0),la.set(s?l:(0,Rt.basename)(e),h.message)}}if(Ru.isMainThread&&!N0&&i&&(0,_a.watchDir)(e,async()=>b0()),o.extensionModule)return await Sl((0,Rt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;Au?.(new Error(l)),((0,_a.getWorkerIndex)()===0?console:gu.default).error(l),la.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}`,Au?.(o),t.set("",new Ou(o))}}}var gs,Rt,Ru,T0,RR,gR,R0,_a,gu,g0,A0,hee,O0,mee,mR,SR,N0,pR,la,pee,TR,p0,S0,Au,Ou,bd=Te(()=>{gs=require("fs"),Rt=require("path"),Ru=require("worker_threads"),T0=require("yaml"),RR=M(X()),gR=M(b());FA();kA();VA();GM();Nv();Cv();R0=M(require("fast-glob")),_a=M(Ze()),gu=M(G());LE();Ur();g0=M(j());os();fe();vv();A0=M(X()),hee=M(qv());md();i0();f0();O0=M(Er());m0();({readFile:mee}=gs.promises),mR=RR.get(gR.CONFIG_PARAMS.COMPONENTSROOT),SR=new Map,la=new Map;a(b0,"loadComponentDirectories");pee={REST:qd,rest:qd,graphqlSchema:CE,jsResource:UE,fastifyRoutes:zT,login:PE,static:JT,operationsApi:hee,customFunctions:{},http:{},clustering:cR,authentication:zc,mqtt:ER},TR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(TR,"static",{value:{files:"web/**"}});p0=[],S0=new Map;a(See,"setErrorReporter");a(Of,"loadComponent");Ou=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 w0=T((_fe,I0)=>{var{isMainThread:y0}=require("worker_threads"),{getTables:Tee}=(fe(),Z(Ce)),{loadComponentDirectories:Ree,loadComponent:gee}=(bd(),Z(Nd)),{resetResources:Aee}=(Qc(),Z(oU)),Oee=$S(),Nee=Er(),{dirname:bee}=require("path"),{getConnection:yee}=_t(),Iee=X(),wee=b(),AR=new Map;async function Cee(e=!1){!y0&&Iee.get(wee.CONFIG_PARAMS.CLUSTERING_ENABLED)&&yee();try{y0&&await Oee()}catch(s){console.error(s)}let t=Aee();Tee(),t.isWorker=e,await gee(bee(Nee.getConfigFilePath()),t,"hdb",!0,AR),await Ree(AR,t);let r=[];for(let[s]of AR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Cee,"loadRootComponents");I0.exports.loadRootComponents=Cee});var Ze=T((ffe,Zn)=>{"use strict";var{Worker:Lee,MessageChannel:Dee,parentPort:$s,isMainThread:IR,threadId:Uee,workerData:An}=require("worker_threads"),{PACKAGE_ROOT:Mee}=b(),{join:D0,isAbsolute:Pee,extname:vee}=require("path"),{server:U0}=(Ur(),Z(eo)),{watch:Bee,readdir:Hee}=require("fs/promises"),{totalmem:C0}=require("os"),yf=b(),Fee=X(),On=G(),{randomBytes:qee}=require("crypto"),{_assignPackageExport:Gee}=require("../../index"),xee=b(),kee=1024*1024,jn=[],Xr=[],Vee=50,wR=1e4,$ee="restart",M0="request_thread_info",P0="resource_report",v0="thread_info",B0="added-port",Yee="ack",OR;Gee("threads",Xr);Zn.exports={startWorker:NR,restartWorkers:LR,shutdownWorkers:Jee,workers:jn,setMonitorListener:nte,onMessageFromWorkers:Xee,onMessageByType:k0,broadcast:Zee,broadcastWithAcknowledgement:tte,setChildListenerByType:zee,getWorkerIndex:H0,getWorkerCount:F0,getTicketKeys:q0,setMainIsWorker:Wee,setTerminateTimeout:Kee,restartNumber:An?.restartNumber||1};Xr.onMessageByType=k0;Xr.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Xr.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var CR;function Kee(e){wR=e}a(Kee,"setTerminateTimeout");function H0(){return An?An.workerIndex:CR?0:void 0}a(H0,"getWorkerIndex");function F0(){return An?An.workerCount:CR?1:void 0}a(F0,"getWorkerCount");function Wee(e){CR=e}a(Wee,"setMainIsWorker");var Nf;function q0(){return Nf||(Nf=IR?qee(48):An.ticketKeys,Nf)}a(q0,"getTicketKeys");Object.defineProperty(U0,"workerIndex",{get(){return H0()}});Object.defineProperty(U0,"workerCount",{get(){return F0()}});var G0={[M0](e,t){rte(t)},[P0](e,t){ste(t,e)}};function NR(e,t={}){let r=process.constrainedMemory?.()||C0();r=Math.min(r,C0());let s=Math.max(Math.floor(r/kee/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[],o=[];for(let u of Xr){let _=new Dee;_.existingPort=u,i.push(_),o.push(_.port2)}vee(e)||(e+=".js");let c=new Lee(Pee(e)?e:D0(Mee,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:Zn.exports.restartNumber,ticketKeys:q0()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:B0,port:u,threadId:c.threadId},[u]);return If(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>NR(e,t),c.on("error",u=>{console.error("Worker error:",u),On.error("Worker error:",u)}),c.on("exit",u=>{jn.splice(jn.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Vee?(t.unexpectedRestarts=c.unexpectedRestarts+1,NR(e,t)):On.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{G0[u.type]?.(u,c)}),jn.push(c),ote(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(NR,"startWorker");var Qee=[yf.THREAD_TYPES.HTTP];async function LR(e=null,t=2,r=!0){if(IR){if(r){let{loadRootComponents:o}=w0();await o()}Zn.exports.restartNumber++,t<1&&(t=t*jn.length);let s=[],n=[];for(let o of jn.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;On.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Zn.exports.restartNumber,type:yf.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Qee.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),wR*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===xee.ITC_EVENT_TYPES.CHILD_STARTED&&(On.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");On.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}=_d();r&&(e==="http"||!e)&&Fee.get(yf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else $s.postMessage({type:$ee,workerType:e})}a(LR,"restartWorkers");function zee(e,t){G0[e]=t}a(zee,"setChildListenerByType");function Jee(e){return LR(e,1/0,!1)}a(Jee,"shutdownWorkers");var x0=[];function Xee(e){x0.push(e)}a(Xee,"onMessageFromWorkers");var bR=new Map;function k0(e,t){let r=bR.get(e);r||bR.set(e,r=[]),r.push(t)}a(k0,"onMessageByType");var jee=10;async function Zee(e){let t=0;for(let r of Xr)try{r.postMessage(e),t++>jee&&(t=0,await new Promise(setImmediate))}catch(s){On.error("Unable to send message to worker",s)}}a(Zee,"broadcast");var bf=new Map,ete=1;function tte(e){return new Promise(t=>{let r=0;for(let s of Xr)try{let n=ete++,i=a(()=>{bf.delete(n),--r===0&&t(),s!==$s&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,bf.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of bf)o.port===s&&o()})),s.postMessage(e),r++}catch(n){On.error("Unable to send message to worker",n)}r===0&&t()})}a(tte,"broadcastWithAcknowledgement");function rte(e){e.postMessage({type:v0,workers:V0()})}a(rte,"sendThreadInfo");function V0(){let e=Date.now();return jn.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(V0,"getChildWorkerInfo");function ste(e,t){e.resources=t,e.resources.updated=Date.now()}a(ste,"recordResourceReport");var yR;function nte(e){yR=e}a(nte,"setMonitorListener");var ite=1e3,L0=!1;function ote(){L0||(L0=!0,setInterval(()=>{for(let e of jn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}yR&&yR()},ite).unref())}a(ote,"startMonitoring");var ate=1e3;if($s){If($s);for(let e=0,t=An.addPorts.length;e<t;e++){let r=An.addPorts[e];r.threadId=An.addThreadIds[e],If(r)}setInterval(()=>{let e=process.memoryUsage();$s.postMessage({type:P0,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},ate).unref(),OR=a(()=>new Promise((e,t)=>{$s.on("message",r),$s.postMessage({type:M0});function r(s){s.type===v0&&($s.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else OR=V0;Zn.exports.getThreadInfo=OR;function If(e,t){Xr.push(e),e.on("message",r=>{if(r.type===B0)r.port.threadId=r.threadId,If(r.port);else if(r.type===Yee){let s=bf.get(r.id);s&&s()}else{for(let n of x0)n(r,e);let s=bR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){On.error(i)}}}).on("close",()=>{Xr.splice(Xr.indexOf(e),1)}).on("exit",()=>{Xr.splice(Xr.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(If,"addPort");if(IR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Hee(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(D0(s,i.name));try{for await(let{filename:i}of Bee(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await LR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");Zn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else $s.on("message",async e=>{let{type:t}=e;t===yf.ITC_EVENT_TYPES.SHUTDOWN&&(Zn.exports.restartNumber=e.restartNumber,$s.unref(),setTimeout(()=>{On.warn("Thread did not voluntarily terminate",Uee),process.exit(0)},wR).unref())})});function Y0(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;da||((0,bu.onMessageByType)($0,d=>{K0(d.path)}),(0,bu.onMessageByType)(cte,d=>{(0,Nu.trace)("confirming to proceed with txn",d.txnId)}),da=Object.create(null));let c=da[i]||(da[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=$o(t);let _=new UR(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 K0(e,t){if(!da)return;let r=da[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:DR,exclusiveStart:!0})){DR=n;let o=pr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=$o(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,Nu.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,Nu.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"},DR,!0)}function W0(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,bu.broadcast)({type:$0,path:n}),K0(n,!0)})}}var Nu,bu,$0,cte,da,Tfe,UR,DR,Q0=Te(()=>{Nu=M(G()),bu=M(Ze());Pa();Qc();io();$0="transaction",cte="transaction-await",Tfe=Buffer.alloc(4096);a(Y0,"addSubscription");UR=class extends ns{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"}}},DR=Date.now();a(K0,"notifyFromTransactionData");a(W0,"listenToCommits")});var DT={};Qe(DT,{coerceType:()=>Uf,makeTable:()=>vf,setServerUtilities:()=>mte,updateResource:()=>Cu});function vf(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=[]),W0(i,u);let S=rh(i,s,u),A=0,I,N,Y,Q={},q=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,Pt=2,Pe={},gt={},Zr=864e5,QR,qu,xB=10,kB=6;E&&XR();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,R){R&&(this.sourceOptions=R,(R.expiration||R.eviction||R.scanInterval)&&this.setTTLExpiration(R)),R?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),N=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let D=a(y=>{let U=this.sources.slice(0,-1);if(U=U.filter(L=>L[y]&&(!L[y].reliesOnPrototype||L.prototype[y])),U.length>0)if(U.length===1){let L=U[0];return(V,z,oe)=>{if(V?.source!==L)return L[y](z,oe,V)}}else return(L,V,z)=>{let oe=[];for(let k of U){if(L?.source===k)break;oe.push(k[y](V,z,L))}return Promise.all(oe)}},"getApplyToIntermediateSource"),g=this.sources[this.sources.length-1],C=a(y=>{if(g[y]&&(!g[y].reliesOnPrototype||g.prototype[y]))return(U,L,V)=>{if(!U?.source)return g[y](L,V,U)}},"getApplyToCanonicalSource");return Pe={put:C("put"),delete:C("delete"),publish:C("publish")},gt={put:D("put"),delete:D("delete"),publish:D("publish"),invalidate:D("invalidate")},(async()=>{let y=!1,U=a(async(L,V)=>{let z=L.value,oe=L.table?xe[c][L.table]:at;if(c===As.SYSTEM_SCHEMA_NAME&&(L.table===As.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||L.table===As.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(y=!0),L.id===void 0&&(L.id=z[oe.primaryKey],L.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(L));L.source=m;let k=await oe.getResource(L.id,V,yu);switch(L.type){case"put":return k._writeUpdate(z,yu);case"delete":return k._writeDelete(yu);case"publish":return k._writePublish(z,yu);case"invalidate":return k.invalidate(yu);default:Ke.error("Unknown operation",L.type,L.id)}},"writeUpdate");try{let L=m.subscribe;L&&h==null&&(h=!0);let V=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Qi.getWorkerIndex)()):(0,Qi.getWorkerIndex)()===0,z=L&&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)){Ke.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 vt of k.writes)try{ne.push(U(vt,k))}catch(Vt){throw Vt.message+=" writing "+JSON.stringify(vt)+" of event "+JSON.stringify(k),Vt}return Promise.all(ne)}else if(k.type==="define_schema"){let ne=this.attributes.slice(0),vt;for(let Vt of k.attributes)ne.find(ii=>ii.name===Vt.name)||(ne.push(Vt),vt=!0);vt&&(et({table:n,database:c,attributes:ne,origin:"cluster"}),Du.signalSchemaChange(new Uu.SchemaEventMsg(process.pid,As.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return k.beginTxn?(oe=k,U(k,k),new Promise(ne=>{oe.resolve=ne})):U(k,k)});y&&(await Ne,Du.signalUserChange(new Uu.UserEventMsg(process.pid))),k.onCommit&&(Ne?.then?Ne.then(k.onCommit):k.onCommit())}catch(Ee){Ke.error("error in subscription handler",Ee)}}}catch(L){Ke.error(L)}})(),this}static getResource(m,R,D){let g=super.getResource(m,R,D);if(m!=null){pa(m);try{if(g.hasOwnProperty(Re))return g;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let C=!D?.async||i.cache?.get(m),y=In(R),U=y.getReadTxn();if(U?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return zR(m,R,{transaction:U},C,L=>{if(L?Cu(g,L):g[Re]=null,R.onlyIfCached&&R.noCacheStore){if(!g.doesExist())throw new Ks.ServerError("Entry is not cached",504)}else if(D?.ensureLoaded){let V=Qf(m,L,R,g);if(V)return y?.disregardReadTxn(),g[PR]=!0,BR(V,z=>(Cu(g,z),g))}return g})}catch(C){throw C.message.includes("Unable to serialize object")&&(C.message+=": "+JSON.stringify(m)),C}}return g}ensureLoaded(){let m=Qf(this[we],this[Ys],this[me]);if(m)return this[PR]=!0,BR(m,R=>{this[Ys]=R,this[Re]=R.value,this[Df]=R.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,Zr=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");Zr=Zr||(d+f)/4,zf()}static enableAuditing(m=!0){E=m,m&&XR(),at.audit=m}static coerceId(m){return m===""?null:Uf(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));Du.signalSchemaChange(new Uu.SchemaEventMsg(process.pid,As.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(m,R){if(m&&typeof m=="object"&&!Array.isArray(m)&&m.url===""){let D=this.getRecordCount();return{recordCount:D.recordCount,estimatedRecordRange:D.estimatedRange,records:"./",name:n,database:c,attributes:p}}return super.get(m,R)}get(m){if(typeof m=="string")return this.getProperty(m);if(this[ws])return this.search(m);if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[me]?.returnNonexistent)return this}static allowRead(m,R){if(!m)return!1;let D=m.role.permission;if(D.super_user)return!0;if(D[n]?.read){let g=D[n].attribute_permissions;if(g){R||(R={});let C=R.select;if(C){let y=vR(g,"read");R.select=C.filter(U=>y[U])}else R.select=g.filter(y=>y.read).map(y=>y.attribute_name);return R}else return!0}}allowUpdate(m,R,D){if(!m)return!1;let g=m.role.permission;if(g.super_user)return!0;if(g[n]?.update){let C=g[n].attribute_permissions;if(C){let y=vR(C,"update");for(let U in R)if(!y[U])return!1;if(D)for(let U of C){let L=U.attribute_name;!U.update&&!(L in R)&&(R[L]=this.getProperty(L))}}else return!0}}allowCreate(m,R){return this.allowUpdate(m,{})}static allowCreate(m,R){if(!m)return!1;let D=m.role.permission;if(D.super_user)return!0;if(D[n]?.insert){let g=D[n].attribute_permissions;if(g){let C=vR(g,"insert");for(let y in R)if(!C[y])return!1}else return!0}}static allowDelete(m){if(!m)return!1;let R=m.role.permission;if(R.super_user||R[n]?.delete)return!0}update(m,R){if(!In(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(R){Object.isFrozen(m)&&(m=Object.assign({},m));for(let C in this[Re])m[C]===void 0&&(m[C]=void 0);this[Bt]=m}else g=this[Bt],g&&(m=Object.assign(g,m)),this[Bt]=g=m;return this._writeUpdate(this),this}invalidate(m){let R=this[me],D=this[we];pa(D),In(this[me]).addWrite({key:D,store:i,invalidated:!0,entry:this[Ys],nodeName:this[me]?.nodeName,before:Pe.invalidate?.bind(this,R,D),beforeIntermediate:gt.invalidate?.bind(this,R,D),commit:(C,y)=>{if(y?.version>C)return;let U=null;for(let L in r)U||(U={}),U[L]=this.getProperty(L);S(D,U,this[Ys],C,wf,E,this[me],0,"invalidate")}})}static evict(m,R,D){let g=this.Source,C;if(!((N||E)&&(!R||(C=i.getEntry(m),!C||!R)||C.version!==D))){if(N){if(i.hasLock(m,C.version))return;let y;for(let U in r)y||(y={}),y[U]=R[U];if(y){S(m,y,C,D,Cf,null,null,0,null,!0);return}}if(i.ifVersion(D,()=>{Gu(m,R,null)}),E)S(m,null,C,D,Cf,null,null,0,null,!0);else return i.remove(m,D)}}lock(){throw new Error("Not yet implemented")}static operation(m,R){return m.table||=n,m.schema||=c,tB.operation(m,R)}async put(m){this.update(m,!0)}_writeUpdate(m,R){let D=this[me],g=In(D),C=this[we];pa(C);let y=this[Ys];this[MR]=!0;let U={key:C,store:i,entry:y,nodeName:D?.nodeName,validate:L=>{if(!m[J0]||cl(m)){if(this.validate(m),D?.source?m=va(m):(t&&m[t]!==C&&(m[t]=C),K&&(m[K.name]=K.type==="Date"?new Date(L):K.type==="String"?new Date(L).toISOString():L),w&&(y?.value?m[w.name]=y?.value[w.name]:m[w.name]=w.type==="Date"?new Date(L):w.type==="String"?new Date(L).toISOString():L),m=va(m)),m[Re])throw new Error("Can not assign a record with a record property");this[Re]=m}else g.removeWrite(U)},before:Pe.put&&(()=>Pe.put(D,C,m)),beforeIntermediate:gt.put&&(()=>gt.put(D,C,m)),commit:(L,V,z)=>{z&&(D&&V?.version>(D.lastModified||0)&&(D.lastModified=V.version),Cu(this,V));let oe=V?.value;this[MR]=!1,Ke.trace("Checking timestamp for put",C,V?.version>L,V?.version,L),!(V?.version>L)&&(Gu(C,oe,m),S(C,m,V,L,0,E,D,D.expiresAt||(d?d+Date.now():0)))}};g.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[ws]){for await(let R of this.search(m))(await at.getResource(R[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Re]?this._writeDelete(m):!1}_writeDelete(m){let R=In(this[me]),D=this[we];pa(D);let g=this[me];return R.addWrite({key:D,store:i,resource:this,nodeName:g?.nodeName,before:Pe.delete?.bind(this,g,D),beforeIntermediate:gt.delete?.bind(this,g,D),commit:(C,y,U)=>{let L=y?.value;U&&(g&&y?.version>(g.lastModified||0)&&(g.lastModified=y.version),Cu(this,y)),!(y?.version>C)&&(Gu(this[we],L),Ke.trace("Write delete entry",D,C),E||h?(S(D,null,this[Ys],C,0,E,this[me],0,"delete"),E||zf()):i.remove(this[we]))}}),!0}search(m){let R=In(this[me]);if(!m)throw new Error("No query provided");let D=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[we]&&(g=[{attribute:null,comparator:"prefix",value:this[we]}].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=C(k.value,Ne):k[1]=C(k[1],Ne));else if(Ee!=null)throw(0,Ks.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function C(k,Ee){return Array.isArray(k)?k.map(Ne=>Uf(Ne,Ee)):Uf(k,Ee)}a(C,"coerceTypedValues"),g.length>1&&(g=(0,eB.sortBy)(g,k=>{if(k.estimated_count===void 0){let Ee=k.comparator||k.search_type;if(Ee===wu.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===wu.SEARCH_TYPES.CONTAINS||Ee===wu.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===wu.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=_te:k.estimated_count=lte}return k.estimated_count}));let y=R.getReadTxn();y.use();let U=m.select,L=g[0],V;if(!L)V=i.getRange(D?{end:!1,reverse:!0,transaction:y,lazy:U?.length<4}:{start:!1,transaction:y,lazy:U?.length<4}).map(({value:k})=>k?new Promise(Ee=>setImmediate(()=>Ee(k))):Lf.SKIP);else{let k=OE(L,y,D,at,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=g.slice(1).map(NE);V=oe(k,Ee)}else{for(let Ne=1;Ne<g.length;Ne++){let ne=g[Ne],vt=OE(ne,y,D,at,m.allowFullScan);k=k.concat(vt)}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,y.done()};let z=this[me];function oe(k,Ee){let Ne=Ee?.length,ne={transaction:y,lazy:Ne>0||U?.length<4,alwaysPrefetch:!0},vt=m.ensureLoaded!==!1;function Vt(ii,He){if(vt&&He!==void 0){let lr=!z.onlyIfCached&&Qf(He,ii,z,this);if(lr)return lr.then(YB=>Vt(YB))}let Os=ii?.value;if(!Os)return Lf.SKIP;for(let lr=0;lr<Ne;lr++)if(!Ee[lr](Os))return Lf.SKIP;return Os}return a(Vt,"processEntry"),k.map(ii=>zR(ii,z,ne,!1,Vt))}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 R=Y0(at,this[we]??null,function(y,U,L,V){try{let z=U.getValue?.(i);this.send({id:y,timestamp:L,value:z,version:U.version,type:U.type,beginTxn:V})}catch(z){Ke.error(z)}},m.startTime,this[ws]);m.crossThreads===!1&&(R.crossThreads=!1),m.supportsTransactions&&(R.supportsTransactions=!0);let D=this[we],g=m.previousCount;g>1e3&&(g=1e3);let C=m.startTime;if(this[ws]){if(C){if(g)throw new Ks.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:U}of u.getRange({start:C,exclusiveStart:!0})){let L=pr(U,i);if(L.tableId!==s)continue;let V=L.recordId;(D==null||Z0(D,V))&&R.send({id:V,timestamp:y,...L}),R.startTime=y}}else if(g){let y=[];for(let{key:U,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let V=pr(L);if(V.tableId!==s)continue;let z=V.recordId;if(D==null||Z0(D,z)){let oe=V.getValue(i);if(y.push({id:z,timestamp:U,value:oe,version:V.version,type:V.type}),--g<=0)break}}catch(V){Ke.error("Error getting history entry",U,V)}for(let U=y.length;U>0;)R.send(y[--U]);y[0]&&(R.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:U,version:L,localTime:V}of i.getRange({start:D??!1,end:D==null?void 0:[D,Mf.MAXIMUM_KEY],versions:!0}))U&&R.send({id:y,version:L,timestamp:V,value:U})}else{g&&!C&&(C=0);let y=this[Ys]?.localTime;if(Ke.trace("Subscription from",C,"from",D),C<y){let U=[],L=y;do{let V=u.get(L);if(V){m.omitCurrent=!0;let z=pr(V),oe=z.getValue(i);U.push({id:D,value:oe,timestamp:L,...z}),L=z.previousLocalTime}else break;g&&g--}while(L>C&&g!==0);for(let V=U.length;V>0;)R.send(U[--V]);R.startTime=y}!m.omitCurrent&&this.doesExist()&&R.send({id:D,version:this[Df],timestamp:this[Ys]?.localTime,value:this})}return m.listener&&R.on("data",m.listener),R}doesExist(){return!!(this[Re]||this[MR])}async publish(m,R){this._writePublish(m,R)}_writePublish(m,R){let D=In(this[me]),g=this[we]||null;pa(g);let C=this[me];D.addWrite({key:g,store:i,entry:this[Ys],nodeName:C?.nodeName,validate:()=>{this.validate(m)},before:Pe.publish?.bind(this,C,g,m),beforeIntermediate:gt.publish?.bind(this,C,g,m),commit:(y,U,L)=>{U===void 0&&h&&!E&&zf(),S(g,U?.value??null,U,U?.version||y,0,!0,C,U?.expiresAt,"message",!1,m)}})}validate(m){let R,D=a((g,C,y)=>{if(C.type&&g!=null)if(C.properties){typeof g!="object"&&(R||(R=[])).push(`Property ${y} must be an object${C.type?" ("+C.type+")":""}`);let U=C.properties;for(let L=0,V=U.length;L<V;L++){let z=U[L],oe=D(g[z.name],z,y+"."+z.name);oe&&(g[z.name]=oe)}}else switch(C.type){case"Int":(typeof g!="number"||g>>0!==g)&&(R||(R=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof g!="number"||!(Math.floor(g)===g&&Math.abs(g)<=9007199254740992))&&(R||(R=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof g!="number"&&(R||(R=[])).push(`Property ${y} must be a number`);break;case"ID":typeof g=="string"||g?.length>0&&g.every?.(U=>typeof U=="string")||(R||(R=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof g!="string"&&(R||(R=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof g!="boolean"&&(R||(R=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(g instanceof Date)){if(typeof g=="string"||typeof g=="number")return new Date(g);(R||(R=[])).push(`Property ${y} must be a Date`)}break;case"Bytes":g instanceof Uint8Array||(R||(R=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(g)){if(C.elements)for(let U=0,L=g.length;U<L;U++){let V=g[U],z=D(V,C.elements,y+"[*]");z&&(g[U]=z)}}else(R||(R=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}C.nullable===!1&&g==null&&(R||(R=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let g=0,C=p.length;g<C;g++){let y=p[g],U=D(m[y.name],y,y.name);U&&(m[y.name]=U)}if(R)throw new Ks.ClientError(R.join(". "))}getUpdatedTime(){return this[Df]}wasLoadedFromSource(){return N?!!this[PR]:void 0}static async addAttributes(m){let R=p.slice(0);for(let D of m){if(!D.name)throw new Ks.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Ks.ClientError("Attribute names cannot include backticks or forward slashes");R.push(D)}return et({table:n,database:c,schemaDefined:_,attributes:R}),at.indexingOperation}static async removeAttributes(m){let R=p.filter(D=>!m.includes(D.name));return et({table:n,database:c,schemaDefined:_,attributes:R}),at.indexingOperation}static getRecordCount(m){let R=i.getStats().entryCount,D=5e3,g=1e3,C;R>D&&!m?.exactCount&&(C=g);let y=0;for(let{value:U}of i.getRange({start:!0,lazy:!0,limit:C}))U!=null&&y++;if(C){let U=y;y=0;for(let{value:vt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:C}))vt!=null&&y++;let L=C*2,V=(y+U)/L,z=Math.pow((y-U+1)/C/2,2)+V*(1-V)/L,oe=Math.max(Math.sqrt(z)*R,1),k=Math.round(V*R),Ee=Math.max(k-1.96*oe,0),Ne=Math.min(k+1.96*oe,R),ne=Math.pow(10,Math.round(Math.log10(oe)));return ne>k&&(ne=ne/10),y=Math.round(k/ne)*ne,{recordCount:y,estimatedRange:[Math.round(Ee),Math.round(Ne)]}}return{recordCount:y}}static updatedAttributes(){ll(this,this)}static async deleteHistory(m=0){let R;for(let{key:D,value:g}of u.getRange({start:0,end:m}))await Iu(),pr(g).tableId===s&&(R=u.remove(D));await R}static async*getHistory(m=0,R=1/0){for(let{key:D,value:g}of u.getRange({start:m,end:R})){await Iu();let C=pr(g);C.tableId===s&&(yield{id:C.recordId,localTime:D,version:C.version,type:C.type,value:C.getValue(i),user:C.user})}}static async getHistoryOfRecord(m){let R=[],D=i.getEntry(m);if(!D)return R;let g=D.localTime,C=0;do{await Iu();let y=u.get(g);if(y){let U=pr(y);R.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(C<1e3&&g);return R.reverse()}static cleanup(){x?.remove()}}at.updatedAttributes();let VB=at.prototype;return VB[J0]=!0,d&&at.setTTLExpiration(d/1e3),B&&$B(),at;function Gu(W,m,R){let D;for(let g in r){let C=r[g],y=C.isIndexing,U=R?.[g],L=m?.[g];if(U===L&&!y)continue;D=!0;let V=(0,Lu.getIndexedValues)(L);if(V){z0&&C.prefetch(V.map(z=>({key:z,value:W})),j0);for(let z=0,oe=V.length;z<oe;z++)C.remove(V[z],W)}if(V=(0,Lu.getIndexedValues)(U),V){z0&&C.prefetch(V.map(z=>({key:z,value:W})),j0);for(let z=0,oe=V.length;z<oe;z++)C.put(V[z],W)}}return D}a(Gu,"updateIndices");function pa(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>X0)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,Mf.writeKey)(W,hte,0)>X0)throw new Error("Primary key size is too large: "+W.length);return!0}a(pa,"checkValidId");function zR(W,m,R,D,g){let C=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),R.transaction?.isDone)return g(null,W);let y=i.getEntry(W,R);return y&&m&&(y?.version>(m.lastModified||0)&&(m.lastModified=y.version),y?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=y.localTime)),g(y,W)},"whenPrefetched");return D?C():se>0?(se--,C()):new Promise((y,U)=>{se===0?(se--,i.prefetch([W],()=>{L(),V()})):(te.push(W),be.push(V),te.length>kB&&(se--,L()));function L(){if(te.length>0){let z=be;i.prefetch(te,()=>{se===-1?L():se++;for(let oe of z)oe()}),te=[],be=[],Pt>2&&Pt--}else se=Pt,Pt<xB&&Pt++}a(L,"prefetch");function V(){try{y(C())}catch(z){U(z)}}a(V,"load")})}a(zR,"loadLocalRecord");function Qf(W,m,R,D){if(N){let g;if(R.noCache?g=!0:(m?(!m.value||m.metadataFlags&(wf|Cf)||m.expiresAt&&m.expiresAt<Date.now())&&(g=!0):g=!0,xr(!g,"cache-hit",n)),g){let C=JR(W,m,R).then(y=>(y?.value?.[Re]&&Ke.error("Can not assign a record with a record property"),R&&(y?.version>(R.lastModified||0)&&(R.lastModified=y.version),R.lastRefreshed=Date.now()),y));if(R?.onlyIfCached||m?.value&&D?.allowStaleWhileRevalidate?.(m,W)){if(C.catch(y=>Ke.warn(y)),R?.onlyIfCached&&!D.doesExist())throw new Ks.ServerError("Entry is not cached",504);return}else return C}}}a(Qf,"ensureLoadedFromSource");function In(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 R=m.next;if(!R)return m=m.next=new _i,m.lmdbDb=i,m;m=R}while(!0)}else return new fl}a(In,"txnForContext");async function JR(W,m,R){let D=m?.metadataFlags,g=m?.version,C,y;if(!i.attemptLock(W,g,()=>{clearTimeout(y);let z=i.getEntry(W);!z||!z.value||z.metadataFlags&(wf|Cf)?C(JR(W,i.getEntry(W),R)):C(z)}))return new Promise(z=>{C=z,y=setTimeout(()=>{i.unlock(W,g)},Ete)});let U=m?.value,L={requestContext:R,replacingRecord:U,replacingVersion:g,source:null,resourceCache:R?.resourceCache},V=R?.responseHeaders;return new Promise((z,oe)=>{let k;BR(Ge(L,async Ee=>{let Ne=performance.now(),ne,vt,Vt;try{for(let lr of at.sources)if(lr.get&&(!lr.get.reliesOnPrototype||lr.prototype.get)&&(L.source=lr,ne=await lr.get(W,L),ne))break;Vt=D&wf;let He=L.lastModified||Vt&&g;vt=Vt||He>g||!U,He||(He=(0,Lu.getNextMonotonicTime)());let Os=performance.now()-Ne;if(Or(Os,"cache-resolution",n),V&&V.append("Server-Timing",`cache-resolve;dur=${Os.toFixed(2)}`),Ee.timestamp=He,d&&!L.expiresAt&&(L.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")&&!R?.mustRevalidate||R?.staleIfError&&(He.statusCode===500||He.statusCode===502||He.statusCode===503||He.statusCode===504))?(z({version:g,value:U}),Ke.trace(He.message,"(returned stale record)")):oe(He),L.transaction.abort();return}if(R?.noCacheStore){L.transaction.abort();return}In(L).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(He,Os)=>{if(Os?.version!==g)return;let lr=Gu(W,U,ne);ne?(gt.put?.(L,W,ne),S(W,ne,Os,He,0,E&&vt||null,L,L.expiresAt,"put",!!Vt)):(gt.delete?.(L,W),E||h?S(W,null,Os,He,0,E&&vt||null,L,0,"delete",!!Vt):i.remove(W,g))}})}),()=>{i.unlock(W,g)},Ee=>{i.unlock(W,g),k&&Ke.error("Error committing cache update",Ee)})})}a(JR,"getFromSource");function zf(){if(Zr!==QR&&(QR=Zr,(0,Qi.getWorkerIndex)()===(0,Qi.getWorkerCount)()-1)){if(qu&&clearTimeout(qu),!Zr)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())/Zr)*Zr+W.getTime(),R=a(D=>{Ke.trace(`Scheduled next cleanup scan at ${new Date(D)}ms`),qu=setTimeout(()=>q=q.then(async()=>{if(R(Math.max(D+Zr,Date.now())),i.rootStore.status!=="open"){clearTimeout(qu);return}Ke.trace(`Starting cleanup scan for ${n}`);try{let g=0;for(let{key:C,value:y,version:U,expiresAt:L}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))y===null&&!E&&U+fte<Date.now()?i.remove(C,U):L&&L+f<Date.now()&&(at.evict(C,y,U),g++),await Iu();Ke.trace(`Finished cleanup scan for ${n}, evicted ${g} entries`)}catch(g){Ke.trace(`Error in cleanup scan for ${n}:`,g)}}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");R(m)}}a(zf,"scheduleCleanup");function XR(){x=u?.addDeleteRemovalCallback(s,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(XR,"addDeleteRemoval");function $B(){(0,Qi.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:R}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let D=i.getEntry(R);D?.value?.[W]<Date.now()&&at.evict(R,D.value,D.version),await Iu()}}catch(W){Ke.error("Error in evicting old records",W)}},dte).unref()}a($B,"runRecordExpirationEviction")}function vR(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 j0(){}function mte(e){tB=e}function Uf(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"&&!pte.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Pf.autoCast)(e)}function Z0(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 BR(e,t,r){return e?.then?e.then(t,r):t(e)}function Cu(e,t){e[Ys]=t,e[Re]=t?.value??null,e[Df]=t?.version}var As,Lf,Lu,eB,wu,Mu,Ks,Du,Uu,Ke,Mf,Qi,Pf,ute,tB,lte,_te,dte,fte,z0,Ete,Df,J0,Ys,MR,PR,yu,wf,Cf,hte,X0,Bfe,pte,Iu,jd=Te(()=>{As=M(b()),Lf=require("lmdb"),Lu=M(hr()),eB=require("lodash");os();gE();wu=M(ze()),Mu=M(X());Q0();Ks=M(j()),Du=M(on()),Uu=M(ls());fe();hl();Ke=M(G());dl();di();Mf=require("ordered-binary"),Qi=M(Ze());io();Pf=M($());Ga();xn();ute=new Uint8Array(9);ute[8]=192;lte=1e8,_te=1e7,dte=6e4,fte=864e5;Mu.initSync();z0=Mu.get(As.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Ete=1e4,Df=Symbol.for("version"),J0=Symbol.for("incremental-update"),Ys=Symbol("entry"),MR=Symbol("is-saving"),PR=Symbol("loaded-from-source"),yu={isNotification:!0,ensureLoaded:!1},wf=1,Cf=8,hte=Buffer.allocUnsafeSlow(8192),X0=1978,Bfe=(0,Pf.convertToMS)(Mu.get(As.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(vf,"makeTable");a(vR,"attributesAsObject");a(j0,"noop");a(mte,"setServerUtilities");pte=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Uf,"coerceType");a(Z0,"isDescendantId");Iu=a(()=>new Promise(setImmediate),"rest");a(BR,"when");a(Cu,"updateResource")});var Ce={};Qe(Ce,{database:()=>hc,databases:()=>xe,dropDatabase:()=>Ym,dropTableMeta:()=>Ote,getDatabases:()=>ds,getTables:()=>Ste,onUpdatedTable:()=>uR,readMetaDb:()=>Pu,resetDatabases:()=>Tte,table:()=>et,tables:()=>mr});function Ste(){return Gf||ds(),mr||{}}function ds(){if(Gf)return xe;Gf=!0,ha=new Map;let e=(0,kt.getHdbBasePath)()&&(0,Fe.join)((0,kt.getHdbBasePath)(),wr.DATABASES_DIR_NAME),t=(0,kt.get)(wr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,kt.get)(wr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Ir.existsSync)(e)?e:(0,Fe.join)((0,kt.getHdbBasePath)(),wr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Ir.existsSync)(e))for(let r of(0,Ir.readdirSync)(e,{withFileTypes:!0})){let s=(0,Fe.basename)(r.name,".mdb");r.isFile()&&(0,Fe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Pu((0,Fe.join)(e,r.name),null,s)}if((0,Ir.existsSync)((0,Ea.getBaseSchemaPath)())){for(let r of(0,Ir.readdirSync)((0,Ea.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Fe.join)((0,Ea.getBaseSchemaPath)(),r.name),n=(0,Fe.join)((0,Ea.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Ir.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Fe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Fe.join)(n,i.name);Pu((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,Ir.existsSync)(n))for(let o of(0,Ir.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Fe.extname)(o.name).toLowerCase()===".mdb"&&Pu((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,Ir.existsSync)(u)&&Pu(u,o,r,null,!0)}}for(let r in xe){let s=ha.get(r);if(s){let n=xe[r];r.includes("delete")&&jr.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(jr.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[xf]}}return ha=null,xe}}function Tte(){Gf=!1;for(let[,e]of ei)e.needsDeletion=!0;ds();for(let[e,t]of ei)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ei.delete(e));return xe}function Pu(e,t,r=qR,s,n){let i=new HR.default(e,!1);try{let o=ei.get(e);o?o.needsDeletion=!1:(o=(0,Hf.open)(i),ei.set(e,o));let c=new zi.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Bf.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,Ir.existsSync)(s)&&(i.path=s,_=(0,Hf.open)(i),_.isLegacy=!0):_=gl(o));let l=iB(r),d=l[xf],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 A=f.get(p);A||f.set(p,A={attributes:[]}),(S==null||h.is_hash_attribute)&&(A.primary=h),S!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let x of p)if(x.is_hash_attribute||x.isPrimaryKey){S=x;break}if(!S){jr.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let A=l[E],I={},N=[],Y,Q,q=typeof S.audit=="boolean"?S.audit:(0,kt.get)(wr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(A)I=A.indices,N=A.attributes,A.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(fa)||0)&&u.putSync(fa,Y+1):(S.tableId=Y=u.get(fa),Y||(Y=1),u.putSync(fa,Y+1),u.putSync(S.key,S));let x=new zi.default(!S.is_hash_attribute,S.is_hash_attribute);Q=yl(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(!I[x.name]){let be=new zi.default(!x.is_hash_attribute,x.is_hash_attribute);I[x.name]=o.openDB(x.key,be)}let te=N.find(be=>be.name===x.name);te?N.splice(N.indexOf(te),1,x):N.push(x)}}catch(te){jr.error("Error trying to update attribute",x,N,I,te)}}if(!A){A=oB(l,E,vf({primaryStore:Q,auditStore:_,audit:q,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:I,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),A.schemaVersion=1;for(let x of GR)x(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function iB(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)),ha&&!ha.has(e)){let r=new Set;t[xf]=r,ha.set(e,r)}return t}function oB(e,t,r){return e[t]=r,r}function hc({database:e,table:t}){e||(e=qR),ds();let r=iB(e),s=(0,Fe.join)((0,kt.getHdbBasePath)(),wr.DATABASES_DIR_NAME),n=(0,kt.get)(wr.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,kt.get)(wr.CONFIG_PARAMS.STORAGE_PATH)||((0,Ir.existsSync)(s)?s:(0,Fe.join)((0,kt.getHdbBasePath)(),wr.LEGACY_DATABASES_DIR_NAME));let o=(0,Fe.join)(s,(i?t:e)+".mdb"),c=ei.get(o);if(!c){let u=new HR.default(o,!1);c=(0,Hf.open)(u),ei.set(o,c)}return c}async function Ym(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;ei.delete(n.path),n.status==="open"&&(await n.close(),await rB.remove(n.path))}if(e==="data"){for(let r in mr)delete mr[r];delete mr[xf]}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=qR);let l=hc({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 A=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 I,N;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=gl(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,kt.get)(wr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),jr.trace(`${e} table loading, opening primary store`);let K=new zi.default(!1,!0),B=e+"/",x=yl(l.openDB(B,K));x.rootStore=l,S=l.dbisDb=l.openDB(Bf.INTERNAL_DBIS_NAME,A),x.tableId=S.get(fa),x.tableId||(x.tableId=1),S.putSync(fa,x.tableId+1),h.tableId=x.tableId,f=oB(d,e,vf({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,I=!0,q(),S.put(B,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(Bf.INTERNAL_DBIS_NAME,A)),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){q(),I=!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),I=!0,q(),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<vu.workerData?.restartNumber)&&(I=!0,q(),B=S.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<vu.workerData?.restartNumber)&&(I=!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&&(I=!0,q(),S.put(K,w))}}finally{N&&N()}if(I&&(f.schemaVersion++,f.updatedAttributes()),jr.trace(`${e} table loading, running index`),Q.length>0||Y.length>0?f.indexingOperation=Ate(f,Q,Y):I&&Ff.signalSchemaChange(new qf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let w of GR)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),jr.trace(`${e} table loaded`),f;function q(){N||l.transactionSync(()=>({then(w){N=w}}))}a(q,"startTxn")}async function Ate(e,t,r){try{let s=e.schemaVersion;await Ff.signalSchemaChange(new qf.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,sB.getIndexedValues)(l[h]);if(p)for(let S=0,A=p.length;S<A;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,jr.error(f)}),vu.workerData&&vu.workerData.restartNumber!==nB.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>Rte?await n:u>gte&&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 Ff.signalSchemaChange(new qf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){jr.error("Error in indexing",s)}}function Ote({table:e,database:t}){let r=hc({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 uR(e){GR.push(e)}var kt,Bf,Hf,Fe,Ir,Ea,zi,HR,wr,rB,FR,sB,Ff,qf,vu,jr,nB,qR,xf,mr,xe,fa,GR,Gf,ei,ha,Rte,gte,fe=Te(()=>{kt=M(X()),Bf=M(ze()),Hf=require("lmdb"),Fe=require("path"),Ir=require("fs"),Ea=M(ve());jd();zi=M(Il()),HR=M(Cl()),wr=M(b()),rB=M(require("fs-extra")),FR=require("../../index"),sB=M(hr()),Ff=M(on()),qf=M(ls()),vu=require("worker_threads"),jr=M(G()),nB=M(Ze());io();Ga();qR="data",xf=Symbol("defined-tables");(0,kt.initSync)();mr=Object.create(null),xe=Object.create(null);(0,FR._assignPackageExport)("databases",xe);(0,FR._assignPackageExport)("tables",mr);fa=Symbol.for("next-table-id"),GR=[],ei=new Map;a(Ste,"getTables");a(ds,"getDatabases");a(Tte,"resetDatabases");a(Pu,"readMetaDb");a(iB,"ensureDB");a(oB,"setTable");a(hc,"database");a(Ym,"dropDatabase");a(et,"table");Rte=1e3,gte=10;a(Ate,"runIndexing");a(Ote,"dropTableMeta");a(uR,"onUpdatedTable")});var $=T((Yfe,RB)=>{"use strict";var ti=require("path"),_B=require("fs-extra"),cr=G(),aB=require("fs-extra"),kf=require("os"),Nte=require("net"),bte=require("recursive-iterator"),We=b(),yte=Lg(),cB=require("papaparse"),Vf=require("moment"),{inspect:Ite}=require("util"),uB=require("is-number"),$fe=require("lodash"),wte=require("minimist"),Cte=require("https"),Lte=require("http"),{hdb_errors:$f}=j(),Dte=/^((\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)))$/,dB=require("util").promisify(setTimeout),Ute=100,Mte=5,Pte="",vte=4,lB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};RB.exports={isEmpty:Cr,isEmptyOrZeroLength:Ws,arrayHasEmptyValues:Fte,arrayHasEmptyOrZeroLengthValues:qte,buildFolderPath:Gte,isBoolean:fB,errorizeMessage:Bte,stripFileExtension:kte,autoCast:Vte,autoCastJSON:EB,autoCastJSONDeep:kR,removeDir:$te,compareVersions:Yte,isCompatibleDataVersion:Kte,escapeRawValue:Wte,unescapeValue:Qte,stringifyProps:zte,timeoutPromise:Xte,isClusterOperation:Zte,getClusterUser:tre,checkGlobalSchemaTable:ere,getHomeDir:mB,getPropsFilePath:Jte,promisifyPapaParse:rre,removeBOM:pB,createEventPromise:sre,checkProcessRunning:nre,checkSchemaTableExist:ire,checkSchemaExists:SB,checkTableExists:TB,getStartOfTomorrowInSeconds:ore,getLimitKey:are,isObject:xte,isNotEmptyAndHasValue:Hte,autoCasterIsNumberCheck:hB,backtickASTSchemaItems:cre,isPortTaken:jte,createForkArgs:ure,autoCastBoolean:lre,async_set_timeout:dB,getTableHashAttribute:_re,doesSchemaExist:dre,doesTableExist:fre,stringifyObj:Ere,ms_to_time:hre,changeExtension:mre,getEnvCliRootPath:VR,noBootFile:pre,httpRequest:Sre,transformReq:Tre,convertToMS:Rre,PACKAGE_ROOT:We.PACKAGE_ROOT};function Bte(e){return e instanceof Error?e:new Error(e)}a(Bte,"errorizeMessage");function Cr(e){return e==null}a(Cr,"isEmpty");function Hte(e){return!Cr(e)&&(e||e===0||e===""||fB(e))}a(Hte,"isNotEmptyAndHasValue");function Ws(e){return Cr(e)||e.length===0||e.size===0}a(Ws,"isEmptyOrZeroLength");function Fte(e){if(Cr(e))return!0;for(let t=0;t<e.length;t++)if(Cr(e[t]))return!0;return!1}a(Fte,"arrayHasEmptyValues");function qte(e){if(Ws(e))return!0;for(let t=0;t<e.length;t++)if(Ws(e[t]))return!0;return!1}a(qte,"arrayHasEmptyOrZeroLengthValues");function Gte(...e){try{return e.join(ti.sep)}catch{console.error(e)}}a(Gte,"buildFolderPath");function fB(e){return Cr(e)?!1:e===!0||e===!1}a(fB,"isBoolean");function xte(e){return Cr(e)?!1:typeof e=="object"}a(xte,"isObject");function kte(e){return Ws(e)?Pte:e.slice(0,-vte)}a(kte,"stripFileExtension");function Vte(e){return Cr(e)||e===""||typeof e!="string"?e:lB[e]!==void 0?lB[e]:hB(e)===!0?Number(e):Dte.test(e)?new Date(e):e}a(Vte,"autoCast");function EB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(EB,"autoCastJSON");function kR(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=kR(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=kR(r);s!==r&&(e[t]=s)}return e}else return EB(e)}a(kR,"autoCastJSONDeep");function hB(e){if(e.startsWith("0.")&&uB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&uB(e))}a(hB,"autoCasterIsNumberCheck");async function $te(e){if(Ws(e))throw new Error(`Directory path: ${e} does not exist`);try{await aB.emptyDir(e),await aB.remove(e)}catch(t){throw cr.error(`Error removing files in ${e} -- ${t}`),t}}a($te,"removeDir");function Yte(e,t){if(Ws(e)){cr.info("Invalid current version sent as parameter.");return}if(Ws(t)){cr.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(Yte,"compareVersions");function Kte(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Kte,"isCompatibleDataVersion");function Wte(e){if(Cr(e))return e;let t=String(e);return t==="."?We.UNICODE_PERIOD:t===".."?We.UNICODE_PERIOD+We.UNICODE_PERIOD:t.replace(We.FORWARD_SLASH_REGEX,We.UNICODE_FORWARD_SLASH)}a(Wte,"escapeRawValue");function Qte(e){if(Cr(e))return e;let t=String(e);return t===We.UNICODE_PERIOD?".":t===We.UNICODE_PERIOD+We.UNICODE_PERIOD?"..":String(e).replace(We.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Qte,"unescapeValue");function zte(e,t){if(Cr(e))return cr.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+kf.EOL}!Ws(s)&&s[0]===";"?r+=" "+s+n+kf.EOL:Ws(s)||(r+=s+"="+n+kf.EOL)}catch{cr.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(zte,"stringifyProps");function mB(){let e;try{e=kf.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(mB,"getHomeDir");function Jte(){let e=ti.join(mB(),We.HDB_HOME_DIR_NAME,We.BOOT_PROPS_FILE_NAME);return _B.existsSync(e)||(e=ti.join(__dirname,"../","hdb_boot_properties.file")),e}a(Jte,"getPropsFilePath");function Xte(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Xte,"timeoutPromise");async function jte(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=Nte.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(jte,"isPortTaken");function Zte(e){try{return We.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){cr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Zte,"isClusterOperation");function ere(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return $f.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return $f.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(ere,"checkGlobalSchemaTable");function tre(e,t){if(Cr(t)){cr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Cr(e)||Ws(e)){cr.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){cr.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){cr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(tre,"getClusterUser");function rre(){cB.parsePromise=function(e,t,r){return new Promise(function(s,n){cB.parse(e,{header:!0,transformHeader:pB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(rre,"promisifyPapaParse");function pB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(pB,"removeBOM");function sre(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;cr.info(`Got cluster status event response: ${Ite(n)}`);try{i.cancel()}catch{cr.error("Error trying to cancel timeout.")}s(n)})})}a(sre,"createEventPromise");async function nre(e){let t=!0,r=0;do await dB(Ute*r++),(await yte.findPs(e)).length>0&&(t=!1);while(t&&r<Mte);if(t)throw new Error(`process ${e} was not started`)}a(nre,"checkProcessRunning");function ire(e,t){let r=SB(e);if(r)return r;let s=TB(e,t);if(s)return s}a(ire,"checkSchemaTableExist");function SB(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return $f.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(SB,"checkSchemaExists");function TB(e,t){let{getDatabases:r}=(fe(),Z(Ce));if(!r()[e][t])return $f.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(TB,"checkTableExists");function ore(){let e=Vf().utc().add(1,We.MOMENT_DAYS_TAG).startOf(We.MOMENT_DAYS_TAG).unix(),t=Vf().utc().unix();return e-t}a(ore,"getStartOfTomorrowInSeconds");function are(){return Vf().utc().format("DD-MM-YYYY")}a(are,"getLimitKey");function cre(e){try{let t=new bte(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){cr.error("Got an error back ticking items."),cr.error(t)}}a(cre,"backtickASTSchemaItems");function ure(e){return[e]}a(ure,"createForkArgs");function lre(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(lre,"autoCastBoolean");function _re(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(_re,"getTableHashAttribute");function dre(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a(dre,"doesSchemaExist");function fre(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a(fre,"doesTableExist");function Ere(e){try{return JSON.stringify(e)}catch{return e}}a(Ere,"stringifyObj");function hre(e){let t=Vf.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(hre,"ms_to_time");function mre(e,t){let r=ti.basename(e,ti.extname(e));return ti.join(ti.dirname(e),r+t)}a(mre,"changeExtension");function VR(){if(process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=wte(process.argv);if(e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(VR,"getEnvCliRootPath");var xR;function pre(){if(xR)return xR;let e=VR();VR()&&_B.pathExistsSync(ti.join(e,We.HDB_CONFIG_FILE))&&(xR=!0)}a(pre,"noBootFile");function Sre(e,t){let r;return e.protocol==="http:"?r=Lte:r=Cte,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(Sre,"httpRequest");function Tre(e){if(!e.schema&&!e.database){e.schema=We.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Tre,"transformReq");function Rre(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(Rre,"convertToMS")});var yB=T((Wfe,bB)=>{"use strict";var Lr=X(),gre=tc(),ce=b(),Bu=ke(),Nn=require("path"),{PACKAGE_ROOT:Kf}=b(),gB=X(),Yf=$(),ma="/dev/null",Are=Nn.join(Kf,"launchServiceScripts"),AB=Nn.join(Kf,"utility/scripts"),Ore=Nn.join(AB,ce.HDB_RESTART_SCRIPT),OB=Nn.resolve(Kf,"dependencies",`${process.platform}-${process.arch}`,Bu.NATS_BINARY_NAME);function NB(){let t=gre.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 Yf.noBootFile()&&(s[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Yf.getEnvCliRootPath()),{name:ce.PROCESS_DESCRIPTORS.HDB,script:ce.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:Kf}}a(NB,"generateMainServerConfig");var Nre=9930;function bre(){Lr.initSync(!0);let e=Lr.get(ce.CONFIG_PARAMS.ROOTPATH),t=Nn.join(e,"clustering",Bu.NATS_CONFIG_FILES.HUB_SERVER),r=Nn.join(Lr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=gB.get(ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Bu.LOG_LEVEL_FLAGS[Lr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==Nre?"-"+s:""),script:OB,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 Lr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ma,i.error_file=ma),i}a(bre,"generateNatsHubServerConfig");var yre=9940;function Ire(){Lr.initSync(!0);let e=Lr.get(ce.CONFIG_PARAMS.ROOTPATH),t=Nn.join(e,"clustering",Bu.NATS_CONFIG_FILES.LEAF_SERVER),r=Nn.join(Lr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=gB.get(ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Bu.LOG_LEVEL_FLAGS[Lr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==yre?"-"+s:""),script:OB,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 Lr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ma,i.error_file=ma),i}a(Ire,"generateNatsLeafServerConfig");function wre(){Lr.initSync();let e=Nn.join(Lr.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:Are,autorestart:!1};return Lr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ma,t.error_file=ma),t}a(wre,"generateClusteringUpgradeV4ServiceConfig");function Cre(){let e={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.RESTART_HDB};return Yf.noBootFile()&&(e[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Yf.getEnvCliRootPath()),{...{name:ce.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:AB},script:Ore}}a(Cre,"generateRestart");function Lre(){return{apps:[NB()]}}a(Lre,"generateAllServiceConfigs");bB.exports={generateAllServiceConfigs:Lre,generateMainServerConfig:NB,generateRestart:Cre,generateNatsHubServerConfig:bre,generateNatsLeafServerConfig:Ire,generateClusteringUpgradeV4ServiceConfig:wre}});var BS=T((Jfe,qB)=>{"use strict";var Ae=b(),Dre=$(),bn=LS(),Hu=_t(),Qs=ke(),ri=yB(),Wf=X(),si=G(),Ure=un(),{startWorker:IB,onMessageFromWorkers:Mre}=Ze(),Pre=Fo(),zfe=require("util"),vre=require("child_process"),Bre=require("fs"),{execFile:Hre}=vre,Se;qB.exports={enterPM2Mode:Fre,start:ni,stop:$R,reload:CB,restart:LB,list:YR,describe:UB,connect:yn,kill:Vre,startAllServices:$re,startService:KR,getUniqueServicesList:MB,restartAllServices:Yre,isServiceRegistered:PB,reloadStopStart:vB,restartHdb:DB,deleteProcess:xre,startClusteringProcesses:HB,startClusteringThreads:FB,isHdbRestartRunning:kre,isClusteringRunning:Wre,stopClustering:Kre,reloadClustering:Qre};var Fu=!1;Mre(e=>{e.type==="restart"&&Wf.initSync(!0)});function Fre(){Fu=!0}a(Fre,"enterPM2Mode");function yn(){return Se||(Se=require("pm2")),new Promise((e,t)=>{Se.connect((r,s)=>{si.setupConsoleLogging(),r&&t(r),e(s)})})}a(yn,"connect");var ur,qre=10,wB;function ni(e,t=!1){if(Fu)return Gre(e);let r=Hre(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=ur.indexOf(r);o>-1&&ur.splice(o,1),!wB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<qre&&(Bre.existsSync(bn.getHubConfigPath())?ni(e):(await bn.generateNatsConfig(!0),ni(e),await new Promise(c=>setTimeout(c,3e3)),await bn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await bn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=Wf.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Qs.LOG_LEVEL_HIERARCHY[o]>=Qs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Qs.LOG_LEVELS.ERR||l===Qs.LOG_LEVELS.WRN?si.OUTPUTS.STDERR:si.OUTPUTS.STDOUT;si.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=Qs.LOG_LEVELS[f]}if(Qs.LOG_LEVEL_HIERARCHY[o]>=Qs.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Qs.LOG_LEVELS.ERR||l===Qs.LOG_LEVELS.WRN?si.OUTPUTS.STDERR:si.OUTPUTS.STDOUT;si.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),ur=[],!ur&&!t){let i=a(()=>{wB=!0,ur&&(ur.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}ur.push(r)}a(ni,"start");function Gre(e){return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.start(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(Gre,"startWithPM2");function $R(e){if(!Fu){for(let t of ur||[])t.name===e&&(ur.splice(ur.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.stop(e,async(s,n)=>{s&&(Se.disconnect(),r(s)),Se.delete(e,(i,o)=>{i&&(Se.disconnect(),r(s)),Se.disconnect(),t(o)})})})}a($R,"stop");function CB(e){return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.reload(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(CB,"reload");function LB(e){if(!Fu)for(let t of ur||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.restart(e,(s,n)=>{Se.disconnect(),t(n)})})}a(LB,"restart");function xre(e){return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.delete(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(xre,"deleteProcess");async function DB(){await ni(ri.generateRestart())}a(DB,"restartHdb");async function kre(){let e=await YR();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(kre,"isHdbRestartRunning");function YR(){return new Promise(async(e,t)=>{try{await yn()}catch(r){t(r)}Se.list((r,s)=>{r&&(Se.disconnect(),t(r)),Se.disconnect(),e(s)})})}a(YR,"list");function UB(e){return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.describe(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(UB,"describe");function Vre(){if(!Fu){for(let e of ur||[])e.kill();ur=[];return}return new Promise(async(e,t)=>{try{await yn()}catch(r){t(r)}Se.killDaemon((r,s)=>{r&&(Se.disconnect(),t(r)),Se.disconnect(),e(s)})})}a(Vre,"kill");async function $re(){try{await HB(),await FB(),await ni(ri.generateAllServiceConfigs())}catch(e){throw Se?.disconnect(),e}}a($re,"startAllServices");async function KR(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ri.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ri.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ri.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ri.generateNatsHubServerConfig(),await ni(r,t),await bn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ri.generateNatsLeafServerConfig(),await ni(r,t),await bn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ri.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ni(r)}catch(r){throw Se?.disconnect(),r}}a(KR,"startService");async function MB(){try{let e=await YR(),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 Se?.disconnect(),e}}a(MB,"getUniqueServicesList");async function Yre(e=[]){try{let t=!1,r=await MB();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 LB(o))}t&&await vB(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Se?.disconnect(),t}}a(Yre,"restartAllServices");async function PB(e){if(ur?.find(r=>r.name===e))return!0;let t=await Pre.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(PB,"isServiceRegistered");async function vB(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?Wf.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Wf.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await UB(e),s=Dre.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await $R(e),await KR(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await DB():await CB(e)}a(vB,"reloadStopStart");var BB;async function HB(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await KR(r,e)}}a(HB,"startClusteringProcesses");async function FB(){BB=IB(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Hu.createWorkQueueStream(Qs.WORK_QUEUE_CONSUMER_NAMES),await Hu.updateIngestStreamConsumer(),await Hu.updateLocalStreams();let e=await Ure.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){si.info("Starting clustering upgrade 4.0.0 process"),IB(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(FB,"startClusteringThreads");async function Kre(){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 BB.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await $R(t)}}a(Kre,"stopClustering");async function Wre(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await PB(t)===!1)return!1}return!0}a(Wre,"isClusteringRunning");async function Qre(){await bn.generateNatsConfig(!0),await Hu.reloadNATSHub(),await Hu.reloadNATSLeaf(),await bn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await bn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Qre,"reloadClustering")});var WR=BS(),GB=b();a(async function(){try{let t=await WR.describe(GB.PROCESS_DESCRIPTORS.HDB);for(let r of t)await WR.reload(r.pm_id);await WR.deleteProcess(GB.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();