harperdb 4.2.0-alpha.14 → 4.2.0-alpha.15

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,26 +1,26 @@
1
- "use strict";var DB=Object.create;var $o=Object.defineProperty;var LB=Object.getOwnPropertyDescriptor;var MB=Object.getOwnPropertyNames;var PB=Object.getPrototypeOf,vB=Object.prototype.hasOwnProperty;var a=(e,t)=>$o(e,"name",{value:t,configurable:!0});var Se=(e,t)=>()=>(e&&(t=e(e=0)),t);var m=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),je=(e,t)=>{for(var r in t)$o(e,r,{get:t[r],enumerable:!0})},jT=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of MB(t))!vB.call(e,n)&&n!==r&&$o(e,n,{get:()=>t[n],enumerable:!(s=LB(t,n))||s.enumerable});return e};var C=(e,t,r)=>(r=e!=null?DB(PB(e)):{},jT(t||!e||!e.__esModule?$o(r,"default",{value:e,enumerable:!0}):r,e)),re=e=>jT($o({},"__esModule",{value:!0}),e);var rR=m((Ite,tR)=>{var BB=require("fast-glob"),{statSync:uE,existsSync:lE,readFileSync:HB,writeFileSync:qB}=require("fs"),{spawnSync:FB,spawn:GB}=require("child_process"),{isMainThread:xB}=require("worker_threads"),{join:ys,relative:eR}=require("path"),{PACKAGE_ROOT:mr}=A(),{tmpdir:kB}=require("os");require("source-map-support").install();var VB=["resources","server","dataLayer"],Yo="ts-build",_E,$B=__filename.endsWith("tsBuild.js");if($B){if(xB){let r;try{uE(ys(mr,Yo)),r=!0}catch{}if(r)for(let s of BB.sync(VB.map(n=>n+"/**/*.ts"),{cwd:mr})){let n=0,i=0;try{n=uE(ys(mr,s)).mtimeMs-5e3,i=uE(ys(mr,Yo,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."),_E=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),_E=!0;if(_E){let s=FB(process.argv[0],[ys(mr,"node_modules/.bin/tsc")],{cwd:mr});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let n=ys(kB(),"harperdb-tsc.pid"),i;if(lE(n))try{process.kill(+HB(n,{encoding:"utf8"}),0),i=!0}catch{}if(!i){console.log("starting tsc background process");let o=GB(process.argv[0],[ys(mr,"node_modules/.bin/tsc"),"--watch"],{cwd:mr,detached:!0,stdio:"ignore"});qB(n,o.pid.toString()),o.unref()}}}}let e=tR.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(mr)&&!s[0].includes("node_modules")){let i=eR(mr,s[0]),o;i.startsWith(Yo)?o=ys(mr,eR(Yo,i)):o=ys(mr,Yo,i);let c=ys(o,r),u=c+".js";if(lE(u))return u;if(c.includes(".")&&lE(c))return c}return t(r,s,n)}}});var A=m((Ute,mR)=>{"use strict";var Sr=require("path"),YB=require("fs"),{relative:wte,join:Cte}=Sr,{existsSync:KB}=YB;function WB(){let e=__dirname;for(;!KB(Sr.join(e,"package.json"));){let t=Sr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(WB,"getHDBPackageRoot");var cn=WB(),sR="js",lu=sR,QB="harperdb-config.yaml",zB="defaultConfig.yaml",JB="hdb",nR=`harperdb.${lu}`,iR=`customFunctionsServer.${lu}`,XB=`restartHdb.${lu}`,EE="HarperDB",uu="Custom Functions",_u="Clustering Hub",du="Clustering Leaf",ZB="Clustering Ingest Service",jB="Clustering Reply Service",eH="foreground.pid",tH="hdb.pid",rH="data",sH={HDB:EE,CLUSTERING_HUB:_u,CLUSTERING_LEAF:du,CLUSTERING_INGEST_SERVICE:ZB,CLUSTERING_REPLY_SERVICE:jB,CUSTOM_FUNCTIONS:uu,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"},nH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},iH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},oH={harperdb:EE,"clustering hub":_u,"clustering leaf":du,"custom functions":uu,custom_functions:uu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},aH={CLUSTERING_HUB_PROC_DESCRIPTOR:_u,CLUSTERING_LEAF_PROC_DESCRIPTOR:du},dE={HDB:Sr.join(cn,"server/harperdb"),CUSTOM_FUNCTIONS:Sr.join(cn,"server/customFunctions"),CLUSTERING_HUB:Sr.join(cn,"server/nats"),CLUSTERING_LEAF:Sr.join(cn,"server/nats")},cH={HDB:Sr.join(dE.HDB,nR),CUSTOM_FUNCTIONS:Sr.join(dE.CUSTOM_FUNCTIONS,iR)},uH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Sr.join(cn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Sr.join(cn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Sr.join(cn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},lH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},oR="support@harperdb.io",_H="customer-success@harperdb.io",aR=1,dH=4141,cR="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",EH="https://www.harperdb.io/product",fH=`For support, please submit a request at ${cR} or contact ${oR}`,uR=`For license support, please contact ${_H}`,hH="None of the specified records were found.",mH="hash attribute not found",SH=`Your current license only supports ${aR} role. ${uR}`,pH="Your current license only supports 3 connections to a node.",TH="127.0.0.1",RH=1,gH=/^\.$/,AH=/^\.\.$/,OH="U+002E",NH=/\//g,bH="U+002F",yH=/U\+002F/g,IH=/^U\+002E$/,wH=/^U\+002EU\+002E$/,CH="d",UH=999999,DH="*",LH="--max-old-space-size=",MH="system",PH="__hdb_hash",vH=".harperdb",BH=".hdb",HH="keys",qH="hdb_boot_properties.file",FH=".updateConfig.json",GH="SIGTSTP",xH=24,kH=6e4,VH=448,$H="blob",YH="trash",KH="database",WH="schema",QH="transactions",zH=".count",JH="id",XH="PROCESS_NAME",lR={SETTINGS_PATH_KEY:"settings_path"},_R=require("lodash"),ZH={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",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},jH={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},e0={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},t0={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"},r0={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"},tr="hdb_internal:",s0={CREATE_SCHEMA:tr+"create_schema",CREATE_TABLE:tr+"create_table",CREATE_ATTRIBUTE:tr+"create_attribute",ADD_USER:tr+"add_user",ALTER_USER:tr+"alter_user",DROP_USER:tr+"drop_user",HDB_NODES:tr+"hdb_nodes",HDB_USERS:tr+"hdb_users",HDB_WORKERS:tr+"hdb_workers",CATCHUP:tr+"catchup",SCHEMA_CATCHUP:tr+"schema_catchup",WORKER_ROOM:tr+"cluster_workers"},n0={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"},i0="060493.ks",o0=".license",a0={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},K={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"},c0={CSV:".csv",JSON:".json"},u0={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},l0={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Ko={};Ko[K.INSERT]=K.INSERT;Ko[K.UPDATE]=K.UPDATE;Ko[K.UPSERT]=K.UPSERT;Ko[K.DELETE]=K.DELETE;var ge=Object.create(null);ge[K.DESCRIBE_ALL]=K.DESCRIBE_ALL;ge[K.DESCRIBE_TABLE]=K.DESCRIBE_TABLE;ge[K.DESCRIBE_SCHEMA]=K.DESCRIBE_SCHEMA;ge[K.READ_LOG]=K.READ_LOG;ge[K.ADD_NODE]=K.ADD_NODE;ge[K.LIST_USERS]=K.LIST_USERS;ge[K.LIST_ROLES]=K.LIST_ROLES;ge[K.USER_INFO]=K.USER_INFO;ge[K.SQL]=K.SQL;ge[K.GET_JOB]=K.GET_JOB;ge[K.SEARCH_JOBS_BY_START_DATE]=K.SEARCH_JOBS_BY_START_DATE;ge[K.DELETE_FILES_BEFORE]=K.DELETE_FILES_BEFORE;ge[K.EXPORT_LOCAL]=K.EXPORT_LOCAL;ge[K.EXPORT_TO_S3]=K.EXPORT_TO_S3;ge[K.CLUSTER_STATUS]=K.CLUSTER_STATUS;ge[K.REMOVE_NODE]=K.REMOVE_NODE;ge[K.RESTART]=K.RESTART;ge[K.CUSTOM_FUNCTIONS_STATUS]=K.CUSTOM_FUNCTIONS_STATUS;ge[K.GET_CUSTOM_FUNCTIONS]=K.GET_CUSTOM_FUNCTIONS;ge[K.GET_CUSTOM_FUNCTION]=K.GET_CUSTOM_FUNCTION;ge[K.SET_CUSTOM_FUNCTION]=K.SET_CUSTOM_FUNCTION;ge[K.DROP_CUSTOM_FUNCTION]=K.DROP_CUSTOM_FUNCTION;ge[K.ADD_CUSTOM_FUNCTION_PROJECT]=K.ADD_CUSTOM_FUNCTION_PROJECT;ge[K.DROP_CUSTOM_FUNCTION_PROJECT]=K.DROP_CUSTOM_FUNCTION_PROJECT;ge[K.PACKAGE_CUSTOM_FUNCTION_PROJECT]=K.PACKAGE_CUSTOM_FUNCTION_PROJECT;ge[K.DEPLOY_CUSTOM_FUNCTION_PROJECT]=K.DEPLOY_CUSTOM_FUNCTION_PROJECT;var _0={DEBUG:"debug",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},d0={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},dR={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"},E0=_R.invert(dR),R={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_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",HTTP_THREADS:"http_threads",HTTP_SESSION_AFFINITY:"http_sessionAffinity",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_AUTHENTICATION_OPERATIONTOKENTIMEOUT:"operationsApi_authentication_operationTokenTimeout",OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT:"operationsApi_authentication_refreshTokenTimeout",OPERATIONSAPI_FOREGROUND:"operationsApi_foreground",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",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_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERT_AUTH:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_NODEENV:"operationsApi_nodeEnv",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",SCHEMAS:"schemas",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication"},ER={settings_path:lR.SETTINGS_PATH_KEY,hdb_root_key:R.ROOTPATH,hdb_root:R.ROOTPATH,server_port_key:R.OPERATIONSAPI_NETWORK_PORT,server_port:R.OPERATIONSAPI_NETWORK_PORT,cert_key:R.OPERATIONSAPI_TLS_CERTIFICATE,certificate:R.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:R.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:R.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:R.OPERATIONSAPI_NETWORK_HTTPS,https_on:R.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:R.OPERATIONSAPI_NETWORK_CORS,cors_on:R.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:R.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:R.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:R.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:R.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:R.LOGGING_LEVEL,log_level:R.LOGGING_LEVEL,log_path_key:R.LOGGING_ROOT,log_path:R.LOGGING_ROOT,props_env_key:R.OPERATIONSAPI_NODEENV,node_env:R.OPERATIONSAPI_NODEENV,clustering_node_name_key:R.CLUSTERING_NODENAME,node_name:R.CLUSTERING_NODENAME,clustering_enabled_key:R.CLUSTERING_ENABLED,clustering:R.CLUSTERING_ENABLED,max_http_threads:R.HTTP_THREADS,max_hdb_processes:R.HTTP_THREADS,server_timeout_key:R.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:R.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:R.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:R.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:R.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:R.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:R.LOGGING_AUDITLOG,disable_transaction_log:R.LOGGING_AUDITLOG,operation_token_timeout_key:R.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:R.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:R.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:R.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:R.CUSTOMFUNCTIONS_ENABLED,custom_functions:R.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:R.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:R.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:R.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:R.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:R.HTTP_THREADS,log_to_file:R.LOGGING_FILE,log_to_stdstreams:R.LOGGING_STDSTREAMS,run_in_foreground:R.OPERATIONSAPI_FOREGROUND,local_studio_on:R.LOCALSTUDIO_ENABLED,clustering_port:R.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:R.CLUSTERING_USER,clustering_enabled:R.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:R.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:R.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:R.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:R.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:R.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:R.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:R.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:R.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:R.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:R.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:R.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:R.CLUSTERING_NODENAME,clustering_tls_certificate:R.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:R.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:R.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:R.CLUSTERING_TLS_INSECURE,clustering_tls_verify:R.CLUSTERING_TLS_VERIFY,clustering_loglevel:R.CLUSTERING_LOGLEVEL,clustering_republishmessages:R.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:R.CLUSTERING_DATABASELEVEL,customfunctions_enabled:R.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:R.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:R.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:R.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:R.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:R.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:R.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:R.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:R.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:R.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:R.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:R.CUSTOMFUNCTIONS_NODEENV,http_threads:R.HTTP_THREADS,http_session_affinity:R.HTTP_SESSION_AFFINITY,customfunctions_processes:R.HTTP_THREADS,customfunctions_root:R.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:R.LOCALSTUDIO_ENABLED,logging_file:R.LOGGING_FILE,logging_level:R.LOGGING_LEVEL,logging_root:R.LOGGING_ROOT,logging_rotation_enabled:R.LOGGING_ROTATION_ENABLED,logging_rotation_compress:R.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:R.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:R.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:R.LOGGING_ROTATION_PATH,logging_stdstreams:R.LOGGING_STDSTREAMS,logging_auditlog:R.LOGGING_AUDITLOG,logging_auditretention:R.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:R.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:R.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:R.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:R.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:R.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:R.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:R.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:R.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:R.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:R.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:R.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:R.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:R.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:R.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:R.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:R.OPERATIONSAPI_NODEENV,operationsapi_root:R.ROOTPATH,schemas:R.SCHEMAS,storage_path:R.STORAGE_PATH,ignorescripts:R.IGNORE_SCRIPTS,mqtt_network_port:R.MQTT_NETWORK_PORT,mqtt_websocket:R.MQTT_WEBSOCKET,mqtt_network_secureport:R.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:R.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:R.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:R.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:R.AUTHENTICATION_CACHETTL,authentication_enablesessions:R.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:R.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:R.AUTHENTICATION_REFRESHTOKENTIMEOUT};for(let e in R){let t=R[e];ER[t.toLowerCase()]=t}var f0={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},h0={csv_file_load:"csv_file_load",csv_data_load:K.CSV_DATA_LOAD,csv_url_load:K.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"},m0={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"},S0={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},p0={VERSION_DEFAULT:"2.2.0"},T0={DEVELOPMENT:8192,DEFAULT:512},R0={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"},g0={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"},A0={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},fR={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},O0=Symbol("metadata"),N0="__clustering__",b0=Object.values(fR),y0=15984864e5,hR={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},I0=_R.invert(hR),w0={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"},C0=111,U0=`\r
2
- `,D0={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},L0=["*","%"],M0="unauthorized_access",P0="func_val",v0={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},B0={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},H0={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"},q0={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},F0={HTTP:"http"},G0={STOPPED:"stopped",ONLINE:"online"},x0="3.x.x",k0={SUCCESS:"success",FAILURE:"failure"},V0={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};mR.exports={LOCAL_HARPERDB_OPERATIONS:ge,HDB_SUPPORT_ADDRESS:oR,HDB_SUPPORT_URL:cR,HDB_PRICING_URL:EH,SUPPORT_HELP_MSG:fH,LICENSE_HELP_MSG:uR,HDB_PROC_NAME:nR,HDB_PROC_DESCRIPTOR:EE,CLUSTERING_LEAF_PROC_DESCRIPTOR:du,CLUSTERING_HUB_PROC_DESCRIPTOR:_u,SYSTEM_SCHEMA_NAME:MH,HASH_FOLDER_NAME:PH,HDB_HOME_DIR_NAME:vH,UPDATE_FILE_NAME:FH,LICENSE_KEY_DIR_NAME:HH,BOOT_PROPS_FILE_NAME:qH,JOB_TYPE_ENUM:h0,JOB_STATUS_ENUM:a0,SYSTEM_TABLE_NAMES:t0,SYSTEM_TABLE_HASH_ATTRIBUTES:r0,OPERATIONS_ENUM:K,VALID_S3_FILE_TYPES:c0,S3_BUCKET_AUTH_KEYS:u0,VALID_SQL_OPS_ENUM:l0,GEO_CONVERSION_ENUM:d0,HDB_SETTINGS_NAMES:dR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:E0,SERVICE_ACTIONS_ENUM:_0,CLUSTER_MESSAGE_TYPE_ENUM:m0,CLUSTER_CONNECTION_DIRECTION_ENUM:S0,CLUSTER_EVENTS_DEFS_ENUM:R0,PERIOD_REGEX:gH,DOUBLE_PERIOD_REGEX:AH,UNICODE_PERIOD:OH,FORWARD_SLASH_REGEX:NH,UNICODE_FORWARD_SLASH:bH,ESCAPED_FORWARD_SLASH_REGEX:yH,ESCAPED_PERIOD_REGEX:IH,ESCAPED_DOUBLE_PERIOD_REGEX:wH,REG_KEY_FILE_NAME:i0,RESTART_TIMEOUT_MS:kH,HDB_FILE_PERMISSIONS:VH,DATABASES_DIR_NAME:KH,LEGACY_DATABASES_DIR_NAME:WH,TRANSACTIONS_DIR_NAME:QH,LIMIT_COUNT_NAME:zH,ID_ATTRIBUTE_STRING:JH,INSERT_MODULE_ENUM:jH,UPGRADE_JSON_FIELD_NAMES_ENUM:e0,RESTART_CODE:GH,RESTART_CODE_NUM:xH,CLUSTER_OPERATIONS:Ko,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:n0,HDB_INTERNAL_SC_CHANNEL_PREFIX:tr,INTERNAL_SC_CHANNELS:s0,CLUSTERING_MESSAGE_TYPES:w0,HDB_FILE_SUFFIX:BH,BLOB_FOLDER_NAME:$H,HDB_TRASH_DIR:YH,ORIGINATOR_SET_VALUE:C0,LICENSE_VALUES:p0,RAM_ALLOCATION_ENUM:T0,TIME_STAMP_NAMES_ENUM:fR,TIME_STAMP_NAMES:b0,PERMS_UPDATE_RELEASE_TIMESTAMP:y0,SEARCH_NOT_FOUND_MESSAGE:hH,SEARCH_ATTRIBUTE_NOT_FOUND:mH,LICENSE_ROLE_DENIED_RESPONSE:SH,LICENSE_MAX_CONNS_REACHED:pH,BASIC_LICENSE_MAX_NON_CU_ROLES:aR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:dH,VALUE_SEARCH_COMPARATORS:hR,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:I0,LICENSE_FILE_NAME:o0,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:g0,NEW_LINE:U0,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:RH,MOMENT_DAYS_TAG:CH,API_TURNOVER_SEC:UH,LOOPBACK:TH,CODE_EXTENSION:lu,WILDCARD_SEARCH_VALUE:DH,NODE_ERROR_CODES:A0,JAVASCRIPT_EXTENSION:sR,PERMS_CRUD_ENUM:D0,UNAUTHORIZED_PERMISSION_NAME:M0,SEARCH_WILDCARDS:L0,FUNC_VAL:P0,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:v0,JWT_ENUM:B0,CLUSTERING_FLAG:N0,ITC_EVENT_TYPES:H0,CUSTOM_FUNCTION_PROC_NAME:iR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:uu,SERVICES:q0,THREAD_TYPES:F0,MEM_SETTING_KEY:LH,HDB_RESTART_SCRIPT:XB,PROCESS_DESCRIPTORS:sH,SERVICE_SERVERS:cH,SERVICE_SERVERS_CWD:dE,PROCESS_DESCRIPTORS_VALIDATE:oH,LAUNCH_SERVICE_SCRIPTS:uH,LOG_LEVELS:iH,PROCESS_NAME_ENV_PROP:XH,LOG_NAMES:nH,PM2_PROCESS_STATUSES:G0,CONFIG_PARAM_MAP:ER,CONFIG_PARAMS:R,HDB_CONFIG_FILE:QB,HDB_DEFAULT_CONFIG_FILE:zB,ROLE_TYPES_ENUM:lH,BOOT_PROP_PARAMS:lR,INSTALL_PROMPTS:ZH,HDB_ROOT_DIR_NAME:JB,CLUSTERING_PROCESSES:aH,FOREGROUND_PID_FILE:eH,PACKAGE_ROOT:cn,PRE_4_0_0_VERSION:x0,SCHEMAS_PARAM_CONFIG:f0,METADATA_PROPERTY:O0,AUTH_AUDIT_STATUS:k0,AUTH_AUDIT_TYPES:V0,HDB_PID_FILE:tH,DEFAULT_DATABASE_NAME:rH};rR()});var fE=m((Lte,TR)=>{"use strict";var SR=require("minimist");TR.exports=$0;function $0(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=pR(process.env),s=pR(SR(process.argv))):(r=process.env,s=SR(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($0,"assignCMDENVVariables");function pR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(pR,"objKeysToLowerCase")});var x=m((Pte,gE)=>{"use strict";var Fn=require("fs-extra"),{workerData:Y0,threadId:K0}=require("worker_threads"),Cs=require("path"),AR=require("yaml"),OR=require("properties-reader"),et=A(),RR=fE(),W0=require("os"),{PACKAGE_ROOT:mE}=A(),{_assignPackageExport:Q0}=require("../index"),Qo={};for(let e in console)Qo[e]||(Qo[e]=console[e]);var Mt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},NR={STDOUT:"stdOut",STDERR:"stdErr"},z0=Cs.join(mE,"logs"),J0=Cs.join(mE,"config/yaml/",et.HDB_DEFAULT_CONFIG_FILE),X0=1e4,Is,ws,Lt,Eu,fu,zo,Mi,Wo;Wo===void 0&&bR();gE.exports={notify:wR,fatal:CR,error:Jo,warn:RE,info:hu,debug:TE,trace:pE,setLogLevel:nq,log_level:Lt,loggerWithTag:Z0,suppressLogging:j0,initLogSettings:bR,setupConsoleLogging:yR,logCustomLevel:rq,closeLogFile:SE,getLogFilePath:()=>zo,OUTPUTS:NR,AuthAuditLog:aq};Q0("logger",gE.exports);function bR(e=!1){try{if(Wo===void 0||e){SE();let t=sq(),r=RR(["ROOTPATH"]);try{Wo=OR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Fn.pathExistsSync(Cs.join(r.ROOTPATH,et.HDB_CONFIG_FILE)))throw s}({level:Lt,config_log_path:fu,to_file:Is,to_stream:ws}=iq(r.ROOTPATH?Cs.join(r.ROOTPATH,et.HDB_CONFIG_FILE):Wo.get("settings_path"))),Eu=et.LOG_NAMES.HDB,zo=Cs.join(fu,Eu)}}catch(t){if(Wo=void 0,t.code===et.NODE_ERROR_CODES.ENOENT){let r=RR(Object.keys(et.CONFIG_PARAM_MAP),!0);for(let o in r){let c=et.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===et.CONFIG_PARAMS.LOGGING_LEVEL){Lt=u;continue}if(c===et.CONFIG_PARAMS.LOGGING_STDSTREAMS){ws=u;continue}c===et.CONFIG_PARAMS.LOGGING_FILE&&(Is=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=oq();Is=Is===void 0?n:Is,Is=gR(Is),ws=ws===void 0?i:ws,ws=gR(ws),Lt=Lt===void 0?s:Lt,fu=z0,Eu=et.LOG_NAMES.INSTALL,zo=Cs.join(fu,Eu);return}throw Jo("Error initializing log settings"),Jo(t),t}yR()}a(bR,"initLogSettings");var hE=!0;function yR(){Li("error",Jo),Li("warn",RE),Li("log",hu),Li("info",hu),Li("debug",TE),Li("trace",pE)}a(yR,"setupConsoleLogging");function Li(e,t){console[e]=function(...r){if(hE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Qo[e](...r)}}a(Li,"logConsole");function Z0(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(wR),fatal:r(CR),error:r(Jo),warn:r(RE),info:r(hu),debug:r(TE),trace:r(pE)};function r(s){return function(...n){return s(t,...n)}}}a(Z0,"loggerWithTag");function j0(e){try{hE=!1,e()}finally{hE=!0}}a(j0,"suppressLogging");var eq=Y0?.name?.replace(/ /g,"-")||"main";function Us(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||eq+"/"+K0);c<n;c++){let l=t[c];l instanceof Error&&l.stack?s+=l.stack:typeof l=="object"?s+=JSON.stringify(l):s+=l,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
3
- `}a(Us,"createLogRecord");function Xo(e){Is&&IR(e),ws&&process.stdout.write(e)}a(Xo,"logStdOut");function mu(e){Is&&IR(e),ws&&process.stderr.write(e)}a(mu,"logStdErr");function IR(e){tq(),Mi?Fn.appendFileSync(Mi,e):Qo.log(e)}a(IR,"logToFile");function SE(){try{Fn.closeSync(Mi)}catch{}Mi=null}a(SE,"closeLogFile");function tq(){if(!Mi){try{if(!zo)debugger;Mi=Fn.openSync(zo,"a")}catch(e){Qo.error(e)}setTimeout(()=>{SE()},X0).unref()}}a(tq,"openLogFile");function hu(...e){Mt[Lt]<=Mt.info&&Xo(Us("info",e))}a(hu,"info");function pE(...e){Mt[Lt]<=Mt.trace&&Xo(Us("trace",e))}a(pE,"trace");function Jo(...e){Mt[Lt]<=Mt.error&&mu(Us("error",e))}a(Jo,"error");function TE(...e){Mt[Lt]<=Mt.debug&&Xo(Us("debug",e))}a(TE,"debug");function wR(...e){Mt[Lt]<=Mt.notify&&Xo(Us("notify",e))}a(wR,"notify");function CR(...e){Mt[Lt]<=Mt.fatal&&mu(Us("fatal",e))}a(CR,"fatal");function RE(...e){Mt[Lt]<=Mt.warn&&mu(Us("warn",e))}a(RE,"warn");function rq(e,t,...r){t===NR.STDERR?mu(Us(e,r)):Xo(Us(e,r))}a(rq,"logCustomLevel");function sq(){let e;try{e=W0.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Cs.join(e,et.HDB_HOME_DIR_NAME,et.BOOT_PROPS_FILE_NAME);return Fn.existsSync(t)||(t=Cs.join(mE,"utility/hdb_boot_properties.file")),t}a(sq,"getPropsFilePath");function nq(e){Lt=e}a(nq,"setLogLevel");function gR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(gR,"autoCastBoolean");function iq(e){try{if(e.includes("config/settings.js")){let o=OR(e);return{level:o.get(et.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Cs.dirname(o.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(et.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=AR.parseDocument(Fn.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===et.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(iq,"getLogConfig");function oq(){try{let e=AR.parseDocument(Fn.readFileSync(J0,"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 aq(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(aq,"AuthAuditLog")});var DR=m((Bte,UR)=>{"use strict";var cq=require("util"),uq=require("path"),lq=require("child_process"),_q=cq.promisify(lq.execFile),dq=1e3*1e3*10;UR.exports={findPs:Eq};async function Eq(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await _q("ps",["wwxo",`pid,${r}`],{maxBuffer:dq});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:uq.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(Eq,"findPs")});var xe=m((qte,MR)=>{"use strict";var fq="__dbis__",hq="__txns__",mq="__environment_name__",Sq="__dbi_defintion__",pq={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"},Tq=["__createdtime__","__updatedtime__"],Rq="\uFFFF",LR={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},gq=Object.values(LR);MR.exports={AUDIT_STORE_NAME:hq,INTERNAL_DBIS_NAME:fq,DBI_DEFINITION_NAME:Sq,SEARCH_TYPES:pq,TIMESTAMP_NAMES:Tq,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:mq,TRANSACTIONS_DBI_NAMES_ENUM:LR,TRANSACTIONS_DBIS:gq,OVERFLOW_MARKER:Rq}});var rr=m((Fte,kR)=>{"use strict";var PR=A(),vR=xe(),BR={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},HR=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),qR={500:HR("There was an error processing your request."),400:"Invalid request"},Aq=qR[BR.INTERNAL_SERVER_ERROR],Oq={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.`},Nq={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},bq={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"},yq={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 ${vR.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${vR.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"},Iq={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${PR.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 ${PR.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"},FR={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"},wq={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."},Cq={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`},Uq={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"},Dq={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Lq={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`},GR={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.`},xR={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}`},Mq={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."},Pq={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},vq={...FR,...bq,...Oq,...wq,...Cq,...Uq,...Dq,...Lq,...Iq,...GR,...xR,...Mq,...Pq,...Nq};kR.exports={CHECK_LOGS_WRAPPER:HR,HDB_ERROR_MSGS:vq,DEFAULT_ERROR_MSGS:qR,DEFAULT_ERROR_RESP:Aq,HTTP_STATUS_CODES:BR,LMDB_ERRORS_ENUM:yq,AUTHENTICATION_ERROR_MSGS:FR,VALIDATION_ERROR_MSGS:GR,ITC_ERRORS:xR}});var W=m((xte,YR)=>{"use strict";var Pi=rr(),Bq=x(),Hq=A(),Su=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,VR),this.statusCode=s||Pi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Pi.DEFAULT_ERROR_MSGS[s]?Pi.DEFAULT_ERROR_MSGS[s]:Pi.DEFAULT_ERROR_MSGS[Pi.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&&Bq[n](i)}},AE=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}},OE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function VR(e,t,r,s=Hq.LOG_LEVELS.ERROR,n=null,i=!1){if($R(e))return e;let o=new Su(e,t,r,s,n);return i&&delete o.stack,o}a(VR,"handleHDBError");function $R(e){return e.__proto__.constructor.name===Su.name}a($R,"isHDBError");YR.exports={isHDBError:$R,handleHDBError:VR,ClientError:AE,ServerError:OE,hdb_errors:Pi}});var WR=m((Vte,KR)=>{"use strict";var qq={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))},Fq="certificate.pem",Gq="privateKey.pem",xq="ca.pem";KR.exports={CERTIFICATE_VALUES:qq,CERTIFICATE_PEM_NAME:Fq,PRIVATEKEY_PEM_NAME:Gq,CA_PEM_NAME:xq}});var Pe=m(($te,QR)=>{"use strict";var Pt=require("validate.js");Pt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Pt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Pt.validators.type.checks={Object:function(e){return Pt.isObject(e)&&!Pt.isArray(e)},Array:Pt.isArray,Integer:Pt.isInteger,Number:Pt.isNumber,String:Pt.isString,Date:Pt.isDate,Boolean:function(e){return typeof e=="boolean"}};Pt.validators.hasValidFileExt=function(e,t){return Pt.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};QR.exports={validateObject:kq,validateObjectAsync:Vq,validateBySchema:$q};function kq(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Pt(e,t,{format:"flat"});return r?new Error(r):null}a(kq,"validateObject");async function Vq(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Pt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(Vq,"validateObjectAsync");function $q(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a($q,"validateBySchema")});var bE=m((Wte,eg)=>{"use strict";var ZR=require("fs-extra"),ee=require("joi"),Yq=require("os"),{boolean:pe,string:Ls,number:sr,array:NE}=ee.types(),{totalmem:zR}=require("os"),vi=require("path"),Kq=x(),Tu=V(),Kte=WR(),JR=A(),Wq=Pe(),XR="log",Qq="components",zq="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Jq="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Xq="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Zq="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",jq="rootPath config parameter is undefined",eF="clustering.enabled config parameter is undefined",Ds=sr.min(0).required(),Ru=NE.items({host:Ls.required(),port:Ds}).empty(null),Ms;eg.exports={configValidator:tF,routesValidator:aF,route_constraints:Ru};function tF(e){if(Ms=e.rootPath,Tu.isEmpty(Ms))throw jq;let t=pe.required(),r=ee.valid("production","development").required(),s=sr.min(0).max(1e3).empty(null).default(oF),n=Ls.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(pu),i=ee.custom(rF).messages({"any.custom":"{:#label} {:#error}"}),o=Ls.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ee.string().empty(null).default(pu),u=ee.custom(sF).empty(null).default(pu),l=e.clustering?.enabled;if(Tu.isEmpty(l))throw eF;let _;return l===!0?_=ee.object({enabled:t,hubServer:ee.object({cluster:ee.object({name:ee.required().empty(null),network:ee.object({port:Ds,routes:Ru}).required()}).required(),leafNodes:ee.object({network:ee.object({port:Ds}).required()}).required(),network:ee.object({port:Ds}).required()}).required(),leafServer:ee.object({network:ee.object({port:Ds,routes:Ru}).required(),streams:ee.object({maxAge:sr.min(120).allow(null).optional(),maxBytes:sr.min(1).allow(null).optional(),maxMsgs:sr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ee.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:pe.optional(),databaseLevel:pe.optional(),tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:pe.required(),verify:pe.optional()}),user:Ls.optional().empty(null)}).required():_=ee.object({enabled:t,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:pe.required()})}).required(),ee.object({authentication:ee.object({authorizeLocal:pe,cacheTTL:sr.required(),enableSessions:pe,operationTokenTimeout:ee.required(),refreshTokenTimeout:ee.required()}),analytics:ee.object({aggregatePeriod:sr}),clustering:_,customFunctions:ee.object({enabled:t,network:ee.object({cors:pe.required(),corsAccessList:NE.required(),headersTimeout:sr.min(1).required(),https:pe.required(),keepAliveTimeout:sr.min(1).required(),port:Ds,timeout:sr.min(1).required()}),nodeEnv:r,root:n,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:ee.object({enabled:t}).required(),logging:ee.object({auditAuthEvents:ee.object({logFailed:pe,logSuccessful:pe}),file:pe.required(),level:ee.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ee.object({enabled:pe.optional(),compress:pe.optional(),interval:Ls.custom(iF).optional().empty(null),maxSize:Ls.custom(nF).optional().empty(null),path:Ls.optional().empty(null).default(pu)}).required(),root:n,stdStreams:pe.required(),auditLog:pe.required()}).required(),operationsApi:ee.object({foreground:pe.required(),network:ee.object({cors:pe.required(),corsAccessList:NE.required(),headersTimeout:sr.min(1).required(),https:pe.required(),keepAliveTimeout:sr.min(1).required(),port:Ds,timeout:sr.min(1).required()}).required(),nodeEnv:r,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Ls.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ee.object({network:ee.object({port:Ds,securePort:Ds}).required(),webSocket:pe.optional(),requireAuthentication:pe.optional()}),http:ee.object({threads:s}).required(),storage:ee.object({writeAsync:pe.required(),overlappingSync:pe.optional(),caching:pe.optional(),compression:pe.optional(),noReadAhead:pe.optional(),path:u,prefetchWrites:pe.optional()}).required(),ignoreScripts:pe.optional()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(tF,"configValidator");function jR(e){return ZR.existsSync(e)?null:`Specified path ${e} does not exist.`}a(jR,"doesPathExist");function rF(e,t){if(e===null)return;let r=jR(e);return r?t.message(r):e}a(rF,"validatePemFile");function sF(e,t){ee.assert(e,Ls.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=jR(e);if(r)return t.message(r)}a(sF,"validatePath");function nF(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(zq);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(Xq):e}a(nF,"validateRotationMaxSize");function iF(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Jq);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(Zq):e}a(iF,"validateRotationInterval");function oF(e,t){let r=t.state.path.join("."),s=Yq.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||zR();return i=Math.round(Math.min(i,zR())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),Kq.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(oF,"setDefaultThreads");function pu(e,t){if(!Tu.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Tu.isEmpty(Ms))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return vi.join(Ms,Qq);case"logging.root":return vi.join(Ms,XR);case"clustering.leafServer.streams.path":return vi.join(Ms,"clustering","leaf");case"storage.path":let s=vi.join(Ms,JR.LEGACY_DATABASES_DIR_NAME);return ZR.existsSync(s)?s:vi.join(Ms,JR.DATABASES_DIR_NAME);case"logging.rotation.path":return vi.join(Ms,XR);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(pu,"setDefaultRoot");function aF(e){let t=ee.object({routes:Ru});return Wq.validateBySchema({routes:e},t)}a(aF,"routesValidator")});var gu={};je(gu,{server:()=>tt});var tg,tt,Xr=Se(()=>{tg=require("../index"),tt={};(0,tg._assignPackageExport)("server",tt)});var Tr=m((Jte,_g)=>{"use strict";var pr=A(),lt=V(),rt=x(),{configValidator:cF,routesValidator:rg}=bE(),vt=require("fs-extra"),uF=require("yaml"),Pr=require("path"),lF=require("is-number"),ng=require("properties-reader"),_F=require("lodash"),{handleHDBError:dF}=W(),{HTTP_STATUS_CODES:EF,HDB_ERROR_MSGS:Au}=rr(),zte=require("minimist"),{server:fF}=(Xr(),re(gu)),{SCHEMAS_PARAM_CONFIG:Zo,CONFIG_PARAMS:un,CONFIG_PARAM_MAP:Ps}=pr,hF="Unable to get config value because config is uninitialized",mF="Config successfully initialized",SF="Error backing up config file",pF="Empty parameter sent to getConfigValue",ig=Pr.join(pr.PACKAGE_ROOT,"config","yaml",pr.HDB_DEFAULT_CONFIG_FILE),TF="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",sg={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"},Ou,ft;_g.exports={createConfigFile:RF,getDefaultConfig:gF,getConfigValue:ag,initConfig:cg,flattenConfig:xn,updateConfigValue:ug,updateConfigObject:OF,getConfiguration:yF,setConfiguration:IF,readConfigFile:wE,getClusteringRoutes:wF,initOldConfig:lg,getConfigFromFile:CF,getConfigFilePath:Gn,addConfig:UF,deleteConfigFromFile:DF};function RF(e){let t=ln(ig);Ou=xn(t.toJSON());let r;for(let o in e){let c=Ps[o.toLowerCase()];if(c===un.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=yE(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){rt.error(_)}}}r&&og(t,r),IE(t);let s=t.toJSON();ft=xn(s);let n=t.getIn(["rootPath"]),i=Pr.join(n,pr.HDB_CONFIG_FILE);vt.createFileSync(i),vt.writeFileSync(i,String(t)),rt.trace(`Config file written to ${i}`)}a(RF,"createConfigFile");function og(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!lt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Zo.TABLES))for(let i in s[n][Zo.TABLES])for(let o in s[n][Zo.TABLES][i]){let c=s[n][Zo.TABLES][i][o],u=[un.SCHEMAS,n,Zo.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=[un.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){rt.error("Error parsing schemas CLI/env config arguments",s)}}a(og,"setSchemasConfig");function gF(e){if(Ou===void 0){let r=ln(ig);Ou=xn(r.toJSON())}let t=Ps[e.toLowerCase()];if(t!==void 0)return Ou[t.toLowerCase()]}a(gF,"getDefaultConfig");function ag(e){if(e==null){rt.error(pF);return}if(ft===void 0){rt.trace(hF);return}let t=Ps[e.toLowerCase()];if(t!==void 0)return ft[t.toLowerCase()]}a(ag,"getConfigValue");function Gn(e=lt.getPropsFilePath()){let t=lt.getEnvCliRootPath();return t?Pr.join(t,pr.HDB_CONFIG_FILE):ng(e).get(pr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Gn,"getConfigFilePath");function cg(e=!1){if(ft===void 0||e){let t;if(!lt.noBootFile()){t=lt.getPropsFilePath();try{vt.accessSync(t,vt.constants.F_OK|vt.constants.R_OK)}catch(i){throw rt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Gn(t),s;if(r.includes("config/settings.js"))try{lg(r);return}catch(i){if(i.code!==pr.NODE_ERROR_CODES.ENOENT)throw i}try{s=ln(r)}catch(i){if(i.code===pr.NODE_ERROR_CODES.ENOENT){rt.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 rt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}AF(s,r),IE(s);let n=s.toJSON();if(fF.config=n,ft=xn(n),ft.logging_rotation_rotate)for(let i in sg)ft[i]&&rt.error(`Config ${sg[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);rt.trace(mF)}}a(cg,"initConfig");function AF(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Pr.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Pr.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Pr.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(rt.trace("Updating config file with missing config params"),vt.writeFileSync(t,String(e)))}a(AF,"checkForUpdatedConfig");function IE(e){let t=e.toJSON(),r=cF(t);if(r.error)throw Au.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),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(IE,"validateConfig");function OF(e,t){ft===void 0&&(ft={});let r=Ps[e.toLowerCase()];if(r===void 0){rt.trace(`Unable to update config object because config param '${e}' does not exist`);return}ft[r.toLowerCase()]=t}a(OF,"updateConfigObject");function ug(e,t,r=void 0,s=!1,n=!1,i=!1){ft===void 0&&cg();let o=ag(Ps.hdb_root),c=Pr.join(o,pr.HDB_CONFIG_FILE),u=ln(c),l;if(r===void 0&&e.toLowerCase()===un.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Ps[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=yE(E,t);u.setIn([...f],h)}else for(let E in r){let f=Ps[E.toLowerCase()];if(f===un.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),p=yE(f,r[E]);f==="rootPath"&&p?.endsWith("/")&&(p=p.slice(0,-1));try{u.setIn([...h],p)}catch(T){rt.error(T)}}}l&&og(u,l),IE(u);let _=u.getIn(["rootPath"]),d=Pr.join(_,pr.HDB_CONFIG_FILE);s===!0&&NF(c,_),vt.writeFileSync(d,String(u)),n&&(ft=xn(u.toJSON())),rt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(ug,"updateConfigValue");function NF(e,t){try{let r=Pr.join(t,"backup",`${pr.HDB_CONFIG_FILE}.bak`);vt.copySync(e,r),rt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){rt.error(SF),rt.error(r)}}a(NF,"backupConfigFile");var bF=["schemas"];function xn(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!bF.includes(r)){let s=xn(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(xn,"flattenConfig");function yE(e,t){if(e===un.CLUSTERING_NODENAME||e===un.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(lF(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||lt.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 lt.autoCast(t)}a(yE,"castConfigValue");function yF(){let e=lt.getPropsFilePath(),t=Gn(e);return ln(t).toJSON()}a(yF,"getConfiguration");async function IF(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return ug(void 0,void 0,n,!0),TF}catch(i){throw typeof i=="string"||i instanceof String?dF(i,i,EF.BAD_REQUEST,void 0,void 0,!0):i}}a(IF,"setConfiguration");function wE(){let e=lt.getPropsFilePath();try{vt.accessSync(e,vt.constants.F_OK|vt.constants.R_OK)}catch(s){if(!lt.noBootFile())throw rt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Gn(e);return ln(t).toJSON()}a(wE,"readConfigFile");function ln(e){return uF.parseDocument(vt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ln,"parseYamlDoc");function wF(){let e=wE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=lt.isEmptyOrZeroLength(t)?[]:t;let r=rg(t);if(r)throw Au.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=lt.isEmptyOrZeroLength(s)?[]:s;let n=rg(s);if(n)throw Au.CONFIG_VALIDATION(n.message);if(!lt.isEmptyOrZeroLength(s)&&!lt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!lt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Au.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(wF,"getClusteringRoutes");function lg(e){let t=ng(e);ft={};for(let r in Ps){let s=t.get(r.toUpperCase());if(lt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Ps[r].toLowerCase();n===un.LOGGING_ROOT?ft[n]=Pr.dirname(s):ft[n]=s}return ft}a(lg,"initOldConfig");function CF(e){let t=wE();return _F.get(t,e.replaceAll("_","."))}a(CF,"getConfigFromFile");async function UF(e,t){let r=ln(Gn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await vt.writeFile(Gn(),String(r))}a(UF,"addConfig");function DF(e){let t=Gn(lt.getPropsFilePath()),r=ln(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Pr.join(s,pr.HDB_CONFIG_FILE);vt.writeFileSync(n,String(r))}a(DF,"deleteConfigFromFile")});var Q=m((Zte,fg)=>{"use strict";var CE=require("fs-extra"),vr=require("path"),dg=require("os"),LF=require("properties-reader"),jo=x(),kn=V(),te=A(),Nu=Tr(),MF="Error initializing environment manager",bu="BOOT_PROPS_FILE_PATH",Eg=!1,PF={[te.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},vs={};fg.exports={BOOT_PROPS_FILE_PATH:bu,getHdbBasePath:vF,setHdbBasePath:BF,get:HF,initSync:FF,setProperty:Ee,initTestEnvironment:GF};function vF(){return vs[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(vF,"getHdbBasePath");function BF(e){vs[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(BF,"setHdbBasePath");function HF(e){let t=Nu.getConfigValue(e);return t===void 0?vs[e]:t}a(HF,"get");function Ee(e,t){PF[e]&&(vs[e]=t),Nu.updateConfigObject(e,t)}a(Ee,"setProperty");function qF(){let e;try{e=kn.getPropsFilePath(),CE.accessSync(e,CE.constants.F_OK|CE.constants.R_OK),Eg=!0;let t=LF(e);return vs[te.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(te.HDB_SETTINGS_NAMES.INSTALL_USER),vs[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),vs[bu]=e,!0}catch{return jo.trace(`Environment manager found no properties file at ${e}`),!1}}a(qF,"doesPropFileExist");function FF(e=!1){try{(Eg||qF()||kn.noBootFile())&&(Nu.initConfig(e),vs[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Nu.getConfigValue(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){jo.error(MF),jo.error(t),console.error(t),process.exit(1)}}a(FF,"initSync");function GF(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=vr.join(__dirname,"../../","unitTests");vs[bu]=vr.join(u,"hdb_boot_properties.file"),Ee(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,vr.join(u,"settings.test")),Ee(te.HDB_SETTINGS_NAMES.INSTALL_USER,dg.userInfo()?dg.userInfo().username:void 0),Ee(te.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,vr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.HDB_SETTINGS_NAMES.CERT_KEY,vr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,vr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,vr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ee(te.HDB_SETTINGS_NAMES.LOG_PATH_KEY,vr.join(u,"envDir","log")),Ee(te.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ee(te.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ee(te.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ee(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,vr.join(u,"envDir")),Ee(te.CONFIG_PARAMS.STORAGE_PATH,vr.join(u,"envDir")),Ee(te.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,kn.isEmpty(n)?!0:n),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,kn.isEmpty(n)?!0:n),Ee(te.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(te.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,kn.isEmpty(i)?!1:i),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,kn.isEmpty(i)?!1:i),Ee(te.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ee(te.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,vr.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ee(te.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,kn.isEmpty(c)?!1:c),o&&(Ee("CORS_ACCESSLIST",o),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${bu}. Please check your boot props and settings files`;jo.fatal(r),jo.error(t)}}a(GF,"initTestEnvironment")});var we=m((ere,gg)=>{"use strict";var na=A(),xF=V(),Bt=Q(),ia=require("path"),kF=require("minimist"),hg=require("fs-extra"),mg=require("lodash");Bt.initSync();var{CONFIG_PARAMS:_n,SCHEMAS_PARAM_CONFIG:ea,SYSTEM_SCHEMA_NAME:yu}=na,ta,ra,sa;function Sg(){if(ta!==void 0)return ta;if(Bt.getHdbBasePath()!==void 0)return ta=Bt.get(_n.STORAGE_PATH)||ia.join(Bt.getHdbBasePath(),na.DATABASES_DIR_NAME),ta}a(Sg,"getBaseSchemaPath");function pg(){if(ra!==void 0)return ra;if(Bt.getHdbBasePath()!==void 0)return ra=Rg(yu),ra}a(pg,"getSystemSchemaPath");function Tg(){if(sa!==void 0)return sa;if(Bt.getHdbBasePath()!==void 0)return sa=Bt.get(na.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ia.join(Bt.getHdbBasePath(),na.TRANSACTIONS_DIR_NAME),sa}a(Tg,"getTransactionAuditStoreBasePath");function VF(e,t){let r=Bt.get(_n.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ia.join(Tg(),e.toString())}a(VF,"getTransactionAuditStorePath");function Rg(e,t){e=e.toString(),t=t&&t.toString();let r=Bt.get(na.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ia.join(Sg(),e)}a(Rg,"getSchemaPath");function $F(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,kF(process.argv));let s=r[_n.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!xF.isObject(s))throw o;i=s}for(let o of i){let c=o[yu];if(!c)continue;let u=Bt.get(_n.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[ea.PATH];if(l)return mg.set(u,[yu,ea.TABLES,t,ea.PATH],l),Bt.setProperty(_n.SCHEMAS,u),l;let _=c?.[ea.PATH];if(_)return mg.set(u,[yu,ea.PATH],_),Bt.setProperty(_n.SCHEMAS,u),_}}let n=r[_n.STORAGE_PATH.toUpperCase()];if(n){if(!hg.pathExistsSync(n))throw new Error(n+" does not exist");let i=ia.join(n,e);return hg.mkdirsSync(i),Bt.setProperty(_n.STORAGE_PATH,n),i}return pg()}a($F,"initSystemSchemaPaths");function YF(){ta=void 0,ra=void 0,sa=void 0}a(YF,"resetPaths");gg.exports={getBaseSchemaPath:Sg,getSystemSchemaPath:pg,getTransactionAuditStorePath:VF,getTransactionAuditStoreBasePath:Tg,getSchemaPath:Rg,initSystemSchemaPaths:$F,resetPaths:YF}});var Ht=m((nre,yg)=>{"use strict";var KF=rr().LMDB_ERRORS_ENUM,rre=require("lmdb"),WF=xe(),sre=require("buffer").Buffer,{OVERFLOW_MARKER:Ag,MAX_SEARCH_KEY_LENGTH:Iu}=WF,Og=["number","string","symbol","boolean","bigint"];function QF(e){if(e=e?.primaryStore||e,!e)throw new Error(KF.ENV_REQUIRED)}a(QF,"validateEnv");function zF(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(zF,"stringifyData");function JF(e){return e instanceof Date?e.valueOf():e}a(JF,"convertKeyValueToWrite");function XF(e){if(e==null)return;if(Og.includes(typeof e))return e.length>Iu?[e.slice(0,Iu)+Ag]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(Og.includes(typeof n))n.length>Iu?t.push(n.slice(0,Iu)+Ag):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(XF,"getIndexedValues");var wu=0,Ng=0;function bg(){Ng=Date.now()-performance.now()}a(bg,"adjustStartTime");bg();var ZF=6e4;setInterval(bg,ZF).unref();function jF(){let e=performance.now()+Ng;return e>wu?(wu=e,e):(wu+=488e-6,wu)}a(jF,"getNextMonotonicTime");yg.exports={validateEnv:QF,stringifyData:zF,convertKeyValueToWrite:JF,getNextMonotonicTime:jF,getIndexedValues:XF}});var Ig,Zr,UE,oa=Se(()=>{Ig=require("events"),Zr=class extends Ig.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new UE;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)}},UE=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 aa(e){return e[ht]||(e[ht]=Object.create(null))}function Mu(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u={get(){let l=this[ht];if(l&&c in l)return l[c];let _=this[ce]?.[c];if(_&&typeof _=="object"){let d=wg(_,o);if(d)return l||(l=this[ht]=Object.create(null)),l[c]=d}return _},set(l){aa(this)[c]=l},enumerable:!0,configurable:!0};switch(u.get.isAttribute=!0,o.type){case"String":u.set=function(l){if(typeof l!="string")throw(0,Cu.ClientError)(`${c} must be a string, attempt to assign ${l}`);aa(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,Cu.ClientError)(`${c} must be a string, attempt to assign ${l}`);aa(this)[c]=l};break}s[c]=u,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,u)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[ht];return u?.[o]!==void 0?u[o]:this[ce]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new Cu.ClientError("Can not add a property to a sealed table schema");aa(this)[o]=c}),i("deleteProperty",function(o){aa(this)[o]=void 0}),i("toJSON",function(){let o=this[ht],c;for(let l in o)c||(c=Object.assign({},this[ce])),c[l]=o[l];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ce])),Object.assign(c,this)),c||this[ce]}),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 wg(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[ce]=n}},Mu(r,t)),new r(e)):new Uu(e);case Array:let s=new Lu(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=wg(o,t?.elements)),s[n]=o}return s}}function Pu(e){let t=e[ht],r;for(let n in t){r||(r=Object.assign({},e[ce]));let i=t[n];i&&typeof i=="object"&&(i=Pu(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ce])),Object.assign(r,e)),r||e[ce]}function ca(e){let t;if(e[ce]&&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=ca(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[ht];for(let s in r){t||(t=Object.assign({},e[ce]));let n=r[s];n&&typeof n=="object"&&(n=ca(n)),t[s]=n}return t?Object.freeze(t):e[ce]||Object.freeze(e)}function Du(e){let t=e[ce];if(!t)return!0;if(e.constructor===Array){if(e[Vn]||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?.[ce]===n){if(Du(i))return!0}else return!0}}else{let r=e[ht];for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ce]===i){if(Du(n))return!0}else return!0}else return!0}}return!1}var Cu,ht,Uu,Vn,Lu,vu=Se(()=>{jr();Cu=C(W()),ht=Symbol("own-data");a(aa,"getChanges");a(Mu,"assignTrackedAccessors");a(wg,"trackObject");Uu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};Mu(Uu,{});a(Pu,"collapseData");a(ca,"deepFreeze");a(Du,"hasChanges");Vn=Symbol.for("has-array-changes"),Lu=class extends Array{static{a(this,"TrackedArray")}[Vn];constructor(t){super(t)}splice(...t){return this[Vn]=!0,super.splice(...t)}push(...t){return this[Vn]=!0,super.push(...t)}pop(){return this[Vn]=!0,super.pop()}unshift(...t){return this[Vn]=!0,super.unshift(...t)}shift(){return this[Vn]=!0,super.shift()}};Lu.prototype.constructor=Array});function Ye(e,t){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 r=e.transaction=new DE;e.timestamp&&(r.timestamp=e.timestamp),r[Ae]=e,e.resourceCache=[];let s;try{if(s=t(r),s?.then)return s.then(n,i)}catch(o){i(o)}return n(s);function n(o){let c=r.commit();return c.then?c.then(()=>(e.transaction=null,o)):(e.transaction=null,o)}function i(o){throw r.abort(),e.transaction=null,o}}var Cg,Ug,DE,$n=Se(()=>{Cg=C(Ht()),Ug=require("../index");jr();a(Ye,"transaction");(0,Ug._assignPackageExport)("transaction",Ye);Ye.commit=function(e){let t=(e[Ae]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ye.abort=function(e){let t=(e[Ae]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()};DE=class extends Array{static{a(this,"TransactionSet")}commit(t=!0){let r=[],s=this.length;for(let n=0;n<s;n++)this[n].validate?.();this.timestamp||(this.timestamp=(0,Cg.getNextMonotonicTime)());for(let n=0;n<s;n++){let o=this[n].commit(this.timestamp,t);o?.then&&r.push(o)}return r.length>0?Promise.all(r).then(()=>(this.splice(0,s),this.commit(t))):this.length>s?(this.splice(0,s),this.commit(t)):(this.length=0,{txnTime:this.timestamp})}abort(){for(let t of this)t.abort?.()}doneReading(){for(let t of this)t.doneReading?.()}}});function PE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,l,_=e[1]??e.value;_ instanceof Date&&(_=_.getTime());let d=e.comparator,E;switch(tG[d]||d){case"lt":o=!0,c=_;break;case"le":o=!0,c=_,u=!0;break;case"gt":o=_,l=!0;break;case"ge":o=_;break;case"prefix":o=_,c=_.slice(0),c[c.length-1]=ts.MAXIMUM_KEY;break;case"starts_with":o=_.toString(),c=_+String.fromCharCode(65535);break;case"between":o=_[0],o instanceof Date&&(o=o.getTime()),c=_[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case _t.SEARCH_TYPES.EQUALS:case void 0:o=_,c=_,u=!0;break;case"ne":case"contains":case"ends_with":E=!0;break}if(r){let T=o;o=c,c=T,T=!l,l=!u,u=T}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new LE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let T=vE(e);if(!T)throw new LE.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:g,value:O})=>new Promise(k=>setImmediate(()=>k(T(O)?g:Lg.SKIP))))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(p):h.getRange(p).map(({value:T})=>T)}function vE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case _t.SEARCH_TYPES.EQUALS:case void 0:return es(r,n=>n===s);case _t.SEARCH_TYPES.CONTAINS:return es(r,n=>n?.toString().includes(s));case _t.SEARCH_TYPES.ENDS_WITH:case _t.SEARCH_TYPES._ENDS_WITH:return es(r,n=>n?.toString().endsWith(s));case _t.SEARCH_TYPES.STARTS_WITH:case _t.SEARCH_TYPES._STARTS_WITH:return es(r,n=>typeof n=="string"&&n.startsWith(s));case _t.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),es(r,n=>(0,ts.compareKeys)(n,s[0])>=0&&(0,ts.compareKeys)(n,s[1])<=0);case"gt":case _t.SEARCH_TYPES.GREATER_THAN:case _t.SEARCH_TYPES._GREATER_THAN:return es(r,n=>(0,ts.compareKeys)(n,s)>0);case"ge":case _t.SEARCH_TYPES.GREATER_THAN_EQUAL:case _t.SEARCH_TYPES._GREATER_THAN_EQUAL:return es(r,n=>(0,ts.compareKeys)(n,s)>=0);case _t.SEARCH_TYPES.LESS_THAN:case"lt":case _t.SEARCH_TYPES._LESS_THAN:return es(r,n=>(0,ts.compareKeys)(n,s)<0);case"le":case _t.SEARCH_TYPES.LESS_THAN_EQUAL:case _t.SEARCH_TYPES._LESS_THAN_EQUAL:return es(r,n=>(0,ts.compareKeys)(n,s)<=0);case"ne":return es(r,n=>(0,ts.compareKeys)(n,s)!==0);default:return}}function es(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 Bu(e){if(!e)return;let t=new ME,r,s,n,i,o;for(;r=Dg.exec(e);){i=Dg.lastIndex;let[,c,u]=r;switch(u){case")":switch(o){case"limit":if(c.indexOf(",")>-1){let[l,_]=c.split(",");t.offset=+l,t.limit=_-t.offset}else t.limit=+c;break;case"select":if(c[0]==="["){if(c[c.length-1]!=="]")throw new Error("Unmatched brackets");t.select=c.slice(1,-1).split(","),t.select.asArray=!0}else c.indexOf(",")>-1?t.select=(c.endsWith(",")?c.slice(0,-1):c).split(","):t.select=c;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=c.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}`)}break;case"(":o=c;break;case"=":s?c.length<=2&&(n=c):(n="equals",s=decodeURIComponent(c));break;case"!=":case"<":case"<=":case">":case">=":n=eG[u],s=decodeURIComponent(c);break;case"=*":n="ends_with",s=decodeURIComponent(c);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(c)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${u} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(c)}),s=void 0;break;default:throw new Error(`Unknown operator ${u} in query ${e}`)}}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var LE,_t,ts,Lg,Dg,eG,tG,ME,Hu=Se(()=>{LE=C(W()),_t=C(xe()),ts=require("ordered-binary"),Lg=require("lmdb"),Dg=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,eG={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(PE,"idsForCondition");tG={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(vE,"filterByType");a(es,"attributeComparator");a(Bu,"parseQuery");ME=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 qE={};je(qE,{CONTEXT:()=>Ae,ID_PROPERTY:()=>ae,IS_COLLECTION:()=>Bs,RECORD_PROPERTY:()=>ce,Resource:()=>mt,SAVE_UPDATES_PROPERTY:()=>qg,snake_case:()=>sG});function sG(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Mg(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 HE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Rr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,l;if(r?o?(l=i,o=o[Ae]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Ae]||i):l=i:(l=n,c=l[ae]??l[this.primaryKey]??null):i?o=i[Ae]||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 E of n){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let E=c.indexOf("?");if(E>-1){let h=this.parseQuery(c.slice(E+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,E)}let f=this.parsePath(c,o,u);f?.query?(u=f.query,c=f.id):c=f}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let _;if(u?.allowInvalidated?(_=Object.assign({},t),_.allowInvalidated=!0):_=t,o.transaction){let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)}else return Ye(o,()=>{let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)});function d(E){if(t.type==="read"&&(E[qg]=!1),o.authorize){o.authorize=!1;let f=t.type==="read"?E.allowRead(o.user,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,o):E.allowUpdate(o.user,o):t.type==="create"?E.allowCreate(o.user,o):E.allowDelete(o.user,o);if(f?.then)return f.then(h=>{if(!h)throw new qu(o.user);return typeof l?.then=="function"?l.then(p=>e(E,u,o,p)):e(E,u,o,l)});if(!f)throw new qu(o.user)}return typeof l?.then=="function"?l.then(f=>e(E,u,o,f)):e(E,u,o,l)}a(d,"authorizeActionOnResource")}}function gr(e,t){let r=new Hg.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[ce];if(t){let r=e[ht];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function Pg(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 vg,Bg,Hg,Ae,ae,Bs,qg,ce,rG,mt,qu,HE,jr=Se(()=>{vg=require("crypto");oa();Bg=require("../index"),Hg=C(W());vu();$n();Hu();Ae=Symbol.for("context"),ae=Symbol.for("primary-key"),Bs=Symbol("is-collection"),qg=Symbol("save-updates"),ce=Symbol("stored-record"),rG={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},mt=class{static{a(this,"Resource")}[Ae];[ae];static transactions;constructor(t,r){this[ae]=t;let s=r?.[Ae];this[Ae]=s!==void 0?s:r||null}updateModificationTime(t=Date.now()){t>this[LAST_MODIFICATION_PROPERTY]&&(this[LAST_MODIFICATION_PROPERTY]=t)}static get=Rr(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 l=Pg(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=Rr(function(t,r,s,n){if(Array.isArray(n)&&t[Bs]){let i=[],o=s.authorize;for(let c of n)o&&(s.authorize=!0),i.push(this.put(t,r,s,c));return i}return t.put?t.put(n,r):gr(t,"put")},{hasContent:!0,type:"update"});static delete=Rr(function(t,r,s,n){return t.delete?t.delete(r):gr(t,"delete")},{hasContent:!1,type:"delete",allowInvalidated:!0});static getNewId(){return(0,vg.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),Ye(s,()=>{let i=new this(n,s),o=i.put?i.put(r):gr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Rr(function(t,r,s,n){return t.invalidate?t.invalidate(r):gr(t,"delete")},{hasContent:!1,type:"update",allowInvalidated:!0});static post=Rr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Rr(function(t,r,s,n){return t.connect?t.connect(r):gr(t,"connect")},{type:"read"});static subscribe=Rr(function(t,r,s,n){return t.subscribe?t.subscribe(r):gr(t,"subscribe")},{type:"read"});static publish=Rr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.publish?t.publish(n,r):gr(t,"publish")},{hasContent:!0,type:"create"});static search=Rr(function(t,r,s,n){let i=t.search?t.search(s):gr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=Pg(o);return i.map(c)}return i},{type:"read"});static query=Rr(function(t,r,s,n){return t.search?t.search(n,r):gr(t,"search")},{hasContent:!0,type:"read"});static copy=Rr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):gr(t,"copy")},{type:"create"});static move=Rr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):gr(t,"move")},{type:"delete"});post(t){if(this[Bs])return this.constructor.create(this[ae],t,this[Ae]);gr(this,"post")}static isCollection(t){return t?.[Bs]}static coerceId(t){return t}static parseQuery(t){return Bu(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&&rG[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:Mg(t,this)}}return Mg(t,this)}static getResource(t,r,s){let n,i=r[Ae],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 l=u.asMap.get(t);if(n=l?.find(_=>_.constructor===c),n)return n;l||u.asMap.set(t,l=[]),l.push(n=new c(t,i))}else{if(n=u.find(l=>l[ae]===t&&l.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let l=new Map;for(let _ of u){let d=_[ae],E=l.get(d);E?E.push(_):l.set(d,[_])}i.resourceCache.length=0,i.resourceCache.asMap=l}}}else n=new c(t,i);return o&&(n[Bs]=!0),n}connect(t){let r=new Zr;if(t?.subscribe!==!1){let s={listener:i=>{r.send(i)}},n=this.subscribe?.(s);r.on("close",()=>n?.end())}return r}update(t){throw new Error("Not implemented")}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[ae]}getContext(){return this[Ae]}};mt.prototype[Ae]=null;(0,Bg._assignPackageExport)("Resource",mt);a(sG,"snake_case");qu=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(Mg,"pathToId");HE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Rr,"transactional");a(gr,"missingMethod");a(BE,"selectFromObject");a(Pg,"transformForSelect")});var xE={};je(xE,{loadGQLSchema:()=>iG,start:()=>GE,startOnMainThread:()=>nG});function GE({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:l,StringValueNode:_}=await import("graphql"),d=o(new c(r.toString(),n)),E=new Map,f=[],h;for(let p of d.definitions)switch(p.kind){case u.OBJECT_TYPE_DEFINITION:let $=function(U){if(U.kind==="NonNullType"){let P=$(U.type);return P.nullable=!0,P}return U.kind==="ListType"?{type:"array",elements:$(U.type)}:{type:U.name?.value}};a($,"getProperty");let T=p.name.value,g=[],O={table:null,database:null,properties:g};E.set(T,O);for(let U of p.directives){if(U.name.value==="table"){for(let b of U.arguments)O[b.name.value]=b.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=T),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,f.push(O)}if(U.name.value==="sealed"&&(O.sealed=!0),U.name.value==="export"){O.export=!0;for(let b of U.arguments)b.name.value==="name"&&(O.export={name:b.value.value})}}let k=!1;for(let U of p.fields){let b=$(U.type);b.name=U.name.value,g.push(b);for(let P of U.directives)if(P.name.value==="primaryKey")k?console.warn("Can not define two attributes as a primary key"):(b.isPrimaryKey=!0,k=!0);else if(P.name.value==="indexed")b.indexed=!0;else if(P.name.value==="createdTime")b.assignCreatedTime=!0;else if(P.name.value==="updatedTime")b.assignUpdatedTime=!0;else if(P.name.value==="expiresAt")b.expiresAt=!0;else if(P.name.value==="allow"){let z=b.authorizedRoles=[];for(let q of P.arguments)q.name.value==="role"&&z.push(q.value.value)}}O.typeName=T,T==="Query"&&(h=O)}for(let[p,T]of E)for(let g of T.properties){let O=E.get(g.type);O&&(g.properties=O.properties)}for(let p of f)p.tableClass=e(p),p.export&&i.set((0,FE.dirname)(s)+"/"+(p.export.name||p.typeName),p.tableClass);if(h)for(let p of h.properties){let T=E.get(p.type);if(!T)throw new Error(`${p.type} was not found as a Query export`);i.set((0,FE.dirname)(s)+"/"+p.name,T.tableClass)}}}var FE,nG,iG,Fg=Se(()=>{FE=require("path");de();a(GE,"start");nG=GE,iG=GE({ensureTable:st}).handleFile});async function Fu(e){return oG?(ua||(ua=aG(uG)),(await(await ua).import(e)).namespace):import(e)}async function aG(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ua=new Compartment({console,Math,Date,fetch:cG,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,xg.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:mt,tables:nr,databases:ve})}};let s=await(0,Gg.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),ua}function cG(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 uG(){return{Resource:mt,tables:nr}}var Gg,xg,oG,ua,kE=Se(()=>{jr();de();Gg=require("fs/promises"),xg=require("path"),oG=!1;a(Fu,"secureImport");a(aG,"getCompartment");a(cG,"secureOnlyFetch");a(uG,"getGlobalVars")});var $E={};je($E,{handleFile:()=>lG});async function lG(e,t,r,s){let n=new Map,i=(0,kg.pathToFileURL)(r).toString(),o=await Fu(i);u(o.default)&&s.set((0,VE.dirname)(t),o.default),c(o,(0,VE.dirname)(t));function c(l,_){for(let d in l){let E=l[d];u(E)?s.set(_+"/"+d,E):typeof E=="object"&&c(E,_+"/"+d)}}a(c,"recurseForResources");function u(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(u,"isResource"),n}var kg,VE,Vg=Se(()=>{kg=require("url");kE();VE=require("path");a(lG,"handleFile")});var KE={};je(KE,{start:()=>_G});function _G({resources:e}){e.set("login",YE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var YE,$g=Se(()=>{jr();a(_G,"start");YE=class extends mt{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 QE=m((Lre,Wg)=>{"use strict";var{Readable:dG}=require("stream"),EG=1e4;Wg.exports={streamAsJSON(e){return new WE({value:e})}};var WE=class extends dG{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),Yg)}catch(n){yield Yg(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);Kg(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>EG?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 Kg(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 Yg(e){return console.error(e),JSON.stringify(e.toString())}a(Yg,"handleError");function Kg(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Kg,"when")});var oA=m((vre,iA)=>{"use strict";var zE=require("recursive-iterator"),fG=require("alasql"),JE=require("clone"),Qg=V(),{handleHDBError:zg,hdb_errors:hG}=W(),{HDB_ERROR_MSGS:Jg,HTTP_STATUS_CODES:Xg}=hG,{getDatabases:mG}=(de(),re(Ne)),SG=["DISTINCT_ARRAY"],Zg=Symbol("validateTables"),XE=Symbol("validateTable"),Pre=Symbol("getAllColumns"),jg=Symbol("validateAllColumns"),Gu=Symbol("findColumn"),eA=Symbol("validateOrderBy"),la=Symbol("validateSegment"),ZE=Symbol("validateColumn"),tA=Symbol("setColumnsForTable"),rA=Symbol("checkColumnsForAsterisk"),sA=Symbol("validateGroupBy"),nA=Symbol("hasColumns"),jE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Zg](),this[rA](),this[jg]()}[Zg](){if(this[nA]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[XE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[XE](t.table)})}}[nA](){let t=!1,r=new zE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[XE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=mG();if(!r[t.databaseid])throw zg(new Error,Jg.SCHEMA_NOT_FOUND(t.databaseid),Xg.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw zg(new Error,Jg.TABLE_NOT_FOUND(t.databaseid,t.tableid),Xg.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=JE(n);i.table=JE(t),this.attributes.push(i)})}[Gu](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)}[rA](){let t=new zE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[tA](r.tableid)}[tA](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new fG.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[jg](){this[la](this.statement.columns,!1),this[la](this.statement.joins,!1),this[la](this.statement.where,!1),this[sA](this.statement.group,!1),this[la](this.statement.order,!0)}[la](t,r){if(!t)return;let s=new zE(t),n=[];for(let{node:i,path:o}of s)!Qg.isEmpty(i)&&!Qg.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[eA](i):n.push(this[ZE](i)));return n}[sA](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&SG.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=JE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Gu](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[Gu](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`}[eA](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[ZE](t)}[ZE](t){let r=this[Gu](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]}};iA.exports=jE});var cA=m((Hre,aA)=>{"use strict";var ef=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")}};aA.exports=ef});var lA=m((Fre,uA)=>{"use strict";var tf=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};uA.exports=tf});var xu=m((xre,_A)=>{"use strict";var sf=Q(),nf=A();sf.initSync();var pG=sf.get(nf.CONFIG_PARAMS.STORAGE_COMPRESSION),TG=sf.get(nf.CONFIG_PARAMS.STORAGE_CACHING)!==!1,RG=nf.UPDATES_PROPERTY,rf=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=pG&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=TG&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===RG)}};_A.exports=rf});var Vu=m((Vre,EA)=>{"use strict";var Bi=Q(),_a=A();Bi.initSync();var gG=Bi.get(_a.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Bi.get(_a.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Bi.get(_a.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",dA=Bi.get(_a.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),AG=Bi.get(_a.CONFIG_PARAMS.STORAGE_NOREADAHEAD),ku=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=gG,this.noFSAccess=!0,dA!==void 0&&(this.overlappingSync=dA),this.noReadAhead=AG}};EA.exports=ku;ku.MAX_DBS=1e4});var ye=m((Yre,OA)=>{"use strict";var af=require("lmdb"),Br=require("fs-extra"),ir=require("path"),$u=Ht(),mA=x(),qt=rr().LMDB_ERRORS_ENUM,Yu=lA(),cf=xu(),SA=Vu(),dn=xe(),fA=A(),{table:OG,resetDatabases:NG}=(de(),re(Ne)),hA=Q(),Hr=dn.INTERNAL_DBIS_NAME,pA=dn.DBI_DEFINITION_NAME,bG="data.mdb",yG="lock.mdb",da=".mdb",IG="-lock",of=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Ar(t,r),this.key_type=this.dbi[dn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[dn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new af.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ku(e,t){if(e===void 0)throw new Error(qt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(qt.ENV_NAME_REQUIRED)}a(Ku,"pathEnvNameValidation");async function uf(e,t,r=!0){try{await Br.access(e)}catch(s){throw s.code==="ENOENT"?new Error(qt.INVALID_BASE_PATH):s}try{let s=ir.join(e,t+da);return await Br.access(s,Br.constants.R_OK|Br.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Br.access(ir.join(e,t,bG),Br.constants.R_OK|Br.constants.F_OK),ir.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(qt.INVALID_ENVIRONMENT)}else throw new Error(qt.INVALID_ENVIRONMENT);throw s}}a(uf,"validateEnvironmentPath");function Wu(e,t){if($u.validateEnv(e),t===void 0)throw new Error(qt.DBI_NAME_REQUIRED)}a(Wu,"validateEnvDBIName");async function wG(e,t,r=!1,s=!1){Ku(e,t);let n=ir.basename(e);t=t.toString();let i=hA.get(fA.CONFIG_PARAMS.SCHEMAS);i||hA.setProperty(fA.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await uf(e,t,s),TA(e,t,r)}catch(o){if(o.message===qt.INVALID_ENVIRONMENT){let c=ir.join(e,t);await Br.mkdirp(s?c:e);let u=new SA(s?c:c+da,!1),l=af.open(u);l.dbis=Object.create(null);let _=new cf(!1);l.openDB(Hr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=lf(e,t,r);return l[dn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(wG,"createEnvironment");async function CG(e,t,r,s=!0){Ku(e,t),t=t.toString();let n=ir.join(e,t);return OG({table:t,database:ir.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(CG,"copyEnvironment");async function TA(e,t,r=!1){Ku(e,t),t=t.toString();let s=lf(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 uf(e,t),i=ir.join(e,t+da),o=n!=i,c=new SA(n,o),u=af.open(c);u.dbis=Object.create(null);let l=gA(u);for(let _=0;_<l.length;_++)Ar(u,l[_]);return u[dn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(TA,"openEnvironment");async function UG(e,t,r=!1){Ku(e,t),t=t.toString();let s=ir.join(e,t+da),n=await uf(e,t);if(global.lmdb_map!==void 0){let i=lf(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await RA(o),delete global.lmdb_map[i]}}await Br.remove(n),await Br.remove(n===s?n+IG:ir.join(ir.dirname(n),yG))}a(UG,"deleteEnvironment");async function RA(e){$u.validateEnv(e);let t=e[dn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(RA,"closeEnvironment");function lf(e,t,r=!1){let n=`${ir.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(lf,"getCachedEnvironmentName");function DG(e){$u.validateEnv(e);let t=Object.create(null),r=Ar(e,Hr);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Hr)try{t[s]=Object.assign(new Yu,n)}catch{mA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(DG,"listDBIDefinitions");function gA(e){$u.validateEnv(e);let t=[],r=Ar(e,Hr);for(let{key:s}of r.getRange({start:!1}))s!==Hr&&t.push(s);return t}a(gA,"listDBIs");function LG(e,t){let s=Ar(e,Hr).getEntry(t),n=new Yu;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{mA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(LG,"getDBIDefinition");function AA(e,t,r,s=!r){if(Wu(e,t),t=t.toString(),t===Hr)throw new Error(qt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ar(e,t)}catch(n){if(n.message===qt.DBI_DOES_NOT_EXIST){let i=new cf(r,s===!0),o=e.openDB(t,i),c=new Yu(r===!0,s);return o[pA]=c,Ar(e,Hr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(AA,"createDBI");function Ar(e,t){if(Wu(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Hr?r=LG(e,t):r=new Yu,r===void 0)throw new Error(qt.DBI_DOES_NOT_EXIST);let s;try{let n=new cf(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(qt.DBI_DOES_NOT_EXIST):n}return s[pA]=r,e.dbis[t]=s,s}a(Ar,"openDBI");function MG(e,t){Wu(e,t),t=t.toString();let r=Ar(e,t),s=r.getStats();return r[dn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(MG,"statDBI");async function PG(e,t){try{let r=ir.join(e,t+da);return(await Br.stat(r)).size}catch{throw new Error(qt.INVALID_ENVIRONMENT)}}a(PG,"environmentDataSize");function vG(e,t){if(Wu(e,t),t=t.toString(),t===Hr)throw new Error(qt.CANNOT_DROP_INTERNAL_DBIS_NAME);Ar(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ar(e,Hr).removeSync(t)}a(vG,"dropDBI");function BG(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Ar(e,i)}catch(o){if(o.message===qt.DBI_DOES_NOT_EXIST)AA(e,i,i!==t,i===t),s=!0;else throw o}}s&&NG()}a(BG,"initializeDBIs");OA.exports={openDBI:Ar,openEnvironment:TA,createEnvironment:wG,listDBIs:gA,listDBIDefinitions:DG,createDBI:AA,dropDBI:vG,statDBI:MG,deleteEnvironment:UG,initializeDBIs:BG,TransactionCursor:of,environmentDataSize:PG,copyEnvironment:CG,closeEnvironment:RA}});var bA=m((Wre,NA)=>{"use strict";var _f=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};NA.exports=_f});var IA=m((zre,yA)=>{"use strict";var df=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}};yA.exports=df});var CA=m((Xre,wA)=>{"use strict";var Ef=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};wA.exports=Ef});var Hi=m((rse,LA)=>{"use strict";var HG=ye(),qG=bA(),FG=IA(),GG=CA(),rs=Ht(),Ea=rr().LMDB_ERRORS_ENUM,xG=xe(),Hs=A(),kG=V(),VG=require("uuid"),jre=require("lmdb"),{handleHDBError:$G,hdb_errors:YG}=W(),{OVERFLOW_MARKER:ese,MAX_SEARCH_KEY_LENGTH:tse}=xG,UA=Q();UA.initSync();var Qu=UA.get(Hs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),ff=Hs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Yn=Hs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function KG(e,t,r,s,n=rs.getNextMonotonicTime()){pf(e,t,r,s),hf(e,t,r);let i=new qG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];DA(l,!0,n);let _=WG(e,t,r,l),d=l[t];o.push(_),c.push(d)}return mf(o,c,s,i,n)}a(KG,"insertRecords");function WG(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 _=c([[{}]]);Array.isArray(_)&&(c=_[0][Hs.FUNC_VAL],s[o]=c)}let u=rs.getIndexedValues(c),l=e.dbis[o];if(u){Qu&&l.prefetch(u.map(_=>({key:_,value:n})),zu);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}Qu&&e.dbis[t].prefetch([n],zu),e.dbis[t].put(n,s,s[Yn])})}a(WG,"insertRecord");function QG(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(QG,"removeSkippedRecords");function DA(e,t,r){let s=r>0;(s||!Number.isInteger(e[Yn]))&&(e[Yn]=r||(r=rs.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[ff]))&&(e[ff]=r||rs.getNextMonotonicTime()):delete e[ff]}a(DA,"setTimestamps");function hf(e,t,r){r.indexOf(Hs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Hs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Hs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Hs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),HG.initializeDBIs(e,t,r)}a(hf,"initializeTransaction");async function zG(e,t,r,s,n=rs.getNextMonotonicTime()){pf(e,t,r,s),hf(e,t,r);let i=new FG,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=Sf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return mf(c,u,s,i,n,o)}a(zG,"updateRecords");async function JG(e,t,r,s,n=rs.getNextMonotonicTime()){try{pf(e,t,r,s)}catch(u){throw $G(u,u.message,YG.HTTP_STATUS_CODES.BAD_REQUEST)}hf(e,t,r);let i=new GG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;kG.isEmpty(l[t])?(_=VG.v4(),l[t]=_):_=l[t];let d=Sf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return mf(o,c,s,i,n)}a(JG,"upsertRecords");async function mf(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||rs.getNextMonotonicTime(),QG(r,i),s}a(mf,"finalizeWrite");function Sf(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),l=u?.value,_=l;if(!l){if(i)return!1;l={}}if(DA(r,!_,o),Number.isInteger(r[Yn])&&l[Yn]>r[Yn])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],T=e.dbis[h];if(T===void 0)continue;let g=l[h];if(typeof p=="function"){let k=p([[l]]);Array.isArray(k)&&(p=k[0][Hs.FUNC_VAL],r[h]=p)}if(p===g)continue;let O=rs.getIndexedValues(g);if(O){Qu&&T.prefetch(O.map(k=>({key:k,value:s})),zu);for(let k=0,$=O.length;k<$;k++)T.remove(O[k],s)}if(O=rs.getIndexedValues(p),O){Qu&&T.prefetch(O.map(k=>({key:k,value:s})),zu);for(let k=0,$=O.length;k<$;k++)T.put(O[k],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Yn])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:Sf(e,t,r,s,n,i,o))}a(Sf,"updateUpsertRecord");function XG(e,t,r){if(rs.validateEnv(e),t===void 0)throw new Error(Ea.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ea.WRITE_ATTRIBUTES_REQUIRED):new Error(Ea.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(XG,"validateBasic");function pf(e,t,r,s){if(XG(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Ea.RECORDS_REQUIRED):new Error(Ea.RECORDS_MUST_BE_ARRAY)}a(pf,"validateWrite");function zu(){}a(zu,"noop");LA.exports={insertRecords:KG,updateRecords:zG,upsertRecords:JG}});var Kn=m((nse,ZG)=>{ZG.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",attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var ss=m((ise,vA)=>{"use strict";var PA=V(),MA=A(),qi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,qs=require("joi"),En={schema_format:{pattern:qi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},jG=qs.alternatives(qs.string().min(1).max(En.schema_length.maximum).pattern(qi).messages({"string.pattern.base":"{:#label} "+En.schema_format.message}),qs.number()).required(),ex=qs.alternatives(qs.string().min(1).max(En.schema_length.maximum).pattern(qi).messages({"string.pattern.base":"{:#label} "+En.schema_format.message}),qs.number()),tx=qs.alternatives(qs.string().min(1).max(En.schema_length.maximum).pattern(qi).messages({"string.pattern.base":"{:#label} "+En.schema_format.message}),qs.number()).required();function rx(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>En.schema_length.maximum?`'${e}' maximum of 250 characters`:qi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(rx,"checkValidTable");function sx(e,t){return PA.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(sx,"validateSchemaExists");function nx(e,t){let r=t.state.ancestors[0].schema;return PA.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(nx,"validateTableExists");function ix(e,t){return e.toLowerCase()===MA.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${MA.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(ix,"validateSchemaName");vA.exports={common_validators:En,schema_regex:qi,hdb_schema_table:jG,validateSchemaExists:sx,validateTableExists:nx,validateSchemaName:ix,checkValidTable:rx,hdb_database:ex,hdb_table:tx}});var Ju=m((ase,BA)=>{var{common_validators:ns}=ss(),ha=Pe(),fa="is required",Ke={database:{presence:!1,format:ns.schema_format,length:ns.schema_length},schema:{presence:!1,format:ns.schema_format,length:ns.schema_length},table:{presence:!0,format:ns.schema_format,length:ns.schema_length},attribute:{presence:!0,format:ns.schema_format,length:ns.schema_length},hash_attribute:{presence:!0,format:ns.schema_format,length:ns.schema_length}};function ma(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(ma,"makeAttributesStrings");function ox(e){return e=ma(e),Ke.table.presence=!1,Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ha.validateObject(e,Ke)}a(ox,"schema_object");function ax(e){return e=ma(e),Ke.table.presence={message:fa},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ha.validateObject(e,Ke)}a(ax,"table_object");function cx(e){return e=ma(e),Ke.table.presence={message:fa},Ke.attribute.presence=!1,ha.validateObject(e,Ke)}a(cx,"create_table_object");function ux(e){return e=ma(e),Ke.table.presence={message:fa},Ke.attribute.presence={message:fa},Ke.hash_attribute.presence=!1,ha.validateObject(e,Ke)}a(ux,"attribute_object");function lx(e){return e=ma(e),Ke.table.presence={message:fa},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ha.validateObject(e,Ke)}a(lx,"describe_table");function _x(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(_x,"validateTableResidence");BA.exports={schema_object:ox,create_table_object:cx,table_object:ax,attribute_object:ux,describe_table:lx,validateTableResidence:_x}});var qA=m((use,HA)=>{"use strict";var dx=require("uuid"),Tf=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||dx.v4(),this.schema_table=`${this.schema}.${this.table}`}};HA.exports=Tf});var Xu=m((_se,FA)=>{"use strict";var Ex=qA(),Rf=class extends Ex{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}};FA.exports=Rf});var xA=m((Ese,GA)=>{"use strict";GA.exports=hx;var fx="inserted";function hx(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===fx?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(hx,"returnObject")});var Zu=m((hse,KA)=>{"use strict";var mx=A(),gf=ye(),Sx=Hi(),{getSystemSchemaPath:px,getSchemaPath:Tx}=we(),Rx=Kn(),gx=Ju(),Ax=Xu(),Ox=xA(),{handleHDBError:kA,hdb_errors:$A}=W(),VA=V(),{HTTP_STATUS_CODES:Nx}=$A,Af=Rx.hdb_attribute,YA=[];for(let e=0;e<Af.attributes.length;e++)YA.push(Af.attributes[e].attribute);var bx="inserted";KA.exports=yx;async function yx(e){let t=gx.attribute_object(e);if(t)throw kA(new Error,t.message,$A.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&VA.checkGlobalSchemaTable(e.schema,e.table);if(r)throw kA(new Error,r,Nx.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=VA.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 Ax(e.schema,e.table,e.attribute,e.id);try{let i=await gf.openEnvironment(Tx(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}`);gf.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await gf.openEnvironment(px(),mx.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Sx.insertRecords(o,Af.hash_attribute,YA,[n]);return Ox(bx,c,{records:[n]},u)}catch(i){throw i}}a(yx,"lmdbCreateAttribute")});var Nf=m((Sse,QA)=>{var{hdb_table:Ix,hdb_database:WA}=ss(),wx=Pe(),Of=require("joi"),Cx={undefined:"undefined",null:"null"},Ux=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||Cx[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"),Dx=Of.object({database:WA,schema:WA,table:Ix,records:Of.array().items(Of.object().custom(Ux)).required()});QA.exports=function(e){return wx.validateBySchema(e,Dx)}});var Sa=m((Rse,JA)=>{"use strict";var Fs=V(),zA=x(),Tse=Nf(),{getDatabases:Lx}=(de(),re(Ne)),{ClientError:Wn}=W();JA.exports=Mx;function Mx(e){if(Fs.isEmpty(e))throw new Wn("invalid update parameters defined.");if(Fs.isEmptyOrZeroLength(e.schema))throw new Wn("invalid schema specified.");if(Fs.isEmptyOrZeroLength(e.table))throw new Wn("invalid table specified.");if(!Array.isArray(e.records))throw new Wn("records must be an array");let t=Lx()[e.schema]?.[e.table];if(Fs.isEmpty(t))throw new Wn(`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&&Fs.isEmptyOrZeroLength(o[r]))throw zA.error("a valid hash attribute must be provided with update record:",o),new Wn("a valid hash attribute must be provided with update record, check log for more info");if(!Fs.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw zA.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Wn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Fs.isEmpty(o[r])&&o[r]!==""&&s.has(Fs.autoCast(o[r]))&&(o.skip=!0),s.add(Fs.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(Mx,"insertUpdateValidate")});var pa=m((Ase,XA)=>{"use strict";var Px=A().OPERATIONS_ENUM,bf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=Px.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};XA.exports=bf});var Aa=m((bse,ZA)=>{"use strict";var Nse=pa(),ju=A(),If=V(),yf=x(),vx=require("uuid"),{handleHDBError:Ta,hdb_errors:Bx}=W(),{HDB_ERROR_MSGS:Ra,HTTP_STATUS_CODES:ga}=Bx;ZA.exports=Hx;function Hx(e,t,r){for(let n=0;n<t.length;n++)qx(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Fx(i,r,e.operation)}}a(Hx,"processRows");function qx(e){if(Buffer.byteLength(String(e))>ju.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ta(new Error,Ra.ATTR_NAME_LENGTH_ERR(e),ga.BAD_REQUEST,void 0,void 0,!0);if(If.isEmptyOrZeroLength(e)||If.isEmpty(e.trim()))throw Ta(new Error,Ra.ATTR_NAME_NULLISH_ERR,ga.BAD_REQUEST,void 0,void 0,!0)}a(qx,"validateAttribute");function Fx(e,t,r){if(!e.hasOwnProperty(t)||If.isEmptyOrZeroLength(e[t])){if(r===ju.OPERATIONS_ENUM.INSERT||r===ju.OPERATIONS_ENUM.UPSERT){e[t]=vx.v4();return}throw yf.error("Update transaction aborted due to record with no hash value:",e),Ta(new Error,Ra.RECORD_MISSING_HASH_ERR,ga.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>ju.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw yf.error(e),Ta(new Error,Ra.HASH_VAL_LENGTH_ERR,ga.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw yf.error(e),Ta(new Error,Ra.INVALID_FORWARD_SLASH_IN_HASH_ERR,ga.BAD_REQUEST,void 0,void 0,!0)}a(Fx,"validateHash")});var eO=m((Ise,jA)=>{"use strict";var wf=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};jA.exports=wf});var sO=m((Cse,rO)=>{"use strict";var Cf=ye(),Gx=x(),tO=rr().LMDB_ERRORS_ENUM;rO.exports=xx;async function xx(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 Cf.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==tO.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Cf.closeEnvironment(global.lmdb_map[s]),await Cf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==tO.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){Gx.error(t)}}a(xx,"cleanLMDBMap")});var Gs=m((Dse,aO)=>{"use strict";var Oa=require("crypto"),kx=Q(),{CONFIG_PARAMS:Vx}=A(),iO="aes-256-cbc",$x=32,Yx=16,Uf=64,oO=32,Kx=Uf+oO,nO=new Map;aO.exports={encrypt:Wx,decrypt:Qx,createNatsTableStreamName:zx};function Wx(e){let t=Oa.randomBytes($x),r=Oa.randomBytes(Yx),s=Oa.createCipheriv(iO,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(Wx,"encrypt");function Qx(e){let t=e.substr(0,Uf),r=e.substr(Uf,oO),s=e.substr(Kx,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Oa.createDecipheriv(iO,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Qx,"decrypt");function zx(e,t){let r=kx.get(Vx.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=nO.get(r);return s||(s=Oa.createHash("md5").update(r).digest("hex"),nO.set(r,s)),s}a(zx,"createNatsTableStreamName")});var Qn=m((Pse,uO)=>{"use strict";var Mse=Or(),el=x(),cO=Ju(),Jx=Gs(),tl=V(),{handleHDBError:rl,hdb_errors:Xx}=W(),{HDB_ERROR_MSGS:sl,HTTP_STATUS_CODES:Df}=Xx,Zx=Q();Zx.initSync();var{getDatabases:Lf}=(de(),re(Ne));uO.exports={describeAll:jx,describeTable:nl,describeSchema:ek};async function jx(e){try{let t=tl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Lf(),i={},o={},c=[];for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let _=n[l];for(let d in _)try{let E;if(t||s)E=await nl({schema:l,table:d});else if(r&&r[l].describe&&r[l].tables[d].describe){let f=r[l].tables[d].attribute_permissions;E=await nl({schema:l,table:d},f)}E&&c.push(E)}catch(E){el.error(E)}}let u={};for(let l in c)t||s?(u[c[l].schema]==null&&(u[c[l].schema]={}),u[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(u[c[l].schema]==null&&(u[c[l].schema]={}),u[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?u[l]={}:o[l]&&(u[l]={});return u}catch(t){return el.error("Got an error in describeAll"),el.error(t),rl(new Error,sl.DESCRIBE_ALL_ERR)}}a(jx,"describeAll");async function nl(e,t){tl.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=cO.describe_table(e);if(i)throw i;let c=Lf()[r];if(!c)throw rl(new Error,sl.SCHEMA_NOT_FOUND(e.schema),Df.NOT_FOUND);let u=c[s];if(!u)throw rl(new Error,sl.TABLE_NOT_FOUND(e.schema,e.table),Df.NOT_FOUND);let l=[];if(n){let d={};n.forEach(E=>{E.describe&&(d[E.attribute_name]=!0)}),u.attributes.forEach(E=>{d[E.name]&&l.push(E)})}else l=u.attributes;let _={schema:r,name:u.tableName,attributes:l,hash_attribute:u.attributes.find(d=>d.isPrimaryKey||d.is_hash_attribute)?.name};_.clustering_stream_name=Jx.createNatsTableStreamName(_.schema,_.name);try{_.record_count=u.getRecordCount();let d=u.auditStore;if(d)for(let E of d.getKeys({reverse:!0,limit:1}))_.last_updated_record=E[0];if(!_.last_updated_record&&u.indices.__updatedtime__)for(let E of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))_.last_updated_record=E}catch(d){el.warn(`unable to stat table dbi due to ${d}`)}return _}a(nl,"descTable");async function ek(e){tl.transformReq(e);let t=cO.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=Lf()[s];if(!i)throw rl(new Error,sl.SCHEMA_NOT_FOUND(e.schema),Df.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),tl.isEmpty(u)||u.describe){let l=await nl({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(ek,"describeSchema")});var xs=m((qse,fO)=>{var tk=Kn(),{callbackify:_O,promisify:rk}=require("util"),{getDatabases:dO}=(de(),re(Ne));fO.exports={setSchemaDataToGlobal:lO,getTableSchema:sk,getSystemSchema:nk,setSchemaDataToGlobalAsync:rk(lO)};var EO=Qn(),Bse=_O(EO.describeAll),Hse=_O(EO.describeTable);function lO(e){global.hdb_schema=dO(),e&&e()}a(lO,"setSchemaDataToGlobal");function sk(e,t,r){let s=dO()[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(sk,"getTableSchema");function nk(){return tk}a(nk,"getSystemSchema")});var Nr=m((Gse,pO)=>{"use strict";var ol=Nf(),St=V(),ik=require("util"),al=qr(),ok=xs(),hO=x(),{handleHDBError:zn,hdb_errors:ak}=W(),{HTTP_STATUS_CODES:Jn}=ak,ck=ik.promisify(ok.getTableSchema),uk="updated",mO="inserted",SO="upserted";pO.exports={insert:_k,update:dk,upsert:Ek,validation:lk,flush:fk};async function lk(e){if(St.isEmpty(e))throw new Error("invalid update parameters defined.");if(St.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(St.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await ck(e.schema,e.table),r=ol(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&&St.isEmptyOrZeroLength(c[s]))throw hO.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(!St.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw hO.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!St.isEmpty(c[s])&&c[s]!==""&&n.has(St.autoCast(c[s]))&&(c.skip=!0),n.add(St.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(lk,"validation");async function _k(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=ol(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await al.createRecords(e);return il(mO,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(_k,"insertData");async function dk(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=ol(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await al.updateRecords(e);return St.isEmpty(s.existing_rows)?il(uk,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):il(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(dk,"updateData");async function Ek(e){if(e.operation!=="upsert")throw zn(new Error,"invalid operation, must be upsert",Jn.INTERNAL_SERVER_ERROR);let t=ol(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await al.upsertRecords(e);return il(SO,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(Ek,"upsertData");function il(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===mO?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===SO?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(il,"returnObject");function fk(e){return St.transformReq(e),al.flush(e.schema,e.table)}a(fk,"flush")});var Pf=m((kse,gO)=>{var hk=Pe(),Mf=require("joi"),{hdb_table:mk,hdb_database:TO}=ss(),RO={schema:TO,database:TO,table:mk},Sk={date:Mf.date().iso().required()},pk={timestamp:Mf.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};gO.exports=function(e,t){let r=t==="timestamp"?{...RO,...pk}:{...RO,...Sk},s=Mf.object(r);return hk.validateBySchema(e,s)}});var NO=m((Vse,OO)=>{var Tk=Pe(),vf=require("joi"),{hdb_table:Rk,hdb_database:AO}=ss(),gk=vf.object({schema:AO,database:AO,table:Rk,hash_values:vf.array().required(),ids:vf.array()});OO.exports=function(e){return Tk.validateBySchema(e,gk)}});var yO=m(($se,bO)=>{"use strict";var Bf=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}},Hf=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}},qf=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};bO.exports={InsertObject:Bf,NoSQLSeachObject:Hf,DeleteResponseObject:qf}});var jn=m((Kse,DO)=>{"use strict";var wO=Pf(),Ak=NO(),Xn=V(),IO=require("moment"),CO=x(),{promisify:Ok,callbackify:Nk}=require("util"),Zn=A(),bk=xs(),Ff=Ok(bk.getTableSchema),Gf=qr(),{DeleteResponseObject:yk}=yO(),{handleHDBError:fn,hdb_errors:Ik}=W(),{HDB_ERROR_MSGS:cl,HTTP_STATUS_CODES:hn}=Ik,wk="records successfully deleted",Ck=Nk(UO);DO.exports={delete:Ck,deleteRecord:UO,deleteFilesBefore:Uk,deleteAuditLogsBefore:Dk};async function Uk(e){let t=wO(e,"date");if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);if(Xn.transformReq(e),!IO(e.date,IO.ISO_8601).isValid())throw fn(new Error,cl.INVALID_DATE,hn.BAD_REQUEST,Zn.LOG_LEVELS.ERROR,cl.INVALID_DATE,!0);let s=Xn.checkSchemaTableExist(e.schema,e.table);if(s)throw fn(new Error,s,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,s,!0);let n=await Gf.deleteRecordsBefore(e);if(await Ff(e.schema,e.table),CO.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Uk,"deleteFilesBefore");async function Dk(e){let t=wO(e,"timestamp");if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);if(Xn.transformReq(e),isNaN(e.timestamp))throw fn(new Error,cl.INVALID_VALUE("Timestamp"),hn.BAD_REQUEST,Zn.LOG_LEVELS.ERROR,cl.INVALID_VALUE("Timestamp"),!0);let r=Xn.checkSchemaTableExist(e.schema,e.table);if(r)throw fn(new Error,r,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,r,!0);let s=await Gf.deleteAuditLogsBefore(e);return await Ff(e.schema,e.table),CO.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Dk,"deleteAuditLogsBefore");async function UO(e){e.ids&&(e.hash_values=e.ids);let t=Ak(e);if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);Xn.transformReq(e);let r=Xn.checkSchemaTableExist(e.schema,e.table);if(r)throw fn(new Error,r,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,r,!0);try{await Ff(e.schema,e.table);let s=await Gf.deleteRecords(e);return Xn.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${wk}`),s}catch(s){if(s.message===Zn.SEARCH_NOT_FOUND_MESSAGE){let n=new yk;return n.message=Zn.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(UO,"deleteRecord")});var ul=m((Qse,PO)=>{var Lk=require("crypto"),LO=9;function Mk(e){let t=vk(LO),r=MO(e+t);return t+r}a(Mk,"createHash");function Pk(e,t){let r=e.substr(0,LO),s=r+MO(t+r);return e===s}a(Pk,"validateHash");function vk(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(vk,"generateSalt");function MO(e){return Lk.createHash("md5").update(e).digest("hex")}a(MO,"md5");PO.exports={hash:Mk,validate:Pk}});var BO=m((Jse,vO)=>{var xf=Pe(),It={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 Bk(e){return It.password.presence=!0,It.username.presence=!0,It.role.presence=!0,It.active.presence=!0,xf.validateObject(e,It)}a(Bk,"addUserValidation");function Hk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,xf.validateObject(e,It)}a(Hk,"alterUserValidation");function qk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,xf.validateObject(e,It)}a(qk,"dropUserValidation");vO.exports={addUserValidation:Bk,alterUserValidation:Hk,dropUserValidation:qk}});var Be=m((jse,qO)=>{"use strict";var{platform:Zse}=require("os"),Fk="nats-server.zip",kf="nats-server",Gk=process.platform==="win32"?`${kf}.exe`:kf,Vf="HDB",xk=/^[^\s.,*>]+$/,HO="__request__",kk=a(e=>`${e}.${HO}`,"REQUEST_SUBJECT"),Vk={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},$k={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Yk={HUB:"hub.pid",LEAF:"leaf.pid"},Kk={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Wk={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Vf,deliver_subject:"__HDB__.WORKQUEUE"},Qk={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Vf,deliver_subject:"HDB.SCHEMAQUEUE"},zk={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Vf,deliver_subject:"HDB.USERQUEUE"},Jk={SUCCESS:"success",ERROR:"error"},Xk={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Zk={TXN:"txn",MSGID:"msgid"},Fi={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},jk={[Fi.ERR]:1,[Fi.WRN]:2,[Fi.INF]:3,[Fi.DBG]:4,[Fi.TRC]:5},eV={debug:"-D",trace:"-DVV"};qO.exports={NATS_SERVER_ZIP:Fk,NATS_SERVER_NAME:kf,NATS_BINARY_NAME:Gk,PID_FILES:Yk,NATS_CONFIG_FILES:$k,SERVER_SUFFIX:Kk,WORK_QUEUE_CONSUMER_NAMES:Wk,SCHEMA_QUEUE_CONSUMER_NAMES:Qk,USER_QUEUE_CONSUMER_NAMES:zk,NATS_TERM_CONSTRAINTS_RX:xk,REQUEST_SUFFIX:HO,UPDATE_REMOTE_RESPONSE_STATUSES:Jk,CLUSTER_STATUS_STATUSES:Xk,REQUEST_SUBJECT:kk,SUBJECT_PREFIXES:Zk,MSG_HEADERS:Vk,LOG_LEVELS:Fi,LOG_LEVEL_FLAGS:eV,LOG_LEVEL_HIERARCHY:jk}});var GO=m((tne,FO)=>{"use strict";var ll=A(),_l=class{static{a(this,"BaseLicense")}constructor(t=0,r=ll.RAM_ALLOCATION_ENUM.DEFAULT,s=ll.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},$f=class extends _l{static{a(this,"ExtendedLicense")}constructor(t=0,r=ll.RAM_ALLOCATION_ENUM.DEFAULT,s=ll.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};FO.exports={BaseLicense:_l,ExtendedLicense:$f}});var Na=m((sne,KO)=>{"use strict";var xi=require("fs-extra"),xO=ul(),kO=require("crypto"),tV=require("moment"),rV=require("uuid").v4,wt=x(),Kf=require("path"),sV=V(),mn=A(),nV=GO().ExtendedLicense,Gi="invalid license key format",iV="061183",oV="mofi25",aV="aes-256-cbc",cV=16,uV=32,VO=Q();VO.initSync();var Yf;KO.exports={validateLicense:$O,generateFingerPrint:_V,licenseSearch:YO,getLicense:fV};function Wf(){return Kf.join(VO.getHdbBasePath(),mn.LICENSE_KEY_DIR_NAME,mn.LICENSE_FILE_NAME)}a(Wf,"getLicenseDirPath");function lV(){let e=Wf();return Kf.join(e,mn.LICENSE_FILE_NAME)}a(lV,"getLicenseFilePath");function Qf(){let e=Wf();return Kf.join(e,mn.REG_KEY_FILE_NAME)}a(Qf,"getFingerPrintFilePath");async function _V(){let e=Qf();try{return await xi.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await dV();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(_V,"generateFingerPrint");async function dV(){let e=rV(),t=xO.hash(e),r=Qf();try{await xi.mkdirp(Wf()),await xi.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw wt.error(`Error writing fingerprint file to ${r}`),wt.error(s),new Error("There was an error generating the fingerprint")}return t}a(dV,"writeFingerprint");function $O(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:mn.RAM_ALLOCATION_ENUM.DEFAULT,version:mn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return wt.error("empty license key passed to validate."),r;let s=Qf(),n=!1;try{n=xi.statSync(s)}catch(i){wt.error(i)}if(n){let i;try{i=xi.readFileSync(s,"utf8")}catch{wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(oV),c=o[1];c=Buffer.concat([Buffer.from(c)],cV);let u=Buffer.concat([Buffer.from(i)],uV),l=kO.createDecipheriv(aV,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let _=null;try{_=l.update(o[0],"hex","utf8"),_.trim(),_+=l.final("utf8")}catch{let f=EV(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Gi),wt.error(Gi),new Error(Gi)}let d;if(isNaN(_))try{d=JSON.parse(_),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(Gi),wt.error(Gi),new Error(Gi)}else r.exp_date=_;r.exp_date<tV().valueOf()&&(r.valid_date=!1),xO.validate(o[1],`${iV}${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||wt.error("Invalid licence"),r}a($O,"validateLicense");function EV(e,t){try{let r=kO.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{wt.warn("Check old license failed")}}a(EV,"checkOldLicense");function YO(){let e=new nV,t=[];try{t=xi.readFileSync(lV(),"utf-8").split(mn.NEW_LINE)}catch(r){r.code==="ENOENT"?wt.info("no license file found"):wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(sV.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=$O(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){wt.error("There was an error parsing the license string."),wt.error(n),e.ram_allocation=mn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Yf=e,e}a(YO,"licenseSearch");async function fV(){return Yf||await YO(),Yf}a(fV,"getLicense")});var br=m((cne,cN)=>{"use strict";var XO="username is required",ZO="nothing to update, must supply active, role or password to update",jO="password cannot be an empty string",eN="If role is specified, it cannot be empty.",tN="active must be true or false";cN.exports={addUser:OV,alterUser:NV,dropUser:yV,getSuperUser:UV,userInfo:IV,listUsers:El,listUsersExternal:wV,setUsersToGlobal:Vi,findAndValidateUser:aN,getClusterUser:DV,USERNAME_REQUIRED:XO,ALTERUSER_NOTHING_TO_UPDATE:ZO,EMPTY_PASSWORD:jO,EMPTY_ROLE:eN,ACTIVE_BOOLEAN:tN};var rN=Nr(),hV=jn(),Jf=ul(),sN=BO(),nN=Or(),Xf=ks(),or=V(),iN=require("validate.js"),ue=x(),{promisify:mV}=require("util"),Zf=Gs(),WO=A(),QO=Be(),SV=Tr(),ine=Q(),one=Na(),pV=Kn(),{table:ane}=(de(),re(Ne)),{handleHDBError:is,hdb_errors:TV}=W(),{HTTP_STATUS_CODES:os,AUTHENTICATION_ERROR_MSGS:zf,HDB_ERROR_MSGS:ki}=TV,{UserEventMsg:jf}=Fr(),zO=require("lodash"),{_assignPackageExport:RV}=require("../index");RV("getUser",aN);var oN={username:!0,active:!0,role:!0,password:!0},JO=new Map,dl=nN.searchByValue,gV=nN.searchByHash,AV=mV(hV.delete);async function OV(e){let t=iN.cleanAttributes(e,oN),r=sN.addUserValidation(t);if(r)throw is(new Error,r.message,os.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 dl(s),n=n&&Array.from(n)}catch(u){throw ue.error("There was an error searching for a role in add user"),ue.error(u),u}if(!n||n.length<1)throw is(new Error,ki.ROLE_NAME_NOT_FOUND(t.role),os.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw is(new Error,ki.DUP_ROLES_FOUND(t.role),os.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Zf.encrypt(t.password)),t.password=Jf.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await rN.insert(i)}catch(u){throw ue.error("There was an error searching for a user."),ue.error(u),u}ue.debug(o);try{await Vi()}catch(u){throw ue.error("Got an error setting users to global"),ue.error(u),u}if(o.skipped_hashes.length===1)throw is(new Error,ki.USER_ALREADY_EXISTS(t.username),os.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],Xf.signalUserChange(new jf(process.pid)),`${c.username} successfully added`}a(OV,"addUser");async function NV(e){let t=iN.cleanAttributes(e,oN);if(or.isEmptyOrZeroLength(t.username))throw new Error(XO);if(or.isEmptyOrZeroLength(t.password)&&or.isEmptyOrZeroLength(t.role)&&or.isEmptyOrZeroLength(t.active))throw new Error(ZO);if(!or.isEmpty(t.password)&&or.isEmptyOrZeroLength(t.password.trim()))throw new Error(jO);if(!or.isEmpty(t.active)&&!or.isBoolean(t.active))throw new Error(tN);let r=bV(t.username);if(!or.isEmpty(t.password)&&!or.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Zf.encrypt(t.password)),t.password=Jf.hash(t.password)),t.role==="")throw new Error(eN);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 dl(i)||[])}catch(c){throw ue.error("Got an error searching for a role."),ue.error(c),c}if(!o||o.length===0){let c=ki.ALTER_USER_ROLE_NOT_FOUND(t.role);throw ue.error(c),is(new Error,c,os.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=ki.ALTER_USER_DUP_ROLES(t.role);throw ue.error(c),is(new Error,c,os.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 rN.update(s)}catch(i){throw ue.error("Error during update."),ue.error(i),i}try{await Vi()}catch(i){throw ue.error("Got an error setting users to global"),ue.error(i),i}return Xf.signalUserChange(new jf(process.pid)),n}a(NV,"alterUser");function bV(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(bV,"isClusterUser");async function yV(e){try{let t=sN.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(or.isEmpty(global.hdb_users.get(e.username)))throw is(new Error,ki.USER_NOT_EXIST(e.username),os.NOT_FOUND,void 0,void 0,!0);let s;try{s=await AV(r)}catch(n){throw ue.error("Got an error deleting a user."),ue.error(n),n}ue.debug(s);try{await Vi()}catch(n){throw ue.error("Got an error setting users to global."),ue.error(n),n}return Xf.signalUserChange(new jf(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(yV,"dropUser");async function IV(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=e.hdb_user;let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await gV(r)}catch(n){throw ue.error("Got an error searching for a role."),ue.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw ue.error(r),r}return t}a(IV,"userInfo");async function wV(){let e;try{e=await El()}catch(t){throw ue.error("Got an error listing users."),ue.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(wV,"listUsersExternal");async function El(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await dl(e)}catch(o){throw ue.error("Got an error searching for roles."),ue.error(o),o}let r={};for(let o of t)r[o.id]=zO.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 dl(s)}catch(o){throw ue.error("Got an error searching for users."),ue.error(o),o}let i=new Map;for(let o of n)o=zO.cloneDeep(o),o.role=r[o.role],CV(o.role),i.set(o.username,o);return i}catch(e){throw ue.error("got an error listing users"),ue.error(e),or.errorizeMessage(e)}return null}a(El,"listUsers");function CV(e){try{if(!e){ue.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(pV)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){ue.error("Got an error trying to set system permissions."),ue.error(t)}}a(CV,"appendSystemTablesToRole");async function Vi(){try{let e=await El();global.hdb_users=e}catch(e){throw ue.error(e),e}}a(Vi,"setUsersToGlobal");async function aN(e,t,r=!0){global.hdb_users||await Vi();let s=global.hdb_users.get(e);if(!s)throw is(new Error,zf.GENERIC_AUTH_FAIL,os.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw is(new Error,zf.USER_INACTIVE,os.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(JO.get(t)===s.password)return n;if(Jf.validate(s.password,t))JO.set(t,s.password);else throw is(new Error,zf.GENERIC_AUTH_FAIL,os.UNAUTHORIZED,void 0,void 0,!0)}return n}a(aN,"findAndValidateUser");async function UV(){global.hdb_users||await Vi();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(UV,"getSuperUser");async function DV(){let e=await El(),t=SV.getConfigFromFile(WO.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!or.isEmpty(r)&&r?.role?.role===WO.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Zf.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+QO.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+QO.SERVER_SUFFIX.ADMIN,r}a(DV,"getClusterUser")});var ya=m((dne,dN)=>{"use strict";var ei=x(),ar=A(),LV=sO(),lne=xs(),_ne=Qn(),MV=br(),{validateEvent:uN}=Fr(),ba=qr(),PV=require("process"),{resetDatabases:vV}=(de(),re(Ne)),BV={[ar.ITC_EVENT_TYPES.SCHEMA]:HV,[ar.ITC_EVENT_TYPES.USER]:_N};async function HV(e){let t=uN(e);if(t){ei.error(t);return}ei.trace("ITC schemaHandler received schema event:",e),await LV(e.message),await qV(e.message)}a(HV,"schemaHandler");async function qV(e){try{ba.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ba.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ba.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=vV();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ei.error(t)}}a(qV,"syncSchemaMetadata");var lN=[];async function _N(e){try{try{ba.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ba.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ei.warn(r)}let t=uN(e);if(t){ei.error(t);return}ei.trace(`ITC userHandler ${ar.HDB_ITC_CLIENT_PREFIX}${PV.pid} received user event:`,e),await MV.setUsersToGlobal();for(let r of lN)r()}catch(t){ei.error(t)}}a(_N,"userHandler");_N.addListener=function(e){lN.push(e)};dN.exports=BV});var Fr=m((pne,fN)=>{"use strict";var fne=x(),eh=V(),FV=A(),{ITC_ERRORS:Ia}=rr(),{parentPort:hne,threadId:GV,isMainThread:xV,workerData:mne}=require("worker_threads"),{onMessageFromWorkers:kV,broadcast:Sne,broadcastWithAcknowledgement:VV}=dt();fN.exports={sendItcEvent:$V,validateEvent:EN,SchemaEventMsg:YV,UserEventMsg:KV};var fl;kV(async(e,t)=>{fl=fl||ya(),EN(e),fl[e.type]&&await fl[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function $V(e){return!xV&&e.message&&(e.message.originator=GV),VV(e)}a($V,"sendItcEvent");function EN(e){if(typeof e!="object")return Ia.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||eh.isEmpty(e.type))return Ia.MISSING_TYPE;if(!e.hasOwnProperty("message")||eh.isEmpty(e.message))return Ia.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||eh.isEmpty(e.message.originator))return Ia.MISSING_ORIGIN;if(FV.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Ia.INVALID_EVENT(e.type)}a(EN,"validateEvent");function YV(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(YV,"SchemaEventMsg");function KV(e){this.originator=e}a(KV,"UserEventMsg")});var ks=m((gne,pN)=>{"use strict";var hN=A(),Rne=V(),hl=x(),mN=eO(),$i,{sendItcEvent:SN}=Fr();function WV(e){try{hl.trace("signalSchemaChange called with message:",e),$i=$i||ya();let t=new mN(hN.ITC_EVENT_TYPES.SCHEMA,e);return $i.schema(t),SN(t)}catch(t){hl.error(t)}}a(WV,"signalSchemaChange");function QV(e){try{hl.trace("signalUserChange called with message:",e),$i=$i||ya();let t=new mN(hN.ITC_EVENT_TYPES.USER,e);return $i.user(t),SN(t)}catch(t){hl.error(t)}}a(QV,"signalUserChange");pN.exports={signalSchemaChange:WV,signalUserChange:QV}});var ml=m((One,RN)=>{"use strict";var TN=V(),zV=A(),JV=x(),XV=Zu(),ZV=Xu(),jV=ks(),{SchemaEventMsg:e$}=Fr(),t$="already exists in";RN.exports=r$;async function r$(e,t,r){if(TN.isEmptyOrZeroLength(r))return r;let s=[];TN.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 s$(e,t.schema,t.name,i)})),n}a(r$,"lmdbCheckForNewAttributes");async function s$(e,t,r,s){let n=new ZV(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await n$(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(t$))JV.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(s$,"createNewAttribute");async function n$(e){let t;return t=await XV(e),jV.signalSchemaChange(new e$(process.pid,zV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(n$,"createAttribute")});var Yi=m((bne,gN)=>{"use strict";var th=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}};gN.exports=th});var ON=m((Ine,AN)=>{"use strict";var i$=Yi(),o$=A().OPERATIONS_ENUM,rh=class extends i${static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(o$.INSERT,r,s,n,i),this.records=t}};AN.exports=rh});var bN=m((Cne,NN)=>{"use strict";var a$=Yi(),c$=A().OPERATIONS_ENUM,sh=class extends a${static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(c$.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};NN.exports=sh});var IN=m((Dne,yN)=>{"use strict";var u$=Yi(),l$=A().OPERATIONS_ENUM,nh=class extends u${static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(l$.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};yN.exports=nh});var CN=m((Mne,wN)=>{"use strict";var _$=Yi(),d$=A().OPERATIONS_ENUM,ih=class extends _${static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(d$.DELETE,s,n,t,i),this.original_records=r}};wN.exports=ih});var wa=m((Bne,MN)=>{"use strict";var vne=require("path"),UN=ye(),E$=ON(),f$=bN(),h$=IN(),m$=CN(),Ki=xe(),DN=V(),{CONFIG_PARAMS:S$}=A(),LN=Q();LN.initSync();var Sl=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:p$}=we();MN.exports=T$;async function T$(e,t){if(LN.get(S$.LOGGING_AUDITLOG)===!1)return;let r=p$(e.schema,e.table),s=await UN.openEnvironment(r,e.table,!0),n=R$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){UN.initializeDBIs(s,Ki.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ki.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Ki.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Ki.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),DN.isEmpty(n.user_name)||s.dbis[Ki.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Ki.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(T$,"writeTransaction");function R$(e,t){let r=DN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Sl.INSERT)return new E$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Sl.UPDATE)return new f$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Sl.UPSERT)return new h$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Sl.DELETE)return new m$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(R$,"createTransactionObject")});var oh=m((Fne,PN)=>{"use strict";var g$=Sa(),qne=pa(),Ca=A(),A$=Aa(),O$=Hi().insertRecords,N$=ye(),b$=x(),y$=ml(),{getSchemaPath:I$}=we(),w$=wa();PN.exports=C$;async function C$(e){try{let{schema_table:t,attributes:r}=g$(e);A$(e,r,t.hash_attribute),e.schema!==Ca.SYSTEM_SCHEMA_NAME&&(r.includes(Ca.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ca.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ca.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ca.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await y$(e.hdb_auth_header,t,r),n=I$(e.schema,e.table),i=await N$.openEnvironment(n,e.table),o=await O$(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await w$(e,o)}catch(c){b$.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(C$,"lmdbCreateRecords")});var HN=m((xne,BN)=>{"use strict";var vN=A(),U$=oh(),D$=pa(),L$=require("fs-extra"),{getSchemaPath:M$}=we();BN.exports=P$;async function P$(e){let t=[{name:e.schema,createddate:Date.now()}],r=new D$(vN.SYSTEM_SCHEMA_NAME,vN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await U$(r),await L$.mkdirp(M$(e.schema))}a(P$,"lmdbCreateSchema")});var FN=m((Vne,qN)=>{"use strict";var ah=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}};qN.exports=ah});var VN=m((Qne,kN)=>{"use strict";var GN=ye(),ch=Ht(),uh=rr().LMDB_ERRORS_ENUM,v$=xe(),xN=x(),Yne=V(),B$=require("lmdb"),H$=FN(),q$=A(),{OVERFLOW_MARKER:Kne,MAX_SEARCH_KEY_LENGTH:Wne}=v$,F$=q$.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function G$(e,t,r,s){if(ch.validateEnv(e),t===void 0)throw new Error(uh.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(uh.IDS_REQUIRED):new Error(uh.IDS_MUST_BE_ITERABLE);try{let n=GN.listDBIs(e);GN.initializeDBIs(e,t,n);let i=new H$,o,c=[],u=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||s&&h[F$]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,B$.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let T=0;T<n.length;T++){let g=n[T];if(!h.hasOwnProperty(g)||g===t)continue;let O=e.dbis[g],k=h[g];if(k!=null)try{let $=ch.getIndexedValues(k);if($)for(let U=0,b=$.length;U<b;U++)O.remove($[U],o)}catch{xN.warn(`cannot delete from attribute: ${g}, ${k}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){xN.warn(h),i.skipped.push(o)}let l=[],_=await Promise.all(c);for(let E=0,f=_.length;E<f;E++)_[E]===!0?i.deleted.push(u[E]):(i.skipped.push(u[E]),l.push(E));let d=0;for(let E=0;E<l.length;E++){let f=l[E];i.original_records.splice(f-d,1),d++}return i.txn_time=ch.getNextMonotonicTime(),i}catch(n){throw n}}a(G$,"deleteRecords");kN.exports={deleteRecords:G$}});var Ua=m((Jne,YN)=>{"use strict";var Wi=V(),x$=VN(),k$=ye(),{getSchemaPath:V$}=we(),$$=wa(),Y$=x();YN.exports=K$;async function K$(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Wi.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Wi.isEmptyOrZeroLength(e.hash_values)&&!Wi.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Wi.isEmpty(u)||e.hash_values.push(u)}}if(Wi.isEmptyOrZeroLength(e.hash_values))return $N([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Wi.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=V$(e.schema,e.table),i=await k$.openEnvironment(n,e.table),o=await x$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await $$(e,o)}catch(c){Y$.error(`unable to write transaction due to ${c.message}`)}return $N(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(K$,"lmdbDeleteRecords");function $N(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($N,"createDeleteResponse")});var _h=m((jne,KN)=>{"use strict";var W$=A(),Zne=Ht();function lh(e,t){let r=Object.create(null);if(t.length===1&&W$.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(lh,"parseRow");function Q$(e,t,r,s){let n=lh(r,e);s.push(n)}a(Q$,"searchAll");function z$(e,t,r,s){let n=lh(r,e);s[t]=n}a(z$,"searchAllToMap");function J$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(J$,"iterateDBI");function ti(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(ti,"pushResults");function X$(e,t,r,s,n,i){t.toString().endsWith(e)&&ti(t,r,s,n,i)}a(X$,"endsWith");function Z$(e,t,r,s,n,i){t.toString().includes(e)&&ti(t,r,s,n,i)}a(Z$,"contains");function j$(e,t,r,s,n,i){t>e&&ti(t,r,s,n,i)}a(j$,"greaterThanCompare");function eY(e,t,r,s,n,i){t>=e&&ti(t,r,s,n,i)}a(eY,"greaterThanEqualCompare");function tY(e,t,r,s,n,i){t<e&&ti(t,r,s,n,i)}a(tY,"lessThanCompare");function rY(e,t,r,s,n,i){t<=e&&ti(t,r,s,n,i)}a(rY,"lessThanEqualCompare");KN.exports={parseRow:lh,searchAll:Q$,searchAllToMap:z$,iterateDBI:J$,endsWith:X$,contains:Z$,greaterThanCompare:j$,greaterThanEqualCompare:eY,lessThanCompare:tY,lessThanEqualCompare:rY,pushResults:ti}});var Qi=m((nie,jN)=>{"use strict";var Sn=ye(),tie=x(),cr=Ht(),pl=xe(),ke=rr().LMDB_ERRORS_ENUM,rie=V(),sY=A(),Tl=_h(),{parseRow:nY}=Tl,sie=require("lmdb"),{OVERFLOW_MARKER:WN,MAX_SEARCH_KEY_LENGTH:iY}=pl;function QN(e,t,r,s=!1,n=void 0,i=void 0){return ri(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(QN,"iterateFullIndex");function Da(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return ri(e,t,r,(_,d,E,f)=>{let O={transaction:_,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!l,exclusiveStart:i===!0?l:u};return f===r?(O.values=!1,d.getRange(O).map(k=>({value:k}))):d.getRange(O)})}a(Da,"iterateRangeBetween");function ri(e,t,r,s){let n=e.database||e,i=Sn.openDBI(n,r);i[pl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Sn.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(ri,"setupTransaction");function zN(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(WN)){if(!n)if(r)n=Sn.openDBI(e,r);else{let u=Sn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=Sn.openDBI(e,u[l]),!n[pl.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(zN,"getOverflowCheck");function oY(e,t,r,s=!1,n=void 0,i=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return ri(e,t,t,(o,c,u)=>(Rl(r),r=La(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>nY(l.value,r))))}a(oY,"searchAll");function aY(e,t,r,s=!1,n=void 0,i=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);Rl(r),r=La(e.database||e,r);let o=new Map;for(let{key:c,value:u}of QN(e,t,t,s,n,i))o.set(c,Tl.parseRow(u,r));return o}a(aY,"searchAllToMap");function cY(e,t,r=!1,s=void 0,n=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=QN(e,void 0,t,r,s,n),c=o.transaction,u=zN(c.database,c,void 0,t);for(let{key:l,value:_}of o){let d=u(l,_);i[d]===void 0&&(i[d]=[]),i[d].push(_)}return i}a(cY,"iterateDBI");function uY(e,t){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return Sn.statDBI(e,t).entryCount}a(uY,"countAll");function lY(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ri(e,t,r,(c,u,l,_)=>(s=cr.convertKeyValueToWrite(s),_===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(lY,"equals");function _Y(e,t,r){return pn(e,t,r),Sn.openDBI(e,t).getValuesCount(r)}a(_Y,"count");function dY(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ri(e,null,r,(c,u)=>{s=cr.convertKeyValueToWrite(s);let l=!0;typeof s=="number"&&(l=!1);let _;if(n===!0){let d;for(let E of u.getKeys({transaction:c,start:s}))if(!E.startsWith(s)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),_=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(s))return E;if(l===!0)return _.DONE}}),_.filter(E=>E)}else return _=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(l===!0)return _.DONE}),l?_:_.filter(d=>d)})}a(dY,"startsWith");function EY(e,t,r,s,n=!1,i=void 0,o=void 0){return JN(e,t,r,s,n,i,o,!0)}a(EY,"endsWith");function JN(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return pn(e,r,s),ri(e,null,r,(u,l,_,d)=>{let E=zN(_,u,d,r);return o=Number.isInteger(o)?o:0,l.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(f=>{let h=f.toString();return h.endsWith(WN)?l.getValues(f,{transaction:u}).map(p=>{let T=E(f,p);if(c?T.endsWith(s):T.includes(s))return{key:T,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?l[pl.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(p=>({key:f,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(JN,"contains");function fY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Da(e,t,r,s,u,n,i,o,!0,!1)}a(fY,"greaterThan");function hY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Da(e,t,r,s,u,n,i,o,!1,!1)}a(hY,"greaterThanEqual");function mY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Da(e,t,r,u,s,n,i,o,!1,!0)}a(mY,"lessThan");function SY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Da(e,t,r,u,s,n,i,o,!1,!1)}a(SY,"lessThanEqual");function pY(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(cr.validateEnv(e),r===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ke.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ke.END_VALUE_REQUIRED);if(s=cr.convertKeyValueToWrite(s),n=cr.convertKeyValueToWrite(n),s>n)throw new Error(ke.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Da(e,t,r,s,n,i,o,c)}a(pY,"between");function TY(e,t,r,s){cr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(Rl(r),r=La(n,r),s===void 0)throw new Error(ke.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Tl.parseRow(c,r)),o}a(TY,"searchByHash");function RY(e,t,r){cr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ke.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(RY,"checkHashExists");function gY(e,t,r,s,n=[]){return ZN(e,t,r,s,n),XN(e,t,r,s,n).map(i=>i[1])}a(gY,"batchSearchByHash");function AY(e,t,r,s,n=[]){ZN(e,t,r,s,n);let i=new Map;for(let[o,c]of XN(e,t,r,s,n))i.set(o,c);return i}a(AY,"batchSearchByHashToMap");function XN(e,t,r,s,n=[]){return ri(e,t,t,(i,o,c)=>{r=La(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,Tl.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(XN,"batchHashSearch");function ZN(e,t,r,s,n){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(Rl(r),s==null)throw new Error(ke.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ke.IDS_MUST_BE_ITERABLE)}a(ZN,"initializeBatchSearchByHash");function Rl(e){if(!Array.isArray(e))throw e===void 0?new Error(ke.FETCH_ATTRIBUTES_REQUIRED):new Error(ke.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Rl,"validateFetchAttributes");function pn(e,t,r){if(cr.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ke.SEARCH_VALUE_REQUIRED);if(r?.length>iY)throw new Error(ke.SEARCH_VALUE_TOO_LARGE)}a(pn,"validateComparisonFunctions");function La(e,t){return t.length===1&&sY.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Sn.listDBIs(e)),t}a(La,"setGetWholeRowAttributes");jN.exports={searchAll:oY,searchAllToMap:aY,count:_Y,countAll:uY,equals:lY,startsWith:dY,endsWith:EY,contains:JN,searchByHash:TY,setGetWholeRowAttributes:La,batchSearchByHash:gY,batchSearchByHashToMap:AY,checkHashExists:RY,iterateDBI:cY,greaterThan:fY,greaterThanEqual:hY,lessThan:mY,lessThanEqual:SY,between:pY}});var zi=m((oie,nb)=>{var eb=require("lodash"),tb=Pe(),Ce=require("joi"),OY=V(),{hdb_schema_table:gl,checkValidTable:rb,hdb_table:sb,hdb_database:Al}=ss(),{handleHDBError:NY,hdb_errors:bY}=W(),{getDatabases:yY}=(de(),re(Ne)),{HTTP_STATUS_CODES:IY}=bY,wY=Ce.object({database:Al,schema:Al,table:sb,search_attribute:gl,search_value:Ce.any().required(),get_attributes:Ce.array().min(1).items(gl).optional(),desc:Ce.bool(),limit:Ce.number().integer().min(1),offset:Ce.number().integer().min(0)}),CY=Ce.object({database:Al,schema:Al,table:sb,operator:Ce.string().valid("and","or").default("and").lowercase(),offset:Ce.number().integer().min(0),limit:Ce.number().integer().min(1),get_attributes:Ce.array().min(1).items(gl).optional(),conditions:Ce.array().min(1).items(Ce.object({search_attribute:gl,search_type:Ce.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:Ce.when("search_type",{switch:[{is:"equals",then:Ce.any()},{is:"between",then:Ce.array().items(Ce.alternatives([Ce.string(),Ce.number()])).length(2)}],otherwise:Ce.alternatives(Ce.string(),Ce.number())}).required()})).required()});nb.exports=function(e,t){let r=null;switch(t){case"value":r=tb.validateBySchema(e,wY);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(rb("database",e.schema)),i(rb("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=tb.validateBySchema(e,CY);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=OY.checkGlobalSchemaTable(e.schema,e.table);if(n)return NY(new Error,n,IY.NOT_FOUND);let o=yY()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let l=0,_=e.conditions.length;l<_;l++){let d=e.conditions[l];c.push(d.search_attribute)}let u=eb.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!eb.some(o,_=>_===l||_.attribute===l||_.attribute===l.attribute));if(u&&u.length>0){let l=u.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var dh=m((cie,ib)=>{"use strict";var UY=ye(),DY=zi(),{getSchemaPath:LY}=we();ib.exports=MY;function MY(e){let t=DY(e,"hashes");if(t)throw t;let r=LY(e.schema,e.table);return UY.openEnvironment(r,e.table)}a(MY,"initialize")});var Eh=m((lie,ob)=>{"use strict";var PY=Qi(),vY=dh();ob.exports=BY;async function BY(e){let t=await vY(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return PY.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(BY,"lmdbGetDataByHash")});var Ji=m((die,ab)=>{"use strict";var fh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};ab.exports=fh});var ub=m((hie,cb)=>{"use strict";var fie=Ji(),HY=Qi(),qY=dh();cb.exports=FY;async function FY(e){let t=await qY(e),r=global.hdb_schema[e.schema][e.table];return HY.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(FY,"lmdbSearchByHash")});var as=m((Sie,lb)=>{"use strict";var hh=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,l=void 0,_=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=l,this.offset=_}};lb.exports=hh});var Ol=m((Tie,mb)=>{"use strict";var Ct=Qi(),GY=ye(),xY=V(),ie=xe(),si=A(),kY=Kn(),_b=rr().LMDB_ERRORS_ENUM,{getSchemaPath:VY}=we(),Vs=si.SEARCH_WILDCARDS;async function $Y(e,t,r){let s;e.schema===si.SYSTEM_SCHEMA_NAME?s=kY[e.table]:s=global.hdb_schema[e.schema][e.table];let n=hb(e,s.hash_attribute,r,t);return Eb(e,n,s.hash_attribute,r)}a($Y,"prepSearch");async function Eb(e,t,r,s){let n=VY(e.schema,e.table),i=await GY.openEnvironment(n,e.table),o=fb(i,e,t,r),c=o.transaction||i;if([ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ie.SEARCH_TYPES.SEARCH_ALL,ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(YY(e,r)===!1){let _=e.search_attribute;if(_===r)return s?db(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?db(o,d):o.map(d)}let l=e.search_attribute===r?o.map(_=>_.key):o.map(_=>_.value);return s===!0?Ct.batchSearchByHashToMap(c,r,e.get_attributes,l):Ct.batchSearchByHash(c,r,e.get_attributes,l)}a(Eb,"executeSearch");function fb(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 ie.SEARCH_TYPES.EQUALS:n=Ct.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.CONTAINS:n=Ct.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.ENDS_WITH:case ie.SEARCH_TYPES._ENDS_WITH:n=Ct.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.STARTS_WITH:case ie.SEARCH_TYPES._STARTS_WITH:n=Ct.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ct.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ct.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ie.SEARCH_TYPES.SEARCH_ALL:return Ct.searchAll(e,s,t.get_attributes,o,c,u);case ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ct.searchAllToMap(e,s,t.get_attributes,o,c,u);case ie.SEARCH_TYPES.BETWEEN:n=Ct.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ie.SEARCH_TYPES.GREATER_THAN:case ie.SEARCH_TYPES._GREATER_THAN:n=Ct.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.GREATER_THAN_EQUAL:case ie.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ct.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.LESS_THAN:case ie.SEARCH_TYPES._LESS_THAN:n=Ct.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.LESS_THAN_EQUAL:case ie.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ct.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(fb,"searchByType");function db(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(db,"createMapFromIterable");function YY(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(YY,"checkToFetchMore");function hb(e,t,r,s){if(xY.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),Vs.indexOf(n)>-1)return r===!0?ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ie.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Vs[0])<0&&n.indexOf(Vs[1])<0)return c===!0?r===!0?ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ie.SEARCH_TYPES.EQUALS;if(Vs.indexOf(i)>=0&&Vs.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ie.SEARCH_TYPES.CONTAINS;if(Vs.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ie.SEARCH_TYPES.ENDS_WITH;if(Vs.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ie.SEARCH_TYPES.STARTS_WITH;if(n.includes(Vs[0])||n.includes(Vs[1]))return ie.SEARCH_TYPES.EQUALS;throw new Error(_b.UNKNOWN_SEARCH_TYPE)}else switch(s){case si.VALUE_SEARCH_COMPARATORS.BETWEEN:return ie.SEARCH_TYPES.BETWEEN;case si.VALUE_SEARCH_COMPARATORS.GREATER:return ie.SEARCH_TYPES.GREATER_THAN;case si.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ie.SEARCH_TYPES.GREATER_THAN_EQUAL;case si.VALUE_SEARCH_COMPARATORS.LESS:return ie.SEARCH_TYPES.LESS_THAN;case si.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ie.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(_b.UNKNOWN_SEARCH_TYPE)}}a(hb,"createSearchTypeFromSearchObject");mb.exports={executeSearch:Eb,createSearchTypeFromSearchObject:hb,prepSearch:$Y,searchByType:fb}});var pb=m((Aie,Sb)=>{"use strict";var gie=as(),KY=zi(),WY=V(),QY=A(),zY=Ol();Sb.exports=JY;function JY(e,t){if(!WY.isEmpty(t)&&QY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=KY(e,"value");if(s)throw s;let n=!0;return zY.prepSearch(e,t,n)}a(JY,"lmdbGetDataByValue")});var Ma=m((bie,Tb)=>{"use strict";var Nie=as(),XY=zi(),ZY=V(),jY=A(),eK=Ol();Tb.exports=tK;async function tK(e,t){if(!ZY.isEmpty(t)&&jY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=XY(e,"value");if(s)throw s;return eK.prepSearch(e,t,!1)}a(tK,"lmdbSearchByValue")});var gb=m((wie,Rb)=>{"use strict";var Iie=xe(),mh=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}},Sh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},ph=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Rb.exports={SearchByConditionsObject:mh,SearchCondition:Sh,SortAttribute:ph}});var yb=m((Lie,bb)=>{"use strict";var Uie=gb().SearchByConditionsObject,rK=as(),sK=zi(),Th=Qi(),Nl=xe(),{Resource:Die}=(jr(),re(qE)),Nb=Ol(),nK=_h(),iK=require("lodash"),{getSchemaPath:oK}=we(),Ab=ye(),{handleHDBError:aK,hdb_errors:cK}=W(),{HTTP_STATUS_CODES:uK}=cK,lK=1e8;bb.exports=_K;async function _K(e){let t=sK(e,"conditions");if(t)throw aK(t,t.message,uK.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=oK(e.schema,e.table),s=await Ab.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)Ab.openDBI(s,l.search_attribute);let i=iK.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Nl.SEARCH_TYPES.EQUALS?l.estimated_count=Th.count(s,l.search_attribute,l.search_value):_===Nl.SEARCH_TYPES.CONTAINS||_===Nl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=lK}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Ob(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let l=s.dbis[n.hash_attribute],_=i.slice(1).map(Nb.filterByType),d=_.length,E=Th.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(f=>l.get(f,{transaction:o,lazy:!0})),d>0&&(u=u.filter(f=>{for(let h=0;h<d;h++)if(!_[h](f))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(f=>nK.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await Ob(o,e,E,n.hash_attribute);c=c.concat(f)}let l=new Set,_=e.offset||0;c=c.filter(d=>l.has(d)?!1:(l.add(d),!0)).slice(_,e.limit&&e.limit+_),u=Th.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(_K,"lmdbSearchByConditions");async function Ob(e,t,r,s){let n=new rK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Nl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Nb.searchByType(e,n,i,s).map(o=>o.value)}a(Ob,"executeConditionSearch")});var Pa=m((Pie,Ib)=>{"use strict";var dK=A().OPERATIONS_ENUM,Rh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=dK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Ib.exports=Rh});var gh=m((Bie,vb)=>{"use strict";var Db=as(),Lb=Pa(),Mb=Ma(),Pb=Ua(),Ft=A(),wb=V(),Cb=ye(),{getTransactionAuditStorePath:EK,getSchemaPath:fK}=we(),Ub=x();vb.exports=hK;async function hK(e){try{if(wb.isEmpty(global.hdb_schema[e.schema])||wb.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await mK(e),await SK(e);let t=fK(e.schema,e.table);try{await Cb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Ub.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=EK(e.schema,e.table);await Cb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Ub.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(hK,"lmdbDropTable");async function mK(e){let t=new Db(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Mb(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 Lb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Pb(n)}a(mK,"deleteAttributesFromSystem");async function SK(e){let t=new Db(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Mb(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 Lb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Pb(n)}catch(i){throw i}}a(SK,"dropTableFromSystem")});var Hb=m((qie,Bb)=>{"use strict";var pK=require("fs-extra"),TK=as(),RK=Ji(),gK=Pa(),AK=gh(),OK=Ua(),NK=Eh(),bK=Ma(),$s=A(),{getSchemaPath:yK}=we(),{handleHDBError:IK,hdb_errors:wK}=W(),{HDB_ERROR_MSGS:CK,HTTP_STATUS_CODES:UK}=wK;Bb.exports=DK;async function DK(e){let t;try{t=await LK(e.schema);let r=new TK($s.SYSTEM_SCHEMA_NAME,$s.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,$s.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[$s.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await bK(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await AK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new gK($s.SYSTEM_SCHEMA_NAME,$s.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await OK(n);let i=yK(t);await pK.remove(i)}catch(r){throw r}}a(DK,"lmdbDropSchema");async function LK(e){let t=new RK($s.SYSTEM_SCHEMA_NAME,$s.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[$s.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await NK(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw IK(new Error,CK.SCHEMA_NOT_FOUND(e),UK.NOT_FOUND,void 0,void 0,!0);return s}a(LK,"validateDropSchema")});var Oh=m((Gie,qb)=>{"use strict";var Ah=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};qb.exports=Ah});var Gb=m((Vie,Fb)=>{"use strict";var MK=require("fs-extra"),bl=ye(),{getTransactionAuditStorePath:PK}=we(),Nh=xe(),kie=Oh();Fb.exports=vK;async function vK(e){let t;try{let r=PK(e.schema,e.table);await MK.mkdirp(r),t=await bl.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{bl.createDBI(t,Nh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),bl.createDBI(t,Nh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),bl.createDBI(t,Nh.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(vK,"createTransactionsAuditEnvironment")});var $b=m((Yie,Vb)=>{"use strict";var bh=A(),xb=ye(),BK=Hi(),{getSystemSchemaPath:HK,getSchemaPath:qK}=we(),FK=Kn(),GK=Zu(),yh=Xu(),xK=x(),kK=Gb(),wh=FK.hdb_table,kb=[];for(let e=0;e<wh.attributes.length;e++)kb.push(wh.attributes[e].attribute);Vb.exports=VK;async function VK(e,t){let r=qK(t.schema,t.table),s=new yh(t.schema,t.table,bh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new yh(t.schema,t.table,bh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new yh(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await xb.createEnvironment(r,t.table),e!==void 0){let o=await xb.openEnvironment(HK(),bh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await BK.insertRecords(o,wh.hash_attribute,kb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Ih(s),await Ih(n),await Ih(i)}await kK(t)}catch(o){throw o}}a(VK,"lmdbCreateTable");async function Ih(e){try{await GK(e)}catch(t){xK.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Ih,"createAttribute")});var Kb=m((Wie,Yb)=>{"use strict";var $K=Sa(),YK=Aa(),KK=ml(),va=A(),WK=Hi().updateRecords,QK=ye(),{getSchemaPath:zK}=we(),JK=wa(),XK=x();Yb.exports=ZK;async function ZK(e){try{let{schema_table:t,attributes:r}=$K(e);YK(e,r,t.hash_attribute),e.schema!==va.SYSTEM_SCHEMA_NAME&&(r.includes(va.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(va.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(va.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(va.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await KK(e.hdb_auth_header,t,r),n=zK(e.schema,e.table),i=await QK.openEnvironment(n,e.table),o=await WK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await JK(e,o)}catch(c){XK.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(ZK,"lmdbUpdateRecords")});var Qb=m((zie,Wb)=>{"use strict";var jK=A().OPERATIONS_ENUM,Ch=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=jK.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Wb.exports=Ch});var Jb=m((Zie,zb)=>{"use strict";var Xie=Qb(),e1=Sa(),t1=Aa(),r1=ml(),Ba=A(),s1=Hi().upsertRecords,n1=ye(),{getSchemaPath:i1}=we(),o1=wa(),a1=x(),{handleHDBError:c1,hdb_errors:u1}=W();zb.exports=l1;async function l1(e){let t;try{t=e1(e)}catch(u){throw c1(u,u.message,u1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;t1(e,s,r.hash_attribute),e.schema!==Ba.SYSTEM_SCHEMA_NAME&&(s.includes(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await r1(e.hdb_auth_header,r,s),i=i1(e.schema,e.table),o=await n1.openEnvironment(i,e.table),c=await s1(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await o1(e,c)}catch(u){a1.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(l1,"lmdbUpsertRecords")});var Zb=m((eoe,Xb)=>{"use strict";var Uh=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Xb.exports=Uh});var ey=m((roe,jb)=>{"use strict";var Dh=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}};jb.exports=Dh});var sy=m((ioe,ry)=>{"use strict";var Lh=ye(),{getTransactionAuditStorePath:_1}=we(),noe=Zb(),Ha=xe(),d1=V(),ty=ey(),E1=require("util").promisify,f1=E1(setTimeout),h1=1e4,m1=100;ry.exports=S1;async function S1(e){let t=_1(e.schema,e.table),r=await Lh.openEnvironment(t,e.table,!0),s=Lh.listDBIs(r);Lh.initializeDBIs(r,Ha.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new ty;do n=await p1(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 f1(m1);while(n.transactions_deleted>0);return i}a(S1,"deleteAuditLogsBefore");async function p1(e,t){let r=new ty;try{let s=e.dbis[Ha.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[Ha.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];d1.isEmpty(c)||(n=e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>h1)break}return await n,r}catch(s){throw s}}a(p1,"deleteTransactions")});var iy=m((aoe,ny)=>{"use strict";var Mh=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};ny.exports=Mh});var ay=m((loe,oy)=>{"use strict";var T1=as(),R1=Pa(),uoe=iy(),cs=A(),g1=V(),Ph=ye(),A1=Kn(),O1=Ma(),N1=Ua(),{getSchemaPath:b1}=we();oy.exports=y1;async function y1(e,t=!0){let r;e.schema===cs.SYSTEM_SCHEMA_NAME?r=A1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await w1(e),n=b1(e.schema,e.table),i=await Ph.openEnvironment(n,e.table);return t===!0&&await I1(e,i,r.hash_attribute),Ph.dropDBI(i,e.attribute),s}a(y1,"lmdbDropAttribute");async function I1(e,t,r){let s=Ph.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let l={};for(let _ in c)_!==i&&(l[_]=c[_]);n=t.dbis[r].put(o,l,u)}await n}a(I1,"removeAttributeFromAllObjects");async function w1(e){let t=new T1(cs.SYSTEM_SCHEMA_NAME,cs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await O1(t)).filter(o=>o[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(g1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new R1(cs.SYSTEM_SCHEMA_NAME,cs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return N1(i)}a(w1,"dropAttributeFromSystem")});var Ey=m((Eoe,dy)=>{"use strict";var vh=ye(),Xi=xe(),doe=Ht(),Bh=A(),cy=V(),{getTransactionAuditStorePath:C1}=we(),U1=Qi(),yl=Yi(),D1=x();dy.exports=L1;async function L1(e){let t=C1(e.schema,e.table),r=await vh.openEnvironment(t,e.table,!0),s=vh.listDBIs(r);vh.initializeDBIs(r,Xi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Bh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return uy(r,e.search_values);case Bh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,P1(r,e.search_values,n);case Bh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return M1(r,e.search_values);default:return uy(r)}}a(L1,"readAuditLog");function uy(e,t=[0,Date.now()]){cy.isEmpty(t[0])&&(t[0]=0),cy.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Xi.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 yl,n))}a(uy,"searchTransactionsByTimestamp");function M1(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[Xi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,_y(e,i))}return Object.fromEntries(r)}a(M1,"searchTransactionsByUsername");function P1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=U1.equals(e,Xi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Xi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,l);for(let{value:d}of _){let E=Number(d);s.has(E)?s.get(E).push(l.toString()):s.set(E,[l.toString()])}}let n=Array.from(s.keys()),i=_y(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);ly(u,"records",r,_,o),ly(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(P1,"searchTransactionsByHashValues");function ly(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 l=n.get(u),_=l[l.length-1];if(_.timestamp===i)_[t]=[c];else{let d=new yl(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new yl(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(ly,"loopRecords");function _y(e,t){let r=[];try{let s=e.dbis[Xi.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 yl,i);r.push(o)}}catch(i){D1.warn(i)}return r}catch(s){throw s}}a(_y,"batchSearchTransactions")});var hy=m((Soe,fy)=>{"use strict";var{getSchemaPath:hoe}=we(),moe=ye(),{database:v1}=(de(),re(Ne));fy.exports={writeTransaction:B1};async function B1(e,t,r){return v1({database:e,table:t}).transaction(r)}a(B1,"writeTransaction")});var Ty=m((Toe,py)=>{"use strict";var{getSchemaPath:my}=we(),Sy=ye();py.exports={flush:H1,resetReadTxn:q1};async function H1(e,t){return(await Sy.openEnvironment(my(e,t),t.toString())).flushed}a(H1,"flush");async function q1(e,t){try{(await Sy.openEnvironment(my(e,t),t.toString())).resetReadTxn()}catch{}}a(q1,"resetReadTxn")});var Oy=m((goe,Ay)=>{"use strict";var{Readable:F1}=require("stream"),{getDatabases:G1}=(de(),re(Ne)),{readSync:x1,openSync:k1,createReadStream:Ry}=require("fs"),{open:V1}=require("lmdb"),gy=xu(),$1=Vu(),{INTERNAL_DBIS_NAME:Y1}=xe();Ay.exports=W1;var Hh=32768,K1=100;async function W1(e){let t=e.database||e.schema||"data",r=G1()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let l=r[n[0]];if(!l)throw new Error(`Can not find table ${n[0]}`);let _=l.dbisDB,d=V1({noSync:!0,maxDbs:$1.MAX_DBS}),E,f=d.openDB(Y1,new gy(!1)),h=_.useReadTransaction(),p=0;for(let{key:g,value:O}of _.getRange({transaction:h,start:!1}))if(n.some(k=>g.startsWith?.(k+"/"))){f.put(g,O);let[,k]=g.split("/"),$=!k,U=new gy(!$,$);U.encoding="binary";let b=d.openDB(g,U),P=_.openDB(g,U);for(let{key:z,version:q,value:Oe}of P.getRange({transaction:h,versions:$}))E=b.put(z,Oe,q),p++%K1===0&&await new Promise(Ze=>setTimeout(Ze,20))}await E;let T=Ry(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=k1(o.path);return o.transaction(()=>{let l=Buffer.alloc(Hh);x1(c,l,0,Hh);let _=o.useReadTransaction(),d=Ry(null,{fd:c,start:Hh}),E=new F1.from(async function*(){yield l;for await(let f of d)yield f;_.done()}());return E.headers=u(),E});function u(){let l=new Map;return l.set("content-type","application/octet-stream"),l.set("content-disposition",`attachment; filename="${t}"`),l.set("date",s),l}}a(W1,"getBackup")});var yy=m((Ooe,by)=>{"use strict";var Q1=x(),{handleHDBError:z1}=W(),J1=cA(),X1=Zu(),Z1=oh(),j1=HN(),eW=Ua(),tW=Eh(),rW=ub(),sW=pb(),nW=Ma(),iW=yb(),oW=Hb(),aW=$b(),cW=Kb(),uW=Jb(),lW=sy(),_W=gh(),dW=ay(),EW=Ey(),fW=hy(),Ny=Ty(),hW=Oy(),qh=class extends J1{static{a(this,"LMDBBridge")}async searchByConditions(t){return iW(t)}async getDataByHash(t){return await tW(t)}async searchByHash(t){return await rW(t)}async getDataByValue(t,r){return await sW(t,r)}async searchByValue(t){return await nW(t)}async createSchema(t){return await j1(t)}async dropSchema(t){return await oW(t)}async createTable(t,r){return await aW(t,r)}async dropTable(t){return await _W(t)}async createAttribute(t){return await X1(t)}async createRecords(t){return await Z1(t)}async updateRecords(t){return await cW(t)}async upsertRecords(t){try{return await uW(t)}catch(r){throw z1(r,null,null,Q1.ERR,r)}}async deleteRecords(t){return await eW(t)}async dropAttribute(t){return await dW(t)}async deleteAuditLogsBefore(t){return await lW(t)}async readAuditLog(t){return await EW(t)}writeTransaction(t,r,s){return fW.writeTransaction(t,r,s)}flush(t,r){return Ny.flush(t,r)}resetReadTxn(t,r){return Ny.resetReadTxn(t,r)}getBackup(t){return hW(t)}};by.exports=qh});var vy={};je(vy,{ResourceBridge:()=>xh});function kh({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 wy(e,t){let r=us(e),s=kh(e,r);if(!r)throw new Gr.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};return Ye(i,async function*(o){for(let c of e.hash_values){let u=await r.get({id:c,lazy:n,select:s},i);u=u&&Pu(u),t?yield{key:c,value:u}:yield u}})}function us(e){let t=e.database||e.schema||SW,r=xr()[t];if(!r)throw(0,Gr.handleHDBError)(new Error,mW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Cy(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*Uy(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,timestamp: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 Dy,Il,Gr,Ly,My,kr,Fh,Gh,Py,mW,SW,pW,TW,Iy,xh,By=Se(()=>{"use strict";Dy=C(yy()),Il=C(zi()),Gr=C(W());de();Ly=C(Sa()),My=C(Aa()),kr=C(A()),Fh=C(ks()),Gh=C(Fr()),Py=C(V());$n();vu();({HDB_ERROR_MSGS:mW}=Gr.hdb_errors),SW="data",pW=1e4,TW=10,xh=class extends Dy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Iy=this}async searchByConditions(t){let r=(0,Il.default)(t,"conditions");if(r)throw(0,Gr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=us(t);if(!s)throw new Gr.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:kh(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 Gr.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}]}st({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await us(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=us(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(l=>{if(!l){let{value:_,version:d}=r.primaryStore.getEntry(o);return i(o,_,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(l=>setImmediate(l));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){us(t).dropTable()}createSchema(t){return qa({database:t.schema,table:null}),Fh.signalSchemaChange(new Gh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Vh(t.schema),Fh.signalSchemaChange(new Gh.SchemaEventMsg(process.pid,kr.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,Iy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,Ly.default)(t);(0,My.default)(t,s,r.primaryKey);let n,i=xr()[t.schema][t.table],o={user:t.hdb_user};return Ye(o,async c=>{if(!i.schemaDefined){n=[];for(let _ of s)i.attributes.find(E=>E.name==_)||n.push(_);n.length>0&&await i.addAttributes(n.map(_=>({name:_,indexed:!0})))}let u=[],l=[];for(let _ of t.records){let d=await i.get(_[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){l.push(_[i.primaryKey]);continue}d&&(d=Pu(d));for(let E in _)if(Object.prototype.hasOwnProperty.call(_,E)){let f=_[E];if(typeof f=="function")try{let h=f([[d]]);Array.isArray(h)&&(f=h[0].func_val,_[E]=f)}catch(h){throw h.message+="Trying to set key "+E+" on object"+JSON.stringify(_),h}}if(d)for(let E in d)Object.prototype.hasOwnProperty.call(_,E)||(_[E]=d[E]);await i.put(_,o),u.push(_[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:l}})}async deleteRecords(t){let r=xr()[t.schema][t.table],s={user:t.hdb_user};return Ye(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 Cy(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=xr()[t.schema][t.table];if(!r.createdTimeProperty)throw new Gr.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:kr.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],l=a(async()=>{let _=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(..._.deleted_hashes),o.push(..._.skipped_hashes),await(0,Py.async_set_timeout)(TW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%pW===0&&await l();return u.length>0&&await l(),n?Cy(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Il.default)(t,"hashes");if(r)throw r;return wy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of wy(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&kr.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,Il.default)(t,"value");if(s)throw s;let n=us(t);if(!n)throw new Gr.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===kr.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:kh(t,n)})}async getDataByValue(t,r){let s=new Map,n=us(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){us({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return us(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=us(t),s={};switch(t.search_type){case kr.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,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of Uy(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return Uy(r,t.search_values?.[0],t.search_values?.[1])}}};a(kh,"getSelect");a(wy,"getRecords");a(us,"getTable");a(Cy,"createDeleteResponse");a(Uy,"groupRecordsInHistory")});var qr=m((Coe,Hy)=>{"use strict";var{ResourceBridge:RW}=(By(),re(vy)),gW=Q();gW.initSync();var wl;function AW(){return wl||(wl=new RW,wl)}a(AW,"getBridge");Hy.exports=AW()});var xy=m((Doe,Gy)=>{"use strict";var qy=require("lodash"),Fa=require("mathjs"),OW=require("jsonata"),Fy=V();Gy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?qy.uniqWith(e,qy.isEqual):e,searchJSON:NW,mad:Ga.bind(null,Fa.mad),mean:Ga.bind(null,Fa.mean),mode:Ga.bind(null,Fa.mode),prod:Ga.bind(null,Fa.prod),median:Ga.bind(null,Fa.median)};function Ga(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(Ga,"aggregateFunction");function NW(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(Fy.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Fy.isEmpty(this.__ala__.res[r])){let s=OW(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(NW,"searchJSON")});var Vy=m((Moe,ky)=>{"use strict";var We=require("moment"),$h="YYYY-MM-DDTHH:mm:ss.SSSZZ";We.suppressDeprecationWarnings=!0;ky.exports={current_date:()=>We().utc().format("YYYY-MM-DD"),current_time:()=>We().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return We(e).utc().format("YYYY");case"month":return We(e).utc().format("MM");case"day":return We(e).utc().format("DD");case"hour":return We(e).utc().format("HH");case"minute":return We(e).utc().format("mm");case"second":return We(e).utc().format("ss");case"millisecond":return We(e).utc().format("SSS");default:break}},date:e=>We(e).utc().format($h),date_format:(e,t)=>We(e).utc().format(t),date_add:(e,t,r)=>We(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>We(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=We(e).utc(),n=We(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>We().utc().valueOf(),get_server_time:()=>We().format($h),offset_utc:(e,t)=>We(e).utc().utcOffset(t).format($h)}});var Wy=m((Poe,Ky)=>{"use strict";var bW=require("@turf/area"),yW=require("@turf/length"),IW=require("@turf/circle"),wW=require("@turf/difference"),CW=require("@turf/distance"),UW=require("@turf/boolean-contains"),DW=require("@turf/boolean-equal"),LW=require("@turf/boolean-disjoint"),MW=require("@turf/helpers"),$y=A(),le=V();Ky.exports={geoArea:PW,geoLength:vW,geoCircle:BW,geoDifference:HW,geoDistance:Yy,geoNear:qW,geoContains:FW,geoEqual:GW,geoCrosses:xW,geoConvert:kW};var Yh="geo1 is required",Kh="geo2 is required";function PW(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),bW.default(e)}a(PW,"geoArea");function vW(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),yW.default(e,{units:t||"kilometers"})}a(vW,"geoLength");function BW(e,t,r){if(le.isEmpty(e))throw new Error("point is required");if(le.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),IW.default(e,t,{units:r||"kilometers"})}a(BW,"geoCircle");function HW(e,t){if(le.isEmpty(e))throw new Error("poly1 is required");if(le.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),wW(e,t)}a(HW,"geoDifference");function Yy(e,t,r){if(le.isEmpty(e))throw new Error("point1 is required");if(le.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),CW.default(e,t,{units:r||"kilometers"})}a(Yy,"geoDistance");function qW(e,t,r,s){if(le.isEmpty(e))throw new Error("point1 is required");if(le.isEmpty(t))throw new Error("point2 is required");if(le.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return Yy(e,t,s)<=r}a(qW,"geoNear");function FW(e,t){if(le.isEmpty(e))throw new Error(Yh);if(le.isEmpty(e))throw new Error(Kh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),UW.default(e,t)}a(FW,"geoContains");function GW(e,t){if(le.isEmpty(e))throw new Error(Yh);if(le.isEmpty(e))throw new Error(Kh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),DW.default(e,t)}a(GW,"geoEqual");function xW(e,t){if(le.isEmpty(e))throw new Error(Yh);if(le.isEmpty(e))throw new Error(Kh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!LW.default(e,t)}a(xW,"geoCrosses");function kW(e,t,r){if(le.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(le.isEmpty(t))throw new Error("geo_type is required");if(le.isEmpty($y.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys($y.GEO_CONVERSION_ENUM).join(",")}`);return MW[t](e,r)}a(kW,"geoConvert")});var Cl=m((Boe,Qy)=>{var ni=xy(),ur=Vy(),ls=Wy();Qy.exports=e=>{e.aggr.mad=e.aggr.MAD=ni.mad,e.aggr.mean=e.aggr.MEAN=ni.mean,e.aggr.mode=e.aggr.MODE=ni.mode,e.aggr.prod=e.aggr.PROD=ni.prod,e.aggr.median=e.aggr.MEDIAN=ni.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ni.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ni.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ur.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ur.current_time,e.fn.extract=e.fn.EXTRACT=ur.extract,e.fn.date=e.fn.DATE=ur.date,e.fn.date_format=e.fn.DATE_FORMAT=ur.date_format,e.fn.date_add=e.fn.DATE_ADD=ur.date_add,e.fn.date_sub=e.fn.DATE_SUB=ur.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ur.date_diff,e.fn.now=e.fn.NOW=ur.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ur.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ur.get_server_time,e.fn.getdate=e.fn.GETDATE=ur.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ur.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=ls.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ls.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ls.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ls.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ls.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ls.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ls.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ls.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ls.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ls.geoNear}});var Zy=m((Hoe,Xy)=>{"use strict";var xa=require("lodash"),pt=require("alasql");pt.options.cache=!1;var VW=Cl(),zy=require("clone"),Ul=require("recursive-iterator"),se=x(),ne=V(),Zi=qr(),$W=A(),{hdb_errors:YW}=W(),{getDatabases:Jy}=(de(),re(Ne)),KW="IS NULL",Vr="There was a problem performing this search. Please check the logs and try again.";VW(pt);var Wh=class{static{a(this,"SQLSearch")}constructor(t,r){if(ne.isEmpty(t))throw se.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(),ne.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ne.isEmptyOrZeroLength(s))return se.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw se.error("Error thrown from checkEmptySQL in SQLSearch class method search."),se.error(s),new Error(Vr)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw se.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),se.error(s),new Error(Vr)}if(Object.keys(this.data).length===0)return se.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw se.error("Error thrown from processJoins in SQLSearch class method search."),se.error(s),new Error(Vr)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw se.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),se.error(s),new Error(Vr)}try{return t=await this._finalSQL(),t}catch(s){throw se.error("Error thrown from finalSQL in SQLSearch class method search."),se.error(s),new Error(Vr)}}_getColumns(){let t=new Ul(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(zy(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=xa.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=Jy()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ne.isEmpty(this.statement.where)){se.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Ul(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ne.isEmpty(r)&&r.right)if(ne.isNotEmptyAndHasValue(r.right.value)){let s=ne.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new pt.yy.LogicValue({value:s}):r.right instanceof pt.yy.StringValue&&!ne.isEmpty(s)&&ne.autoCasterIsNumberCheck(s.toString())&&(r.right=new pt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ne.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new pt.yy.LogicValue({value:i}):s instanceof pt.yy.StringValue&&ne.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new pt.yy.NumValue({value:i}))});if(t){se.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Ul(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(!ne.isEmpty($W.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ne.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ne.isEmptyOrZeroLength(r.left.columnid)||ne.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(ne.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"=":!ne.isEmpty(r.right.value)||!ne.isEmpty(r.left.value)?s.add(ne.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 l=0;l<u.length;l++)if(u[l].value)s.add(u[l].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from)&&ne.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&&xa.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(ne.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ne.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(ne.isEmptyOrZeroLength(this.all_table_attributes)&&!ne.isEmptyOrZeroLength(this.columns.columns))return t;if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pt.promise(r)}catch(r){throw se.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),se.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(zy(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(ne.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(KW)>-1&&this.tables.forEach(n=>{let i={columnid:Jy()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=xa.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,l=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ne.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await Zi.getDataByHash(c);for(let d of c.hash_values)_.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(_){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(Vr)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[l].values).map(async _=>{let d=Object.assign({},c);d.search_value=_;let E=await Zi.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]):(this.data[i].__merged_data[f]=[...s[i]],this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(f)))}))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(Vr)}else if(!ne.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.comparator_search_values[l].comparators))try{let _=this.comparator_search_values[l].comparators;for(let d=0,E=_.length;d<E;d++){let f=_[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await Zi.getDataByValue(c,f.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,ne.autoCast(p)));else for(let[p,T]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,T[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,T[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(p)))}}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),se.error(_),new Error(Vr)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await Zi.getDataByValue(c);if(u)for(let[d]of _)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(d)));else for(let[d,E]of _)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(d)))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),se.error(_),new Error(Vr)}}}_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 pt.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 pt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new pt.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 pt.yy.FuncValue:new pt.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(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,p=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${p}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${p}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",l="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(l="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let _="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(_=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${l} ${_} ${d}`,h=this._convertColumnsToIndexes(f,n);E=await pt.promise(h,t),t=null}catch(f){throw se.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),se.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let p=E[f];o.forEach(T=>{p[T.key]!==null&&p[T.key]!==void 0&&T.keys.add(p[T.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),p=xa.difference(h,[...f.keys].map(T=>T.toString()));for(let T=0,g=p.length;T<g;T++){let O=p[T];delete this.data[`${f.schema}_${f.table}`].__merged_data[O]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Ul(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=xa.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 se.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),se.error(i),new Error(Vr)}}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 _ in i)o.push(i[_][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 Zi.getDataByHash(c),l=n.columns.length;for(let _=0,d=o.length;_<d;_++){let E=o[_],f=u.get(E);for(let h=0;h<l;h++){let p=n.columns[h],T=f[p]===void 0?null:f[p];this.data[s].__merged_data[E].push(T)}}}}catch(r){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getData."),se.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();se.trace(`Final SQL: ${n}`),s=await pt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),se.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw se.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),se.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 se.error(YW.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),se.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],l=new RegExp(`${u}.\`${o}\``,"g"),_=`${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"),l=`[${c}]`;s=s.replace(u,l)});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 Zi.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 se.error("There was an error when processing this SQL operation. Check your logs"),se.error(o),new Error(Vr)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Xy.exports=Wh});var Or=m((Foe,jy)=>{"use strict";var WW=oA();jy.exports={searchByConditions:zW,searchByHash:JW,searchByValue:XW,search:ZW};var Qh=qr(),{transformReq:zh}=V(),QW=Zy();async function zW(e){return zh(e),Qh.searchByConditions(e)}a(zW,"searchByConditions");async function JW(e){zh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Qh.searchByHash(e))r&&t.push(r);return t}a(JW,"searchByHash");async function XW(e){zh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Qh.searchByValue(e))t.push(r);return t}a(XW,"searchByValue");function ZW(e,t){try{let r=new WW(e);r.validate(),new QW(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(ZW,"search")});var Dl=m((xoe,eI)=>{"use strict";var jW=qr();eI.exports={writeTransaction:eQ};function eQ(e,t,r){return jW.writeTransaction(e,t,r)}a(eQ,"writeTransaction")});var nI=m(($oe,sI)=>{"use strict";var tQ=Or(),rQ=xs(),tI=x(),sQ=Nr(),Voe=Dl(),nQ=require("clone"),Xh=require("alasql"),iQ=Cl(),rI=require("util"),oQ=rI.promisify(rQ.getTableSchema),aQ=rI.promisify(tQ.search),cQ=A(),Jh=V();iQ(Xh);sI.exports={update:lQ};var uQ="There was a problem performing this update. Please check the logs and try again.";async function lQ({statement:e,hdb_user:t}){let r=await oQ(e.table.databaseid,e.table.tableid),s=_Q(e.columns);Jh.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=nQ(n),c=Jh.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=Xh.parse(u).statements[0],_=await aQ(l),d=dQ(s,_);return EQ(o,d,t)}a(lQ,"update");function _Q(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Xh.compile(`SELECT ${r.expression.toString()} AS [${cQ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw tI.error(t),new Error(uQ)}}a(_Q,"createUpdateRecord");function dQ(e,t){return Jh.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(dQ,"buildUpdateRecords");async function EQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await sQ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){tI.error(`Error delete new_attributes from update response: ${i}`)}return n}a(EQ,"updateRecords")});var oI=m((Qoe,iI)=>{var fQ=require("alasql"),hQ=Or(),mQ=x(),SQ=qr(),jh=require("util"),Zh=V(),pQ=A(),TQ=xs(),Koe=Dl(),Woe=Nr(),RQ="record",gQ="successfully deleted",AQ=jh.callbackify(yQ),OQ=jh.promisify(hQ.search),NQ=jh.promisify(TQ.getTableSchema);iI.exports={convertDelete:AQ};function bQ(e){return`${e.deleted_hashes.length} ${RQ}${e.deleted_hashes.length===1?"":"s"} ${gQ}`}a(bQ,"generateReturnMessage");async function yQ({statement:e,hdb_user:t}){let r=await NQ(e.table.databaseid,e.table.tableid);Zh.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Zh.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=fQ.parse(o).statements[0],u={operation:pQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await OQ(c);let l=await SQ.deleteRecords(u);return Zh.isEmptyOrZeroLength(l.message)&&(l.message=bQ(l)),delete l.txn_time,l}catch(l){throw mQ.error(l),l.hdb_code?l.message:l}}a(yQ,"convertDelete")});var _I=m((Joe,lI)=>{"use strict";var IQ=Qn(),{hdb_errors:aI}=W(),{getDatabases:cI}=(de(),re(Ne));lI.exports={checkSchemaExists:uI,checkSchemaTableExists:wQ,schema_describe:IQ};async function uI(e){if(!cI()[e])return aI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(uI,"checkSchemaExists");async function wQ(e,t){let r=await uI(e);if(r)return r;if(!cI()[e][t])return aI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(wQ,"checkSchemaTableExists")});var ka=m((Zoe,CQ)=>{CQ.exports={name:"harperdb",version:"4.2.0-alpha.14",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:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.12","nats-server":"2.9.21"},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":"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:"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":"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/client-s3":"3.383.0","@aws-sdk/lib-storage":"3.383.0","@aws-sdk/abort-controller":"3.370.0","@endo/static-module-record":"^0.7.16","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.3.0","@fastify/static":"~6.10.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.18.0","fast-glob":"3.3.1",fastify:"~4.21.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.6.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.1",lmdb:"2.8.4",lodash:"4.17.21",mathjs:"11.9.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.7",nats:"2.16.0",needle:"3.2.0","node-stream-zip":"1.15.0","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.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.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.18.11","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",ws:"^8.13.0",yaml:"2.3.1"},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",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:"^4.9.4","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 vl={};je(vl,{addAnalyticsListener:()=>nm,recordAction:()=>oi,recordActionBinary:()=>sm,setAnalyticsEnabled:()=>UQ});function UQ(e){RI=e}function oi(e,t,r,s,n){if(!RI)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Pl.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Pl.set(i,o)),Ml||DQ()}function sm(e,t,r,s,n){oi(e?1:0,t,r,s,n)}function nm(e){AI.push(e)}function DQ(){Ml=performance.now(),setTimeout(()=>{let e=performance.now()-Ml;Ml=0;let t=[],r={time:Date.now(),period:e,threadId:ii.threadId,metrics:t};for(let[n,i]of Pl)if(i.sort){i.sort();let o=i.length;t.push(Object.assign(i.description,{median:i[o>>1],mean:i.total/o,p1:i[Math.floor(o*.01)],p10:i[Math.floor(o*.1)],p25:i[Math.floor(o*.25)],p75:i[Math.floor(o*.75)],p90:i[Math.floor(o*.9)],p95:i[Math.floor(o*.95)],p99:i[Math.floor(o*.99)],count:o}))}else t.push(i);let s=process.memoryUsage();t.push({metric:"memory",threadId:ii.threadId,...s});for(let n of AI)n(t);Pl=new Map,ii.parentPort?ii.parentPort.postMessage({type:gI,report:r}):NI({report:r})},tm).unref()}async function LQ(e,t=6e4){let r=im(),s;for(let _ of r.primaryStore.getRange({start:Ll+"z",end:Ll,reverse:!0}))if(_.value?.time){s=_.value.time;break}if(Date.now()-t<s)return;let n,i=new Map,o;for(let{key:_,value:d}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!d)continue;if(n){if(_>n+t)break}else n=_;o=_;let{metrics:E}=d;for(let f of E||[]){let{path:h,method:p,type:T,metric:g,count:O,threadId:k,...$}=f;O||(O=1);let U=g+(h?"-"+h:"");p&&(U+="-"+p);let b=i.get(U);if(b){b.count||(b.count=1);let P=b.count;for(let z in $){let q=$[z];typeof q=="number"&&(b[z]=(b[z]*P+q*O)/(P+O))}b.count+=O}else b=Object.assign({period:t},f),i.set(U,b)}await MQ()}for(let[_,d]of i)d.id=Ll+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:Ll+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-dI,active:l-EI,time:c}),dI=u,EI=l}async function PQ(e,t){let r=im(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function im(){return fI||(fI=st({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function BQ(){OI=!0;let e=(0,$a.get)(rm.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await LQ(tm,e),await PQ(vQ,tm)},e/2).unref()}function NI(e,t){let r=e.report;r.threadId=t?.threadId||ii.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(hI+=s.mean*s.count);r.totalBytesProcessed=hI,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(mI.get(t))}),mI.set(t,t.performance.eventLoopUtilization())),r.id=(0,TI.getNextMonotonicTime)(),im().put(r),OI||BQ(),HQ&&(bI=FQ(r))}async function FQ(e){if(await bI,!Tn){let r=(0,Va.dirname)((0,pI.getLogFilePath)());try{Tn=await(0,em.open)((0,Va.join)(r,"analytics.log"),"r+")}catch{Tn=await(0,em.open)((0,Va.join)(r,"analytics.log"),"w+")}}let t=(await Tn.stat()).size;if(t>qQ){let r=Buffer.alloc(t);await Tn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Tn.write(r,{position:0}),await Tn.truncate(r.length),t=r.length}await Tn.write(JSON.stringify(e)+`
6
- `,t)}var ii,SI,pI,Va,em,TI,$a,rm,Pl,RI,Ml,tm,gI,AI,Ll,dI,EI,MQ,vQ,fI,OI,hI,mI,HQ,bI,Tn,qQ,ji=Se(()=>{ii=require("worker_threads"),SI=C(dt());de();pI=C(x()),Va=require("path"),em=require("fs/promises"),TI=C(Ht()),$a=C(Q()),rm=C(A());Xr();(0,$a.initSync)();Pl=new Map,RI=(0,$a.get)(rm.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(UQ,"setAnalyticsEnabled");a(oi,"recordAction");tt.recordAnalytics=oi;a(sm,"recordActionBinary");Ml=0,tm=1e3,gI="analytics-report",AI=[];a(nm,"addAnalyticsListener");a(DQ,"sendAnalytics");Ll="sum-";a(LQ,"aggregation");dI=0,EI=0,MQ=a(()=>new Promise(setImmediate),"rest");a(PQ,"cleanup");vQ=36e5;a(im,"getAnalyticsTable");(0,SI.setChildListenerByType)(gI,NI);a(BQ,"startScheduledTasks");hI=0,mI=new Map,HQ=!1;a(NI,"recordAnalytics");qQ=1e6;a(FQ,"logAnalytics")});var nt=m((dae,$I)=>{"use strict";var Tt=Q();Tt.initSync();var GQ=require("fs-extra"),xQ=require("semver"),Qa=require("path"),{monotonicFactory:kQ}=require("ulidx"),um=kQ(),VQ=require("util"),II=require("child_process"),$Q=VQ.promisify(II.exec),YQ=II.spawn,_e=Be(),Te=A(),Bl=V(),yr=x(),Hl=Gs(),KQ=Dl(),Ya=Tr(),{Encoder:WQ,decode:lm}=require("msgpackr"),wI=new WQ,{isEmpty:ai}=Bl,CI=br(),UI=12e10,QQ=48*36e11,zQ=5e9,{connect:JQ,StorageType:DI,RetentionPolicy:LI,AckPolicy:ql,DeliverPolicy:Fl,DiscardPolicy:XQ,NatsConnection:cae,JetStreamManager:uae,JetStreamClient:lae,StringCodec:_ae,JSONCodec:ZQ,createInbox:_m,headers:jQ,ErrorCode:yI}=require("nats"),{PACKAGE_ROOT:ez}=A(),tz=ka(),{recordAction:rz}=(ji(),re(vl)),MI=ZQ(),sz="clustering",nz=tz.engines[_e.NATS_SERVER_NAME],iz=Qa.join(ez,"dependencies"),cm=Qa.join(iz,`${process.platform}-${process.arch}`,_e.NATS_BINARY_NAME),om,am,Ka,eo,to;$I.exports={runCommand:PI,checkNATSServerInstalled:oz,createConnection:dm,getConnection:Gl,getJetStreamManager:za,getJetStream:vI,getNATSReferences:Gt,getServerList:cz,createLocalStream:Em,listStreams:BI,deleteLocalStream:uz,getServerConfig:Ja,listRemoteStreams:lz,viewStream:_z,viewStreamIterator:dz,publishToStream:Ez,createWorkQueueStream:fz,addSourceToWorkStream:qI,request:mz,removeSourceFromWorkStream:GI,reloadNATS:fm,reloadNATSHub:Sz,reloadNATSLeaf:pz,extractServerName:FI,requestErrorHandler:Tz,updateWorkStream:Rz,createLocalTableStream:kI,createTableStreams:gz,purgeTableStream:VI,purgeSchemaTableStreams:Az,getStreamInfo:Oz,updateLocalStreams:bz,closeConnection:az,getJsmServerName:Xa,addNatsMsgHeader:HI,updateIngestStreamConsumer:hz};async function PI(e,t=void 0){let{stdout:r,stderr:s}=await $Q(e,{cwd:t});if(s)throw new Error(s.replace(`
1
+ "use strict";var MB=Object.create;var Yo=Object.defineProperty;var PB=Object.getOwnPropertyDescriptor;var vB=Object.getOwnPropertyNames;var BB=Object.getPrototypeOf,HB=Object.prototype.hasOwnProperty;var a=(e,t)=>Yo(e,"name",{value:t,configurable:!0});var pe=(e,t)=>()=>(e&&(t=e(e=0)),t);var m=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),je=(e,t)=>{for(var r in t)Yo(e,r,{get:t[r],enumerable:!0})},jT=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of vB(t))!HB.call(e,n)&&n!==r&&Yo(e,n,{get:()=>t[n],enumerable:!(s=PB(t,n))||s.enumerable});return e};var U=(e,t,r)=>(r=e!=null?MB(BB(e)):{},jT(t||!e||!e.__esModule?Yo(r,"default",{value:e,enumerable:!0}):r,e)),se=e=>jT(Yo({},"__esModule",{value:!0}),e);var rR=m((wte,tR)=>{var qB=require("fast-glob"),{statSync:uE,existsSync:lE,readFileSync:FB,writeFileSync:GB}=require("fs"),{spawnSync:xB,spawn:kB}=require("child_process"),{isMainThread:VB}=require("worker_threads"),{join:Us,relative:eR}=require("path"),{PACKAGE_ROOT:pr}=A(),{tmpdir:$B}=require("os");require("source-map-support").install();var YB=["resources","server","dataLayer"],Ko="ts-build",_E,KB=__filename.endsWith("tsBuild.js");if(KB){if(VB){let r;try{uE(Us(pr,Ko)),r=!0}catch{}if(r)for(let s of qB.sync(YB.map(n=>n+"/**/*.ts"),{cwd:pr})){let n=0,i=0;try{n=uE(Us(pr,s)).mtimeMs-5e3,i=uE(Us(pr,Ko,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."),_E=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),_E=!0;if(_E){let s=xB(process.argv[0],[Us(pr,"node_modules/.bin/tsc")],{cwd:pr});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let n=Us($B(),"harperdb-tsc.pid"),i;if(lE(n))try{process.kill(+FB(n,{encoding:"utf8"}),0),i=!0}catch{}if(!i){console.log("starting tsc background process");let o=kB(process.argv[0],[Us(pr,"node_modules/.bin/tsc"),"--watch"],{cwd:pr,detached:!0,stdio:"ignore"});GB(n,o.pid.toString()),o.unref()}}}}let e=tR.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(pr)&&!s[0].includes("node_modules")){let i=eR(pr,s[0]),o;i.startsWith(Ko)?o=Us(pr,eR(Ko,i)):o=Us(pr,Ko,i);let c=Us(o,r),u=c+".js";if(lE(u))return u;if(c.includes(".")&&lE(c))return c}return t(r,s,n)}}});var A=m((Dte,mR)=>{"use strict";var Tr=require("path"),WB=require("fs"),{relative:Cte,join:Ute}=Tr,{existsSync:QB}=WB;function zB(){let e=__dirname;for(;!QB(Tr.join(e,"package.json"));){let t=Tr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(zB,"getHDBPackageRoot");var dn=zB(),sR="js",lu=sR,JB="harperdb-config.yaml",XB="defaultConfig.yaml",ZB="hdb",nR=`harperdb.${lu}`,iR=`customFunctionsServer.${lu}`,jB=`restartHdb.${lu}`,EE="HarperDB",uu="Custom Functions",_u="Clustering Hub",du="Clustering Leaf",eH="Clustering Ingest Service",tH="Clustering Reply Service",rH="foreground.pid",sH="hdb.pid",nH="data",iH={HDB:EE,CLUSTERING_HUB:_u,CLUSTERING_LEAF:du,CLUSTERING_INGEST_SERVICE:eH,CLUSTERING_REPLY_SERVICE:tH,CUSTOM_FUNCTIONS:uu,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"},oH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},aH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},cH={harperdb:EE,"clustering hub":_u,"clustering leaf":du,"custom functions":uu,custom_functions:uu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},uH={CLUSTERING_HUB_PROC_DESCRIPTOR:_u,CLUSTERING_LEAF_PROC_DESCRIPTOR:du},dE={HDB:Tr.join(dn,"server/harperdb"),CUSTOM_FUNCTIONS:Tr.join(dn,"server/customFunctions"),CLUSTERING_HUB:Tr.join(dn,"server/nats"),CLUSTERING_LEAF:Tr.join(dn,"server/nats")},lH={HDB:Tr.join(dE.HDB,nR),CUSTOM_FUNCTIONS:Tr.join(dE.CUSTOM_FUNCTIONS,iR)},_H={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Tr.join(dn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Tr.join(dn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Tr.join(dn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},dH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},oR="support@harperdb.io",EH="customer-success@harperdb.io",aR=1,fH=4141,cR="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",hH="https://www.harperdb.io/product",mH=`For support, please submit a request at ${cR} or contact ${oR}`,uR=`For license support, please contact ${EH}`,SH="None of the specified records were found.",pH="hash attribute not found",TH=`Your current license only supports ${aR} role. ${uR}`,RH="Your current license only supports 3 connections to a node.",gH="127.0.0.1",AH=1,OH=/^\.$/,NH=/^\.\.$/,bH="U+002E",yH=/\//g,IH="U+002F",wH=/U\+002F/g,CH=/^U\+002E$/,UH=/^U\+002EU\+002E$/,DH="d",LH=999999,MH="*",PH="--max-old-space-size=",vH="system",BH="__hdb_hash",HH=".harperdb",qH=".hdb",FH="keys",GH="hdb_boot_properties.file",xH=".updateConfig.json",kH="SIGTSTP",VH=24,$H=6e4,YH=448,KH="blob",WH="trash",QH="database",zH="schema",JH="transactions",XH=".count",ZH="id",jH="PROCESS_NAME",lR={SETTINGS_PATH_KEY:"settings_path"},_R=require("lodash"),e0={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",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},t0={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},r0={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},s0={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"},n0={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"},sr="hdb_internal:",i0={CREATE_SCHEMA:sr+"create_schema",CREATE_TABLE:sr+"create_table",CREATE_ATTRIBUTE:sr+"create_attribute",ADD_USER:sr+"add_user",ALTER_USER:sr+"alter_user",DROP_USER:sr+"drop_user",HDB_NODES:sr+"hdb_nodes",HDB_USERS:sr+"hdb_users",HDB_WORKERS:sr+"hdb_workers",CATCHUP:sr+"catchup",SCHEMA_CATCHUP:sr+"schema_catchup",WORKER_ROOM:sr+"cluster_workers"},o0={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"},a0="060493.ks",c0=".license",u0={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},K={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"},l0={CSV:".csv",JSON:".json"},_0={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},d0={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Wo={};Wo[K.INSERT]=K.INSERT;Wo[K.UPDATE]=K.UPDATE;Wo[K.UPSERT]=K.UPSERT;Wo[K.DELETE]=K.DELETE;var Ae=Object.create(null);Ae[K.DESCRIBE_ALL]=K.DESCRIBE_ALL;Ae[K.DESCRIBE_TABLE]=K.DESCRIBE_TABLE;Ae[K.DESCRIBE_SCHEMA]=K.DESCRIBE_SCHEMA;Ae[K.READ_LOG]=K.READ_LOG;Ae[K.ADD_NODE]=K.ADD_NODE;Ae[K.LIST_USERS]=K.LIST_USERS;Ae[K.LIST_ROLES]=K.LIST_ROLES;Ae[K.USER_INFO]=K.USER_INFO;Ae[K.SQL]=K.SQL;Ae[K.GET_JOB]=K.GET_JOB;Ae[K.SEARCH_JOBS_BY_START_DATE]=K.SEARCH_JOBS_BY_START_DATE;Ae[K.DELETE_FILES_BEFORE]=K.DELETE_FILES_BEFORE;Ae[K.EXPORT_LOCAL]=K.EXPORT_LOCAL;Ae[K.EXPORT_TO_S3]=K.EXPORT_TO_S3;Ae[K.CLUSTER_STATUS]=K.CLUSTER_STATUS;Ae[K.REMOVE_NODE]=K.REMOVE_NODE;Ae[K.RESTART]=K.RESTART;Ae[K.CUSTOM_FUNCTIONS_STATUS]=K.CUSTOM_FUNCTIONS_STATUS;Ae[K.GET_CUSTOM_FUNCTIONS]=K.GET_CUSTOM_FUNCTIONS;Ae[K.GET_CUSTOM_FUNCTION]=K.GET_CUSTOM_FUNCTION;Ae[K.SET_CUSTOM_FUNCTION]=K.SET_CUSTOM_FUNCTION;Ae[K.DROP_CUSTOM_FUNCTION]=K.DROP_CUSTOM_FUNCTION;Ae[K.ADD_CUSTOM_FUNCTION_PROJECT]=K.ADD_CUSTOM_FUNCTION_PROJECT;Ae[K.DROP_CUSTOM_FUNCTION_PROJECT]=K.DROP_CUSTOM_FUNCTION_PROJECT;Ae[K.PACKAGE_CUSTOM_FUNCTION_PROJECT]=K.PACKAGE_CUSTOM_FUNCTION_PROJECT;Ae[K.DEPLOY_CUSTOM_FUNCTION_PROJECT]=K.DEPLOY_CUSTOM_FUNCTION_PROJECT;var E0={DEBUG:"debug",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},f0={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},dR={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"},h0=_R.invert(dR),g={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_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",HTTP_THREADS:"http_threads",HTTP_SESSION_AFFINITY:"http_sessionAffinity",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_AUTHENTICATION_OPERATIONTOKENTIMEOUT:"operationsApi_authentication_operationTokenTimeout",OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT:"operationsApi_authentication_refreshTokenTimeout",OPERATIONSAPI_FOREGROUND:"operationsApi_foreground",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",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_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERT_AUTH:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_NODEENV:"operationsApi_nodeEnv",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",SCHEMAS:"schemas",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication"},ER={settings_path:lR.SETTINGS_PATH_KEY,hdb_root_key:g.ROOTPATH,hdb_root:g.ROOTPATH,server_port_key:g.OPERATIONSAPI_NETWORK_PORT,server_port:g.OPERATIONSAPI_NETWORK_PORT,cert_key:g.OPERATIONSAPI_TLS_CERTIFICATE,certificate:g.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:g.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:g.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:g.OPERATIONSAPI_NETWORK_HTTPS,https_on:g.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:g.OPERATIONSAPI_NETWORK_CORS,cors_on:g.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:g.LOGGING_LEVEL,log_level:g.LOGGING_LEVEL,log_path_key:g.LOGGING_ROOT,log_path:g.LOGGING_ROOT,props_env_key:g.OPERATIONSAPI_NODEENV,node_env:g.OPERATIONSAPI_NODEENV,clustering_node_name_key:g.CLUSTERING_NODENAME,node_name:g.CLUSTERING_NODENAME,clustering_enabled_key:g.CLUSTERING_ENABLED,clustering:g.CLUSTERING_ENABLED,max_http_threads:g.HTTP_THREADS,max_hdb_processes:g.HTTP_THREADS,server_timeout_key:g.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:g.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:g.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:g.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:g.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:g.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:g.LOGGING_AUDITLOG,disable_transaction_log:g.LOGGING_AUDITLOG,operation_token_timeout_key:g.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:g.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:g.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:g.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:g.CUSTOMFUNCTIONS_ENABLED,custom_functions:g.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:g.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:g.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:g.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:g.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:g.HTTP_THREADS,log_to_file:g.LOGGING_FILE,log_to_stdstreams:g.LOGGING_STDSTREAMS,run_in_foreground:g.OPERATIONSAPI_FOREGROUND,local_studio_on:g.LOCALSTUDIO_ENABLED,clustering_port:g.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:g.CLUSTERING_USER,clustering_enabled:g.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:g.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:g.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:g.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:g.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:g.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:g.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:g.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:g.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:g.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:g.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:g.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:g.CLUSTERING_NODENAME,clustering_tls_certificate:g.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:g.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:g.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:g.CLUSTERING_TLS_INSECURE,clustering_tls_verify:g.CLUSTERING_TLS_VERIFY,clustering_loglevel:g.CLUSTERING_LOGLEVEL,clustering_republishmessages:g.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:g.CLUSTERING_DATABASELEVEL,customfunctions_enabled:g.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:g.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:g.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:g.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:g.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:g.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:g.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:g.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:g.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:g.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:g.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:g.CUSTOMFUNCTIONS_NODEENV,http_threads:g.HTTP_THREADS,http_session_affinity:g.HTTP_SESSION_AFFINITY,customfunctions_processes:g.HTTP_THREADS,customfunctions_root:g.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:g.LOCALSTUDIO_ENABLED,logging_file:g.LOGGING_FILE,logging_level:g.LOGGING_LEVEL,logging_root:g.LOGGING_ROOT,logging_rotation_enabled:g.LOGGING_ROTATION_ENABLED,logging_rotation_compress:g.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:g.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:g.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:g.LOGGING_ROTATION_PATH,logging_stdstreams:g.LOGGING_STDSTREAMS,logging_auditlog:g.LOGGING_AUDITLOG,logging_auditretention:g.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:g.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:g.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:g.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:g.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:g.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:g.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:g.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:g.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:g.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:g.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:g.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:g.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:g.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:g.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:g.OPERATIONSAPI_NODEENV,operationsapi_root:g.ROOTPATH,schemas:g.SCHEMAS,storage_path:g.STORAGE_PATH,ignorescripts:g.IGNORE_SCRIPTS,mqtt_network_port:g.MQTT_NETWORK_PORT,mqtt_websocket:g.MQTT_WEBSOCKET,mqtt_network_secureport:g.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:g.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:g.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:g.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:g.AUTHENTICATION_CACHETTL,authentication_enablesessions:g.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:g.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:g.AUTHENTICATION_REFRESHTOKENTIMEOUT};for(let e in g){let t=g[e];ER[t.toLowerCase()]=t}var m0={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},S0={csv_file_load:"csv_file_load",csv_data_load:K.CSV_DATA_LOAD,csv_url_load:K.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"},p0={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"},T0={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},R0={VERSION_DEFAULT:"2.2.0"},g0={DEVELOPMENT:8192,DEFAULT:512},A0={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"},O0={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"},N0={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},fR={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},b0=Symbol("metadata"),y0="__clustering__",I0=Object.values(fR),w0=15984864e5,hR={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},C0=_R.invert(hR),U0={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"},D0=111,L0=`\r
2
+ `,M0={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},P0=["*","%"],v0="unauthorized_access",B0="func_val",H0={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},q0={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},F0={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"},G0={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},x0={HTTP:"http"},k0={STOPPED:"stopped",ONLINE:"online"},V0="3.x.x",$0={SUCCESS:"success",FAILURE:"failure"},Y0={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};mR.exports={LOCAL_HARPERDB_OPERATIONS:Ae,HDB_SUPPORT_ADDRESS:oR,HDB_SUPPORT_URL:cR,HDB_PRICING_URL:hH,SUPPORT_HELP_MSG:mH,LICENSE_HELP_MSG:uR,HDB_PROC_NAME:nR,HDB_PROC_DESCRIPTOR:EE,CLUSTERING_LEAF_PROC_DESCRIPTOR:du,CLUSTERING_HUB_PROC_DESCRIPTOR:_u,SYSTEM_SCHEMA_NAME:vH,HASH_FOLDER_NAME:BH,HDB_HOME_DIR_NAME:HH,UPDATE_FILE_NAME:xH,LICENSE_KEY_DIR_NAME:FH,BOOT_PROPS_FILE_NAME:GH,JOB_TYPE_ENUM:S0,JOB_STATUS_ENUM:u0,SYSTEM_TABLE_NAMES:s0,SYSTEM_TABLE_HASH_ATTRIBUTES:n0,OPERATIONS_ENUM:K,VALID_S3_FILE_TYPES:l0,S3_BUCKET_AUTH_KEYS:_0,VALID_SQL_OPS_ENUM:d0,GEO_CONVERSION_ENUM:f0,HDB_SETTINGS_NAMES:dR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:h0,SERVICE_ACTIONS_ENUM:E0,CLUSTER_MESSAGE_TYPE_ENUM:p0,CLUSTER_CONNECTION_DIRECTION_ENUM:T0,CLUSTER_EVENTS_DEFS_ENUM:A0,PERIOD_REGEX:OH,DOUBLE_PERIOD_REGEX:NH,UNICODE_PERIOD:bH,FORWARD_SLASH_REGEX:yH,UNICODE_FORWARD_SLASH:IH,ESCAPED_FORWARD_SLASH_REGEX:wH,ESCAPED_PERIOD_REGEX:CH,ESCAPED_DOUBLE_PERIOD_REGEX:UH,REG_KEY_FILE_NAME:a0,RESTART_TIMEOUT_MS:$H,HDB_FILE_PERMISSIONS:YH,DATABASES_DIR_NAME:QH,LEGACY_DATABASES_DIR_NAME:zH,TRANSACTIONS_DIR_NAME:JH,LIMIT_COUNT_NAME:XH,ID_ATTRIBUTE_STRING:ZH,INSERT_MODULE_ENUM:t0,UPGRADE_JSON_FIELD_NAMES_ENUM:r0,RESTART_CODE:kH,RESTART_CODE_NUM:VH,CLUSTER_OPERATIONS:Wo,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:o0,HDB_INTERNAL_SC_CHANNEL_PREFIX:sr,INTERNAL_SC_CHANNELS:i0,CLUSTERING_MESSAGE_TYPES:U0,HDB_FILE_SUFFIX:qH,BLOB_FOLDER_NAME:KH,HDB_TRASH_DIR:WH,ORIGINATOR_SET_VALUE:D0,LICENSE_VALUES:R0,RAM_ALLOCATION_ENUM:g0,TIME_STAMP_NAMES_ENUM:fR,TIME_STAMP_NAMES:I0,PERMS_UPDATE_RELEASE_TIMESTAMP:w0,SEARCH_NOT_FOUND_MESSAGE:SH,SEARCH_ATTRIBUTE_NOT_FOUND:pH,LICENSE_ROLE_DENIED_RESPONSE:TH,LICENSE_MAX_CONNS_REACHED:RH,BASIC_LICENSE_MAX_NON_CU_ROLES:aR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:fH,VALUE_SEARCH_COMPARATORS:hR,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:C0,LICENSE_FILE_NAME:c0,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:O0,NEW_LINE:L0,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:AH,MOMENT_DAYS_TAG:DH,API_TURNOVER_SEC:LH,LOOPBACK:gH,CODE_EXTENSION:lu,WILDCARD_SEARCH_VALUE:MH,NODE_ERROR_CODES:N0,JAVASCRIPT_EXTENSION:sR,PERMS_CRUD_ENUM:M0,UNAUTHORIZED_PERMISSION_NAME:v0,SEARCH_WILDCARDS:P0,FUNC_VAL:B0,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:H0,JWT_ENUM:q0,CLUSTERING_FLAG:y0,ITC_EVENT_TYPES:F0,CUSTOM_FUNCTION_PROC_NAME:iR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:uu,SERVICES:G0,THREAD_TYPES:x0,MEM_SETTING_KEY:PH,HDB_RESTART_SCRIPT:jB,PROCESS_DESCRIPTORS:iH,SERVICE_SERVERS:lH,SERVICE_SERVERS_CWD:dE,PROCESS_DESCRIPTORS_VALIDATE:cH,LAUNCH_SERVICE_SCRIPTS:_H,LOG_LEVELS:aH,PROCESS_NAME_ENV_PROP:jH,LOG_NAMES:oH,PM2_PROCESS_STATUSES:k0,CONFIG_PARAM_MAP:ER,CONFIG_PARAMS:g,HDB_CONFIG_FILE:JB,HDB_DEFAULT_CONFIG_FILE:XB,ROLE_TYPES_ENUM:dH,BOOT_PROP_PARAMS:lR,INSTALL_PROMPTS:e0,HDB_ROOT_DIR_NAME:ZB,CLUSTERING_PROCESSES:uH,FOREGROUND_PID_FILE:rH,PACKAGE_ROOT:dn,PRE_4_0_0_VERSION:V0,SCHEMAS_PARAM_CONFIG:m0,METADATA_PROPERTY:b0,AUTH_AUDIT_STATUS:$0,AUTH_AUDIT_TYPES:Y0,HDB_PID_FILE:sH,DEFAULT_DATABASE_NAME:nH};rR()});var fE=m((Mte,TR)=>{"use strict";var SR=require("minimist");TR.exports=K0;function K0(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=pR(process.env),s=pR(SR(process.argv))):(r=process.env,s=SR(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(K0,"assignCMDENVVariables");function pR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(pR,"objKeysToLowerCase")});var x=m((vte,gE)=>{"use strict";var kn=require("fs-extra"),{workerData:W0,threadId:Q0}=require("worker_threads"),Ms=require("path"),AR=require("yaml"),OR=require("properties-reader"),et=A(),RR=fE(),z0=require("os"),{PACKAGE_ROOT:mE}=A(),{_assignPackageExport:J0}=require("../index"),zo={};for(let e in console)zo[e]||(zo[e]=console[e]);var Pt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},NR={STDOUT:"stdOut",STDERR:"stdErr"},X0=Ms.join(mE,"logs"),Z0=Ms.join(mE,"config/yaml/",et.HDB_DEFAULT_CONFIG_FILE),j0=1e4,Ds,Ls,Mt,Eu,fu,Jo,Bi,Qo;Qo===void 0&&bR();gE.exports={notify:wR,fatal:CR,error:Xo,warn:RE,info:hu,debug:TE,trace:pE,setLogLevel:oq,log_level:Mt,loggerWithTag:eq,suppressLogging:tq,initLogSettings:bR,setupConsoleLogging:yR,logCustomLevel:nq,closeLogFile:SE,getLogFilePath:()=>Jo,OUTPUTS:NR,AuthAuditLog:uq};J0("logger",gE.exports);function bR(e=!1){try{if(Qo===void 0||e){SE();let t=iq(),r=RR(["ROOTPATH"]);try{Qo=OR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!kn.pathExistsSync(Ms.join(r.ROOTPATH,et.HDB_CONFIG_FILE)))throw s}({level:Mt,config_log_path:fu,to_file:Ds,to_stream:Ls}=aq(r.ROOTPATH?Ms.join(r.ROOTPATH,et.HDB_CONFIG_FILE):Qo.get("settings_path"))),Eu=et.LOG_NAMES.HDB,Jo=Ms.join(fu,Eu)}}catch(t){if(Qo=void 0,t.code===et.NODE_ERROR_CODES.ENOENT){let r=RR(Object.keys(et.CONFIG_PARAM_MAP),!0);for(let o in r){let c=et.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===et.CONFIG_PARAMS.LOGGING_LEVEL){Mt=u;continue}if(c===et.CONFIG_PARAMS.LOGGING_STDSTREAMS){Ls=u;continue}c===et.CONFIG_PARAMS.LOGGING_FILE&&(Ds=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=cq();Ds=Ds===void 0?n:Ds,Ds=gR(Ds),Ls=Ls===void 0?i:Ls,Ls=gR(Ls),Mt=Mt===void 0?s:Mt,fu=X0,Eu=et.LOG_NAMES.INSTALL,Jo=Ms.join(fu,Eu);return}throw Xo("Error initializing log settings"),Xo(t),t}yR()}a(bR,"initLogSettings");var hE=!0;function yR(){vi("error",Xo),vi("warn",RE),vi("log",hu),vi("info",hu),vi("debug",TE),vi("trace",pE)}a(yR,"setupConsoleLogging");function vi(e,t){console[e]=function(...r){if(hE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return zo[e](...r)}}a(vi,"logConsole");function eq(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(wR),fatal:r(CR),error:r(Xo),warn:r(RE),info:r(hu),debug:r(TE),trace:r(pE)};function r(s){return function(...n){return s(t,...n)}}}a(eq,"loggerWithTag");function tq(e){try{hE=!1,e()}finally{hE=!0}}a(tq,"suppressLogging");var rq=W0?.name?.replace(/ /g,"-")||"main";function Ps(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||rq+"/"+Q0);c<n;c++){let l=t[c];l instanceof Error&&l.stack?s+=l.stack:typeof l=="object"?s+=JSON.stringify(l):s+=l,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
3
+ `}a(Ps,"createLogRecord");function Zo(e){Ds&&IR(e),Ls&&process.stdout.write(e)}a(Zo,"logStdOut");function mu(e){Ds&&IR(e),Ls&&process.stderr.write(e)}a(mu,"logStdErr");function IR(e){sq(),Bi?kn.appendFileSync(Bi,e):zo.log(e)}a(IR,"logToFile");function SE(){try{kn.closeSync(Bi)}catch{}Bi=null}a(SE,"closeLogFile");function sq(){if(!Bi){try{if(!Jo)debugger;Bi=kn.openSync(Jo,"a")}catch(e){zo.error(e)}setTimeout(()=>{SE()},j0).unref()}}a(sq,"openLogFile");function hu(...e){Pt[Mt]<=Pt.info&&Zo(Ps("info",e))}a(hu,"info");function pE(...e){Pt[Mt]<=Pt.trace&&Zo(Ps("trace",e))}a(pE,"trace");function Xo(...e){Pt[Mt]<=Pt.error&&mu(Ps("error",e))}a(Xo,"error");function TE(...e){Pt[Mt]<=Pt.debug&&Zo(Ps("debug",e))}a(TE,"debug");function wR(...e){Pt[Mt]<=Pt.notify&&Zo(Ps("notify",e))}a(wR,"notify");function CR(...e){Pt[Mt]<=Pt.fatal&&mu(Ps("fatal",e))}a(CR,"fatal");function RE(...e){Pt[Mt]<=Pt.warn&&mu(Ps("warn",e))}a(RE,"warn");function nq(e,t,...r){t===NR.STDERR?mu(Ps(e,r)):Zo(Ps(e,r))}a(nq,"logCustomLevel");function iq(){let e;try{e=z0.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Ms.join(e,et.HDB_HOME_DIR_NAME,et.BOOT_PROPS_FILE_NAME);return kn.existsSync(t)||(t=Ms.join(mE,"utility/hdb_boot_properties.file")),t}a(iq,"getPropsFilePath");function oq(e){Mt=e}a(oq,"setLogLevel");function gR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(gR,"autoCastBoolean");function aq(e){try{if(e.includes("config/settings.js")){let o=OR(e);return{level:o.get(et.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Ms.dirname(o.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(et.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=AR.parseDocument(kn.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===et.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(aq,"getLogConfig");function cq(){try{let e=AR.parseDocument(kn.readFileSync(Z0,"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(cq,"getDefaultConfig");function uq(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(uq,"AuthAuditLog")});var DR=m((Hte,UR)=>{"use strict";var lq=require("util"),_q=require("path"),dq=require("child_process"),Eq=lq.promisify(dq.execFile),fq=1e3*1e3*10;UR.exports={findPs:hq};async function hq(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await Eq("ps",["wwxo",`pid,${r}`],{maxBuffer:fq});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:_q.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(hq,"findPs")});var ke=m((Fte,MR)=>{"use strict";var mq="__dbis__",Sq="__txns__",pq="__environment_name__",Tq="__dbi_defintion__",Rq={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"},gq=["__createdtime__","__updatedtime__"],Aq="\uFFFF",LR={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Oq=Object.values(LR);MR.exports={AUDIT_STORE_NAME:Sq,INTERNAL_DBIS_NAME:mq,DBI_DEFINITION_NAME:Tq,SEARCH_TYPES:Rq,TIMESTAMP_NAMES:gq,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:pq,TRANSACTIONS_DBI_NAMES_ENUM:LR,TRANSACTIONS_DBIS:Oq,OVERFLOW_MARKER:Aq}});var nr=m((Gte,kR)=>{"use strict";var PR=A(),vR=ke(),BR={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},HR=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),qR={500:HR("There was an error processing your request."),400:"Invalid request"},Nq=qR[BR.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.`},yq={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},Iq={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"},wq={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 ${vR.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${vR.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"},Cq={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${PR.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 ${PR.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"},FR={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"},Uq={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."},Dq={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`},Lq={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"},Mq={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Pq={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`},GR={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.`},xR={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}`},vq={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."},Bq={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},Hq={...FR,...Iq,...bq,...Uq,...Dq,...Lq,...Mq,...Pq,...Cq,...GR,...xR,...vq,...Bq,...yq};kR.exports={CHECK_LOGS_WRAPPER:HR,HDB_ERROR_MSGS:Hq,DEFAULT_ERROR_MSGS:qR,DEFAULT_ERROR_RESP:Nq,HTTP_STATUS_CODES:BR,LMDB_ERRORS_ENUM:wq,AUTHENTICATION_ERROR_MSGS:FR,VALIDATION_ERROR_MSGS:GR,ITC_ERRORS:xR}});var W=m((kte,YR)=>{"use strict";var Hi=nr(),qq=x(),Fq=A(),Su=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,VR),this.statusCode=s||Hi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Hi.DEFAULT_ERROR_MSGS[s]?Hi.DEFAULT_ERROR_MSGS[s]:Hi.DEFAULT_ERROR_MSGS[Hi.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&&qq[n](i)}},AE=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}},OE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function VR(e,t,r,s=Fq.LOG_LEVELS.ERROR,n=null,i=!1){if($R(e))return e;let o=new Su(e,t,r,s,n);return i&&delete o.stack,o}a(VR,"handleHDBError");function $R(e){return e.__proto__.constructor.name===Su.name}a($R,"isHDBError");YR.exports={isHDBError:$R,handleHDBError:VR,ClientError:AE,ServerError:OE,hdb_errors:Hi}});var WR=m(($te,KR)=>{"use strict";var Gq={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))},xq="certificate.pem",kq="privateKey.pem",Vq="ca.pem";KR.exports={CERTIFICATE_VALUES:Gq,CERTIFICATE_PEM_NAME:xq,PRIVATEKEY_PEM_NAME:kq,CA_PEM_NAME:Vq}});var ve=m((Yte,QR)=>{"use strict";var vt=require("validate.js");vt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||vt.validators.type.checks[t](e)?null:` must be a '${t}' value`};vt.validators.type.checks={Object:function(e){return vt.isObject(e)&&!vt.isArray(e)},Array:vt.isArray,Integer:vt.isInteger,Number:vt.isNumber,String:vt.isString,Date:vt.isDate,Boolean:function(e){return typeof e=="boolean"}};vt.validators.hasValidFileExt=function(e,t){return vt.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};QR.exports={validateObject:$q,validateObjectAsync:Yq,validateBySchema:Kq};function $q(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=vt(e,t,{format:"flat"});return r?new Error(r):null}a($q,"validateObject");async function Yq(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await vt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(Yq,"validateObjectAsync");function Kq(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(Kq,"validateBySchema")});var bE=m((Qte,eg)=>{"use strict";var ZR=require("fs-extra"),te=require("joi"),Wq=require("os"),{boolean:Te,string:Bs,number:ir,array:NE}=te.types(),{totalmem:zR}=require("os"),qi=require("path"),Qq=x(),Tu=V(),Wte=WR(),JR=A(),zq=ve(),XR="log",Jq="components",Xq="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Zq="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",jq="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",eF="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",tF="rootPath config parameter is undefined",rF="clustering.enabled config parameter is undefined",vs=ir.min(0).required(),Ru=NE.items({host:Bs.required(),port:vs}).empty(null),Hs;eg.exports={configValidator:sF,routesValidator:uF,route_constraints:Ru};function sF(e){if(Hs=e.rootPath,Tu.isEmpty(Hs))throw tF;let t=Te.required(),r=te.valid("production","development").required(),s=ir.min(0).max(1e3).empty(null).default(cF),n=Bs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(pu),i=te.custom(nF).messages({"any.custom":"{:#label} {:#error}"}),o=Bs.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=te.string().empty(null).default(pu),u=te.custom(iF).empty(null).default(pu),l=e.clustering?.enabled;if(Tu.isEmpty(l))throw rF;let _;return l===!0?_=te.object({enabled:t,hubServer:te.object({cluster:te.object({name:te.required().empty(null),network:te.object({port:vs,routes:Ru}).required()}).required(),leafNodes:te.object({network:te.object({port:vs}).required()}).required(),network:te.object({port:vs}).required()}).required(),leafServer:te.object({network:te.object({port:vs,routes:Ru}).required(),streams:te.object({maxAge:ir.min(120).allow(null).optional(),maxBytes:ir.min(1).allow(null).optional(),maxMsgs:ir.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:te.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:Te.optional(),databaseLevel:Te.optional(),tls:te.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Te.required(),verify:Te.optional()}),user:Bs.optional().empty(null)}).required():_=te.object({enabled:t,tls:te.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Te.required()})}).required(),te.object({authentication:te.object({authorizeLocal:Te,cacheTTL:ir.required(),enableSessions:Te,operationTokenTimeout:te.required(),refreshTokenTimeout:te.required()}),analytics:te.object({aggregatePeriod:ir}),clustering:_,customFunctions:te.object({enabled:t,network:te.object({cors:Te.required(),corsAccessList:NE.required(),headersTimeout:ir.min(1).required(),https:Te.required(),keepAliveTimeout:ir.min(1).required(),port:vs,timeout:ir.min(1).required()}),nodeEnv:r,root:n,tls:te.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:te.object({enabled:t}).required(),logging:te.object({auditAuthEvents:te.object({logFailed:Te,logSuccessful:Te}),file:Te.required(),level:te.valid("notify","fatal","error","warn","info","debug","trace"),rotation:te.object({enabled:Te.optional(),compress:Te.optional(),interval:Bs.custom(aF).optional().empty(null),maxSize:Bs.custom(oF).optional().empty(null),path:Bs.optional().empty(null).default(pu)}).required(),root:n,stdStreams:Te.required(),auditLog:Te.required()}).required(),operationsApi:te.object({foreground:Te.required(),network:te.object({cors:Te.required(),corsAccessList:NE.required(),headersTimeout:ir.min(1).required(),https:Te.required(),keepAliveTimeout:ir.min(1).required(),port:vs,timeout:ir.min(1).required()}).required(),nodeEnv:r,tls:te.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Bs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:te.object({network:te.object({port:vs,securePort:vs}).required(),webSocket:Te.optional(),requireAuthentication:Te.optional()}),http:te.object({threads:s}).required(),storage:te.object({writeAsync:Te.required(),overlappingSync:Te.optional(),caching:Te.optional(),compression:Te.optional(),noReadAhead:Te.optional(),path:u,prefetchWrites:Te.optional()}).required(),ignoreScripts:Te.optional()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(sF,"configValidator");function jR(e){return ZR.existsSync(e)?null:`Specified path ${e} does not exist.`}a(jR,"doesPathExist");function nF(e,t){if(e===null)return;let r=jR(e);return r?t.message(r):e}a(nF,"validatePemFile");function iF(e,t){te.assert(e,Bs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=jR(e);if(r)return t.message(r)}a(iF,"validatePath");function oF(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Xq);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(jq):e}a(oF,"validateRotationMaxSize");function aF(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Zq);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(eF):e}a(aF,"validateRotationInterval");function cF(e,t){let r=t.state.path.join("."),s=Wq.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||zR();return i=Math.round(Math.min(i,zR())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),Qq.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(cF,"setDefaultThreads");function pu(e,t){if(!Tu.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Tu.isEmpty(Hs))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return qi.join(Hs,Jq);case"logging.root":return qi.join(Hs,XR);case"clustering.leafServer.streams.path":return qi.join(Hs,"clustering","leaf");case"storage.path":let s=qi.join(Hs,JR.LEGACY_DATABASES_DIR_NAME);return ZR.existsSync(s)?s:qi.join(Hs,JR.DATABASES_DIR_NAME);case"logging.rotation.path":return qi.join(Hs,XR);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(pu,"setDefaultRoot");function uF(e){let t=te.object({routes:Ru});return zq.validateBySchema({routes:e},t)}a(uF,"routesValidator")});var gu={};je(gu,{server:()=>tt});var tg,tt,es=pe(()=>{tg=require("../index"),tt={};(0,tg._assignPackageExport)("server",tt)});var gr=m((Xte,_g)=>{"use strict";var Rr=A(),lt=V(),rt=x(),{configValidator:lF,routesValidator:rg}=bE(),Bt=require("fs-extra"),_F=require("yaml"),Br=require("path"),dF=require("is-number"),ng=require("properties-reader"),EF=require("lodash"),{handleHDBError:fF}=W(),{HTTP_STATUS_CODES:hF,HDB_ERROR_MSGS:Au}=nr(),Jte=require("minimist"),{server:mF}=(es(),se(gu)),{SCHEMAS_PARAM_CONFIG:jo,CONFIG_PARAMS:En,CONFIG_PARAM_MAP:qs}=Rr,SF="Unable to get config value because config is uninitialized",pF="Config successfully initialized",TF="Error backing up config file",RF="Empty parameter sent to getConfigValue",ig=Br.join(Rr.PACKAGE_ROOT,"config","yaml",Rr.HDB_DEFAULT_CONFIG_FILE),gF="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",sg={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"},Ou,ft;_g.exports={createConfigFile:AF,getDefaultConfig:OF,getConfigValue:ag,initConfig:cg,flattenConfig:$n,updateConfigValue:ug,updateConfigObject:bF,getConfiguration:wF,setConfiguration:CF,readConfigFile:wE,getClusteringRoutes:UF,initOldConfig:lg,getConfigFromFile:DF,getConfigFilePath:Vn,addConfig:LF,deleteConfigFromFile:MF};function AF(e){let t=fn(ig);Ou=$n(t.toJSON());let r;for(let o in e){let c=qs[o.toLowerCase()];if(c===En.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=yE(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){rt.error(_)}}}r&&og(t,r),IE(t);let s=t.toJSON();ft=$n(s);let n=t.getIn(["rootPath"]),i=Br.join(n,Rr.HDB_CONFIG_FILE);Bt.createFileSync(i),Bt.writeFileSync(i,String(t)),rt.trace(`Config file written to ${i}`)}a(AF,"createConfigFile");function og(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!lt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(jo.TABLES))for(let i in s[n][jo.TABLES])for(let o in s[n][jo.TABLES][i]){let c=s[n][jo.TABLES][i][o],u=[En.SCHEMAS,n,jo.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=[En.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){rt.error("Error parsing schemas CLI/env config arguments",s)}}a(og,"setSchemasConfig");function OF(e){if(Ou===void 0){let r=fn(ig);Ou=$n(r.toJSON())}let t=qs[e.toLowerCase()];if(t!==void 0)return Ou[t.toLowerCase()]}a(OF,"getDefaultConfig");function ag(e){if(e==null){rt.error(RF);return}if(ft===void 0){rt.trace(SF);return}let t=qs[e.toLowerCase()];if(t!==void 0)return ft[t.toLowerCase()]}a(ag,"getConfigValue");function Vn(e=lt.getPropsFilePath()){let t=lt.getEnvCliRootPath();return t?Br.join(t,Rr.HDB_CONFIG_FILE):ng(e).get(Rr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Vn,"getConfigFilePath");function cg(e=!1){if(ft===void 0||e){let t;if(!lt.noBootFile()){t=lt.getPropsFilePath();try{Bt.accessSync(t,Bt.constants.F_OK|Bt.constants.R_OK)}catch(i){throw rt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Vn(t),s;if(r.includes("config/settings.js"))try{lg(r);return}catch(i){if(i.code!==Rr.NODE_ERROR_CODES.ENOENT)throw i}try{s=fn(r)}catch(i){if(i.code===Rr.NODE_ERROR_CODES.ENOENT){rt.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 rt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}NF(s,r),IE(s);let n=s.toJSON();if(mF.config=n,ft=$n(n),ft.logging_rotation_rotate)for(let i in sg)ft[i]&&rt.error(`Config ${sg[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);rt.trace(pF)}}a(cg,"initConfig");function NF(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Br.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Br.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Br.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(rt.trace("Updating config file with missing config params"),Bt.writeFileSync(t,String(e)))}a(NF,"checkForUpdatedConfig");function IE(e){let t=e.toJSON(),r=lF(t);if(r.error)throw Au.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),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(IE,"validateConfig");function bF(e,t){ft===void 0&&(ft={});let r=qs[e.toLowerCase()];if(r===void 0){rt.trace(`Unable to update config object because config param '${e}' does not exist`);return}ft[r.toLowerCase()]=t}a(bF,"updateConfigObject");function ug(e,t,r=void 0,s=!1,n=!1,i=!1){ft===void 0&&cg();let o=ag(qs.hdb_root),c=Br.join(o,Rr.HDB_CONFIG_FILE),u=fn(c),l;if(r===void 0&&e.toLowerCase()===En.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=qs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=yE(E,t);u.setIn([...f],h)}else for(let E in r){let f=qs[E.toLowerCase()];if(f===En.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),T=yE(f,r[E]);f==="rootPath"&&T?.endsWith("/")&&(T=T.slice(0,-1));try{u.setIn([...h],T)}catch(p){rt.error(p)}}}l&&og(u,l),IE(u);let _=u.getIn(["rootPath"]),d=Br.join(_,Rr.HDB_CONFIG_FILE);s===!0&&yF(c,_),Bt.writeFileSync(d,String(u)),n&&(ft=$n(u.toJSON())),rt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(ug,"updateConfigValue");function yF(e,t){try{let r=Br.join(t,"backup",`${Rr.HDB_CONFIG_FILE}.bak`);Bt.copySync(e,r),rt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){rt.error(TF),rt.error(r)}}a(yF,"backupConfigFile");var IF=["schemas"];function $n(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!IF.includes(r)){let s=$n(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a($n,"flattenConfig");function yE(e,t){if(e===En.CLUSTERING_NODENAME||e===En.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(dF(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||lt.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 lt.autoCast(t)}a(yE,"castConfigValue");function wF(){let e=lt.getPropsFilePath(),t=Vn(e);return fn(t).toJSON()}a(wF,"getConfiguration");async function CF(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return ug(void 0,void 0,n,!0),gF}catch(i){throw typeof i=="string"||i instanceof String?fF(i,i,hF.BAD_REQUEST,void 0,void 0,!0):i}}a(CF,"setConfiguration");function wE(){let e=lt.getPropsFilePath();try{Bt.accessSync(e,Bt.constants.F_OK|Bt.constants.R_OK)}catch(s){if(!lt.noBootFile())throw rt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Vn(e);return fn(t).toJSON()}a(wE,"readConfigFile");function fn(e){return _F.parseDocument(Bt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(fn,"parseYamlDoc");function UF(){let e=wE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=lt.isEmptyOrZeroLength(t)?[]:t;let r=rg(t);if(r)throw Au.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=lt.isEmptyOrZeroLength(s)?[]:s;let n=rg(s);if(n)throw Au.CONFIG_VALIDATION(n.message);if(!lt.isEmptyOrZeroLength(s)&&!lt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!lt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Au.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(UF,"getClusteringRoutes");function lg(e){let t=ng(e);ft={};for(let r in qs){let s=t.get(r.toUpperCase());if(lt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=qs[r].toLowerCase();n===En.LOGGING_ROOT?ft[n]=Br.dirname(s):ft[n]=s}return ft}a(lg,"initOldConfig");function DF(e){let t=wE();return EF.get(t,e.replaceAll("_","."))}a(DF,"getConfigFromFile");async function LF(e,t){let r=fn(Vn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Bt.writeFile(Vn(),String(r))}a(LF,"addConfig");function MF(e){let t=Vn(lt.getPropsFilePath()),r=fn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Br.join(s,Rr.HDB_CONFIG_FILE);Bt.writeFileSync(n,String(r))}a(MF,"deleteConfigFromFile")});var Q=m((jte,fg)=>{"use strict";var CE=require("fs-extra"),Hr=require("path"),dg=require("os"),PF=require("properties-reader"),ea=x(),Yn=V(),re=A(),Nu=gr(),vF="Error initializing environment manager",bu="BOOT_PROPS_FILE_PATH",Eg=!1,BF={[re.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Fs={};fg.exports={BOOT_PROPS_FILE_PATH:bu,getHdbBasePath:HF,setHdbBasePath:qF,get:FF,initSync:xF,setProperty:fe,initTestEnvironment:kF};function HF(){return Fs[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(HF,"getHdbBasePath");function qF(e){Fs[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(qF,"setHdbBasePath");function FF(e){let t=Nu.getConfigValue(e);return t===void 0?Fs[e]:t}a(FF,"get");function fe(e,t){BF[e]&&(Fs[e]=t),Nu.updateConfigObject(e,t)}a(fe,"setProperty");function GF(){let e;try{e=Yn.getPropsFilePath(),CE.accessSync(e,CE.constants.F_OK|CE.constants.R_OK),Eg=!0;let t=PF(e);return Fs[re.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(re.HDB_SETTINGS_NAMES.INSTALL_USER),Fs[re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Fs[bu]=e,!0}catch{return ea.trace(`Environment manager found no properties file at ${e}`),!1}}a(GF,"doesPropFileExist");function xF(e=!1){try{(Eg||GF()||Yn.noBootFile())&&(Nu.initConfig(e),Fs[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Nu.getConfigValue(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ea.error(vF),ea.error(t),console.error(t),process.exit(1)}}a(xF,"initSync");function kF(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=Hr.join(__dirname,"../../","unitTests");Fs[bu]=Hr.join(u,"hdb_boot_properties.file"),fe(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Hr.join(u,"settings.test")),fe(re.HDB_SETTINGS_NAMES.INSTALL_USER,dg.userInfo()?dg.userInfo().username:void 0),fe(re.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Hr.join(u,"envDir","utility","keys","privateKey.pem")),fe(re.HDB_SETTINGS_NAMES.CERT_KEY,Hr.join(u,"envDir","utility","keys","certificate.pem")),fe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Hr.join(u,"envDir","utility","keys","privateKey.pem")),fe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Hr.join(u,"envDir","utility","keys","certificate.pem")),fe(re.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),fe(re.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Hr.join(u,"envDir","log")),fe(re.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),fe(re.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),fe(re.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),fe(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Hr.join(u,"envDir")),fe(re.CONFIG_PARAMS.STORAGE_PATH,Hr.join(u,"envDir")),fe(re.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Yn.isEmpty(n)?!0:n),fe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Yn.isEmpty(n)?!0:n),fe(re.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),fe(re.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Yn.isEmpty(i)?!1:i),fe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Yn.isEmpty(i)?!1:i),fe(re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),fe(re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),fe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),fe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),fe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Hr.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),fe(re.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Yn.isEmpty(c)?!1:c),o&&(fe("CORS_ACCESSLIST",o),fe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(fe(re.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),fe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(fe(re.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),fe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(fe(re.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),fe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${bu}. Please check your boot props and settings files`;ea.fatal(r),ea.error(t)}}a(kF,"initTestEnvironment")});var Ce=m((tre,gg)=>{"use strict";var ia=A(),VF=V(),Ht=Q(),oa=require("path"),$F=require("minimist"),hg=require("fs-extra"),mg=require("lodash");Ht.initSync();var{CONFIG_PARAMS:hn,SCHEMAS_PARAM_CONFIG:ta,SYSTEM_SCHEMA_NAME:yu}=ia,ra,sa,na;function Sg(){if(ra!==void 0)return ra;if(Ht.getHdbBasePath()!==void 0)return ra=Ht.get(hn.STORAGE_PATH)||oa.join(Ht.getHdbBasePath(),ia.DATABASES_DIR_NAME),ra}a(Sg,"getBaseSchemaPath");function pg(){if(sa!==void 0)return sa;if(Ht.getHdbBasePath()!==void 0)return sa=Rg(yu),sa}a(pg,"getSystemSchemaPath");function Tg(){if(na!==void 0)return na;if(Ht.getHdbBasePath()!==void 0)return na=Ht.get(ia.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||oa.join(Ht.getHdbBasePath(),ia.TRANSACTIONS_DIR_NAME),na}a(Tg,"getTransactionAuditStoreBasePath");function YF(e,t){let r=Ht.get(hn.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||oa.join(Tg(),e.toString())}a(YF,"getTransactionAuditStorePath");function Rg(e,t){e=e.toString(),t=t&&t.toString();let r=Ht.get(ia.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||oa.join(Sg(),e)}a(Rg,"getSchemaPath");function KF(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,$F(process.argv));let s=r[hn.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!VF.isObject(s))throw o;i=s}for(let o of i){let c=o[yu];if(!c)continue;let u=Ht.get(hn.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[ta.PATH];if(l)return mg.set(u,[yu,ta.TABLES,t,ta.PATH],l),Ht.setProperty(hn.SCHEMAS,u),l;let _=c?.[ta.PATH];if(_)return mg.set(u,[yu,ta.PATH],_),Ht.setProperty(hn.SCHEMAS,u),_}}let n=r[hn.STORAGE_PATH.toUpperCase()];if(n){if(!hg.pathExistsSync(n))throw new Error(n+" does not exist");let i=oa.join(n,e);return hg.mkdirsSync(i),Ht.setProperty(hn.STORAGE_PATH,n),i}return pg()}a(KF,"initSystemSchemaPaths");function WF(){ra=void 0,sa=void 0,na=void 0}a(WF,"resetPaths");gg.exports={getBaseSchemaPath:Sg,getSystemSchemaPath:pg,getTransactionAuditStorePath:YF,getTransactionAuditStoreBasePath:Tg,getSchemaPath:Rg,initSystemSchemaPaths:KF,resetPaths:WF}});var qt=m((ire,yg)=>{"use strict";var QF=nr().LMDB_ERRORS_ENUM,sre=require("lmdb"),zF=ke(),nre=require("buffer").Buffer,{OVERFLOW_MARKER:Ag,MAX_SEARCH_KEY_LENGTH:Iu}=zF,Og=["number","string","symbol","boolean","bigint"];function JF(e){if(e=e?.primaryStore||e,!e)throw new Error(QF.ENV_REQUIRED)}a(JF,"validateEnv");function XF(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(XF,"stringifyData");function ZF(e){return e instanceof Date?e.valueOf():e}a(ZF,"convertKeyValueToWrite");function jF(e){if(e==null)return;if(Og.includes(typeof e))return e.length>Iu?[e.slice(0,Iu)+Ag]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(Og.includes(typeof n))n.length>Iu?t.push(n.slice(0,Iu)+Ag):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(jF,"getIndexedValues");var wu=0,Ng=0;function bg(){Ng=Date.now()-performance.now()}a(bg,"adjustStartTime");bg();var eG=6e4;setInterval(bg,eG).unref();function tG(){let e=performance.now()+Ng;return e>wu?(wu=e,e):(wu+=488e-6,wu)}a(tG,"getNextMonotonicTime");yg.exports={validateEnv:JF,stringifyData:XF,convertKeyValueToWrite:ZF,getNextMonotonicTime:tG,getIndexedValues:jF}});var Ig,ts,UE,aa=pe(()=>{Ig=require("events"),ts=class extends Ig.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new UE;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)}},UE=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 ca(e){return e[ht]||(e[ht]=Object.create(null))}function Mu(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u={get(){let l=this[ht];if(l&&c in l)return l[c];let _=this[ue]?.[c];if(_&&typeof _=="object"){let d=wg(_,o);if(d)return l||(l=this[ht]=Object.create(null)),l[c]=d}return _},set(l){ca(this)[c]=l},enumerable:!0,configurable:!0};switch(u.get.isAttribute=!0,o.type){case"String":u.set=function(l){if(typeof l!="string")throw(0,Cu.ClientError)(`${c} must be a string, attempt to assign ${l}`);ca(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,Cu.ClientError)(`${c} must be a string, attempt to assign ${l}`);ca(this)[c]=l};break}s[c]=u,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,u)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[ht];return u?.[o]!==void 0?u[o]:this[ue]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new Cu.ClientError("Can not add a property to a sealed table schema");ca(this)[o]=c}),i("deleteProperty",function(o){ca(this)[o]=void 0}),i("toJSON",function(){let o=this[ht],c;for(let l in o)c||(c=Object.assign({},this[ue])),c[l]=o[l];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ue])),Object.assign(c,this)),c||this[ue]}),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 wg(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[ue]=n}},Mu(r,t)),new r(e)):new Uu(e);case Array:let s=new Lu(e.length);s[ue]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=wg(o,t?.elements)),s[n]=o}return s}}function Pu(e){let t=e[ht],r;for(let n in t){r||(r=Object.assign({},e[ue]));let i=t[n];i&&typeof i=="object"&&(i=Pu(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ue])),Object.assign(r,e)),r||e[ue]}function ua(e){let t;if(e[ue]&&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[ht];for(let s in r){t||(t=Object.assign({},e[ue]));let n=r[s];n&&typeof n=="object"&&(n=ua(n)),t[s]=n}return t?Object.freeze(t):e[ue]||Object.freeze(e)}function Du(e){let t=e[ue];if(!t)return!0;if(e.constructor===Array){if(e[Kn]||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?.[ue]===n){if(Du(i))return!0}else return!0}}else{let r=e[ht];for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ue]===i){if(Du(n))return!0}else return!0}else return!0}}return!1}var Cu,ht,Uu,Kn,Lu,vu=pe(()=>{rs();Cu=U(W()),ht=Symbol("own-data");a(ca,"getChanges");a(Mu,"assignTrackedAccessors");a(wg,"trackObject");Uu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ue]=t}};Mu(Uu,{});a(Pu,"collapseData");a(ua,"deepFreeze");a(Du,"hasChanges");Kn=Symbol.for("has-array-changes"),Lu=class extends Array{static{a(this,"TrackedArray")}[Kn];constructor(t){super(t)}splice(...t){return this[Kn]=!0,super.splice(...t)}push(...t){return this[Kn]=!0,super.push(...t)}pop(){return this[Kn]=!0,super.pop()}unshift(...t){return this[Kn]=!0,super.unshift(...t)}shift(){return this[Kn]=!0,super.shift()}};Lu.prototype.constructor=Array});function Ke(e,t){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 r=e.transaction=new DE;e.timestamp&&(r.timestamp=e.timestamp),r[Oe]=e,e.resourceCache=[];let s;try{if(s=t(r),s?.then)return s.then(n,i)}catch(o){i(o)}return n(s);function n(o){let c=r.commit();return c.then?c.then(()=>(e.transaction=null,o)):(e.transaction=null,o)}function i(o){throw r.abort(),e.transaction=null,o}}var Cg,Ug,DE,Wn=pe(()=>{Cg=U(qt()),Ug=require("../index");rs();a(Ke,"transaction");(0,Ug._assignPackageExport)("transaction",Ke);Ke.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ke.abort=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()};DE=class extends Array{static{a(this,"TransactionSet")}commit(t=!0){let r=[],s=this.length;for(let n=0;n<s;n++)this[n].validate?.();this.timestamp||(this.timestamp=(0,Cg.getNextMonotonicTime)());for(let n=0;n<s;n++){let o=this[n].commit(this.timestamp,t);o?.then&&r.push(o)}return r.length>0?Promise.all(r).then(()=>(this.splice(0,s),this.commit(t))):this.length>s?(this.splice(0,s),this.commit(t)):(this.length=0,{txnTime:this.timestamp})}abort(){for(let t of this)t.abort?.()}doneReading(){for(let t of this)t.doneReading?.()}}});function PE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,l,_=e[1]??e.value;_ instanceof Date&&(_=_.getTime());let d=e.comparator,E;switch(sG[d]||d){case"lt":o=!0,c=_;break;case"le":o=!0,c=_,u=!0;break;case"gt":o=_,l=!0;break;case"ge":o=_;break;case"prefix":o=_,c=_.slice(0),c[c.length-1]=ns.MAXIMUM_KEY;break;case"starts_with":o=_.toString(),c=_+String.fromCharCode(65535);break;case"between":o=_[0],o instanceof Date&&(o=o.getTime()),c=_[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case _t.SEARCH_TYPES.EQUALS:case void 0:o=_,c=_,u=!0;break;case"ne":case"contains":case"ends_with":E=!0;break}if(r){let p=o;o=c,c=p,p=!l,l=!u,u=p}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new LE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let p=vE(e);if(!p)throw new LE.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:R,value:O})=>new Promise(q=>setImmediate(()=>q(p(O)?R:Lg.SKIP))))}let T={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(T):h.getRange(T).map(({value:p})=>p)}function vE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case _t.SEARCH_TYPES.EQUALS:case void 0:return ss(r,n=>n===s);case _t.SEARCH_TYPES.CONTAINS:return ss(r,n=>n?.toString().includes(s));case _t.SEARCH_TYPES.ENDS_WITH:case _t.SEARCH_TYPES._ENDS_WITH:return ss(r,n=>n?.toString().endsWith(s));case _t.SEARCH_TYPES.STARTS_WITH:case _t.SEARCH_TYPES._STARTS_WITH:return ss(r,n=>typeof n=="string"&&n.startsWith(s));case _t.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),ss(r,n=>(0,ns.compareKeys)(n,s[0])>=0&&(0,ns.compareKeys)(n,s[1])<=0);case"gt":case _t.SEARCH_TYPES.GREATER_THAN:case _t.SEARCH_TYPES._GREATER_THAN:return ss(r,n=>(0,ns.compareKeys)(n,s)>0);case"ge":case _t.SEARCH_TYPES.GREATER_THAN_EQUAL:case _t.SEARCH_TYPES._GREATER_THAN_EQUAL:return ss(r,n=>(0,ns.compareKeys)(n,s)>=0);case _t.SEARCH_TYPES.LESS_THAN:case"lt":case _t.SEARCH_TYPES._LESS_THAN:return ss(r,n=>(0,ns.compareKeys)(n,s)<0);case"le":case _t.SEARCH_TYPES.LESS_THAN_EQUAL:case _t.SEARCH_TYPES._LESS_THAN_EQUAL:return ss(r,n=>(0,ns.compareKeys)(n,s)<=0);case"ne":return ss(r,n=>(0,ns.compareKeys)(n,s)!==0);default:return}}function ss(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 Bu(e){if(!e)return;let t=new ME,r,s,n,i,o;for(;r=Dg.exec(e);){i=Dg.lastIndex;let[,c,u]=r;switch(u){case")":switch(o){case"limit":if(c.indexOf(",")>-1){let[l,_]=c.split(",");t.offset=+l,t.limit=_-t.offset}else t.limit=+c;break;case"select":if(c[0]==="["){if(c[c.length-1]!=="]")throw new Error("Unmatched brackets");t.select=c.slice(1,-1).split(","),t.select.asArray=!0}else c.indexOf(",")>-1?t.select=(c.endsWith(",")?c.slice(0,-1):c).split(","):t.select=c;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=c.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}`)}break;case"(":o=c;break;case"=":s?c.length<=2&&(n=c):(n="equals",s=decodeURIComponent(c));break;case"!=":case"<":case"<=":case">":case">=":n=rG[u],s=decodeURIComponent(c);break;case"=*":n="ends_with",s=decodeURIComponent(c);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(c)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${u} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(c)}),s=void 0;break;default:throw new Error(`Unknown operator ${u} in query ${e}`)}}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var LE,_t,ns,Lg,Dg,rG,sG,ME,Hu=pe(()=>{LE=U(W()),_t=U(ke()),ns=require("ordered-binary"),Lg=require("lmdb"),Dg=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,rG={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(PE,"idsForCondition");sG={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(vE,"filterByType");a(ss,"attributeComparator");a(Bu,"parseQuery");ME=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 qE={};je(qE,{CONTEXT:()=>Oe,ID_PROPERTY:()=>ce,IS_COLLECTION:()=>Gs,RECORD_PROPERTY:()=>ue,Resource:()=>mt,SAVE_UPDATES_PROPERTY:()=>qg,snake_case:()=>iG});function iG(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Mg(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 HE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Ar(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,l;if(r?o?(l=i,o=o[Oe]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Oe]||i):l=i:(l=n,c=l[ce]??l[this.primaryKey]??null):i?o=i[Oe]||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 E of n){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let E=c.indexOf("?");if(E>-1){let h=this.parseQuery(c.slice(E+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,E)}let f=this.parsePath(c,o,u);f?.query?(u=f.query,c=f.id):c=f}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let _;if(u?.allowInvalidated?(_=Object.assign({},t),_.allowInvalidated=!0):_=t,o.transaction){let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)}else return Ke(o,()=>{let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)});function d(E){if(t.type==="read"&&(E[qg]=!1),o.authorize){o.authorize=!1;let f=t.type==="read"?E.allowRead(o.user,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,o):E.allowUpdate(o.user,o):t.type==="create"?E.allowCreate(o.user,o):E.allowDelete(o.user,o);if(f?.then)return f.then(h=>{if(!h)throw new qu(o.user);return typeof l?.then=="function"?l.then(T=>e(E,u,o,T)):e(E,u,o,l)});if(!f)throw new qu(o.user)}return typeof l?.then=="function"?l.then(f=>e(E,u,o,f)):e(E,u,o,l)}a(d,"authorizeActionOnResource")}}function Or(e,t){let r=new Hg.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[ue];if(t){let r=e[ht];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function Pg(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 vg,Bg,Hg,Oe,ce,Gs,qg,ue,nG,mt,qu,HE,rs=pe(()=>{vg=require("crypto");aa();Bg=require("../index"),Hg=U(W());vu();Wn();Hu();Oe=Symbol.for("context"),ce=Symbol.for("primary-key"),Gs=Symbol("is-collection"),qg=Symbol("save-updates"),ue=Symbol("stored-record"),nG={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},mt=class{static{a(this,"Resource")}[Oe];[ce];static transactions;constructor(t,r){this[ce]=t;let s=r?.[Oe];this[Oe]=s!==void 0?s:r||null}updateModificationTime(t=Date.now()){t>this[LAST_MODIFICATION_PROPERTY]&&(this[LAST_MODIFICATION_PROPERTY]=t)}static get=Ar(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 l=Pg(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=Ar(function(t,r,s,n){if(Array.isArray(n)&&t[Gs]){let i=[],o=s.authorize;for(let c of n)o&&(s.authorize=!0),i.push(this.put(t,r,s,c));return i}return t.put?t.put(n,r):Or(t,"put")},{hasContent:!0,type:"update"});static delete=Ar(function(t,r,s,n){return t.delete?t.delete(r):Or(t,"delete")},{hasContent:!1,type:"delete",allowInvalidated:!0});static getNewId(){return(0,vg.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),Ke(s,()=>{let i=new this(n,s),o=i.put?i.put(r):Or(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Ar(function(t,r,s,n){return t.invalidate?t.invalidate(r):Or(t,"delete")},{hasContent:!1,type:"update",allowInvalidated:!0});static post=Ar(function(t,r,s,n){return t[ce]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Ar(function(t,r,s,n){return t.connect?t.connect(r):Or(t,"connect")},{type:"read"});static subscribe=Ar(function(t,r,s,n){return t.subscribe?t.subscribe(r):Or(t,"subscribe")},{type:"read"});static publish=Ar(function(t,r,s,n){return t[ce]!=null&&t.update?.(),t.publish?t.publish(n,r):Or(t,"publish")},{hasContent:!0,type:"create"});static search=Ar(function(t,r,s,n){let i=t.search?t.search(s):Or(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=Pg(o);return i.map(c)}return i},{type:"read"});static query=Ar(function(t,r,s,n){return t.search?t.search(n,r):Or(t,"search")},{hasContent:!0,type:"read"});static copy=Ar(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):Or(t,"copy")},{type:"create"});static move=Ar(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):Or(t,"move")},{type:"delete"});post(t){if(this[Gs])return this.constructor.create(this[ce],t,this[Oe]);Or(this,"post")}static isCollection(t){return t?.[Gs]}static coerceId(t){return t}static parseQuery(t){return Bu(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&&nG[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:Mg(t,this)}}return Mg(t,this)}static getResource(t,r,s){let n,i=r[Oe],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 l=u.asMap.get(t);if(n=l?.find(_=>_.constructor===c),n)return n;l||u.asMap.set(t,l=[]),l.push(n=new c(t,i))}else{if(n=u.find(l=>l[ce]===t&&l.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let l=new Map;for(let _ of u){let d=_[ce],E=l.get(d);E?E.push(_):l.set(d,[_])}i.resourceCache.length=0,i.resourceCache.asMap=l}}}else n=new c(t,i);return o&&(n[Gs]=!0),n}connect(t){let r=new ts;if(t?.subscribe!==!1){let s={listener:i=>{r.send(i)}},n=this.subscribe?.(s);r.on("close",()=>n?.end())}return r}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[ce]}getContext(){return this[Oe]}};mt.prototype[Oe]=null;(0,Bg._assignPackageExport)("Resource",mt);a(iG,"snake_case");qu=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(Mg,"pathToId");HE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Ar,"transactional");a(Or,"missingMethod");a(BE,"selectFromObject");a(Pg,"transformForSelect")});var xE={};je(xE,{loadGQLSchema:()=>aG,start:()=>GE,startOnMainThread:()=>oG});function GE({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:l,StringValueNode:_}=await import("graphql"),d=o(new c(r.toString(),n)),E=new Map,f=[],h;for(let T of d.definitions)switch(T.kind){case u.OBJECT_TYPE_DEFINITION:let $=function(w){if(w.kind==="NonNullType"){let D=$(w.type);return D.nullable=!0,D}return w.kind==="ListType"?{type:"array",elements:$(w.type)}:{type:w.name?.value}};a($,"getProperty");let p=T.name.value,R=[],O={table:null,database:null,properties:R};E.set(p,O);for(let w of T.directives){if(w.name.value==="table"){for(let I of w.arguments)O[I.name.value]=I.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=p),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,f.push(O)}if(w.name.value==="sealed"&&(O.sealed=!0),w.name.value==="export"){O.export=!0;for(let I of w.arguments)I.name.value==="name"&&(O.export={name:I.value.value})}}let q=!1;for(let w of T.fields){let I=$(w.type);I.name=w.name.value,R.push(I);for(let D of w.directives)if(D.name.value==="primaryKey")q?console.warn("Can not define two attributes as a primary key"):(I.isPrimaryKey=!0,q=!0);else if(D.name.value==="indexed")I.indexed=!0;else if(D.name.value==="createdTime")I.assignCreatedTime=!0;else if(D.name.value==="updatedTime")I.assignUpdatedTime=!0;else if(D.name.value==="expiresAt")I.expiresAt=!0;else if(D.name.value==="allow"){let z=I.authorizedRoles=[];for(let M of D.arguments)M.name.value==="role"&&z.push(M.value.value)}}O.typeName=p,p==="Query"&&(h=O)}for(let[T,p]of E)for(let R of p.properties){let O=E.get(R.type);O&&(R.properties=O.properties)}for(let T of f)T.tableClass=e(T),T.export&&i.set((0,FE.dirname)(s)+"/"+(T.export.name||T.typeName),T.tableClass);if(h)for(let T of h.properties){let p=E.get(T.type);if(!p)throw new Error(`${T.type} was not found as a Query export`);i.set((0,FE.dirname)(s)+"/"+T.name,p.tableClass)}}}var FE,oG,aG,Fg=pe(()=>{FE=require("path");Ee();a(GE,"start");oG=GE,aG=GE({ensureTable:st}).handleFile});async function Fu(e){return cG?(la||(la=uG(_G)),(await(await la).import(e)).namespace):import(e)}async function uG(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),la=new Compartment({console,Math,Date,fetch:lG,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,xg.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:mt,tables:or,databases:Be})}};let s=await(0,Gg.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),la}function lG(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 _G(){return{Resource:mt,tables:or}}var Gg,xg,cG,la,kE=pe(()=>{rs();Ee();Gg=require("fs/promises"),xg=require("path"),cG=!1;a(Fu,"secureImport");a(uG,"getCompartment");a(lG,"secureOnlyFetch");a(_G,"getGlobalVars")});var $E={};je($E,{handleFile:()=>dG});async function dG(e,t,r,s){let n=new Map,i=(0,kg.pathToFileURL)(r).toString(),o=await Fu(i);u(o.default)&&s.set((0,VE.dirname)(t),o.default),c(o,(0,VE.dirname)(t));function c(l,_){for(let d in l){let E=l[d];u(E)?s.set(_+"/"+d,E):typeof E=="object"&&c(E,_+"/"+d)}}a(c,"recurseForResources");function u(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(u,"isResource"),n}var kg,VE,Vg=pe(()=>{kg=require("url");kE();VE=require("path");a(dG,"handleFile")});var KE={};je(KE,{start:()=>EG});function EG({resources:e}){e.set("login",YE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var YE,$g=pe(()=>{rs();a(EG,"start");YE=class extends mt{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 QE=m((Mre,Wg)=>{"use strict";var{Readable:fG}=require("stream"),hG=1e4;Wg.exports={streamAsJSON(e){return new WE({value:e})}};var WE=class extends fG{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),Yg)}catch(n){yield Yg(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);Kg(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>hG?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 Kg(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 Yg(e){return console.error(e),JSON.stringify(e.toString())}a(Yg,"handleError");function Kg(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Kg,"when")});var oA=m((Bre,iA)=>{"use strict";var zE=require("recursive-iterator"),mG=require("alasql"),JE=require("clone"),Qg=V(),{handleHDBError:zg,hdb_errors:SG}=W(),{HDB_ERROR_MSGS:Jg,HTTP_STATUS_CODES:Xg}=SG,{getDatabases:pG}=(Ee(),se(be)),TG=["DISTINCT_ARRAY"],Zg=Symbol("validateTables"),XE=Symbol("validateTable"),vre=Symbol("getAllColumns"),jg=Symbol("validateAllColumns"),Gu=Symbol("findColumn"),eA=Symbol("validateOrderBy"),_a=Symbol("validateSegment"),ZE=Symbol("validateColumn"),tA=Symbol("setColumnsForTable"),rA=Symbol("checkColumnsForAsterisk"),sA=Symbol("validateGroupBy"),nA=Symbol("hasColumns"),jE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Zg](),this[rA](),this[jg]()}[Zg](){if(this[nA]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[XE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[XE](t.table)})}}[nA](){let t=!1,r=new zE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[XE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=pG();if(!r[t.databaseid])throw zg(new Error,Jg.SCHEMA_NOT_FOUND(t.databaseid),Xg.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw zg(new Error,Jg.TABLE_NOT_FOUND(t.databaseid,t.tableid),Xg.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=JE(n);i.table=JE(t),this.attributes.push(i)})}[Gu](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)}[rA](){let t=new zE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[tA](r.tableid)}[tA](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new mG.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[jg](){this[_a](this.statement.columns,!1),this[_a](this.statement.joins,!1),this[_a](this.statement.where,!1),this[sA](this.statement.group,!1),this[_a](this.statement.order,!0)}[_a](t,r){if(!t)return;let s=new zE(t),n=[];for(let{node:i,path:o}of s)!Qg.isEmpty(i)&&!Qg.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[eA](i):n.push(this[ZE](i)));return n}[sA](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&TG.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=JE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Gu](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[Gu](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`}[eA](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[ZE](t)}[ZE](t){let r=this[Gu](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]}};iA.exports=jE});var cA=m((qre,aA)=>{"use strict";var ef=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")}};aA.exports=ef});var lA=m((Gre,uA)=>{"use strict";var tf=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};uA.exports=tf});var xu=m((kre,_A)=>{"use strict";var sf=Q(),nf=A();sf.initSync();var RG=sf.get(nf.CONFIG_PARAMS.STORAGE_COMPRESSION),gG=sf.get(nf.CONFIG_PARAMS.STORAGE_CACHING)!==!1,AG=nf.UPDATES_PROPERTY,rf=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=RG&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=gG&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===AG)}};_A.exports=rf});var Vu=m(($re,EA)=>{"use strict";var Fi=Q(),da=A();Fi.initSync();var OG=Fi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Fi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Fi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",dA=Fi.get(da.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),NG=Fi.get(da.CONFIG_PARAMS.STORAGE_NOREADAHEAD),ku=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=OG,this.noFSAccess=!0,dA!==void 0&&(this.overlappingSync=dA),this.noReadAhead=NG}};EA.exports=ku;ku.MAX_DBS=1e4});var Ie=m((Kre,OA)=>{"use strict";var af=require("lmdb"),qr=require("fs-extra"),ar=require("path"),$u=qt(),mA=x(),Ft=nr().LMDB_ERRORS_ENUM,Yu=lA(),cf=xu(),SA=Vu(),mn=ke(),fA=A(),{table:bG,resetDatabases:yG}=(Ee(),se(be)),hA=Q(),Fr=mn.INTERNAL_DBIS_NAME,pA=mn.DBI_DEFINITION_NAME,IG="data.mdb",wG="lock.mdb",Ea=".mdb",CG="-lock",of=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Nr(t,r),this.key_type=this.dbi[mn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[mn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new af.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ku(e,t){if(e===void 0)throw new Error(Ft.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Ft.ENV_NAME_REQUIRED)}a(Ku,"pathEnvNameValidation");async function uf(e,t,r=!0){try{await qr.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Ft.INVALID_BASE_PATH):s}try{let s=ar.join(e,t+Ea);return await qr.access(s,qr.constants.R_OK|qr.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await qr.access(ar.join(e,t,IG),qr.constants.R_OK|qr.constants.F_OK),ar.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Ft.INVALID_ENVIRONMENT)}else throw new Error(Ft.INVALID_ENVIRONMENT);throw s}}a(uf,"validateEnvironmentPath");function Wu(e,t){if($u.validateEnv(e),t===void 0)throw new Error(Ft.DBI_NAME_REQUIRED)}a(Wu,"validateEnvDBIName");async function UG(e,t,r=!1,s=!1){Ku(e,t);let n=ar.basename(e);t=t.toString();let i=hA.get(fA.CONFIG_PARAMS.SCHEMAS);i||hA.setProperty(fA.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await uf(e,t,s),TA(e,t,r)}catch(o){if(o.message===Ft.INVALID_ENVIRONMENT){let c=ar.join(e,t);await qr.mkdirp(s?c:e);let u=new SA(s?c:c+Ea,!1),l=af.open(u);l.dbis=Object.create(null);let _=new cf(!1);l.openDB(Fr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=lf(e,t,r);return l[mn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(UG,"createEnvironment");async function DG(e,t,r,s=!0){Ku(e,t),t=t.toString();let n=ar.join(e,t);return bG({table:t,database:ar.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(DG,"copyEnvironment");async function TA(e,t,r=!1){Ku(e,t),t=t.toString();let s=lf(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 uf(e,t),i=ar.join(e,t+Ea),o=n!=i,c=new SA(n,o),u=af.open(c);u.dbis=Object.create(null);let l=gA(u);for(let _=0;_<l.length;_++)Nr(u,l[_]);return u[mn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(TA,"openEnvironment");async function LG(e,t,r=!1){Ku(e,t),t=t.toString();let s=ar.join(e,t+Ea),n=await uf(e,t);if(global.lmdb_map!==void 0){let i=lf(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await RA(o),delete global.lmdb_map[i]}}await qr.remove(n),await qr.remove(n===s?n+CG:ar.join(ar.dirname(n),wG))}a(LG,"deleteEnvironment");async function RA(e){$u.validateEnv(e);let t=e[mn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(RA,"closeEnvironment");function lf(e,t,r=!1){let n=`${ar.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(lf,"getCachedEnvironmentName");function MG(e){$u.validateEnv(e);let t=Object.create(null),r=Nr(e,Fr);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Fr)try{t[s]=Object.assign(new Yu,n)}catch{mA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(MG,"listDBIDefinitions");function gA(e){$u.validateEnv(e);let t=[],r=Nr(e,Fr);for(let{key:s}of r.getRange({start:!1}))s!==Fr&&t.push(s);return t}a(gA,"listDBIs");function PG(e,t){let s=Nr(e,Fr).getEntry(t),n=new Yu;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{mA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(PG,"getDBIDefinition");function AA(e,t,r,s=!r){if(Wu(e,t),t=t.toString(),t===Fr)throw new Error(Ft.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Nr(e,t)}catch(n){if(n.message===Ft.DBI_DOES_NOT_EXIST){let i=new cf(r,s===!0),o=e.openDB(t,i),c=new Yu(r===!0,s);return o[pA]=c,Nr(e,Fr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(AA,"createDBI");function Nr(e,t){if(Wu(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Fr?r=PG(e,t):r=new Yu,r===void 0)throw new Error(Ft.DBI_DOES_NOT_EXIST);let s;try{let n=new cf(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(Ft.DBI_DOES_NOT_EXIST):n}return s[pA]=r,e.dbis[t]=s,s}a(Nr,"openDBI");function vG(e,t){Wu(e,t),t=t.toString();let r=Nr(e,t),s=r.getStats();return r[mn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(vG,"statDBI");async function BG(e,t){try{let r=ar.join(e,t+Ea);return(await qr.stat(r)).size}catch{throw new Error(Ft.INVALID_ENVIRONMENT)}}a(BG,"environmentDataSize");function HG(e,t){if(Wu(e,t),t=t.toString(),t===Fr)throw new Error(Ft.CANNOT_DROP_INTERNAL_DBIS_NAME);Nr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Nr(e,Fr).removeSync(t)}a(HG,"dropDBI");function qG(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Nr(e,i)}catch(o){if(o.message===Ft.DBI_DOES_NOT_EXIST)AA(e,i,i!==t,i===t),s=!0;else throw o}}s&&yG()}a(qG,"initializeDBIs");OA.exports={openDBI:Nr,openEnvironment:TA,createEnvironment:UG,listDBIs:gA,listDBIDefinitions:MG,createDBI:AA,dropDBI:HG,statDBI:vG,deleteEnvironment:LG,initializeDBIs:qG,TransactionCursor:of,environmentDataSize:BG,copyEnvironment:DG,closeEnvironment:RA}});var bA=m((Qre,NA)=>{"use strict";var _f=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};NA.exports=_f});var IA=m((Jre,yA)=>{"use strict";var df=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}};yA.exports=df});var CA=m((Zre,wA)=>{"use strict";var Ef=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};wA.exports=Ef});var Gi=m((sse,LA)=>{"use strict";var FG=Ie(),GG=bA(),xG=IA(),kG=CA(),is=qt(),fa=nr().LMDB_ERRORS_ENUM,VG=ke(),xs=A(),$G=V(),YG=require("uuid"),ese=require("lmdb"),{handleHDBError:KG,hdb_errors:WG}=W(),{OVERFLOW_MARKER:tse,MAX_SEARCH_KEY_LENGTH:rse}=VG,UA=Q();UA.initSync();var Qu=UA.get(xs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),ff=xs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Qn=xs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function QG(e,t,r,s,n=is.getNextMonotonicTime()){pf(e,t,r,s),hf(e,t,r);let i=new GG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];DA(l,!0,n);let _=zG(e,t,r,l),d=l[t];o.push(_),c.push(d)}return mf(o,c,s,i,n)}a(QG,"insertRecords");function zG(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 _=c([[{}]]);Array.isArray(_)&&(c=_[0][xs.FUNC_VAL],s[o]=c)}let u=is.getIndexedValues(c),l=e.dbis[o];if(u){Qu&&l.prefetch(u.map(_=>({key:_,value:n})),zu);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}Qu&&e.dbis[t].prefetch([n],zu),e.dbis[t].put(n,s,s[Qn])})}a(zG,"insertRecord");function JG(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(JG,"removeSkippedRecords");function DA(e,t,r){let s=r>0;(s||!Number.isInteger(e[Qn]))&&(e[Qn]=r||(r=is.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[ff]))&&(e[ff]=r||is.getNextMonotonicTime()):delete e[ff]}a(DA,"setTimestamps");function hf(e,t,r){r.indexOf(xs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(xs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(xs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(xs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),FG.initializeDBIs(e,t,r)}a(hf,"initializeTransaction");async function XG(e,t,r,s,n=is.getNextMonotonicTime()){pf(e,t,r,s),hf(e,t,r);let i=new xG,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=Sf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return mf(c,u,s,i,n,o)}a(XG,"updateRecords");async function ZG(e,t,r,s,n=is.getNextMonotonicTime()){try{pf(e,t,r,s)}catch(u){throw KG(u,u.message,WG.HTTP_STATUS_CODES.BAD_REQUEST)}hf(e,t,r);let i=new kG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;$G.isEmpty(l[t])?(_=YG.v4(),l[t]=_):_=l[t];let d=Sf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return mf(o,c,s,i,n)}a(ZG,"upsertRecords");async function mf(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||is.getNextMonotonicTime(),JG(r,i),s}a(mf,"finalizeWrite");function Sf(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),l=u?.value,_=l;if(!l){if(i)return!1;l={}}if(DA(r,!_,o),Number.isInteger(r[Qn])&&l[Qn]>r[Qn])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],p=e.dbis[h];if(p===void 0)continue;let R=l[h];if(typeof T=="function"){let q=T([[l]]);Array.isArray(q)&&(T=q[0][xs.FUNC_VAL],r[h]=T)}if(T===R)continue;let O=is.getIndexedValues(R);if(O){Qu&&p.prefetch(O.map(q=>({key:q,value:s})),zu);for(let q=0,$=O.length;q<$;q++)p.remove(O[q],s)}if(O=is.getIndexedValues(T),O){Qu&&p.prefetch(O.map(q=>({key:q,value:s})),zu);for(let q=0,$=O.length;q<$;q++)p.put(O[q],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Qn])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:Sf(e,t,r,s,n,i,o))}a(Sf,"updateUpsertRecord");function jG(e,t,r){if(is.validateEnv(e),t===void 0)throw new Error(fa.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(fa.WRITE_ATTRIBUTES_REQUIRED):new Error(fa.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(jG,"validateBasic");function pf(e,t,r,s){if(jG(e,t,r),!Array.isArray(s))throw s===void 0?new Error(fa.RECORDS_REQUIRED):new Error(fa.RECORDS_MUST_BE_ARRAY)}a(pf,"validateWrite");function zu(){}a(zu,"noop");LA.exports={insertRecords:QG,updateRecords:XG,upsertRecords:ZG}});var zn=m((ise,ex)=>{ex.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",attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var os=m((ose,vA)=>{"use strict";var PA=V(),MA=A(),xi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,ks=require("joi"),Sn={schema_format:{pattern:xi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},tx=ks.alternatives(ks.string().min(1).max(Sn.schema_length.maximum).pattern(xi).messages({"string.pattern.base":"{:#label} "+Sn.schema_format.message}),ks.number()).required(),rx=ks.alternatives(ks.string().min(1).max(Sn.schema_length.maximum).pattern(xi).messages({"string.pattern.base":"{:#label} "+Sn.schema_format.message}),ks.number()),sx=ks.alternatives(ks.string().min(1).max(Sn.schema_length.maximum).pattern(xi).messages({"string.pattern.base":"{:#label} "+Sn.schema_format.message}),ks.number()).required();function nx(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Sn.schema_length.maximum?`'${e}' maximum of 250 characters`:xi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(nx,"checkValidTable");function ix(e,t){return PA.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(ix,"validateSchemaExists");function ox(e,t){let r=t.state.ancestors[0].schema;return PA.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(ox,"validateTableExists");function ax(e,t){return e.toLowerCase()===MA.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${MA.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(ax,"validateSchemaName");vA.exports={common_validators:Sn,schema_regex:xi,hdb_schema_table:tx,validateSchemaExists:ix,validateTableExists:ox,validateSchemaName:ax,checkValidTable:nx,hdb_database:rx,hdb_table:sx}});var Ju=m((cse,BA)=>{var{common_validators:as}=os(),ma=ve(),ha="is required",We={database:{presence:!1,format:as.schema_format,length:as.schema_length},schema:{presence:!1,format:as.schema_format,length:as.schema_length},table:{presence:!0,format:as.schema_format,length:as.schema_length},attribute:{presence:!0,format:as.schema_format,length:as.schema_length},hash_attribute:{presence:!0,format:as.schema_format,length:as.schema_length}};function Sa(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(Sa,"makeAttributesStrings");function cx(e){return e=Sa(e),We.table.presence=!1,We.attribute.presence=!1,We.hash_attribute.presence=!1,ma.validateObject(e,We)}a(cx,"schema_object");function ux(e){return e=Sa(e),We.table.presence={message:ha},We.attribute.presence=!1,We.hash_attribute.presence=!1,ma.validateObject(e,We)}a(ux,"table_object");function lx(e){return e=Sa(e),We.table.presence={message:ha},We.attribute.presence=!1,ma.validateObject(e,We)}a(lx,"create_table_object");function _x(e){return e=Sa(e),We.table.presence={message:ha},We.attribute.presence={message:ha},We.hash_attribute.presence=!1,ma.validateObject(e,We)}a(_x,"attribute_object");function dx(e){return e=Sa(e),We.table.presence={message:ha},We.attribute.presence=!1,We.hash_attribute.presence=!1,ma.validateObject(e,We)}a(dx,"describe_table");function Ex(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(Ex,"validateTableResidence");BA.exports={schema_object:cx,create_table_object:lx,table_object:ux,attribute_object:_x,describe_table:dx,validateTableResidence:Ex}});var qA=m((lse,HA)=>{"use strict";var fx=require("uuid"),Tf=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||fx.v4(),this.schema_table=`${this.schema}.${this.table}`}};HA.exports=Tf});var Xu=m((dse,FA)=>{"use strict";var hx=qA(),Rf=class extends hx{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}};FA.exports=Rf});var xA=m((fse,GA)=>{"use strict";GA.exports=Sx;var mx="inserted";function Sx(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===mx?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Sx,"returnObject")});var Zu=m((mse,KA)=>{"use strict";var px=A(),gf=Ie(),Tx=Gi(),{getSystemSchemaPath:Rx,getSchemaPath:gx}=Ce(),Ax=zn(),Ox=Ju(),Nx=Xu(),bx=xA(),{handleHDBError:kA,hdb_errors:$A}=W(),VA=V(),{HTTP_STATUS_CODES:yx}=$A,Af=Ax.hdb_attribute,YA=[];for(let e=0;e<Af.attributes.length;e++)YA.push(Af.attributes[e].attribute);var Ix="inserted";KA.exports=wx;async function wx(e){let t=Ox.attribute_object(e);if(t)throw kA(new Error,t.message,$A.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&VA.checkGlobalSchemaTable(e.schema,e.table);if(r)throw kA(new Error,r,yx.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=VA.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 Nx(e.schema,e.table,e.attribute,e.id);try{let i=await gf.openEnvironment(gx(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}`);gf.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await gf.openEnvironment(Rx(),px.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Tx.insertRecords(o,Af.hash_attribute,YA,[n]);return bx(Ix,c,{records:[n]},u)}catch(i){throw i}}a(wx,"lmdbCreateAttribute")});var Nf=m((pse,QA)=>{var{hdb_table:Cx,hdb_database:WA}=os(),Ux=ve(),Of=require("joi"),Dx={undefined:"undefined",null:"null"},Lx=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||Dx[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"),Mx=Of.object({database:WA,schema:WA,table:Cx,records:Of.array().items(Of.object().custom(Lx)).required()});QA.exports=function(e){return Ux.validateBySchema(e,Mx)}});var pa=m((gse,JA)=>{"use strict";var Vs=V(),zA=x(),Rse=Nf(),{getDatabases:Px}=(Ee(),se(be)),{ClientError:Jn}=W();JA.exports=vx;function vx(e){if(Vs.isEmpty(e))throw new Jn("invalid update parameters defined.");if(Vs.isEmptyOrZeroLength(e.schema))throw new Jn("invalid schema specified.");if(Vs.isEmptyOrZeroLength(e.table))throw new Jn("invalid table specified.");if(!Array.isArray(e.records))throw new Jn("records must be an array");let t=Px()[e.schema]?.[e.table];if(Vs.isEmpty(t))throw new Jn(`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&&Vs.isEmptyOrZeroLength(o[r]))throw zA.error("a valid hash attribute must be provided with update record:",o),new Jn("a valid hash attribute must be provided with update record, check log for more info");if(!Vs.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw zA.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Jn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Vs.isEmpty(o[r])&&o[r]!==""&&s.has(Vs.autoCast(o[r]))&&(o.skip=!0),s.add(Vs.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(vx,"insertUpdateValidate")});var Ta=m((Ose,XA)=>{"use strict";var Bx=A().OPERATIONS_ENUM,bf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=Bx.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};XA.exports=bf});var Oa=m((yse,ZA)=>{"use strict";var bse=Ta(),ju=A(),If=V(),yf=x(),Hx=require("uuid"),{handleHDBError:Ra,hdb_errors:qx}=W(),{HDB_ERROR_MSGS:ga,HTTP_STATUS_CODES:Aa}=qx;ZA.exports=Fx;function Fx(e,t,r){for(let n=0;n<t.length;n++)Gx(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];xx(i,r,e.operation)}}a(Fx,"processRows");function Gx(e){if(Buffer.byteLength(String(e))>ju.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ra(new Error,ga.ATTR_NAME_LENGTH_ERR(e),Aa.BAD_REQUEST,void 0,void 0,!0);if(If.isEmptyOrZeroLength(e)||If.isEmpty(e.trim()))throw Ra(new Error,ga.ATTR_NAME_NULLISH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}a(Gx,"validateAttribute");function xx(e,t,r){if(!e.hasOwnProperty(t)||If.isEmptyOrZeroLength(e[t])){if(r===ju.OPERATIONS_ENUM.INSERT||r===ju.OPERATIONS_ENUM.UPSERT){e[t]=Hx.v4();return}throw yf.error("Update transaction aborted due to record with no hash value:",e),Ra(new Error,ga.RECORD_MISSING_HASH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>ju.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw yf.error(e),Ra(new Error,ga.HASH_VAL_LENGTH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw yf.error(e),Ra(new Error,ga.INVALID_FORWARD_SLASH_IN_HASH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}a(xx,"validateHash")});var eO=m((wse,jA)=>{"use strict";var wf=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};jA.exports=wf});var sO=m((Use,rO)=>{"use strict";var Cf=Ie(),kx=x(),tO=nr().LMDB_ERRORS_ENUM;rO.exports=Vx;async function Vx(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 Cf.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==tO.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Cf.closeEnvironment(global.lmdb_map[s]),await Cf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==tO.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){kx.error(t)}}a(Vx,"cleanLMDBMap")});var $s=m((Lse,aO)=>{"use strict";var Na=require("crypto"),$x=Q(),{CONFIG_PARAMS:Yx}=A(),iO="aes-256-cbc",Kx=32,Wx=16,Uf=64,oO=32,Qx=Uf+oO,nO=new Map;aO.exports={encrypt:zx,decrypt:Jx,createNatsTableStreamName:Xx};function zx(e){let t=Na.randomBytes(Kx),r=Na.randomBytes(Wx),s=Na.createCipheriv(iO,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(zx,"encrypt");function Jx(e){let t=e.substr(0,Uf),r=e.substr(Uf,oO),s=e.substr(Qx,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Na.createDecipheriv(iO,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Jx,"decrypt");function Xx(e,t){let r=$x.get(Yx.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=nO.get(r);return s||(s=Na.createHash("md5").update(r).digest("hex"),nO.set(r,s)),s}a(Xx,"createNatsTableStreamName")});var Xn=m((vse,uO)=>{"use strict";var Pse=br(),el=x(),cO=Ju(),Zx=$s(),tl=V(),{handleHDBError:rl,hdb_errors:jx}=W(),{HDB_ERROR_MSGS:sl,HTTP_STATUS_CODES:Df}=jx,ek=Q();ek.initSync();var{getDatabases:Lf}=(Ee(),se(be));uO.exports={describeAll:tk,describeTable:nl,describeSchema:rk};async function tk(e){try{let t=tl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Lf(),i={},o={},c=[];for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let _=n[l];for(let d in _)try{let E;if(t||s)E=await nl({schema:l,table:d});else if(r&&r[l].describe&&r[l].tables[d].describe){let f=r[l].tables[d].attribute_permissions;E=await nl({schema:l,table:d},f)}E&&c.push(E)}catch(E){el.error(E)}}let u={};for(let l in c)t||s?(u[c[l].schema]==null&&(u[c[l].schema]={}),u[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(u[c[l].schema]==null&&(u[c[l].schema]={}),u[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?u[l]={}:o[l]&&(u[l]={});return u}catch(t){return el.error("Got an error in describeAll"),el.error(t),rl(new Error,sl.DESCRIBE_ALL_ERR)}}a(tk,"describeAll");async function nl(e,t){tl.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=cO.describe_table(e);if(i)throw i;let c=Lf()[r];if(!c)throw rl(new Error,sl.SCHEMA_NOT_FOUND(e.schema),Df.NOT_FOUND);let u=c[s];if(!u)throw rl(new Error,sl.TABLE_NOT_FOUND(e.schema,e.table),Df.NOT_FOUND);let l=[];if(n){let d={};n.forEach(E=>{E.describe&&(d[E.attribute_name]=!0)}),u.attributes.forEach(E=>{d[E.name]&&l.push(E)})}else l=u.attributes;let _={schema:r,name:u.tableName,attributes:l,hash_attribute:u.attributes.find(d=>d.isPrimaryKey||d.is_hash_attribute)?.name};_.clustering_stream_name=Zx.createNatsTableStreamName(_.schema,_.name);try{_.record_count=u.getRecordCount();let d=u.auditStore;if(d)for(let E of d.getKeys({reverse:!0,limit:1}))_.last_updated_record=E[0];if(!_.last_updated_record&&u.indices.__updatedtime__)for(let E of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))_.last_updated_record=E}catch(d){el.warn(`unable to stat table dbi due to ${d}`)}return _}a(nl,"descTable");async function rk(e){tl.transformReq(e);let t=cO.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=Lf()[s];if(!i)throw rl(new Error,sl.SCHEMA_NOT_FOUND(e.schema),Df.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),tl.isEmpty(u)||u.describe){let l=await nl({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(rk,"describeSchema")});var Ys=m((Fse,fO)=>{var sk=zn(),{callbackify:_O,promisify:nk}=require("util"),{getDatabases:dO}=(Ee(),se(be));fO.exports={setSchemaDataToGlobal:lO,getTableSchema:ik,getSystemSchema:ok,setSchemaDataToGlobalAsync:nk(lO)};var EO=Xn(),Hse=_O(EO.describeAll),qse=_O(EO.describeTable);function lO(e){global.hdb_schema=dO(),e&&e()}a(lO,"setSchemaDataToGlobal");function ik(e,t,r){let s=dO()[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(ik,"getTableSchema");function ok(){return sk}a(ok,"getSystemSchema")});var yr=m((xse,pO)=>{"use strict";var ol=Nf(),St=V(),ak=require("util"),al=Gr(),ck=Ys(),hO=x(),{handleHDBError:Zn,hdb_errors:uk}=W(),{HTTP_STATUS_CODES:jn}=uk,lk=ak.promisify(ck.getTableSchema),_k="updated",mO="inserted",SO="upserted";pO.exports={insert:Ek,update:fk,upsert:hk,validation:dk,flush:mk};async function dk(e){if(St.isEmpty(e))throw new Error("invalid update parameters defined.");if(St.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(St.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await lk(e.schema,e.table),r=ol(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&&St.isEmptyOrZeroLength(c[s]))throw hO.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(!St.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw hO.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!St.isEmpty(c[s])&&c[s]!==""&&n.has(St.autoCast(c[s]))&&(c.skip=!0),n.add(St.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(dk,"validation");async function Ek(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=ol(e);if(t)throw Zn(new Error,t.message,jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw Zn(new Error,r,jn.BAD_REQUEST);let s=await al.createRecords(e);return il(mO,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(Ek,"insertData");async function fk(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=ol(e);if(t)throw Zn(new Error,t.message,jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw Zn(new Error,r,jn.BAD_REQUEST);let s=await al.updateRecords(e);return St.isEmpty(s.existing_rows)?il(_k,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):il(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(fk,"updateData");async function hk(e){if(e.operation!=="upsert")throw Zn(new Error,"invalid operation, must be upsert",jn.INTERNAL_SERVER_ERROR);let t=ol(e);if(t)throw Zn(new Error,t.message,jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw Zn(new Error,r,jn.BAD_REQUEST);let s=await al.upsertRecords(e);return il(SO,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(hk,"upsertData");function il(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===mO?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===SO?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(il,"returnObject");function mk(e){return St.transformReq(e),al.flush(e.schema,e.table)}a(mk,"flush")});var Pf=m((Vse,gO)=>{var Sk=ve(),Mf=require("joi"),{hdb_table:pk,hdb_database:TO}=os(),RO={schema:TO,database:TO,table:pk},Tk={date:Mf.date().iso().required()},Rk={timestamp:Mf.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};gO.exports=function(e,t){let r=t==="timestamp"?{...RO,...Rk}:{...RO,...Tk},s=Mf.object(r);return Sk.validateBySchema(e,s)}});var NO=m(($se,OO)=>{var gk=ve(),vf=require("joi"),{hdb_table:Ak,hdb_database:AO}=os(),Ok=vf.object({schema:AO,database:AO,table:Ak,hash_values:vf.array().required(),ids:vf.array()});OO.exports=function(e){return gk.validateBySchema(e,Ok)}});var yO=m((Yse,bO)=>{"use strict";var Bf=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}},Hf=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}},qf=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};bO.exports={InsertObject:Bf,NoSQLSeachObject:Hf,DeleteResponseObject:qf}});var ri=m((Wse,DO)=>{"use strict";var wO=Pf(),Nk=NO(),ei=V(),IO=require("moment"),CO=x(),{promisify:bk,callbackify:yk}=require("util"),ti=A(),Ik=Ys(),Ff=bk(Ik.getTableSchema),Gf=Gr(),{DeleteResponseObject:wk}=yO(),{handleHDBError:pn,hdb_errors:Ck}=W(),{HDB_ERROR_MSGS:cl,HTTP_STATUS_CODES:Tn}=Ck,Uk="records successfully deleted",Dk=yk(UO);DO.exports={delete:Dk,deleteRecord:UO,deleteFilesBefore:Lk,deleteAuditLogsBefore:Mk};async function Lk(e){let t=wO(e,"date");if(t)throw pn(t,t.message,Tn.BAD_REQUEST,void 0,void 0,!0);if(ei.transformReq(e),!IO(e.date,IO.ISO_8601).isValid())throw pn(new Error,cl.INVALID_DATE,Tn.BAD_REQUEST,ti.LOG_LEVELS.ERROR,cl.INVALID_DATE,!0);let s=ei.checkSchemaTableExist(e.schema,e.table);if(s)throw pn(new Error,s,Tn.NOT_FOUND,ti.LOG_LEVELS.ERROR,s,!0);let n=await Gf.deleteRecordsBefore(e);if(await Ff(e.schema,e.table),CO.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Lk,"deleteFilesBefore");async function Mk(e){let t=wO(e,"timestamp");if(t)throw pn(t,t.message,Tn.BAD_REQUEST,void 0,void 0,!0);if(ei.transformReq(e),isNaN(e.timestamp))throw pn(new Error,cl.INVALID_VALUE("Timestamp"),Tn.BAD_REQUEST,ti.LOG_LEVELS.ERROR,cl.INVALID_VALUE("Timestamp"),!0);let r=ei.checkSchemaTableExist(e.schema,e.table);if(r)throw pn(new Error,r,Tn.NOT_FOUND,ti.LOG_LEVELS.ERROR,r,!0);let s=await Gf.deleteAuditLogsBefore(e);return await Ff(e.schema,e.table),CO.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Mk,"deleteAuditLogsBefore");async function UO(e){e.ids&&(e.hash_values=e.ids);let t=Nk(e);if(t)throw pn(t,t.message,Tn.BAD_REQUEST,void 0,void 0,!0);ei.transformReq(e);let r=ei.checkSchemaTableExist(e.schema,e.table);if(r)throw pn(new Error,r,Tn.NOT_FOUND,ti.LOG_LEVELS.ERROR,r,!0);try{await Ff(e.schema,e.table);let s=await Gf.deleteRecords(e);return ei.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Uk}`),s}catch(s){if(s.message===ti.SEARCH_NOT_FOUND_MESSAGE){let n=new wk;return n.message=ti.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(UO,"deleteRecord")});var ul=m((zse,PO)=>{var Pk=require("crypto"),LO=9;function vk(e){let t=Hk(LO),r=MO(e+t);return t+r}a(vk,"createHash");function Bk(e,t){let r=e.substr(0,LO),s=r+MO(t+r);return e===s}a(Bk,"validateHash");function Hk(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(Hk,"generateSalt");function MO(e){return Pk.createHash("md5").update(e).digest("hex")}a(MO,"md5");PO.exports={hash:vk,validate:Bk}});var BO=m((Xse,vO)=>{var xf=ve(),It={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 qk(e){return It.password.presence=!0,It.username.presence=!0,It.role.presence=!0,It.active.presence=!0,xf.validateObject(e,It)}a(qk,"addUserValidation");function Fk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,xf.validateObject(e,It)}a(Fk,"alterUserValidation");function Gk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,xf.validateObject(e,It)}a(Gk,"dropUserValidation");vO.exports={addUserValidation:qk,alterUserValidation:Fk,dropUserValidation:Gk}});var He=m((ene,qO)=>{"use strict";var{platform:jse}=require("os"),xk="nats-server.zip",kf="nats-server",kk=process.platform==="win32"?`${kf}.exe`:kf,Vf="HDB",Vk=/^[^\s.,*>]+$/,HO="__request__",$k=a(e=>`${e}.${HO}`,"REQUEST_SUBJECT"),Yk={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},Kk={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Wk={HUB:"hub.pid",LEAF:"leaf.pid"},Qk={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},zk={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Vf,deliver_subject:"__HDB__.WORKQUEUE"},Jk={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Vf,deliver_subject:"HDB.SCHEMAQUEUE"},Xk={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Vf,deliver_subject:"HDB.USERQUEUE"},Zk={SUCCESS:"success",ERROR:"error"},jk={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},eV={TXN:"txn",MSGID:"msgid"},ki={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},tV={[ki.ERR]:1,[ki.WRN]:2,[ki.INF]:3,[ki.DBG]:4,[ki.TRC]:5},rV={debug:"-D",trace:"-DVV"};qO.exports={NATS_SERVER_ZIP:xk,NATS_SERVER_NAME:kf,NATS_BINARY_NAME:kk,PID_FILES:Wk,NATS_CONFIG_FILES:Kk,SERVER_SUFFIX:Qk,WORK_QUEUE_CONSUMER_NAMES:zk,SCHEMA_QUEUE_CONSUMER_NAMES:Jk,USER_QUEUE_CONSUMER_NAMES:Xk,NATS_TERM_CONSTRAINTS_RX:Vk,REQUEST_SUFFIX:HO,UPDATE_REMOTE_RESPONSE_STATUSES:Zk,CLUSTER_STATUS_STATUSES:jk,REQUEST_SUBJECT:$k,SUBJECT_PREFIXES:eV,MSG_HEADERS:Yk,LOG_LEVELS:ki,LOG_LEVEL_FLAGS:rV,LOG_LEVEL_HIERARCHY:tV}});var GO=m((rne,FO)=>{"use strict";var ll=A(),_l=class{static{a(this,"BaseLicense")}constructor(t=0,r=ll.RAM_ALLOCATION_ENUM.DEFAULT,s=ll.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},$f=class extends _l{static{a(this,"ExtendedLicense")}constructor(t=0,r=ll.RAM_ALLOCATION_ENUM.DEFAULT,s=ll.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};FO.exports={BaseLicense:_l,ExtendedLicense:$f}});var ba=m((nne,KO)=>{"use strict";var $i=require("fs-extra"),xO=ul(),kO=require("crypto"),sV=require("moment"),nV=require("uuid").v4,wt=x(),Kf=require("path"),iV=V(),Rn=A(),oV=GO().ExtendedLicense,Vi="invalid license key format",aV="061183",cV="mofi25",uV="aes-256-cbc",lV=16,_V=32,VO=Q();VO.initSync();var Yf;KO.exports={validateLicense:$O,generateFingerPrint:EV,licenseSearch:YO,getLicense:mV};function Wf(){return Kf.join(VO.getHdbBasePath(),Rn.LICENSE_KEY_DIR_NAME,Rn.LICENSE_FILE_NAME)}a(Wf,"getLicenseDirPath");function dV(){let e=Wf();return Kf.join(e,Rn.LICENSE_FILE_NAME)}a(dV,"getLicenseFilePath");function Qf(){let e=Wf();return Kf.join(e,Rn.REG_KEY_FILE_NAME)}a(Qf,"getFingerPrintFilePath");async function EV(){let e=Qf();try{return await $i.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await fV();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(EV,"generateFingerPrint");async function fV(){let e=nV(),t=xO.hash(e),r=Qf();try{await $i.mkdirp(Wf()),await $i.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw wt.error(`Error writing fingerprint file to ${r}`),wt.error(s),new Error("There was an error generating the fingerprint")}return t}a(fV,"writeFingerprint");function $O(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Rn.RAM_ALLOCATION_ENUM.DEFAULT,version:Rn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return wt.error("empty license key passed to validate."),r;let s=Qf(),n=!1;try{n=$i.statSync(s)}catch(i){wt.error(i)}if(n){let i;try{i=$i.readFileSync(s,"utf8")}catch{wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(cV),c=o[1];c=Buffer.concat([Buffer.from(c)],lV);let u=Buffer.concat([Buffer.from(i)],_V),l=kO.createDecipheriv(uV,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let _=null;try{_=l.update(o[0],"hex","utf8"),_.trim(),_+=l.final("utf8")}catch{let f=hV(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Vi),wt.error(Vi),new Error(Vi)}let d;if(isNaN(_))try{d=JSON.parse(_),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(Vi),wt.error(Vi),new Error(Vi)}else r.exp_date=_;r.exp_date<sV().valueOf()&&(r.valid_date=!1),xO.validate(o[1],`${aV}${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||wt.error("Invalid licence"),r}a($O,"validateLicense");function hV(e,t){try{let r=kO.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{wt.warn("Check old license failed")}}a(hV,"checkOldLicense");function YO(){let e=new oV,t=[];try{t=$i.readFileSync(dV(),"utf-8").split(Rn.NEW_LINE)}catch(r){r.code==="ENOENT"?wt.info("no license file found"):wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(iV.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=$O(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){wt.error("There was an error parsing the license string."),wt.error(n),e.ram_allocation=Rn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Yf=e,e}a(YO,"licenseSearch");async function mV(){return Yf||await YO(),Yf}a(mV,"getLicense")});var Ir=m((une,cN)=>{"use strict";var XO="username is required",ZO="nothing to update, must supply active, role or password to update",jO="password cannot be an empty string",eN="If role is specified, it cannot be empty.",tN="active must be true or false";cN.exports={addUser:bV,alterUser:yV,dropUser:wV,getSuperUser:LV,userInfo:CV,listUsers:El,listUsersExternal:UV,setUsersToGlobal:Ki,findAndValidateUser:aN,getClusterUser:MV,USERNAME_REQUIRED:XO,ALTERUSER_NOTHING_TO_UPDATE:ZO,EMPTY_PASSWORD:jO,EMPTY_ROLE:eN,ACTIVE_BOOLEAN:tN};var rN=yr(),SV=ri(),Jf=ul(),sN=BO(),nN=br(),Xf=Ks(),cr=V(),iN=require("validate.js"),le=x(),{promisify:pV}=require("util"),Zf=$s(),WO=A(),QO=He(),TV=gr(),one=Q(),ane=ba(),RV=zn(),{table:cne}=(Ee(),se(be)),{handleHDBError:cs,hdb_errors:gV}=W(),{HTTP_STATUS_CODES:us,AUTHENTICATION_ERROR_MSGS:zf,HDB_ERROR_MSGS:Yi}=gV,{UserEventMsg:jf}=xr(),zO=require("lodash"),{_assignPackageExport:AV}=require("../index");AV("getUser",aN);var oN={username:!0,active:!0,role:!0,password:!0},JO=new Map,dl=nN.searchByValue,OV=nN.searchByHash,NV=pV(SV.delete);async function bV(e){let t=iN.cleanAttributes(e,oN),r=sN.addUserValidation(t);if(r)throw cs(new Error,r.message,us.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 dl(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 cs(new Error,Yi.ROLE_NAME_NOT_FOUND(t.role),us.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw cs(new Error,Yi.DUP_ROLES_FOUND(t.role),us.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Zf.encrypt(t.password)),t.password=Jf.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await rN.insert(i)}catch(u){throw le.error("There was an error searching for a user."),le.error(u),u}le.debug(o);try{await Ki()}catch(u){throw le.error("Got an error setting users to global"),le.error(u),u}if(o.skipped_hashes.length===1)throw cs(new Error,Yi.USER_ALREADY_EXISTS(t.username),us.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],Xf.signalUserChange(new jf(process.pid)),`${c.username} successfully added`}a(bV,"addUser");async function yV(e){let t=iN.cleanAttributes(e,oN);if(cr.isEmptyOrZeroLength(t.username))throw new Error(XO);if(cr.isEmptyOrZeroLength(t.password)&&cr.isEmptyOrZeroLength(t.role)&&cr.isEmptyOrZeroLength(t.active))throw new Error(ZO);if(!cr.isEmpty(t.password)&&cr.isEmptyOrZeroLength(t.password.trim()))throw new Error(jO);if(!cr.isEmpty(t.active)&&!cr.isBoolean(t.active))throw new Error(tN);let r=IV(t.username);if(!cr.isEmpty(t.password)&&!cr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Zf.encrypt(t.password)),t.password=Jf.hash(t.password)),t.role==="")throw new Error(eN);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 dl(i)||[])}catch(c){throw le.error("Got an error searching for a role."),le.error(c),c}if(!o||o.length===0){let c=Yi.ALTER_USER_ROLE_NOT_FOUND(t.role);throw le.error(c),cs(new Error,c,us.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Yi.ALTER_USER_DUP_ROLES(t.role);throw le.error(c),cs(new Error,c,us.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 rN.update(s)}catch(i){throw le.error("Error during update."),le.error(i),i}try{await Ki()}catch(i){throw le.error("Got an error setting users to global"),le.error(i),i}return Xf.signalUserChange(new jf(process.pid)),n}a(yV,"alterUser");function IV(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(IV,"isClusterUser");async function wV(e){try{let t=sN.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(cr.isEmpty(global.hdb_users.get(e.username)))throw cs(new Error,Yi.USER_NOT_EXIST(e.username),us.NOT_FOUND,void 0,void 0,!0);let s;try{s=await NV(r)}catch(n){throw le.error("Got an error deleting a user."),le.error(n),n}le.debug(s);try{await Ki()}catch(n){throw le.error("Got an error setting users to global."),le.error(n),n}return Xf.signalUserChange(new jf(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(wV,"dropUser");async function CV(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=e.hdb_user;let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await OV(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(CV,"userInfo");async function UV(){let e;try{e=await El()}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(UV,"listUsersExternal");async function El(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await dl(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]=zO.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 dl(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=zO.cloneDeep(o),o.role=r[o.role],DV(o.role),i.set(o.username,o);return i}catch(e){throw le.error("got an error listing users"),le.error(e),cr.errorizeMessage(e)}return null}a(El,"listUsers");function DV(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(RV)){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(DV,"appendSystemTablesToRole");async function Ki(){try{let e=await El();global.hdb_users=e}catch(e){throw le.error(e),e}}a(Ki,"setUsersToGlobal");async function aN(e,t,r=!0){global.hdb_users||await Ki();let s=global.hdb_users.get(e);if(!s)throw cs(new Error,zf.GENERIC_AUTH_FAIL,us.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw cs(new Error,zf.USER_INACTIVE,us.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(JO.get(t)===s.password)return n;if(Jf.validate(s.password,t))JO.set(t,s.password);else throw cs(new Error,zf.GENERIC_AUTH_FAIL,us.UNAUTHORIZED,void 0,void 0,!0)}return n}a(aN,"findAndValidateUser");async function LV(){global.hdb_users||await Ki();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(LV,"getSuperUser");async function MV(){let e=await El(),t=TV.getConfigFromFile(WO.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!cr.isEmpty(r)&&r?.role?.role===WO.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Zf.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+QO.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+QO.SERVER_SUFFIX.ADMIN,r}a(MV,"getClusterUser")});var Ia=m((Ene,dN)=>{"use strict";var si=x(),ur=A(),PV=sO(),_ne=Ys(),dne=Xn(),vV=Ir(),{validateEvent:uN}=xr(),ya=Gr(),BV=require("process"),{resetDatabases:HV}=(Ee(),se(be)),qV={[ur.ITC_EVENT_TYPES.SCHEMA]:FV,[ur.ITC_EVENT_TYPES.USER]:_N};async function FV(e){let t=uN(e);if(t){si.error(t);return}si.trace("ITC schemaHandler received schema event:",e),await PV(e.message),await GV(e.message)}a(FV,"schemaHandler");async function GV(e){try{ya.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ya.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ya.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=HV();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){si.error(t)}}a(GV,"syncSchemaMetadata");var lN=[];async function _N(e){try{try{ya.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ya.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){si.warn(r)}let t=uN(e);if(t){si.error(t);return}si.trace(`ITC userHandler ${ur.HDB_ITC_CLIENT_PREFIX}${BV.pid} received user event:`,e),await vV.setUsersToGlobal();for(let r of lN)r()}catch(t){si.error(t)}}a(_N,"userHandler");_N.addListener=function(e){lN.push(e)};dN.exports=qV});var xr=m((Tne,fN)=>{"use strict";var hne=x(),eh=V(),xV=A(),{ITC_ERRORS:wa}=nr(),{parentPort:mne,threadId:kV,isMainThread:VV,workerData:Sne}=require("worker_threads"),{onMessageFromWorkers:$V,broadcast:pne,broadcastWithAcknowledgement:YV}=dt();fN.exports={sendItcEvent:KV,validateEvent:EN,SchemaEventMsg:WV,UserEventMsg:QV};var fl;$V(async(e,t)=>{fl=fl||Ia(),EN(e),fl[e.type]&&await fl[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function KV(e){return!VV&&e.message&&(e.message.originator=kV),YV(e)}a(KV,"sendItcEvent");function EN(e){if(typeof e!="object")return wa.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||eh.isEmpty(e.type))return wa.MISSING_TYPE;if(!e.hasOwnProperty("message")||eh.isEmpty(e.message))return wa.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||eh.isEmpty(e.message.originator))return wa.MISSING_ORIGIN;if(xV.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return wa.INVALID_EVENT(e.type)}a(EN,"validateEvent");function WV(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(WV,"SchemaEventMsg");function QV(e){this.originator=e}a(QV,"UserEventMsg")});var Ks=m((Ane,pN)=>{"use strict";var hN=A(),gne=V(),hl=x(),mN=eO(),Wi,{sendItcEvent:SN}=xr();function zV(e){try{hl.trace("signalSchemaChange called with message:",e),Wi=Wi||Ia();let t=new mN(hN.ITC_EVENT_TYPES.SCHEMA,e);return Wi.schema(t),SN(t)}catch(t){hl.error(t)}}a(zV,"signalSchemaChange");function JV(e){try{hl.trace("signalUserChange called with message:",e),Wi=Wi||Ia();let t=new mN(hN.ITC_EVENT_TYPES.USER,e);return Wi.user(t),SN(t)}catch(t){hl.error(t)}}a(JV,"signalUserChange");pN.exports={signalSchemaChange:zV,signalUserChange:JV}});var ml=m((Nne,RN)=>{"use strict";var TN=V(),XV=A(),ZV=x(),jV=Zu(),e$=Xu(),t$=Ks(),{SchemaEventMsg:r$}=xr(),s$="already exists in";RN.exports=n$;async function n$(e,t,r){if(TN.isEmptyOrZeroLength(r))return r;let s=[];TN.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 i$(e,t.schema,t.name,i)})),n}a(n$,"lmdbCheckForNewAttributes");async function i$(e,t,r,s){let n=new e$(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await o$(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(s$))ZV.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(i$,"createNewAttribute");async function o$(e){let t;return t=await jV(e),t$.signalSchemaChange(new r$(process.pid,XV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(o$,"createAttribute")});var Qi=m((yne,gN)=>{"use strict";var th=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}};gN.exports=th});var ON=m((wne,AN)=>{"use strict";var a$=Qi(),c$=A().OPERATIONS_ENUM,rh=class extends a${static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(c$.INSERT,r,s,n,i),this.records=t}};AN.exports=rh});var bN=m((Une,NN)=>{"use strict";var u$=Qi(),l$=A().OPERATIONS_ENUM,sh=class extends u${static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(l$.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};NN.exports=sh});var IN=m((Lne,yN)=>{"use strict";var _$=Qi(),d$=A().OPERATIONS_ENUM,nh=class extends _${static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(d$.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};yN.exports=nh});var CN=m((Pne,wN)=>{"use strict";var E$=Qi(),f$=A().OPERATIONS_ENUM,ih=class extends E${static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(f$.DELETE,s,n,t,i),this.original_records=r}};wN.exports=ih});var Ca=m((Hne,MN)=>{"use strict";var Bne=require("path"),UN=Ie(),h$=ON(),m$=bN(),S$=IN(),p$=CN(),zi=ke(),DN=V(),{CONFIG_PARAMS:T$}=A(),LN=Q();LN.initSync();var Sl=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:R$}=Ce();MN.exports=g$;async function g$(e,t){if(LN.get(T$.LOGGING_AUDITLOG)===!1)return;let r=R$(e.schema,e.table),s=await UN.openEnvironment(r,e.table,!0),n=A$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){UN.initializeDBIs(s,zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zi.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),DN.isEmpty(n.user_name)||s.dbis[zi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[zi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(g$,"writeTransaction");function A$(e,t){let r=DN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Sl.INSERT)return new h$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Sl.UPDATE)return new m$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Sl.UPSERT)return new S$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Sl.DELETE)return new p$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(A$,"createTransactionObject")});var oh=m((Gne,PN)=>{"use strict";var O$=pa(),Fne=Ta(),Ua=A(),N$=Oa(),b$=Gi().insertRecords,y$=Ie(),I$=x(),w$=ml(),{getSchemaPath:C$}=Ce(),U$=Ca();PN.exports=D$;async function D$(e){try{let{schema_table:t,attributes:r}=O$(e);N$(e,r,t.hash_attribute),e.schema!==Ua.SYSTEM_SCHEMA_NAME&&(r.includes(Ua.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ua.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ua.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ua.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await w$(e.hdb_auth_header,t,r),n=C$(e.schema,e.table),i=await y$.openEnvironment(n,e.table),o=await b$(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await U$(e,o)}catch(c){I$.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(D$,"lmdbCreateRecords")});var HN=m((kne,BN)=>{"use strict";var vN=A(),L$=oh(),M$=Ta(),P$=require("fs-extra"),{getSchemaPath:v$}=Ce();BN.exports=B$;async function B$(e){let t=[{name:e.schema,createddate:Date.now()}],r=new M$(vN.SYSTEM_SCHEMA_NAME,vN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await L$(r),await P$.mkdirp(v$(e.schema))}a(B$,"lmdbCreateSchema")});var FN=m(($ne,qN)=>{"use strict";var ah=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}};qN.exports=ah});var VN=m((zne,kN)=>{"use strict";var GN=Ie(),ch=qt(),uh=nr().LMDB_ERRORS_ENUM,H$=ke(),xN=x(),Kne=V(),q$=require("lmdb"),F$=FN(),G$=A(),{OVERFLOW_MARKER:Wne,MAX_SEARCH_KEY_LENGTH:Qne}=H$,x$=G$.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function k$(e,t,r,s){if(ch.validateEnv(e),t===void 0)throw new Error(uh.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(uh.IDS_REQUIRED):new Error(uh.IDS_MUST_BE_ITERABLE);try{let n=GN.listDBIs(e);GN.initializeDBIs(e,t,n);let i=new F$,o,c=[],u=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||s&&h[x$]>s){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,q$.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let p=0;p<n.length;p++){let R=n[p];if(!h.hasOwnProperty(R)||R===t)continue;let O=e.dbis[R],q=h[R];if(q!=null)try{let $=ch.getIndexedValues(q);if($)for(let w=0,I=$.length;w<I;w++)O.remove($[w],o)}catch{xN.warn(`cannot delete from attribute: ${R}, ${q}:${o}`)}}});c.push(T),u.push(o),i.original_records.push(h)}catch(h){xN.warn(h),i.skipped.push(o)}let l=[],_=await Promise.all(c);for(let E=0,f=_.length;E<f;E++)_[E]===!0?i.deleted.push(u[E]):(i.skipped.push(u[E]),l.push(E));let d=0;for(let E=0;E<l.length;E++){let f=l[E];i.original_records.splice(f-d,1),d++}return i.txn_time=ch.getNextMonotonicTime(),i}catch(n){throw n}}a(k$,"deleteRecords");kN.exports={deleteRecords:k$}});var Da=m((Xne,YN)=>{"use strict";var Ji=V(),V$=VN(),$$=Ie(),{getSchemaPath:Y$}=Ce(),K$=Ca(),W$=x();YN.exports=Q$;async function Q$(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ji.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ji.isEmptyOrZeroLength(e.hash_values)&&!Ji.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Ji.isEmpty(u)||e.hash_values.push(u)}}if(Ji.isEmptyOrZeroLength(e.hash_values))return $N([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ji.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=Y$(e.schema,e.table),i=await $$.openEnvironment(n,e.table),o=await V$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await K$(e,o)}catch(c){W$.error(`unable to write transaction due to ${c.message}`)}return $N(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Q$,"lmdbDeleteRecords");function $N(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($N,"createDeleteResponse")});var _h=m((eie,KN)=>{"use strict";var z$=A(),jne=qt();function lh(e,t){let r=Object.create(null);if(t.length===1&&z$.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(lh,"parseRow");function J$(e,t,r,s){let n=lh(r,e);s.push(n)}a(J$,"searchAll");function X$(e,t,r,s){let n=lh(r,e);s[t]=n}a(X$,"searchAllToMap");function Z$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Z$,"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 j$(e,t,r,s,n,i){t.toString().endsWith(e)&&ni(t,r,s,n,i)}a(j$,"endsWith");function eY(e,t,r,s,n,i){t.toString().includes(e)&&ni(t,r,s,n,i)}a(eY,"contains");function tY(e,t,r,s,n,i){t>e&&ni(t,r,s,n,i)}a(tY,"greaterThanCompare");function rY(e,t,r,s,n,i){t>=e&&ni(t,r,s,n,i)}a(rY,"greaterThanEqualCompare");function sY(e,t,r,s,n,i){t<e&&ni(t,r,s,n,i)}a(sY,"lessThanCompare");function nY(e,t,r,s,n,i){t<=e&&ni(t,r,s,n,i)}a(nY,"lessThanEqualCompare");KN.exports={parseRow:lh,searchAll:J$,searchAllToMap:X$,iterateDBI:Z$,endsWith:j$,contains:eY,greaterThanCompare:tY,greaterThanEqualCompare:rY,lessThanCompare:sY,lessThanEqualCompare:nY,pushResults:ni}});var Xi=m((iie,jN)=>{"use strict";var gn=Ie(),rie=x(),lr=qt(),pl=ke(),Ve=nr().LMDB_ERRORS_ENUM,sie=V(),iY=A(),Tl=_h(),{parseRow:oY}=Tl,nie=require("lmdb"),{OVERFLOW_MARKER:WN,MAX_SEARCH_KEY_LENGTH:aY}=pl;function QN(e,t,r,s=!1,n=void 0,i=void 0){return ii(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(QN,"iterateFullIndex");function La(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return ii(e,t,r,(_,d,E,f)=>{let O={transaction:_,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!l,exclusiveStart:i===!0?l:u};return f===r?(O.values=!1,d.getRange(O).map(q=>({value:q}))):d.getRange(O)})}a(La,"iterateRangeBetween");function ii(e,t,r,s){let n=e.database||e,i=gn.openDBI(n,r);i[pl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&gn.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(ii,"setupTransaction");function zN(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(WN)){if(!n)if(r)n=gn.openDBI(e,r);else{let u=gn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=gn.openDBI(e,u[l]),!n[pl.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(zN,"getOverflowCheck");function cY(e,t,r,s=!1,n=void 0,i=void 0){if(lr.validateEnv(e),t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);return ii(e,t,t,(o,c,u)=>(Rl(r),r=Ma(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>oY(l.value,r))))}a(cY,"searchAll");function uY(e,t,r,s=!1,n=void 0,i=void 0){if(lr.validateEnv(e),t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);Rl(r),r=Ma(e.database||e,r);let o=new Map;for(let{key:c,value:u}of QN(e,t,t,s,n,i))o.set(c,Tl.parseRow(u,r));return o}a(uY,"searchAllToMap");function lY(e,t,r=!1,s=void 0,n=void 0){if(lr.validateEnv(e),t===void 0)throw new Error(Ve.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=QN(e,void 0,t,r,s,n),c=o.transaction,u=zN(c.database,c,void 0,t);for(let{key:l,value:_}of o){let d=u(l,_);i[d]===void 0&&(i[d]=[]),i[d].push(_)}return i}a(lY,"iterateDBI");function _Y(e,t){if(lr.validateEnv(e),t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);return gn.statDBI(e,t).entryCount}a(_Y,"countAll");function dY(e,t,r,s,n=!1,i=void 0,o=void 0){return An(e,r,s),ii(e,t,r,(c,u,l,_)=>(s=lr.convertKeyValueToWrite(s),_===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(dY,"equals");function EY(e,t,r){return An(e,t,r),gn.openDBI(e,t).getValuesCount(r)}a(EY,"count");function fY(e,t,r,s,n=!1,i=void 0,o=void 0){return An(e,r,s),ii(e,null,r,(c,u)=>{s=lr.convertKeyValueToWrite(s);let l=!0;typeof s=="number"&&(l=!1);let _;if(n===!0){let d;for(let E of u.getKeys({transaction:c,start:s}))if(!E.startsWith(s)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),_=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(s))return E;if(l===!0)return _.DONE}}),_.filter(E=>E)}else return _=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(l===!0)return _.DONE}),l?_:_.filter(d=>d)})}a(fY,"startsWith");function hY(e,t,r,s,n=!1,i=void 0,o=void 0){return JN(e,t,r,s,n,i,o,!0)}a(hY,"endsWith");function JN(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return An(e,r,s),ii(e,null,r,(u,l,_,d)=>{let E=zN(_,u,d,r);return o=Number.isInteger(o)?o:0,l.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(f=>{let h=f.toString();return h.endsWith(WN)?l.getValues(f,{transaction:u}).map(T=>{let p=E(f,T);if(c?p.endsWith(s):p.includes(s))return{key:p,value:T}}).filter(T=>T):(c?h.endsWith(s):h.includes(s))?l[pl.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(JN,"contains");function mY(e,t,r,s,n=!1,i=void 0,o=void 0){An(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),La(e,t,r,s,u,n,i,o,!0,!1)}a(mY,"greaterThan");function SY(e,t,r,s,n=!1,i=void 0,o=void 0){An(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),La(e,t,r,s,u,n,i,o,!1,!1)}a(SY,"greaterThanEqual");function pY(e,t,r,s,n=!1,i=void 0,o=void 0){An(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),La(e,t,r,u,s,n,i,o,!1,!0)}a(pY,"lessThan");function TY(e,t,r,s,n=!1,i=void 0,o=void 0){An(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),La(e,t,r,u,s,n,i,o,!1,!1)}a(TY,"lessThanEqual");function RY(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(lr.validateEnv(e),r===void 0)throw new Error(Ve.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Ve.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Ve.END_VALUE_REQUIRED);if(s=lr.convertKeyValueToWrite(s),n=lr.convertKeyValueToWrite(n),s>n)throw new Error(Ve.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return La(e,t,r,s,n,i,o,c)}a(RY,"between");function gY(e,t,r,s){lr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);if(Rl(r),r=Ma(n,r),s===void 0)throw new Error(Ve.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Tl.parseRow(c,r)),o}a(gY,"searchByHash");function AY(e,t,r){lr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Ve.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(AY,"checkHashExists");function OY(e,t,r,s,n=[]){return ZN(e,t,r,s,n),XN(e,t,r,s,n).map(i=>i[1])}a(OY,"batchSearchByHash");function NY(e,t,r,s,n=[]){ZN(e,t,r,s,n);let i=new Map;for(let[o,c]of XN(e,t,r,s,n))i.set(o,c);return i}a(NY,"batchSearchByHashToMap");function XN(e,t,r,s,n=[]){return ii(e,t,t,(i,o,c)=>{r=Ma(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,Tl.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(XN,"batchHashSearch");function ZN(e,t,r,s,n){if(lr.validateEnv(e),t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);if(Rl(r),s==null)throw new Error(Ve.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Ve.IDS_MUST_BE_ITERABLE)}a(ZN,"initializeBatchSearchByHash");function Rl(e){if(!Array.isArray(e))throw e===void 0?new Error(Ve.FETCH_ATTRIBUTES_REQUIRED):new Error(Ve.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Rl,"validateFetchAttributes");function An(e,t,r){if(lr.validateEnv(e),t===void 0)throw new Error(Ve.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Ve.SEARCH_VALUE_REQUIRED);if(r?.length>aY)throw new Error(Ve.SEARCH_VALUE_TOO_LARGE)}a(An,"validateComparisonFunctions");function Ma(e,t){return t.length===1&&iY.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=gn.listDBIs(e)),t}a(Ma,"setGetWholeRowAttributes");jN.exports={searchAll:cY,searchAllToMap:uY,count:EY,countAll:_Y,equals:dY,startsWith:fY,endsWith:hY,contains:JN,searchByHash:gY,setGetWholeRowAttributes:Ma,batchSearchByHash:OY,batchSearchByHashToMap:NY,checkHashExists:AY,iterateDBI:lY,greaterThan:mY,greaterThanEqual:SY,lessThan:pY,lessThanEqual:TY,between:RY}});var Zi=m((aie,nb)=>{var eb=require("lodash"),tb=ve(),Ue=require("joi"),bY=V(),{hdb_schema_table:gl,checkValidTable:rb,hdb_table:sb,hdb_database:Al}=os(),{handleHDBError:yY,hdb_errors:IY}=W(),{getDatabases:wY}=(Ee(),se(be)),{HTTP_STATUS_CODES:CY}=IY,UY=Ue.object({database:Al,schema:Al,table:sb,search_attribute:gl,search_value:Ue.any().required(),get_attributes:Ue.array().min(1).items(gl).optional(),desc:Ue.bool(),limit:Ue.number().integer().min(1),offset:Ue.number().integer().min(0)}),DY=Ue.object({database:Al,schema:Al,table:sb,operator:Ue.string().valid("and","or").default("and").lowercase(),offset:Ue.number().integer().min(0),limit:Ue.number().integer().min(1),get_attributes:Ue.array().min(1).items(gl).optional(),conditions:Ue.array().min(1).items(Ue.object({search_attribute:gl,search_type:Ue.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:Ue.when("search_type",{switch:[{is:"equals",then:Ue.any()},{is:"between",then:Ue.array().items(Ue.alternatives([Ue.string(),Ue.number()])).length(2)}],otherwise:Ue.alternatives(Ue.string(),Ue.number())}).required()})).required()});nb.exports=function(e,t){let r=null;switch(t){case"value":r=tb.validateBySchema(e,UY);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(rb("database",e.schema)),i(rb("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=tb.validateBySchema(e,DY);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=bY.checkGlobalSchemaTable(e.schema,e.table);if(n)return yY(new Error,n,CY.NOT_FOUND);let o=wY()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let l=0,_=e.conditions.length;l<_;l++){let d=e.conditions[l];c.push(d.search_attribute)}let u=eb.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!eb.some(o,_=>_===l||_.attribute===l||_.attribute===l.attribute));if(u&&u.length>0){let l=u.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var dh=m((uie,ib)=>{"use strict";var LY=Ie(),MY=Zi(),{getSchemaPath:PY}=Ce();ib.exports=vY;function vY(e){let t=MY(e,"hashes");if(t)throw t;let r=PY(e.schema,e.table);return LY.openEnvironment(r,e.table)}a(vY,"initialize")});var Eh=m((_ie,ob)=>{"use strict";var BY=Xi(),HY=dh();ob.exports=qY;async function qY(e){let t=await HY(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return BY.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(qY,"lmdbGetDataByHash")});var ji=m((Eie,ab)=>{"use strict";var fh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};ab.exports=fh});var ub=m((mie,cb)=>{"use strict";var hie=ji(),FY=Xi(),GY=dh();cb.exports=xY;async function xY(e){let t=await GY(e),r=global.hdb_schema[e.schema][e.table];return FY.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(xY,"lmdbSearchByHash")});var ls=m((pie,lb)=>{"use strict";var hh=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,l=void 0,_=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=l,this.offset=_}};lb.exports=hh});var Ol=m((Rie,mb)=>{"use strict";var Ct=Xi(),kY=Ie(),VY=V(),oe=ke(),oi=A(),$Y=zn(),_b=nr().LMDB_ERRORS_ENUM,{getSchemaPath:YY}=Ce(),Ws=oi.SEARCH_WILDCARDS;async function KY(e,t,r){let s;e.schema===oi.SYSTEM_SCHEMA_NAME?s=$Y[e.table]:s=global.hdb_schema[e.schema][e.table];let n=hb(e,s.hash_attribute,r,t);return Eb(e,n,s.hash_attribute,r)}a(KY,"prepSearch");async function Eb(e,t,r,s){let n=YY(e.schema,e.table),i=await kY.openEnvironment(n,e.table),o=fb(i,e,t,r),c=o.transaction||i;if([oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,oe.SEARCH_TYPES.SEARCH_ALL,oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(WY(e,r)===!1){let _=e.search_attribute;if(_===r)return s?db(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?db(o,d):o.map(d)}let l=e.search_attribute===r?o.map(_=>_.key):o.map(_=>_.value);return s===!0?Ct.batchSearchByHashToMap(c,r,e.get_attributes,l):Ct.batchSearchByHash(c,r,e.get_attributes,l)}a(Eb,"executeSearch");function fb(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 oe.SEARCH_TYPES.EQUALS:n=Ct.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.CONTAINS:n=Ct.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.ENDS_WITH:case oe.SEARCH_TYPES._ENDS_WITH:n=Ct.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.STARTS_WITH:case oe.SEARCH_TYPES._STARTS_WITH:n=Ct.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ct.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ct.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.SEARCH_ALL:return Ct.searchAll(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ct.searchAllToMap(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.BETWEEN:n=Ct.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case oe.SEARCH_TYPES.GREATER_THAN:case oe.SEARCH_TYPES._GREATER_THAN:n=Ct.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.GREATER_THAN_EQUAL:case oe.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ct.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.LESS_THAN:case oe.SEARCH_TYPES._LESS_THAN:n=Ct.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.LESS_THAN_EQUAL:case oe.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ct.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(fb,"searchByType");function db(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(db,"createMapFromIterable");function WY(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(WY,"checkToFetchMore");function hb(e,t,r,s){if(VY.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),Ws.indexOf(n)>-1)return r===!0?oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:oe.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Ws[0])<0&&n.indexOf(Ws[1])<0)return c===!0?r===!0?oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:oe.SEARCH_TYPES.EQUALS;if(Ws.indexOf(i)>=0&&Ws.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),oe.SEARCH_TYPES.CONTAINS;if(Ws.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),oe.SEARCH_TYPES.ENDS_WITH;if(Ws.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),oe.SEARCH_TYPES.STARTS_WITH;if(n.includes(Ws[0])||n.includes(Ws[1]))return oe.SEARCH_TYPES.EQUALS;throw new Error(_b.UNKNOWN_SEARCH_TYPE)}else switch(s){case oi.VALUE_SEARCH_COMPARATORS.BETWEEN:return oe.SEARCH_TYPES.BETWEEN;case oi.VALUE_SEARCH_COMPARATORS.GREATER:return oe.SEARCH_TYPES.GREATER_THAN;case oi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return oe.SEARCH_TYPES.GREATER_THAN_EQUAL;case oi.VALUE_SEARCH_COMPARATORS.LESS:return oe.SEARCH_TYPES.LESS_THAN;case oi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return oe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(_b.UNKNOWN_SEARCH_TYPE)}}a(hb,"createSearchTypeFromSearchObject");mb.exports={executeSearch:Eb,createSearchTypeFromSearchObject:hb,prepSearch:KY,searchByType:fb}});var pb=m((Oie,Sb)=>{"use strict";var Aie=ls(),QY=Zi(),zY=V(),JY=A(),XY=Ol();Sb.exports=ZY;function ZY(e,t){if(!zY.isEmpty(t)&&JY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=QY(e,"value");if(s)throw s;let n=!0;return XY.prepSearch(e,t,n)}a(ZY,"lmdbGetDataByValue")});var Pa=m((yie,Tb)=>{"use strict";var bie=ls(),jY=Zi(),e1=V(),t1=A(),r1=Ol();Tb.exports=s1;async function s1(e,t){if(!e1.isEmpty(t)&&t1.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=jY(e,"value");if(s)throw s;return r1.prepSearch(e,t,!1)}a(s1,"lmdbSearchByValue")});var gb=m((Cie,Rb)=>{"use strict";var wie=ke(),mh=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}},Sh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},ph=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Rb.exports={SearchByConditionsObject:mh,SearchCondition:Sh,SortAttribute:ph}});var yb=m((Mie,bb)=>{"use strict";var Die=gb().SearchByConditionsObject,n1=ls(),i1=Zi(),Th=Xi(),Nl=ke(),{Resource:Lie}=(rs(),se(qE)),Nb=Ol(),o1=_h(),a1=require("lodash"),{getSchemaPath:c1}=Ce(),Ab=Ie(),{handleHDBError:u1,hdb_errors:l1}=W(),{HTTP_STATUS_CODES:_1}=l1,d1=1e8;bb.exports=E1;async function E1(e){let t=i1(e,"conditions");if(t)throw u1(t,t.message,_1.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=c1(e.schema,e.table),s=await Ab.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)Ab.openDBI(s,l.search_attribute);let i=a1.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Nl.SEARCH_TYPES.EQUALS?l.estimated_count=Th.count(s,l.search_attribute,l.search_value):_===Nl.SEARCH_TYPES.CONTAINS||_===Nl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=d1}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Ob(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let l=s.dbis[n.hash_attribute],_=i.slice(1).map(Nb.filterByType),d=_.length,E=Th.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(f=>l.get(f,{transaction:o,lazy:!0})),d>0&&(u=u.filter(f=>{for(let h=0;h<d;h++)if(!_[h](f))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(f=>o1.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await Ob(o,e,E,n.hash_attribute);c=c.concat(f)}let l=new Set,_=e.offset||0;c=c.filter(d=>l.has(d)?!1:(l.add(d),!0)).slice(_,e.limit&&e.limit+_),u=Th.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(E1,"lmdbSearchByConditions");async function Ob(e,t,r,s){let n=new n1(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Nl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Nb.searchByType(e,n,i,s).map(o=>o.value)}a(Ob,"executeConditionSearch")});var va=m((vie,Ib)=>{"use strict";var f1=A().OPERATIONS_ENUM,Rh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=f1.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Ib.exports=Rh});var gh=m((Hie,vb)=>{"use strict";var Db=ls(),Lb=va(),Mb=Pa(),Pb=Da(),Gt=A(),wb=V(),Cb=Ie(),{getTransactionAuditStorePath:h1,getSchemaPath:m1}=Ce(),Ub=x();vb.exports=S1;async function S1(e){try{if(wb.isEmpty(global.hdb_schema[e.schema])||wb.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await p1(e),await T1(e);let t=m1(e.schema,e.table);try{await Cb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Ub.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=h1(e.schema,e.table);await Cb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Ub.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(S1,"lmdbDropTable");async function p1(e){let t=new Db(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Mb(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 Lb(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Pb(n)}a(p1,"deleteAttributesFromSystem");async function T1(e){let t=new Db(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Mb(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 Lb(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Pb(n)}catch(i){throw i}}a(T1,"dropTableFromSystem")});var Hb=m((Fie,Bb)=>{"use strict";var R1=require("fs-extra"),g1=ls(),A1=ji(),O1=va(),N1=gh(),b1=Da(),y1=Eh(),I1=Pa(),Qs=A(),{getSchemaPath:w1}=Ce(),{handleHDBError:C1,hdb_errors:U1}=W(),{HDB_ERROR_MSGS:D1,HTTP_STATUS_CODES:L1}=U1;Bb.exports=M1;async function M1(e){let t;try{t=await P1(e.schema);let r=new g1(Qs.SYSTEM_SCHEMA_NAME,Qs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Qs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Qs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await I1(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await N1(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new O1(Qs.SYSTEM_SCHEMA_NAME,Qs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await b1(n);let i=w1(t);await R1.remove(i)}catch(r){throw r}}a(M1,"lmdbDropSchema");async function P1(e){let t=new A1(Qs.SYSTEM_SCHEMA_NAME,Qs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Qs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await y1(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw C1(new Error,D1.SCHEMA_NOT_FOUND(e),L1.NOT_FOUND,void 0,void 0,!0);return s}a(P1,"validateDropSchema")});var Oh=m((xie,qb)=>{"use strict";var Ah=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};qb.exports=Ah});var Gb=m(($ie,Fb)=>{"use strict";var v1=require("fs-extra"),bl=Ie(),{getTransactionAuditStorePath:B1}=Ce(),Nh=ke(),Vie=Oh();Fb.exports=H1;async function H1(e){let t;try{let r=B1(e.schema,e.table);await v1.mkdirp(r),t=await bl.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{bl.createDBI(t,Nh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),bl.createDBI(t,Nh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),bl.createDBI(t,Nh.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(H1,"createTransactionsAuditEnvironment")});var $b=m((Kie,Vb)=>{"use strict";var bh=A(),xb=Ie(),q1=Gi(),{getSystemSchemaPath:F1,getSchemaPath:G1}=Ce(),x1=zn(),k1=Zu(),yh=Xu(),V1=x(),$1=Gb(),wh=x1.hdb_table,kb=[];for(let e=0;e<wh.attributes.length;e++)kb.push(wh.attributes[e].attribute);Vb.exports=Y1;async function Y1(e,t){let r=G1(t.schema,t.table),s=new yh(t.schema,t.table,bh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new yh(t.schema,t.table,bh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new yh(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await xb.createEnvironment(r,t.table),e!==void 0){let o=await xb.openEnvironment(F1(),bh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await q1.insertRecords(o,wh.hash_attribute,kb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Ih(s),await Ih(n),await Ih(i)}await $1(t)}catch(o){throw o}}a(Y1,"lmdbCreateTable");async function Ih(e){try{await k1(e)}catch(t){V1.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Ih,"createAttribute")});var Kb=m((Qie,Yb)=>{"use strict";var K1=pa(),W1=Oa(),Q1=ml(),Ba=A(),z1=Gi().updateRecords,J1=Ie(),{getSchemaPath:X1}=Ce(),Z1=Ca(),j1=x();Yb.exports=eK;async function eK(e){try{let{schema_table:t,attributes:r}=K1(e);W1(e,r,t.hash_attribute),e.schema!==Ba.SYSTEM_SCHEMA_NAME&&(r.includes(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Q1(e.hdb_auth_header,t,r),n=X1(e.schema,e.table),i=await J1.openEnvironment(n,e.table),o=await z1(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Z1(e,o)}catch(c){j1.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(eK,"lmdbUpdateRecords")});var Qb=m((Jie,Wb)=>{"use strict";var tK=A().OPERATIONS_ENUM,Ch=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=tK.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Wb.exports=Ch});var Jb=m((jie,zb)=>{"use strict";var Zie=Qb(),rK=pa(),sK=Oa(),nK=ml(),Ha=A(),iK=Gi().upsertRecords,oK=Ie(),{getSchemaPath:aK}=Ce(),cK=Ca(),uK=x(),{handleHDBError:lK,hdb_errors:_K}=W();zb.exports=dK;async function dK(e){let t;try{t=rK(e)}catch(u){throw lK(u,u.message,_K.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;sK(e,s,r.hash_attribute),e.schema!==Ha.SYSTEM_SCHEMA_NAME&&(s.includes(Ha.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ha.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ha.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ha.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await nK(e.hdb_auth_header,r,s),i=aK(e.schema,e.table),o=await oK.openEnvironment(i,e.table),c=await iK(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await cK(e,c)}catch(u){uK.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(dK,"lmdbUpsertRecords")});var Zb=m((toe,Xb)=>{"use strict";var Uh=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Xb.exports=Uh});var ey=m((soe,jb)=>{"use strict";var Dh=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}};jb.exports=Dh});var sy=m((ooe,ry)=>{"use strict";var Lh=Ie(),{getTransactionAuditStorePath:EK}=Ce(),ioe=Zb(),qa=ke(),fK=V(),ty=ey(),hK=require("util").promisify,mK=hK(setTimeout),SK=1e4,pK=100;ry.exports=TK;async function TK(e){let t=EK(e.schema,e.table),r=await Lh.openEnvironment(t,e.table,!0),s=Lh.listDBIs(r);Lh.initializeDBIs(r,qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new ty;do n=await RK(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 mK(pK);while(n.transactions_deleted>0);return i}a(TK,"deleteAuditLogsBefore");async function RK(e,t){let r=new ty;try{let s=e.dbis[qa.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[qa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];fK.isEmpty(c)||(n=e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>SK)break}return await n,r}catch(s){throw s}}a(RK,"deleteTransactions")});var iy=m((coe,ny)=>{"use strict";var Mh=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};ny.exports=Mh});var ay=m((_oe,oy)=>{"use strict";var gK=ls(),AK=va(),loe=iy(),_s=A(),OK=V(),Ph=Ie(),NK=zn(),bK=Pa(),yK=Da(),{getSchemaPath:IK}=Ce();oy.exports=wK;async function wK(e,t=!0){let r;e.schema===_s.SYSTEM_SCHEMA_NAME?r=NK[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await UK(e),n=IK(e.schema,e.table),i=await Ph.openEnvironment(n,e.table);return t===!0&&await CK(e,i,r.hash_attribute),Ph.dropDBI(i,e.attribute),s}a(wK,"lmdbDropAttribute");async function CK(e,t,r){let s=Ph.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let l={};for(let _ in c)_!==i&&(l[_]=c[_]);n=t.dbis[r].put(o,l,u)}await n}a(CK,"removeAttributeFromAllObjects");async function UK(e){let t=new gK(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,_s.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[_s.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,_s.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await bK(t)).filter(o=>o[_s.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(OK.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[_s.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new AK(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return yK(i)}a(UK,"dropAttributeFromSystem")});var Ey=m((foe,dy)=>{"use strict";var vh=Ie(),eo=ke(),Eoe=qt(),Bh=A(),cy=V(),{getTransactionAuditStorePath:DK}=Ce(),LK=Xi(),yl=Qi(),MK=x();dy.exports=PK;async function PK(e){let t=DK(e.schema,e.table),r=await vh.openEnvironment(t,e.table,!0),s=vh.listDBIs(r);vh.initializeDBIs(r,eo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Bh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return uy(r,e.search_values);case Bh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,BK(r,e.search_values,n);case Bh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return vK(r,e.search_values);default:return uy(r)}}a(PK,"readAuditLog");function uy(e,t=[0,Date.now()]){cy.isEmpty(t[0])&&(t[0]=0),cy.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[eo.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 yl,n))}a(uy,"searchTransactionsByTimestamp");function vK(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[eo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,_y(e,i))}return Object.fromEntries(r)}a(vK,"searchTransactionsByUsername");function BK(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=LK.equals(e,eo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,eo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,l);for(let{value:d}of _){let E=Number(d);s.has(E)?s.get(E).push(l.toString()):s.set(E,[l.toString()])}}let n=Array.from(s.keys()),i=_y(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);ly(u,"records",r,_,o),ly(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(BK,"searchTransactionsByHashValues");function ly(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 l=n.get(u),_=l[l.length-1];if(_.timestamp===i)_[t]=[c];else{let d=new yl(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new yl(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(ly,"loopRecords");function _y(e,t){let r=[];try{let s=e.dbis[eo.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 yl,i);r.push(o)}}catch(i){MK.warn(i)}return r}catch(s){throw s}}a(_y,"batchSearchTransactions")});var hy=m((poe,fy)=>{"use strict";var{getSchemaPath:moe}=Ce(),Soe=Ie(),{database:HK}=(Ee(),se(be));fy.exports={writeTransaction:qK};async function qK(e,t,r){return HK({database:e,table:t}).transaction(r)}a(qK,"writeTransaction")});var Ty=m((Roe,py)=>{"use strict";var{getSchemaPath:my}=Ce(),Sy=Ie();py.exports={flush:FK,resetReadTxn:GK};async function FK(e,t){return(await Sy.openEnvironment(my(e,t),t.toString())).flushed}a(FK,"flush");async function GK(e,t){try{(await Sy.openEnvironment(my(e,t),t.toString())).resetReadTxn()}catch{}}a(GK,"resetReadTxn")});var Oy=m((Aoe,Ay)=>{"use strict";var{Readable:xK}=require("stream"),{getDatabases:kK}=(Ee(),se(be)),{readSync:VK,openSync:$K,createReadStream:Ry}=require("fs"),{open:YK}=require("lmdb"),gy=xu(),KK=Vu(),{INTERNAL_DBIS_NAME:WK}=ke();Ay.exports=zK;var Hh=32768,QK=100;async function zK(e){let t=e.database||e.schema||"data",r=kK()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let l=r[n[0]];if(!l)throw new Error(`Can not find table ${n[0]}`);let _=l.dbisDB,d=YK({noSync:!0,maxDbs:KK.MAX_DBS}),E,f=d.openDB(WK,new gy(!1)),h=_.useReadTransaction(),T=0;for(let{key:R,value:O}of _.getRange({transaction:h,start:!1}))if(n.some(q=>R.startsWith?.(q+"/"))){f.put(R,O);let[,q]=R.split("/"),$=!q,w=new gy(!$,$);w.encoding="binary";let I=d.openDB(R,w),D=_.openDB(R,w);for(let{key:z,version:M,value:ee}of D.getRange({transaction:h,versions:$}))E=I.put(z,ee,M),T++%QK===0&&await new Promise(Ne=>setTimeout(Ne,20))}await E;let p=Ry(d.path);return p.headers=u(),p.on("close",()=>{h.done(),d.close()}),p}let o=r[Object.keys(r)[0]].primaryStore,c=$K(o.path);return o.transaction(()=>{let l=Buffer.alloc(Hh);VK(c,l,0,Hh);let _=o.useReadTransaction(),d=Ry(null,{fd:c,start:Hh}),E=new xK.from(async function*(){yield l;for await(let f of d)yield f;_.done()}());return E.headers=u(),E});function u(){let l=new Map;return l.set("content-type","application/octet-stream"),l.set("content-disposition",`attachment; filename="${t}"`),l.set("date",s),l}}a(zK,"getBackup")});var yy=m((Noe,by)=>{"use strict";var JK=x(),{handleHDBError:XK}=W(),ZK=cA(),jK=Zu(),eW=oh(),tW=HN(),rW=Da(),sW=Eh(),nW=ub(),iW=pb(),oW=Pa(),aW=yb(),cW=Hb(),uW=$b(),lW=Kb(),_W=Jb(),dW=sy(),EW=gh(),fW=ay(),hW=Ey(),mW=hy(),Ny=Ty(),SW=Oy(),qh=class extends ZK{static{a(this,"LMDBBridge")}async searchByConditions(t){return aW(t)}async getDataByHash(t){return await sW(t)}async searchByHash(t){return await nW(t)}async getDataByValue(t,r){return await iW(t,r)}async searchByValue(t){return await oW(t)}async createSchema(t){return await tW(t)}async dropSchema(t){return await cW(t)}async createTable(t,r){return await uW(t,r)}async dropTable(t){return await EW(t)}async createAttribute(t){return await jK(t)}async createRecords(t){return await eW(t)}async updateRecords(t){return await lW(t)}async upsertRecords(t){try{return await _W(t)}catch(r){throw XK(r,null,null,JK.ERR,r)}}async deleteRecords(t){return await rW(t)}async dropAttribute(t){return await fW(t)}async deleteAuditLogsBefore(t){return await dW(t)}async readAuditLog(t){return await hW(t)}writeTransaction(t,r,s){return mW.writeTransaction(t,r,s)}flush(t,r){return Ny.flush(t,r)}resetReadTxn(t,r){return Ny.resetReadTxn(t,r)}getBackup(t){return SW(t)}};by.exports=qh});var vy={};je(vy,{ResourceBridge:()=>xh});function kh({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 wy(e,t){let r=ds(e),s=kh(e,r);if(!r)throw new kr.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};return Ke(i,async function*(o){for(let c of e.hash_values){let u=await r.get({id:c,lazy:n,select:s},i);u=u&&Pu(u),t?yield{key:c,value:u}:yield u}})}function ds(e){let t=e.database||e.schema||TW,r=Vr()[t];if(!r)throw(0,kr.handleHDBError)(new Error,pW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Cy(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*Uy(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,timestamp: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 Dy,Il,kr,Ly,My,$r,Fh,Gh,Py,pW,TW,RW,gW,Iy,xh,By=pe(()=>{"use strict";Dy=U(yy()),Il=U(Zi()),kr=U(W());Ee();Ly=U(pa()),My=U(Oa()),$r=U(A()),Fh=U(Ks()),Gh=U(xr()),Py=U(V());Wn();vu();({HDB_ERROR_MSGS:pW}=kr.hdb_errors),TW="data",RW=1e4,gW=10,xh=class extends Dy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Iy=this}async searchByConditions(t){let r=(0,Il.default)(t,"conditions");if(r)throw(0,kr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=ds(t);if(!s)throw new kr.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:kh(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 kr.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}]}st({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await ds(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=ds(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(l=>{if(!l){let{value:_,version:d}=r.primaryStore.getEntry(o);return i(o,_,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(l=>setImmediate(l));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){ds(t).dropTable()}createSchema(t){return Fa({database:t.schema,table:null}),Fh.signalSchemaChange(new Gh.SchemaEventMsg(process.pid,$r.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Vh(t.schema),Fh.signalSchemaChange(new Gh.SchemaEventMsg(process.pid,$r.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,Iy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,Ly.default)(t);(0,My.default)(t,s,r.primaryKey);let n,i=Vr()[t.schema][t.table],o={user:t.hdb_user};return Ke(o,async c=>{if(!i.schemaDefined){n=[];for(let _ of s)i.attributes.find(E=>E.name==_)||n.push(_);n.length>0&&await i.addAttributes(n.map(_=>({name:_,indexed:!0})))}let u=[],l=[];for(let _ of t.records){let d=await i.get(_[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){l.push(_[i.primaryKey]);continue}d&&(d=Pu(d));for(let E in _)if(Object.prototype.hasOwnProperty.call(_,E)){let f=_[E];if(typeof f=="function")try{let h=f([[d]]);Array.isArray(h)&&(f=h[0].func_val,_[E]=f)}catch(h){throw h.message+="Trying to set key "+E+" on object"+JSON.stringify(_),h}}if(d)for(let E in d)Object.prototype.hasOwnProperty.call(_,E)||(_[E]=d[E]);await i.put(_,o),u.push(_[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:l}})}async deleteRecords(t){let r=Vr()[t.schema][t.table],s={user:t.hdb_user};return Ke(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 Cy(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Vr()[t.schema][t.table];if(!r.createdTimeProperty)throw new kr.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:$r.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],l=a(async()=>{let _=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(..._.deleted_hashes),o.push(..._.skipped_hashes),await(0,Py.async_set_timeout)(gW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%RW===0&&await l();return u.length>0&&await l(),n?Cy(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Il.default)(t,"hashes");if(r)throw r;return wy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of wy(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&$r.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,Il.default)(t,"value");if(s)throw s;let n=ds(t);if(!n)throw new kr.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===$r.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:kh(t,n)})}async getDataByValue(t,r){let s=new Map,n=ds(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){ds({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return ds(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=ds(t),s={};switch(t.search_type){case $r.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,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case $r.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of Uy(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return Uy(r,t.search_values?.[0],t.search_values?.[1])}}};a(kh,"getSelect");a(wy,"getRecords");a(ds,"getTable");a(Cy,"createDeleteResponse");a(Uy,"groupRecordsInHistory")});var Gr=m((Uoe,Hy)=>{"use strict";var{ResourceBridge:AW}=(By(),se(vy)),OW=Q();OW.initSync();var wl;function NW(){return wl||(wl=new AW,wl)}a(NW,"getBridge");Hy.exports=NW()});var xy=m((Loe,Gy)=>{"use strict";var qy=require("lodash"),Ga=require("mathjs"),bW=require("jsonata"),Fy=V();Gy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?qy.uniqWith(e,qy.isEqual):e,searchJSON:yW,mad:xa.bind(null,Ga.mad),mean:xa.bind(null,Ga.mean),mode:xa.bind(null,Ga.mode),prod:xa.bind(null,Ga.prod),median:xa.bind(null,Ga.median)};function xa(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(xa,"aggregateFunction");function yW(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(Fy.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Fy.isEmpty(this.__ala__.res[r])){let s=bW(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(yW,"searchJSON")});var Vy=m((Poe,ky)=>{"use strict";var Qe=require("moment"),$h="YYYY-MM-DDTHH:mm:ss.SSSZZ";Qe.suppressDeprecationWarnings=!0;ky.exports={current_date:()=>Qe().utc().format("YYYY-MM-DD"),current_time:()=>Qe().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Qe(e).utc().format("YYYY");case"month":return Qe(e).utc().format("MM");case"day":return Qe(e).utc().format("DD");case"hour":return Qe(e).utc().format("HH");case"minute":return Qe(e).utc().format("mm");case"second":return Qe(e).utc().format("ss");case"millisecond":return Qe(e).utc().format("SSS");default:break}},date:e=>Qe(e).utc().format($h),date_format:(e,t)=>Qe(e).utc().format(t),date_add:(e,t,r)=>Qe(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Qe(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Qe(e).utc(),n=Qe(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Qe().utc().valueOf(),get_server_time:()=>Qe().format($h),offset_utc:(e,t)=>Qe(e).utc().utcOffset(t).format($h)}});var Wy=m((voe,Ky)=>{"use strict";var IW=require("@turf/area"),wW=require("@turf/length"),CW=require("@turf/circle"),UW=require("@turf/difference"),DW=require("@turf/distance"),LW=require("@turf/boolean-contains"),MW=require("@turf/boolean-equal"),PW=require("@turf/boolean-disjoint"),vW=require("@turf/helpers"),$y=A(),_e=V();Ky.exports={geoArea:BW,geoLength:HW,geoCircle:qW,geoDifference:FW,geoDistance:Yy,geoNear:GW,geoContains:xW,geoEqual:kW,geoCrosses:VW,geoConvert:$W};var Yh="geo1 is required",Kh="geo2 is required";function BW(e){if(_e.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),IW.default(e)}a(BW,"geoArea");function HW(e,t){if(_e.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),wW.default(e,{units:t||"kilometers"})}a(HW,"geoLength");function qW(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)),CW.default(e,t,{units:r||"kilometers"})}a(qW,"geoCircle");function FW(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)),UW(e,t)}a(FW,"geoDifference");function Yy(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)),DW.default(e,t,{units:r||"kilometers"})}a(Yy,"geoDistance");function GW(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 Yy(e,t,s)<=r}a(GW,"geoNear");function xW(e,t){if(_e.isEmpty(e))throw new Error(Yh);if(_e.isEmpty(e))throw new Error(Kh);return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),LW.default(e,t)}a(xW,"geoContains");function kW(e,t){if(_e.isEmpty(e))throw new Error(Yh);if(_e.isEmpty(e))throw new Error(Kh);return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),MW.default(e,t)}a(kW,"geoEqual");function VW(e,t){if(_e.isEmpty(e))throw new Error(Yh);if(_e.isEmpty(e))throw new Error(Kh);return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),!PW.default(e,t)}a(VW,"geoCrosses");function $W(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($y.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys($y.GEO_CONVERSION_ENUM).join(",")}`);return vW[t](e,r)}a($W,"geoConvert")});var Cl=m((Hoe,Qy)=>{var ai=xy(),_r=Vy(),Es=Wy();Qy.exports=e=>{e.aggr.mad=e.aggr.MAD=ai.mad,e.aggr.mean=e.aggr.MEAN=ai.mean,e.aggr.mode=e.aggr.MODE=ai.mode,e.aggr.prod=e.aggr.PROD=ai.prod,e.aggr.median=e.aggr.MEDIAN=ai.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ai.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ai.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=_r.current_date,e.fn.current_time=e.fn.CURRENT_TIME=_r.current_time,e.fn.extract=e.fn.EXTRACT=_r.extract,e.fn.date=e.fn.DATE=_r.date,e.fn.date_format=e.fn.DATE_FORMAT=_r.date_format,e.fn.date_add=e.fn.DATE_ADD=_r.date_add,e.fn.date_sub=e.fn.DATE_SUB=_r.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=_r.date_diff,e.fn.now=e.fn.NOW=_r.now,e.fn.offset_utc=e.fn.OFFSET_UTC=_r.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=_r.get_server_time,e.fn.getdate=e.fn.GETDATE=_r.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=_r.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Es.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Es.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Es.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Es.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Es.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Es.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Es.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Es.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Es.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Es.geoNear}});var Zy=m((qoe,Xy)=>{"use strict";var ka=require("lodash"),pt=require("alasql");pt.options.cache=!1;var YW=Cl(),zy=require("clone"),Ul=require("recursive-iterator"),ne=x(),ie=V(),to=Gr(),KW=A(),{hdb_errors:WW}=W(),{getDatabases:Jy}=(Ee(),se(be)),QW="IS NULL",Yr="There was a problem performing this search. Please check the logs and try again.";YW(pt);var Wh=class{static{a(this,"SQLSearch")}constructor(t,r){if(ie.isEmpty(t))throw ne.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 ne.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw ne.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ne.error(s),new Error(Yr)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw ne.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ne.error(s),new Error(Yr)}if(Object.keys(this.data).length===0)return ne.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw ne.error("Error thrown from processJoins in SQLSearch class method search."),ne.error(s),new Error(Yr)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw ne.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ne.error(s),new Error(Yr)}try{return t=await this._finalSQL(),t}catch(s){throw ne.error("Error thrown from finalSQL in SQLSearch class method search."),ne.error(s),new Error(Yr)}}_getColumns(){let t=new Ul(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(zy(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=ka.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=Jy()[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)){ne.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Ul(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 pt.yy.LogicValue({value:s}):r.right instanceof pt.yy.StringValue&&!ie.isEmpty(s)&&ie.autoCasterIsNumberCheck(s.toString())&&(r.right=new pt.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 pt.yy.LogicValue({value:i}):s instanceof pt.yy.StringValue&&ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new pt.yy.NumValue({value:i}))});if(t){ne.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Ul(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(KW.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 l=0;l<u.length;l++)if(u[l].value)s.add(u[l].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...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&&ka.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 pt.promise(r)}catch(r){throw ne.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ne.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(zy(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(QW)>-1&&this.tables.forEach(n=>{let i={columnid:Jy()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=ka.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,l=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ie.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!ie.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await to.getDataByHash(c);for(let d of c.hash_values)_.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(_){throw ne.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ne.error(_),new Error(Yr)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[l].values).map(async _=>{let d=Object.assign({},c);d.search_value=_;let E=await to.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]):(this.data[i].__merged_data[f]=[...s[i]],this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(f)))}))}catch(_){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ne.error(_),new Error(Yr)}else if(!ie.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!ie.isEmptyOrZeroLength(this.comparator_search_values[l].comparators))try{let _=this.comparator_search_values[l].comparators;for(let d=0,E=_.length;d<E;d++){let f=_[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await to.getDataByValue(c,f.operation);if(u)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...s[i]],this._setMergedHashAttribute(i,ie.autoCast(T)));else for(let[T,p]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,n.attribute,p[n.attribute]):(this.data[i].__merged_data[T]=[...s[i]],this._updateMergedAttribute(i,T,n.attribute,p[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(T)))}}catch(_){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ne.error(_),new Error(Yr)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await to.getDataByValue(c);if(u)for(let[d]of _)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ie.autoCast(d)));else for(let[d,E]of _)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(d)))}catch(_){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ne.error(_),new Error(Yr)}}}_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 pt.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 pt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new pt.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 pt.yy.FuncValue:new pt.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(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${T}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",l="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(l="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let _="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(_=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${l} ${_} ${d}`,h=this._convertColumnsToIndexes(f,n);E=await pt.promise(h,t),t=null}catch(f){throw ne.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ne.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let T=E[f];o.forEach(p=>{T[p.key]!==null&&T[p.key]!==void 0&&p.keys.add(T[p.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=ka.difference(h,[...f.keys].map(p=>p.toString()));for(let p=0,R=T.length;p<R;p++){let O=T[p];delete this.data[`${f.schema}_${f.table}`].__merged_data[O]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Ul(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=ka.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 ne.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ne.error(i),new Error(Yr)}}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 _ in i)o.push(i[_][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 to.getDataByHash(c),l=n.columns.length;for(let _=0,d=o.length;_<d;_++){let E=o[_],f=u.get(E);for(let h=0;h<l;h++){let T=n.columns[h],p=f[T]===void 0?null:f[T];this.data[s].__merged_data[E].push(p)}}}}catch(r){throw ne.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ne.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();ne.trace(`Final SQL: ${n}`),s=await pt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),ne.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw ne.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ne.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 ne.error(WW.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ne.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],l=new RegExp(`${u}.\`${o}\``,"g"),_=`${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"),l=`[${c}]`;s=s.replace(u,l)});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 to.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 ne.error("There was an error when processing this SQL operation. Check your logs"),ne.error(o),new Error(Yr)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Xy.exports=Wh});var br=m((Goe,jy)=>{"use strict";var zW=oA();jy.exports={searchByConditions:XW,searchByHash:ZW,searchByValue:jW,search:eQ};var Qh=Gr(),{transformReq:zh}=V(),JW=Zy();async function XW(e){return zh(e),Qh.searchByConditions(e)}a(XW,"searchByConditions");async function ZW(e){zh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Qh.searchByHash(e))r&&t.push(r);return t}a(ZW,"searchByHash");async function jW(e){zh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Qh.searchByValue(e))t.push(r);return t}a(jW,"searchByValue");function eQ(e,t){try{let r=new zW(e);r.validate(),new JW(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(eQ,"search")});var Dl=m((koe,eI)=>{"use strict";var tQ=Gr();eI.exports={writeTransaction:rQ};function rQ(e,t,r){return tQ.writeTransaction(e,t,r)}a(rQ,"writeTransaction")});var nI=m((Yoe,sI)=>{"use strict";var sQ=br(),nQ=Ys(),tI=x(),iQ=yr(),$oe=Dl(),oQ=require("clone"),Xh=require("alasql"),aQ=Cl(),rI=require("util"),cQ=rI.promisify(nQ.getTableSchema),uQ=rI.promisify(sQ.search),lQ=A(),Jh=V();aQ(Xh);sI.exports={update:dQ};var _Q="There was a problem performing this update. Please check the logs and try again.";async function dQ({statement:e,hdb_user:t}){let r=await cQ(e.table.databaseid,e.table.tableid),s=EQ(e.columns);Jh.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=oQ(n),c=Jh.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=Xh.parse(u).statements[0],_=await uQ(l),d=fQ(s,_);return hQ(o,d,t)}a(dQ,"update");function EQ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Xh.compile(`SELECT ${r.expression.toString()} AS [${lQ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw tI.error(t),new Error(_Q)}}a(EQ,"createUpdateRecord");function fQ(e,t){return Jh.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(fQ,"buildUpdateRecords");async function hQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await iQ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){tI.error(`Error delete new_attributes from update response: ${i}`)}return n}a(hQ,"updateRecords")});var oI=m((zoe,iI)=>{var mQ=require("alasql"),SQ=br(),pQ=x(),TQ=Gr(),jh=require("util"),Zh=V(),RQ=A(),gQ=Ys(),Woe=Dl(),Qoe=yr(),AQ="record",OQ="successfully deleted",NQ=jh.callbackify(wQ),bQ=jh.promisify(SQ.search),yQ=jh.promisify(gQ.getTableSchema);iI.exports={convertDelete:NQ};function IQ(e){return`${e.deleted_hashes.length} ${AQ}${e.deleted_hashes.length===1?"":"s"} ${OQ}`}a(IQ,"generateReturnMessage");async function wQ({statement:e,hdb_user:t}){let r=await yQ(e.table.databaseid,e.table.tableid);Zh.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Zh.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=mQ.parse(o).statements[0],u={operation:RQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await bQ(c);let l=await TQ.deleteRecords(u);return Zh.isEmptyOrZeroLength(l.message)&&(l.message=IQ(l)),delete l.txn_time,l}catch(l){throw pQ.error(l),l.hdb_code?l.message:l}}a(wQ,"convertDelete")});var _I=m((Xoe,lI)=>{"use strict";var CQ=Xn(),{hdb_errors:aI}=W(),{getDatabases:cI}=(Ee(),se(be));lI.exports={checkSchemaExists:uI,checkSchemaTableExists:UQ,schema_describe:CQ};async function uI(e){if(!cI()[e])return aI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(uI,"checkSchemaExists");async function UQ(e,t){let r=await uI(e);if(r)return r;if(!cI()[e][t])return aI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(UQ,"checkSchemaTableExists")});var Va=m((joe,DQ)=>{DQ.exports={name:"harperdb",version:"4.2.0-alpha.15",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:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.12","nats-server":"2.9.21"},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":"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:"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":"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/client-s3":"3.388.0","@aws-sdk/lib-storage":"3.383.0","@aws-sdk/abort-controller":"3.370.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.3.0","@fastify/static":"~6.10.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.19.1","fast-glob":"3.3.1",fastify:"~4.21.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.6.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.1",lmdb:"2.8.4",lodash:"4.17.21",mathjs:"11.9.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.7",nats:"2.16.0",needle:"3.2.0","node-stream-zip":"1.15.0","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.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.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.18.15","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",ws:"^8.13.0",yaml:"2.3.1"},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",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:"^4.9.4","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 vl={};je(vl,{addAnalyticsListener:()=>nm,recordAction:()=>ui,recordActionBinary:()=>sm,setAnalyticsEnabled:()=>LQ});function LQ(e){RI=e}function ui(e,t,r,s,n){if(!RI)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Pl.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let l=c;o.values=c=new Float32Array(u*2),c.set(l),c.index=u+1}c[u]=Math.random(),o.total+=e}else if(typeof e=="boolean")e&&o.total++,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 throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:s,type:n},Pl.set(i,o)}Ml||MQ()}function sm(e,t,r,s,n){ui(!!e,t,r,s,n)}function nm(e){AI.push(e)}function MQ(){Ml=performance.now(),setTimeout(async()=>{let e=performance.now()-Ml;Ml=0;let t=[],r={time:Date.now(),period:e,threadId:ci.threadId,metrics:t};for(let[n,i]of Pl){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 OI){let E=Math.floor(c*d),f=o[E-1];if(E>u){let h=E-u;f===_?l[l.length-1].count+=h:(l.push(h>1?{value:f,count:h}:f),_=f),u=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:l,count:c}))}else t.push(i);await NI()}let s=process.memoryUsage();t.push({metric:"memory",threadId:ci.threadId,...s});for(let n of AI)n(t);Pl=new Map,ci.parentPort?ci.parentPort.postMessage({type:gI,report:r}):yI({report:r})},tm).unref()}async function PQ(e,t=6e4){let r=im(),s;for(let E of r.primaryStore.getRange({start:Ll+"z",end:Ll,reverse:!0}))if(E.value?.time){s=E.value.time;break}if(Date.now()-t<s)return;let n,i=new Map,o=new Map,c;for(let{key:E,value:f}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!f)continue;if(n){if(E>n+t)break}else n=E;c=E;let{metrics:h,threadId:T}=f;for(let p of h||[]){let{path:R,method:O,type:q,metric:$,count:w,total:I,distribution:D,...z}=p;w||(w=1);let M=$+(R?"-"+R:"");O&&(M+="-"+O);let ee=i.get(M);if(ee){ee.count||(ee.count=1);let Ne=ee.count;for(let Lt in z){let rr=z[Lt];typeof rr=="number"&&(ee[Lt]=(ee[Lt]*Ne+rr*w)/(Ne+w))}ee.count+=w,I>=0&&(ee.total+=I,ee.ratio=ee.total/ee.count)}else ee=Object.assign({period:t},p),delete ee.distribution,i.set(M,ee);if(D){D=D.map(Lt=>typeof Lt=="number"?{value:Lt,count:1}:Lt);let Ne=o.get(M);Ne?Ne.push(...D):o.set(M,D)}}await NI()}for(let[E,f]of o){let h=i.get(E);f.sort((rr,jr)=>rr.value>jr.value?1:-1);let T=h.count-1,p=[],R=0,O=0,q;for(let rr of OI){let jr=T*rr;for(;R<jr;)q=f[O++],R+=q.count,O===1&&R--;let Cs=f[O>1?O-2:0];q||(q=f[0]),p.push(q.value-(q.value-Cs.value)*(R-jr)/q.count)}let[$,w,I,D,z,M,ee,Ne,Lt]=p;Object.assign(h,{p1:$,p10:w,p25:I,median:D,p75:z,p90:M,p95:ee,p99:Ne,p999:Lt})}let u;for(let[E,f]of i)f.id=Ll+Math.round(c)+"-"+E,f.time=c,r.put(f),u=!0;let l=Date.now(),{idle:_,active:d}=performance.eventLoopUtilization();(u||d*10>_)&&r.put({id:Ll+Math.round(l)+"-main-thread-utilization",metric:"main-thread-utilization",idle:_-dI,active:d-EI,time:l}),dI=_,EI=d}async function vQ(e,t){let r=im(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function im(){return fI||(fI=st({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function HQ(){bI=!0;let e=(0,Ya.get)(rm.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await PQ(tm,e),await vQ(BQ,tm)},e/2).unref()}function yI(e,t){let r=e.report;r.threadId=t?.threadId||ci.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(hI+=s.mean*s.count);r.totalBytesProcessed=hI,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(mI.get(t))}),mI.set(t,t.performance.eventLoopUtilization())),r.id=(0,TI.getNextMonotonicTime)(),im().put(r),bI||HQ(),qQ&&(II=GQ(r))}async function GQ(e){if(await II,!On){let r=(0,$a.dirname)((0,pI.getLogFilePath)());try{On=await(0,em.open)((0,$a.join)(r,"analytics.log"),"r+")}catch{On=await(0,em.open)((0,$a.join)(r,"analytics.log"),"w+")}}let t=(await On.stat()).size;if(t>FQ){let r=Buffer.alloc(t);await On.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await On.write(r,{position:0}),await On.truncate(r.length),t=r.length}await On.write(JSON.stringify(e)+`
6
+ `,t)}var ci,SI,pI,$a,em,TI,Ya,rm,Pl,RI,Ml,tm,gI,AI,OI,Ll,dI,EI,NI,BQ,fI,bI,hI,mI,qQ,II,On,FQ,ro=pe(()=>{ci=require("worker_threads"),SI=U(dt());Ee();pI=U(x()),$a=require("path"),em=require("fs/promises"),TI=U(qt()),Ya=U(Q()),rm=U(A());es();(0,Ya.initSync)();Pl=new Map,RI=(0,Ya.get)(rm.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(LQ,"setAnalyticsEnabled");a(ui,"recordAction");tt.recordAnalytics=ui;a(sm,"recordActionBinary");Ml=0,tm=1e3,gI="analytics-report",AI=[];a(nm,"addAnalyticsListener");OI=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(MQ,"sendAnalytics");Ll="sum-";a(PQ,"aggregation");dI=0,EI=0,NI=a(()=>new Promise(setImmediate),"rest");a(vQ,"cleanup");BQ=36e5;a(im,"getAnalyticsTable");(0,SI.setChildListenerByType)(gI,yI);a(HQ,"startScheduledTasks");hI=0,mI=new Map,qQ=!1;a(yI,"recordAnalytics");FQ=1e6;a(GQ,"logAnalytics")});var nt=m((Eae,KI)=>{"use strict";var Tt=Q();Tt.initSync();var xQ=require("fs-extra"),kQ=require("semver"),za=require("path"),{monotonicFactory:VQ}=require("ulidx"),um=VQ(),$Q=require("util"),CI=require("child_process"),YQ=$Q.promisify(CI.exec),KQ=CI.spawn,de=He(),Re=A(),Bl=V(),wr=x(),Hl=$s(),WQ=Dl(),Ka=gr(),{Encoder:QQ,decode:lm}=require("msgpackr"),UI=new QQ,{isEmpty:li}=Bl,DI=Ir(),LI=12e10,zQ=48*36e11,JQ=5e9,{connect:XQ,StorageType:MI,RetentionPolicy:PI,AckPolicy:ql,DeliverPolicy:Fl,DiscardPolicy:ZQ,NatsConnection:uae,JetStreamManager:lae,JetStreamClient:_ae,StringCodec:dae,JSONCodec:jQ,createInbox:_m,headers:ez,ErrorCode:wI}=require("nats"),{PACKAGE_ROOT:tz}=A(),rz=Va(),{recordAction:sz}=(ro(),se(vl)),vI=jQ(),nz="clustering",iz=rz.engines[de.NATS_SERVER_NAME],oz=za.join(tz,"dependencies"),cm=za.join(oz,`${process.platform}-${process.arch}`,de.NATS_BINARY_NAME),om,am,Wa,so,no;KI.exports={runCommand:BI,checkNATSServerInstalled:az,createConnection:dm,getConnection:Gl,getJetStreamManager:Ja,getJetStream:HI,getNATSReferences:xt,getServerList:uz,createLocalStream:Em,listStreams:qI,deleteLocalStream:lz,getServerConfig:Xa,listRemoteStreams:_z,viewStream:dz,viewStreamIterator:Ez,publishToStream:fz,createWorkQueueStream:hz,addSourceToWorkStream:GI,request:Sz,removeSourceFromWorkStream:kI,reloadNATS:fm,reloadNATSHub:pz,reloadNATSLeaf:Tz,extractServerName:xI,requestErrorHandler:Rz,updateWorkStream:gz,createLocalTableStream:$I,createTableStreams:Az,purgeTableStream:YI,purgeSchemaTableStreams:Oz,getStreamInfo:Nz,updateLocalStreams:yz,closeConnection:cz,getJsmServerName:Za,addNatsMsgHeader:FI,updateIngestStreamConsumer:mz};async function BI(e,t=void 0){let{stdout:r,stderr:s}=await YQ(e,{cwd:t});if(s)throw new Error(s.replace(`
7
7
  `,""));return r.replace(`
8
- `,"")}a(PI,"runCommand");async function oz(){try{await GQ.access(cm)}catch{return!1}let e=await PI(`${cm} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return xQ.eq(t,nz)}a(oz,"checkNATSServerInstalled");async function dm(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await CI.getClusterUser();if(ai(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}yr.trace("create nats connection called");let i=await JQ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return yr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(dm,"createConnection");async function az(){_s&&(await _s.drain(),_s=void 0,eo=void 0,to=void 0,Wa=void 0)}a(az,"closeConnection");var _s,Wa;async function Gl(){return Wa||(Wa=dm(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),_s=await Wa),_s||Wa}a(Gl,"getConnection");async function za(){if(eo)return eo;ai(_s)&&await Gl();let{domain:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ai(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return eo=await _s.jetstreamManager({domain:e}),eo}a(za,"getJetStreamManager");async function vI(){if(to)return to;ai(_s)&&await Gl();let{domain:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ai(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return to=_s.jetstream({domain:e}),to}a(vI,"getJetStream");async function Gt(){let e=_s||await Gl(),t=eo||await za(),r=to||await vI();return{connection:e,jsm:t,js:r}}a(Gt,"getNATSReferences");async function cz(e){let t=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await CI.getClusterUser(),n=await dm(t,r,s),i=_m(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=MI.decode(_.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 Bl.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(cz,"getServerList");async function Em(e,t){let{jsm:r}=await Gt(),s=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:DI.File,retention:LI.Limits,subjects:t,discard:XQ.Old,duplicate_window:UI,max_msgs:n,max_bytes:i,max_age:s})}a(Em,"createLocalStream");async function BI(){let{jsm:e}=await Gt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(BI,"listStreams");async function uz(e){let{jsm:t}=await Gt();await t.streams.delete(e)}a(uz,"deleteLocalStream");async function lz(e){let{connection:t}=await Gt(),r=[],s=_m(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(MI.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(lz,"listRemoteStreams");async function _z(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=um(),o={durable_name:i,ack_policy:ql.Explicit};t&&(o.deliver_policy=Fl.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 l=[];for await(let _ of u){let d=lm(_.data),E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};if(_.headers&&(E.origin=_.headers.get(_e.MSG_HEADERS.ORIGIN),E.nats_msg_id=_.headers.get(_e.MSG_HEADERS.NATS_MSG_ID)),l.push(E),_.ack(),_.info.pending===0)break}return await c.delete(),l}a(_z,"viewStream");async function*dz(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=um(),o={durable_name:i,ack_policy:ql.Explicit};t&&(o.deliver_policy=Fl.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 l of u){let _=lm(l.data);_[0]||(_=[_]);for(let d of _){let E={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(E.origin=l.headers.get(_e.MSG_HEADERS.ORIGIN),E.nats_msg_id=l.headers.get(_e.MSG_HEADERS.NATS_MSG_ID)),yield E}if(l.ack(),l.info.pending===0)break}await c.delete()}a(dz,"viewStreamIterator");async function Ez(e,t,r,s){yr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=HI(s,r);let{js:n}=await Gt(),i=await Xa(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:wI.encode(s);try{yr.trace(`publishToStream publishing to subject: ${o}`),rz(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 xI(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){yr.trace(`publishToStream creating stream: ${t}`);let _=o.split(".");_[2]="*",await Em(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(Ez,"publishToStream");function HI(e,t){t===void 0&&(t=jQ());let r=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(_e.MSG_HEADERS.NATS_MSG_ID)){let s=Bl.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${um()}`;t.append(_e.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(_e.MSG_HEADERS.ORIGIN)||t.append(_e.MSG_HEADERS.ORIGIN,r),t}a(HI,"addNatsMsgHeader");function Ja(e){e=e.toLowerCase();let t=Qa.join(Tt.get(Te.CONFIG_PARAMS.ROOTPATH),sz);if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ai(am)&&(am={port:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.HUB,config_file:_e.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Qa.join(t,_e.PID_FILES.HUB),hdb_nats_path:t}),am;if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ai(om)&&(om={port:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,config_file:_e.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,pid_file_path:Qa.join(t,_e.PID_FILES.LEAF),hdb_nats_path:t}),om;yr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ja,"getServerConfig");async function fz(e){let{jsm:t}=await Gt(),r=await Xa();try{await t.streams.add({name:e.stream_name,storage:DI.File,retention:LI.Limits,duplicate_window:UI,max_age:QQ,max_bytes:zQ,subjects:[`${_e.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:ql.Explicit,durable_name:e.durable_name,deliver_policy:Fl.All,max_ack_pending:1e4});else throw s}}a(fz,"createWorkQueueStream");async function hz(){let{jsm:e}=await Gt();(await e.consumers.info(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(yr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name),yr.info("Adding pull consumer to ingest stream"),await e.consumers.add(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:ql.Explicit,durable_name:_e.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Fl.All,max_ack_pending:1e4}))}a(hz,"updateIngestStreamConsumer");async function qI(e,t,r){let{jsm:s}=await Gt(),n=await s.streams.info(t),i=FI(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=Hl.createNatsTableStreamName(c,u),_=i===e,d,E,f=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,T=n.config.sources.length;p<T;p++)if(d=n.config.sources[p],E=p,_&&d.name===l||!_&&d.name===l&&d.external&&d.external.api===`$JS.${e}.API`){f=!0;break}if(f===!0){if(d.opt_start_time===o)return;n.config.sources.splice(E,1),await s.streams.update(t,n.config)}let h={name:l,opt_start_time:o,filter_subject:`${_e.SUBJECT_PREFIXES.TXN}.>`};_||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(qI,"addSourceToWorkStream");function FI(e){return e.split(".")[1]}a(FI,"extractServerName");async function GI(e,t,r){let{schema:s,table:n}=r,i=Hl.createNatsTableStreamName(s,n),{jsm:o}=await Gt(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let u=c.config.sources.length,l;for(;u--;)if(l=c.config.sources[u],l.name===i&&l.external.api===`$JS.${e}.API`){c.config.sources.splice(u,1);break}await o.streams.update(t,c.config)}a(GI,"removeSourceFromWorkStream");async function mz(e,t,r=2e4,s=_m()){if(!Bl.isObject(t))throw new Error("data param must be an object");let n=wI.encode(t),{connection:i}=await Gt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return lm(c.data)}a(mz,"request");function fm(e){return new Promise(async(t,r)=>{let s=YQ(cm,["--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(fm,"reloadNATS");async function Sz(){let{pid_file_path:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await fm(e)}a(Sz,"reloadNATSHub");async function pz(){let{pid_file_path:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await fm(e)}a(pz,"reloadNATSLeaf");function Tz(e,t,r){let s;switch(e.code){case yI.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case yI.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(Tz,"requestErrorHandler");async function Rz(e,t){let r=t+_e.SERVER_SUFFIX.LEAF;await xI(async()=>{e.subscribe===!0?await qI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await GI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(Rz,"updateWorkStream");function xI(e){return KQ.writeTransaction(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(xI,"exclusiveLock");async function kI(e,t){let r=Hl.createNatsTableStreamName(e,t),s=await Xa(),n=Nz(e,t,s);await Em(r,[n])}a(kI,"createLocalTableStream");async function gz(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await kI(s,n)}}a(gz,"createTableStreams");async function VI(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Hl.createNatsTableStreamName(e,t),{jsm:s}=await Gt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")yr.warn(r);else throw r}}a(VI,"purgeTableStream");async function Az(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await VI(e,t[r])}a(Az,"purgeSchemaTableStreams");async function Oz(e){return(await za()).streams.info(e)}a(Oz,"getStreamInfo");function Nz(e,t,r){return`${_e.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Nz,"createSubjectName");async function Xa(){if(Ka)return Ka;if(Ka=(await za())?.nc?.info?.server_name,Ka===void 0)throw new Error("Unable to get jetstream manager server name");return Ka}a(Xa,"getJsmServerName");async function bz(){let e=await za(),t=await Xa(),r=await BI();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=yz(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;yr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else if(n.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;yr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else{let l=i.split(".");l[l.length-1]=t;let _=l.join(".");yr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}a(bz,"updateLocalStreams");function yz(e){let{config:t}=e,r=!1;if(t.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Tt.get(Te.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(yz,"updateStreamLimits")});var $l=m((hae,QI)=>{"use strict";var ro=Ju(),so=_I(),Iz=x(),wz=require("uuid").v4,fae=require("clone"),kl=ks(),no=A(),Cz=require("util"),Rn=qr(),{handleHDBError:xt,hdb_errors:Uz}=W(),{HDB_ERROR_MSGS:xl,HTTP_STATUS_CODES:kt}=Uz,{SchemaEventMsg:Vl}=Fr(),YI=nt(),{getDatabases:Dz}=(de(),re(Ne)),{transformReq:io}=V();QI.exports={createSchema:Lz,createSchemaStructure:KI,createTable:Mz,createTableStructure:WI,createAttribute:qz,dropSchema:Pz,dropTable:vz,dropAttribute:Bz,getBackup:Fz};async function Lz(e){let t=await KI(e);return kl.signalSchemaChange(new Vl(process.pid,e.operation,e.schema)),t}a(Lz,"createSchema");async function KI(e){let t=ro.schema_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(io(e),!await so.checkSchemaExists(e.schema))throw xt(new Error,xl.SCHEMA_EXISTS_ERR(e.schema),kt.BAD_REQUEST,no.LOG_LEVELS.ERROR,xl.SCHEMA_EXISTS_ERR(e.schema),!0);return await Rn.createSchema(e),`database '${e.schema}' successfully created`}a(KI,"createSchemaStructure");async function Mz(e){return io(e),await WI(e)}a(Mz,"createTable");async function WI(e){let t=ro.create_table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(ro.validateTableResidence(e.residence),!await so.checkSchemaTableExists(e.schema,e.table))throw xt(new Error,xl.TABLE_EXISTS_ERR(e.schema,e.table),kt.BAD_REQUEST,no.LOG_LEVELS.ERROR,xl.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:wz(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await Rn.createTable(s,e);else throw xt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",kt.BAD_REQUEST);else await Rn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(WI,"createTableStructure");async function Pz(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ro.schema_object(e),s=t??r;if(s)throw xt(s,s.message,kt.BAD_REQUEST,void 0,void 0,!0);io(e);let n=await so.checkSchemaExists(e.schema);if(n)throw xt(new Error,n,kt.NOT_FOUND,no.LOG_LEVELS.ERROR,n,!0);let i=await so.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Rn.dropSchema(e),kl.signalSchemaChange(new Vl(process.pid,e.operation,e.schema)),await YI.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(Pz,"dropSchema");async function vz(e){let t=ro.table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);io(e);let r=await so.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,no.LOG_LEVELS.ERROR,r,!0);return await Rn.dropTable(e),await YI.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(vz,"dropTable");async function Bz(e){let t=ro.attribute_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);io(e);let r=await so.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,no.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw xt(new Error,"You cannot drop a hash attribute",kt.BAD_REQUEST,void 0,void 0,!0);if(no.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw xt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,kt.BAD_REQUEST,void 0,void 0,!0);try{return await Rn.dropAttribute(e),Hz(e),kl.signalSchemaChange(new Vl(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw Iz.error(`Got an error deleting attribute ${Cz.inspect(e)}.`),s}}a(Bz,"dropAttribute");function Hz(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(Hz,"dropAttributeFromGlobal");async function qz(e){io(e);let t=Dz()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw xt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,kt.BAD_REQUEST,void 0,void 0,!0);return await Rn.createAttribute(e),kl.signalSchemaChange(new Vl(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(qz,"createAttribute");function Fz(e){return Rn.getBackup(e)}a(Fz,"getBackup")});var JI=m((Sae,zI)=>{"use strict";var{OPERATIONS_ENUM:Gz}=A(),hm=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Gz.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};zI.exports=hm});var mm=m((Rae,tw)=>{"use strict";var xz=qr(),Tae=JI(),Yl=V(),Kl=A(),kz=Q(),{handleHDBError:XI,hdb_errors:Vz}=W(),{HDB_ERROR_MSGS:ZI,HTTP_STATUS_CODES:jI}=Vz,$z=Object.values(Kl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),ew="To use this operation audit log must be enabled in harperdb-config.yaml";tw.exports=Yz;async function Yz(e){if(Yl.isEmpty(e.schema))throw new Error(ZI.SCHEMA_REQUIRED_ERR);if(Yl.isEmpty(e.table))throw new Error(ZI.TABLE_REQUIRED_ERR);if(!kz.get(Kl.CONFIG_PARAMS.LOGGING_AUDITLOG))throw XI(new Error,ew,jI.BAD_REQUEST,Kl.LOG_LEVELS.ERROR,ew,!0);let t=Yl.checkSchemaTableExist(e.schema,e.table);if(t)throw XI(new Error,t,jI.NOT_FOUND,Kl.LOG_LEVELS.ERROR,t,!0);if(!Yl.isEmpty(e.search_type)&&$z.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await xz.readAuditLog(e)}a(Yz,"readAuditLog")});var sw=m((Aae,rw)=>{"use strict";var{OPERATIONS_ENUM:Kz}=A(),Sm=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Kz.GET_BACKUP,this.schema=t,this.table=r}};rw.exports=Sm});var ow=m((yae,iw)=>{"use strict";var Wz=qr(),Nae=sw(),pm=V(),Qz=A(),bae=Q(),{handleHDBError:zz,hdb_errors:Jz}=W(),{HDB_ERROR_MSGS:nw,HTTP_STATUS_CODES:Xz}=Jz;iw.exports=Zz;async function Zz(e){if(pm.isEmpty(e.schema))throw new Error(nw.SCHEMA_REQUIRED_ERR);if(pm.isEmpty(e.table))throw new Error(nw.TABLE_REQUIRED_ERR);let t=pm.checkSchemaTableExist(e.schema,e.table);if(t)throw zz(new Error,t,Xz.NOT_FOUND,Qz.LOG_LEVELS.ERROR,t,!0);return await Wz.getBackup(read_audit_log_object)}a(Zz,"getBackup")});var dw=m((wae,_w)=>{var gn=require("validate.js"),cw=Pe(),oo=A(),{handleHDBError:jz,hdb_errors:eJ}=W(),{HDB_ERROR_MSGS:Ve,HTTP_STATUS_CODES:tJ}=eJ,Tm=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),rJ={STRUCTURE_USER:"structure_user"},aw=Object.values(oo.ROLE_TYPES_ENUM),sJ="attribute_permissions",nJ="attribute_name",{PERMS_CRUD_ENUM:ao}=oo,iJ=[sJ,...Object.values(ao)],uw=[ao.READ,ao.INSERT,ao.UPDATE],oJ=[nJ,...uw];function aJ(e){let t=Tm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,lw(e,t)}a(aJ,"addRoleValidation");function cJ(e){let t=Tm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,lw(e,t)}a(cJ,"alterRoleValidation");function uJ(e){let t=Tm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,cw.validateObject(e,t)}a(uJ,"dropRoleValidation");var lJ=["operation","role","id","permission","hdb_user","hdb_auth_header"];function lw(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)lJ.includes(s[o])||n.push(s[o]);n.length>0&&Qe(Ve.INVALID_ROLE_JSON_KEYS(n),r);let i=cw.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Qe(o,r)}),e.permission){let o=_J(e);o&&Qe(o,r),aw.forEach(c=>{e.permission[c]&&!gn.isBoolean(e.permission[c])&&Qe(Ve.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(aw.indexOf(o)<0){if(o===rJ.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let l=0,_=u.length;l<_;l++){let d=u[l];global.hdb_schema[d]||Qe(Ve.SCHEMA_NOT_FOUND(d),r)}continue}Qe(Ve.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Qe(Ve.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let l=c.tables[u];if(!u||!global.hdb_schema[o][u]){Qe(Ve.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{iJ.includes(_)||Qe(Ve.INVALID_PERM_KEY(_),r,o,u)}),Object.values(ao).forEach(_=>{gn.isDefined(l[_])?gn.isBoolean(l[_])||Qe(Ve.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):Qe(Ve.TABLE_PERM_MISSING(_),r,o,u)}),gn.isDefined(l.attribute_permissions)){if(!gn.isArray(l.attribute_permissions)){Qe(Ve.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{Qe(Ve.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(l.attribute_permissions){let _=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in l.attribute_permissions){let f=l.attribute_permissions[E];if(Object.keys(f).forEach(p=>{!oJ.includes(p)&&p!==ao.DELETE&&Qe(Ve.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!gn.isDefined(f.attribute_name)){Qe(Ve.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){Qe(Ve.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}uw.forEach(p=>{gn.isDefined(f[p])?gn.isBoolean(f[p])||Qe(Ve.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):Qe(Ve.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(l.read===!1&&d.read===!0||l.insert===!1&&d.insert===!0||l.update===!1&&d.update===!0){let E=`${o}.${u}`;Qe(Ve.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return dJ(r)}a(lw,"customValidate");_w.exports={addRoleValidation:aJ,alterRoleValidation:cJ,dropRoleValidation:uJ};function _J(e){let{operation:t,permission:r}=e;if(t===oo.OPERATIONS_ENUM.ADD_ROLE||t===oo.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 Ve.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?oo.ROLE_TYPES_ENUM.SUPER_USER:oo.ROLE_TYPES_ENUM.CLUSTER_USER;return Ve.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(_J,"validateNoSUPerms");function dJ(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Ve.ROLE_PERMS_ERROR,...e};return jz(new Error,s,tJ.BAD_REQUEST)}else return null}a(dJ,"generateRolePermResponse");function Qe(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(Qe,"addPermError")});var bm=m((Uae,mw)=>{"use strict";var Ew=Nr(),fw=Or(),EJ=jn(),gm=dw(),Am=ks(),fJ=require("uuid").v4,hJ=require("util"),Wl=A(),mJ=V(),Om=fw.searchByValue,SJ=fw.searchByHash,pJ=hJ.promisify(EJ.delete),TJ=as(),RJ=Ji(),{hdb_errors:gJ,handleHDBError:co}=W(),{HDB_ERROR_MSGS:hw,HTTP_STATUS_CODES:Ql}=gJ,{UserEventMsg:Nm}=Fr();mw.exports={addRole:AJ,alterRole:OJ,dropRole:NJ,listRoles:bJ};function Rm(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(Rm,"scrubRoleDetails");async function AJ(e){let t=gm.addRoleValidation(e);if(t)throw t;e=Rm(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 Om(r)||[])}catch(i){throw co(i)}if(s&&s.length>0)throw co(new Error,hw.ROLE_ALREADY_EXISTS(e.role),Ql.CONFLICT,void 0,void 0,!0);e.id||(e.id=fJ());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Ew.insert(n),Am.signalUserChange(new Nm(process.pid)),e=Rm(e),e}a(AJ,"addRole");async function OJ(e){let t=gm.alterRoleValidation(e);if(t)throw t;e=Rm(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await Ew.update(r)}catch(n){throw co(n)}if(s&&s?.message==="updated 0 of 1 records")throw co(new Error,"Invalid role id",Ql.BAD_REQUEST,void 0,void 0,!0);return await Am.signalUserChange(new Nm(process.pid)),e}a(OJ,"alterRole");async function NJ(e){let t=gm.dropRoleValidation(e);if(t)throw co(new Error,t,Ql.BAD_REQUEST,void 0,void 0,!0);let r=new RJ(Wl.SYSTEM_SCHEMA_NAME,Wl.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await SJ(r));if(s.length===0)throw co(new Error,hw.ROLE_NOT_FOUND,Ql.NOT_FOUND,void 0,void 0,!0);let n=new TJ(Wl.SYSTEM_SCHEMA_NAME,Wl.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Om(n)),o=!1;if(mJ.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 pJ(c),Am.signalUserChange(new Nm(process.pid)),`${s[0].role} successfully deleted`}a(NJ,"dropRole");async function bJ(){return Om({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(bJ,"listRoles")});var Rw=m((Lae,Tw)=>{"use strict";var yJ=Q(),An=require("joi"),IJ=Pe(),Sw=require("moment"),wJ=require("fs-extra"),ym=require("path"),CJ=require("lodash"),Za=A(),{LOG_LEVELS:ci}=A(),UJ="YYYY-MM-DD hh:mm:ss",DJ=ym.resolve(__dirname,"../logs");Tw.exports=function(e){return IJ.validateBySchema(e,LJ)};var LJ=An.object({from:An.custom(pw),until:An.custom(pw),level:An.valid(ci.NOTIFY,ci.FATAL,ci.ERROR,ci.WARN,ci.INFO,ci.DEBUG,ci.TRACE),order:An.valid("asc","desc"),limit:An.number().min(1),start:An.number().min(0),log_name:An.custom(MJ)});function pw(e,t){if(Sw(e,Sw.ISO_8601).format(UJ)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(pw,"validateDatetime");function MJ(e,t){if(CJ.invert(Za.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=yJ.get(Za.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Za.LOG_NAMES.HDB:e,i=n===Za.LOG_NAMES.INSTALL?ym.join(DJ,Za.LOG_NAMES.INSTALL):ym.join(s,n);return wJ.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(MJ,"validateReadLogPath")});var wm=m((Pae,Aw)=>{"use strict";var zl=A(),PJ=x(),vJ=Q(),BJ=Rw(),Im=require("path"),gw=require("fs-extra"),{once:HJ}=require("events"),{handleHDBError:qJ,hdb_errors:FJ}=W(),{PACKAGE_ROOT:GJ}=A(),xJ=Im.join(GJ,"logs"),kJ=1e3,VJ=200;Aw.exports=$J;async function $J(e){let t=BJ(e);if(t)throw qJ(t,t.message,FJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=vJ.get(zl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?zl.LOG_NAMES.HDB:e.log_name,n=s===zl.LOG_NAMES.INSTALL?Im.join(xJ,zl.LOG_NAMES.INSTALL):Im.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,l=e.until!==void 0,_=l?new Date(e.until):void 0,d=e.limit===void 0?kJ:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,p=0;E==="desc"&&!u&&!_&&(p=Math.max(gw.statSync(n).size-(h+5)*VJ,0));let T=gw.createReadStream(n,{start:p});T.on("error",b=>{PJ.error(b)});let g=0,O=[],k="",$;T.on("data",b=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;b=k+b;let z=0,q;for(;(q=P.exec(b))&&!T.destroyed;){$&&($.message=b.slice(z,q.index),U($));let[Oe,Ze,cu]=q,Di=cu.split("] ["),Vo=Di[0],qn=Di[1];Di.splice(0,2),$={timestamp:Ze,thread:Vo,level:qn,tags:Di,message:""},z=q.index+Oe.length}k=b.slice(z)}),T.on("end",b=>{T.destroyed||$&&($.message=k.trim(),U($))}),T.resume();function U(b){let P,z,q;switch(!0){case(i&&c&&l):P=new Date(b.timestamp),z=new Date(u),q=new Date(_),b.level===o&&P>=z&&P<=q&&g<f?g++:b.level===o&&P>=z&&P<=q&&(On(b,E,O),g++,g===h&&T.destroy());break;case(i&&c):P=new Date(b.timestamp),z=new Date(u),b.level===o&&P>=z&&g<f?g++:b.level===o&&P>=z&&(On(b,E,O),g++,g===h&&T.destroy());break;case(i&&l):P=new Date(b.timestamp),q=new Date(_),b.level===o&&P<=q&&g<f?g++:b.level===o&&P<=q&&(On(b,E,O),g++,g===h&&T.destroy());break;case(c&&l):P=new Date(b.timestamp),z=new Date(u),q=new Date(_),P>=z&&P<=q&&g<f?g++:P>=z&&P<=q&&(On(b,E,O),g++,g===h&&T.destroy());break;case i:b.level===o&&g<f?g++:b.level===o&&(On(b,E,O),g++,g===h&&T.destroy());break;case c:P=new Date(b.timestamp),z=new Date(u),P>=z&&g<f?g++:P>=z&&g>=f&&(On(b,E,O),g++,g===h&&T.destroy());break;case l:P=new Date(b.timestamp),q=new Date(_),P<=q&&g<f?g++:P<=q&&g>=f&&(On(b,E,O),g++,g===h&&T.destroy());break;default:g<f?g++:(On(b,E,O),g++,g===h&&T.destroy())}}return a(U,"onLogMessage"),await HJ(T,"close"),O}a($J,"readLog");function On(e,t,r){t==="desc"?YJ(e,r):t==="asc"?KJ(e,r):r.push(e)}a(On,"pushLineToResult");function YJ(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(YJ,"insertDescending");function KJ(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(KJ,"insertAscending")});var Xl=m((Fae,yw)=>{"use strict";var Cm=require("joi"),{string:Jl,boolean:Ow,date:WJ}=Cm.types(),QJ=Pe(),{validateSchemaExists:Bae,validateTableExists:Hae,validateSchemaName:qae}=ss(),zJ=A(),JJ=Be(),Nw=Q();Nw.initSync();var XJ=Jl.invalid(Nw.get(zJ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(JJ.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(),bw={operation:Jl.valid("add_node","update_node"),node_name:XJ,subscriptions:Cm.array().items({table:Jl.optional(),schema:Jl.required(),subscribe:Ow.required(),publish:Ow.required().custom(jJ),start_time:WJ.iso()}).min(1).required()};function ZJ(e){return QJ.validateBySchema(e,Cm.object(bw))}a(ZJ,"addUpdateNodeValidator");function jJ(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(jJ,"checkForFalsy");yw.exports={addUpdateNodeValidator:ZJ,validation_schema:bw}});var ww=m((xae,Iw)=>{var e2=Pe(),t2={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Iw.exports=function(e){return e2.validateObject(e,t2)}});var Dm=m((kae,Cw)=>{"use strict";var r2=A().OPERATIONS_ENUM,Um=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=r2.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Cw.exports=Um});var Dw=m(($ae,Uw)=>{"use strict";var s2={OPERATION:"operation",REFRESH:"refresh"},Lm=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Mm=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};Uw.exports={JWTTokens:Lm,TOKEN_TYPE_ENUM:s2,JWTRSAKeys:Mm}});var tc=m((Kae,vw)=>{"use strict";var ec=require("jsonwebtoken"),Pm=require("fs-extra"),vm=V(),Ir=A(),{handleHDBError:Vt,hdb_errors:n2}=W(),{HTTP_STATUS_CODES:$t,AUTHENTICATION_ERROR_MSGS:Yt}=n2,ja=x(),Lw=ul(),qm=br(),i2=Nr().update,o2=Dm(),a2=ks(),{UserEventMsg:c2}=Fr(),Nn=Q();Nn.initSync();var Bm=require("path"),{JWTTokens:u2,JWTRSAKeys:l2,TOKEN_TYPE_ENUM:Zl}=Dw(),_2=Nn.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Nn.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",d2=Nn.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Nn.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",jl="RS256",Hm;vw.exports={createTokens:E2,validateOperationToken:h2,refreshOperationToken:f2,validateRefreshToken:Pw};async function E2(e){if(vm.isEmpty(e)||typeof e!="object")throw Vt(new Error,Yt.INVALID_AUTH_OBJECT,$t.BAD_REQUEST,void 0,void 0,!0);if(vm.isEmpty(e.username))throw Vt(new Error,Yt.USERNAME_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);if(vm.isEmpty(e.password))throw Vt(new Error,Yt.PASSWORD_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await qm.findAndValidateUser(e.username,e.password),!t)throw Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw ja.error(E),Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}let r=await e_(),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 Mw(i,r.private_key,r.passphrase),c=await ec.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:d2,algorithm:jl,subject:Zl.REFRESH}),u=Lw.hash(c),l=new o2(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await i2(l)}catch(E){ja.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw Vt(new Error,Yt.REFRESH_TOKEN_SAVE_FAILED,$t.INTERNAL_SERVER_ERROR);return a2.signalUserChange(new c2(process.pid)),new u2(o,c)}a(E2,"createTokens");async function Mw(e,t,r){return await ec.sign(e,{key:t,passphrase:r},{expiresIn:_2,algorithm:jl,subject:Zl.OPERATION})}a(Mw,"signOperationToken");async function e_(){if(Hm===void 0)try{let e=Bm.join(Nn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Bm.join(Nn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Bm.join(Nn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Pm.readFile(e)).toString(),n=(await Pm.readFile(t)).toString(),i=(await Pm.readFile(r)).toString();Hm=new l2(i,n,s)}catch(e){throw ja.error(e),Vt(new Error,Yt.NO_ENCRYPTION_KEYS,$t.INTERNAL_SERVER_ERROR)}return Hm}a(e_,"getJWTRSAKeys");async function f2(e){if(!e)throw Vt(new Error,Yt.INVALID_BODY,$t.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Vt(new Error,Yt.REFRESH_TOKEN_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);await Pw(e.refresh_token);let t=await e_(),r=await ec.decode(e.refresh_token);return{operation_token:await Mw({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(f2,"refreshOperationToken");async function h2(e){try{let t=await e_(),r=await ec.verify(e,t.public_key,{algorithms:jl,subject:Zl.OPERATION});return await qm.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ja.warn(t),t.name&&t.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}}a(h2,"validateOperationToken");async function Pw(e){let t;try{let r=await e_(),s=await ec.verify(e,r.public_key,{algorithms:jl,subject:Zl.REFRESH});t=await qm.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ja.warn(r),r.name&&r.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}if(!Lw.validate(t.refresh_token,e))throw Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED);return t}a(Pw,"validateRefreshToken")});var Fm=m((zae,qw)=>{"use strict";var m2=ww(),uo=require("passport"),S2=require("passport-local").Strategy,p2=require("passport-http").BasicStrategy,T2=require("util"),R2=br(),Hw=T2.callbackify(R2.findAndValidateUser),Qae=rr(),g2=A(),Bw=tc();uo.use(new S2(function(e,t,r){Hw(e,t,r)}));uo.use(new p2(function(e,t,r){Hw(e,t,r)}));uo.serializeUser(function(e,t){t(null,e)});uo.deserializeUser(function(e,t){t(null,e)});function A2(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":uo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===g2.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Bw.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):Bw.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:uo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(A2,"authorize");function O2(e,t){let r=m2(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(O2,"checkPermissions");qw.exports={authorize:A2,checkPermissions:O2}});var lo=m((Xae,Fw)=>{"use strict";var Gm=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},xm=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};Fw.exports={Node:Gm,NodeSubscription:xm}});var xw=m((jae,Gw)=>{"use strict";var N2=A().OPERATIONS_ENUM,km=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=N2.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Gw.exports=km});var rc=m((tce,kw)=>{"use strict";var Vm=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},$m=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)}};kw.exports={RemotePayloadObject:Vm,RemotePayloadSubscription:$m}});var $w=m((sce,Vw)=>{"use strict";var Ym=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}};Vw.exports=Ym});var Ww=m((cce,Kw)=>{"use strict";var b2=$w(),ice=xe(),Yw=ye(),y2=x(),{getSchemaPath:oce,getTransactionAuditStorePath:ace}=we(),{getDatabases:I2}=(de(),re(Ne));Kw.exports=w2;async function w2(e){let t=new b2;try{let r=I2()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await Yw.environmentDataSize(schema_path,e.name),o=await Yw.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){y2.warn(`unable to stat table dbi due to ${r}`)}return t}a(w2,"lmdbGetTableSize")});var zw=m((lce,Qw)=>{"use strict";var Km=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}};Qw.exports=Km});var _o=m((fce,jw)=>{"use strict";var C2=require("fs-extra"),U2=require("path"),Ut=require("systeminformation"),bn=x(),D2=nt(),Wm=Be(),r_=A(),L2=Ww(),Zw=Qn(),{getThreadInfo:Jw}=dt(),sS=Q();sS.initSync();var M2=zw(),{openEnvironment:dce}=ye(),{getSchemaPath:Ece}=we(),{database:P2}=(de(),re(Ne)),t_;jw.exports={getHDBProcessInfo:Xm,getNetworkInfo:jm,getDiskInfo:Zm,getMemoryInfo:Jm,getCPUInfo:zm,getTimeInfo:Qm,getSystemInformation:eS,systemInformation:v2,getTableSize:tS,getMetrics:rS};function Qm(){return Ut.time()}a(Qm,"getTimeInfo");async function zm(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:l,..._}=await Ut.cpu();_.cpu_speed=await Ut.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:T,cpus:g,...O}=await Ut.currentLoad();return O.cpus=[],g.forEach(k=>{let{raw_load:$,raw_load_idle:U,raw_load_irq:b,raw_load_nice:P,raw_load_system:z,raw_load_user:q,...Oe}=k;O.cpus.push(Oe)}),_.current_load=O,_}catch(e){return bn.error(`error in getCPUInfo: ${e}`),{}}}a(zm,"getCPUInfo");async function Jm(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return bn.error(`error in getMemoryInfo: ${e}`),{}}}a(Jm,"getMemoryInfo");async function Xm(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await C2.readFile(U2.join(sS.get(r_.CONFIG_PARAMS.ROOTPATH),r_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===r_.NODE_ERROR_CODES.ENOENT)bn.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 bn.error(`error in getHDBProcessInfo: ${t}`),e}}a(Xm,"getHDBProcessInfo");async function Zm(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Ut.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,...l}=await Ut.fsStats();return e.read_write=l,e.size=await Ut.fsSize(),e}catch(t){return bn.error(`error in getDiskInfo: ${t}`),e}}a(Zm,"getDiskInfo");async function jm(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Ut.networkInterfaceDefault(),e.latency=await Ut.inetChecksite("google.com"),(await Ut.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:l,ieee8021xState:_,carrier_changes:d,...E}=s;e.interfaces.push(E)}),(await Ut.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return bn.error(`error in getNetworkInfo: ${t}`),e}}a(jm,"getNetworkInfo");async function eS(){if(t_!==void 0)return t_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Ut.osInfo();e=c;let u=await Ut.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,t_=e,t_}catch(t){return bn.error(`error in getSystemInformation: ${t}`),e}}a(eS,"getSystemInformation");async function tS(){let e=[],t=await Zw.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await L2(s));return e}a(tS,"getTableSize");async function rS(){let e=await Zw.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=P2({database:r,table:n}).getStats();s[n]={puts:o.puts,deletes:o.deletes,txns:o.txns,pageFlushes:o.pageFlushes,writes:o.writes,pagesWritten:o.pagesWritten,timeDuringTxns:o.timeDuringTxns,timeStartTxns:o.timeStartTxns,timePageFlushes:o.timePageFlushes,timeSync:o.timeSync}}catch(i){bn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(rS,"getMetrics");async function Xw(){if(sS.get(r_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await D2.getNATSReferences(),r=await t.streams.info(Wm.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Wm.WORK_QUEUE_CONSUMER_NAMES.stream_name,Wm.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(Xw,"getNatsStreamInfo");async function v2(e){let t=new M2;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await eS(),t.time=Qm(),t.cpu=await zm(),t.memory=await Jm(),t.disk=await Zm(),t.network=await jm(),t.harperdb_processes=await Xm(),t.table_size=await tS(),t.metrics=await rS(),t.threads=await Jw(),t.replication=await Xw(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await eS();break;case"time":t.time=Qm();break;case"cpu":t.cpu=await zm();break;case"memory":t.memory=await Jm();break;case"disk":t.disk=await Zm();break;case"network":t.network=await jm();break;case"harperdb_processes":t.harperdb_processes=await Xm();break;case"table_size":t.table_size=await tS();break;case"database_metrics":case"metrics":t.metrics=await rS();break;case"threads":t.threads=await Jw();break;case"replication":t.replication=await Xw();break;default:break}return t}a(v2,"systemInformation")});var nS=m((pce,eC)=>{"use strict";var mce=require("fs-extra"),Sce=x();eC.exports={version:B2,printVersion:q2,nodeVersion:H2};var yn=ka();function B2(){if(yn)return yn.version}a(B2,"version");function H2(){if(yn&&yn.engines&&yn.engines["preferred-node"])return yn.engines["preferred-node"]}a(H2,"nodeVersion");function q2(){yn&&console.log(`HarperDB Version ${yn.version}`)}a(q2,"printVersion")});var ds=m((Ace,nC)=>{"use strict";var F2=Nr(),iS=V(),G2=require("util"),ui=A(),tC=Q();tC.initSync();var x2=Fm(),rC=Or(),{Node:Rce,NodeSubscription:gce}=lo(),k2=Ji(),V2=xw(),{RemotePayloadObject:$2,RemotePayloadSubscription:Y2}=rc(),{handleHDBError:K2,hdb_errors:W2}=W(),{HTTP_STATUS_CODES:Q2,HDB_ERROR_MSGS:z2}=W2,J2=as(),X2=_o(),Z2=nS(),{getDatabases:j2}=(de(),re(Ne)),e3=G2.promisify(x2.authorize),t3=rC.searchByHash,r3=rC.searchByValue;nC.exports={authHeaderToUser:s3,isEmpty:n3,getNodeRecord:i3,upsertNodeRecord:o3,buildNodePayloads:a3,checkClusteringEnabled:c3,getAllNodeRecords:u3,getSystemInfo:l3,reverseSubscription:sC};async function s3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await e3(t,null),e}a(s3,"authHeaderToUser");function n3(e){return e==null}a(n3,"isEmpty");async function i3(e){let t=new k2(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return t3(t)}a(i3,"getNodeRecord");async function o3(e){let t=new V2(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return F2.upsert(t)}a(o3,"upsertNodeRecord");function sC(e){if(iS.isEmpty(e.subscribe)||iS.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(sC,"reverseSubscription");function a3(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:l}=c,_=iS.getTableHashAttribute(u,l),{subscribe:d,publish:E}=sC(c),f=j2()[u]?.[l],h=new Y2(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new $2(r,t,n,s)}a(a3,"buildNodePayloads");function c3(){if(!tC.get(ui.CONFIG_PARAMS.CLUSTERING_ENABLED))throw K2(new Error,z2.CLUSTERING_NOT_ENABLED,Q2.BAD_REQUEST,void 0,void 0,!0)}a(c3,"checkClusteringEnabled");async function u3(){let e=new J2(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await r3(e))}a(u3,"getAllNodeRecords");async function l3(){let e=await X2.getSystemInformation();return{hdb_version:Z2.version(),node_version:e.node_version,platform:e.platform}}a(l3,"getSystemInfo")});var oS=m((Nce,dC)=>{"use strict";var s_=nt(),iC=V(),oC=Be(),aC=A(),n_=x(),cC=$l(),_3=Oh(),{RemotePayloadObject:d3}=rc(),{handleHDBError:uC,hdb_errors:E3}=W(),{HTTP_STATUS_CODES:lC}=E3,{NodeSubscription:_C}=lo();dC.exports=f3;async function f3(e,t){let r;try{r=await s_.request(`${t}.${oC.REQUEST_SUFFIX}`,new d3(aC.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),n_.trace("Response from remote describe all request:",r)}catch(o){n_.error(`addNode received error from describe all request to remote node: ${o}`);let c=s_.requestErrorHandler(o,"add_node",t);throw uC(new Error,c,lC.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===oC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw uC(new Error,o,lC.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===aC.SYSTEM_SCHEMA_NAME){await s_.createLocalTableStream(c,u);let h=new _C(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=iC.doesSchemaExist(c),_=s[c]!==void 0,d=u?iC.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(n_.trace(`addNode creating schema: ${c}`),await cC.createSchema({operation:"create_schema",schema:c})),!d&&E){n_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new _3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await cC.createTable(h)}await s_.createLocalTableStream(c,u);let f=new _C(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(f3,"reviewSubscriptions")});var ic=m((yce,hC)=>{"use strict";var{handleHDBError:i_,hdb_errors:h3}=W(),{HTTP_STATUS_CODES:o_}=h3,{addUpdateNodeValidator:m3}=Xl(),sc=x(),fC=A(),EC=Be(),S3=V(),aS=nt(),nc=ds(),p3=Q(),T3=oS(),{Node:R3,NodeSubscription:g3}=lo(),{broadcast:A3}=dt(),O3="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",N3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",b3=p3.get(fC.CONFIG_PARAMS.CLUSTERING_NODENAME);hC.exports=y3;async function y3(e,t=!1){sc.trace("addNode called with:",e),nc.checkClusteringEnabled();let r=m3(e);if(r)throw i_(r,r.message,o_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await nc.getNodeRecord(s);if(!S3.isEmptyOrZeroLength(d))throw i_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,o_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await T3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=O3,o;let c=nc.buildNodePayloads(n,b3,fC.OPERATIONS_ENUM.ADD_NODE,await nc.getSystemInfo());sc.trace("addNode sending remote payload:",c);let u;try{u=await aS.request(`${s}.${EC.REQUEST_SUFFIX}`,c)}catch(d){sc.error(`addNode received error from request: ${d}`);let E=aS.requestErrorHandler(d,"add_node",s);throw i_(new Error,E,o_.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===EC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw i_(new Error,d,o_.INTERNAL_SERVER_ERROR,"error",d)}sc.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];sc.trace("Add node updating work stream for node:",s,"subscriptions:",f),await aS.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new g3(f.schema,f.table,f.publish,f.subscribe))}let _=new R3(s,l,u.system_info);return await nc.upsertNodeRecord(_),A3({type:"nats_update"}),i.length>0?o.message=N3:o.message=`Successfully added '${s}' to manifest`,o}a(y3,"addNode")});var uS=m((wce,pC)=>{"use strict";var{handleHDBError:a_,hdb_errors:I3}=W(),{HTTP_STATUS_CODES:c_}=I3,{addUpdateNodeValidator:w3}=Xl(),oc=x(),SC=A(),mC=Be(),C3=V(),cS=nt(),ac=ds(),U3=Q(),{cloneDeep:D3}=require("lodash"),L3=oS(),{NodeSubscription:M3}=lo(),{broadcast:P3}=dt(),v3="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",B3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",H3=U3.get(SC.CONFIG_PARAMS.CLUSTERING_NODENAME);pC.exports=q3;async function q3(e){oc.trace("updateNode called with:",e),ac.checkClusteringEnabled();let t=w3(e);if(t)throw a_(t,t.message,c_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=D3(await ac.getNodeRecord(r));if(C3.isEmptyOrZeroLength(s))throw a_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,c_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await L3(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=v3,o;let c=ac.buildNodePayloads(n,H3,SC.OPERATIONS_ENUM.UPDATE_NODE,await ac.getSystemInfo());oc.trace("updateNode sending remote payload:",c);let u;try{u=await cS.request(`${r}.${mC.REQUEST_SUFFIX}`,c)}catch(l){oc.error(`updateNode received error from request: ${l}`);let _=cS.requestErrorHandler(l,"update_node",r);throw a_(new Error,_,c_.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===mC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw a_(new Error,l,c_.INTERNAL_SERVER_ERROR,"error",l)}oc.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];oc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await cS.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await F3(s[0],n,u.system_info),i.length>0?o.message=B3:o.message=`Successfully updated '${r}'`,o}a(q3,"updateNode");async function F3(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,l=e.subscriptions.length;u<l;u++){let _=s.subscriptions[u];if(_.schema===o.schema&&_.table===o.table){_.publish=o.publish,_.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new M3(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await ac.upsertNodeRecord(s),P3({type:"nats_update"})}a(F3,"updateNodeTable")});var OC=m((Uce,AC)=>{"use strict";var gC=require("joi"),{string:TC}=gC.types(),G3=Pe(),RC=A(),x3=Q(),k3=Be();AC.exports=V3;function V3(e){let t=TC.invalid(x3.get(RC.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(k3.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=gC.object({operation:TC.valid(RC.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return G3.validateBySchema(e,r)}a(V3,"removeNodeValidator")});var uc=m((Lce,CC)=>{"use strict";var{handleHDBError:NC,hdb_errors:$3}=W(),{HTTP_STATUS_CODES:bC}=$3,Y3=OC(),cc=x(),yC=ds(),K3=V(),u_=A(),IC=Be(),wC=nt(),W3=Q(),{RemotePayloadObject:Q3}=rc(),{NodeSubscription:z3}=lo(),J3=Pa(),X3=jn(),{broadcast:Z3}=dt(),j3=W3.get(u_.CONFIG_PARAMS.CLUSTERING_NODENAME);CC.exports=e4;async function e4(e){cc.trace("removeNode called with:",e),yC.checkClusteringEnabled();let t=Y3(e);if(t)throw NC(t,t.message,bC.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await yC.getNodeRecord(r);if(K3.isEmptyOrZeroLength(s))throw NC(new Error,`Node '${r}' was not found.`,bC.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new Q3(u_.OPERATIONS_ENUM.REMOVE_NODE,j3,[]),i,o=!1;try{i=await wC.request(`${r}.${IC.REQUEST_SUFFIX}`,n),cc.trace("Remove node reply from remote node:",r,i)}catch(u){cc.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];cc.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new z3(_.schema,_.table,!1,!1);await wC.updateWorkStream(d,r)}let c=new J3(u_.SYSTEM_SCHEMA_NAME,u_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await X3.deleteRecord(c),Z3({type:"nats_update"}),i?.status===IC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(cc.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(e4,"removeNode")});var LC=m((Pce,DC)=>{"use strict";var UC=require("joi"),{string:t4,array:r4}=UC.types(),s4=Pe(),n4=Xl();DC.exports=i4;function i4(e){let t=UC.object({operation:t4.valid("configure_cluster").required(),connections:r4.items(n4.validation_schema).required()});return s4.validateBySchema(e,t)}a(i4,"configureClusterValidator")});var lS=m((Bce,HC)=>{"use strict";var o4=A(),l_=x(),a4=V(),c4=uc(),u4=ic(),MC=ds(),l4=LC(),{handleHDBError:PC,hdb_errors:_4}=W(),{HTTP_STATUS_CODES:vC}=_4,d4="Configure cluster complete.",E4="Failed to configure the cluster. Check the logs for more details.",f4="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";HC.exports=h4;async function h4(e){l_.trace("configure cluster called with:",e),MC.checkClusteringEnabled();let t=l4(e);if(t)throw PC(t,t.message,vC.BAD_REQUEST,void 0,void 0,!0);let r=await MC.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(BC(c4,{operation:o4.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);l_.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let E=0;E<o;E++){let f=e.connections[E];i.push(BC(u4,f,f.node_name))}let c=await Promise.allSettled(i);l_.trace("All results from configure_cluster add node:",c);let u=[],l=[],_=!1,d=n.concat(c);for(let E=0,f=d.length;E<f;E++){let h=d[E];h.status==="rejected"&&(l_.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(a4.isEmptyOrZeroLength(u))return{message:d4,connections:l};if(_)return{message:f4,failed_nodes:u,connections:l};throw PC(new Error,E4,vC.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(h4,"configureCluster");async function BC(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(BC,"functionWrapper")});var FC=m((qce,qC)=>{"use strict";var __=require("joi"),m4=Pe(),{validateSchemaExists:S4,validateTableExists:p4,validateSchemaName:T4}=ss(),R4=__.object({operation:__.string().valid("purge_stream"),schema:__.string().custom(S4).custom(T4).required(),table:__.string().custom(p4).required()});function g4(e){return m4.validateBySchema(e,R4)}a(g4,"purgeStreamValidator");qC.exports=g4});var _S=m((Gce,GC)=>{"use strict";var{handleHDBError:A4,hdb_errors:O4}=W(),{HTTP_STATUS_CODES:N4}=O4,b4=FC(),y4=nt(),I4=ds();GC.exports=w4;async function w4(e){let t=b4(e);if(t)throw A4(t,t.message,N4.BAD_REQUEST,void 0,void 0,!0);I4.checkClusteringEnabled();let{schema:r,table:s}=e;return await y4.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(w4,"purgeStream")});var E_=m((kce,KC)=>{"use strict";var ES=ds(),C4=nt(),VC=Q(),d_=A(),li=Be(),U4=V(),dS=x(),{RemotePayloadObject:D4}=rc(),{ErrorCode:xC}=require("nats"),kC=VC.get(d_.CONFIG_PARAMS.CLUSTERING_ENABLED),$C=VC.get(d_.CONFIG_PARAMS.CLUSTERING_NODENAME);KC.exports={clusterStatus:L4,buildNodeStatus:YC};async function L4(){let e={node_name:$C,is_enabled:kC,connections:[]};if(!kC)return e;let t=await ES.getAllNodeRecords();if(U4.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(YC(t[s],e.connections));return await Promise.allSettled(r),e}a(L4,"clusterStatus");async function YC(e,t){let r=e.name,s=new D4(d_.OPERATIONS_ENUM.CLUSTER_STATUS,$C,void 0,await ES.getSystemInfo()),n,i,o=li.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await C4.request(li.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===li.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=li.CLUSTER_STATUS_STATUSES.CLOSED,dS.error(`Error getting node status from ${r} `,n))}catch(u){dS.warn(`Error getting node status from ${r}`,u),u.code===xC.NoResponders?o=li.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===xC.Timeout?o=li.CLUSTER_STATUS_STATUSES.TIMEOUT:o=li.CLUSTER_STATUS_STATUSES.CLOSED}let c=new M4(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!==d_.PRE_4_0_0_VERSION&&await ES.upsertNodeRecord(u)}catch(u){dS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(YC,"buildNodeStatus");function M4(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(M4,"NodeStatusObject")});var hS=m(($ce,WC)=>{"use strict";var{handleHDBError:P4,hdb_errors:v4}=W(),{HTTP_STATUS_CODES:B4}=v4,H4=nt(),q4=ds(),fS=V(),f_=require("joi"),F4=Pe(),G4=2e3,x4=f_.object({timeout:f_.number().min(1),connected_nodes:f_.boolean(),routes:f_.boolean()});WC.exports=k4;async function k4(e){q4.checkClusteringEnabled();let t=F4.validateBySchema(e,x4);if(t)throw P4(t,t.message,B4.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||fS.autoCastBoolean(s),o=n===void 0||fS.autoCastBoolean(n),c={nodes:[]},u=await H4.getServerList(r??G4),l={};if(i)for(let _=0,d=u.length;_<d;_++){let E=u[_].statsz;E&&(l[u[_].server.name]=E.routes)}for(let _=0,d=u.length;_<d;_++){if(u[_].statsz)continue;let E=u[_].server,f=u[_].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[_].response_time};i&&(h.connected_nodes=l[E.name]?l[E.name].map(p=>p.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(p=>({host:p.split(":")[0],port:fS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(k4,"clusterNetwork")});var XC=m((Kce,JC)=>{"use strict";var mS=require("joi"),QC=Pe(),{route_constraints:zC}=bE();JC.exports={setRoutesValidator:V4,deleteRoutesValidator:$4};function V4(e){let t=mS.object({server:mS.valid("hub","leaf").required(),routes:zC.required()});return QC.validateBySchema(e,t)}a(V4,"setRoutesValidator");function $4(e){let t=mS.object({routes:zC.required()});return QC.validateBySchema(e,t)}a($4,"deleteRoutesValidator")});var pS=m((Qce,tU)=>{"use strict";var _i=Tr(),SS=V(),h_=A(),ZC=XC(),{handleHDBError:jC,hdb_errors:Y4}=W(),{HTTP_STATUS_CODES:eU}=Y4,K4="cluster routes successfully set",W4="cluster routes successfully deleted";tU.exports={setRoutes:Q4,getRoutes:z4,deleteRoutes:J4};function Q4(e){let t=ZC.setRoutesValidator(e);if(t)throw jC(t,t.message,eU.BAD_REQUEST,void 0,void 0,!0);let r=_i.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 l=e.routes[c];l.port=SS.autoCast(l.port);let _=s.some(E=>E.host===l.host&&E.port===l.port),d=n.some(E=>E.host===l.host&&E.port===l.port);_||d?i.push(l):(s.push(l),o.push(l))}return e.server==="hub"?_i.updateConfigValue(h_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):_i.updateConfigValue(h_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:K4,set:o,skipped:i}}a(Q4,"setRoutes");function z4(){let e=_i.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(z4,"getRoutes");function J4(e){let t=ZC.deleteRoutesValidator(e);if(t)throw jC(t,t.message,eU.BAD_REQUEST,void 0,void 0,!0);let r=_i.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let l=0,_=e.routes.length;l<_;l++){let d=e.routes[l],E=!1;for(let f=0,h=s.length;f<h;f++){let p=s[f];if(d.host===p.host&&d.port===p.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,p=n.length;h<p;h++){let T=n[h];if(d.host===T.host&&d.port===T.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=SS.isEmptyOrZeroLength(s)?null:s,_i.updateConfigValue(h_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=SS.isEmptyOrZeroLength(n)?null:n,_i.updateConfigValue(h_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:W4,deleted:i,skipped:o}}a(J4,"deleteRoutes")});var sU=m((Jce,rU)=>{"use strict";var lc=require("alasql"),di=require("recursive-iterator"),$r=x(),X4=V(),_c=A(),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,j4(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=>_c.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=>!_c.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][_c.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Z4(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(l=>({attribute_name:l.attribute}));let u=this.affected_attributes.get(i).get(o).filter(l=>!_c.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new lc.yy.Column({columnid:l});n.tableid&&(_.tableid=n.tableid),this.ast.columns.push(_),u.includes(l)||u.push(l)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function Z4(e){return e.filter(t=>t[_c.PERMS_CRUD_ENUM.READ])}a(Z4,"filterReadRestrictedAttrs");function j4(e,t,r,s,n){eX(e,t,r,s,n)}a(j4,"interpretAST");function dc(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(dc,"addSchemaTableToMap");function eX(e,t,r,s,n){if(!e){$r.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof lc.yy.Insert?nX(e,t,r):e instanceof lc.yy.Select?tX(e,t,r,s,n):e instanceof lc.yy.Update?rX(e,t,r):e instanceof lc.yy.Delete?sX(e,t,r):$r.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(eX,"getRecordAttributesAST");function tX(e,t,r,s,n){if(!e){$r.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(X4.isEmptyOrZeroLength(i)){$r.error("No schema specified");return}e.from.forEach(c=>{dc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),dc(c.table,t,r,s,n)});let o=new di(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{$r.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(c.columnid)<0&&t.get(l).get(u).push(c.columnid)}if(e.where){let c=new di(e.where),u=e.from[0].tableid;for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid?l.tableid:u;if(!t.get(i).has(_))if(r.has(_))_=r.get(_);else{$r.info(`table specified as ${_} not found.`);continue}t.get(i).get(_).indexOf(l.columnid)<0&&t.get(i).get(_).push(l.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new di(c.on);for(let{node:l}of u)if(l&&l.columnid){let _=l.tableid,d=n.get(_);if(!t.get(d).has(_))if(r.has(_))_=r.get(_);else{$r.info(`table specified as ${_} not found.`);continue}t.get(d).get(_).indexOf(l.columnid)<0&&t.get(d).get(_).push(l.columnid)}}),e.order){let c=new di(e.order);for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid,_=s.has(l)?s.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{$r.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(tX,"getSelectAttributes");function rX(e,t,r){if(!e){$r.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new di(e.columns),n=e.table.databaseid;dc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&RS(e.table.tableid,n,i.columnid,t,r)}a(rX,"getUpdateAttributes");function sX(e,t,r){if(!e){$r.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new di(e.where),n=e.table.databaseid;dc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&RS(e.table.tableid,n,i.columnid,t,r)}a(sX,"getDeleteAttributes");function nX(e,t,r){if(!e){$r.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new di(e.columns),n=e.into.databaseid;dc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&RS(e.into.tableid,n,i.columnid,t,r)}a(nX,"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");rU.exports=TS});var OS=m((Zce,aU)=>{var m_=Na(),nU=require("chalk"),lr=x(),iU=require("prompt"),{promisify:iX}=require("util"),gS=A(),oX=require("fs-extra"),aX=require("path"),cX=V(),uX=nS(),oU=Q();oU.initSync();var lX=require("moment"),_X=iX(iU.get),dX=aX.join(oU.getHdbBasePath(),gS.LICENSE_KEY_DIR_NAME,gS.LICENSE_FILE_NAME,gS.LICENSE_FILE_NAME);aU.exports={getFingerprint:fX,setLicense:EX,parseLicense:AS,register:hX,getRegistrationInfo:SX};async function EX(e){if(e&&e.key&&e.company){try{lr.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 lr.error(r),lr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(EX,"setLicense");async function fX(){let e={};try{e=await m_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw lr.error(r),lr.error(t),new Error(r)}return e}a(fX,"getFingerprint");async function AS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");lr.info("Validating license input...");let r=m_.validateLicense(e,t);if(lr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(lr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(lr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{lr.info("writing license to disk"),await oX.writeFile(dX,JSON.stringify({license_key:e,company:t}))}catch(s){throw lr.error("Failed to write License"),s}return"Registration successful."}a(AS,"parseLicense");async function hX(){let e=await mX();return AS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(hX,"register");async function mX(){let e=await m_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:nU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:nU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{iU.start()}catch(s){lr.error(s)}let r;try{r=await _X(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(mX,"promptForRegistration");async function SX(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await m_.getLicense()}catch(r){throw lr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(cX.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=uX.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=lX.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(SX,"getRegistrationInfo")});var uU=m((eue,cU)=>{"use strict";var pX=Be(),NS=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,l,_,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+pX.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:l,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:_,port:d,routes:E,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};cU.exports=NS});var dU=m((rue,_U)=>{"use strict";var lU=Be(),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+lU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+lU.SERVER_SUFFIX.LEAF},this.tls={cert_file:l,key_file:_,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"}};_U.exports=bS});var fU=m((nue,EU)=>{"use strict";var yS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};EU.exports=yS});var mU=m((oue,hU)=>{"use strict";var TX=Be(),IS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+TX.SERVER_SUFFIX.ADMIN,this.password=r}};hU.exports=IS});var US=m((cue,TU)=>{"use strict";var Ec=require("path"),R_=require("fs-extra"),RX=uU(),gX=dU(),AX=fU(),OX=mU(),wS=br(),Eo=V(),Kt=Tr(),T_=A(),S_=Be(),{CONFIG_PARAMS:ze}=T_,hc=x(),g_=Q(),SU=Gs(),CS=nt(),fc="clustering",NX=1e4,pU=5;TU.exports={generateNatsConfig:bX,removeNatsConfig:yX};async function bX(e=!1,t=void 0){g_.initSync();let r=g_.get(ze.ROOTPATH),s=Ec.join(r,fc,S_.PID_FILES.HUB),n=Ec.join(r,fc,S_.PID_FILES.LEAF),i=Kt.getConfigFromFile(ze.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Ec.join(r,fc,S_.NATS_CONFIG_FILES.HUB_SERVER),c=Ec.join(r,fc,S_.NATS_CONFIG_FILES.LEAF_SERVER),u=Kt.getConfigFromFile(ze.CLUSTERING_TLS_CERTIFICATE),l=Kt.getConfigFromFile(ze.CLUSTERING_TLS_PRIVATEKEY),_=Kt.getConfigFromFile(ze.CLUSTERING_TLS_CERT_AUTH),d=Kt.getConfigFromFile(ze.CLUSTERING_TLS_INSECURE),E=Kt.getConfigFromFile(ze.CLUSTERING_TLS_VERIFY),f=Kt.getConfigFromFile(ze.CLUSTERING_NODENAME),h=Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await CS.checkNATSServerInstalled()||A_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await wS.listUsers(),T=Kt.getConfigFromFile(ze.CLUSTERING_USER),g=await wS.getClusterUser();(Eo.isEmpty(g)||g.active!==!0)&&A_(`Invalid cluster user '${T}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await p_(ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await p_(ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await p_(ze.CLUSTERING_HUBSERVER_NETWORK_PORT),await p_(ze.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],k=[];for(let[Oe,Ze]of p.entries())Ze.role.role===T_.ROLE_TYPES_ENUM.CLUSTER_USER&&Ze.active&&(O.push(new OX(Ze.username,SU.decrypt(Ze.hash))),k.push(new AX(Ze.username,SU.decrypt(Ze.hash))));let $=[],{hub_routes:U}=Kt.getClusteringRoutes();if(!Eo.isEmptyOrZeroLength(U))for(let Oe of U)$.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${Oe.host}:${Oe.port}`);let b=new RX(Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_CLUSTER_NAME),Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),$,O,k);_==null&&(delete b.tls.ca_file,delete b.leafnodes.tls.ca_file),t=Eo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===T_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await R_.writeJson(o,b),hc.trace(`Hub server config written to ${o}`));let P=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,z=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,q=new gX(Kt.getConfigFromFile(ze.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[P],[z],O,k,u,l,_,d);_==null&&delete q.tls.ca_file,(t===void 0||t===T_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await R_.writeJson(c,q),hc.trace(`Leaf server config written to ${c}`))}a(bX,"generateNatsConfig");async function p_(e){let t=g_.get(e);return Eo.isEmpty(t)&&A_(`port undefined for '${e}'`),await Eo.isPortTaken(t)&&A_(`'${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(p_,"isPortAvailable");function A_(e){let t=`Error generating clustering config: ${e}`;hc.error(t),console.error(t),process.exit(1)}a(A_,"generateNatsConfigError");async function yX(e){let{port:t,config_file:r}=CS.getServerConfig(e),{username:s,decrypt_hash:n}=await wS.getClusterUser(),i=0,o=500;for(;i<pU;){try{let l=await CS.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){hc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=pU)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check the ${e} log for further details.`);await Eo.async_set_timeout(o*i)}let c="0".repeat(NX),u=Ec.join(g_.get(ze.ROOTPATH),fc,r);await R_.writeFile(u,c),await R_.remove(u),hc.notify(e,"started.")}a(yX,"removeNatsConfig")});var bU=m((lue,NU)=>{"use strict";var _r=Q(),IX=Na(),oe=A(),mc=Be(),Ys=require("path"),{PACKAGE_ROOT:N_}=A(),RU=Q(),O_=V(),fo="/dev/null",wX=Ys.join(N_,"launchServiceScripts"),gU=Ys.join(N_,"utility/scripts"),CX=Ys.join(gU,oe.HDB_RESTART_SCRIPT),AU=Ys.resolve(N_,"dependencies",`${process.platform}-${process.arch}`,mc.NATS_BINARY_NAME);function OU(){let t=IX.licenseSearch().ram_allocation||oe.RAM_ALLOCATION_ENUM.DEFAULT,r=oe.MEM_SETTING_KEY+t,s={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return O_.noBootFile()&&(s[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=O_.getEnvCliRootPath()),{name:oe.PROCESS_DESCRIPTORS.HDB,script:oe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:N_}}a(OU,"generateMainServerConfig");var UX=9930;function DX(){_r.initSync(!0);let e=_r.get(oe.CONFIG_PARAMS.ROOTPATH),t=Ys.join(e,"clustering",mc.NATS_CONFIG_FILES.HUB_SERVER),r=Ys.join(_r.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=RU.get(oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=mc.LOG_LEVEL_FLAGS[_r.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==UX?"-"+s:""),script:AU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return _r.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=fo,i.error_file=fo),i}a(DX,"generateNatsHubServerConfig");var LX=9940;function MX(){_r.initSync(!0);let e=_r.get(oe.CONFIG_PARAMS.ROOTPATH),t=Ys.join(e,"clustering",mc.NATS_CONFIG_FILES.LEAF_SERVER),r=Ys.join(_r.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=RU.get(oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=mc.LOG_LEVEL_FLAGS[_r.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==LX?"-"+s:""),script:AU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return _r.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=fo,i.error_file=fo),i}a(MX,"generateNatsLeafServerConfig");function PX(){_r.initSync();let e=Ys.join(_r.get(oe.CONFIG_PARAMS.LOGGING_ROOT),oe.LOG_NAMES.HDB),t={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:oe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:wX,autorestart:!1};return _r.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=fo,t.error_file=fo),t}a(PX,"generateClusteringUpgradeV4ServiceConfig");function vX(){let e={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.RESTART_HDB};return O_.noBootFile()&&(e[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=O_.getEnvCliRootPath()),{...{name:oe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:gU},script:CX}}a(vX,"generateRestart");function BX(){return{apps:[OU()]}}a(BX,"generateAllServiceConfigs");NU.exports={generateAllServiceConfigs:BX,generateMainServerConfig:OU,generateRestart:vX,generateNatsHubServerConfig:DX,generateNatsLeafServerConfig:MX,generateClusteringUpgradeV4ServiceConfig:PX}});var PS=m((Sue,FU)=>{"use strict";var Re=A(),HX=V(),Sc=US(),pc=nt(),Es=Be(),In=bU(),b_=Q(),Ks=x(),qX=ds(),{startWorker:yU,onMessageFromWorkers:FX}=dt(),GX=_o(),xX=require("util"),wU=require("child_process"),{execFile:kX}=wU,due=xX.promisify(wU.exec),Eue=require("systeminformation"),fe;FU.exports={enterPM2Mode:VX,start:Ei,stop:DS,reload:CU,restart:UU,list:LS,describe:LU,connect:Ws,kill:QX,startAllServices:zX,startService:MS,getUniqueServicesList:MU,restartAllServices:JX,isServiceRegistered:PU,reloadStopStart:vU,restartHdb:DU,deleteProcess:KX,startClusteringProcesses:HU,startClusteringThreads:qU,isHdbRestartRunning:WX,isClusteringRunning:ZX,stopClustering:XX,reloadClustering:jX};var{PACKAGE_ROOT:fue}=A(),hue=A(),{loggerWithTag:mue}=Ks,Tc=!1;FX(e=>{e.type==="restart"&&b_.initSync(!0)});function VX(){Tc=!0}a(VX,"enterPM2Mode");function Ws(){return fe||(fe=require("pm2")),new Promise((e,t)=>{fe.connect((r,s)=>{Ks.setupConsoleLogging(),r&&t(r),e(s)})})}a(Ws,"connect");var Wt,$X=10,IU;function Ei(e){if(Tc)return YX(e);let t=kX(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Wt.indexOf(t);i>-1&&Wt.splice(i,1),!IU&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<$X&&Ei(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=b_.get(Re.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&Es.LOG_LEVEL_HIERARCHY[i]>=Es.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Es.LOG_LEVELS.ERR||l===Es.LOG_LEVELS.WRN?Ks.OUTPUTS.STDERR:Ks.OUTPUTS.STDOUT;Ks.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=Es.LOG_LEVELS[d]}if(Es.LOG_LEVEL_HIERARCHY[i]>=Es.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===Es.LOG_LEVELS.ERR||l===Es.LOG_LEVELS.WRN?Ks.OUTPUTS.STDERR:Ks.OUTPUTS.STDOUT;Ks.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Wt){Wt=[];let n=a(()=>{IU=!0,Wt&&(Wt.map(i=>i.kill()),process.exit(0))},"kill_children");process.on("exit",n),process.on("SIGINT",n),process.on("SIGQUIT",n),process.on("SIGTERM",n)}Wt.push(t)}a(Ei,"start");function YX(e){return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.start(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(YX,"startWithPM2");function DS(e){if(!Tc){for(let t of Wt||[])t.name===e&&(Wt.splice(Wt.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.stop(e,async(s,n)=>{s&&(fe.disconnect(),r(s)),fe.delete(e,(i,o)=>{i&&(fe.disconnect(),r(s)),fe.disconnect(),t(o)})})})}a(DS,"stop");function CU(e){return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.reload(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(CU,"reload");function UU(e){if(!Tc)for(let t of Wt||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.restart(e,(s,n)=>{fe.disconnect(),t(n)})})}a(UU,"restart");function KX(e){return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.delete(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(KX,"deleteProcess");async function DU(){await Ei(In.generateRestart())}a(DU,"restartHdb");async function WX(){let e=await LS();for(let t in e)if(e[t].name===Re.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(WX,"isHdbRestartRunning");function LS(){return new Promise(async(e,t)=>{try{await Ws()}catch(r){t(r)}fe.list((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(LS,"list");function LU(e){return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.describe(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(LU,"describe");function QX(){if(!Tc){for(let e of Wt||[])e.kill();Wt=[];return}return new Promise(async(e,t)=>{try{await Ws()}catch(r){t(r)}fe.killDaemon((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(QX,"kill");async function zX(){try{await HU(),await qU(),await Ei(In.generateAllServiceConfigs())}catch(e){throw fe.disconnect(),e}}a(zX,"startAllServices");async function MS(e){try{let t;switch(e=e.toLowerCase(),e){case Re.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=In.generateMainServerConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=In.generateNatsIngestServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=In.generateNatsReplyServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=In.generateNatsHubServerConfig(),await Ei(t),await Sc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=In.generateNatsLeafServerConfig(),await Ei(t),await Sc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=In.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ei(t)}catch(t){throw fe.disconnect(),t}}a(MS,"startService");async function MU(){try{let e=await LS(),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 fe.disconnect(),e}}a(MU,"getUniqueServicesList");async function JX(e=[]){try{let t=!1,r=await MU();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Re.PROCESS_DESCRIPTORS.HDB?t=!0:await UU(o))}t&&await vU(Re.PROCESS_DESCRIPTORS.HDB)}catch(t){throw fe.disconnect(),t}}a(JX,"restartAllServices");async function PU(e){if(Wt?.find(r=>r.name===e))return!0;let t=await GX.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(PU,"isServiceRegistered");async function vU(e){let t=e===Re.PROCESS_DESCRIPTORS.HDB?b_.get(Re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):b_.get(Re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await LU(e),s=HX.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await DS(e),await MS(e)):e===Re.PROCESS_DESCRIPTORS.HDB?await DU():await CU(e)}a(vU,"reloadStopStart");var BU;async function HU(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];await MS(t)}}a(HU,"startClusteringProcesses");async function qU(){BU=yU(Re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await pc.createWorkQueueStream(Es.WORK_QUEUE_CONSUMER_NAMES),await pc.updateIngestStreamConsumer(),await pc.updateLocalStreams();let e=await qX.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Re.PRE_4_0_0_VERSION){Ks.info("Starting clustering upgrade 4.0.0 process"),yU(Re.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(qU,"startClusteringThreads");async function XX(){for(let e in Re.CLUSTERING_PROCESSES)if(e!==Re.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Re.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await BU.terminate();else{let t=Re.CLUSTERING_PROCESSES[e];await DS(t)}}a(XX,"stopClustering");async function ZX(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];if(await PU(t)===!1)return!1}return!0}a(ZX,"isClusteringRunning");async function jX(){await Sc.generateNatsConfig(!0),await pc.reloadNATSHub(),await pc.reloadNATSLeaf(),await Sc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Sc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(jX,"reloadClustering")});var xS=m((Tue,YU)=>{"use strict";var eZ=require("minimist"),{isMainThread:HS,parentPort:kU}=require("worker_threads"),He=A(),{PROCESS_DESCRIPTORS_VALIDATE:Rc}=He,hs=x(),qS=V(),y_=US(),ho=nt(),vS=Be(),VU=Tr(),ms=PS(),GU=_o(),tZ=fE(),{restartWorkers:I_,onMessageByType:rZ}=dt(),{handleHDBError:sZ,hdb_errors:nZ}=W(),{HTTP_STATUS_CODES:iZ}=nZ,w_=Q();w_.initSync();var gc=`Restarting HarperDB. This may take up to ${He.RESTART_TIMEOUT_MS/1e3} seconds.`,oZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",xU="Clustering is not enabled so cannot be restarted",aZ="Invalid service",fi,Yr;YU.exports={restart:$U,restartService:FS};HS&&rZ(He.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?FS({service:e.workerType}):$U({operation:"restart"})});async function $U(e){Yr=Object.keys(e).length===0,fi=await ms.isServiceRegistered(He.HDB_PROC_DESCRIPTOR);let t=eZ(process.argv);if(t.service){await FS(t);return}if(Yr&&!fi){console.error(oZ);return}if(Yr&&console.log(gc),fi){ms.enterPM2Mode(),hs.notify(gc);let r=tZ(Object.keys(He.CONFIG_PARAM_MAP),!0);return qS.isEmptyOrZeroLength(Object.keys(r))||VU.updateConfigValue(void 0,void 0,r,!0,!0),uZ(),gc}return HS?(hs.notify(gc),await GS(),setTimeout(()=>{I_()},50)):kU.postMessage({type:He.ITC_EVENT_TYPES.RESTART}),gc}a($U,"restart");async function FS(e){let{service:t}=e;if(He.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw sZ(new Error,aZ,iZ.BAD_REQUEST,void 0,void 0,!0);if(fi=await ms.isServiceRegistered(He.HDB_PROC_DESCRIPTOR),!HS)return kU.postMessage({type:He.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Rc.clustering:if(!w_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=xU;break}Yr&&console.log("Restarting clustering"),hs.notify("Restarting clustering"),await GS();break;case Rc.clustering_config:case Rc["clustering config"]:if(!w_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=xU;break}Yr&&console.log("Restarting clustering_config"),hs.notify("Restarting clustering_config"),await ms.reloadClustering();break;case"custom_functions":case"custom functions":case Rc.harperdb:case Rc.http_workers:if(Yr&&!fi){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Yr&&console.log("Restarting http_workers"),hs.notify("Restarting http_workers"),fi?await ms.restart(He.HDB_PROC_DESCRIPTOR):setTimeout(()=>{I_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(hs.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(FS,"restartService");async function cZ(){await ho.publishToStream(`${vS.SUBJECT_PREFIXES.TXN}.${vS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,vS.WORK_QUEUE_CONSUMER_NAMES.stream_name,ho.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(cZ,"postDummyNatsMsg");async function uZ(){await GS(),await ms.restart(He.HDB_PROC_DESCRIPTOR),await qS.async_set_timeout(2e3),w_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await BS(),Yr&&(await ho.closeConnection(),process.exit(0))}a(uZ,"restartPM2Mode");async function GS(){if(!VU.getConfigFromFile(He.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await GU.getHDBProcessInfo()).clustering.length===0)hs.trace("Clustering not running, restart will start clustering services"),await y_.generateNatsConfig(!0),await ms.startClusteringProcesses(),await ms.startClusteringThreads(),await BS(),Yr&&await ho.closeConnection();else{await cZ(),await y_.generateNatsConfig(!0),fi?(hs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ms.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ms.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await GU.getHDBProcessInfo()).clustering.forEach(n=>{hs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await qS.async_set_timeout(3e3),await BS(),await ho.updateLocalStreams(),Yr&&await ho.closeConnection(),hs.trace("Restart clustering restarting ingest and reply service threads");let t=I_(He.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=I_(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(GS,"restartClustering");async function BS(){await y_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await y_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(BS,"removeNatsConfig")});var rD=m((Aue,tD)=>{"use strict";var gue=require("lodash"),Qt=A(),{handleHDBError:KU,hdb_errors:lZ}=W(),{HDB_ERROR_MSGS:_Z,HTTP_STATUS_CODES:dZ}=lZ,kS=x();tD.exports={getRolePermissions:fZ};var hi=Object.create(null),EZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),JU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),XU=a((e=!1,t=!1,r=!1,s=!1)=>({[Qt.PERMS_CRUD_ENUM.READ]:e,[Qt.PERMS_CRUD_ENUM.INSERT]:t,[Qt.PERMS_CRUD_ENUM.UPDATE]:r,[Qt.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),VS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...XU(t,r,s,n)}),"table_perms_template"),WU=a((e,t=XU())=>({attribute_name:e,describe:eD(t),[Ac]:t[Ac],[$S]:t[$S],[YS]:t[YS]}),"attr_perms_template"),QU=a((e,t=!1)=>({attribute_name:e,describe:t,[Ac]:t}),"timestamp_attr_perms_template"),{READ:Ac,INSERT:$S,UPDATE:YS}=Qt.PERMS_CRUD_ENUM,ZU=Object.values(Qt.PERMS_CRUD_ENUM),jU=[Ac,$S,YS];function fZ(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[Qt.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(hi[t]&&hi[t].key===s)return hi[t].perms;let n=hZ(e,r);return hi[t]?hi[t].key=s:hi[t]=EZ(s),hi[t].perms=n,n}catch(r){if(!e[Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Qt.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 kS.error(s),kS.debug(r),KU(new Error,_Z.OUTDATED_PERMS_TRANSLATION_ERROR,dZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
9
- ${r.stack}`;throw kS.error(s),KU(new Error)}}}a(fZ,"getRolePermissions");function hZ(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Qt.SYSTEM_SCHEMA_NAME]=s[Qt.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]=mZ(t[i]);return}r[i]=JU(),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],l=SZ(c,u);r[i].describe||ZU.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=VS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=VS()})}),r}a(hZ,"translateRolePermissions");function mZ(e){let t=JU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=VS(!0,!0,!0,!0,!0)}),t}a(mZ,"createStructureUserPermissions");function SZ(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}=_,E=_;return Qt.TIME_STAMP_NAMES.includes(d)&&(E=QU(d,_[Ac])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=WU(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=eD(_),n.attribute_permissions.push(_),c||pZ(_,u)}else if(l!==o){let _;Qt.TIME_STAMP_NAMES.includes(l)?_=QU(l):_=WU(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=zU(n),n}else return e.describe=zU(e),e}a(SZ,"getTableAttrPerms");function zU(e){return ZU.filter(t=>e[t]).length>0}a(zU,"getSchemaTableDescribePerm");function eD(e){return jU.filter(t=>e[t]).length>0}a(eD,"getAttributeDescribePerm");function pZ(e,t){jU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(pZ,"checkForHashPerms")});var sD={};je(sD,{Resources:()=>C_,keyArrayToString:()=>mo,resetResources:()=>TZ,resources:()=>wn});function TZ(){return wn=new C_}function mo(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var C_,wn,Oc=Se(()=>{$n();C_=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 l=2;for(;(l=c.indexOf("/",l))>-1;){let _=this.get(c.slice(0,l));_&&(_.hasSubPaths=!0),l+=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&&(n.relativeURL="")),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 Ye(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(TZ,"resetResources");a(mo,"keyArrayToString")});var So,KS=Se(()=>{So=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]}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 Nc={};je(Nc,{authentication:()=>uD,login:()=>wZ,logout:()=>CZ,start:()=>IZ});async function uD(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?OZ?AZ:[]:gZ?RZ:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h={"Access-Control-Allow-Methods":"POST, GET, PUT, DELETE, PATCH, OPTIONS","Access-Control-Allow-Headers":"Accept, Content-Type, Authorization","Access-Control-Allow-Origin":i};return U_&&(h["Access-Control-Allow-Credentials"]="true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),U_&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(U_){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let p=n.indexOf(";",h),T=n.indexOf("=",h);c=n.slice(T+1,p===-1?n.length:p),u=await iD.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,p)=>{let T=new M_.AuthAuditLog(f,h,Rt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);T.auth_strategy=p,c&&(T.session_id=c),e.headers.referer&&(T.referer=e.headers.referer),e.headers.origin&&(T.origin=e.headers.origin),h===Rt.AUTH_AUDIT_STATUS.SUCCESS?nD.notify(T):nD.error(T)},"authAuditLog"),_;if(s){if(_=po.get(s),!_){let[f,h]=s.split(" "),p,T;try{switch(f){case"Basic":[p,T]=atob(h).split(":"),_=p||T?await tt.auth(p,T):null;break;case"Bearer":try{_=await(0,L_.validateOperationToken)(h)}catch(g){if(g.message==="invalid token")try{return await(0,L_.validateRefreshToken)(h),{status:-1}}catch{throw g}}break}}catch(g){return yZ&&(po.get(h)||(po.set(h,h),l(p,Rt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:Qs({error:g.message},e)}}po.set(s,_),bZ&&l(_.username,Rt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await tt.auth(u.user,null,!1):NZ&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,D_.getSuperUser)());U_&&(e.session.update=function(f){if(!c){c=(0,aD.v4)();let p=`${(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",p):d?.headers?.set&&d.headers.set("Set-Cookie",p)}return f.id=c,iD.put(f)},e.login=async function(f,h){e.user=await tt.auth(f,h),e.session.update({user:e.user.username})},(_&&!u||u?.user?.username!==_?.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")&&wn.loginPath?(d.status=302,d.headers.set("Location",wn.loginPath(e))):d.headers.set("WWW-Authenticate","Basic"));let E=o.length;if(E>0){let f=d.headers;f||(d.headers=f=new So);for(let h=0;h<E;){let p=o[h++];f.set(p,o[h++])}}return o=null,d}function IZ({server:e,port:t}){e.request(uD,{port:t||"all"}),oD||(oD=!0,setInterval(()=>{po=new Map},wr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),cD.user.addListener(()=>{po=new Map}))}async function wZ(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 CZ(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var D_,L_,aD,wr,Rt,M_,cD,nD,RZ,gZ,AZ,OZ,iD,U_,NZ,bZ,yZ,po,oD,P_=Se(()=>{D_=C(br());Xr();Oc();L_=C(tc());de();aD=require("uuid"),wr=C(Q()),Rt=C(A()),M_=C(x());To();cD=C(ya());KS();nD=(0,M_.loggerWithTag)("auth-event");wr.initSync();RZ=wr.get(Rt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),gZ=wr.get(Rt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),AZ=wr.get(Rt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),OZ=wr.get(Rt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);tt.auth=D_.findAndValidateUser;iD=st({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),U_=wr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,NZ=wr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,bZ=wr.get(Rt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,yZ=wr.get(Rt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,po=new Map;a(uD,"authentication");a(IZ,"start");a(wZ,"login");a(CZ,"logout")});var mD=m((Pue,hD)=>{"use strict";var he=require("joi"),lD=require("fs-extra"),_D=require("path"),Js=Pe(),dD=Q(),ED=A(),fD=x(),{hdb_errors:UZ}=W(),{HDB_ERROR_MSGS:Dt}=UZ,zs=/^[a-zA-Z0-9-_]+$/;hD.exports={getDropCustomFunctionValidator:LZ,setCustomFunctionValidator:MZ,addComponentValidator:HZ,dropCustomFunctionProjectValidator:qZ,packageComponentValidator:FZ,deployComponentValidator:GZ,setComponentFileValidator:PZ,getComponentFileValidator:BZ,dropComponentFileValidator:vZ};function v_(e,t,r){try{let s=dD.get(ED.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=_D.join(s,t);return lD.existsSync(n)?e?t:r.message(Dt.PROJECT_EXISTS):e?r.message(Dt.NO_PROJECT):t}catch(s){return fD.error(s),r.message(Dt.VALIDATION_ERR)}}a(v_,"checkProjectExists");function bc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(bc,"checkFilePath");function DZ(e,t,r,s){try{let n=dD.get(ED.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=_D.join(n,e,t,r+".js");return lD.existsSync(i)?r:s.message(Dt.NO_FILE)}catch(n){return fD.error(n),s.message(Dt.VALIDATION_ERR)}}a(DZ,"checkFileExists");function LZ(e){let t=he.object({project:he.string().pattern(zs).custom(v_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(zs).custom(DZ.bind(null,e.project,e.type)).custom(bc).required().messages({"string.pattern.base":Dt.BAD_FILE_NAME})});return Js.validateBySchema(e,t)}a(LZ,"getDropCustomFunctionValidator");function MZ(e){let t=he.object({project:he.string().pattern(zs).custom(v_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().custom(bc).required(),function_content:he.string().required()});return Js.validateBySchema(e,t)}a(MZ,"setCustomFunctionValidator");function PZ(e){let t=he.object({project:he.string().pattern(zs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(bc).required(),payload:he.string().allow("").optional(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Js.validateBySchema(e,t)}a(PZ,"setComponentFileValidator");function vZ(e){let t=he.object({project:he.string().pattern(zs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(bc).optional()});return Js.validateBySchema(e,t)}a(vZ,"dropComponentFileValidator");function BZ(e){let t=he.object({project:he.string().required(),file:he.string().custom(bc).required(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Js.validateBySchema(e,t)}a(BZ,"getComponentFileValidator");function HZ(e){let t=he.object({project:he.string().pattern(zs).custom(v_.bind(null,!1)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Js.validateBySchema(e,t)}a(HZ,"addComponentValidator");function qZ(e){let t=he.object({project:he.string().pattern(zs).custom(v_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Js.validateBySchema(e,t)}a(qZ,"dropCustomFunctionProjectValidator");function FZ(e){let t=he.object({project:he.string().pattern(zs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),skip_node_modules:he.boolean()});return Js.validateBySchema(e,t)}a(FZ,"packageComponentValidator");function GZ(e){let t=he.object({project:he.string().pattern(zs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),payload:he.string().optional().messages({"string.pattern.base":Dt.BAD_PACKAGE}),package:he.string().optional()});return Js.validateBySchema(e,t)}a(GZ,"deployComponentValidator")});var JS=m((Bue,TD)=>{"use strict";var be=require("fs-extra"),WS=require("fast-glob"),me=require("path"),SD=require("tar-fs"),xZ=require("uuid").v4,QS=require("normalize-path"),Ss=mD(),gt=x(),Ie=A(),$e=Q(),B_=Tr(),kZ=V(),{PACKAGE_ROOT:VZ}=A(),{handleHDBError:it,hdb_errors:$Z}=W(),{HDB_ERROR_MSGS:Cn,HTTP_STATUS_CODES:ot}=$Z,YZ=me.join(VZ,"application-template"),zS=me.join($e.get(Ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function pD(){let e=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw it(new Error,Cn.NOT_ENABLED,ot.BAD_REQUEST,void 0,void 0,!0)}a(pD,"isCFEnabled");function KZ(){gt.trace("getting custom api status");let e={};try{e={is_enabled:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw it(new Error,Cn.FUNCTION_STATUS,ot.INTERNAL_SERVER_ERROR,gt.ERR,t)}return e}a(KZ,"customFunctionsStatus");function WZ(){gt.trace("getting custom api endpoints");let e={},t=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{WS.sync(QS(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:WS.sync(QS(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:WS.sync(QS(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw it(new Error,Cn.GET_FUNCTIONS,ot.INTERNAL_SERVER_ERROR,gt.ERR,r)}return e}a(WZ,"getCustomFunctions");function QZ(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Ss.getDropCustomFunctionValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);gt.trace("getting custom api endpoint file content");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=me.join(r,s,n,i+".js");try{return be.readFileSync(o,{encoding:"utf8"})}catch(c){throw it(new Error,Cn.GET_FUNCTION,ot.INTERNAL_SERVER_ERROR,gt.ERR,c)}}a(QZ,"getCustomFunction");function zZ(e){pD(),e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Ss.setCustomFunctionValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);gt.trace("setting custom function file content");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return be.outputFileSync(me.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw it(new Error,Cn.SET_FUNCTION,ot.INTERNAL_SERVER_ERROR,gt.ERR,c)}}a(zZ,"setCustomFunction");function JZ(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Ss.getDropCustomFunctionValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);gt.trace("dropping custom function file");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return be.unlinkSync(me.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw it(new Error,Cn.DROP_FUNCTION,ot.INTERNAL_SERVER_ERROR,gt.ERR,o)}}a(JZ,"dropCustomFunction");function XZ(e){pD(),e.project&&(e.project=me.parse(e.project).name);let t=Ss.addComponentValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);gt.trace("adding component");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=me.join(r,s);return be.mkdirSync(n,{recursive:!0}),be.copySync(YZ,n),`Successfully added project: ${s}`}catch(n){throw it(new Error,Cn.ADD_FUNCTION,ot.INTERNAL_SERVER_ERROR,gt.ERR,n)}}a(XZ,"addComponent");function ZZ(e){e.project&&(e.project=me.parse(e.project).name);let t=Ss.dropCustomFunctionProjectValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);gt.trace("dropping custom function project");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=$e.get(Ie.CONFIG_PARAMS.APPS);if(!kZ.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 B_.updateConfigValue(Ie.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=me.join(r,s);return be.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw it(new Error,Cn.DROP_FUNCTION_PROJECT,ot.INTERNAL_SERVER_ERROR,gt.ERR,i)}}a(ZZ,"dropCustomFunctionProject");async function jZ(e){e.project&&(e.project=me.parse(e.project).name);let t=Ss.packageComponentValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;gt.trace("packaging component",s);let n;try{n=await be.realpath(me.join(r,s))}catch(u){if(u.code!==Ie.NODE_ERROR_CODES.ENOENT)throw u;try{n=await be.realpath(me.join($e.get(Ie.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(l){if(l.code===Ie.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await be.ensureDir(zS);let i=me.join(zS,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(me.join(n,"node_modules"))}),SD.pack(n,o).pipe(be.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=be.readFileSync(i,{encoding:"base64"});return await be.remove(i),{project:s,payload:c}}a(jZ,"packageComponent");async function ej(e){e.project&&(e.project=me.parse(e.project).name);let t=Ss.deployComponentValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,package:i}=e;if(gt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");if(n){let o=me.join(r,s);i="file:"+o,await be.ensureDir(o);let c,u;do c=me.join(zS,xZ()+".tar"),u=await be.pathExists(c);while(u);await be.outputFile(c,n,{encoding:"base64"});let l=be.createReadStream(c);l.pipe(SD.extract(o)),await new Promise(_=>l.on("end",_)),await be.unlink(c)}return B_.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a(ej,"deployComponent");async function tj(){let e=B_.getConfiguration(),t=[];for(let s in e)if(e[s]?.package){if(e[s].package.startsWith("file:"))continue;t.push(Object.assign(e[s],{name:s}))}let r=a(async(s,n)=>{let i=await be.readdir(s,{withFileTypes:!0});for(let o of i){let c=o.name;if(c.startsWith(".")||c==="node_modules")continue;let u=me.join(s,c);if(await o.isDirectory()){let l={name:c,entries:[]};n.entries.push(l),await r(u,l)}else{let l=await be.stat(u),_={name:me.basename(c),mtime:l.mtime,size:l.size};n.entries.push(_)}}return n},"walk_dir");return r($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:$e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(me.sep).slice(-1).pop(),entries:t})}a(tj,"getComponents");async function rj(e){let t=Ss.getComponentFileValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await be.readFile(me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file),r)}catch(s){throw s.code===Ie.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${me.join(e.project,e.file)}'`):s}}a(rj,"getComponentFile");async function sj(e){let t=Ss.setComponentFileValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file);return e.payload!==void 0?(await be.ensureFile(s),await be.outputFile(s,e.payload,r)):await be.ensureDir(s),"Successfully set component: "+e.file}a(sj,"setComponentFile");async function nj(e){let t=Ss.dropComponentFileValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=e.file?me.join(e.project,e.file):e.project,s=me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await be.pathExists(s)&&await be.remove(s),B_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(nj,"dropComponent");TD.exports={customFunctionsStatus:KZ,getCustomFunctions:WZ,getCustomFunction:QZ,setCustomFunction:zZ,dropCustomFunction:JZ,addComponent:XZ,dropCustomFunctionProject:ZZ,packageComponent:jZ,deployComponent:ej,getComponents:tj,getComponentFile:rj,setComponentFile:sj,dropComponent:nj}});var XS=m((que,gD)=>{"use strict";var ps=require("joi"),RD=Pe();gD.exports={readTransactionLogValidator:ij,deleteTransactionLogsBeforeValidator:oj};function ij(e){let t=ps.object({schema:ps.string().required(),table:ps.string().required(),from:ps.date().timestamp(),to:ps.date().timestamp(),limit:ps.number().min(1)});return RD.validateBySchema(e,t)}a(ij,"readTransactionLogValidator");function oj(e){let t=ps.object({schema:ps.string().required(),table:ps.string().required(),timestamp:ps.date().timestamp().required()});return RD.validateBySchema(e,t)}a(oj,"deleteTransactionLogsBeforeValidator")});var q_=m((Gue,yD)=>{"use strict";var ZS=A(),H_=nt(),AD=V(),OD=Q(),ND=Gs(),{handleHDBError:Ro,hdb_errors:aj}=W(),{HTTP_STATUS_CODES:go}=aj,{readTransactionLogValidator:cj,deleteTransactionLogsBeforeValidator:uj}=XS(),bD="This operation relies on clustering and cannot run with it disable.",lj="Logs successfully deleted from transaction log.",_j="All logs successfully deleted from transaction log.";yD.exports={readTransactionLog:dj,deleteTransactionLogsBefore:Ej};async function*dj(e){let t=cj(e);if(t)throw Ro(t,t.message,go.BAD_REQUEST,void 0,void 0,!0);if(!OD.get(ZS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ro(new Error,bD,go.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=AD.checkSchemaTableExist(r,s);if(n)throw Ro(new Error,n,go.NOT_FOUND,void 0,void 0,!0);let i=ND.createNatsTableStreamName(r,s),o=await H_.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 l={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&&(l.hash_values=c?.entry?.hash_values),yield l}}a(dj,"readTransactionLog");async function Ej(e){let t=uj(e);if(t)throw Ro(t,t.message,go.BAD_REQUEST,void 0,void 0,!0);if(!OD.get(ZS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ro(new Error,bD,go.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=AD.checkSchemaTableExist(r,s);if(i)throw Ro(new Error,i,go.NOT_FOUND,void 0,void 0,!0);let o=ND.createNatsTableStreamName(r,s),{jsm:c}=await H_.getNATSReferences(),u=await H_.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=lj,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=_j):d=(await H_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(Ej,"deleteTransactionLogsBefore")});var k_=m((kue,MD)=>{"use strict";var F_=require("joi"),G_=require("path"),ID=require("fs-extra"),{exec:fj}=require("child_process"),hj=require("util"),wD=hj.promisify(fj),yc=A(),{handleHDBError:Ao,hdb_errors:mj}=W(),{HTTP_STATUS_CODES:Oo}=mj,wc=Q(),Sj=Pe(),Ic=x();wc.initSync();var jS=wc.get(yc.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),CD="npm install --omit=dev --json",pj=`${CD} --dry-run`;MD.exports={installModules:Aj,auditModules:Oj,installAllRootModules:Tj,uninstallRootModule:Rj,linkHarperdb:gj};async function Tj(e=!1){await x_(),await Cc(e?"npm install --ignore-scripts":"npm install",wc.get(yc.CONFIG_PARAMS.ROOTPATH))}a(Tj,"installAllRootModules");async function Rj(e){await Cc(`npm uninstall ${e}`,wc.get(yc.CONFIG_PARAMS.ROOTPATH))}a(Rj,"uninstallRootModule");async function gj(){await x_(),await Cc(`npm link ${yc.PACKAGE_ROOT}`,wc.get(yc.CONFIG_PARAMS.ROOTPATH))}a(gj,"linkHarperdb");async function Cc(e,t=void 0){let{stdout:r,stderr:s}=await wD(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
10
- `,""));return Ic.trace(r,s),r.replace(`
11
- `,"")}a(Cc,"runCommand");async function Aj(e){Ic.info(`starting installModules for request: ${e}`);let t=LD(e);if(t)throw Ao(t,t.message,Oo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?pj:CD;await x_(),await DD(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 l=G_.join(jS,u),_,d=null;try{let{stdout:E,stderr:f}=await wD(n,{cwd:l});_=E?E.replace(`
8
+ `,"")}a(BI,"runCommand");async function az(){try{await xQ.access(cm)}catch{return!1}let e=await BI(`${cm} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return kQ.eq(t,iz)}a(az,"checkNATSServerInstalled");async function dm(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await DI.getClusterUser();if(li(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}wr.trace("create nats connection called");let i=await XQ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:Tt.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Tt.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Tt.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return wr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(dm,"createConnection");async function cz(){hs&&(await hs.drain(),hs=void 0,so=void 0,no=void 0,Qa=void 0)}a(cz,"closeConnection");var hs,Qa;async function Gl(){return Qa||(Qa=dm(Tt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),hs=await Qa),hs||Qa}a(Gl,"getConnection");async function Ja(){if(so)return so;li(hs)&&await Gl();let{domain:e}=Xa(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(li(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return so=await hs.jetstreamManager({domain:e}),so}a(Ja,"getJetStreamManager");async function HI(){if(no)return no;li(hs)&&await Gl();let{domain:e}=Xa(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(li(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return no=hs.jetstream({domain:e}),no}a(HI,"getJetStream");async function xt(){let e=hs||await Gl(),t=so||await Ja(),r=no||await HI();return{connection:e,jsm:t,js:r}}a(xt,"getNATSReferences");async function uz(e){let t=Tt.get(Re.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await DI.getClusterUser(),n=await dm(t,r,s),i=_m(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=vI.decode(_.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 Bl.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(uz,"getServerList");async function Em(e,t){let{jsm:r}=await xt(),s=Tt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Tt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Tt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:MI.File,retention:PI.Limits,subjects:t,discard:ZQ.Old,duplicate_window:LI,max_msgs:n,max_bytes:i,max_age:s})}a(Em,"createLocalStream");async function qI(){let{jsm:e}=await xt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(qI,"listStreams");async function lz(e){let{jsm:t}=await xt();await t.streams.delete(e)}a(lz,"deleteLocalStream");async function _z(e){let{connection:t}=await xt(),r=[],s=_m(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(vI.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(_z,"listRemoteStreams");async function dz(e,t=void 0,r=void 0){let{jsm:s,js:n}=await xt(),i=um(),o={durable_name:i,ack_policy:ql.Explicit};t&&(o.deliver_policy=Fl.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 l=[];for await(let _ of u){let d=lm(_.data),E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};if(_.headers&&(E.origin=_.headers.get(de.MSG_HEADERS.ORIGIN),E.nats_msg_id=_.headers.get(de.MSG_HEADERS.NATS_MSG_ID)),l.push(E),_.ack(),_.info.pending===0)break}return await c.delete(),l}a(dz,"viewStream");async function*Ez(e,t=void 0,r=void 0){let{jsm:s,js:n}=await xt(),i=um(),o={durable_name:i,ack_policy:ql.Explicit};t&&(o.deliver_policy=Fl.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 l of u){let _=lm(l.data);_[0]||(_=[_]);for(let d of _){let E={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(E.origin=l.headers.get(de.MSG_HEADERS.ORIGIN),E.nats_msg_id=l.headers.get(de.MSG_HEADERS.NATS_MSG_ID)),yield E}if(l.ack(),l.info.pending===0)break}await c.delete()}a(Ez,"viewStreamIterator");async function fz(e,t,r,s){wr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=FI(s,r);let{js:n}=await xt(),i=await Za(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:UI.encode(s);try{wr.trace(`publishToStream publishing to subject: ${o}`),sz(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 VI(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){wr.trace(`publishToStream creating stream: ${t}`);let _=o.split(".");_[2]="*",await Em(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(fz,"publishToStream");function FI(e,t){t===void 0&&(t=ez());let r=Tt.get(Re.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(de.MSG_HEADERS.NATS_MSG_ID)){let s=Bl.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${um()}`;t.append(de.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(de.MSG_HEADERS.ORIGIN)||t.append(de.MSG_HEADERS.ORIGIN,r),t}a(FI,"addNatsMsgHeader");function Xa(e){e=e.toLowerCase();let t=za.join(Tt.get(Re.CONFIG_PARAMS.ROOTPATH),nz);if(e===Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return li(am)&&(am={port:Ka.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ka.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+de.SERVER_SUFFIX.HUB,config_file:de.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:za.join(t,de.PID_FILES.HUB),hdb_nats_path:t}),am;if(e===Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return li(om)&&(om={port:Ka.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ka.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+de.SERVER_SUFFIX.LEAF,config_file:de.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ka.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+de.SERVER_SUFFIX.LEAF,pid_file_path:za.join(t,de.PID_FILES.LEAF),hdb_nats_path:t}),om;wr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Xa,"getServerConfig");async function hz(e){let{jsm:t}=await xt(),r=await Za();try{await t.streams.add({name:e.stream_name,storage:MI.File,retention:PI.Limits,duplicate_window:LI,max_age:zQ,max_bytes:JQ,subjects:[`${de.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:ql.Explicit,durable_name:e.durable_name,deliver_policy:Fl.All,max_ack_pending:1e4});else throw s}}a(hz,"createWorkQueueStream");async function mz(){let{jsm:e}=await xt();(await e.consumers.info(de.WORK_QUEUE_CONSUMER_NAMES.stream_name,de.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(wr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(de.WORK_QUEUE_CONSUMER_NAMES.stream_name,de.WORK_QUEUE_CONSUMER_NAMES.durable_name),wr.info("Adding pull consumer to ingest stream"),await e.consumers.add(de.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:ql.Explicit,durable_name:de.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Fl.All,max_ack_pending:1e4}))}a(mz,"updateIngestStreamConsumer");async function GI(e,t,r){let{jsm:s}=await xt(),n=await s.streams.info(t),i=xI(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=Hl.createNatsTableStreamName(c,u),_=i===e,d,E,f=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let T=0,p=n.config.sources.length;T<p;T++)if(d=n.config.sources[T],E=T,_&&d.name===l||!_&&d.name===l&&d.external&&d.external.api===`$JS.${e}.API`){f=!0;break}if(f===!0){if(d.opt_start_time===o)return;n.config.sources.splice(E,1),await s.streams.update(t,n.config)}let h={name:l,opt_start_time:o,filter_subject:`${de.SUBJECT_PREFIXES.TXN}.>`};_||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(GI,"addSourceToWorkStream");function xI(e){return e.split(".")[1]}a(xI,"extractServerName");async function kI(e,t,r){let{schema:s,table:n}=r,i=Hl.createNatsTableStreamName(s,n),{jsm:o}=await xt(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let u=c.config.sources.length,l;for(;u--;)if(l=c.config.sources[u],l.name===i&&l.external.api===`$JS.${e}.API`){c.config.sources.splice(u,1);break}await o.streams.update(t,c.config)}a(kI,"removeSourceFromWorkStream");async function Sz(e,t,r=2e4,s=_m()){if(!Bl.isObject(t))throw new Error("data param must be an object");let n=UI.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 lm(c.data)}a(Sz,"request");function fm(e){return new Promise(async(t,r)=>{let s=KQ(cm,["--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(fm,"reloadNATS");async function pz(){let{pid_file_path:e}=Xa(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await fm(e)}a(pz,"reloadNATSHub");async function Tz(){let{pid_file_path:e}=Xa(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await fm(e)}a(Tz,"reloadNATSLeaf");function Rz(e,t,r){let s;switch(e.code){case wI.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case wI.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(Rz,"requestErrorHandler");async function gz(e,t){let r=t+de.SERVER_SUFFIX.LEAF;await VI(async()=>{e.subscribe===!0?await GI(r,de.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await kI(r,de.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(gz,"updateWorkStream");function VI(e){return WQ.writeTransaction(Re.SYSTEM_SCHEMA_NAME,Re.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(VI,"exclusiveLock");async function $I(e,t){let r=Hl.createNatsTableStreamName(e,t),s=await Za(),n=bz(e,t,s);await Em(r,[n])}a($I,"createLocalTableStream");async function Az(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await $I(s,n)}}a(Az,"createTableStreams");async function YI(e,t){if(Tt.get(Re.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Hl.createNatsTableStreamName(e,t),{jsm:s}=await xt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")wr.warn(r);else throw r}}a(YI,"purgeTableStream");async function Oz(e,t){if(Tt.get(Re.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await YI(e,t[r])}a(Oz,"purgeSchemaTableStreams");async function Nz(e){return(await Ja()).streams.info(e)}a(Nz,"getStreamInfo");function bz(e,t,r){return`${de.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(bz,"createSubjectName");async function Za(){if(Wa)return Wa;if(Wa=(await Ja())?.nc?.info?.server_name,Wa===void 0)throw new Error("Unable to get jetstream manager server name");return Wa}a(Za,"getJsmServerName");async function yz(){let e=await Ja(),t=await Za(),r=await qI();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=Iz(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===de.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let l=`${de.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;wr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else if(n.name===de.WORK_QUEUE_CONSUMER_NAMES.stream_name){let l=`${de.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;wr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else{let l=i.split(".");l[l.length-1]=t;let _=l.join(".");wr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}a(yz,"updateLocalStreams");function Iz(e){let{config:t}=e,r=!1;if(t.name===de.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===de.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Tt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Tt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Tt.get(Re.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(Iz,"updateStreamLimits")});var $l=m((mae,JI)=>{"use strict";var io=Ju(),oo=_I(),wz=x(),Cz=require("uuid").v4,hae=require("clone"),kl=Ks(),ao=A(),Uz=require("util"),Nn=Gr(),{handleHDBError:kt,hdb_errors:Dz}=W(),{HDB_ERROR_MSGS:xl,HTTP_STATUS_CODES:Vt}=Dz,{SchemaEventMsg:Vl}=xr(),WI=nt(),{getDatabases:Lz}=(Ee(),se(be)),{transformReq:co}=V();JI.exports={createSchema:Mz,createSchemaStructure:QI,createTable:Pz,createTableStructure:zI,createAttribute:Fz,dropSchema:vz,dropTable:Bz,dropAttribute:Hz,getBackup:Gz};async function Mz(e){let t=await QI(e);return kl.signalSchemaChange(new Vl(process.pid,e.operation,e.schema)),t}a(Mz,"createSchema");async function QI(e){let t=io.schema_object(e);if(t)throw kt(t,t.message,Vt.BAD_REQUEST,void 0,void 0,!0);if(co(e),!await oo.checkSchemaExists(e.schema))throw kt(new Error,xl.SCHEMA_EXISTS_ERR(e.schema),Vt.BAD_REQUEST,ao.LOG_LEVELS.ERROR,xl.SCHEMA_EXISTS_ERR(e.schema),!0);return await Nn.createSchema(e),`database '${e.schema}' successfully created`}a(QI,"createSchemaStructure");async function Pz(e){return co(e),await zI(e)}a(Pz,"createTable");async function zI(e){let t=io.create_table_object(e);if(t)throw kt(t,t.message,Vt.BAD_REQUEST,void 0,void 0,!0);if(io.validateTableResidence(e.residence),!await oo.checkSchemaTableExists(e.schema,e.table))throw kt(new Error,xl.TABLE_EXISTS_ERR(e.schema,e.table),Vt.BAD_REQUEST,ao.LOG_LEVELS.ERROR,xl.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:Cz(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await Nn.createTable(s,e);else throw kt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Vt.BAD_REQUEST);else await Nn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(zI,"createTableStructure");async function vz(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 kt(s,s.message,Vt.BAD_REQUEST,void 0,void 0,!0);co(e);let n=await oo.checkSchemaExists(e.schema);if(n)throw kt(new Error,n,Vt.NOT_FOUND,ao.LOG_LEVELS.ERROR,n,!0);let i=await oo.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Nn.dropSchema(e),kl.signalSchemaChange(new Vl(process.pid,e.operation,e.schema)),await WI.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(vz,"dropSchema");async function Bz(e){let t=io.table_object(e);if(t)throw kt(t,t.message,Vt.BAD_REQUEST,void 0,void 0,!0);co(e);let r=await oo.checkSchemaTableExists(e.schema,e.table);if(r)throw kt(new Error,r,Vt.NOT_FOUND,ao.LOG_LEVELS.ERROR,r,!0);return await Nn.dropTable(e),await WI.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(Bz,"dropTable");async function Hz(e){let t=io.attribute_object(e);if(t)throw kt(t,t.message,Vt.BAD_REQUEST,void 0,void 0,!0);co(e);let r=await oo.checkSchemaTableExists(e.schema,e.table);if(r)throw kt(new Error,r,Vt.NOT_FOUND,ao.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw kt(new Error,"You cannot drop a hash attribute",Vt.BAD_REQUEST,void 0,void 0,!0);if(ao.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw kt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Vt.BAD_REQUEST,void 0,void 0,!0);try{return await Nn.dropAttribute(e),qz(e),kl.signalSchemaChange(new Vl(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw wz.error(`Got an error deleting attribute ${Uz.inspect(e)}.`),s}}a(Hz,"dropAttribute");function qz(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(qz,"dropAttributeFromGlobal");async function Fz(e){co(e);let t=Lz()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw kt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Vt.BAD_REQUEST,void 0,void 0,!0);return await Nn.createAttribute(e),kl.signalSchemaChange(new Vl(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Fz,"createAttribute");function Gz(e){return Nn.getBackup(e)}a(Gz,"getBackup")});var ZI=m((pae,XI)=>{"use strict";var{OPERATIONS_ENUM:xz}=A(),hm=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=xz.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};XI.exports=hm});var mm=m((gae,sw)=>{"use strict";var kz=Gr(),Rae=ZI(),Yl=V(),Kl=A(),Vz=Q(),{handleHDBError:jI,hdb_errors:$z}=W(),{HDB_ERROR_MSGS:ew,HTTP_STATUS_CODES:tw}=$z,Yz=Object.values(Kl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),rw="To use this operation audit log must be enabled in harperdb-config.yaml";sw.exports=Kz;async function Kz(e){if(Yl.isEmpty(e.schema))throw new Error(ew.SCHEMA_REQUIRED_ERR);if(Yl.isEmpty(e.table))throw new Error(ew.TABLE_REQUIRED_ERR);if(!Vz.get(Kl.CONFIG_PARAMS.LOGGING_AUDITLOG))throw jI(new Error,rw,tw.BAD_REQUEST,Kl.LOG_LEVELS.ERROR,rw,!0);let t=Yl.checkSchemaTableExist(e.schema,e.table);if(t)throw jI(new Error,t,tw.NOT_FOUND,Kl.LOG_LEVELS.ERROR,t,!0);if(!Yl.isEmpty(e.search_type)&&Yz.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await kz.readAuditLog(e)}a(Kz,"readAuditLog")});var iw=m((Oae,nw)=>{"use strict";var{OPERATIONS_ENUM:Wz}=A(),Sm=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Wz.GET_BACKUP,this.schema=t,this.table=r}};nw.exports=Sm});var cw=m((Iae,aw)=>{"use strict";var Qz=Gr(),bae=iw(),pm=V(),zz=A(),yae=Q(),{handleHDBError:Jz,hdb_errors:Xz}=W(),{HDB_ERROR_MSGS:ow,HTTP_STATUS_CODES:Zz}=Xz;aw.exports=jz;async function jz(e){if(pm.isEmpty(e.schema))throw new Error(ow.SCHEMA_REQUIRED_ERR);if(pm.isEmpty(e.table))throw new Error(ow.TABLE_REQUIRED_ERR);let t=pm.checkSchemaTableExist(e.schema,e.table);if(t)throw Jz(new Error,t,Zz.NOT_FOUND,zz.LOG_LEVELS.ERROR,t,!0);return await Qz.getBackup(read_audit_log_object)}a(jz,"getBackup")});var fw=m((Cae,Ew)=>{var bn=require("validate.js"),lw=ve(),uo=A(),{handleHDBError:eJ,hdb_errors:tJ}=W(),{HDB_ERROR_MSGS:$e,HTTP_STATUS_CODES:rJ}=tJ,Tm=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),sJ={STRUCTURE_USER:"structure_user"},uw=Object.values(uo.ROLE_TYPES_ENUM),nJ="attribute_permissions",iJ="attribute_name",{PERMS_CRUD_ENUM:lo}=uo,oJ=[nJ,...Object.values(lo)],_w=[lo.READ,lo.INSERT,lo.UPDATE],aJ=[iJ,..._w];function cJ(e){let t=Tm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,dw(e,t)}a(cJ,"addRoleValidation");function uJ(e){let t=Tm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,dw(e,t)}a(uJ,"alterRoleValidation");function lJ(e){let t=Tm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,lw.validateObject(e,t)}a(lJ,"dropRoleValidation");var _J=["operation","role","id","permission","hdb_user","hdb_auth_header"];function dw(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)_J.includes(s[o])||n.push(s[o]);n.length>0&&ze($e.INVALID_ROLE_JSON_KEYS(n),r);let i=lw.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ze(o,r)}),e.permission){let o=dJ(e);o&&ze(o,r),uw.forEach(c=>{e.permission[c]&&!bn.isBoolean(e.permission[c])&&ze($e.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(uw.indexOf(o)<0){if(o===sJ.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let l=0,_=u.length;l<_;l++){let d=u[l];global.hdb_schema[d]||ze($e.SCHEMA_NOT_FOUND(d),r)}continue}ze($e.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ze($e.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let l=c.tables[u];if(!u||!global.hdb_schema[o][u]){ze($e.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{oJ.includes(_)||ze($e.INVALID_PERM_KEY(_),r,o,u)}),Object.values(lo).forEach(_=>{bn.isDefined(l[_])?bn.isBoolean(l[_])||ze($e.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):ze($e.TABLE_PERM_MISSING(_),r,o,u)}),bn.isDefined(l.attribute_permissions)){if(!bn.isArray(l.attribute_permissions)){ze($e.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{ze($e.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(l.attribute_permissions){let _=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in l.attribute_permissions){let f=l.attribute_permissions[E];if(Object.keys(f).forEach(T=>{!aJ.includes(T)&&T!==lo.DELETE&&ze($e.INVALID_ATTR_PERM_KEY(T),r,o,u)}),!bn.isDefined(f.attribute_name)){ze($e.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){ze($e.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}_w.forEach(T=>{bn.isDefined(f[T])?bn.isBoolean(f[T])||ze($e.ATTR_PERM_NOT_BOOLEAN(T,h),r,o,u):ze($e.ATTR_PERM_MISSING(T,h),r,o,u)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(l.read===!1&&d.read===!0||l.insert===!1&&d.insert===!0||l.update===!1&&d.update===!0){let E=`${o}.${u}`;ze($e.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return EJ(r)}a(dw,"customValidate");Ew.exports={addRoleValidation:cJ,alterRoleValidation:uJ,dropRoleValidation:lJ};function dJ(e){let{operation:t,permission:r}=e;if(t===uo.OPERATIONS_ENUM.ADD_ROLE||t===uo.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 $e.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?uo.ROLE_TYPES_ENUM.SUPER_USER:uo.ROLE_TYPES_ENUM.CLUSTER_USER;return $e.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(dJ,"validateNoSUPerms");function EJ(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:$e.ROLE_PERMS_ERROR,...e};return eJ(new Error,s,rJ.BAD_REQUEST)}else return null}a(EJ,"generateRolePermResponse");function ze(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(ze,"addPermError")});var bm=m((Dae,pw)=>{"use strict";var hw=yr(),mw=br(),fJ=ri(),gm=fw(),Am=Ks(),hJ=require("uuid").v4,mJ=require("util"),Wl=A(),SJ=V(),Om=mw.searchByValue,pJ=mw.searchByHash,TJ=mJ.promisify(fJ.delete),RJ=ls(),gJ=ji(),{hdb_errors:AJ,handleHDBError:_o}=W(),{HDB_ERROR_MSGS:Sw,HTTP_STATUS_CODES:Ql}=AJ,{UserEventMsg:Nm}=xr();pw.exports={addRole:OJ,alterRole:NJ,dropRole:bJ,listRoles:yJ};function Rm(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(Rm,"scrubRoleDetails");async function OJ(e){let t=gm.addRoleValidation(e);if(t)throw t;e=Rm(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 Om(r)||[])}catch(i){throw _o(i)}if(s&&s.length>0)throw _o(new Error,Sw.ROLE_ALREADY_EXISTS(e.role),Ql.CONFLICT,void 0,void 0,!0);e.id||(e.id=hJ());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await hw.insert(n),Am.signalUserChange(new Nm(process.pid)),e=Rm(e),e}a(OJ,"addRole");async function NJ(e){let t=gm.alterRoleValidation(e);if(t)throw t;e=Rm(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await hw.update(r)}catch(n){throw _o(n)}if(s&&s?.message==="updated 0 of 1 records")throw _o(new Error,"Invalid role id",Ql.BAD_REQUEST,void 0,void 0,!0);return await Am.signalUserChange(new Nm(process.pid)),e}a(NJ,"alterRole");async function bJ(e){let t=gm.dropRoleValidation(e);if(t)throw _o(new Error,t,Ql.BAD_REQUEST,void 0,void 0,!0);let r=new gJ(Wl.SYSTEM_SCHEMA_NAME,Wl.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await pJ(r));if(s.length===0)throw _o(new Error,Sw.ROLE_NOT_FOUND,Ql.NOT_FOUND,void 0,void 0,!0);let n=new RJ(Wl.SYSTEM_SCHEMA_NAME,Wl.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Om(n)),o=!1;if(SJ.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 TJ(c),Am.signalUserChange(new Nm(process.pid)),`${s[0].role} successfully deleted`}a(bJ,"dropRole");async function yJ(){return Om({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(yJ,"listRoles")});var Aw=m((Mae,gw)=>{"use strict";var IJ=Q(),yn=require("joi"),wJ=ve(),Tw=require("moment"),CJ=require("fs-extra"),ym=require("path"),UJ=require("lodash"),ja=A(),{LOG_LEVELS:_i}=A(),DJ="YYYY-MM-DD hh:mm:ss",LJ=ym.resolve(__dirname,"../logs");gw.exports=function(e){return wJ.validateBySchema(e,MJ)};var MJ=yn.object({from:yn.custom(Rw),until:yn.custom(Rw),level:yn.valid(_i.NOTIFY,_i.FATAL,_i.ERROR,_i.WARN,_i.INFO,_i.DEBUG,_i.TRACE),order:yn.valid("asc","desc"),limit:yn.number().min(1),start:yn.number().min(0),log_name:yn.custom(PJ)});function Rw(e,t){if(Tw(e,Tw.ISO_8601).format(DJ)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Rw,"validateDatetime");function PJ(e,t){if(UJ.invert(ja.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=IJ.get(ja.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?ja.LOG_NAMES.HDB:e,i=n===ja.LOG_NAMES.INSTALL?ym.join(LJ,ja.LOG_NAMES.INSTALL):ym.join(s,n);return CJ.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(PJ,"validateReadLogPath")});var wm=m((vae,Nw)=>{"use strict";var zl=A(),vJ=x(),BJ=Q(),HJ=Aw(),Im=require("path"),Ow=require("fs-extra"),{once:qJ}=require("events"),{handleHDBError:FJ,hdb_errors:GJ}=W(),{PACKAGE_ROOT:xJ}=A(),kJ=Im.join(xJ,"logs"),VJ=1e3,$J=200;Nw.exports=YJ;async function YJ(e){let t=HJ(e);if(t)throw FJ(t,t.message,GJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=BJ.get(zl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?zl.LOG_NAMES.HDB:e.log_name,n=s===zl.LOG_NAMES.INSTALL?Im.join(kJ,zl.LOG_NAMES.INSTALL):Im.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,l=e.until!==void 0,_=l?new Date(e.until):void 0,d=e.limit===void 0?VJ:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,T=0;E==="desc"&&!u&&!_&&(T=Math.max(Ow.statSync(n).size-(h+5)*$J,0));let p=Ow.createReadStream(n,{start:T});p.on("error",I=>{vJ.error(I)});let R=0,O=[],q="",$;p.on("data",I=>{let D=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;I=q+I;let z=0,M;for(;(M=D.exec(I))&&!p.destroyed;){$&&($.message=I.slice(z,M.index),w($));let[ee,Ne,Lt]=M,rr=Lt.split("] ["),jr=rr[0],Cs=rr[1];rr.splice(0,2),$={timestamp:Ne,thread:jr,level:Cs,tags:rr,message:""},z=M.index+ee.length}q=I.slice(z)}),p.on("end",I=>{p.destroyed||$&&($.message=q.trim(),w($))}),p.resume();function w(I){let D,z,M;switch(!0){case(i&&c&&l):D=new Date(I.timestamp),z=new Date(u),M=new Date(_),I.level===o&&D>=z&&D<=M&&R<f?R++:I.level===o&&D>=z&&D<=M&&(In(I,E,O),R++,R===h&&p.destroy());break;case(i&&c):D=new Date(I.timestamp),z=new Date(u),I.level===o&&D>=z&&R<f?R++:I.level===o&&D>=z&&(In(I,E,O),R++,R===h&&p.destroy());break;case(i&&l):D=new Date(I.timestamp),M=new Date(_),I.level===o&&D<=M&&R<f?R++:I.level===o&&D<=M&&(In(I,E,O),R++,R===h&&p.destroy());break;case(c&&l):D=new Date(I.timestamp),z=new Date(u),M=new Date(_),D>=z&&D<=M&&R<f?R++:D>=z&&D<=M&&(In(I,E,O),R++,R===h&&p.destroy());break;case i:I.level===o&&R<f?R++:I.level===o&&(In(I,E,O),R++,R===h&&p.destroy());break;case c:D=new Date(I.timestamp),z=new Date(u),D>=z&&R<f?R++:D>=z&&R>=f&&(In(I,E,O),R++,R===h&&p.destroy());break;case l:D=new Date(I.timestamp),M=new Date(_),D<=M&&R<f?R++:D<=M&&R>=f&&(In(I,E,O),R++,R===h&&p.destroy());break;default:R<f?R++:(In(I,E,O),R++,R===h&&p.destroy())}}return a(w,"onLogMessage"),await qJ(p,"close"),O}a(YJ,"readLog");function In(e,t,r){t==="desc"?KJ(e,r):t==="asc"?WJ(e,r):r.push(e)}a(In,"pushLineToResult");function KJ(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(KJ,"insertDescending");function WJ(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(WJ,"insertAscending")});var Xl=m((Gae,ww)=>{"use strict";var Cm=require("joi"),{string:Jl,boolean:bw,date:QJ}=Cm.types(),zJ=ve(),{validateSchemaExists:Hae,validateTableExists:qae,validateSchemaName:Fae}=os(),JJ=A(),XJ=He(),yw=Q();yw.initSync();var ZJ=Jl.invalid(yw.get(JJ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(XJ.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(),Iw={operation:Jl.valid("add_node","update_node"),node_name:ZJ,subscriptions:Cm.array().items({table:Jl.optional(),schema:Jl.required(),subscribe:bw.required(),publish:bw.required().custom(e2),start_time:QJ.iso()}).min(1).required()};function jJ(e){return zJ.validateBySchema(e,Cm.object(Iw))}a(jJ,"addUpdateNodeValidator");function e2(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(e2,"checkForFalsy");ww.exports={addUpdateNodeValidator:jJ,validation_schema:Iw}});var Uw=m((kae,Cw)=>{var t2=ve(),r2={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Cw.exports=function(e){return t2.validateObject(e,r2)}});var Dm=m((Vae,Dw)=>{"use strict";var s2=A().OPERATIONS_ENUM,Um=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=s2.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Dw.exports=Um});var Mw=m((Yae,Lw)=>{"use strict";var n2={OPERATION:"operation",REFRESH:"refresh"},Lm=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Mm=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};Lw.exports={JWTTokens:Lm,TOKEN_TYPE_ENUM:n2,JWTRSAKeys:Mm}});var rc=m((Wae,Hw)=>{"use strict";var tc=require("jsonwebtoken"),Pm=require("fs-extra"),vm=V(),Cr=A(),{handleHDBError:$t,hdb_errors:i2}=W(),{HTTP_STATUS_CODES:Yt,AUTHENTICATION_ERROR_MSGS:Kt}=i2,ec=x(),Pw=ul(),qm=Ir(),o2=yr().update,a2=Dm(),c2=Ks(),{UserEventMsg:u2}=xr(),wn=Q();wn.initSync();var Bm=require("path"),{JWTTokens:l2,JWTRSAKeys:_2,TOKEN_TYPE_ENUM:Zl}=Mw(),d2=wn.get(Cr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?wn.get(Cr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",E2=wn.get(Cr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?wn.get(Cr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",jl="RS256",Hm;Hw.exports={createTokens:f2,validateOperationToken:m2,refreshOperationToken:h2,validateRefreshToken:Bw};async function f2(e){if(vm.isEmpty(e)||typeof e!="object")throw $t(new Error,Kt.INVALID_AUTH_OBJECT,Yt.BAD_REQUEST,void 0,void 0,!0);if(vm.isEmpty(e.username))throw $t(new Error,Kt.USERNAME_REQUIRED,Yt.BAD_REQUEST,void 0,void 0,!0);if(vm.isEmpty(e.password))throw $t(new Error,Kt.PASSWORD_REQUIRED,Yt.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await qm.findAndValidateUser(e.username,e.password),!t)throw $t(new Error,Kt.INVALID_CREDENTIALS,Yt.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw ec.error(E),$t(new Error,Kt.INVALID_CREDENTIALS,Yt.UNAUTHORIZED,void 0,void 0,!0)}let r=await e_(),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 vw(i,r.private_key,r.passphrase),c=await tc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:E2,algorithm:jl,subject:Zl.REFRESH}),u=Pw.hash(c),l=new a2(Cr.SYSTEM_SCHEMA_NAME,Cr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await o2(l)}catch(E){ec.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw $t(new Error,Kt.REFRESH_TOKEN_SAVE_FAILED,Yt.INTERNAL_SERVER_ERROR);return c2.signalUserChange(new u2(process.pid)),new l2(o,c)}a(f2,"createTokens");async function vw(e,t,r){return await tc.sign(e,{key:t,passphrase:r},{expiresIn:d2,algorithm:jl,subject:Zl.OPERATION})}a(vw,"signOperationToken");async function e_(){if(Hm===void 0)try{let e=Bm.join(wn.getHdbBasePath(),Cr.LICENSE_KEY_DIR_NAME,Cr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Bm.join(wn.getHdbBasePath(),Cr.LICENSE_KEY_DIR_NAME,Cr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Bm.join(wn.getHdbBasePath(),Cr.LICENSE_KEY_DIR_NAME,Cr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Pm.readFile(e)).toString(),n=(await Pm.readFile(t)).toString(),i=(await Pm.readFile(r)).toString();Hm=new _2(i,n,s)}catch(e){throw ec.error(e),$t(new Error,Kt.NO_ENCRYPTION_KEYS,Yt.INTERNAL_SERVER_ERROR)}return Hm}a(e_,"getJWTRSAKeys");async function h2(e){if(!e)throw $t(new Error,Kt.INVALID_BODY,Yt.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw $t(new Error,Kt.REFRESH_TOKEN_REQUIRED,Yt.BAD_REQUEST,void 0,void 0,!0);await Bw(e.refresh_token);let t=await e_(),r=await tc.decode(e.refresh_token);return{operation_token:await vw({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(h2,"refreshOperationToken");async function m2(e){try{let t=await e_(),r=await tc.verify(e,t.public_key,{algorithms:jl,subject:Zl.OPERATION});return await qm.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ec.warn(t),t.name&&t.name==="TokenExpiredError"?$t(new Error,Kt.TOKEN_EXPIRED,Yt.FORBIDDEN):$t(new Error,Kt.INVALID_TOKEN,Yt.UNAUTHORIZED)}}a(m2,"validateOperationToken");async function Bw(e){let t;try{let r=await e_(),s=await tc.verify(e,r.public_key,{algorithms:jl,subject:Zl.REFRESH});t=await qm.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ec.warn(r),r.name&&r.name==="TokenExpiredError"?$t(new Error,Kt.TOKEN_EXPIRED,Yt.FORBIDDEN):$t(new Error,Kt.INVALID_TOKEN,Yt.UNAUTHORIZED)}if(!Pw.validate(t.refresh_token,e))throw $t(new Error,Kt.INVALID_TOKEN,Yt.UNAUTHORIZED);return t}a(Bw,"validateRefreshToken")});var Fm=m((Jae,Gw)=>{"use strict";var S2=Uw(),Eo=require("passport"),p2=require("passport-local").Strategy,T2=require("passport-http").BasicStrategy,R2=require("util"),g2=Ir(),Fw=R2.callbackify(g2.findAndValidateUser),zae=nr(),A2=A(),qw=rc();Eo.use(new p2(function(e,t,r){Fw(e,t,r)}));Eo.use(new T2(function(e,t,r){Fw(e,t,r)}));Eo.serializeUser(function(e,t){t(null,e)});Eo.deserializeUser(function(e,t){t(null,e)});function O2(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":Eo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===A2.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?qw.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):qw.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Eo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(O2,"authorize");function N2(e,t){let r=S2(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(N2,"checkPermissions");Gw.exports={authorize:O2,checkPermissions:N2}});var fo=m((Zae,xw)=>{"use strict";var Gm=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},xm=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};xw.exports={Node:Gm,NodeSubscription:xm}});var Vw=m((ece,kw)=>{"use strict";var b2=A().OPERATIONS_ENUM,km=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=b2.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};kw.exports=km});var sc=m((rce,$w)=>{"use strict";var Vm=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},$m=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)}};$w.exports={RemotePayloadObject:Vm,RemotePayloadSubscription:$m}});var Kw=m((nce,Yw)=>{"use strict";var Ym=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}};Yw.exports=Ym});var zw=m((uce,Qw)=>{"use strict";var y2=Kw(),oce=ke(),Ww=Ie(),I2=x(),{getSchemaPath:ace,getTransactionAuditStorePath:cce}=Ce(),{getDatabases:w2}=(Ee(),se(be));Qw.exports=C2;async function C2(e){let t=new y2;try{let r=w2()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await Ww.environmentDataSize(schema_path,e.name),o=await Ww.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){I2.warn(`unable to stat table dbi due to ${r}`)}return t}a(C2,"lmdbGetTableSize")});var Xw=m((_ce,Jw)=>{"use strict";var Km=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}};Jw.exports=Km});var ho=m((hce,tC)=>{"use strict";var U2=require("fs-extra"),D2=require("path"),Ut=require("systeminformation"),Cn=x(),L2=nt(),Wm=He(),r_=A(),M2=zw(),eC=Xn(),{getThreadInfo:Zw}=dt(),sS=Q();sS.initSync();var P2=Xw(),{openEnvironment:Ece}=Ie(),{getSchemaPath:fce}=Ce(),{database:v2}=(Ee(),se(be)),t_;tC.exports={getHDBProcessInfo:Xm,getNetworkInfo:jm,getDiskInfo:Zm,getMemoryInfo:Jm,getCPUInfo:zm,getTimeInfo:Qm,getSystemInformation:eS,systemInformation:B2,getTableSize:tS,getMetrics:rS};function Qm(){return Ut.time()}a(Qm,"getTimeInfo");async function zm(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:l,..._}=await Ut.cpu();_.cpu_speed=await Ut.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:T,raw_currentload_user:p,cpus:R,...O}=await Ut.currentLoad();return O.cpus=[],R.forEach(q=>{let{raw_load:$,raw_load_idle:w,raw_load_irq:I,raw_load_nice:D,raw_load_system:z,raw_load_user:M,...ee}=q;O.cpus.push(ee)}),_.current_load=O,_}catch(e){return Cn.error(`error in getCPUInfo: ${e}`),{}}}a(zm,"getCPUInfo");async function Jm(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Cn.error(`error in getMemoryInfo: ${e}`),{}}}a(Jm,"getMemoryInfo");async function Xm(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await U2.readFile(D2.join(sS.get(r_.CONFIG_PARAMS.ROOTPATH),r_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===r_.NODE_ERROR_CODES.ENOENT)Cn.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 Cn.error(`error in getHDBProcessInfo: ${t}`),e}}a(Xm,"getHDBProcessInfo");async function Zm(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Ut.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,...l}=await Ut.fsStats();return e.read_write=l,e.size=await Ut.fsSize(),e}catch(t){return Cn.error(`error in getDiskInfo: ${t}`),e}}a(Zm,"getDiskInfo");async function jm(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Ut.networkInterfaceDefault(),e.latency=await Ut.inetChecksite("google.com"),(await Ut.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:l,ieee8021xState:_,carrier_changes:d,...E}=s;e.interfaces.push(E)}),(await Ut.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Cn.error(`error in getNetworkInfo: ${t}`),e}}a(jm,"getNetworkInfo");async function eS(){if(t_!==void 0)return t_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Ut.osInfo();e=c;let u=await Ut.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,t_=e,t_}catch(t){return Cn.error(`error in getSystemInformation: ${t}`),e}}a(eS,"getSystemInformation");async function tS(){let e=[],t=await eC.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await M2(s));return e}a(tS,"getTableSize");async function rS(){let e=await eC.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=v2({database:r,table:n}).getStats();s[n]={puts:o.puts,deletes:o.deletes,txns:o.txns,pageFlushes:o.pageFlushes,writes:o.writes,pagesWritten:o.pagesWritten,timeDuringTxns:o.timeDuringTxns,timeStartTxns:o.timeStartTxns,timePageFlushes:o.timePageFlushes,timeSync:o.timeSync}}catch(i){Cn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(rS,"getMetrics");async function jw(){if(sS.get(r_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await L2.getNATSReferences(),r=await t.streams.info(Wm.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Wm.WORK_QUEUE_CONSUMER_NAMES.stream_name,Wm.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(jw,"getNatsStreamInfo");async function B2(e){let t=new P2;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await eS(),t.time=Qm(),t.cpu=await zm(),t.memory=await Jm(),t.disk=await Zm(),t.network=await jm(),t.harperdb_processes=await Xm(),t.table_size=await tS(),t.metrics=await rS(),t.threads=await Zw(),t.replication=await jw(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await eS();break;case"time":t.time=Qm();break;case"cpu":t.cpu=await zm();break;case"memory":t.memory=await Jm();break;case"disk":t.disk=await Zm();break;case"network":t.network=await jm();break;case"harperdb_processes":t.harperdb_processes=await Xm();break;case"table_size":t.table_size=await tS();break;case"database_metrics":case"metrics":t.metrics=await rS();break;case"threads":t.threads=await Zw();break;case"replication":t.replication=await jw();break;default:break}return t}a(B2,"systemInformation")});var nS=m((Tce,rC)=>{"use strict";var Sce=require("fs-extra"),pce=x();rC.exports={version:H2,printVersion:F2,nodeVersion:q2};var Un=Va();function H2(){if(Un)return Un.version}a(H2,"version");function q2(){if(Un&&Un.engines&&Un.engines["preferred-node"])return Un.engines["preferred-node"]}a(q2,"nodeVersion");function F2(){Un&&console.log(`HarperDB Version ${Un.version}`)}a(F2,"printVersion")});var ms=m((Oce,oC)=>{"use strict";var G2=yr(),iS=V(),x2=require("util"),di=A(),sC=Q();sC.initSync();var k2=Fm(),nC=br(),{Node:gce,NodeSubscription:Ace}=fo(),V2=ji(),$2=Vw(),{RemotePayloadObject:Y2,RemotePayloadSubscription:K2}=sc(),{handleHDBError:W2,hdb_errors:Q2}=W(),{HTTP_STATUS_CODES:z2,HDB_ERROR_MSGS:J2}=Q2,X2=ls(),Z2=ho(),j2=nS(),{getDatabases:e3}=(Ee(),se(be)),t3=x2.promisify(k2.authorize),r3=nC.searchByHash,s3=nC.searchByValue;oC.exports={authHeaderToUser:n3,isEmpty:i3,getNodeRecord:o3,upsertNodeRecord:a3,buildNodePayloads:c3,checkClusteringEnabled:u3,getAllNodeRecords:l3,getSystemInfo:_3,reverseSubscription:iC};async function n3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await t3(t,null),e}a(n3,"authHeaderToUser");function i3(e){return e==null}a(i3,"isEmpty");async function o3(e){let t=new V2(di.SYSTEM_SCHEMA_NAME,di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return r3(t)}a(o3,"getNodeRecord");async function a3(e){let t=new $2(di.SYSTEM_SCHEMA_NAME,di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return G2.upsert(t)}a(a3,"upsertNodeRecord");function iC(e){if(iS.isEmpty(e.subscribe)||iS.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(iC,"reverseSubscription");function c3(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:l}=c,_=iS.getTableHashAttribute(u,l),{subscribe:d,publish:E}=iC(c),f=e3()[u]?.[l],h=new K2(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new Y2(r,t,n,s)}a(c3,"buildNodePayloads");function u3(){if(!sC.get(di.CONFIG_PARAMS.CLUSTERING_ENABLED))throw W2(new Error,J2.CLUSTERING_NOT_ENABLED,z2.BAD_REQUEST,void 0,void 0,!0)}a(u3,"checkClusteringEnabled");async function l3(){let e=new X2(di.SYSTEM_SCHEMA_NAME,di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await s3(e))}a(l3,"getAllNodeRecords");async function _3(){let e=await Z2.getSystemInformation();return{hdb_version:j2.version(),node_version:e.node_version,platform:e.platform}}a(_3,"getSystemInfo")});var oS=m((bce,fC)=>{"use strict";var s_=nt(),aC=V(),cC=He(),uC=A(),n_=x(),lC=$l(),d3=Oh(),{RemotePayloadObject:E3}=sc(),{handleHDBError:_C,hdb_errors:f3}=W(),{HTTP_STATUS_CODES:dC}=f3,{NodeSubscription:EC}=fo();fC.exports=h3;async function h3(e,t){let r;try{r=await s_.request(`${t}.${cC.REQUEST_SUFFIX}`,new E3(uC.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),n_.trace("Response from remote describe all request:",r)}catch(o){n_.error(`addNode received error from describe all request to remote node: ${o}`);let c=s_.requestErrorHandler(o,"add_node",t);throw _C(new Error,c,dC.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===cC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw _C(new Error,o,dC.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===uC.SYSTEM_SCHEMA_NAME){await s_.createLocalTableStream(c,u);let h=new EC(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=aC.doesSchemaExist(c),_=s[c]!==void 0,d=u?aC.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(n_.trace(`addNode creating schema: ${c}`),await lC.createSchema({operation:"create_schema",schema:c})),!d&&E){n_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new d3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await lC.createTable(h)}await s_.createLocalTableStream(c,u);let f=new EC(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(h3,"reviewSubscriptions")});var oc=m((Ice,SC)=>{"use strict";var{handleHDBError:i_,hdb_errors:m3}=W(),{HTTP_STATUS_CODES:o_}=m3,{addUpdateNodeValidator:S3}=Xl(),nc=x(),mC=A(),hC=He(),p3=V(),aS=nt(),ic=ms(),T3=Q(),R3=oS(),{Node:g3,NodeSubscription:A3}=fo(),{broadcast:O3}=dt(),N3="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",b3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",y3=T3.get(mC.CONFIG_PARAMS.CLUSTERING_NODENAME);SC.exports=I3;async function I3(e,t=!1){nc.trace("addNode called with:",e),ic.checkClusteringEnabled();let r=S3(e);if(r)throw i_(r,r.message,o_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await ic.getNodeRecord(s);if(!p3.isEmptyOrZeroLength(d))throw i_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,o_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await R3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=N3,o;let c=ic.buildNodePayloads(n,y3,mC.OPERATIONS_ENUM.ADD_NODE,await ic.getSystemInfo());nc.trace("addNode sending remote payload:",c);let u;try{u=await aS.request(`${s}.${hC.REQUEST_SUFFIX}`,c)}catch(d){nc.error(`addNode received error from request: ${d}`);let E=aS.requestErrorHandler(d,"add_node",s);throw i_(new Error,E,o_.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===hC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw i_(new Error,d,o_.INTERNAL_SERVER_ERROR,"error",d)}nc.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];nc.trace("Add node updating work stream for node:",s,"subscriptions:",f),await aS.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new A3(f.schema,f.table,f.publish,f.subscribe))}let _=new g3(s,l,u.system_info);return await ic.upsertNodeRecord(_),O3({type:"nats_update"}),i.length>0?o.message=b3:o.message=`Successfully added '${s}' to manifest`,o}a(I3,"addNode")});var uS=m((Cce,RC)=>{"use strict";var{handleHDBError:a_,hdb_errors:w3}=W(),{HTTP_STATUS_CODES:c_}=w3,{addUpdateNodeValidator:C3}=Xl(),ac=x(),TC=A(),pC=He(),U3=V(),cS=nt(),cc=ms(),D3=Q(),{cloneDeep:L3}=require("lodash"),M3=oS(),{NodeSubscription:P3}=fo(),{broadcast:v3}=dt(),B3="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",H3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",q3=D3.get(TC.CONFIG_PARAMS.CLUSTERING_NODENAME);RC.exports=F3;async function F3(e){ac.trace("updateNode called with:",e),cc.checkClusteringEnabled();let t=C3(e);if(t)throw a_(t,t.message,c_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=L3(await cc.getNodeRecord(r));if(U3.isEmptyOrZeroLength(s))throw a_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,c_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await M3(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=B3,o;let c=cc.buildNodePayloads(n,q3,TC.OPERATIONS_ENUM.UPDATE_NODE,await cc.getSystemInfo());ac.trace("updateNode sending remote payload:",c);let u;try{u=await cS.request(`${r}.${pC.REQUEST_SUFFIX}`,c)}catch(l){ac.error(`updateNode received error from request: ${l}`);let _=cS.requestErrorHandler(l,"update_node",r);throw a_(new Error,_,c_.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===pC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw a_(new Error,l,c_.INTERNAL_SERVER_ERROR,"error",l)}ac.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];ac.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await cS.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await G3(s[0],n,u.system_info),i.length>0?o.message=H3:o.message=`Successfully updated '${r}'`,o}a(F3,"updateNode");async function G3(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,l=e.subscriptions.length;u<l;u++){let _=s.subscriptions[u];if(_.schema===o.schema&&_.table===o.table){_.publish=o.publish,_.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new P3(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await cc.upsertNodeRecord(s),v3({type:"nats_update"})}a(G3,"updateNodeTable")});var bC=m((Dce,NC)=>{"use strict";var OC=require("joi"),{string:gC}=OC.types(),x3=ve(),AC=A(),k3=Q(),V3=He();NC.exports=$3;function $3(e){let t=gC.invalid(k3.get(AC.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(V3.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=OC.object({operation:gC.valid(AC.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return x3.validateBySchema(e,r)}a($3,"removeNodeValidator")});var lc=m((Mce,DC)=>{"use strict";var{handleHDBError:yC,hdb_errors:Y3}=W(),{HTTP_STATUS_CODES:IC}=Y3,K3=bC(),uc=x(),wC=ms(),W3=V(),u_=A(),CC=He(),UC=nt(),Q3=Q(),{RemotePayloadObject:z3}=sc(),{NodeSubscription:J3}=fo(),X3=va(),Z3=ri(),{broadcast:j3}=dt(),e4=Q3.get(u_.CONFIG_PARAMS.CLUSTERING_NODENAME);DC.exports=t4;async function t4(e){uc.trace("removeNode called with:",e),wC.checkClusteringEnabled();let t=K3(e);if(t)throw yC(t,t.message,IC.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await wC.getNodeRecord(r);if(W3.isEmptyOrZeroLength(s))throw yC(new Error,`Node '${r}' was not found.`,IC.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new z3(u_.OPERATIONS_ENUM.REMOVE_NODE,e4,[]),i,o=!1;try{i=await UC.request(`${r}.${CC.REQUEST_SUFFIX}`,n),uc.trace("Remove node reply from remote node:",r,i)}catch(u){uc.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];uc.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new J3(_.schema,_.table,!1,!1);await UC.updateWorkStream(d,r)}let c=new X3(u_.SYSTEM_SCHEMA_NAME,u_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Z3.deleteRecord(c),j3({type:"nats_update"}),i?.status===CC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(uc.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(t4,"removeNode")});var PC=m((vce,MC)=>{"use strict";var LC=require("joi"),{string:r4,array:s4}=LC.types(),n4=ve(),i4=Xl();MC.exports=o4;function o4(e){let t=LC.object({operation:r4.valid("configure_cluster").required(),connections:s4.items(i4.validation_schema).required()});return n4.validateBySchema(e,t)}a(o4,"configureClusterValidator")});var lS=m((Hce,FC)=>{"use strict";var a4=A(),l_=x(),c4=V(),u4=lc(),l4=oc(),vC=ms(),_4=PC(),{handleHDBError:BC,hdb_errors:d4}=W(),{HTTP_STATUS_CODES:HC}=d4,E4="Configure cluster complete.",f4="Failed to configure the cluster. Check the logs for more details.",h4="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";FC.exports=m4;async function m4(e){l_.trace("configure cluster called with:",e),vC.checkClusteringEnabled();let t=_4(e);if(t)throw BC(t,t.message,HC.BAD_REQUEST,void 0,void 0,!0);let r=await vC.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(qC(u4,{operation:a4.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);l_.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let E=0;E<o;E++){let f=e.connections[E];i.push(qC(l4,f,f.node_name))}let c=await Promise.allSettled(i);l_.trace("All results from configure_cluster add node:",c);let u=[],l=[],_=!1,d=n.concat(c);for(let E=0,f=d.length;E<f;E++){let h=d[E];h.status==="rejected"&&(l_.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let T=h?.value?.result;typeof T=="string"&&T.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(c4.isEmptyOrZeroLength(u))return{message:E4,connections:l};if(_)return{message:h4,failed_nodes:u,connections:l};throw BC(new Error,f4,HC.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(m4,"configureCluster");async function qC(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(qC,"functionWrapper")});var xC=m((Fce,GC)=>{"use strict";var __=require("joi"),S4=ve(),{validateSchemaExists:p4,validateTableExists:T4,validateSchemaName:R4}=os(),g4=__.object({operation:__.string().valid("purge_stream"),schema:__.string().custom(p4).custom(R4).required(),table:__.string().custom(T4).required()});function A4(e){return S4.validateBySchema(e,g4)}a(A4,"purgeStreamValidator");GC.exports=A4});var _S=m((xce,kC)=>{"use strict";var{handleHDBError:O4,hdb_errors:N4}=W(),{HTTP_STATUS_CODES:b4}=N4,y4=xC(),I4=nt(),w4=ms();kC.exports=C4;async function C4(e){let t=y4(e);if(t)throw O4(t,t.message,b4.BAD_REQUEST,void 0,void 0,!0);w4.checkClusteringEnabled();let{schema:r,table:s}=e;return await I4.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(C4,"purgeStream")});var E_=m((Vce,QC)=>{"use strict";var ES=ms(),U4=nt(),YC=Q(),d_=A(),Ei=He(),D4=V(),dS=x(),{RemotePayloadObject:L4}=sc(),{ErrorCode:VC}=require("nats"),$C=YC.get(d_.CONFIG_PARAMS.CLUSTERING_ENABLED),KC=YC.get(d_.CONFIG_PARAMS.CLUSTERING_NODENAME);QC.exports={clusterStatus:M4,buildNodeStatus:WC};async function M4(){let e={node_name:KC,is_enabled:$C,connections:[]};if(!$C)return e;let t=await ES.getAllNodeRecords();if(D4.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(WC(t[s],e.connections));return await Promise.allSettled(r),e}a(M4,"clusterStatus");async function WC(e,t){let r=e.name,s=new L4(d_.OPERATIONS_ENUM.CLUSTER_STATUS,KC,void 0,await ES.getSystemInfo()),n,i,o=Ei.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await U4.request(Ei.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Ei.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ei.CLUSTER_STATUS_STATUSES.CLOSED,dS.error(`Error getting node status from ${r} `,n))}catch(u){dS.warn(`Error getting node status from ${r}`,u),u.code===VC.NoResponders?o=Ei.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===VC.Timeout?o=Ei.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ei.CLUSTER_STATUS_STATUSES.CLOSED}let c=new P4(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!==d_.PRE_4_0_0_VERSION&&await ES.upsertNodeRecord(u)}catch(u){dS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(WC,"buildNodeStatus");function P4(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(P4,"NodeStatusObject")});var hS=m((Yce,zC)=>{"use strict";var{handleHDBError:v4,hdb_errors:B4}=W(),{HTTP_STATUS_CODES:H4}=B4,q4=nt(),F4=ms(),fS=V(),f_=require("joi"),G4=ve(),x4=2e3,k4=f_.object({timeout:f_.number().min(1),connected_nodes:f_.boolean(),routes:f_.boolean()});zC.exports=V4;async function V4(e){F4.checkClusteringEnabled();let t=G4.validateBySchema(e,k4);if(t)throw v4(t,t.message,H4.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||fS.autoCastBoolean(s),o=n===void 0||fS.autoCastBoolean(n),c={nodes:[]},u=await q4.getServerList(r??x4),l={};if(i)for(let _=0,d=u.length;_<d;_++){let E=u[_].statsz;E&&(l[u[_].server.name]=E.routes)}for(let _=0,d=u.length;_<d;_++){if(u[_].statsz)continue;let E=u[_].server,f=u[_].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[_].response_time};i&&(h.connected_nodes=l[E.name]?l[E.name].map(T=>T.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(T=>({host:T.split(":")[0],port:fS.autoCast(T.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(V4,"clusterNetwork")});var jC=m((Wce,ZC)=>{"use strict";var mS=require("joi"),JC=ve(),{route_constraints:XC}=bE();ZC.exports={setRoutesValidator:$4,deleteRoutesValidator:Y4};function $4(e){let t=mS.object({server:mS.valid("hub","leaf").required(),routes:XC.required()});return JC.validateBySchema(e,t)}a($4,"setRoutesValidator");function Y4(e){let t=mS.object({routes:XC.required()});return JC.validateBySchema(e,t)}a(Y4,"deleteRoutesValidator")});var pS=m((zce,sU)=>{"use strict";var fi=gr(),SS=V(),h_=A(),eU=jC(),{handleHDBError:tU,hdb_errors:K4}=W(),{HTTP_STATUS_CODES:rU}=K4,W4="cluster routes successfully set",Q4="cluster routes successfully deleted";sU.exports={setRoutes:z4,getRoutes:J4,deleteRoutes:X4};function z4(e){let t=eU.setRoutesValidator(e);if(t)throw tU(t,t.message,rU.BAD_REQUEST,void 0,void 0,!0);let r=fi.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 l=e.routes[c];l.port=SS.autoCast(l.port);let _=s.some(E=>E.host===l.host&&E.port===l.port),d=n.some(E=>E.host===l.host&&E.port===l.port);_||d?i.push(l):(s.push(l),o.push(l))}return e.server==="hub"?fi.updateConfigValue(h_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):fi.updateConfigValue(h_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:W4,set:o,skipped:i}}a(z4,"setRoutes");function J4(){let e=fi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(J4,"getRoutes");function X4(e){let t=eU.deleteRoutesValidator(e);if(t)throw tU(t,t.message,rU.BAD_REQUEST,void 0,void 0,!0);let r=fi.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let l=0,_=e.routes.length;l<_;l++){let d=e.routes[l],E=!1;for(let f=0,h=s.length;f<h;f++){let T=s[f];if(d.host===T.host&&d.port===T.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,T=n.length;h<T;h++){let p=n[h];if(d.host===p.host&&d.port===p.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=SS.isEmptyOrZeroLength(s)?null:s,fi.updateConfigValue(h_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=SS.isEmptyOrZeroLength(n)?null:n,fi.updateConfigValue(h_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:Q4,deleted:i,skipped:o}}a(X4,"deleteRoutes")});var iU=m((Xce,nU)=>{"use strict";var _c=require("alasql"),hi=require("recursive-iterator"),Kr=x(),Z4=V(),dc=A(),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,eX(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=>dc.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=>!dc.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][dc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=j4(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(l=>({attribute_name:l.attribute}));let u=this.affected_attributes.get(i).get(o).filter(l=>!dc.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new _c.yy.Column({columnid:l});n.tableid&&(_.tableid=n.tableid),this.ast.columns.push(_),u.includes(l)||u.push(l)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function j4(e){return e.filter(t=>t[dc.PERMS_CRUD_ENUM.READ])}a(j4,"filterReadRestrictedAttrs");function eX(e,t,r,s,n){tX(e,t,r,s,n)}a(eX,"interpretAST");function Ec(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(Ec,"addSchemaTableToMap");function tX(e,t,r,s,n){if(!e){Kr.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof _c.yy.Insert?iX(e,t,r):e instanceof _c.yy.Select?rX(e,t,r,s,n):e instanceof _c.yy.Update?sX(e,t,r):e instanceof _c.yy.Delete?nX(e,t,r):Kr.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(tX,"getRecordAttributesAST");function rX(e,t,r,s,n){if(!e){Kr.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Z4.isEmptyOrZeroLength(i)){Kr.error("No schema specified");return}e.from.forEach(c=>{Ec(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Ec(c.table,t,r,s,n)});let o=new hi(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{Kr.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(c.columnid)<0&&t.get(l).get(u).push(c.columnid)}if(e.where){let c=new hi(e.where),u=e.from[0].tableid;for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid?l.tableid:u;if(!t.get(i).has(_))if(r.has(_))_=r.get(_);else{Kr.info(`table specified as ${_} not found.`);continue}t.get(i).get(_).indexOf(l.columnid)<0&&t.get(i).get(_).push(l.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new hi(c.on);for(let{node:l}of u)if(l&&l.columnid){let _=l.tableid,d=n.get(_);if(!t.get(d).has(_))if(r.has(_))_=r.get(_);else{Kr.info(`table specified as ${_} not found.`);continue}t.get(d).get(_).indexOf(l.columnid)<0&&t.get(d).get(_).push(l.columnid)}}),e.order){let c=new hi(e.order);for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid,_=s.has(l)?s.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{Kr.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(rX,"getSelectAttributes");function sX(e,t,r){if(!e){Kr.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new hi(e.columns),n=e.table.databaseid;Ec(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&RS(e.table.tableid,n,i.columnid,t,r)}a(sX,"getUpdateAttributes");function nX(e,t,r){if(!e){Kr.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new hi(e.where),n=e.table.databaseid;Ec(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&RS(e.table.tableid,n,i.columnid,t,r)}a(nX,"getDeleteAttributes");function iX(e,t,r){if(!e){Kr.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new hi(e.columns),n=e.into.databaseid;Ec(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&RS(e.into.tableid,n,i.columnid,t,r)}a(iX,"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");nU.exports=TS});var OS=m((jce,uU)=>{var m_=ba(),oU=require("chalk"),dr=x(),aU=require("prompt"),{promisify:oX}=require("util"),gS=A(),aX=require("fs-extra"),cX=require("path"),uX=V(),lX=nS(),cU=Q();cU.initSync();var _X=require("moment"),dX=oX(aU.get),EX=cX.join(cU.getHdbBasePath(),gS.LICENSE_KEY_DIR_NAME,gS.LICENSE_FILE_NAME,gS.LICENSE_FILE_NAME);uU.exports={getFingerprint:hX,setLicense:fX,parseLicense:AS,register:mX,getRegistrationInfo:pX};async function fX(e){if(e&&e.key&&e.company){try{dr.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 dr.error(r),dr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(fX,"setLicense");async function hX(){let e={};try{e=await m_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw dr.error(r),dr.error(t),new Error(r)}return e}a(hX,"getFingerprint");async function AS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");dr.info("Validating license input...");let r=m_.validateLicense(e,t);if(dr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(dr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(dr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{dr.info("writing license to disk"),await aX.writeFile(EX,JSON.stringify({license_key:e,company:t}))}catch(s){throw dr.error("Failed to write License"),s}return"Registration successful."}a(AS,"parseLicense");async function mX(){let e=await SX();return AS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(mX,"register");async function SX(){let e=await m_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:oU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:oU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{aU.start()}catch(s){dr.error(s)}let r;try{r=await dX(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(SX,"promptForRegistration");async function pX(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await m_.getLicense()}catch(r){throw dr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(uX.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=lX.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=_X.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(pX,"getRegistrationInfo")});var _U=m((tue,lU)=>{"use strict";var TX=He(),NS=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,l,_,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+TX.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:l,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:_,port:d,routes:E,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};lU.exports=NS});var fU=m((sue,EU)=>{"use strict";var dU=He(),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+dU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+dU.SERVER_SUFFIX.LEAF},this.tls={cert_file:l,key_file:_,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"}};EU.exports=bS});var mU=m((iue,hU)=>{"use strict";var yS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};hU.exports=yS});var pU=m((aue,SU)=>{"use strict";var RX=He(),IS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+RX.SERVER_SUFFIX.ADMIN,this.password=r}};SU.exports=IS});var US=m((uue,gU)=>{"use strict";var fc=require("path"),R_=require("fs-extra"),gX=_U(),AX=fU(),OX=mU(),NX=pU(),wS=Ir(),mo=V(),Wt=gr(),T_=A(),S_=He(),{CONFIG_PARAMS:Je}=T_,mc=x(),g_=Q(),TU=$s(),CS=nt(),hc="clustering",bX=1e4,RU=5;gU.exports={generateNatsConfig:yX,removeNatsConfig:IX};async function yX(e=!1,t=void 0){g_.initSync();let r=g_.get(Je.ROOTPATH),s=fc.join(r,hc,S_.PID_FILES.HUB),n=fc.join(r,hc,S_.PID_FILES.LEAF),i=Wt.getConfigFromFile(Je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=fc.join(r,hc,S_.NATS_CONFIG_FILES.HUB_SERVER),c=fc.join(r,hc,S_.NATS_CONFIG_FILES.LEAF_SERVER),u=Wt.getConfigFromFile(Je.CLUSTERING_TLS_CERTIFICATE),l=Wt.getConfigFromFile(Je.CLUSTERING_TLS_PRIVATEKEY),_=Wt.getConfigFromFile(Je.CLUSTERING_TLS_CERT_AUTH),d=Wt.getConfigFromFile(Je.CLUSTERING_TLS_INSECURE),E=Wt.getConfigFromFile(Je.CLUSTERING_TLS_VERIFY),f=Wt.getConfigFromFile(Je.CLUSTERING_NODENAME),h=Wt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await CS.checkNATSServerInstalled()||A_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let T=await wS.listUsers(),p=Wt.getConfigFromFile(Je.CLUSTERING_USER),R=await wS.getClusterUser();(mo.isEmpty(R)||R.active!==!0)&&A_(`Invalid cluster user '${p}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await p_(Je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await p_(Je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await p_(Je.CLUSTERING_HUBSERVER_NETWORK_PORT),await p_(Je.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],q=[];for(let[ee,Ne]of T.entries())Ne.role.role===T_.ROLE_TYPES_ENUM.CLUSTER_USER&&Ne.active&&(O.push(new NX(Ne.username,TU.decrypt(Ne.hash))),q.push(new OX(Ne.username,TU.decrypt(Ne.hash))));let $=[],{hub_routes:w}=Wt.getClusteringRoutes();if(!mo.isEmptyOrZeroLength(w))for(let ee of w)$.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${ee.host}:${ee.port}`);let I=new gX(Wt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,Wt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_CLUSTER_NAME),Wt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),$,O,q);_==null&&(delete I.tls.ca_file,delete I.leafnodes.tls.ca_file),t=mo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===T_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await R_.writeJson(o,I),mc.trace(`Hub server config written to ${o}`));let D=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,z=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,M=new AX(Wt.getConfigFromFile(Je.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[D],[z],O,q,u,l,_,d);_==null&&delete M.tls.ca_file,(t===void 0||t===T_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await R_.writeJson(c,M),mc.trace(`Leaf server config written to ${c}`))}a(yX,"generateNatsConfig");async function p_(e){let t=g_.get(e);return mo.isEmpty(t)&&A_(`port undefined for '${e}'`),await mo.isPortTaken(t)&&A_(`'${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(p_,"isPortAvailable");function A_(e){let t=`Error generating clustering config: ${e}`;mc.error(t),console.error(t),process.exit(1)}a(A_,"generateNatsConfigError");async function IX(e){let{port:t,config_file:r}=CS.getServerConfig(e),{username:s,decrypt_hash:n}=await wS.getClusterUser(),i=0,o=500;for(;i<RU;){try{let l=await CS.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){mc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=RU)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check the ${e} log for further details.`);await mo.async_set_timeout(o*i)}let c="0".repeat(bX),u=fc.join(g_.get(Je.ROOTPATH),hc,r);await R_.writeFile(u,c),await R_.remove(u),mc.notify(e,"started.")}a(IX,"removeNatsConfig")});var IU=m((_ue,yU)=>{"use strict";var Er=Q(),wX=ba(),ae=A(),Sc=He(),zs=require("path"),{PACKAGE_ROOT:N_}=A(),AU=Q(),O_=V(),So="/dev/null",CX=zs.join(N_,"launchServiceScripts"),OU=zs.join(N_,"utility/scripts"),UX=zs.join(OU,ae.HDB_RESTART_SCRIPT),NU=zs.resolve(N_,"dependencies",`${process.platform}-${process.arch}`,Sc.NATS_BINARY_NAME);function bU(){let t=wX.licenseSearch().ram_allocation||ae.RAM_ALLOCATION_ENUM.DEFAULT,r=ae.MEM_SETTING_KEY+t,s={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return O_.noBootFile()&&(s[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=O_.getEnvCliRootPath()),{name:ae.PROCESS_DESCRIPTORS.HDB,script:ae.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:N_}}a(bU,"generateMainServerConfig");var DX=9930;function LX(){Er.initSync(!0);let e=Er.get(ae.CONFIG_PARAMS.ROOTPATH),t=zs.join(e,"clustering",Sc.NATS_CONFIG_FILES.HUB_SERVER),r=zs.join(Er.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=AU.get(ae.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Sc.LOG_LEVEL_FLAGS[Er.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==DX?"-"+s:""),script:NU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Er.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=So,i.error_file=So),i}a(LX,"generateNatsHubServerConfig");var MX=9940;function PX(){Er.initSync(!0);let e=Er.get(ae.CONFIG_PARAMS.ROOTPATH),t=zs.join(e,"clustering",Sc.NATS_CONFIG_FILES.LEAF_SERVER),r=zs.join(Er.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=AU.get(ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Sc.LOG_LEVEL_FLAGS[Er.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==MX?"-"+s:""),script:NU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Er.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=So,i.error_file=So),i}a(PX,"generateNatsLeafServerConfig");function vX(){Er.initSync();let e=zs.join(Er.get(ae.CONFIG_PARAMS.LOGGING_ROOT),ae.LOG_NAMES.HDB),t={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:CX,autorestart:!1};return Er.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=So,t.error_file=So),t}a(vX,"generateClusteringUpgradeV4ServiceConfig");function BX(){let e={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.RESTART_HDB};return O_.noBootFile()&&(e[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=O_.getEnvCliRootPath()),{...{name:ae.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:OU},script:UX}}a(BX,"generateRestart");function HX(){return{apps:[bU()]}}a(HX,"generateAllServiceConfigs");yU.exports={generateAllServiceConfigs:HX,generateMainServerConfig:bU,generateRestart:BX,generateNatsHubServerConfig:LX,generateNatsLeafServerConfig:PX,generateClusteringUpgradeV4ServiceConfig:vX}});var PS=m((pue,xU)=>{"use strict";var ge=A(),qX=V(),pc=US(),Tc=nt(),Ss=He(),Dn=IU(),b_=Q(),Js=x(),FX=ms(),{startWorker:wU,onMessageFromWorkers:GX}=dt(),xX=ho(),kX=require("util"),UU=require("child_process"),{execFile:VX}=UU,Eue=kX.promisify(UU.exec),fue=require("systeminformation"),he;xU.exports={enterPM2Mode:$X,start:mi,stop:DS,reload:DU,restart:LU,list:LS,describe:PU,connect:Xs,kill:zX,startAllServices:JX,startService:MS,getUniqueServicesList:vU,restartAllServices:XX,isServiceRegistered:BU,reloadStopStart:HU,restartHdb:MU,deleteProcess:WX,startClusteringProcesses:FU,startClusteringThreads:GU,isHdbRestartRunning:QX,isClusteringRunning:jX,stopClustering:ZX,reloadClustering:eZ};var{PACKAGE_ROOT:hue}=A(),mue=A(),{loggerWithTag:Sue}=Js,Rc=!1;GX(e=>{e.type==="restart"&&b_.initSync(!0)});function $X(){Rc=!0}a($X,"enterPM2Mode");function Xs(){return he||(he=require("pm2")),new Promise((e,t)=>{he.connect((r,s)=>{Js.setupConsoleLogging(),r&&t(r),e(s)})})}a(Xs,"connect");var Qt,YX=10,CU;function mi(e){if(Rc)return KX(e);let t=VX(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Qt.indexOf(t);i>-1&&Qt.splice(i,1),!CU&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<YX&&mi(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=b_.get(ge.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&Ss.LOG_LEVEL_HIERARCHY[i]>=Ss.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Ss.LOG_LEVELS.ERR||l===Ss.LOG_LEVELS.WRN?Js.OUTPUTS.STDERR:Js.OUTPUTS.STDOUT;Js.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=Ss.LOG_LEVELS[d]}if(Ss.LOG_LEVEL_HIERARCHY[i]>=Ss.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===Ss.LOG_LEVELS.ERR||l===Ss.LOG_LEVELS.WRN?Js.OUTPUTS.STDERR:Js.OUTPUTS.STDOUT;Js.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Qt){Qt=[];let n=a(()=>{CU=!0,Qt&&(Qt.map(i=>i.kill()),process.exit(0))},"kill_children");process.on("exit",n),process.on("SIGINT",n),process.on("SIGQUIT",n),process.on("SIGTERM",n)}Qt.push(t)}a(mi,"start");function KX(e){return new Promise(async(t,r)=>{try{await Xs()}catch(s){r(s)}he.start(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(KX,"startWithPM2");function DS(e){if(!Rc){for(let t of Qt||[])t.name===e&&(Qt.splice(Qt.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Xs()}catch(s){r(s)}he.stop(e,async(s,n)=>{s&&(he.disconnect(),r(s)),he.delete(e,(i,o)=>{i&&(he.disconnect(),r(s)),he.disconnect(),t(o)})})})}a(DS,"stop");function DU(e){return new Promise(async(t,r)=>{try{await Xs()}catch(s){r(s)}he.reload(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(DU,"reload");function LU(e){if(!Rc)for(let t of Qt||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Xs()}catch(s){r(s)}he.restart(e,(s,n)=>{he.disconnect(),t(n)})})}a(LU,"restart");function WX(e){return new Promise(async(t,r)=>{try{await Xs()}catch(s){r(s)}he.delete(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(WX,"deleteProcess");async function MU(){await mi(Dn.generateRestart())}a(MU,"restartHdb");async function QX(){let e=await LS();for(let t in e)if(e[t].name===ge.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(QX,"isHdbRestartRunning");function LS(){return new Promise(async(e,t)=>{try{await Xs()}catch(r){t(r)}he.list((r,s)=>{r&&(he.disconnect(),t(r)),he.disconnect(),e(s)})})}a(LS,"list");function PU(e){return new Promise(async(t,r)=>{try{await Xs()}catch(s){r(s)}he.describe(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(PU,"describe");function zX(){if(!Rc){for(let e of Qt||[])e.kill();Qt=[];return}return new Promise(async(e,t)=>{try{await Xs()}catch(r){t(r)}he.killDaemon((r,s)=>{r&&(he.disconnect(),t(r)),he.disconnect(),e(s)})})}a(zX,"kill");async function JX(){try{await FU(),await GU(),await mi(Dn.generateAllServiceConfigs())}catch(e){throw he.disconnect(),e}}a(JX,"startAllServices");async function MS(e){try{let t;switch(e=e.toLowerCase(),e){case ge.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Dn.generateMainServerConfig();break;case ge.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Dn.generateNatsIngestServiceConfig();break;case ge.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Dn.generateNatsReplyServiceConfig();break;case ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Dn.generateNatsHubServerConfig(),await mi(t),await pc.removeNatsConfig(e);return;case ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Dn.generateNatsLeafServerConfig(),await mi(t),await pc.removeNatsConfig(e);return;case ge.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Dn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await mi(t)}catch(t){throw he.disconnect(),t}}a(MS,"startService");async function vU(){try{let e=await LS(),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 he.disconnect(),e}}a(vU,"getUniqueServicesList");async function XX(e=[]){try{let t=!1,r=await vU();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===ge.PROCESS_DESCRIPTORS.HDB?t=!0:await LU(o))}t&&await HU(ge.PROCESS_DESCRIPTORS.HDB)}catch(t){throw he.disconnect(),t}}a(XX,"restartAllServices");async function BU(e){if(Qt?.find(r=>r.name===e))return!0;let t=await xX.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(BU,"isServiceRegistered");async function HU(e){let t=e===ge.PROCESS_DESCRIPTORS.HDB?b_.get(ge.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):b_.get(ge.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await PU(e),s=qX.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await DS(e),await MS(e)):e===ge.PROCESS_DESCRIPTORS.HDB?await MU():await DU(e)}a(HU,"reloadStopStart");var qU;async function FU(){for(let e in ge.CLUSTERING_PROCESSES){let t=ge.CLUSTERING_PROCESSES[e];await MS(t)}}a(FU,"startClusteringProcesses");async function GU(){qU=wU(ge.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ge.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Tc.createWorkQueueStream(Ss.WORK_QUEUE_CONSUMER_NAMES),await Tc.updateIngestStreamConsumer(),await Tc.updateLocalStreams();let e=await FX.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ge.PRE_4_0_0_VERSION){Js.info("Starting clustering upgrade 4.0.0 process"),wU(ge.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(GU,"startClusteringThreads");async function ZX(){for(let e in ge.CLUSTERING_PROCESSES)if(e!==ge.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ge.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await qU.terminate();else{let t=ge.CLUSTERING_PROCESSES[e];await DS(t)}}a(ZX,"stopClustering");async function jX(){for(let e in ge.CLUSTERING_PROCESSES){let t=ge.CLUSTERING_PROCESSES[e];if(await BU(t)===!1)return!1}return!0}a(jX,"isClusteringRunning");async function eZ(){await pc.generateNatsConfig(!0),await Tc.reloadNATSHub(),await Tc.reloadNATSLeaf(),await pc.removeNatsConfig(ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await pc.removeNatsConfig(ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(eZ,"reloadClustering")});var xS=m((Rue,WU)=>{"use strict";var tZ=require("minimist"),{isMainThread:HS,parentPort:$U}=require("worker_threads"),qe=A(),{PROCESS_DESCRIPTORS_VALIDATE:gc}=qe,ps=x(),qS=V(),y_=US(),po=nt(),vS=He(),YU=gr(),Ts=PS(),kU=ho(),rZ=fE(),{restartWorkers:I_,onMessageByType:sZ}=dt(),{handleHDBError:nZ,hdb_errors:iZ}=W(),{HTTP_STATUS_CODES:oZ}=iZ,w_=Q();w_.initSync();var Ac=`Restarting HarperDB. This may take up to ${qe.RESTART_TIMEOUT_MS/1e3} seconds.`,aZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",VU="Clustering is not enabled so cannot be restarted",cZ="Invalid service",Si,Wr;WU.exports={restart:KU,restartService:FS};HS&&sZ(qe.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?FS({service:e.workerType}):KU({operation:"restart"})});async function KU(e){Wr=Object.keys(e).length===0,Si=await Ts.isServiceRegistered(qe.HDB_PROC_DESCRIPTOR);let t=tZ(process.argv);if(t.service){await FS(t);return}if(Wr&&!Si){console.error(aZ);return}if(Wr&&console.log(Ac),Si){Ts.enterPM2Mode(),ps.notify(Ac);let r=rZ(Object.keys(qe.CONFIG_PARAM_MAP),!0);return qS.isEmptyOrZeroLength(Object.keys(r))||YU.updateConfigValue(void 0,void 0,r,!0,!0),lZ(),Ac}return HS?(ps.notify(Ac),await GS(),setTimeout(()=>{I_()},50)):$U.postMessage({type:qe.ITC_EVENT_TYPES.RESTART}),Ac}a(KU,"restart");async function FS(e){let{service:t}=e;if(qe.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw nZ(new Error,cZ,oZ.BAD_REQUEST,void 0,void 0,!0);if(Si=await Ts.isServiceRegistered(qe.HDB_PROC_DESCRIPTOR),!HS)return $U.postMessage({type:qe.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case gc.clustering:if(!w_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=VU;break}Wr&&console.log("Restarting clustering"),ps.notify("Restarting clustering"),await GS();break;case gc.clustering_config:case gc["clustering config"]:if(!w_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=VU;break}Wr&&console.log("Restarting clustering_config"),ps.notify("Restarting clustering_config"),await Ts.reloadClustering();break;case"custom_functions":case"custom functions":case gc.harperdb:case gc.http_workers:if(Wr&&!Si){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}Wr&&console.log("Restarting http_workers"),ps.notify("Restarting http_workers"),Si?await Ts.restart(qe.HDB_PROC_DESCRIPTOR):setTimeout(()=>{I_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ps.error(r),Wr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(FS,"restartService");async function uZ(){await po.publishToStream(`${vS.SUBJECT_PREFIXES.TXN}.${vS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,vS.WORK_QUEUE_CONSUMER_NAMES.stream_name,po.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(uZ,"postDummyNatsMsg");async function lZ(){await GS(),await Ts.restart(qe.HDB_PROC_DESCRIPTOR),await qS.async_set_timeout(2e3),w_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await BS(),Wr&&(await po.closeConnection(),process.exit(0))}a(lZ,"restartPM2Mode");async function GS(){if(!YU.getConfigFromFile(qe.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await kU.getHDBProcessInfo()).clustering.length===0)ps.trace("Clustering not running, restart will start clustering services"),await y_.generateNatsConfig(!0),await Ts.startClusteringProcesses(),await Ts.startClusteringThreads(),await BS(),Wr&&await po.closeConnection();else{await uZ(),await y_.generateNatsConfig(!0),Si?(ps.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Ts.restart(qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ts.restart(qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await kU.getHDBProcessInfo()).clustering.forEach(n=>{ps.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await qS.async_set_timeout(3e3),await BS(),await po.updateLocalStreams(),Wr&&await po.closeConnection(),ps.trace("Restart clustering restarting ingest and reply service threads");let t=I_(qe.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=I_(qe.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(GS,"restartClustering");async function BS(){await y_.removeNatsConfig(qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await y_.removeNatsConfig(qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(BS,"removeNatsConfig")});var nD=m((Oue,sD)=>{"use strict";var Aue=require("lodash"),zt=A(),{handleHDBError:QU,hdb_errors:_Z}=W(),{HDB_ERROR_MSGS:dZ,HTTP_STATUS_CODES:EZ}=_Z,kS=x();sD.exports={getRolePermissions:hZ};var pi=Object.create(null),fZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),ZU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),jU=a((e=!1,t=!1,r=!1,s=!1)=>({[zt.PERMS_CRUD_ENUM.READ]:e,[zt.PERMS_CRUD_ENUM.INSERT]:t,[zt.PERMS_CRUD_ENUM.UPDATE]:r,[zt.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),VS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...jU(t,r,s,n)}),"table_perms_template"),zU=a((e,t=jU())=>({attribute_name:e,describe:rD(t),[Oc]:t[Oc],[$S]:t[$S],[YS]:t[YS]}),"attr_perms_template"),JU=a((e,t=!1)=>({attribute_name:e,describe:t,[Oc]:t}),"timestamp_attr_perms_template"),{READ:Oc,INSERT:$S,UPDATE:YS}=zt.PERMS_CRUD_ENUM,eD=Object.values(zt.PERMS_CRUD_ENUM),tD=[Oc,$S,YS];function hZ(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[zt.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(pi[t]&&pi[t].key===s)return pi[t].perms;let n=mZ(e,r);return pi[t]?pi[t].key=s:pi[t]=fZ(s),pi[t].perms=n,n}catch(r){if(!e[zt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[zt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<zt.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 kS.error(s),kS.debug(r),QU(new Error,dZ.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 kS.error(s),QU(new Error)}}}a(hZ,"getRolePermissions");function mZ(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[zt.SYSTEM_SCHEMA_NAME]=s[zt.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]=ZU(),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],l=pZ(c,u);r[i].describe||eD.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=VS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=VS()})}),r}a(mZ,"translateRolePermissions");function SZ(e){let t=ZU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=VS(!0,!0,!0,!0,!0)}),t}a(SZ,"createStructureUserPermissions");function pZ(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}=_,E=_;return zt.TIME_STAMP_NAMES.includes(d)&&(E=JU(d,_[Oc])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=zU(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=rD(_),n.attribute_permissions.push(_),c||TZ(_,u)}else if(l!==o){let _;zt.TIME_STAMP_NAMES.includes(l)?_=JU(l):_=zU(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=XU(n),n}else return e.describe=XU(e),e}a(pZ,"getTableAttrPerms");function XU(e){return eD.filter(t=>e[t]).length>0}a(XU,"getSchemaTableDescribePerm");function rD(e){return tD.filter(t=>e[t]).length>0}a(rD,"getAttributeDescribePerm");function TZ(e,t){tD.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(TZ,"checkForHashPerms")});var iD={};je(iD,{Resources:()=>C_,keyArrayToString:()=>To,resetResources:()=>RZ,resources:()=>Ln});function RZ(){return Ln=new C_}function To(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var C_,Ln,Nc=pe(()=>{Wn();C_=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 l=2;for(;(l=c.indexOf("/",l))>-1;){let _=this.get(c.slice(0,l));_&&(_.hasSubPaths=!0),l+=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&&(n.relativeURL="")),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 Ke(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(RZ,"resetResources");a(To,"keyArrayToString")});var Ti,KS=pe(()=>{Ti=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]}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 bc={};je(bc,{authentication:()=>_D,login:()=>CZ,logout:()=>UZ,start:()=>wZ});async function _D(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?NZ?OZ:[]:AZ?gZ:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h=new Ti([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return U_&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),U_&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(U_){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let T=n.indexOf(";",h),p=n.indexOf("=",h);c=n.slice(p+1,T===-1?n.length:T),u=await aD.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,T)=>{let p=new M_.AuthAuditLog(f,h,Rt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);p.auth_strategy=T,c&&(p.session_id=c),e.headers.referer&&(p.referer=e.headers.referer),e.headers.origin&&(p.origin=e.headers.origin),h===Rt.AUTH_AUDIT_STATUS.SUCCESS?oD.notify(p):oD.error(p)},"authAuditLog"),_;if(s){if(_=Ro.get(s),!_){let[f,h]=s.split(" "),T,p;try{switch(f){case"Basic":[T,p]=atob(h).split(":"),_=T||p?await tt.auth(T,p):null;break;case"Bearer":try{_=await(0,L_.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,L_.validateRefreshToken)(h),{status:-1}}catch{throw R}}break}}catch(R){return IZ&&(Ro.get(h)||(Ro.set(h,h),l(T,Rt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:Zs({error:R.message},e)}}Ro.set(s,_),yZ&&l(_.username,Rt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await tt.auth(u.user,null,!1):bZ&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,D_.getSuperUser)());U_&&(e.session.update=function(f){if(!c){c=(0,uD.v4)();let T=`${(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",T):d?.headers?.set&&d.headers.set("Set-Cookie",T)}return f.id=c,aD.put(f)},e.login=async function(f,h){e.user=await tt.auth(f,h),e.session.update({user:e.user.username})},(_&&!u||u?.user?.username!==_?.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")&&Ln.loginPath?(d.status=302,d.headers.set("Location",Ln.loginPath(e))):d.headers.set("WWW-Authenticate","Basic"));let E=o.length;if(E>0){let f=d.headers;f||(d.headers=f=new Ti);for(let h=0;h<E;){let T=o[h++];f.set(T,o[h++])}}return o=null,d}function wZ({server:e,port:t}){e.request(_D,{port:t||"all"}),cD||(cD=!0,setInterval(()=>{Ro=new Map},Ur.get(Rt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),lD.user.addListener(()=>{Ro=new Map}))}async function CZ(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 UZ(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var D_,L_,uD,Ur,Rt,M_,lD,oD,gZ,AZ,OZ,NZ,aD,U_,bZ,yZ,IZ,Ro,cD,P_=pe(()=>{D_=U(Ir());es();Nc();L_=U(rc());Ee();uD=require("uuid"),Ur=U(Q()),Rt=U(A()),M_=U(x());go();lD=U(Ia());KS();oD=(0,M_.loggerWithTag)("auth-event");Ur.initSync();gZ=Ur.get(Rt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),AZ=Ur.get(Rt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),OZ=Ur.get(Rt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),NZ=Ur.get(Rt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);tt.auth=D_.findAndValidateUser;aD=st({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),U_=Ur.get(Rt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,bZ=Ur.get(Rt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,yZ=Ur.get(Rt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,IZ=Ur.get(Rt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Ro=new Map;a(_D,"authentication");a(wZ,"start");a(CZ,"login");a(UZ,"logout")});var pD=m((vue,SD)=>{"use strict";var me=require("joi"),dD=require("fs-extra"),ED=require("path"),en=ve(),fD=Q(),hD=A(),mD=x(),{hdb_errors:DZ}=W(),{HDB_ERROR_MSGS:Dt}=DZ,js=/^[a-zA-Z0-9-_]+$/;SD.exports={getDropCustomFunctionValidator:MZ,setCustomFunctionValidator:PZ,addComponentValidator:qZ,dropCustomFunctionProjectValidator:FZ,packageComponentValidator:GZ,deployComponentValidator:xZ,setComponentFileValidator:vZ,getComponentFileValidator:HZ,dropComponentFileValidator:BZ};function v_(e,t,r){try{let s=fD.get(hD.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=ED.join(s,t);return dD.existsSync(n)?e?t:r.message(Dt.PROJECT_EXISTS):e?r.message(Dt.NO_PROJECT):t}catch(s){return mD.error(s),r.message(Dt.VALIDATION_ERR)}}a(v_,"checkProjectExists");function yc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(yc,"checkFilePath");function LZ(e,t,r,s){try{let n=fD.get(hD.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=ED.join(n,e,t,r+".js");return dD.existsSync(i)?r:s.message(Dt.NO_FILE)}catch(n){return mD.error(n),s.message(Dt.VALIDATION_ERR)}}a(LZ,"checkFileExists");function MZ(e){let t=me.object({project:me.string().pattern(js).custom(v_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:me.string().valid("helpers","routes").required(),file:me.string().pattern(js).custom(LZ.bind(null,e.project,e.type)).custom(yc).required().messages({"string.pattern.base":Dt.BAD_FILE_NAME})});return en.validateBySchema(e,t)}a(MZ,"getDropCustomFunctionValidator");function PZ(e){let t=me.object({project:me.string().pattern(js).custom(v_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:me.string().valid("helpers","routes").required(),file:me.string().custom(yc).required(),function_content:me.string().required()});return en.validateBySchema(e,t)}a(PZ,"setCustomFunctionValidator");function vZ(e){let t=me.object({project:me.string().pattern(js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:me.string().custom(yc).required(),payload:me.string().allow("").optional(),encoding:me.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return en.validateBySchema(e,t)}a(vZ,"setComponentFileValidator");function BZ(e){let t=me.object({project:me.string().pattern(js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:me.string().custom(yc).optional()});return en.validateBySchema(e,t)}a(BZ,"dropComponentFileValidator");function HZ(e){let t=me.object({project:me.string().required(),file:me.string().custom(yc).required(),encoding:me.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return en.validateBySchema(e,t)}a(HZ,"getComponentFileValidator");function qZ(e){let t=me.object({project:me.string().pattern(js).custom(v_.bind(null,!1)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return en.validateBySchema(e,t)}a(qZ,"addComponentValidator");function FZ(e){let t=me.object({project:me.string().pattern(js).custom(v_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return en.validateBySchema(e,t)}a(FZ,"dropCustomFunctionProjectValidator");function GZ(e){let t=me.object({project:me.string().pattern(js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),skip_node_modules:me.boolean()});return en.validateBySchema(e,t)}a(GZ,"packageComponentValidator");function xZ(e){let t=me.object({project:me.string().pattern(js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),payload:me.string().optional().messages({"string.pattern.base":Dt.BAD_PACKAGE}),package:me.string().optional()});return en.validateBySchema(e,t)}a(xZ,"deployComponentValidator")});var JS=m((Hue,gD)=>{"use strict";var ye=require("fs-extra"),WS=require("fast-glob"),Se=require("path"),TD=require("tar-fs"),kZ=require("uuid").v4,QS=require("normalize-path"),Rs=pD(),gt=x(),we=A(),Ye=Q(),B_=gr(),VZ=V(),{PACKAGE_ROOT:$Z}=A(),{handleHDBError:it,hdb_errors:YZ}=W(),{HDB_ERROR_MSGS:Mn,HTTP_STATUS_CODES:ot}=YZ,KZ=Se.join($Z,"application-template"),zS=Se.join(Ye.get(we.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function RD(){let e=Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw it(new Error,Mn.NOT_ENABLED,ot.BAD_REQUEST,void 0,void 0,!0)}a(RD,"isCFEnabled");function WZ(){gt.trace("getting custom api status");let e={};try{e={is_enabled:Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw it(new Error,Mn.FUNCTION_STATUS,ot.INTERNAL_SERVER_ERROR,gt.ERR,t)}return e}a(WZ,"customFunctionsStatus");function QZ(){gt.trace("getting custom api endpoints");let e={},t=Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{WS.sync(QS(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:WS.sync(QS(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:WS.sync(QS(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw it(new Error,Mn.GET_FUNCTIONS,ot.INTERNAL_SERVER_ERROR,gt.ERR,r)}return e}a(QZ,"getCustomFunctions");function zZ(e){e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=Rs.getDropCustomFunctionValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);gt.trace("getting custom api endpoint file content");let r=Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=Se.join(r,s,n,i+".js");try{return ye.readFileSync(o,{encoding:"utf8"})}catch(c){throw it(new Error,Mn.GET_FUNCTION,ot.INTERNAL_SERVER_ERROR,gt.ERR,c)}}a(zZ,"getCustomFunction");function JZ(e){RD(),e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=Rs.setCustomFunctionValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);gt.trace("setting custom function file content");let r=Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return ye.outputFileSync(Se.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw it(new Error,Mn.SET_FUNCTION,ot.INTERNAL_SERVER_ERROR,gt.ERR,c)}}a(JZ,"setCustomFunction");function XZ(e){e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=Rs.getDropCustomFunctionValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);gt.trace("dropping custom function file");let r=Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return ye.unlinkSync(Se.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw it(new Error,Mn.DROP_FUNCTION,ot.INTERNAL_SERVER_ERROR,gt.ERR,o)}}a(XZ,"dropCustomFunction");function ZZ(e){RD(),e.project&&(e.project=Se.parse(e.project).name);let t=Rs.addComponentValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);gt.trace("adding component");let r=Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=Se.join(r,s);return ye.mkdirSync(n,{recursive:!0}),ye.copySync(KZ,n),`Successfully added project: ${s}`}catch(n){throw it(new Error,Mn.ADD_FUNCTION,ot.INTERNAL_SERVER_ERROR,gt.ERR,n)}}a(ZZ,"addComponent");function jZ(e){e.project&&(e.project=Se.parse(e.project).name);let t=Rs.dropCustomFunctionProjectValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);gt.trace("dropping custom function project");let r=Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=Ye.get(we.CONFIG_PARAMS.APPS);if(!VZ.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 B_.updateConfigValue(we.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=Se.join(r,s);return ye.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw it(new Error,Mn.DROP_FUNCTION_PROJECT,ot.INTERNAL_SERVER_ERROR,gt.ERR,i)}}a(jZ,"dropCustomFunctionProject");async function ej(e){e.project&&(e.project=Se.parse(e.project).name);let t=Rs.packageComponentValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;gt.trace("packaging component",s);let n;try{n=await ye.realpath(Se.join(r,s))}catch(u){if(u.code!==we.NODE_ERROR_CODES.ENOENT)throw u;try{n=await ye.realpath(Se.join(Ye.get(we.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(l){if(l.code===we.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await ye.ensureDir(zS);let i=Se.join(zS,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(Se.join(n,"node_modules"))}),TD.pack(n,o).pipe(ye.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=ye.readFileSync(i,{encoding:"base64"});return await ye.remove(i),{project:s,payload:c}}a(ej,"packageComponent");async function tj(e){e.project&&(e.project=Se.parse(e.project).name);let t=Rs.deployComponentValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,package:i}=e;if(gt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");if(n){let o=Se.join(r,s);i="file:"+o,await ye.ensureDir(o);let c,u;do c=Se.join(zS,kZ()+".tar"),u=await ye.pathExists(c);while(u);await ye.outputFile(c,n,{encoding:"base64"});let l=ye.createReadStream(c);l.pipe(TD.extract(o)),await new Promise(_=>l.on("end",_)),await ye.unlink(c)}return B_.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a(tj,"deployComponent");async function rj(){let e=B_.getConfiguration(),t=[];for(let s in e)if(e[s]?.package){if(e[s].package.startsWith("file:"))continue;t.push(Object.assign(e[s],{name:s}))}let r=a(async(s,n)=>{let i=await ye.readdir(s,{withFileTypes:!0});for(let o of i){let c=o.name;if(c.startsWith(".")||c==="node_modules")continue;let u=Se.join(s,c);if(await o.isDirectory()){let l={name:c,entries:[]};n.entries.push(l),await r(u,l)}else{let l=await ye.stat(u),_={name:Se.basename(c),mtime:l.mtime,size:l.size};n.entries.push(_)}}return n},"walk_dir");return r(Ye.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:Ye.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(Se.sep).slice(-1).pop(),entries:t})}a(rj,"getComponents");async function sj(e){let t=Rs.getComponentFileValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await ye.readFile(Se.join(Ye.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file),r)}catch(s){throw s.code===we.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Se.join(e.project,e.file)}'`):s}}a(sj,"getComponentFile");async function nj(e){let t=Rs.setComponentFileValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=Se.join(Ye.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file);return e.payload!==void 0?(await ye.ensureFile(s),await ye.outputFile(s,e.payload,r)):await ye.ensureDir(s),"Successfully set component: "+e.file}a(nj,"setComponentFile");async function ij(e){let t=Rs.dropComponentFileValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=e.file?Se.join(e.project,e.file):e.project,s=Se.join(Ye.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await ye.pathExists(s)&&await ye.remove(s),B_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(ij,"dropComponent");gD.exports={customFunctionsStatus:WZ,getCustomFunctions:QZ,getCustomFunction:zZ,setCustomFunction:JZ,dropCustomFunction:XZ,addComponent:ZZ,dropCustomFunctionProject:jZ,packageComponent:ej,deployComponent:tj,getComponents:rj,getComponentFile:sj,setComponentFile:nj,dropComponent:ij}});var XS=m((Fue,OD)=>{"use strict";var gs=require("joi"),AD=ve();OD.exports={readTransactionLogValidator:oj,deleteTransactionLogsBeforeValidator:aj};function oj(e){let t=gs.object({schema:gs.string().required(),table:gs.string().required(),from:gs.date().timestamp(),to:gs.date().timestamp(),limit:gs.number().min(1)});return AD.validateBySchema(e,t)}a(oj,"readTransactionLogValidator");function aj(e){let t=gs.object({schema:gs.string().required(),table:gs.string().required(),timestamp:gs.date().timestamp().required()});return AD.validateBySchema(e,t)}a(aj,"deleteTransactionLogsBeforeValidator")});var q_=m((xue,wD)=>{"use strict";var ZS=A(),H_=nt(),ND=V(),bD=Q(),yD=$s(),{handleHDBError:Ao,hdb_errors:cj}=W(),{HTTP_STATUS_CODES:Oo}=cj,{readTransactionLogValidator:uj,deleteTransactionLogsBeforeValidator:lj}=XS(),ID="This operation relies on clustering and cannot run with it disable.",_j="Logs successfully deleted from transaction log.",dj="All logs successfully deleted from transaction log.";wD.exports={readTransactionLog:Ej,deleteTransactionLogsBefore:fj};async function*Ej(e){let t=uj(e);if(t)throw Ao(t,t.message,Oo.BAD_REQUEST,void 0,void 0,!0);if(!bD.get(ZS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ao(new Error,ID,Oo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=ND.checkSchemaTableExist(r,s);if(n)throw Ao(new Error,n,Oo.NOT_FOUND,void 0,void 0,!0);let i=yD.createNatsTableStreamName(r,s),o=await H_.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 l={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&&(l.hash_values=c?.entry?.hash_values),yield l}}a(Ej,"readTransactionLog");async function fj(e){let t=lj(e);if(t)throw Ao(t,t.message,Oo.BAD_REQUEST,void 0,void 0,!0);if(!bD.get(ZS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ao(new Error,ID,Oo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=ND.checkSchemaTableExist(r,s);if(i)throw Ao(new Error,i,Oo.NOT_FOUND,void 0,void 0,!0);let o=yD.createNatsTableStreamName(r,s),{jsm:c}=await H_.getNATSReferences(),u=await H_.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=_j,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=dj):d=(await H_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(fj,"deleteTransactionLogsBefore")});var k_=m((Vue,vD)=>{"use strict";var F_=require("joi"),G_=require("path"),CD=require("fs-extra"),{exec:hj}=require("child_process"),mj=require("util"),UD=mj.promisify(hj),Ic=A(),{handleHDBError:No,hdb_errors:Sj}=W(),{HTTP_STATUS_CODES:bo}=Sj,Cc=Q(),pj=ve(),wc=x();Cc.initSync();var jS=Cc.get(Ic.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),DD="npm install --omit=dev --json",Tj=`${DD} --dry-run`;vD.exports={installModules:Oj,auditModules:Nj,installAllRootModules:Rj,uninstallRootModule:gj,linkHarperdb:Aj};async function Rj(e=!1){await x_(),await Uc(e?"npm install --ignore-scripts":"npm install",Cc.get(Ic.CONFIG_PARAMS.ROOTPATH))}a(Rj,"installAllRootModules");async function gj(e){await Uc(`npm uninstall ${e}`,Cc.get(Ic.CONFIG_PARAMS.ROOTPATH))}a(gj,"uninstallRootModule");async function Aj(){await x_(),await Uc(`npm link ${Ic.PACKAGE_ROOT}`,Cc.get(Ic.CONFIG_PARAMS.ROOTPATH))}a(Aj,"linkHarperdb");async function Uc(e,t=void 0){let{stdout:r,stderr:s}=await UD(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
10
+ `,""));return wc.trace(r,s),r.replace(`
11
+ `,"")}a(Uc,"runCommand");async function Oj(e){wc.info(`starting installModules for request: ${e}`);let t=PD(e);if(t)throw No(t,t.message,bo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?Tj:DD;await x_(),await MD(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 l=G_.join(jS,u),_,d=null;try{let{stdout:E,stderr:f}=await UD(n,{cwd:l});_=E?E.replace(`
12
12
  `,""):null,d=f?f.replace(`
13
- `,""):null}catch(E){E.stderr?i[u].npm_error=UD(E.stderr):i[u].npm_error=E.message;continue}try{i[u].npm_output=JSON.parse(_)}catch{i[u].npm_output=_}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return Ic.info(`finished installModules with response ${i}`),i}a(Aj,"installModules");function UD(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(UD,"parseNPMStdErr");async function Oj(e){Ic.info(`starting auditModules for request: ${e}`);let t=LD(e);if(t)throw Ao(t,t.message,Oo.BAD_REQUEST);let{projects:r}=e;await x_(),await DD(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=G_.join(jS,o);s[o]={npm_output:null,npm_error:null};try{let u=await Cc("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=UD(u.stderr)}}return Ic.info(`finished auditModules with response ${s}`),s}a(Oj,"auditModules");async function x_(){try{return await Cc("npm -v"),!0}catch{throw Ao(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Oo.BAD_REQUEST,void 0,void 0,!0)}}a(x_,"checkNPMInstalled");async function DD(e){if(!Array.isArray(e)||e.length===0)throw Ao(new Error,"projects argument must be an array with at least 1 element",Oo.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=G_.join(jS,i.toString());if(!await ID.pathExists(o)){t.push(i);continue}let u=G_.join(o,"package.json");await ID.pathExists(u)||r.push(i)}if(t.length>0)throw Ao(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Oo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ao(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Oo.BAD_REQUEST,void 0,void 0,!0)}a(DD,"checkProjectPaths");function LD(e){let t=F_.object({projects:F_.array().min(1).items(F_.string()).required(),dry_run:F_.boolean().default(!1)});return Sj.validateBySchema(e,t)}a(LD,"modulesValidator")});var vD=m(($ue,PD)=>{"use strict";var ep=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}};PD.exports=ep});var HD=m((Kue,BD)=>{"use strict";var tp=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};BD.exports=tp});var sp=m((Que,FD)=>{"use strict";var qD=vD(),Nj=HD(),{HDB_ERROR_MSGS:bj}=rr(),rp=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=bj.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 qD(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new Nj(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 qD(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}};FD.exports=rp});var K_=m((Jue,tL)=>{"use strict";var np=Nr(),V_=Or(),Ur=$l(),Lc=Qn(),ip=jn(),yj=mm(),Ij=ow(),Mc=br(),$_=bm(),at=x(),wj=wm(),Cj=ic(),Uj=uS(),Dj=uc(),Lj=lS(),Mj=_S(),Pj=E_(),vj=hS(),op=pS(),Xs=V(),Bj=sU(),ap=OS(),kD=xS(),Cr=A(),VD=rD(),Hj=_o(),$D=tc(),YD=(P_(),re(Nc)),KD=Tr(),dr=JS(),qj=require("alasql"),WD=q_(),QD=k_(),zD=sp(),{handleHDBError:zt,hdb_errors:JD}=W(),{HDB_ERROR_MSGS:At,HTTP_STATUS_CODES:Uc}=JD,M=new Map,XD="delete",Un="insert",Zs="read",mi="update",Dc="describe",GD=Lc.describeSchema.name,xD=Lc.describeTable.name,ZD={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Fj="catchup",Gj="handleGetJob",xj="handleGetJobsByStartDate",Y_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},kj=[Ur.createTable.name,Ur.createAttribute.name,Ur.dropTable.name,Ur.dropAttribute.name],jD={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},H=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};M.set(np.insert.name,new H(!1,[Un]));M.set(np.update.name,new H(!1,[mi]));M.set(np.upsert.name,new H(!1,[Un,mi]));M.set(V_.searchByConditions.name,new H(!1,[Zs]));M.set(V_.searchByHash.name,new H(!1,[Zs]));M.set(V_.searchByValue.name,new H(!1,[Zs]));M.set(V_.search.name,new H(!1,[Zs]));M.set(Ur.createSchema.name,new H(!0,[]));M.set(Ur.createTable.name,new H(!0,[]));M.set(Ur.createAttribute.name,new H(!1,[Un]));M.set(Ur.dropSchema.name,new H(!0,[]));M.set(Ur.dropTable.name,new H(!0,[]));M.set(Ur.dropAttribute.name,new H(!0,[]));M.set(Lc.describeSchema.name,new H(!1,[Zs]));M.set(Lc.describeTable.name,new H(!1,[Zs]));M.set(ip.deleteRecord.name,new H(!1,[XD]));M.set(Mc.addUser.name,new H(!0,[]));M.set(Mc.alterUser.name,new H(!0,[]));M.set(Mc.dropUser.name,new H(!0,[]));M.set(Mc.listUsersExternal.name,new H(!0,[]));M.set($_.listRoles.name,new H(!0,[]));M.set($_.addRole.name,new H(!0,[]));M.set($_.alterRole.name,new H(!0,[]));M.set($_.dropRole.name,new H(!0,[]));M.set(wj.name,new H(!0,[]));M.set(Cj.name,new H(!0,[]));M.set(Uj.name,new H(!0,[]));M.set(Dj.name,new H(!0,[]));M.set(Lj.name,new H(!0,[]));M.set(Mj.name,new H(!0,[]));M.set(op.setRoutes.name,new H(!0,[]));M.set(op.getRoutes.name,new H(!0,[]));M.set(op.deleteRoutes.name,new H(!0,[]));M.set(KD.setConfiguration.name,new H(!0,[]));M.set(Pj.clusterStatus.name,new H(!0,[]));M.set(vj.name,new H(!0,[]));M.set(ap.getFingerprint.name,new H(!0,[]));M.set(ap.setLicense.name,new H(!0,[]));M.set(ip.deleteFilesBefore.name,new H(!0,[]));M.set(ip.deleteAuditLogsBefore.name,new H(!0,[]));M.set(kD.restart.name,new H(!0,[]));M.set(kD.restartService.name,new H(!0,[]));M.set(yj.name,new H(!0,[]));M.set(Ij.name,new H(!0,[Zs]));M.set(Hj.systemInformation.name,new H(!0,[]));M.set(KD.getConfiguration.name,new H(!0,[]));M.set(WD.readTransactionLog.name,new H(!0,[]));M.set(WD.deleteTransactionLogsBefore.name,new H(!0,[]));M.set(QD.installModules.name,new H(!0,[]));M.set(QD.auditModules.name,new H(!0,[]));M.set($D.createTokens.name,new H(!1,[]));M.set($D.refreshOperationToken.name,new H(!1,[]));M.set(YD.login.name,new H(!1,[]));M.set(YD.logout.name,new H(!1,[]));M.set(dr.customFunctionsStatus.name,new H(!0,[]));M.set(dr.getCustomFunctions.name,new H(!0,[]));M.set(dr.getComponents.name,new H(!0,[]));M.set(dr.getComponentFile.name,new H(!0,[]));M.set(dr.setComponentFile.name,new H(!0,[]));M.set(dr.dropComponent.name,new H(!0,[]));M.set(dr.getCustomFunction.name,new H(!0,[]));M.set(dr.setCustomFunction.name,new H(!0,[]));M.set(dr.dropCustomFunction.name,new H(!0,[]));M.set(dr.addComponent.name,new H(!0,[]));M.set(dr.dropCustomFunctionProject.name,new H(!0,[]));M.set(dr.packageComponent.name,new H(!0,[]));M.set(dr.deployComponent.name,new H(!0,[]));M.set(ap.getRegistrationInfo.name,new H(!1,[]));M.set(Mc.userInfo.name,new H(!1,[]));M.set(Lc.describeAll.name,new H(!1,[]));M.set(Gj,new H(!1,[]));M.set(xj,new H(!0,[]));M.set(Fj,new H(!0,[]));M.set(Y_.CSV_DATA_LOAD,new H(!1,[Un,mi]));M.set(Y_.CSV_URL_LOAD,new H(!1,[Un,mi]));M.set(Y_.CSV_FILE_LOAD,new H(!1,[Un,mi]));M.set(Y_.IMPORT_FROM_S3,new H(!1,[Un,mi]));M.set(jD.EXPORT_TO_S3,new H(!0,[]));M.set(jD.EXPORT_LOCAL,new H(!0,[]));M.set(Cr.VALID_SQL_OPS_ENUM.DELETE,new H(!1,[XD]));M.set(Cr.VALID_SQL_OPS_ENUM.SELECT,new H(!1,[Zs]));M.set(Cr.VALID_SQL_OPS_ENUM.INSERT,new H(!1,[Un]));M.set(Cr.VALID_SQL_OPS_ENUM.UPDATE,new H(!1,[mi]));tL.exports={verifyPerms:$j,verifyPermsAst:Vj,verifyBulkLoadAttributePerms:Kj};function Vj(e,t,r){if(Xs.isEmptyOrZeroLength(e))throw at.info("verify_perms_ast has an empty user parameter"),zt(new Error);if(Xs.isEmptyOrZeroLength(t))throw at.info("verify_perms_ast has an empty user parameter"),zt(new Error);if(Xs.isEmptyOrZeroLength(r))throw at.info("verify_perms_ast has a null operation parameter"),zt(new Error);try{let s=new zD,n=new Bj(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw at.info("No schemas defined in verifyPermsAst(), will not continue."),zt(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&ZD[r])throw zt(new Error,At.DROP_SYSTEM,Uc.FORBIDDEN);if(c&&!u)return null;let l=VD.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof qj.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(l));for(let d=0;d<i.length;d++){let E=n.getTablesBySchemaName(i[d]);E&&o.set(i[d],E)}let _=eL(t,r,o,s);return _||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=n.getAttributesBySchemaTableName(E,d[f]),p=up(t.role.permission,E,d[f]);cp(h,p,r,d[f],E,s)}}),s.getPermsResponse())}catch(s){throw zt(s)}}a(Vj,"verifyPermsAst");function $j(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw at.info("null required parameter in verifyPerms"),zt(new Error,At.DEFAULT_INVALID_REQUEST,Uc.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 zD;if(Xs.isEmptyOrZeroLength(e.hdb_user.role)||Xs.isEmptyOrZeroLength(e.hdb_user.role.permission))return at.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(At.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,l=e.hdb_user.role.permission.structure_user,_=o.has(Cr.SYSTEM_SCHEMA_NAME)||n===Cr.SYSTEM_SCHEMA_NAME;if(_&&ZD[r])throw zt(new Error,At.DROP_SYSTEM,Uc.FORBIDDEN);if(u&&!_||l===!0&&(r===Ur.createSchema.name||r===Ur.dropSchema.name))return null;if(kj.indexOf(r)>=0&&(l===!0||Array.isArray(l)))return l===!0||l.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=VD.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===GD||r===xD){if(n===Cr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(At.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===GD&&(!d[n]||!d[n][Dc]))return c.handleInvalidItem(At.SCHEMA_NOT_FOUND(n));if(r===xD&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Dc]))return c.handleInvalidItem(At.TABLE_NOT_FOUND(n,i))}}let E=eL(e.hdb_user,r,o,c,s);if(E)return E;if(M.get(r)&&M.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Cr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],T=d[n].tables[i];T[Cr.PERMS_CRUD_ENUM.READ]&&(T.attribute_permissions.length>0?T.attribute_permissions.filter(O=>O[Cr.PERMS_CRUD_ENUM.READ]).forEach(O=>{p.push(O.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(g=>g.attribute),e.get_attributes=p)}let f=Yj(e),h=up(e.hdb_user.role.permission,n,i);return cp(f,h,r,i,n,c,s),c.getPermsResponse()}a($j,"verifyPerms");function eL(e,t,r,s,n){if(Xs.arrayHasEmptyValues([e,t,r]))throw at.info("hasPermissions has an invalid parameter"),zt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||M.get(t).requires_su))return null;if(!M.get(t))throw at.info(`operation ${t} not found.`),zt(new Error,At.OP_NOT_FOUND(t),Uc.BAD_REQUEST);if(M.get(t)&&M.get(t).requires_su)return at.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(At.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Dc]===!1){s.addInvalidItem(At.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(At.SCHEMA_NOT_FOUND(u));continue}let l=r.get(u);for(let _ of l){let d=o[u].tables[_];if(!d||d[Dc]===!1)s.addInvalidItem(At.TABLE_NOT_FOUND(u,_));else try{let E=[],f=M.get(t).perms;!Xs.isEmpty(n)&&f.includes(n)&&(f=[n]);for(let h=0;h<f.length;h++){let p=f[h],T=d[p];(T==null||T===!1)&&(at.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),E.push(p))}E.length>0&&s.addUnauthorizedTable(u,_,E)}catch(E){let f=At.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw at.error(f),at.error(E),zt(JD.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?s.getPermsResponse():null}a(eL,"hasPermissions");function cp(e,t,r,s,n,i,o){if(!e||!t)throw at.info("no attributes specified in checkAttributePerms."),zt(new Error);let c=M.get(r).perms;if(!c||c==="")throw at.info(`no permissions found for ${r} in checkAttributePerms().`),zt(new Error);if(Xs.isEmptyOrZeroLength(t))return at.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let _ of e){let d=t.get(_);if(d){if(d[Dc]===!1){i.addInvalidItem(At.ATTR_NOT_FOUND(n,s,_),n,s);continue}if(c)for(let E of c){if(Cr.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==Zs)throw zt(new Error,At.SYSTEM_TIMESTAMP_PERMS_ERR,Uc.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(At.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}a(cp,"checkAttributePerms");function Yj(e){let t=new Set;try{if(e.action)return t;if(e.operation===Cr.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){at.info(r)}return t}a(Yj,"getRecordAttributes");function up(e,t,r){let s=new Map;if(Xs.isEmpty(e))return at.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{at.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(up,"getAttributePermissions");function Kj(e,t,r,s,n,i,o){let c=new Set(i),u=up(e,s,n);cp(c,u,t,n,s,o,r)}a(Kj,"verifyBulkLoadAttributePerms")});var Q_=m((Zue,oL)=>{"use strict";oL.exports={evaluateSQL:i5,processAST:iL,convertSQLToAST:nL,checkASTPermissions:sL};var Wj=Nr(),rL=require("util"),Qj=rL.callbackify(Wj.insert),zj=Or().search,Jj=nI().update,Xj=rL.callbackify(Jj),Zj=oI().convertDelete,Dn=require("alasql"),jj=K_(),W_=x(),e5=Cl(),t5=V(),Pc=A(),{hdb_errors:r5,handleHDBError:lp}=W(),{HTTP_STATUS_CODES:_p}=r5;e5(Dn);var s5=403,n5="There was a problem performing this insert. Please check the logs and try again.",dp=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function i5(e,t){let r=e.parsed_sql_object;if(!r){r=nL(e.sql);let s,n=r.ast.statements[0];if(n instanceof Dn.yy.Insert?s=n.into.databaseid:n instanceof Dn.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Dn.yy.Update||n instanceof Dn.yy.Delete?s=n.table.databaseid:W_.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Dn.yy.Select)&&t5.isEmptyOrZeroLength(s))return t("No schema specified",null)}iL(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(i5,"evaluateSQL");function sL(e,t){let r;try{r=jj.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(sL,"checkASTPermissions");function nL(e){let t=new dp;if(!e)throw lp(new Error,"The 'sql' parameter is missing from the request body",_p.BAD_REQUEST);try{let r=e.trim(),s=Dn.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
15
- `);throw s[1]?lp(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,_p.BAD_REQUEST):lp(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",_p.BAD_REQUEST)}return t}a(nL,"convertSQLToAST");function iL(e,t,r){try{let s=o5;if(!e.bypass_auth&&!t.permissions_checked){let i=sL(e,t);if(i&&i.length>0)return r(s5,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Pc.VALID_SQL_OPS_ENUM.SELECT:s=zj,n=t.ast.statements[0];break;case Pc.VALID_SQL_OPS_ENUM.INSERT:s=a5;break;case Pc.VALID_SQL_OPS_ENUM.UPDATE:s=Xj;break;case Pc.VALID_SQL_OPS_ENUM.DELETE:s=Zj;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(iL,"processAST");function o5(e,t){W_.info(e),t("unknown sql statement")}a(o5,"nullFunction");function a5({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=c5(i,e.values)}catch(o){return r(o)}Qj(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){W_.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(a5,"convertInsert");function c5(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]]=Dn.compile(`SELECT ${n.toString()} AS [${Pc.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw W_.error(r),new Error(n5)}}a(c5,"createDataObjects")});var Ep=m((ele,cL)=>{"use strict";var{S3:u5,GetObjectCommand:l5}=require("@aws-sdk/client-s3");cL.exports={getFileStreamFromS3:_5,getS3AuthObj:aL};async function _5(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await aL(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new l5(r))).Body}a(_5,"getFileStreamFromS3");function aL(e,t,r){return new u5({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(aL,"getS3AuthObj")});var z_=m((rle,pL)=>{"use strict";var _L=Or(),d5=Q_(),E5=Ep(),{AsyncParser:f5,Transform:h5}=require("json2csv"),Bc=require("stream"),Er=V(),fp=require("fs-extra"),m5=require("path"),Dr=x(),{promisify:dL}=require("util"),vc=V(),{handleHDBError:Je,hdb_errors:S5}=W(),{HDB_ERROR_MSGS:Jt,HTTP_STATUS_CODES:Xe}=S5,{streamAsJSON:p5}=QE(),{Upload:T5}=require("@aws-sdk/lib-storage"),uL=["search_by_value","search_by_hash","sql"],lL=["json","csv"],EL="json",fL="csv",R5="Successfully exported JSON locally.",g5="Successfully exported CSV locally.",A5=1e3,O5=_L.searchByHash,N5=_L.searchByValue,b5=dL(d5.evaluateSQL),y5=dL(Bc.finished);pL.exports={export_to_s3:U5,export_local:I5,toCsvStream:hL};async function I5(e){Dr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=mL(e);if(!Er.isEmpty(t))throw Dr.error(t),Je(new Error,t,Xe.BAD_REQUEST,void 0,void 0,!0);if(Er.isEmpty(e.path))throw Dr.error(Jt.MISSING_VALUE("path")),Je(new Error,Jt.MISSING_VALUE("path"),Xe.BAD_REQUEST,void 0,void 0,!0);let r=(Er.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(m5.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Er.buildFolderPath(e.path,r);await w5(e.path);let n=await SL(e);return await C5(s,e.format,n)}a(I5,"export_local");async function w5(e){if(Dr.trace("in confirmPath"),Er.isEmptyOrZeroLength(e))throw Je(new Error,`Invalid path: ${e}`,Xe.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await fp.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,Dr.error(s),Je(new Error,s,Xe.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 Dr.error(r),Je(new Error,r,Xe.BAD_REQUEST,void 0,void 0,!0)}return!0}a(w5,"confirmPath");async function C5(e,t,r){if(Dr.trace("in saveToLocal"),vc.isEmptyOrZeroLength(e))throw Je(new Error,Jt.INVALID_VALUE("file_path"),Xe.BAD_REQUEST,void 0,void 0,!0);if(vc.isEmptyOrZeroLength(t))throw Je(new Error,Jt.INVALID_VALUE("Source format"),Xe.BAD_REQUEST,void 0,void 0,!0);if(vc.isEmpty(r))throw Je(new Error,Jt.NOT_FOUND("Data"),Xe.BAD_REQUEST,void 0,void 0,!0);if(t===EL){let s=fp.createWriteStream(e);return p5(r).pipe(s),await y5(s),{message:R5,path:e}}else if(t===fL){let s=fp.createWriteStream(e),n=Bc.Readable.from(r),i={},o={objectMode:!0};return await new f5(i,o).fromInput(n).toOutput(s).promise(!1),{message:g5,path:e}}throw Je(new Error,Jt.INVALID_VALUE("format"),Xe.BAD_REQUEST)}a(C5,"saveToLocal");async function U5(e){if(!e.s3||Object.keys(e.s3).length===0)throw Je(new Error,Jt.MISSING_VALUE("S3 object"),Xe.BAD_REQUEST);if(Er.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Je(new Error,Jt.MISSING_VALUE("aws_access_key_id"),Xe.BAD_REQUEST);if(Er.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Je(new Error,Jt.MISSING_VALUE("aws_secret_access_key"),Xe.BAD_REQUEST);if(Er.isEmptyOrZeroLength(e.s3.bucket))throw Je(new Error,Jt.MISSING_VALUE("bucket"),Xe.BAD_REQUEST);if(Er.isEmptyOrZeroLength(e.s3.key))throw Je(new Error,Jt.MISSING_VALUE("key"),Xe.BAD_REQUEST);if(Er.isEmptyOrZeroLength(e.s3.region))throw Je(new Error,Jt.MISSING_VALUE("region"),Xe.BAD_REQUEST);let t=mL(e);if(!Er.isEmpty(t))throw Je(new Error,t,Xe.BAD_REQUEST);Dr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await SL(e)}catch(u){throw Dr.error(u),u}let s,n=await E5.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Bc.PassThrough;if(e.format===fL){i=e.s3.key+".csv";let u=hL(r);u.on("error",l=>{throw l}),u.pipe(o)}else if(e.format===EL){i=e.s3.key+".json";let u=new Bc.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let l=r.length,_="";for(let[d,E]of r.entries()){let f=d===l-1?JSON.stringify(E):JSON.stringify(E)+",";_+=f,d!==0&&d%A5===0&&(u.push(_),_="")}_.length!==0&&u.push(_),u.push("]"),u.push(null)}else throw Je(new Error,Jt.INVALID_VALUE("format"),Xe.BAD_REQUEST);return new T5({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(U5,"export_to_s3");function hL(e){let t=Bc.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new h5(r,s);return t.pipe(n)}a(hL,"toCsvStream");function mL(e){if(Dr.trace("in exportCoreValidation"),Er.isEmpty(e.format))return"format missing";if(lL.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${lL.join(", ")}`;let t=e.search_operation.operation;if(Er.isEmpty(t))return"search_operation.operation missing";if(uL.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${uL.join(", ")}`}a(mL,"exportCoreValidation");async function SL(e){Dr.trace("in getRecords");let t,r;if(vc.isEmpty(e.search_operation)||vc.isEmptyOrZeroLength(e.search_operation.operation))throw Je(new Error,Jt.INVALID_VALUE("Search operation"),Xe.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=N5;break;case"search_by_hash":t=O5;break;case"sql":t=b5;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Dr.error(r),Je(new Error,r,Xe.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(SL,"getRecords")});var NL={};je(NL,{contentTypes:()=>AL,findBestSerializer:()=>j_,getDeserializer:()=>No,registerContentHandlers:()=>mp,serialize:()=>Sp,serializeMessage:()=>Qs});function D5(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function mp(e){e.register(M5,{serializers:[{regex:/^application\/json$/,serializer:J_.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Si.EncoderStream(Hc).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Z_.Readable.from((0,Ts.encodeIter)(t,Hc)):(0,Ts.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,hp.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Ts.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Si.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function j_(e){let t=e.headers.accept,r,s=0,n,i,o=t?t.toLowerCase().split(/\s*,\s*/):[];for(let c of o){let[u,...l]=c.split(/\s*;\s*/),_=1,d={q:1};for(let f of l){let h=f.indexOf("=");d[f.substring(0,h)]=f.substring(h+1)}_=+d.q;let E=Et.get(u);if(E){let f=(E.q||1)*_;f>s&&(r=E,n=E.type||u,s=f,i=d)}}if(!r){if(t)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Et.keys()).join(", "))}};r=Et.get("application/json"),n="application/json"}return{serializer:r,type:n,parameters:i}}function Sp(e,t,r){let s=t.headers["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),e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=j_(t);if(r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),e[Symbol.iterator]&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,X_.createBrotliCompress)({}))),o}n=i.serializer.serialize(e)}return s?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,X_.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Qs(e,t){if(e?.contentType!=null&&e.data!=null)return e;let r=t.serialize;if(r)return r(e);let s=j_(t);return r=t.serialize=s.serializer.serialize,r(e)}function P5(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 No(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Et.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Et.get(e)?.deserialize||RL(e,s);return o=>P5(o).then(i)}return Et.get(e)?.deserialize||RL(e,s)}function RL(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=>({contentType:e,data:r})}function v5(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 J_,hp,Ts,Si,X_,Z_,gL,Hc,Et,AL,TL,OL,L5,M5,To=Se(()=>{J_=C(QE()),hp=C(z_()),Ts=require("msgpackr"),Si=require("cbor-x"),X_=require("zlib"),Z_=require("stream");Xr();gL=require("../index"),Hc={useRecords:!1,useToJSON:!0};tt.contentType=function(e,t){Et.set(e,t)};Et=new Map,AL=Et;(0,gL._assignPackageExport)("contentTypes",AL);Et.set("application/json",{serializeStream:J_.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});TL=new Si.Encoder(Hc);Et.set("application/cbor",{serializeStream(e){return new Si.EncoderStream(Hc).end(e)},serialize:TL.encode,deserialize:TL.decode,q:1});Et.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Z_.Readable.from((0,Ts.encodeIter)(e,Hc)):(0,Ts.pack)(e)},serialize:Ts.pack,deserialize:Ts.unpack,q:.9});Et.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,hp.toCsvStream)(e)},q:.1});Et.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Et.set("text/event-stream",{serializeStream:function(e){return Z_.Readable.from(v5(e,this.serialize))},serialize:function(e){if(e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
13
+ `,""):null}catch(E){E.stderr?i[u].npm_error=LD(E.stderr):i[u].npm_error=E.message;continue}try{i[u].npm_output=JSON.parse(_)}catch{i[u].npm_output=_}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return wc.info(`finished installModules with response ${i}`),i}a(Oj,"installModules");function LD(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(LD,"parseNPMStdErr");async function Nj(e){wc.info(`starting auditModules for request: ${e}`);let t=PD(e);if(t)throw No(t,t.message,bo.BAD_REQUEST);let{projects:r}=e;await x_(),await MD(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=G_.join(jS,o);s[o]={npm_output:null,npm_error:null};try{let u=await Uc("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=LD(u.stderr)}}return wc.info(`finished auditModules with response ${s}`),s}a(Nj,"auditModules");async function x_(){try{return await Uc("npm -v"),!0}catch{throw No(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",bo.BAD_REQUEST,void 0,void 0,!0)}}a(x_,"checkNPMInstalled");async function MD(e){if(!Array.isArray(e)||e.length===0)throw No(new Error,"projects argument must be an array with at least 1 element",bo.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=G_.join(jS,i.toString());if(!await CD.pathExists(o)){t.push(i);continue}let u=G_.join(o,"package.json");await CD.pathExists(u)||r.push(i)}if(t.length>0)throw No(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,bo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw No(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,bo.BAD_REQUEST,void 0,void 0,!0)}a(MD,"checkProjectPaths");function PD(e){let t=F_.object({projects:F_.array().min(1).items(F_.string()).required(),dry_run:F_.boolean().default(!1)});return pj.validateBySchema(e,t)}a(PD,"modulesValidator")});var HD=m((Yue,BD)=>{"use strict";var ep=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}};BD.exports=ep});var FD=m((Wue,qD)=>{"use strict";var tp=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};qD.exports=tp});var sp=m((zue,xD)=>{"use strict";var GD=HD(),bj=FD(),{HDB_ERROR_MSGS:yj}=nr(),rp=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=yj.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 GD(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new bj(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 GD(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}};xD.exports=rp});var K_=m((Xue,sL)=>{"use strict";var np=yr(),V_=br(),Lr=$l(),Mc=Xn(),ip=ri(),Ij=mm(),wj=cw(),Pc=Ir(),$_=bm(),at=x(),Cj=wm(),Uj=oc(),Dj=uS(),Lj=lc(),Mj=lS(),Pj=_S(),vj=E_(),Bj=hS(),op=pS(),tn=V(),Hj=iU(),ap=OS(),$D=xS(),Dr=A(),YD=nD(),qj=ho(),KD=rc(),WD=(P_(),se(bc)),QD=gr(),fr=JS(),Fj=require("alasql"),zD=q_(),JD=k_(),XD=sp(),{handleHDBError:Jt,hdb_errors:ZD}=W(),{HDB_ERROR_MSGS:At,HTTP_STATUS_CODES:Dc}=ZD,v=new Map,jD="delete",Pn="insert",rn="read",Ri="update",Lc="describe",kD=Mc.describeSchema.name,VD=Mc.describeTable.name,eL={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Gj="catchup",xj="handleGetJob",kj="handleGetJobsByStartDate",Y_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Vj=[Lr.createTable.name,Lr.createAttribute.name,Lr.dropTable.name,Lr.dropAttribute.name],tL={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(np.insert.name,new F(!1,[Pn]));v.set(np.update.name,new F(!1,[Ri]));v.set(np.upsert.name,new F(!1,[Pn,Ri]));v.set(V_.searchByConditions.name,new F(!1,[rn]));v.set(V_.searchByHash.name,new F(!1,[rn]));v.set(V_.searchByValue.name,new F(!1,[rn]));v.set(V_.search.name,new F(!1,[rn]));v.set(Lr.createSchema.name,new F(!0,[]));v.set(Lr.createTable.name,new F(!0,[]));v.set(Lr.createAttribute.name,new F(!1,[Pn]));v.set(Lr.dropSchema.name,new F(!0,[]));v.set(Lr.dropTable.name,new F(!0,[]));v.set(Lr.dropAttribute.name,new F(!0,[]));v.set(Mc.describeSchema.name,new F(!1,[rn]));v.set(Mc.describeTable.name,new F(!1,[rn]));v.set(ip.deleteRecord.name,new F(!1,[jD]));v.set(Pc.addUser.name,new F(!0,[]));v.set(Pc.alterUser.name,new F(!0,[]));v.set(Pc.dropUser.name,new F(!0,[]));v.set(Pc.listUsersExternal.name,new F(!0,[]));v.set($_.listRoles.name,new F(!0,[]));v.set($_.addRole.name,new F(!0,[]));v.set($_.alterRole.name,new F(!0,[]));v.set($_.dropRole.name,new F(!0,[]));v.set(Cj.name,new F(!0,[]));v.set(Uj.name,new F(!0,[]));v.set(Dj.name,new F(!0,[]));v.set(Lj.name,new F(!0,[]));v.set(Mj.name,new F(!0,[]));v.set(Pj.name,new F(!0,[]));v.set(op.setRoutes.name,new F(!0,[]));v.set(op.getRoutes.name,new F(!0,[]));v.set(op.deleteRoutes.name,new F(!0,[]));v.set(QD.setConfiguration.name,new F(!0,[]));v.set(vj.clusterStatus.name,new F(!0,[]));v.set(Bj.name,new F(!0,[]));v.set(ap.getFingerprint.name,new F(!0,[]));v.set(ap.setLicense.name,new F(!0,[]));v.set(ip.deleteFilesBefore.name,new F(!0,[]));v.set(ip.deleteAuditLogsBefore.name,new F(!0,[]));v.set($D.restart.name,new F(!0,[]));v.set($D.restartService.name,new F(!0,[]));v.set(Ij.name,new F(!0,[]));v.set(wj.name,new F(!0,[rn]));v.set(qj.systemInformation.name,new F(!0,[]));v.set(QD.getConfiguration.name,new F(!0,[]));v.set(zD.readTransactionLog.name,new F(!0,[]));v.set(zD.deleteTransactionLogsBefore.name,new F(!0,[]));v.set(JD.installModules.name,new F(!0,[]));v.set(JD.auditModules.name,new F(!0,[]));v.set(KD.createTokens.name,new F(!1,[]));v.set(KD.refreshOperationToken.name,new F(!1,[]));v.set(WD.login.name,new F(!1,[]));v.set(WD.logout.name,new F(!1,[]));v.set(fr.customFunctionsStatus.name,new F(!0,[]));v.set(fr.getCustomFunctions.name,new F(!0,[]));v.set(fr.getComponents.name,new F(!0,[]));v.set(fr.getComponentFile.name,new F(!0,[]));v.set(fr.setComponentFile.name,new F(!0,[]));v.set(fr.dropComponent.name,new F(!0,[]));v.set(fr.getCustomFunction.name,new F(!0,[]));v.set(fr.setCustomFunction.name,new F(!0,[]));v.set(fr.dropCustomFunction.name,new F(!0,[]));v.set(fr.addComponent.name,new F(!0,[]));v.set(fr.dropCustomFunctionProject.name,new F(!0,[]));v.set(fr.packageComponent.name,new F(!0,[]));v.set(fr.deployComponent.name,new F(!0,[]));v.set(ap.getRegistrationInfo.name,new F(!1,[]));v.set(Pc.userInfo.name,new F(!1,[]));v.set(Mc.describeAll.name,new F(!1,[]));v.set(xj,new F(!1,[]));v.set(kj,new F(!0,[]));v.set(Gj,new F(!0,[]));v.set(Y_.CSV_DATA_LOAD,new F(!1,[Pn,Ri]));v.set(Y_.CSV_URL_LOAD,new F(!1,[Pn,Ri]));v.set(Y_.CSV_FILE_LOAD,new F(!1,[Pn,Ri]));v.set(Y_.IMPORT_FROM_S3,new F(!1,[Pn,Ri]));v.set(tL.EXPORT_TO_S3,new F(!0,[]));v.set(tL.EXPORT_LOCAL,new F(!0,[]));v.set(Dr.VALID_SQL_OPS_ENUM.DELETE,new F(!1,[jD]));v.set(Dr.VALID_SQL_OPS_ENUM.SELECT,new F(!1,[rn]));v.set(Dr.VALID_SQL_OPS_ENUM.INSERT,new F(!1,[Pn]));v.set(Dr.VALID_SQL_OPS_ENUM.UPDATE,new F(!1,[Ri]));sL.exports={verifyPerms:Yj,verifyPermsAst:$j,verifyBulkLoadAttributePerms:Wj};function $j(e,t,r){if(tn.isEmptyOrZeroLength(e))throw at.info("verify_perms_ast has an empty user parameter"),Jt(new Error);if(tn.isEmptyOrZeroLength(t))throw at.info("verify_perms_ast has an empty user parameter"),Jt(new Error);if(tn.isEmptyOrZeroLength(r))throw at.info("verify_perms_ast has a null operation parameter"),Jt(new Error);try{let s=new XD,n=new Hj(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw at.info("No schemas defined in verifyPermsAst(), will not continue."),Jt(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&eL[r])throw Jt(new Error,At.DROP_SYSTEM,Dc.FORBIDDEN);if(c&&!u)return null;let l=YD.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof Fj.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(l));for(let d=0;d<i.length;d++){let E=n.getTablesBySchemaName(i[d]);E&&o.set(i[d],E)}let _=rL(t,r,o,s);return _||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=n.getAttributesBySchemaTableName(E,d[f]),T=up(t.role.permission,E,d[f]);cp(h,T,r,d[f],E,s)}}),s.getPermsResponse())}catch(s){throw Jt(s)}}a($j,"verifyPermsAst");function Yj(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw at.info("null required parameter in verifyPerms"),Jt(new Error,At.DEFAULT_INVALID_REQUEST,Dc.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 XD;if(tn.isEmptyOrZeroLength(e.hdb_user.role)||tn.isEmptyOrZeroLength(e.hdb_user.role.permission))return at.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(At.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,l=e.hdb_user.role.permission.structure_user,_=o.has(Dr.SYSTEM_SCHEMA_NAME)||n===Dr.SYSTEM_SCHEMA_NAME;if(_&&eL[r])throw Jt(new Error,At.DROP_SYSTEM,Dc.FORBIDDEN);if(u&&!_||l===!0&&(r===Lr.createSchema.name||r===Lr.dropSchema.name))return null;if(Vj.indexOf(r)>=0&&(l===!0||Array.isArray(l)))return l===!0||l.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=YD.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===kD||r===VD){if(n===Dr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(At.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===kD&&(!d[n]||!d[n][Lc]))return c.handleInvalidItem(At.SCHEMA_NOT_FOUND(n));if(r===VD&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Lc]))return c.handleInvalidItem(At.TABLE_NOT_FOUND(n,i))}}let E=rL(e.hdb_user,r,o,c,s);if(E)return E;if(v.get(r)&&v.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Dr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let T=[],p=d[n].tables[i];p[Dr.PERMS_CRUD_ENUM.READ]&&(p.attribute_permissions.length>0?p.attribute_permissions.filter(O=>O[Dr.PERMS_CRUD_ENUM.READ]).forEach(O=>{T.push(O.attribute_name)}):T=global.hdb_schema[n][i].attributes.map(R=>R.attribute),e.get_attributes=T)}let f=Kj(e),h=up(e.hdb_user.role.permission,n,i);return cp(f,h,r,i,n,c,s),c.getPermsResponse()}a(Yj,"verifyPerms");function rL(e,t,r,s,n){if(tn.arrayHasEmptyValues([e,t,r]))throw at.info("hasPermissions has an invalid parameter"),Jt(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 at.info(`operation ${t} not found.`),Jt(new Error,At.OP_NOT_FOUND(t),Dc.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return at.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(At.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Lc]===!1){s.addInvalidItem(At.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(At.SCHEMA_NOT_FOUND(u));continue}let l=r.get(u);for(let _ of l){let d=o[u].tables[_];if(!d||d[Lc]===!1)s.addInvalidItem(At.TABLE_NOT_FOUND(u,_));else try{let E=[],f=v.get(t).perms;!tn.isEmpty(n)&&f.includes(n)&&(f=[n]);for(let h=0;h<f.length;h++){let T=f[h],p=d[T];(p==null||p===!1)&&(at.info(`Required ${T} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),E.push(T))}E.length>0&&s.addUnauthorizedTable(u,_,E)}catch(E){let f=At.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw at.error(f),at.error(E),Jt(ZD.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?s.getPermsResponse():null}a(rL,"hasPermissions");function cp(e,t,r,s,n,i,o){if(!e||!t)throw at.info("no attributes specified in checkAttributePerms."),Jt(new Error);let c=v.get(r).perms;if(!c||c==="")throw at.info(`no permissions found for ${r} in checkAttributePerms().`),Jt(new Error);if(tn.isEmptyOrZeroLength(t))return at.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let _ of e){let d=t.get(_);if(d){if(d[Lc]===!1){i.addInvalidItem(At.ATTR_NOT_FOUND(n,s,_),n,s);continue}if(c)for(let E of c){if(Dr.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==rn)throw Jt(new Error,At.SYSTEM_TIMESTAMP_PERMS_ERR,Dc.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(At.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}a(cp,"checkAttributePerms");function Kj(e){let t=new Set;try{if(e.action)return t;if(e.operation===Dr.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){at.info(r)}return t}a(Kj,"getRecordAttributes");function up(e,t,r){let s=new Map;if(tn.isEmpty(e))return at.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{at.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(up,"getAttributePermissions");function Wj(e,t,r,s,n,i,o){let c=new Set(i),u=up(e,s,n);cp(c,u,t,n,s,o,r)}a(Wj,"verifyBulkLoadAttributePerms")});var Q_=m((jue,cL)=>{"use strict";cL.exports={evaluateSQL:o5,processAST:aL,convertSQLToAST:oL,checkASTPermissions:iL};var Qj=yr(),nL=require("util"),zj=nL.callbackify(Qj.insert),Jj=br().search,Xj=nI().update,Zj=nL.callbackify(Xj),jj=oI().convertDelete,vn=require("alasql"),e5=K_(),W_=x(),t5=Cl(),r5=V(),vc=A(),{hdb_errors:s5,handleHDBError:lp}=W(),{HTTP_STATUS_CODES:_p}=s5;t5(vn);var n5=403,i5="There was a problem performing this insert. Please check the logs and try again.",dp=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function o5(e,t){let r=e.parsed_sql_object;if(!r){r=oL(e.sql);let s,n=r.ast.statements[0];if(n instanceof vn.yy.Insert?s=n.into.databaseid:n instanceof vn.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof vn.yy.Update||n instanceof vn.yy.Delete?s=n.table.databaseid:W_.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof vn.yy.Select)&&r5.isEmptyOrZeroLength(s))return t("No schema specified",null)}aL(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(o5,"evaluateSQL");function iL(e,t){let r;try{r=e5.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(iL,"checkASTPermissions");function oL(e){let t=new dp;if(!e)throw lp(new Error,"The 'sql' parameter is missing from the request body",_p.BAD_REQUEST);try{let r=e.trim(),s=vn.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
15
+ `);throw s[1]?lp(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,_p.BAD_REQUEST):lp(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",_p.BAD_REQUEST)}return t}a(oL,"convertSQLToAST");function aL(e,t,r){try{let s=a5;if(!e.bypass_auth&&!t.permissions_checked){let i=iL(e,t);if(i&&i.length>0)return r(n5,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case vc.VALID_SQL_OPS_ENUM.SELECT:s=Jj,n=t.ast.statements[0];break;case vc.VALID_SQL_OPS_ENUM.INSERT:s=c5;break;case vc.VALID_SQL_OPS_ENUM.UPDATE:s=Zj;break;case vc.VALID_SQL_OPS_ENUM.DELETE:s=jj;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(aL,"processAST");function a5(e,t){W_.info(e),t("unknown sql statement")}a(a5,"nullFunction");function c5({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=u5(i,e.values)}catch(o){return r(o)}zj(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){W_.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(c5,"convertInsert");function u5(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]]=vn.compile(`SELECT ${n.toString()} AS [${vc.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw W_.error(r),new Error(i5)}}a(u5,"createDataObjects")});var Ep=m((tle,lL)=>{"use strict";var{S3:l5,GetObjectCommand:_5}=require("@aws-sdk/client-s3");lL.exports={getFileStreamFromS3:d5,getS3AuthObj:uL};async function d5(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await uL(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new _5(r))).Body}a(d5,"getFileStreamFromS3");function uL(e,t,r){return new l5({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(uL,"getS3AuthObj")});var z_=m((sle,RL)=>{"use strict";var EL=br(),E5=Q_(),f5=Ep(),{AsyncParser:h5,Transform:m5}=require("json2csv"),Hc=require("stream"),hr=V(),fp=require("fs-extra"),S5=require("path"),Mr=x(),{promisify:fL}=require("util"),Bc=V(),{handleHDBError:Xe,hdb_errors:p5}=W(),{HDB_ERROR_MSGS:Xt,HTTP_STATUS_CODES:Ze}=p5,{streamAsJSON:T5}=QE(),{Upload:R5}=require("@aws-sdk/lib-storage"),_L=["search_by_value","search_by_hash","sql"],dL=["json","csv"],hL="json",mL="csv",g5="Successfully exported JSON locally.",A5="Successfully exported CSV locally.",O5=1e3,N5=EL.searchByHash,b5=EL.searchByValue,y5=fL(E5.evaluateSQL),I5=fL(Hc.finished);RL.exports={export_to_s3:D5,export_local:w5,toCsvStream:SL};async function w5(e){Mr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=pL(e);if(!hr.isEmpty(t))throw Mr.error(t),Xe(new Error,t,Ze.BAD_REQUEST,void 0,void 0,!0);if(hr.isEmpty(e.path))throw Mr.error(Xt.MISSING_VALUE("path")),Xe(new Error,Xt.MISSING_VALUE("path"),Ze.BAD_REQUEST,void 0,void 0,!0);let r=(hr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(S5.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=hr.buildFolderPath(e.path,r);await C5(e.path);let n=await TL(e);return await U5(s,e.format,n)}a(w5,"export_local");async function C5(e){if(Mr.trace("in confirmPath"),hr.isEmptyOrZeroLength(e))throw Xe(new Error,`Invalid path: ${e}`,Ze.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await fp.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,Mr.error(s),Xe(new Error,s,Ze.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 Mr.error(r),Xe(new Error,r,Ze.BAD_REQUEST,void 0,void 0,!0)}return!0}a(C5,"confirmPath");async function U5(e,t,r){if(Mr.trace("in saveToLocal"),Bc.isEmptyOrZeroLength(e))throw Xe(new Error,Xt.INVALID_VALUE("file_path"),Ze.BAD_REQUEST,void 0,void 0,!0);if(Bc.isEmptyOrZeroLength(t))throw Xe(new Error,Xt.INVALID_VALUE("Source format"),Ze.BAD_REQUEST,void 0,void 0,!0);if(Bc.isEmpty(r))throw Xe(new Error,Xt.NOT_FOUND("Data"),Ze.BAD_REQUEST,void 0,void 0,!0);if(t===hL){let s=fp.createWriteStream(e);return T5(r).pipe(s),await I5(s),{message:g5,path:e}}else if(t===mL){let s=fp.createWriteStream(e),n=Hc.Readable.from(r),i={},o={objectMode:!0};return await new h5(i,o).fromInput(n).toOutput(s).promise(!1),{message:A5,path:e}}throw Xe(new Error,Xt.INVALID_VALUE("format"),Ze.BAD_REQUEST)}a(U5,"saveToLocal");async function D5(e){if(!e.s3||Object.keys(e.s3).length===0)throw Xe(new Error,Xt.MISSING_VALUE("S3 object"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Xe(new Error,Xt.MISSING_VALUE("aws_access_key_id"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Xe(new Error,Xt.MISSING_VALUE("aws_secret_access_key"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.bucket))throw Xe(new Error,Xt.MISSING_VALUE("bucket"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.key))throw Xe(new Error,Xt.MISSING_VALUE("key"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.region))throw Xe(new Error,Xt.MISSING_VALUE("region"),Ze.BAD_REQUEST);let t=pL(e);if(!hr.isEmpty(t))throw Xe(new Error,t,Ze.BAD_REQUEST);Mr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await TL(e)}catch(u){throw Mr.error(u),u}let s,n=await f5.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Hc.PassThrough;if(e.format===mL){i=e.s3.key+".csv";let u=SL(r);u.on("error",l=>{throw l}),u.pipe(o)}else if(e.format===hL){i=e.s3.key+".json";let u=new Hc.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let l=r.length,_="";for(let[d,E]of r.entries()){let f=d===l-1?JSON.stringify(E):JSON.stringify(E)+",";_+=f,d!==0&&d%O5===0&&(u.push(_),_="")}_.length!==0&&u.push(_),u.push("]"),u.push(null)}else throw Xe(new Error,Xt.INVALID_VALUE("format"),Ze.BAD_REQUEST);return new R5({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(D5,"export_to_s3");function SL(e){let t=Hc.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new m5(r,s);return t.pipe(n)}a(SL,"toCsvStream");function pL(e){if(Mr.trace("in exportCoreValidation"),hr.isEmpty(e.format))return"format missing";if(dL.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${dL.join(", ")}`;let t=e.search_operation.operation;if(hr.isEmpty(t))return"search_operation.operation missing";if(_L.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${_L.join(", ")}`}a(pL,"exportCoreValidation");async function TL(e){Mr.trace("in getRecords");let t,r;if(Bc.isEmpty(e.search_operation)||Bc.isEmptyOrZeroLength(e.search_operation.operation))throw Xe(new Error,Xt.INVALID_VALUE("Search operation"),Ze.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=b5;break;case"search_by_hash":t=N5;break;case"sql":t=y5;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Mr.error(r),Xe(new Error,r,Ze.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(TL,"getRecords")});var yL={};je(yL,{contentTypes:()=>NL,findBestSerializer:()=>j_,getDeserializer:()=>yo,registerContentHandlers:()=>mp,serialize:()=>Sp,serializeMessage:()=>Zs});function L5(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function mp(e){e.register(P5,{serializers:[{regex:/^application\/json$/,serializer:J_.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new gi.EncoderStream(qc).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Z_.Readable.from((0,As.encodeIter)(t,qc)):(0,As.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,hp.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,As.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 j_(e){let t=e.headers.accept,r,s=0,n,i,o=t?t.toLowerCase().split(/\s*,\s*/):[];for(let c of o){let[u,...l]=c.split(/\s*;\s*/),_=1,d={q:1};for(let f of l){let h=f.indexOf("=");d[f.substring(0,h)]=f.substring(h+1)}_=+d.q;let E=Et.get(u);if(E){let f=(E.q||1)*_;f>s&&(r=E,n=E.type||u,s=f,i=d)}}if(!r){if(t)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Et.keys()).join(", "))}};r=Et.get("application/json"),n="application/json"}return{serializer:r,type:n,parameters:i}}function Sp(e,t,r){let s=t.headers["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),e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=j_(t);if(r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),e[Symbol.iterator]&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,X_.createBrotliCompress)({}))),o}n=i.serializer.serialize(e)}return s?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,X_.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Zs(e,t){if(e?.contentType!=null&&e.data!=null)return e;let r=t.serialize;if(r)return r(e);let s=j_(t);return r=t.serialize=s.serializer.serialize,r(e)}function v5(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 yo(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Et.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Et.get(e)?.deserialize||AL(e,s);return o=>v5(o).then(i)}return Et.get(e)?.deserialize||AL(e,s)}function AL(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=>({contentType:e,data:r})}function B5(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 J_,hp,As,gi,X_,Z_,OL,qc,Et,NL,gL,bL,M5,P5,go=pe(()=>{J_=U(QE()),hp=U(z_()),As=require("msgpackr"),gi=require("cbor-x"),X_=require("zlib"),Z_=require("stream");es();OL=require("../index"),qc={useRecords:!1,useToJSON:!0};tt.contentType=function(e,t){Et.set(e,t)};Et=new Map,NL=Et;(0,OL._assignPackageExport)("contentTypes",NL);Et.set("application/json",{serializeStream:J_.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});gL=new gi.Encoder(qc);Et.set("application/cbor",{serializeStream(e){return new gi.EncoderStream(qc).end(e)},serialize:gL.encode,deserialize:gL.decode,q:1});Et.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Z_.Readable.from((0,As.encodeIter)(e,qc)):(0,As.pack)(e)},serialize:As.pack,deserialize:As.unpack,q:.9});Et.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,hp.toCsvStream)(e)},q:.1});Et.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Et.set("text/event-stream",{serializeStream:function(e){return Z_.Readable.from(B5(e,this.serialize))},serialize:function(e){if(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+`
19
19
  `),t+`
20
20
  `}else return"data: "+e+`
21
21
 
22
- `},q:.8});Et.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()}});OL={type:"application/json",serializeStream:J_.streamAsJSON,serialize:JSON.stringify,deserialize:D5,q:.8};Et.set("*/*",OL);Et.set("",OL);a(D5,"tryJSONParse");a(mp,"registerContentHandlers");L5=require("fastify-plugin"),M5=L5(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=j_(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(j_,"findBestSerializer");a(Sp,"serialize");a(Qs,"serializeMessage");a(P5,"streamToBuffer");a(No,"getDeserializer");a(RL,"deserializerUnknownType");a(v5,"transformIterable")});var Rp={};je(Rp,{start:()=>q5});async function H5(e,t){let r=e.headers.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Bu(e);let s=performance.now(),n,i=new So;try{e.responseHeaders=i;let o=e.url.slice(1),c=Tp.getMatch(o);if(!c)return t(e);e.handlerPath=c.path;let u={url:c.relativeURL},l=c.Resource,_=await Ye(e,()=>{if(r==="POST"||r==="PUT"||r==="PATCH"||r==="QUERY")try{e.data=No(e.headers["content-type"],!0)(e.body)}catch(p){throw new qc.ClientError(p,400)}switch(e.authorize=!0,r){case"GET":case"HEAD":return l.get(u,e);case"POST":return l.post(u,e.data,e);case"PUT":return l.put(u,e.data,e);case"DELETE":return l.delete(u,e);case"PATCH":return l.patch(u,e.data,e);case"OPTIONS":i.set("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(u,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(u,e.data,e);case"COPY":return l.copy(u,e.headers.destination,e);case"MOVE":return l.move(u,e.headers.destination,e);case"BREW":throw new qc.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new qc.ServerError(`Method ${r} is not recognized`,501)}}),d=200,E;if(_==null)d=r==="GET"||r==="HEAD"?404:204;else if(E=e?.lastModified){B5[0]=E;let p=String.fromCharCode(34,(Ot[0]&63)+62,(Ot[0]>>6)+(Ot[1]<<2&63)+62,(Ot[1]>>4)+(Ot[2]<<4&63)+62,(Ot[2]>>2)+62,(Ot[3]&63)+62,(Ot[3]>>6)+(Ot[4]<<2&63)+62,(Ot[4]>>4)+(Ot[5]<<4&63)+62,(Ot[5]>>2)+62,(Ot[6]&63)+62,(Ot[6]>>6)+(Ot[7]<<2&63)+62,34),T=e.headers["if-none-match"];T&&p==T?(_?.onDone&&_.onDone(),d=304,_=void 0):i.set("ETag",p)}e.createdResource&&(d=201),e.newLocation&&i.set("Location",e.newLocation);let f={status:d,headers:i,body:void 0},h=_?.wasLoadedFromSource?.();return h!==void 0&&(h?f.wasCacheMiss=!0:E&&i.set("Age",Math.round((Date.now()-E)/1e3))),_!==void 0&&(f.body=Sp(_,e,f),r==="HEAD"&&(f.body=void 0)),f}catch(o){return o.statusCode||console.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.set("Allow",o.allow.map(c=>c.toUpperCase()).join(", ")))),{status:o.statusCode||500,headers:i,body:Qs(o.toString(),e)}}}function q5(e){if(bL)return;bL=!0,Tp=e.resources,e.server.http(async(r,s)=>{if(!r.isWebSocket)return H5(r,s)}),e.server.ws(async(r,s,n)=>{yL++,pp||(setTimeout(()=>{console.log("connection count",yL,"mem",Math.round(process.memoryUsage().heapUsed/1e6)),pp=!1},1e3),pp=!0),t(s);let i=new Zr;r.on("error",console.error);let o;r.on("message",a(function(d){o||(o=No(s.headers["content-type"]));let E=o(d);i.push(E)},"message"));let c;r.on("close",()=>{i.emit("close"),c&&c.return()}),await n;let u,l=await Tp.call(s.pathname.slice(1),s,(_,d)=>(u=!0,_.connect(i)));if(!u)r.send(Qs(`No resource was found to handle ${s.pathname}`,s));else{c=l[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;)r.send(Qs(_.value,s))}r.close()});function t(r){let s=r.pathname,n=s.lastIndexOf(".");if(n>-1){let i=s.slice(n+1),o=EXTENSION_TYPES[i];o&&(r.headers.accept=o)}}a(t,"startRequest")}var qc,Ot,B5,bL,Tp,yL,pp,IL=Se(()=>{To();qc=C(W());Hu();oa();$n();KS();Ot=new Uint8Array(8),B5=new Float64Array(Ot.buffer,0,1);a(H5,"http");yL=0;a(q5,"start")});var gp=m((Ele,wL)=>{var{recordAction:ed,recordActionBinary:F5}=(ji(),re(vl)),G5=require("fastify-plugin"),x5=200;wL.exports=G5(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?(l=s.body?.operation,_="operation"):(l=u.url,_="fastify-route",d=u.method),ed(o,"TTFB",l,d,_),F5(n.raw.statusCode<400,"success",l,d,_);let E=x5;i?.pipe?(i.on("data",h=>{E+=h.length}),i.on("end",()=>{ed(performance.now()-c,"transfer",l,d,_),ed(E,"bytes-sent",l,d,_)})):(E+=i?.length||0,ed(E,"bytes-sent",l,d,_));let f=o.toFixed(3);n.header("Server-Timing",`db;dur=${f}`)}),r()},{name:"hdb-request-time"})});var bp=m((fle,ML)=>{var id=require("clone"),od=Pe(),k5=V(),sd=A(),V5=x(),td=require("fs"),Ap=require("joi"),{string:nd}=Ap.types(),{hdb_errors:$5,handleHDBError:Fc}=W(),{HDB_ERROR_MSGS:Y5,HTTP_STATUS_CODES:rd}=$5,{common_validators:bo}=ss(),CL=1e9,UL=" is required",K5=["insert","update","upsert"],Op={database:{presence:!1,format:bo.schema_format,length:bo.schema_length},schema:{presence:!1,format:bo.schema_format,length:bo.schema_length},table:{presence:!0,format:bo.schema_format,length:bo.schema_length},action:{inclusion:{within:K5,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},W5={schema:nd.required(),table:nd.required(),action:nd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Q5,AWS_SECRET:z5,AWS_BUCKET:J5,AWS_FILE_KEY:X5,REGION:Z5}=sd.S3_BUCKET_AUTH_KEYS,j5={s3:{presence:!0},[`s3.${Q5}`]:{presence:!0,type:"String"},[`s3.${z5}`]:{presence:!0,type:"String"},[`s3.${J5}`]:{presence:!0,type:"String"},[`s3.${X5}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Z5}`]:{presence:!0,type:"String"}},DL=id(Op);DL.data.presence={message:UL};var LL=id(Op);LL.file_path.presence={message:UL};var e8=Object.assign(id(Op),j5),Np=id(W5);Np.csv_url=nd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Np.passthrough_headers=Ap.object();function t8(e){let t=od.validateObject(e,DL);return ad(e,t)}a(t8,"dataObject");function r8(e){let t=od.validateBySchema(e,Ap.object(Np));return ad(e,t)}a(r8,"urlObject");function s8(e){let t=od.validateObject(e,LL);return ad(e,t)}a(s8,"fileObject");function n8(e){let t=od.validateObject(e,e8);return ad(e,t)}a(n8,"s3FileObject");function ad(e,t){if(!t){let r=k5.checkGlobalSchemaTable(e.schema,e.table);if(r)return Fc(new Error,r,rd.BAD_REQUEST);if(e.operation===sd.OPERATIONS_ENUM.CSV_FILE_LOAD){try{td.accessSync(e.file_path,td.constants.R_OK|td.constants.F_OK)}catch(s){return s.code===sd.NODE_ERROR_CODES.ENOENT?Fc(s,`No such file or directory ${s.path}`,rd.BAD_REQUEST):s.code===sd.NODE_ERROR_CODES.EACCES?Fc(s,`Permission denied ${s.path}`,rd.BAD_REQUEST):Fc(s)}try{let s=td.statSync(e.file_path).size;if(s>CL)return Fc(new Error,Y5.MAX_FILE_SIZE_ERR(s,CL),rd.BAD_REQUEST)}catch(s){V5.error(s),console.error(s)}}}return t}a(ad,"postValidateChecks");ML.exports={dataObject:t8,urlObject:r8,fileObject:s8,s3FileObject:n8}});var yp=m((mle,PL)=>{"use strict";var Gc=x(),cd=A();async function i8(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===cd.OPERATIONS_ENUM.INSERT||t.operation===cd.OPERATIONS_ENUM.UPDATE||t.operation===cd.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===cd.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Gc.info(i.message),i):i.http_resp_msg?(Gc.error(`Error calling operation: ${e.name}`),Gc.error(i.http_resp_msg),i):(Gc.error(`Error calling operation: ${e.name}`),Gc.error(i),i)}}a(i8,"callOperationFunctionAsAwait");PL.exports={callOperationFunctionAsAwait:i8}});var BL=m((ple,vL)=>{"use strict";var Ip=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}},wp=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};vL.exports={BulkLoadFileObject:Ip,BulkLoadDataObject:wp}});var qL=m((Rle,HL)=>{"use strict";var Cp=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};HL.exports=Cp});var vp=m((yle,tM)=>{"use strict";var ud=Nr(),_d=bp(),o8=require("needle"),Kr=A(),Ale=Be(),yo=V(),{handleHDBError:qe,hdb_errors:WL}=W(),{HTTP_STATUS_CODES:Nt,HDB_ERROR_MSGS:ct,CHECK_LOGS_WRAPPER:Ti}=WL,Io=x(),Up=require("papaparse");yo.promisifyPapaParse();var Wr=require("fs-extra"),a8=require("path"),{chain:FL}=require("stream-chain"),GL=require("stream-json/streamers/StreamArray"),xL=require("stream-json/utils/Batch"),kL=require("stream-chain/utils/comp"),{finished:VL}=require("stream"),c8=Q(),QL=yp(),u8=Ep(),{BulkLoadFileObject:Lp,BulkLoadDataObject:l8}=BL(),Mp=sp(),{verifyBulkLoadAttributePerms:zL}=K_(),Ole=qL(),Nle=nt(),ble=Gs(),{databases:_8}=(de(),re(Ne)),{coerceType:d8}=(dd(),re(Bp)),$L="No records parsed from csv file.",pi=`${c8.get("HDB_ROOT")}/tmp`,{schema_regex:E8}=ss(),YL=1024*1024*2,KL=5e3,f8={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};tM.exports={csvDataLoad:h8,csvURLLoad:m8,csvFileLoad:S8,importFromS3:p8};async function h8(e,t){let r=_d.dataObject(e);if(r)throw qe(r,r.message,Nt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=ZL(e.schema,e.table),i=Up.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Dp.bind(null,n),dynamicTyping:!1}),o=new Mp;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&zL(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 qe(new Error,c,Nt.BAD_REQUEST,void 0,void 0,!0);let u=new l8(e.action,e.schema,e.table,i.data);return s=await QL.callOperationFunctionAsAwait(jL,u,null),s.message===$L?$L:eM(s.records,s.number_written)}catch(n){throw Ri(n)}}a(h8,"csvDataLoad");async function m8(e){let t=_d.urlObject(e);if(t)throw qe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${pi}/${r}`;try{await T8(e,r)}catch(n){throw Io.error(ct.DOWNLOAD_FILE_ERR(r)+" - "+n),qe(n,Ti(ct.DOWNLOAD_FILE_ERR(r)))}try{let n=new Lp(this.job_operation_function.name,e.action,e.schema,e.table,s,Kr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Pp(n);return await ld(s),i}catch(n){throw await ld(s),Ri(n)}}a(m8,"csvURLLoad");async function S8(e){let t=_d.fileObject(e);if(t)throw qe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r=new Lp(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Kr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Pp(r)}catch(s){throw Ri(s)}}a(S8,"csvFileLoad");async function p8(e){let t=_d.s3FileObject(e);if(t)throw qe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=a8.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${pi}/${n}`;let i=new Lp(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await R8(n,e);let o=await Pp(i);return await ld(r),o}catch(s){throw await ld(r),Ri(s)}}a(p8,"importFromS3");async function T8(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await o8("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 qe(s,n,s.statusCode,Kr.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}A8(r,e.csv_url),await g8(t,r.raw)}a(T8,"downloadCSVFile");async function R8(e,t){try{let r=`${pi}/${e}`;await Wr.mkdirp(pi),await Wr.writeFile(`${pi}/${e}`,"",{flag:"a+"});let s=await Wr.createWriteStream(r),n=await u8.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(){Io.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Io.error(ct.S3_DOWNLOAD_ERR+" - "+r),qe(r,Ti(ct.S3_DOWNLOAD_ERR))}}a(R8,"downloadFileFromS3");async function g8(e,t){try{await Wr.mkdirp(pi),await Wr.writeFile(`${pi}/${e}`,t)}catch(r){throw Io.error(ct.WRITE_TEMP_FILE_ERR),qe(r,Ti(ct.DEFAULT_BULK_LOAD_ERR))}}a(g8,"writeFileToTempFolder");async function ld(e){if(e)try{await Wr.access(e),await Wr.unlink(e)}catch{Io.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(ld,"deleteTempFile");function A8(e,t){if(e.statusCode!==WL.HTTP_STATUS_CODES.OK)throw qe(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Nt.BAD_REQUEST);if(!f8[e.headers["content-type"]])throw qe(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Nt.BAD_REQUEST);if(!e.raw)throw qe(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Nt.BAD_REQUEST)}a(A8,"validateURLResponse");async function Pp(e){try{let t;switch(e.file_type){case Kr.VALID_S3_FILE_TYPES.CSV:t=await O8(e);break;case Kr.VALID_S3_FILE_TYPES.JSON:t=await N8(e);break;default:throw qe(new Error,ct.DEFAULT_BULK_LOAD_ERR,Nt.BAD_REQUEST,Kr.LOG_LEVELS.ERROR,ct.INVALID_FILE_EXT_ERR(e))}return eM(t.records,t.number_written)}catch(t){throw Ri(t)}}a(Pp,"fileLoad");async function JL(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 ud.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&zL(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=qe(c);r(u)}}a(JL,"validateChunk");async function XL(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;yo.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!yo.isEmpty(c)&&!yo.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(l=>c.add(l))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await QL.callOperationFunctionAsAwait(jL,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=qe(c,Ti(ct.INSERT_CSV_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ct.INSERT_CSV_ERR+" - "+c);r(u)}}a(XL,"insertChunk");async function O8(e){let t={records:0,number_written:0},r=ZL(e.schema,e.table);try{let s=new Mp,n=Wr.createReadStream(e.file_path,{highWaterMark:YL});n.setEncoding("utf8"),await Up.parsePromise(n,JL.bind(null,e,s),Dp.bind(null,r));let i=s.getPermsResponse();if(i)throw qe(new Error,i,Nt.BAD_REQUEST);return n=Wr.createReadStream(e.file_path,{highWaterMark:YL}),n.setEncoding("utf8"),await Up.parsePromise(n,XL.bind(null,e,t),Dp.bind(null,r)),n.destroy(),t}catch(s){throw qe(s,Ti(ct.PAPA_PARSE_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ct.PAPA_PARSE_ERR+s)}}a(O8,"callPapaParse");function ZL(e,t){let r=_8[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>d8(i,n));return s}a(ZL,"createTransformMap");function Dp(e,t,r){let s=e.get(r);return s?s(t):yo.autoCast(t)}a(Dp,"typeFunction");async function N8(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new Mp,n=FL([Wr.createReadStream(e.file_path,{encoding:"utf-8"}),GL.withParser(),c=>c.value,new xL({batchSize:KL}),kL(async c=>{await JL(e,s,r,c)})]);await new Promise((c,u)=>{VL(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw qe(new Error,i,Nt.BAD_REQUEST);let o=FL([Wr.createReadStream(e.file_path,{encoding:"utf-8"}),GL.withParser(),c=>c.value,new xL({batchSize:KL}),kL(async c=>{await XL(e,t,r,c)})]);return await new Promise((c,u)=>{VL(o,l=>{l?u(l):c()}),o.resume()}),t}catch(s){throw qe(s,Ti(ct.INSERT_JSON_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ct.INSERT_JSON_ERR+s)}}a(N8,"insertJson");async function jL(e){let t={};try{e.data&&e.data.length>0&&b8(e.data[0])?t=await y8(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Io.info(t.message))}catch(r){throw Ri(r)}return t}a(jL,"callBulkFileLoad");function b8(e){let t=Object.keys(e);for(let r of t)if(!E8.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(b8,"validateColumnNames");async function y8(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=ud.insert;break;case"update":i=ud.update;break;case"upsert":i=ud.upsert;break;default:throw qe(new Error,ct.INVALID_ACTION_PARAM_ERR(s),Nt.BAD_REQUEST,Kr.LOG_LEVELS.ERROR,ct.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 _=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][_])>=0&&e.splice(d,1)}let u=yo.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Ri(o)}}a(y8,"bulkFileLoad");function eM(e,t){return`successfully loaded ${t} of ${e} records`}a(eM,"buildResponseMsg");function Ri(e){return qe(e,Ti(ct.DEFAULT_BULK_LOAD_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ct.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ri,"buildTopLevelErrMsg")});var sM=m((wle,rM)=>{"use strict";var Hp=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};rM.exports=Hp});var oM=m((Ule,iM)=>{"use strict";var I8=A(),nM=require("moment"),w8=require("uuid").v4,qp=class{static{a(this,"JobObject")}constructor(){this.id=w8(),this.type=void 0,this.start_datetime=nM().valueOf(),this.created_datetime=nM().valueOf(),this.end_datetime=void 0,this.status=I8.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};iM.exports=qp});var Fp=m((Lle,dM)=>{"use strict";var C8=require("uuid").v4,uM=Nr(),lM=Or(),U8=as(),D8=Ji(),L8=sM(),Fe=A(),M8=oM(),P8=Dm(),Lr=x(),v8=pa(),wo=V(),{promisify:B8}=require("util"),gi=require("moment"),H8=Q_(),Ed=bp(),aM=Pf(),{deleteTransactionLogsBeforeValidator:q8}=XS(),{handleHDBError:F8,hdb_errors:G8}=W(),{HTTP_STATUS_CODES:x8}=G8,cM=lM.searchByValue,k8=lM.searchByHash,V8=uM.insert,$8=B8(H8.evaluateSQL),Y8=uM.update;dM.exports={addJob:Q8,updateJob:J8,handleGetJob:K8,handleGetJobsByStartDate:W8,getJobById:_M};async function K8(e){try{let t=await _M(e.id);return wo.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 Lr.error("There was an error getting job",t),new Error(r)}}a(K8,"handleGetJob");async function W8(e){try{let t=await z8(e);if(Lr.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=gi(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=gi(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 Lr.error(r),new Error(r)}}a(W8,"handleGetJobsByStartDate");async function Q8(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||wo.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return Lr.info(_),t.error=_,t}if(!Fe.JOB_TYPE_ENUM[e.operation])return Lr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Fe.OPERATIONS_ENUM.CSV_FILE_LOAD:s=Ed.fileObject(e);break;case Fe.OPERATIONS_ENUM.CSV_URL_LOAD:s=Ed.urlObject(e);break;case Fe.OPERATIONS_ENUM.CSV_DATA_LOAD:s=Ed.dataObject(e);break;case Fe.OPERATIONS_ENUM.IMPORT_FROM_S3:s=Ed.s3FileObject(e);break;case Fe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Fe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=aM(e,"date");break;case Fe.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=aM(e,"timestamp");break;case Fe.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=q8(e);break;default:break}if(s)throw F8(s,s.message,x8.BAD_REQUEST,void 0,void 0,!0);let n=new M8;n.type=e.operation===Fe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Fe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new U8(Fe.SYSTEM_SCHEMA_NAME,Fe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await cM(i))}catch(_){let d=`There was an error inserting a new job: ${_}`;return Lr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=C8();try{o=await cM(i)}catch(_){let d=`There was an error inserting a new job: ${_}`;return Lr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Lr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new v8(Fe.SYSTEM_SCHEMA_NAME,Fe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await V8(u)}catch(_){return Lr.error(`There was an error inserting a job for job type: ${e.operation} -- ${_}`),t.success=!1,t}if(l.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let _=`Created a job with type ${n.type} and id ${n.id}`;t.message=_,t.createdJob=n,t.success=!0,Lr.trace(_)}return t}a(Q8,"addJob");async function z8(e){let t=gi(e.from_date,gi.ISO_8601),r=gi(e.to_date,gi.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 L8(s,e.hdb_user);try{return await $8(n)}catch(i){throw Lr.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(z8,"getJobsInDateRange");async function _M(e){if(wo.isEmptyOrZeroLength(e))return wo.errorizeMessage("Invalid job ID specified.");let t=new D8(Fe.SYSTEM_SCHEMA_NAME,Fe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await k8(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Lr.error(s),wo.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(_M,"getJobById");async function J8(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(wo.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Fe.JOB_STATUS_ENUM.COMPLETE||e.status===Fe.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=gi().valueOf());let t=new P8(Fe.SYSTEM_SCHEMA_NAME,Fe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Y8(t),r}a(J8,"updateJob")});var pM=m((Ple,SM)=>{"use strict";var EM=V(),Xt=A(),X8=require("moment"),fd=vp(),hd=x(),fM=Fp(),hM=z_(),mM=jn(),Z8=dt(),j8=q_(),Gp=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function e6(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(EM.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(EM.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Xt.JOB_TYPE_ENUM.csv_file_load:await js(e,fd.csvFileLoad);break;case Xt.JOB_TYPE_ENUM.csv_url_load:await js(e,fd.csvURLLoad);break;case Xt.JOB_TYPE_ENUM.csv_data_load:await js(e,fd.csvDataLoad);break;case Xt.JOB_TYPE_ENUM.import_from_s3:await js(e,fd.importFromS3);break;case Xt.JOB_TYPE_ENUM.empty_trash:break;case Xt.JOB_TYPE_ENUM.export_local:await js(e,hM.export_local);break;case Xt.JOB_TYPE_ENUM.export_to_s3:await js(e,hM.export_to_s3);break;case Xt.JOB_TYPE_ENUM.delete_files_before:case Xt.JOB_TYPE_ENUM.delete_records_before:await js(e,mM.deleteFilesBefore);break;case Xt.JOB_TYPE_ENUM.delete_audit_logs_before:await js(e,mM.deleteAuditLogsBefore);break;case Xt.JOB_TYPE_ENUM.delete_transaction_logs_before:await js(e,j8.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(e6,"parseMessage");async function js(e,t){try{e.job.status=Xt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=X8().valueOf(),await fM.updateJob(e.job),await t6(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):hd.error(`There was an error running ${t.name} job with id ${e.job.id}`),hd.error(s),e.job.message=s,e.job.status=Xt.JOB_STATUS_ENUM.ERROR;try{await fM.updateJob(e.job)}catch(n){throw hd.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(js,"runJob");async function t6(e){hd.trace("launching job thread:",e),Z8.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Xt.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(t6,"launchJobThread");SM.exports={parseMessage:e6,RunnerMessage:Gp}});var RM=m((Ble,TM)=>{"use strict";var xp=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};TM.exports=xp});var HM=m((qle,Kp)=>{"use strict";var Td=Or(),$p=Q_(),md=vp(),en=$l(),Sd=Qn(),kc=jn(),r6=mm(),xc=br(),pd=bm(),bt=JS(),ut=x(),s6=wm(),n6=ic(),i6=uS(),o6=uc(),a6=lS(),c6=_S(),u6=E_(),l6=hS(),kp=pS(),gM=z_(),_6=K_(),Yp=Fp(),I=A(),{hdb_errors:$c,handleHDBError:Vc}=W(),{HTTP_STATUS_CODES:AM}=$c,Vp=OS(),OM=xS(),LM=require("util"),Co=Nr(),d6=xs(),E6=_o(),NM=pM(),bM=tc(),yM=(P_(),re(Nc)),IM=Tr(),wM=q_(),CM=k_(),{setServerUtilities:f6}=(dd(),re(Bp)),{CONTEXT:h6}=(jr(),re(qE)),{_assignPackageExport:m6}=require("../index"),{transformReq:S6}=V(),p6=yp(),UM=Td.searchByHash,T6=Td.searchByValue,R6=LM.promisify(Td.search),g6=LM.promisify($p.evaluateSQL),A6={[I.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[I.OPERATIONS_ENUM.CREATE_TABLE]:!0,[I.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[I.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[I.OPERATIONS_ENUM.DROP_TABLE]:!0,[I.OPERATIONS_ENUM.DROP_SCHEMA]:!0},B=RM();async function MM(e,t){try{if(e.body.operation!=="read_log"&&(ut.log_level===I.LOG_LEVELS.INFO||ut.log_level===I.LOG_LEVELS.DEBUG||ut.log_level===I.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;ut.info(o)}}catch(s){ut.error(s)}let r=await p6.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return A6[e.body.operation]&&d6.setSchemaDataToGlobal(s=>{s&&ut.error(s)}),r}a(MM,"processLocalTransaction");var DM=N6();Kp.exports={chooseOperation:PM,getOperationFunction:vM,operation:BM,processLocalTransaction:MM};f6(Kp.exports);function PM(e){let t;try{t=vM(e)}catch(n){throw ut.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=$p.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=$p.checkASTPermissions(e,i);if(o)throw ut.error(`${AM.FORBIDDEN} from operation ${e.operation}`),ut.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Vc(new Error,o,$c.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==I.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==I.OPERATIONS_ENUM.LOGIN&&e.operation!==I.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=_6.verifyPerms(i,n);if(o)throw ut.error(`${AM.FORBIDDEN} from operation ${e.operation}`),ut.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Vc(new Error,o,$c.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw Vc(n,"There was an error when trying to choose an operation path")}return r}a(PM,"chooseOperation");function vM(e){if(ut.trace(`getOperationFunction with operation: ${e.operation}`),DM.has(e.operation))return DM.get(e.operation);throw Vc(new Error,$c.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),$c.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(vM,"getOperationFunction");m6("operation",BM);function BM(e,t){e.hdb_user=this[h6]?.user,e.bypass_auth=!t;let r=PM(e);return MM({body:e},r)}a(BM,"operation");async function O6(e){ut.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[I.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case I.OPERATIONS_ENUM.INSERT:o=await Co.insert(i);break;case I.OPERATIONS_ENUM.UPDATE:o=await Co.update(i);break;case I.OPERATIONS_ENUM.UPSERT:o=await Co.upsert(i);break;case I.OPERATIONS_ENUM.DELETE:o=await kc.deleteRecord(i);break;default:ut.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){ut.info("Invalid operation in transaction"),ut.error(o)}}a(O6,"catchup");async function Rs(e){S6(e);let t,r;try{r=await Yp.addJob(e),t=r.createdJob,ut.info("addJob result",r);let s=new NM.RunnerMessage(t,e);return await NM.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 ut.error(n),Vc(s,n)}}a(Rs,"executeJob");function N6(){let e=new Map;return e.set(I.OPERATIONS_ENUM.INSERT,new B(Co.insert)),e.set(I.OPERATIONS_ENUM.UPDATE,new B(Co.update)),e.set(I.OPERATIONS_ENUM.UPSERT,new B(Co.upsert)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new B(Td.searchByConditions)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_HASH,new B(UM)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_ID,new B(UM)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_VALUE,new B(T6)),e.set(I.OPERATIONS_ENUM.SEARCH,new B(R6)),e.set(I.OPERATIONS_ENUM.SQL,new B(g6)),e.set(I.OPERATIONS_ENUM.CSV_DATA_LOAD,new B(Rs,md.csvDataLoad)),e.set(I.OPERATIONS_ENUM.CSV_FILE_LOAD,new B(Rs,md.csvFileLoad)),e.set(I.OPERATIONS_ENUM.CSV_URL_LOAD,new B(Rs,md.csvURLLoad)),e.set(I.OPERATIONS_ENUM.IMPORT_FROM_S3,new B(Rs,md.importFromS3)),e.set(I.OPERATIONS_ENUM.CREATE_SCHEMA,new B(en.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_DATABASE,new B(en.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_TABLE,new B(en.createTable)),e.set(I.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new B(en.createAttribute)),e.set(I.OPERATIONS_ENUM.DROP_SCHEMA,new B(en.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_DATABASE,new B(en.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_TABLE,new B(en.dropTable)),e.set(I.OPERATIONS_ENUM.DROP_ATTRIBUTE,new B(en.dropAttribute)),e.set(I.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new B(Sd.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_DATABASE,new B(Sd.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_TABLE,new B(Sd.describeTable)),e.set(I.OPERATIONS_ENUM.DESCRIBE_ALL,new B(Sd.describeAll)),e.set(I.OPERATIONS_ENUM.DELETE,new B(kc.deleteRecord)),e.set(I.OPERATIONS_ENUM.ADD_USER,new B(xc.addUser)),e.set(I.OPERATIONS_ENUM.ALTER_USER,new B(xc.alterUser)),e.set(I.OPERATIONS_ENUM.DROP_USER,new B(xc.dropUser)),e.set(I.OPERATIONS_ENUM.LIST_USERS,new B(xc.listUsersExternal)),e.set(I.OPERATIONS_ENUM.LIST_ROLES,new B(pd.listRoles)),e.set(I.OPERATIONS_ENUM.ADD_ROLE,new B(pd.addRole)),e.set(I.OPERATIONS_ENUM.ALTER_ROLE,new B(pd.alterRole)),e.set(I.OPERATIONS_ENUM.DROP_ROLE,new B(pd.dropRole)),e.set(I.OPERATIONS_ENUM.USER_INFO,new B(xc.userInfo)),e.set(I.OPERATIONS_ENUM.READ_LOG,new B(s6)),e.set(I.OPERATIONS_ENUM.ADD_NODE,new B(n6)),e.set(I.OPERATIONS_ENUM.UPDATE_NODE,new B(i6)),e.set(I.OPERATIONS_ENUM.REMOVE_NODE,new B(o6)),e.set(I.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new B(a6)),e.set(I.OPERATIONS_ENUM.PURGE_STREAM,new B(c6)),e.set(I.OPERATIONS_ENUM.SET_CONFIGURATION,new B(IM.setConfiguration)),e.set(I.OPERATIONS_ENUM.CLUSTER_STATUS,new B(u6.clusterStatus)),e.set(I.OPERATIONS_ENUM.CLUSTER_NETWORK,new B(l6)),e.set(I.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new B(kp.setRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new B(kp.getRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new B(kp.deleteRoutes)),e.set(I.OPERATIONS_ENUM.EXPORT_TO_S3,new B(Rs,gM.export_to_s3)),e.set(I.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new B(Rs,kc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new B(Rs,kc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.EXPORT_LOCAL,new B(Rs,gM.export_local)),e.set(I.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new B(Yp.handleGetJobsByStartDate)),e.set(I.OPERATIONS_ENUM.GET_JOB,new B(Yp.handleGetJob)),e.set(I.OPERATIONS_ENUM.GET_FINGERPRINT,new B(Vp.getFingerprint)),e.set(I.OPERATIONS_ENUM.SET_LICENSE,new B(Vp.setLicense)),e.set(I.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new B(Vp.getRegistrationInfo)),e.set(I.OPERATIONS_ENUM.RESTART,new B(OM.restart)),e.set(I.OPERATIONS_ENUM.RESTART_SERVICE,new B(OM.restartService)),e.set(I.OPERATIONS_ENUM.CATCHUP,new B(O6)),e.set(I.OPERATIONS_ENUM.SYSTEM_INFORMATION,new B(E6.systemInformation)),e.set(I.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new B(Rs,kc.deleteAuditLogsBefore)),e.set(I.OPERATIONS_ENUM.READ_AUDIT_LOG,new B(r6)),e.set(I.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new B(bM.createTokens)),e.set(I.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new B(bM.refreshOperationToken)),e.set(I.OPERATIONS_ENUM.LOGIN,new B(yM.login)),e.set(I.OPERATIONS_ENUM.LOGOUT,new B(yM.logout)),e.set(I.OPERATIONS_ENUM.GET_CONFIGURATION,new B(IM.getConfiguration)),e.set(I.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new B(bt.customFunctionsStatus)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new B(bt.getCustomFunctions)),e.set(I.OPERATIONS_ENUM.GET_COMPONENT_FILE,new B(bt.getComponentFile)),e.set(I.OPERATIONS_ENUM.GET_COMPONENTS,new B(bt.getComponents)),e.set(I.OPERATIONS_ENUM.SET_COMPONENT_FILE,new B(bt.setComponentFile)),e.set(I.OPERATIONS_ENUM.DROP_COMPONENT,new B(bt.dropComponent)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new B(bt.getCustomFunction)),e.set(I.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new B(bt.setCustomFunction)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new B(bt.dropCustomFunction)),e.set(I.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new B(bt.addComponent)),e.set(I.OPERATIONS_ENUM.ADD_COMPONENT,new B(bt.addComponent)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new B(bt.dropCustomFunctionProject)),e.set(I.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new B(bt.packageComponent)),e.set(I.OPERATIONS_ENUM.PACKAGE_COMPONENT,new B(bt.packageComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new B(bt.deployComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_COMPONENT,new B(bt.deployComponent)),e.set(I.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new B(wM.readTransactionLog)),e.set(I.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new B(Rs,wM.deleteTransactionLogsBefore)),e.set(I.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new B(CM.installModules)),e.set(I.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new B(CM.auditModules)),e.set(I.OPERATIONS_ENUM.GET_BACKUP,new B(en.getBackup)),e}a(N6,"initializeOperationFunctionMap")});var gd=m((Gle,GM)=>{"use strict";var Wp=A(),b6=V(),Yc=x(),{handleHDBError:Qp,hdb_errors:Rd}=W(),{isMainThread:y6}=require("worker_threads"),{Readable:I6}=require("stream"),qM=require("os"),w6=require("util"),C6=Fm(),U6=w6.promisify(C6.authorize),FM=HM(),{Gzip:D6}=require("zlib");function L6(e){let t=`Found an uncaught exception with message: ${e.message}. ${qM.EOL}Stack: ${e.stack} ${qM.EOL}Terminating ${y6?"HDB":"thread"}.`;console.error(t),Yc.fatal(t),process.exit(1)}a(L6,"handleServerUncaughtException");function M6(e,t,r){if(Yc[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:Rd.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(M6,"serverErrorHandler");function P6(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=Qp(new Error,"Invalid JSON.",Rd.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(b6.isEmpty(e.body.operation)){let s=Qp(new Error,"Request body must include an 'operation' property.",Rd.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(P6,"reqBodyValidationHandler");function v6(e,t,r){let s;e.body.operation!==Wp.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Wp.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Wp.OPERATIONS_ENUM.LOGOUT?U6(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Yc.warn(n),Yc.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(Qp(n,i,Rd.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(v6,"authHandler");async function B6(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=FM.chooseOperation(e.body);let n=await FM.processLocalTransaction(e,s);if(n instanceof I6&&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(new D6))}return n}catch(n){throw Yc.error(n),n}}a(B6,"handlePostRequest");GM.exports={authHandler:v6,handlePostRequest:B6,handleServerUncaughtException:L6,serverErrorHandler:M6,reqBodyValidationHandler:P6}});var $M=m((kle,VM)=>{"use strict";var H6=require("fastify-plugin"),{handlePostRequest:xM,authHandler:q6,reqBodyValidationHandler:F6}=gd();async function G6(e){e.decorate("hdbCore",{preValidation:[F6,q6],request:t=>kM(xM(t,response)),requestWithoutAuthentication:(t,r)=>kM(xM(t,r,!0))})}a(G6,"hdbCore");async function kM(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(kM,"convertAsyncIterators");VM.exports=H6(G6)});var KM=m(($le,YM)=>{"use strict";var zp=require("fs"),Uo=Q();Uo.initSync();var{CONFIG_PARAMS:Kc}=A(),x6=1024*1024*1024;function k6(e){let t=Uo.get(Kc.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=Uo.get(Kc.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:x6,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Uo.get(Kc.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=Uo.get(Kc.CUSTOMFUNCTIONS_TLS_CERTIFICATE),o=Uo.get(Kc.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:zp.readFileSync(`${n}`),cert:zp.readFileSync(i)+(o?`
22
+ `},q:.8});Et.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()}});bL={type:"application/json",serializeStream:J_.streamAsJSON,serialize:JSON.stringify,deserialize:L5,q:.8};Et.set("*/*",bL);Et.set("",bL);a(L5,"tryJSONParse");a(mp,"registerContentHandlers");M5=require("fastify-plugin"),P5=M5(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=j_(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(j_,"findBestSerializer");a(Sp,"serialize");a(Zs,"serializeMessage");a(v5,"streamToBuffer");a(yo,"getDeserializer");a(AL,"deserializerUnknownType");a(B5,"transformIterable")});var Rp={};je(Rp,{start:()=>F5});async function q5(e,t){let r=e.headers.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Bu(e);let s=new Ti;try{e.responseHeaders=s;let n=e.url.slice(1),i=Tp.getMatch(n);if(!i)return t(e);e.handlerPath=i.path;let o={url:i.relativeURL},c=i.Resource,u=await Ke(e,()=>{if(r==="POST"||r==="PUT"||r==="PATCH"||r==="QUERY")try{e.data=yo(e.headers["content-type"],!0)(e.body)}catch(f){throw new Fc.ClientError(f,400)}switch(e.authorize=!0,r){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.set("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,e.headers.destination,e);case"MOVE":return c.move(o,e.headers.destination,e);case"BREW":throw new Fc.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Fc.ServerError(`Method ${r} is not recognized`,501)}}),l=200,_;if(u==null)l=r==="GET"||r==="HEAD"?404:204;else if(_=e?.lastModified){H5[0]=_;let f=String.fromCharCode(34,(Ot[0]&63)+62,(Ot[0]>>6)+(Ot[1]<<2&63)+62,(Ot[1]>>4)+(Ot[2]<<4&63)+62,(Ot[2]>>2)+62,(Ot[3]&63)+62,(Ot[3]>>6)+(Ot[4]<<2&63)+62,(Ot[4]>>4)+(Ot[5]<<4&63)+62,(Ot[5]>>2)+62,(Ot[6]&63)+62,(Ot[6]>>6)+(Ot[7]<<2&63)+62,34),h=e.headers["if-none-match"];h&&f==h?(u?.onDone&&u.onDone(),l=304,u=void 0):s.set("ETag",f)}e.createdResource&&(l=201),e.newLocation&&s.set("Location",e.newLocation);let d={status:l,headers:s,body:void 0},E=u?.wasLoadedFromSource?.();return E!==void 0&&(E?d.wasCacheMiss=!0:_&&s.set("Age",Math.round((Date.now()-_)/1e3))),u!==void 0&&(d.body=Sp(u,e,d),r==="HEAD"&&(d.body=void 0)),d}catch(n){return n.statusCode||console.error(n),n.statusCode===405&&(n.method&&(n.message+=` to handle HTTP method ${n.method.toUpperCase()||""}`),n.allow&&(n.allow.push("trace","head","options"),s.set("Allow",n.allow.map(i=>i.toUpperCase()).join(", ")))),{status:n.statusCode||500,headers:s,body:Zs(n.toString(),e)}}}function F5(e){if(IL)return;IL=!0,Tp=e.resources,e.server.http(async(r,s)=>{if(!r.isWebSocket)return q5(r,s)}),e.server.ws(async(r,s,n)=>{wL++,pp||(setTimeout(()=>{console.log("connection count",wL,"mem",Math.round(process.memoryUsage().heapUsed/1e6)),pp=!1},1e3),pp=!0),t(s);let i=new ts;r.on("error",console.error);let o;r.on("message",a(function(d){o||(o=yo(s.headers["content-type"]));let E=o(d);i.push(E)},"message"));let c;r.on("close",()=>{i.emit("close"),c&&c.return()}),await n;let u,l=await Tp.call(s.pathname.slice(1),s,(_,d)=>(u=!0,_.connect(i)));if(!u)r.send(Zs(`No resource was found to handle ${s.pathname}`,s));else{c=l[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;)r.send(Zs(_.value,s))}r.close()});function t(r){let s=r.pathname,n=s.lastIndexOf(".");if(n>-1){let i=s.slice(n+1),o=EXTENSION_TYPES[i];o&&(r.headers.accept=o)}}a(t,"startRequest")}var Fc,Ot,H5,IL,Tp,wL,pp,CL=pe(()=>{go();Fc=U(W());Hu();aa();Wn();KS();Ot=new Uint8Array(8),H5=new Float64Array(Ot.buffer,0,1);a(q5,"http");wL=0;a(F5,"start")});var gp=m((fle,UL)=>{var{recordAction:ed,recordActionBinary:G5}=(ro(),se(vl)),x5=require("fastify-plugin"),k5=200;UL.exports=x5(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?(l=s.body?.operation,_="operation"):(l=u.url,_="fastify-route",d=u.method),ed(o,"TTFB",l,d,_),G5(n.raw.statusCode<400,"success",l,d,_);let E=k5;i?.pipe?(i.on("data",h=>{E+=h.length}),i.on("end",()=>{ed(performance.now()-c,"transfer",l,d,_),ed(E,"bytes-sent",l,d,_)})):(E+=i?.length||0,ed(E,"bytes-sent",l,d,_));let f=o.toFixed(3);n.header("Server-Timing",`db;dur=${f}`)}),r()},{name:"hdb-request-time"})});var bp=m((hle,vL)=>{var id=require("clone"),od=ve(),V5=V(),sd=A(),$5=x(),td=require("fs"),Ap=require("joi"),{string:nd}=Ap.types(),{hdb_errors:Y5,handleHDBError:Gc}=W(),{HDB_ERROR_MSGS:K5,HTTP_STATUS_CODES:rd}=Y5,{common_validators:Io}=os(),DL=1e9,LL=" is required",W5=["insert","update","upsert"],Op={database:{presence:!1,format:Io.schema_format,length:Io.schema_length},schema:{presence:!1,format:Io.schema_format,length:Io.schema_length},table:{presence:!0,format:Io.schema_format,length:Io.schema_length},action:{inclusion:{within:W5,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Q5={schema:nd.required(),table:nd.required(),action:nd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:z5,AWS_SECRET:J5,AWS_BUCKET:X5,AWS_FILE_KEY:Z5,REGION:j5}=sd.S3_BUCKET_AUTH_KEYS,e8={s3:{presence:!0},[`s3.${z5}`]:{presence:!0,type:"String"},[`s3.${J5}`]:{presence:!0,type:"String"},[`s3.${X5}`]:{presence:!0,type:"String"},[`s3.${Z5}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${j5}`]:{presence:!0,type:"String"}},ML=id(Op);ML.data.presence={message:LL};var PL=id(Op);PL.file_path.presence={message:LL};var t8=Object.assign(id(Op),e8),Np=id(Q5);Np.csv_url=nd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Np.passthrough_headers=Ap.object();function r8(e){let t=od.validateObject(e,ML);return ad(e,t)}a(r8,"dataObject");function s8(e){let t=od.validateBySchema(e,Ap.object(Np));return ad(e,t)}a(s8,"urlObject");function n8(e){let t=od.validateObject(e,PL);return ad(e,t)}a(n8,"fileObject");function i8(e){let t=od.validateObject(e,t8);return ad(e,t)}a(i8,"s3FileObject");function ad(e,t){if(!t){let r=V5.checkGlobalSchemaTable(e.schema,e.table);if(r)return Gc(new Error,r,rd.BAD_REQUEST);if(e.operation===sd.OPERATIONS_ENUM.CSV_FILE_LOAD){try{td.accessSync(e.file_path,td.constants.R_OK|td.constants.F_OK)}catch(s){return s.code===sd.NODE_ERROR_CODES.ENOENT?Gc(s,`No such file or directory ${s.path}`,rd.BAD_REQUEST):s.code===sd.NODE_ERROR_CODES.EACCES?Gc(s,`Permission denied ${s.path}`,rd.BAD_REQUEST):Gc(s)}try{let s=td.statSync(e.file_path).size;if(s>DL)return Gc(new Error,K5.MAX_FILE_SIZE_ERR(s,DL),rd.BAD_REQUEST)}catch(s){$5.error(s),console.error(s)}}}return t}a(ad,"postValidateChecks");vL.exports={dataObject:r8,urlObject:s8,fileObject:n8,s3FileObject:i8}});var yp=m((Sle,BL)=>{"use strict";var xc=x(),cd=A();async function o8(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===cd.OPERATIONS_ENUM.INSERT||t.operation===cd.OPERATIONS_ENUM.UPDATE||t.operation===cd.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===cd.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(xc.info(i.message),i):i.http_resp_msg?(xc.error(`Error calling operation: ${e.name}`),xc.error(i.http_resp_msg),i):(xc.error(`Error calling operation: ${e.name}`),xc.error(i),i)}}a(o8,"callOperationFunctionAsAwait");BL.exports={callOperationFunctionAsAwait:o8}});var qL=m((Tle,HL)=>{"use strict";var Ip=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}},wp=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};HL.exports={BulkLoadFileObject:Ip,BulkLoadDataObject:wp}});var GL=m((gle,FL)=>{"use strict";var Cp=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};FL.exports=Cp});var vp=m((Ile,sM)=>{"use strict";var ud=yr(),_d=bp(),a8=require("needle"),Qr=A(),Ole=He(),wo=V(),{handleHDBError:Fe,hdb_errors:zL}=W(),{HTTP_STATUS_CODES:Nt,HDB_ERROR_MSGS:ct,CHECK_LOGS_WRAPPER:Oi}=zL,Co=x(),Up=require("papaparse");wo.promisifyPapaParse();var zr=require("fs-extra"),c8=require("path"),{chain:xL}=require("stream-chain"),kL=require("stream-json/streamers/StreamArray"),VL=require("stream-json/utils/Batch"),$L=require("stream-chain/utils/comp"),{finished:YL}=require("stream"),u8=Q(),JL=yp(),l8=Ep(),{BulkLoadFileObject:Lp,BulkLoadDataObject:_8}=qL(),Mp=sp(),{verifyBulkLoadAttributePerms:XL}=K_(),Nle=GL(),ble=nt(),yle=$s(),{databases:d8}=(Ee(),se(be)),{coerceType:E8}=(dd(),se(Bp)),KL="No records parsed from csv file.",Ai=`${u8.get("HDB_ROOT")}/tmp`,{schema_regex:f8}=os(),WL=1024*1024*2,QL=5e3,h8={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};sM.exports={csvDataLoad:m8,csvURLLoad:S8,csvFileLoad:p8,importFromS3:T8};async function m8(e,t){let r=_d.dataObject(e);if(r)throw Fe(r,r.message,Nt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=eM(e.schema,e.table),i=Up.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Dp.bind(null,n),dynamicTyping:!1}),o=new Mp;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&XL(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 Fe(new Error,c,Nt.BAD_REQUEST,void 0,void 0,!0);let u=new _8(e.action,e.schema,e.table,i.data);return s=await JL.callOperationFunctionAsAwait(tM,u,null),s.message===KL?KL:rM(s.records,s.number_written)}catch(n){throw Ni(n)}}a(m8,"csvDataLoad");async function S8(e){let t=_d.urlObject(e);if(t)throw Fe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Ai}/${r}`;try{await R8(e,r)}catch(n){throw Co.error(ct.DOWNLOAD_FILE_ERR(r)+" - "+n),Fe(n,Oi(ct.DOWNLOAD_FILE_ERR(r)))}try{let n=new Lp(this.job_operation_function.name,e.action,e.schema,e.table,s,Qr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Pp(n);return await ld(s),i}catch(n){throw await ld(s),Ni(n)}}a(S8,"csvURLLoad");async function p8(e){let t=_d.fileObject(e);if(t)throw Fe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r=new Lp(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Qr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Pp(r)}catch(s){throw Ni(s)}}a(p8,"csvFileLoad");async function T8(e){let t=_d.s3FileObject(e);if(t)throw Fe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=c8.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Ai}/${n}`;let i=new Lp(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await g8(n,e);let o=await Pp(i);return await ld(r),o}catch(s){throw await ld(r),Ni(s)}}a(T8,"importFromS3");async function R8(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await a8("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 Fe(s,n,s.statusCode,Qr.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}O8(r,e.csv_url),await A8(t,r.raw)}a(R8,"downloadCSVFile");async function g8(e,t){try{let r=`${Ai}/${e}`;await zr.mkdirp(Ai),await zr.writeFile(`${Ai}/${e}`,"",{flag:"a+"});let s=await zr.createWriteStream(r),n=await l8.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(){Co.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Co.error(ct.S3_DOWNLOAD_ERR+" - "+r),Fe(r,Oi(ct.S3_DOWNLOAD_ERR))}}a(g8,"downloadFileFromS3");async function A8(e,t){try{await zr.mkdirp(Ai),await zr.writeFile(`${Ai}/${e}`,t)}catch(r){throw Co.error(ct.WRITE_TEMP_FILE_ERR),Fe(r,Oi(ct.DEFAULT_BULK_LOAD_ERR))}}a(A8,"writeFileToTempFolder");async function ld(e){if(e)try{await zr.access(e),await zr.unlink(e)}catch{Co.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(ld,"deleteTempFile");function O8(e,t){if(e.statusCode!==zL.HTTP_STATUS_CODES.OK)throw Fe(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Nt.BAD_REQUEST);if(!h8[e.headers["content-type"]])throw Fe(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Nt.BAD_REQUEST);if(!e.raw)throw Fe(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Nt.BAD_REQUEST)}a(O8,"validateURLResponse");async function Pp(e){try{let t;switch(e.file_type){case Qr.VALID_S3_FILE_TYPES.CSV:t=await N8(e);break;case Qr.VALID_S3_FILE_TYPES.JSON:t=await b8(e);break;default:throw Fe(new Error,ct.DEFAULT_BULK_LOAD_ERR,Nt.BAD_REQUEST,Qr.LOG_LEVELS.ERROR,ct.INVALID_FILE_EXT_ERR(e))}return rM(t.records,t.number_written)}catch(t){throw Ni(t)}}a(Pp,"fileLoad");async function ZL(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 ud.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&XL(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=Fe(c);r(u)}}a(ZL,"validateChunk");async function jL(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;wo.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!wo.isEmpty(c)&&!wo.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(l=>c.add(l))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await JL.callOperationFunctionAsAwait(tM,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Fe(c,Oi(ct.INSERT_CSV_ERR),Nt.INTERNAL_SERVER_ERROR,Qr.LOG_LEVELS.ERROR,ct.INSERT_CSV_ERR+" - "+c);r(u)}}a(jL,"insertChunk");async function N8(e){let t={records:0,number_written:0},r=eM(e.schema,e.table);try{let s=new Mp,n=zr.createReadStream(e.file_path,{highWaterMark:WL});n.setEncoding("utf8"),await Up.parsePromise(n,ZL.bind(null,e,s),Dp.bind(null,r));let i=s.getPermsResponse();if(i)throw Fe(new Error,i,Nt.BAD_REQUEST);return n=zr.createReadStream(e.file_path,{highWaterMark:WL}),n.setEncoding("utf8"),await Up.parsePromise(n,jL.bind(null,e,t),Dp.bind(null,r)),n.destroy(),t}catch(s){throw Fe(s,Oi(ct.PAPA_PARSE_ERR),Nt.INTERNAL_SERVER_ERROR,Qr.LOG_LEVELS.ERROR,ct.PAPA_PARSE_ERR+s)}}a(N8,"callPapaParse");function eM(e,t){let r=d8[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>E8(i,n));return s}a(eM,"createTransformMap");function Dp(e,t,r){let s=e.get(r);return s?s(t):wo.autoCast(t)}a(Dp,"typeFunction");async function b8(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new Mp,n=xL([zr.createReadStream(e.file_path,{encoding:"utf-8"}),kL.withParser(),c=>c.value,new VL({batchSize:QL}),$L(async c=>{await ZL(e,s,r,c)})]);await new Promise((c,u)=>{YL(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Fe(new Error,i,Nt.BAD_REQUEST);let o=xL([zr.createReadStream(e.file_path,{encoding:"utf-8"}),kL.withParser(),c=>c.value,new VL({batchSize:QL}),$L(async c=>{await jL(e,t,r,c)})]);return await new Promise((c,u)=>{YL(o,l=>{l?u(l):c()}),o.resume()}),t}catch(s){throw Fe(s,Oi(ct.INSERT_JSON_ERR),Nt.INTERNAL_SERVER_ERROR,Qr.LOG_LEVELS.ERROR,ct.INSERT_JSON_ERR+s)}}a(b8,"insertJson");async function tM(e){let t={};try{e.data&&e.data.length>0&&y8(e.data[0])?t=await I8(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Co.info(t.message))}catch(r){throw Ni(r)}return t}a(tM,"callBulkFileLoad");function y8(e){let t=Object.keys(e);for(let r of t)if(!f8.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(y8,"validateColumnNames");async function I8(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=ud.insert;break;case"update":i=ud.update;break;case"upsert":i=ud.upsert;break;default:throw Fe(new Error,ct.INVALID_ACTION_PARAM_ERR(s),Nt.BAD_REQUEST,Qr.LOG_LEVELS.ERROR,ct.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 _=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][_])>=0&&e.splice(d,1)}let u=wo.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Ni(o)}}a(I8,"bulkFileLoad");function rM(e,t){return`successfully loaded ${t} of ${e} records`}a(rM,"buildResponseMsg");function Ni(e){return Fe(e,Oi(ct.DEFAULT_BULK_LOAD_ERR),Nt.INTERNAL_SERVER_ERROR,Qr.LOG_LEVELS.ERROR,ct.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ni,"buildTopLevelErrMsg")});var iM=m((Cle,nM)=>{"use strict";var Hp=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};nM.exports=Hp});var cM=m((Dle,aM)=>{"use strict";var w8=A(),oM=require("moment"),C8=require("uuid").v4,qp=class{static{a(this,"JobObject")}constructor(){this.id=C8(),this.type=void 0,this.start_datetime=oM().valueOf(),this.created_datetime=oM().valueOf(),this.end_datetime=void 0,this.status=w8.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};aM.exports=qp});var Fp=m((Mle,fM)=>{"use strict";var U8=require("uuid").v4,_M=yr(),dM=br(),D8=ls(),L8=ji(),M8=iM(),Ge=A(),P8=cM(),v8=Dm(),Pr=x(),B8=Ta(),Uo=V(),{promisify:H8}=require("util"),bi=require("moment"),q8=Q_(),Ed=bp(),uM=Pf(),{deleteTransactionLogsBeforeValidator:F8}=XS(),{handleHDBError:G8,hdb_errors:x8}=W(),{HTTP_STATUS_CODES:k8}=x8,lM=dM.searchByValue,V8=dM.searchByHash,$8=_M.insert,Y8=H8(q8.evaluateSQL),K8=_M.update;fM.exports={addJob:z8,updateJob:X8,handleGetJob:W8,handleGetJobsByStartDate:Q8,getJobById:EM};async function W8(e){try{let t=await EM(e.id);return Uo.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 Pr.error("There was an error getting job",t),new Error(r)}}a(W8,"handleGetJob");async function Q8(e){try{let t=await J8(e);if(Pr.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=bi(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=bi(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 Pr.error(r),new Error(r)}}a(Q8,"handleGetJobsByStartDate");async function z8(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Uo.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return Pr.info(_),t.error=_,t}if(!Ge.JOB_TYPE_ENUM[e.operation])return Pr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ge.OPERATIONS_ENUM.CSV_FILE_LOAD:s=Ed.fileObject(e);break;case Ge.OPERATIONS_ENUM.CSV_URL_LOAD:s=Ed.urlObject(e);break;case Ge.OPERATIONS_ENUM.CSV_DATA_LOAD:s=Ed.dataObject(e);break;case Ge.OPERATIONS_ENUM.IMPORT_FROM_S3:s=Ed.s3FileObject(e);break;case Ge.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ge.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=uM(e,"date");break;case Ge.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=uM(e,"timestamp");break;case Ge.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=F8(e);break;default:break}if(s)throw G8(s,s.message,k8.BAD_REQUEST,void 0,void 0,!0);let n=new P8;n.type=e.operation===Ge.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ge.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new D8(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await lM(i))}catch(_){let d=`There was an error inserting a new job: ${_}`;return Pr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=U8();try{o=await lM(i)}catch(_){let d=`There was an error inserting a new job: ${_}`;return Pr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Pr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new B8(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await $8(u)}catch(_){return Pr.error(`There was an error inserting a job for job type: ${e.operation} -- ${_}`),t.success=!1,t}if(l.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let _=`Created a job with type ${n.type} and id ${n.id}`;t.message=_,t.createdJob=n,t.success=!0,Pr.trace(_)}return t}a(z8,"addJob");async function J8(e){let t=bi(e.from_date,bi.ISO_8601),r=bi(e.to_date,bi.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 M8(s,e.hdb_user);try{return await Y8(n)}catch(i){throw Pr.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(J8,"getJobsInDateRange");async function EM(e){if(Uo.isEmptyOrZeroLength(e))return Uo.errorizeMessage("Invalid job ID specified.");let t=new L8(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await V8(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Pr.error(s),Uo.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(EM,"getJobById");async function X8(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Uo.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ge.JOB_STATUS_ENUM.COMPLETE||e.status===Ge.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=bi().valueOf());let t=new v8(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await K8(t),r}a(X8,"updateJob")});var RM=m((vle,TM)=>{"use strict";var hM=V(),Zt=A(),Z8=require("moment"),fd=vp(),hd=x(),mM=Fp(),SM=z_(),pM=ri(),j8=dt(),e6=q_(),Gp=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function t6(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(hM.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(hM.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Zt.JOB_TYPE_ENUM.csv_file_load:await sn(e,fd.csvFileLoad);break;case Zt.JOB_TYPE_ENUM.csv_url_load:await sn(e,fd.csvURLLoad);break;case Zt.JOB_TYPE_ENUM.csv_data_load:await sn(e,fd.csvDataLoad);break;case Zt.JOB_TYPE_ENUM.import_from_s3:await sn(e,fd.importFromS3);break;case Zt.JOB_TYPE_ENUM.empty_trash:break;case Zt.JOB_TYPE_ENUM.export_local:await sn(e,SM.export_local);break;case Zt.JOB_TYPE_ENUM.export_to_s3:await sn(e,SM.export_to_s3);break;case Zt.JOB_TYPE_ENUM.delete_files_before:case Zt.JOB_TYPE_ENUM.delete_records_before:await sn(e,pM.deleteFilesBefore);break;case Zt.JOB_TYPE_ENUM.delete_audit_logs_before:await sn(e,pM.deleteAuditLogsBefore);break;case Zt.JOB_TYPE_ENUM.delete_transaction_logs_before:await sn(e,e6.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(t6,"parseMessage");async function sn(e,t){try{e.job.status=Zt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Z8().valueOf(),await mM.updateJob(e.job),await r6(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):hd.error(`There was an error running ${t.name} job with id ${e.job.id}`),hd.error(s),e.job.message=s,e.job.status=Zt.JOB_STATUS_ENUM.ERROR;try{await mM.updateJob(e.job)}catch(n){throw hd.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(sn,"runJob");async function r6(e){hd.trace("launching job thread:",e),j8.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Zt.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(r6,"launchJobThread");TM.exports={parseMessage:t6,RunnerMessage:Gp}});var AM=m((Hle,gM)=>{"use strict";var xp=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};gM.exports=xp});var FM=m((Fle,Kp)=>{"use strict";var Td=br(),$p=Q_(),md=vp(),nn=$l(),Sd=Xn(),Vc=ri(),s6=mm(),kc=Ir(),pd=bm(),bt=JS(),ut=x(),n6=wm(),i6=oc(),o6=uS(),a6=lc(),c6=lS(),u6=_S(),l6=E_(),_6=hS(),kp=pS(),OM=z_(),d6=K_(),Yp=Fp(),y=A(),{hdb_errors:Yc,handleHDBError:$c}=W(),{HTTP_STATUS_CODES:NM}=Yc,Vp=OS(),bM=xS(),PM=require("util"),Do=yr(),E6=Ys(),f6=ho(),yM=RM(),IM=rc(),wM=(P_(),se(bc)),CM=gr(),UM=q_(),DM=k_(),{setServerUtilities:h6}=(dd(),se(Bp)),{CONTEXT:m6}=(rs(),se(qE)),{_assignPackageExport:S6}=require("../index"),{transformReq:p6}=V(),T6=yp(),LM=Td.searchByHash,R6=Td.searchByValue,g6=PM.promisify(Td.search),A6=PM.promisify($p.evaluateSQL),O6={[y.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[y.OPERATIONS_ENUM.CREATE_TABLE]:!0,[y.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[y.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[y.OPERATIONS_ENUM.DROP_TABLE]:!0,[y.OPERATIONS_ENUM.DROP_SCHEMA]:!0},B=AM();async function vM(e,t){try{if(e.body.operation!=="read_log"&&(ut.log_level===y.LOG_LEVELS.INFO||ut.log_level===y.LOG_LEVELS.DEBUG||ut.log_level===y.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;ut.info(o)}}catch(s){ut.error(s)}let r=await T6.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return O6[e.body.operation]&&E6.setSchemaDataToGlobal(s=>{s&&ut.error(s)}),r}a(vM,"processLocalTransaction");var MM=b6();Kp.exports={chooseOperation:BM,getOperationFunction:HM,operation:qM,processLocalTransaction:vM};h6(Kp.exports);function BM(e){let t;try{t=HM(e)}catch(n){throw ut.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=$p.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=$p.checkASTPermissions(e,i);if(o)throw ut.error(`${NM.FORBIDDEN} from operation ${e.operation}`),ut.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),$c(new Error,o,Yc.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==y.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==y.OPERATIONS_ENUM.LOGIN&&e.operation!==y.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=d6.verifyPerms(i,n);if(o)throw ut.error(`${NM.FORBIDDEN} from operation ${e.operation}`),ut.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),$c(new Error,o,Yc.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw $c(n,"There was an error when trying to choose an operation path")}return r}a(BM,"chooseOperation");function HM(e){if(ut.trace(`getOperationFunction with operation: ${e.operation}`),MM.has(e.operation))return MM.get(e.operation);throw $c(new Error,Yc.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Yc.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(HM,"getOperationFunction");S6("operation",qM);function qM(e,t){e.hdb_user=this[m6]?.user,e.bypass_auth=!t;let r=BM(e);return vM({body:e},r)}a(qM,"operation");async function N6(e){ut.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[y.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case y.OPERATIONS_ENUM.INSERT:o=await Do.insert(i);break;case y.OPERATIONS_ENUM.UPDATE:o=await Do.update(i);break;case y.OPERATIONS_ENUM.UPSERT:o=await Do.upsert(i);break;case y.OPERATIONS_ENUM.DELETE:o=await Vc.deleteRecord(i);break;default:ut.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){ut.info("Invalid operation in transaction"),ut.error(o)}}a(N6,"catchup");async function Os(e){p6(e);let t,r;try{r=await Yp.addJob(e),t=r.createdJob,ut.info("addJob result",r);let s=new yM.RunnerMessage(t,e);return await yM.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 ut.error(n),$c(s,n)}}a(Os,"executeJob");function b6(){let e=new Map;return e.set(y.OPERATIONS_ENUM.INSERT,new B(Do.insert)),e.set(y.OPERATIONS_ENUM.UPDATE,new B(Do.update)),e.set(y.OPERATIONS_ENUM.UPSERT,new B(Do.upsert)),e.set(y.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new B(Td.searchByConditions)),e.set(y.OPERATIONS_ENUM.SEARCH_BY_HASH,new B(LM)),e.set(y.OPERATIONS_ENUM.SEARCH_BY_ID,new B(LM)),e.set(y.OPERATIONS_ENUM.SEARCH_BY_VALUE,new B(R6)),e.set(y.OPERATIONS_ENUM.SEARCH,new B(g6)),e.set(y.OPERATIONS_ENUM.SQL,new B(A6)),e.set(y.OPERATIONS_ENUM.CSV_DATA_LOAD,new B(Os,md.csvDataLoad)),e.set(y.OPERATIONS_ENUM.CSV_FILE_LOAD,new B(Os,md.csvFileLoad)),e.set(y.OPERATIONS_ENUM.CSV_URL_LOAD,new B(Os,md.csvURLLoad)),e.set(y.OPERATIONS_ENUM.IMPORT_FROM_S3,new B(Os,md.importFromS3)),e.set(y.OPERATIONS_ENUM.CREATE_SCHEMA,new B(nn.createSchema)),e.set(y.OPERATIONS_ENUM.CREATE_DATABASE,new B(nn.createSchema)),e.set(y.OPERATIONS_ENUM.CREATE_TABLE,new B(nn.createTable)),e.set(y.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new B(nn.createAttribute)),e.set(y.OPERATIONS_ENUM.DROP_SCHEMA,new B(nn.dropSchema)),e.set(y.OPERATIONS_ENUM.DROP_DATABASE,new B(nn.dropSchema)),e.set(y.OPERATIONS_ENUM.DROP_TABLE,new B(nn.dropTable)),e.set(y.OPERATIONS_ENUM.DROP_ATTRIBUTE,new B(nn.dropAttribute)),e.set(y.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new B(Sd.describeSchema)),e.set(y.OPERATIONS_ENUM.DESCRIBE_DATABASE,new B(Sd.describeSchema)),e.set(y.OPERATIONS_ENUM.DESCRIBE_TABLE,new B(Sd.describeTable)),e.set(y.OPERATIONS_ENUM.DESCRIBE_ALL,new B(Sd.describeAll)),e.set(y.OPERATIONS_ENUM.DELETE,new B(Vc.deleteRecord)),e.set(y.OPERATIONS_ENUM.ADD_USER,new B(kc.addUser)),e.set(y.OPERATIONS_ENUM.ALTER_USER,new B(kc.alterUser)),e.set(y.OPERATIONS_ENUM.DROP_USER,new B(kc.dropUser)),e.set(y.OPERATIONS_ENUM.LIST_USERS,new B(kc.listUsersExternal)),e.set(y.OPERATIONS_ENUM.LIST_ROLES,new B(pd.listRoles)),e.set(y.OPERATIONS_ENUM.ADD_ROLE,new B(pd.addRole)),e.set(y.OPERATIONS_ENUM.ALTER_ROLE,new B(pd.alterRole)),e.set(y.OPERATIONS_ENUM.DROP_ROLE,new B(pd.dropRole)),e.set(y.OPERATIONS_ENUM.USER_INFO,new B(kc.userInfo)),e.set(y.OPERATIONS_ENUM.READ_LOG,new B(n6)),e.set(y.OPERATIONS_ENUM.ADD_NODE,new B(i6)),e.set(y.OPERATIONS_ENUM.UPDATE_NODE,new B(o6)),e.set(y.OPERATIONS_ENUM.REMOVE_NODE,new B(a6)),e.set(y.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new B(c6)),e.set(y.OPERATIONS_ENUM.PURGE_STREAM,new B(u6)),e.set(y.OPERATIONS_ENUM.SET_CONFIGURATION,new B(CM.setConfiguration)),e.set(y.OPERATIONS_ENUM.CLUSTER_STATUS,new B(l6.clusterStatus)),e.set(y.OPERATIONS_ENUM.CLUSTER_NETWORK,new B(_6)),e.set(y.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new B(kp.setRoutes)),e.set(y.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new B(kp.getRoutes)),e.set(y.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new B(kp.deleteRoutes)),e.set(y.OPERATIONS_ENUM.EXPORT_TO_S3,new B(Os,OM.export_to_s3)),e.set(y.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new B(Os,Vc.deleteFilesBefore)),e.set(y.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new B(Os,Vc.deleteFilesBefore)),e.set(y.OPERATIONS_ENUM.EXPORT_LOCAL,new B(Os,OM.export_local)),e.set(y.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new B(Yp.handleGetJobsByStartDate)),e.set(y.OPERATIONS_ENUM.GET_JOB,new B(Yp.handleGetJob)),e.set(y.OPERATIONS_ENUM.GET_FINGERPRINT,new B(Vp.getFingerprint)),e.set(y.OPERATIONS_ENUM.SET_LICENSE,new B(Vp.setLicense)),e.set(y.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new B(Vp.getRegistrationInfo)),e.set(y.OPERATIONS_ENUM.RESTART,new B(bM.restart)),e.set(y.OPERATIONS_ENUM.RESTART_SERVICE,new B(bM.restartService)),e.set(y.OPERATIONS_ENUM.CATCHUP,new B(N6)),e.set(y.OPERATIONS_ENUM.SYSTEM_INFORMATION,new B(f6.systemInformation)),e.set(y.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new B(Os,Vc.deleteAuditLogsBefore)),e.set(y.OPERATIONS_ENUM.READ_AUDIT_LOG,new B(s6)),e.set(y.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new B(IM.createTokens)),e.set(y.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new B(IM.refreshOperationToken)),e.set(y.OPERATIONS_ENUM.LOGIN,new B(wM.login)),e.set(y.OPERATIONS_ENUM.LOGOUT,new B(wM.logout)),e.set(y.OPERATIONS_ENUM.GET_CONFIGURATION,new B(CM.getConfiguration)),e.set(y.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new B(bt.customFunctionsStatus)),e.set(y.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new B(bt.getCustomFunctions)),e.set(y.OPERATIONS_ENUM.GET_COMPONENT_FILE,new B(bt.getComponentFile)),e.set(y.OPERATIONS_ENUM.GET_COMPONENTS,new B(bt.getComponents)),e.set(y.OPERATIONS_ENUM.SET_COMPONENT_FILE,new B(bt.setComponentFile)),e.set(y.OPERATIONS_ENUM.DROP_COMPONENT,new B(bt.dropComponent)),e.set(y.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new B(bt.getCustomFunction)),e.set(y.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new B(bt.setCustomFunction)),e.set(y.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new B(bt.dropCustomFunction)),e.set(y.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new B(bt.addComponent)),e.set(y.OPERATIONS_ENUM.ADD_COMPONENT,new B(bt.addComponent)),e.set(y.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new B(bt.dropCustomFunctionProject)),e.set(y.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new B(bt.packageComponent)),e.set(y.OPERATIONS_ENUM.PACKAGE_COMPONENT,new B(bt.packageComponent)),e.set(y.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new B(bt.deployComponent)),e.set(y.OPERATIONS_ENUM.DEPLOY_COMPONENT,new B(bt.deployComponent)),e.set(y.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new B(UM.readTransactionLog)),e.set(y.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new B(Os,UM.deleteTransactionLogsBefore)),e.set(y.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new B(DM.installModules)),e.set(y.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new B(DM.auditModules)),e.set(y.OPERATIONS_ENUM.GET_BACKUP,new B(nn.getBackup)),e}a(b6,"initializeOperationFunctionMap")});var gd=m((xle,kM)=>{"use strict";var Wp=A(),y6=V(),Kc=x(),{handleHDBError:Qp,hdb_errors:Rd}=W(),{isMainThread:I6}=require("worker_threads"),{Readable:w6}=require("stream"),GM=require("os"),C6=require("util"),U6=Fm(),D6=C6.promisify(U6.authorize),xM=FM(),{Gzip:L6}=require("zlib");function M6(e){let t=`Found an uncaught exception with message: ${e.message}. ${GM.EOL}Stack: ${e.stack} ${GM.EOL}Terminating ${I6?"HDB":"thread"}.`;console.error(t),Kc.fatal(t),process.exit(1)}a(M6,"handleServerUncaughtException");function P6(e,t,r){if(Kc[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:Rd.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(P6,"serverErrorHandler");function v6(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=Qp(new Error,"Invalid JSON.",Rd.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(y6.isEmpty(e.body.operation)){let s=Qp(new Error,"Request body must include an 'operation' property.",Rd.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(v6,"reqBodyValidationHandler");function B6(e,t,r){let s;e.body.operation!==Wp.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Wp.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Wp.OPERATIONS_ENUM.LOGOUT?D6(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Kc.warn(n),Kc.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(Qp(n,i,Rd.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(B6,"authHandler");async function H6(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=xM.chooseOperation(e.body);let n=await xM.processLocalTransaction(e,s);if(n instanceof w6&&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(new L6))}return n}catch(n){throw Kc.error(n),n}}a(H6,"handlePostRequest");kM.exports={authHandler:B6,handlePostRequest:H6,handleServerUncaughtException:M6,serverErrorHandler:P6,reqBodyValidationHandler:v6}});var KM=m((Vle,YM)=>{"use strict";var q6=require("fastify-plugin"),{handlePostRequest:VM,authHandler:F6,reqBodyValidationHandler:G6}=gd();async function x6(e){e.decorate("hdbCore",{preValidation:[G6,F6],request:t=>$M(VM(t,response)),requestWithoutAuthentication:(t,r)=>$M(VM(t,r,!0))})}a(x6,"hdbCore");async function $M(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($M,"convertAsyncIterators");YM.exports=q6(x6)});var QM=m((Yle,WM)=>{"use strict";var zp=require("fs"),Lo=Q();Lo.initSync();var{CONFIG_PARAMS:Wc}=A(),k6=1024*1024*1024;function V6(e){let t=Lo.get(Wc.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=Lo.get(Wc.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:k6,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Lo.get(Wc.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=Lo.get(Wc.CUSTOMFUNCTIONS_TLS_CERTIFICATE),o=Lo.get(Wc.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:zp.readFileSync(`${n}`),cert:zp.readFileSync(i)+(o?`
23
23
 
24
- `+zp.readFileSync(o):"")},s.http2=!0}return s}a(k6,"getServerOptions");YM.exports=k6});var zM=m((Kle,QM)=>{"use strict";var Jp=Q();Jp.initSync();var{CONFIG_PARAMS:WM}=A();function V6(){let e=Jp.get(WM.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=Jp.get(WM.CUSTOMFUNCTIONS_NETWORK_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(V6,"getCORSOptions");QM.exports=V6});var ZM=m((Qle,XM)=>{"use strict";var JM=Q();JM.initSync();var $6=A();function Y6(){return JM.get($6.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(Y6,"getHeaderTimeoutConfig");XM.exports=Y6});var jp={};je(jp,{customFunctionsServer:()=>Q6,handleFile:()=>W6,ready:()=>X6});async function W6(e,t,r,s){if(!tn){let c=Xp.get(Zp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);tn=_P(c),tt.http((await tn).server)}let n=await tn,i=(0,eP.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),jM.has(i)||(jM.add(i),n.register(J6(i,o)))}async function Q6(){try{Ue.info("In Custom Functions Fastify server"+process.cwd()),Ue.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ue.debug(`Custom Functions server process ${process.pid} starting up.`),await z6();let e=Xp.get(Zp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=tn=await _P(t)}catch(s){throw Ue.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw Ue.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){Ue.error(`Custom Functions ${process.pid} Error: ${e}`),Ue.error(e),process.exit(1)}}async function z6(){try{Ue.info("Custom Functions starting configuration."),await oP.setUsersToGlobal(),Ue.info("Custom Functions completed configuration.")}catch(e){Ue.error(e)}}function J6(e,t){return async function(r){try{Ue.info("Custom Functions starting buildRoutes"),Ue.trace("Loading fastify routes folder "+e),(0,tP.existsSync)(e)&&r.register(iP.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Ue.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Ue.error(n.message):n&&Ue.error(n),o()})}catch(s){Ue.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function _P(e){Ue.info("Custom Functions starting buildServer.");let t=(0,aP.default)(e),r=(0,rP.default)(t);r.server.headersTimeout=(0,uP.default)(),r.setErrorHandler(lP.serverErrorHandler);let s=(0,cP.default)();return s&&r.register(sP.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(nP.default),await r.register(K6),await r.after(),mp(r),Ue.info("Custom Functions completed buildServer."),r}function X6(){if(tn)return tn.then?tn.then(e=>e.ready()):tn.ready()}var eP,tP,rP,sP,nP,iP,Xp,Zp,Ue,K6,oP,aP,cP,uP,lP,tn,jM,dP=Se(()=>{eP=require("path"),tP=require("fs"),rP=C(require("fastify")),sP=C(require("@fastify/cors")),nP=C(gp()),iP=C(require("@fastify/autoload")),Xp=C(Q()),Zp=C(A()),Ue=C(x()),K6=C($M()),oP=C(br()),aP=C(KM()),cP=C(zM()),uP=C(ZM()),lP=C(gd());To();Xr();jM=new Set;a(W6,"handleFile");a(Q6,"customFunctionsServer");a(z6,"setUp");a(J6,"buildRouteFolder");a(_P,"buildServer");a(X6,"ready")});var eT={};je(eT,{start:()=>Z6});function Z6(e){let t=e.root;return{handleFile(r,s,n){fP||(fP=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=EP.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,hP.default)(i,c)}}return o(i)},{runFirst:!0})),t&&(s.startsWith("/"+t)?s=s.slice(t.length+1):s.startsWith(t)&&(s=s.slice(t.length))),EP.set(s,n)}}}var hP,EP,fP,mP=Se(()=>{hP=C(require("send")),EP=new Map;a(Z6,"start")});function t9(e,t=1,r){if(tT++,(0,Ai.startWorker)("server/threads/threadServer.js",{name:Nd.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===Nd.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});e9.push(n),await n,Do.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=Od.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Do.indexOf(s);o>-1&&Do.splice(o,1)}if(a(i,"removeWorker"),Lo){let o=Lo;Lo=[];for(let c of o)RP[c.localPort](c)}}}),r){let s=setInterval(()=>{rT?rT=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Ai.shutdownWorkers)(),tT=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function gP(e=0,t){if(typeof e=="string")try{(0,yd.existsSync)(e)&&(0,yd.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=r9:r=s9(t):r=sT;let s=(0,TP.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},RP[e]=i=>{rT=!0,r(i,(o,c)=>{if(!o){SP?(SP.deliverSocket(i,e,c),i.resume()):tT>0?(Lo.length===0&&setTimeout(()=>{Lo.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(),Lo.push(i)):(console.log("start up a dynamic thread to handle request"),t9(0));return}o.requests++;let u=i._handle.fd;bd.trace("Socket",u,"from",i.remoteAddress," routed to worker",o.threadId),u>=0?o.postMessage({port:e,fd:u,data:c}):a9(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=ka();return bd.info(`HarperDB ${n.version} Server running on port ${e}`),s}function sT(e,t){let r,s=0;for(let n of Do){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Ad)return Ad=i,t(r);s=i}Ad=0,t(r)}function r9(e,t){let r=e.remoteAddress,s=Mo.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);sT(e,i=>{Mo.set(r,{worker:i,lastUsed:n}),t(i)})}function s9(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){s.on("data",i=>{s._handle.readStop();let c=i.toString("latin1").match(t)?.[1],u=Mo.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);sT(s,_=>{Mo.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function i9(){Ad=0;for(let e of Do)e.expectedIdle=e.recentELU.idle+n9,e.requests=1;Do.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function a9(e,t,r){let s=o9++;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(),Od.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")),Od.delete(s)),n.event=="destroy"&&(e.destroy(),Od.delete(s))})}var Ai,TP,Nd,bd,yd,j6,Do,Lo,RP,SP,tT,e9,rT,Ad,pP,Mo,n9,Od,o9,AP=Se(()=>{Ai=C(dt()),TP=require("net"),Nd=C(A()),bd=C(x()),yd=require("fs"),{isMainThread:j6}=require("worker_threads"),Do=[],Lo=[],RP=[],tT=0,e9=[];j6&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(t9,"startHTTPWorker");a(gP,"startSocketServer");Ad=0;a(sT,"findMostIdleWorker");pP=36e5,Mo=new Map;a(r9,"findByRemoteAddressAffinity");a(s9,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Mo)r.lastUsed+pP<e&&Mo.delete(t)},pP).unref();n9=1e3;a(i9,"updateWorkerIdleness");(0,Ai.setMonitorListener)(i9);Od=new Map,o9=1;a(a9,"proxySocket")});var IP=m((i_e,yP)=>{"use strict";var c9=require("cluster"),Qr=Q();Qr.initSync();var NP=A(),r_e=require("util"),rn=x(),nT=require("fs"),u9=require("fastify"),s_e=ka(),l9=require("@fastify/cors"),_9=require("@fastify/compress"),d9=require("@fastify/static"),E9=gp(),f9=require("path"),{PACKAGE_ROOT:h9}=A(),m9=xs(),S9=V(),p9=br(),T9=Na(),{server:R9}=(Xr(),re(gu)),{authHandler:g9,handlePostRequest:A9,serverErrorHandler:O9,reqBodyValidationHandler:N9}=gd(),n_e=require("net"),{registerContentHandlers:b9}=(To(),re(NL)),y9=1024*1024*1024,bP="TRUE",{HDB_SETTINGS_NAMES:Ni,CONFIG_PARAMS:I9}=NP,w9=Ni.CORS_ENABLED_KEY,C9="CORS_ACCESSLIST",U9=Ni.SERVER_TIMEOUT_KEY,D9=Ni.SERVER_KEEP_ALIVE_TIMEOUT_KEY,L9=Ni.SERVER_HEADERS_TIMEOUT_KEY,M9=Ni.PRIVATE_KEY_KEY,P9=Ni.CERT_KEY,v9=Ni.HTTP_SECURE_ENABLED_KEY,Oi;yP.exports={hdbServer:OP,start:OP};async function OP(e){try{rn.info("In Fastify server"+process.cwd()),rn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),rn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=c9.isMaster,await B9();let t=Qr.get(v9),r=t&&(t===!0||t.toUpperCase()===bP);Oi=H9(r),await Oi.ready(),e||(e={}),e.isOperationsServer=!0,Oi.server.cantCleanupProperly=!0;try{R9.http(Oi.server,e),Oi.server.closeIdleConnections||await Oi.listen({port:0,host:"::"})}catch(s){throw Oi.close(),rn.error(s),rn.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),rn.fatal(t),process.exit(1)}}a(OP,"operationsServer");async function B9(){rn.trace("Configuring HarperDB process."),m9.setSchemaDataToGlobal(),await p9.setUsersToGlobal(),await T9.getLicense()}a(B9,"setUp");function H9(e){rn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=q9(e),r=u9(t);r.server.headersTimeout=G9(),r.setErrorHandler(O9);let s=F9();s&&r.register(l9,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(E9),r.register(_9),r.register(d9,{root:f9.join(h9,"docs")}),b9(r);let n=Qr.get(NP.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!S9.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[N9,g9],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),A9(i,o)}),r.get("/health",()=>"HarperDB is running."),rn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(H9,"buildServer");function q9(e){let t=Qr.get(U9),r=Qr.get(D9),s={bodyLimit:y9,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Qr.get(M9),i=Qr.get(P9),o=Qr.get(I9.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:nT.readFileSync(n),cert:nT.readFileSync(i)+(o?`
24
+ `+zp.readFileSync(o):"")},s.http2=!0}return s}a(V6,"getServerOptions");WM.exports=V6});var XM=m((Wle,JM)=>{"use strict";var Jp=Q();Jp.initSync();var{CONFIG_PARAMS:zM}=A();function $6(){let e=Jp.get(zM.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=Jp.get(zM.CUSTOMFUNCTIONS_NETWORK_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($6,"getCORSOptions");JM.exports=$6});var eP=m((zle,jM)=>{"use strict";var ZM=Q();ZM.initSync();var Y6=A();function K6(){return ZM.get(Y6.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(K6,"getHeaderTimeoutConfig");jM.exports=K6});var jp={};je(jp,{customFunctionsServer:()=>z6,handleFile:()=>Q6,ready:()=>Z6});async function Q6(e,t,r,s){if(!on){let c=Xp.get(Zp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);on=EP(c),tt.http((await on).server)}let n=await on,i=(0,rP.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),tP.has(i)||(tP.add(i),n.register(X6(i,o)))}async function z6(){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 J6();let e=Xp.get(Zp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=on=await EP(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 J6(){try{De.info("Custom Functions starting configuration."),await cP.setUsersToGlobal(),De.info("Custom Functions completed configuration.")}catch(e){De.error(e)}}function X6(e,t){return async function(r){try{De.info("Custom Functions starting buildRoutes"),De.trace("Loading fastify routes folder "+e),(0,sP.existsSync)(e)&&r.register(aP.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 EP(e){De.info("Custom Functions starting buildServer.");let t=(0,uP.default)(e),r=(0,nP.default)(t);r.server.headersTimeout=(0,_P.default)(),r.setErrorHandler(dP.serverErrorHandler);let s=(0,lP.default)();return s&&r.register(iP.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(oP.default),await r.register(W6),await r.after(),mp(r),De.info("Custom Functions completed buildServer."),r}function Z6(){if(on)return on.then?on.then(e=>e.ready()):on.ready()}var rP,sP,nP,iP,oP,aP,Xp,Zp,De,W6,cP,uP,lP,_P,dP,on,tP,fP=pe(()=>{rP=require("path"),sP=require("fs"),nP=U(require("fastify")),iP=U(require("@fastify/cors")),oP=U(gp()),aP=U(require("@fastify/autoload")),Xp=U(Q()),Zp=U(A()),De=U(x()),W6=U(KM()),cP=U(Ir()),uP=U(QM()),lP=U(XM()),_P=U(eP()),dP=U(gd());go();es();tP=new Set;a(Q6,"handleFile");a(z6,"customFunctionsServer");a(J6,"setUp");a(X6,"buildRouteFolder");a(EP,"buildServer");a(Z6,"ready")});var eT={};je(eT,{start:()=>j6});function j6(e){let t=e.root;return{handleFile(r,s,n){mP||(mP=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=hP.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,SP.default)(i,c)}}return o(i)},{runFirst:!0})),t&&(s.startsWith("/"+t)?s=s.slice(t.length+1):s.startsWith(t)&&(s=s.slice(t.length))),hP.set(s,n)}}}var SP,hP,mP,pP=pe(()=>{SP=U(require("send")),hP=new Map;a(j6,"start")});function r9(e,t=1,r){if(tT++,(0,yi.startWorker)("server/threads/threadServer.js",{name:Nd.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===Nd.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});t9.push(n),await n,Mo.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=Od.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Mo.indexOf(s);o>-1&&Mo.splice(o,1)}if(a(i,"removeWorker"),Po){let o=Po;Po=[];for(let c of o)AP[c.localPort](c)}}}),r){let s=setInterval(()=>{rT?rT=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,yi.shutdownWorkers)(),tT=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function OP(e=0,t){if(typeof e=="string")try{(0,yd.existsSync)(e)&&(0,yd.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=s9:r=n9(t):r=sT;let s=(0,gP.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},AP[e]=i=>{rT=!0,r(i,(o,c)=>{if(!o){TP?(TP.deliverSocket(i,e,c),i.resume()):tT>0?(Po.length===0&&setTimeout(()=>{Po.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(),Po.push(i)):(console.log("start up a dynamic thread to handle request"),r9(0));return}o.requests++;let u=i._handle.fd;bd.trace("Socket",u,"from",i.remoteAddress," routed to worker",o.threadId),u>=0?o.postMessage({port:e,fd:u,data:c}):c9(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=Va();return bd.info(`HarperDB ${n.version} Server running on port ${e}`),s}function sT(e,t){let r,s=0;for(let n of Mo){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Ad)return Ad=i,t(r);s=i}Ad=0,t(r)}function s9(e,t){let r=e.remoteAddress,s=vo.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);sT(e,i=>{vo.set(r,{worker:i,lastUsed:n}),t(i)})}function n9(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){s.on("data",i=>{s._handle.readStop();let c=i.toString("latin1").match(t)?.[1],u=vo.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);sT(s,_=>{vo.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function o9(){Ad=0;for(let e of Mo)e.expectedIdle=e.recentELU.idle+i9,e.requests=1;Mo.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function c9(e,t,r){let s=a9++;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(),Od.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")),Od.delete(s)),n.event=="destroy"&&(e.destroy(),Od.delete(s))})}var yi,gP,Nd,bd,yd,e9,Mo,Po,AP,TP,tT,t9,rT,Ad,RP,vo,i9,Od,a9,NP=pe(()=>{yi=U(dt()),gP=require("net"),Nd=U(A()),bd=U(x()),yd=require("fs"),{isMainThread:e9}=require("worker_threads"),Mo=[],Po=[],AP=[],tT=0,t9=[];e9&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(r9,"startHTTPWorker");a(OP,"startSocketServer");Ad=0;a(sT,"findMostIdleWorker");RP=36e5,vo=new Map;a(s9,"findByRemoteAddressAffinity");a(n9,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of vo)r.lastUsed+RP<e&&vo.delete(t)},RP).unref();i9=1e3;a(o9,"updateWorkerIdleness");(0,yi.setMonitorListener)(o9);Od=new Map,a9=1;a(c9,"proxySocket")});var CP=m((o_e,wP)=>{"use strict";var u9=require("cluster"),Jr=Q();Jr.initSync();var yP=A(),s_e=require("util"),an=x(),nT=require("fs"),l9=require("fastify"),n_e=Va(),_9=require("@fastify/cors"),d9=require("@fastify/compress"),E9=require("@fastify/static"),f9=gp(),h9=require("path"),{PACKAGE_ROOT:m9}=A(),S9=Ys(),p9=V(),T9=Ir(),R9=ba(),{server:g9}=(es(),se(gu)),{authHandler:A9,handlePostRequest:O9,serverErrorHandler:N9,reqBodyValidationHandler:b9}=gd(),i_e=require("net"),{registerContentHandlers:y9}=(go(),se(yL)),I9=1024*1024*1024,IP="TRUE",{HDB_SETTINGS_NAMES:wi,CONFIG_PARAMS:w9}=yP,C9=wi.CORS_ENABLED_KEY,U9="CORS_ACCESSLIST",D9=wi.SERVER_TIMEOUT_KEY,L9=wi.SERVER_KEEP_ALIVE_TIMEOUT_KEY,M9=wi.SERVER_HEADERS_TIMEOUT_KEY,P9=wi.PRIVATE_KEY_KEY,v9=wi.CERT_KEY,B9=wi.HTTP_SECURE_ENABLED_KEY,Ii;wP.exports={hdbServer:bP,start:bP};async function bP(e){try{an.info("In Fastify server"+process.cwd()),an.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),an.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=u9.isMaster,await H9();let t=Jr.get(B9),r=t&&(t===!0||t.toUpperCase()===IP);Ii=q9(r),await Ii.ready(),e||(e={}),e.isOperationsServer=!0,Ii.server.cantCleanupProperly=!0;try{g9.http(Ii.server,e),Ii.server.closeIdleConnections||await Ii.listen({port:0,host:"::"})}catch(s){throw Ii.close(),an.error(s),an.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),an.fatal(t),process.exit(1)}}a(bP,"operationsServer");async function H9(){an.trace("Configuring HarperDB process."),S9.setSchemaDataToGlobal(),await T9.setUsersToGlobal(),await R9.getLicense()}a(H9,"setUp");function q9(e){an.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=F9(e),r=l9(t);r.server.headersTimeout=x9(),r.setErrorHandler(N9);let s=G9();s&&r.register(_9,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(f9),r.register(d9),r.register(E9,{root:h9.join(m9,"docs")}),y9(r);let n=Jr.get(yP.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!p9.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[b9,A9],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),O9(i,o)}),r.get("/health",()=>"HarperDB is running."),an.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(q9,"buildServer");function F9(e){let t=Jr.get(D9),r=Jr.get(L9),s={bodyLimit:I9,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Jr.get(P9),i=Jr.get(v9),o=Jr.get(w9.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:nT.readFileSync(n),cert:nT.readFileSync(i)+(o?`
25
25
 
26
- `+nT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(q9,"getServerOptions");function F9(){let e=Qr.get(w9),t=Qr.get(C9),r;return e&&(e===!0||e.toUpperCase()===bP)&&(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(F9,"getCORSOpts");function G9(){return Qr.get(L9)}a(G9,"getHeaderTimeoutConfig")});var FP=m((u_e,qP)=>{"use strict";var{decode:x9}=require("msgpackr"),{isMainThread:k9,parentPort:V9,threadId:a_e}=require("worker_threads"),iT=nt(),Po=Be(),$9=A(),Wc=x(),wP=Q(),DP=A();dt();var Y9=Gs(),{recordAction:K9,recordActionBinary:W9}=(ji(),re(vl)),{publishToStream:Q9}=iT,c_e={durable:Po.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Po.WORK_QUEUE_CONSUMER_NAMES.deliver_group},z9,J9,X9,LP,MP;qP.exports={initialize:PP,workQueueListener:HP,setSubscription:Z9,setIgnoreOrigin:e7,getDatabaseSubscriptions:j9};async function PP(){MP=!0,Wc.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await iT.getNATSReferences();z9=e,J9=e.info.server_name,X9=t,LP=r}a(PP,"initialize");var wd=new Map;function Z9(e,t,r){let s=wd.get(e);s||wd.set(e,s=new Map),s.set(t,r),MP||PP().then(HP)}a(Z9,"setSubscription");function j9(){return wd}a(j9,"getDatabaseSubscriptions");var vP;function e7(e){vP=e}a(e7,"setIgnoreOrigin");var BP=100,CP=new Array(BP),Id=0;async function HP(){let t=await(await LP.consumers.get(Po.WORK_QUEUE_CONSUMER_NAMES.stream_name,Po.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await CP[Id],CP[Id]=t7(r).catch(s=>{Wc.error(s)}),++Id>=BP&&(Id=0)}a(HP,"workQueueListener");k9||V9.on("message",async e=>{let{type:t}=e;t===DP.ITC_EVENT_TYPES.SHUTDOWN&&iT.closeConnection()});async function t7(e){let t=x9(e.data);K9(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Po.MSG_HEADERS.ORIGIN)===wP.get($9.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!vP;if(W9(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}try{let{operation:i,schema:o,next:c,table:u,records:l,hash_values:_,__origin:d}=t;Wc.trace("processing message:",i,o,u,(l?"records: "+l.map(g=>g.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),Wc.trace(`messageProcessor nats msg id: ${e.headers.get(Po.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:p}=d||{},T=wd.get(o)?.get(u);if(!T)throw new Error("Missing table for replication message",u);if(i==="define_schema")t.type=i,T.send(t);else if(l.length===1&&!c)T.send({type:UP(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:p});else{let g=l.map((O,k)=>({type:UP(i),value:O,id:_?.[k],table:u}));for(;c;)g.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;T.send({type:"transaction",writes:g,table:u,timestamp:f,onCommit:E,user:h,nodeName:p})}wP.get(DP.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Q9(e.subject.split(".").slice(0,-1).join("."),Y9.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){Wc.error(i)}e.ack()}a(t7,"messageProcessor");function UP(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(UP,"convertOperation")});var _T={};je(_T,{disableNATS:()=>s7,setNATSReplicator:()=>oT,start:()=>r7});function r7(){Ud.default.get(Dd.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&i7()}function s7(e=!0){$P=e}function i7(){if($P)return;let e=xr(),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];oT(n,r,i)}}dT((r,s)=>{oT(r.tableName,r.databaseName,r),s&&KP(r)}),!GP&&(GP=!0)}function oT(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.Source?.isNATSReplicator)return;let s;r.sourcedFrom(class extends mt{static{a(this,"NATSReplicator")}put(o){let c;return s?.put&&(!s.put.reliesOnPrototype||s.prototype.put)&&(c=s.put(this[ae],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ae],record:o},c)}delete(){let o;return s?.delete&&(!s.delete.reliesOnPrototype||s.prototype.delete)&&(o=s.delete(this[ae],this.getContext())),n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ae]},o)}publish(o){let c;return s?.publish&&(!s.publish.reliesOnPrototype||s.prototype.publish)&&(c=s.publish(this[ae],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ae],record:o},c)}invalidate(o){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ae]})}static defineSchema(o){KP(o)}static mergeSource(o,c){return s=o,s?.get&&(!s.get.reliesOnPrototype||s.prototype.get)&&(c?.replicationSource?this.get=async(u,l)=>{let _=await s.get(u,l);return _&&n(l).addWrite(t,{operation:"put",table:e,id:u,record:_}),_}:this.get=(u,l)=>s.get(u,l)),this}static subscribe(){let o=new Zr;return(0,xP.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<n7}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0});function n(i){let o=i?.transaction?.nats;return o||(i?.transaction?(i.transaction.push(o=i.transaction.nats=new Cd(i.transaction,i)),o.user=i.user):o=YP),o}a(n,"getNATSTransaction")}function KP(e){let t=Ud.default.get(Dd.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,cT.publishToStream)(`${uT.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,lT.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 cT,uT,lT,xP,kP,Ud,Dd,VP,$P,n7,YP,GP,Cd,aT,WP=Se(()=>{de();jr();cT=C(nt()),uT=C(Be()),lT=C(Gs());oa();xP=C(FP()),kP=C(Ht()),Ud=C(Q()),Dd=C(A()),VP=C(x());a(r7,"start");a(s7,"disableNATS");n7=2;a(i7,"assignReplicationSource");a(oT,"setNATSReplicator");a(KP,"publishSchema");Cd=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r,s){let n=this.writes_by_db.get(t);if(n||this.writes_by_db.set(t,n=[]),s?.then)return s.then(()=>n.push(r));n.push(r)}commit(t){let r=Ud.default.get(Dd.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,l;for(let _ of i){let d=_.table,E=_.operation=="put"?"upsert":_.operation;u||(VP.trace(`Sending transaction event ${E}`),l=u={operation:E,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,E!=="delete"&&(u.records=o)),u.table===d&&u.operation===E?(o.push(_.record),c.push(_.id)):l=l.next={operation:E,table:d,id:_.id,record:_.record}}s.push((0,cT.publishToStream)(`${uT.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,lT.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},aT=class extends Cd{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,kP.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};YP=new aT});async function zP({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await ET.getResource(e,{});n=new hT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await ET.get(e);i&&i.delete()}n=new Md(e,t)}return n}function fT(){return Ld++,Ld>65500&&(Ld=1),Ld}var QP,Qc,ET,Ld,Md,hT,JP=Se(()=>{de();Oc();QP=C(Ht()),Qc=C(x());$n();ET=st({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(zP,"getSession");Ld=1;a(fT,"getNextMessageId");Md=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,l;if(c>-1?(u=n.slice(c),l=n.slice(0,c)):l=n,!l)throw new Error("No topic provided");let _=!1,d;if((l.endsWith("+")||l.endsWith("#"))&&(_=!0,l.endsWith("+")&&(d=!0),l=l.slice(0,l.length-1)),l.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(l.indexOf("#")>-1||l.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let E=this.subscriptions.find(O=>O.topic===n);E&&(E.end(),this.subscriptions.splice(this.subscriptions.indexOf(E),1));let f={search:u,user:this.user,startTime:o,omitCurrent:i,isCollection:_,shallowWildcard:d,url:""},h=wn.getMatch(l);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);f.url=h.relativeURL;let p=h.path,T=h.Resource,g=await Ye(f,async()=>{let O=await T.subscribe(f);if(!O)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!O[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let k of O)try{let $;if(k.type&&k.type!=="put"&&k.type!=="delete"&&k.type!=="message"||s&&!s(k))continue;r?(k.topic=n,$=this.needsAcknowledge(k)):$=fT();let U=k.id;Array.isArray(U)&&(U=mo(U)),U==null&&(U=""),this.listener(p+"/"+U,k.value,$,t)}catch($){(0,Qc.warn)($)}})(),O});return g.topic=n,g.qos=t.qos,this.subscriptions.push(g),g}resume(){}needsAcknowledge(t){return fT()}acknowledge(t){}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;let i=wn.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 Ye(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=[]}},hT=class extends Md{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=fT();return this.awaitingAcks.set(r,{topic:t.topic,timestamp:t.timestamp}),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t);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,Qc.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,QP.getNextMonotonicTime)()),(0,Qc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),ET.put(this.sessionRecord)),t.qos}}});var pT={};je(pT,{start:()=>a7});async function a7({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:l,onClose:_}=jP(o,(d,E)=>{if(o.send(d),E&&o._socket.writableNeedDrain)return new Promise(f=>this._socket.once("drain",f))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",l),o.on("close",_),o.on("error",d=>{(0,sn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;o7&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,ev.getSuperUser)());let{onMessage:u,onClose:l}=jP(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,sn.info)("Socket error",_)})},{port:t,securePort:s})}function jP(e,t,r,s,n){ZP||(ZP=!0,nm(_=>{_.push({metric:"mqtt-connections",connections:mT})})),mT++;let i,o={protocolVersion:4},c=(0,Pd.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){mT--,i?.disconnect()}return a(l,"onClose"),c.on("packet",async _=>{s?.then&&(s=await s),i?.then&&await i;try{switch(_.cmd){case"connect":if(o.protocolVersion=_.protocolVersion,_.username)try{s=await tt.auth(_.username,_.password.toString()),(0,ST.get)(nn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&XP.notify({username:s.username,status:nn.AUTH_AUDIT_STATUS.SUCCESS,type:nn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,ST.get)(nn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&XP.error({username:s.username,status:nn.AUTH_AUDIT_STATUS.FAILURE,type:nn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),d({cmd:"connack",reasonCode:134,returnCode:134})}if(!s&&n.requireAuthentication)return d({cmd:"connack",reasonCode:134,returnCode:134});try{n.authorizeClient?.(_,s),i=zP({user:s,..._}),i=await i}catch(O){return(0,sn.error)(O),d({cmd:"connack",reasonCode:O.code||128,returnCode:O.code||128})}d({cmd:"connack",sessionPresent:i.sessionWasPresent,reasonCode:0,returnCode:0}),i.setListener((O,k,$,U)=>{try{let b=O.indexOf("/",1),P=b>0?O.slice(0,b):O;d({cmd:"publish",topic:O,payload:E(k),messageId:$||Math.floor(Math.random()*1e8),qos:U.qos},P)}catch(b){(0,sn.error)(b),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let O of _.subscriptions){let k;try{k=(await i.addSubscription(O,O.qos>=1)).qos||0}catch($){(0,sn.error)($),k=128}f.push(k)}await i.committed,d({cmd:"suback",granted:f,messageId:_.messageId});break;case"unsubscribe":for(let O of _.unsubscriptions)i.removeSubscription(O);d({cmd:"unsuback",messageId:_.messageId});break;case"pubrel":d({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let h=_.qos===2?"pubrec":"puback",p=e.deserialize||(e.deserialize=No(r?.headers["content-type"])),T=_.payload?.length>0?p(_.payload):void 0,g;try{g=await i.publish(_,T)}catch(O){console.warn(O),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:g===!1?144:0},_.topic);break;case"pubrec":d({cmd:"pubrel",messageId:_.messageId,reasonCode:0});break;case"pubcomp":case"puback":i.acknowledge(_.messageId);break;case"pingreq":d({cmd:"pingresp"});break;case"disconnect":i?.disconnect(),e.close?e.close():e.end();break}}catch(f){console.error(f),d({cmd:"disconnect"})}function d(f,h){let p=(0,Pd.generate)(f,o);t(p),oi(p.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?Qs(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Pd,ev,ST,nn,sn,XP,o7,ZP,mT,tv=Se(()=>{Pd=require("mqtt-packet");JP();ev=C(br());To();ji();Xr();ST=C(Q()),nn=C(A()),sn=C(x()),XP=(0,sn.loggerWithTag)("auth-event"),o7=!0;a(a7,"start");mT=0;a(jP,"onSocket")});var _v={};je(_v,{loadComponent:()=>vd,loadComponentDirectories:()=>lv});function lv(e,t){t&&(RT=t),e&&(gT=e);let r=[];if((0,gs.existsSync)(TT)){let n=(0,gs.readdirSync)(TT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Mr.join)(TT,o);r.push(vd(c,RT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(vd(s,RT,s)),Promise.all(r).then(()=>{uv=!0})}async function vd(e,t,r,s,n){if(!sv.has(e)){sv.set(e,!0),n&&(gT=n);try{let i,o=(0,Mr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,gs.existsSync)(o)?i=(0,nv.parseDocument)((0,gs.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=_7;let c=[];for(let u in i){let l=i[u];if(!l)continue;let _,d=l.package;if(d){let E=e,f;for(;!(0,gs.existsSync)(f=(0,Mr.join)(E,"node_modules",u));)if(E=(0,Mr.dirname)(E),E.length<(0,cv.getHdbBasePath)().length){f=null;break}if(f)_=await vd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=l7[u];if(_)try{c.push(_);let E=a(T=>(T.origin=r,st(T)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,p=!f?.https&&f?.port;if(zc.isMainThread&&(_=await _.startOnMainThread?.({server:tt,ensureTable:E,port:p,securePort:h,resources:t,...l})||_,s&&f))for(let T of[p,h])try{if(+T&&!rv.includes(T)){rv.push(T);let g=AT.get(OT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);gP(T,g)}}catch(g){console.error("Error listening on socket",T,g,u)}if(t.isWorker&&(_=await _.start?.({server:tt,ensureTable:E,port:p,securePort:h,resources:t,...l})||_),gT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,av.handleHDBError)("Can not reference parent directories");let T=(0,Mr.join)(e,l.files);for(let g of await(0,iv.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:k}=g,$=(0,Mr.relative)(e,O),U=(0,Mr.basename)(e),b=l.path||"/";b=b.startsWith("/")?b:b.startsWith("./")?"/"+U+b.slice(2):b==="."?"/"+U:"/"+U+"/"+b,b+=(b.endsWith("/")?"":"/")+$;try{if(k.isFile()){let P=await u7(O);zc.isMainThread&&await _.setupFile?.(P,b,O,t),t.isWorker&&await _.handleFile?.(P,b,O,t)}else zc.isMainThread&&await _.setupDirectory?.(b,O,t),t.isWorker&&await _.handleDirectory?.(b,O,t)}catch(P){console.error(`Could not load ${k.isFile()?"file":"directory"} ${O} using ${l.module} for application ${e}`,P),t.set(l.path||"/",new Jc(P))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new Jc(E),null,!0)}}if(zc.isMainThread&&!uv&&(0,ov.watchDir)(e,async()=>lv()),i.extensionModule)return await Fu((0,Mr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new Jc(i))}}}var gs,Mr,zc,nv,AT,OT,iv,ov,av,cv,c7,u7,TT,gT,uv,RT,l7,_7,rv,sv,Jc,dv=Se(()=>{gs=require("fs"),Mr=require("path"),zc=require("worker_threads"),nv=require("yaml"),AT=C(Q()),OT=C(A());Fg();Vg();$g();IL();dP();mP();iv=C(require("fast-glob")),ov=C(dt());kE();Xr();av=C(W());jr();de();AP();cv=C(Q()),c7=C(IP());P_();WP();tv();({readFile:u7}=gs.promises),TT=AT.get(OT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),gT=new Map;a(lv,"loadComponentDirectories");l7={REST:Rp,graphqlSchema:xE,jsResource:$E,fastifyRoutes:jp,login:KE,static:eT,operationsApi:c7,customFunctions:{},clustering:_T,authentication:Nc,mqtt:pT},_7={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},rv=[],sv=new Map;a(vd,"loadComponent");Jc=class extends mt{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 pv=m((H_e,Sv)=>{"use strict";var qd=require("fs-extra"),NT=require("path"),Bd=x(),Ev=V(),Hd=A(),mv=Q(),d7=Tr();Sv.exports=E7;async function E7(){let e=f7(),t=mv.get(Hd.CONFIG_PARAMS.ROOTPATH),r=NT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Hd.PACKAGE_ROOT}},n=NT.join(t,"node_modules");await qd.ensureDir(n);let i,o=!0,c=!1;try{i=await qd.readJson(r)}catch(u){if(Ev.isEmptyOrZeroLength(e))return;if(u.code!==Hd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!Ev.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await fv(l);s.dependencies[u]=_+l}if(!o){Bd.notify("Installing components"),await hv(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await fv(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Bd.notify("Removing component",u),c=!0);c&&(Bd.notify("Updating components."),await hv(r,s))}a(E7,"installComponents");function f7(){let e=d7.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(f7,"getComponentsConfig");async function fv(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":NT.extname(e)||await qd.pathExists(e)?"file:":"github:"}a(fv,"getPkgPrefix");async function hv(e,t){Bd.trace("npm installing components package.json",t),await qd.writeFile(e,JSON.stringify(t,null," ")),await k_().installAllRootModules(mv.get(Hd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(hv,"installPackages")});var gv=m((F_e,Rv)=>{var{isMainThread:Tv}=require("worker_threads"),{getTables:h7}=(de(),re(Ne)),{loadComponentDirectories:m7,loadComponent:S7}=(dv(),re(_v)),{resetResources:p7}=(Oc(),re(sD)),T7=pv(),R7=Tr(),{dirname:g7}=require("path"),{getConnection:A7}=nt(),O7=Q(),N7=A(),bT=new Map;async function b7(e=!1){!Tv&&O7.get(N7.CONFIG_PARAMS.CLUSTERING_ENABLED)&&A7(),Tv&&await T7();let t=p7();h7(),t.isWorker=e,await S7(g7(R7.getConfigFilePath()),t,"hdb",!0,bT),await m7(bT,t);let r=[];for(let[s]of bT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(b7,"loadRootComponents");Rv.exports.loadRootComponents=b7});var dt=m((k_e,Pn)=>{"use strict";var{Worker:y7,MessageChannel:I7,parentPort:As,isMainThread:UT,threadId:w7,workerData:Xc}=require("worker_threads"),{PACKAGE_ROOT:C7}=A(),{join:Nv,isAbsolute:U7,extname:Gd}=require("path"),{server:D7}=(Xr(),re(gu)),{watch:L7,readdir:M7}=require("fs/promises"),{totalmem:Av}=require("os"),DT=A(),vo=x(),x_e=A(),{randomBytes:P7}=require("crypto"),v7=1024*1024,Mn=[],Ln=[],B7=50,bv=1e4,H7="restart",yv="request_thread_info",Iv="resource_report",wv="thread_info",Cv="added-port",q7="ack",yT;Pn.exports={startWorker:IT,restartWorkers:LT,shutdownWorkers:k7,workers:Mn,setMonitorListener:J7,onMessageFromWorkers:V7,onMessageByType:$7,broadcast:Y7,broadcastWithAcknowledgement:W7,setChildListenerByType:x7,getWorkerIndex:Dv,getTicketKeys:Lv,setMainIsWorker:F7,restartNumber:Xc?.restartNumber||1};var Uv;function Dv(){return Xc?Xc.workerIndex:Uv?0:void 0}a(Dv,"getWorkerIndex");function F7(e){Uv=e}a(F7,"setMainIsWorker");var Fd;function Lv(){return Fd||(Fd=UT?P7(48):Xc.ticketKeys,Fd)}a(Lv,"getTicketKeys");Object.defineProperty(D7,"workerIndex",{get(){return Dv()}});var Mv={[yv](e,t){Q7(t)},[Iv](e,t){z7(t,e)}};function IT(e,t={}){let r=process.constrainedMemory?.()||Av();r=Math.min(r,Av());let s=Math.max(Math.floor(r/v7/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Ln){let{port1:u,port2:l}=new I7;c.postMessage({type:Cv,port:u},[u]),i.push(l)}Gd(e)||(e+=".js");let o=new y7(U7(e)?e:Nv(C7,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:i,workerIndex:t.workerIndex,name:t.name,restartNumber:Pn.exports.restartNumber,ticketKeys:Lv()},transferList:i},t));return kd(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{IT(e,t)},o.on("error",c=>{console.error("Worker error:",c),vo.error("Worker error:",c)}),o.on("exit",c=>{Mn.splice(Mn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<B7?(t.unexpectedRestarts=o.unexpectedRestarts+1,IT(e,t)):vo.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{Mv[c.type]?.(c,o)}),Mn.push(o),Z7(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(IT,"startWorker");var G7=[DT.THREAD_TYPES.HTTP];async function LT(e=null,t=2,r=!0){if(UT){if(r){let{loadRootComponents:n}=gv();await n()}Pn.exports.restartNumber++,t<1&&(t=t*Mn.length);let s=[];for(let n of Mn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:Pn.exports.restartNumber,type:DT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=G7.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),bv*2).unref();n.on("exit",()=>{clearTimeout(u),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else As.postMessage({type:H7,workerType:e})}a(LT,"restartWorkers");function x7(e,t){Mv[e]=t}a(x7,"setChildListenerByType");function k7(e){return LT(e,1/0,!1)}a(k7,"shutdownWorkers");var Pv=[];function V7(e){Pv.push(e)}a(V7,"onMessageFromWorkers");var wT=new Map;function $7(e,t){let r=wT.get(e);r||wT.set(e,r=[]),r.push(t)}a($7,"onMessageByType");function Y7(e){for(let t of Ln)try{t.postMessage(e)}catch(r){vo.error("Unable to send message to worker",r)}}a(Y7,"broadcast");var xd=new Map,K7=1;function W7(e){return new Promise(t=>{let r=0;for(let s of Ln)try{let n=K7++,i=a(()=>{xd.delete(n),--r===0&&t(),s!==As&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,xd.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of xd)o.port===s&&o()})),s.postMessage(e),r++}catch(n){vo.error("Unable to send message to worker",n)}r===0&&t()})}a(W7,"broadcastWithAcknowledgement");function Q7(e){e.postMessage({type:wv,workers:vv()})}a(Q7,"sendThreadInfo");function vv(){let e=Date.now();return Mn.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(vv,"getChildWorkerInfo");function z7(e,t){e.resources=t,e.resources.updated=Date.now()}a(z7,"recordResourceReport");var CT;function J7(e){CT=e}a(J7,"setMonitorListener");var X7=1e3,Ov=!1;function Z7(){Ov||(Ov=!0,setInterval(()=>{for(let e of Mn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}CT&&CT()},X7).unref())}a(Z7,"startMonitoring");var j7=1e3;if(As){kd(As);for(let e of Xc.addPorts)kd(e);setInterval(()=>{let e=process.memoryUsage();As.postMessage({type:Iv,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},j7).unref(),yT=a(()=>new Promise((e,t)=>{As.on("message",r),As.postMessage({type:yv});function r(s){s.type===wv&&(As.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else yT=vv;Pn.exports.getThreadInfo=yT;function kd(e,t){Ln.push(e),e.on("message",r=>{if(r.type===Cv)kd(r.port);else if(r.type===q7){let s=xd.get(r.id);s&&s()}else{for(let n of Pv)n(r,e);let s=wT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){vo.error(i)}}}).on("close",()=>{Ln.splice(Ln.indexOf(e),1)}).on("exit",()=>{Ln.splice(Ln.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(kd,"addPort");if(UT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await M7(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(Nv(s,i.name));try{for await(let{filename:i}of L7(s,{persistent:!1}))(Gd(i)===".ts"||Gd(i)===".js"||Gd(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await LT(),console.log("Reloaded HarperDB components")},100))}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");Pn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else As.on("message",async e=>{let{type:t}=e;t===DT.ITC_EVENT_TYPES.SHUTDOWN&&(Pn.exports.restartNumber=e.restartNumber,As.unref(),setTimeout(()=>{vo.warn("Thread did not voluntarily terminate",w7),process.exit(0)},bv).unref())})});function HT(e){let t=e.auditStore=e.openDB(Gv.AUDIT_STORE_NAME,tee);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,kv.getWorkerIndex)()===0&&e.on("aftercommit",()=>{PT||(PT=setTimeout(()=>{if(PT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-Bv,0]})){if((n[0]&15)===BT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},Bv/10).unref())}),t}function Yd(e,t,r){let s=Yv[r.type],n=3;if(t?t.length>80?(s|=Vd,n=(0,on.writeKey)(t,Os,e?14:6),MT.setUint16(2,n)):(n=(0,on.writeKey)(t,Os,e?11:3),Os[1]=n):Os[1]=0,e){s|=$v;let i=s&Vd?6:3;MT.setFloat64(i,e),t||(n=i+8)}return Os[0]=s,s&Vd?MT.setUint16(4,0):Os[2]=0,r.value?Buffer.concat([Os.slice(0,n),r.value]):Os.subarray(0,n)}function vn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Vd,i=n?6:3,o;r&$v&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&vT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:Yv[r&7],value:u,lastVersion:o,get user(){return c?(0,on.readKey)(e,i,c):void 0}}}var on,$d,Gv,xv,kv,Vv,Os,MT,eee,tee,Bv,PT,vT,Hv,BT,qv,Fv,Vd,$v,Yv,Zc=Se(()=>{on=require("ordered-binary"),$d=C(Q()),Gv=C(xe()),xv=C(A()),kv=C(dt()),Vv=C(V());(0,$d.initSync)();Os=Buffer.alloc(1024),MT=new DataView(Os.buffer,Os.byteOffset,1024),eee={writeKey(e,t,r){if(Array.isArray(e)){let s=t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength));return s.setFloat64(r,e[0]),s.setUint32(r+8,e[1]),(0,on.writeKey)(e[2],t,r+12)}else return(0,on.writeKey)(e,t,r)},readKey(e,t,r){if(e[t]>40){let s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength));return[s.getFloat64(t),s.getUint32(t+8),(0,on.readKey)(e,t+12,r)]}else return(0,on.readKey)(e,t,r)}},tee={encoding:"binary",keyEncoder:eee},Bv=(0,Vv.convertToMS)((0,$d.get)(xv.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,PT=null;a(HT,"openAuditStore");vT=16,Hv=1,BT=2,qv=3,Fv=4,Vd=128,$v=64,Yv={put:Hv|vT,[Hv]:"put",delete:BT,[BT]:"delete",message:qv|vT,[qv]:"message",invalidate:Fv,[Fv]:"invalidate"};a(Yd,"createAuditEntry");a(vn,"readAuditEntry")});var qT,bi,ree,jc,Kd,Kv=Se(()=>{qT=C(Ht());Zc();bi=Symbol("completion"),ree=100,jc=class{static{a(this,"DatabaseTransaction")}writes=[];hasWrittenTime;username;lmdbDb;auditStore;readTxn;constructor(t,r,s){this.lmdbDb=t,this.username=r?.username,this.auditStore=s}getReadTxn(){return this.readTxn||(this.readTxn=this.lmdbDb.useReadTransaction())}resetReadSnapshot(){this.readTxn&&(this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}validate(){for(let t of this.writes||[])t.validate?.()}commit(t=(0,qT.getNextMonotonicTime)(),r=!0,s=0){this.resetReadSnapshot();let n,i=[],o=0,c;this.hasWrittenTime=!1;let u=a(_=>{let d=_.commit(t,s);if(d&&(d[bi]&&(i||(i=[]),i.push(d[bi])),c=_.store,this.auditStore)){d.user=this.username,d.lastVersion=_.lastVersion,d.newTxnTime&&!this.hasWrittenTime&&(t=d.newTxnTime),this.hasWrittenTime=!0;let E=[t,_.store.tableId,_.key];_.invalidated&&(E.invalidated=!0),this.auditStore.put(E,Yd(_.lastVersion,this.username,d))}},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){let d=_.store.getEntry(_.key),E=s===0&&_.lastVersion!==void 0?_.lastVersion:_.lastVersion=d?.version??null,f=_.store.ifVersion(_.key,E,l);n=n||f}else l();else for(let d of this.writes)u(d)},"nextCondition");return this.writes.length<ree>>s?l():(s=1,n=this.writes[0].store.transaction(()=>{for(let _ of this.writes)u(_);return!0})),n?.then(_=>_?(c&&i.push(c.flushed),Promise.all(i).then(()=>(this.writes=[],{txnTime:t}))):this.commit(t,r,s+1))}abort(){this.resetReadSnapshot(),this.writes=[]}},Kd=class extends jc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,qT.getNextMonotonicTime)())}getReadTxn(){}}});function Jv(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Ho||((0,yi.onMessageByType)(Qv,d=>{let E=d.auditIds;GT(d.path,E,d.txnId)}),(0,yi.onMessageByType)(zv,d=>{(0,Ns.trace)("confirming to proceed with txn",d.txnId)}),Ho=Object.create(null));let c=Ho[i]||(Ho[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=mo(t);let l=new FT(r);l.startTime=s,n&&(l.includeDescendants=n);let _=u.get(t);return _?_.push(l):(u.set(t,_=[l]),_.tables=u,_.key=t),l.subscriptions=_,l}function GT(e,t,r,s){if(!Ho)return;let n=Ho[e];if(n){if(Bo&&Bo+1!==r){(0,Ns.trace)("Waiting to ensure latest txn id",Bo,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Wd)o<r&&((0,Ns.trace)("Txn",r,"waiting for txn",o),await c);if(Bo+1!==r){await(0,yi.broadcastWithAcknowledgement)({type:zv,txnId:r});for(let[o,c]of Wd)o<r&&((0,Ns.trace)("Txn",r,"waiting for txn",o),await c)}Wd.delete(r),(0,Ns.trace)("Proceeding with txn id",r),Bo=r-1,GT(e,t,r,s)})();return Wd.set(r,i),i}(0,Ns.trace)("Notifying with txn id",r,s),Bo=r;try{n.auditStore.resetReadTxn()}catch(i){throw i.message+=" in "+e,i}e:for(let i of t){let[o,c,u]=i,l=n[c];if(!l)continue;(0,Wv.writeKey)(i,nee,0);let _=i[3];_&&(i.length=3);let d,E=mo(u),f;do{let h=l.get(E);if(h){for(let T of h)if(!(f&&!T.includeDescendants)){if(T.startTime>=o){(0,Ns.info)("omitting",u,T.startTime,o);continue}try{if(T.crossThreads===!1&&!s)continue;if(d===void 0){let g=n.auditStore.get(i);if(!g||(d=vn(g,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}T.listener(u,d,o)}catch(g){console.error(g),(0,Ns.info)(g)}}}if(E==null)break;let p=E.lastIndexOf?.("/",E.length-2);p>-1?E=E.slice(0,p+1):E=null,f=!0}while(!0)}}}function Xv(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",({next:i,last:o,txnId:c})=>{let u,l=[];if(t)do{if(i.flag&see)continue;let _;i.meta&&i.meta.store===t&&(_=i.meta.key)&&(typeof _[2]=="symbol"&&(_[2]=null),_.invalidated&&(_[3]=!0),l.push(_))}while(i!=o&&(i=i.next));l.length!==0&&((0,yi.broadcast)({type:Qv,path:n,auditIds:l,txnId:c,start:u}),GT(n,l,c,!0))})}}var Ns,yi,Wv,Qv,zv,see,Ho,nee,FT,Bo,Wd,Zv=Se(()=>{Ns=C(x()),yi=C(dt()),Wv=require("ordered-binary");oa();Oc();Zc();Qv="transaction",zv="transaction-await",see=67108864,nee=Buffer.alloc(4096);a(Jv,"addSubscription");FT=class extends Zr{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"}}},Wd=new Map;a(GT,"notifyFromTransactionData");a(Xv,"listenToCommits")});var Bp={};je(Bp,{coerceType:()=>Qd,makeTable:()=>Jd,setServerUtilities:()=>uee});function Jd(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:l,dbisDB:_}=e,{expirationMS:d,audit:E,trackDeletes:f}=e,{attributes:h}=e;h||(h=[]),Xv(i,u);let p=0,T,g,O,k={},$,U,b,P;for(let Z of h)(Z.assignCreatedTime||Z.name==="__createdtime__")&&($=Z),(Z.assignUpdatedTime||Z.name==="__updatedtime__")&&(U=Z),Z.expiresAt&&(b=Z),Z.isPrimaryKey&&(k=Z);let z;E&&ZT();class q extends mt{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=h;static expirationTimer;static createdTimeProperty=$;static updatedTimeProperty=U;static dbisDB=_;static schemaDefined=l;static sourcedFrom(S,N){if(N&&(this.sourceOptions=N,N.expiration&&this.setTTLExpiration(N.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(S,this.sourceOptions);else if(S.mergeSource)this.Source=S.mergeSource(this.Source,this.sourceOptions);else throw new Error("Can not assign multiple sources to a table with no source providing a (static) mergeSource method");else this.Source=S;return g=S&&S.get&&(!S.get.reliesOnPrototype||S.prototype.get),(async()=>{let D=!1,y=a(async w=>{let v=w.value,F=w.table?ve[c][w.table]:q;if(c===zr.SYSTEM_SCHEMA_NAME&&(w.table===zr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||w.table===zr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),w.id===void 0&&(w.id=v[F.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));let L=await F.getResource(w.id,w,eu);switch(w.type){case"put":return L._writeUpdate(v,eu);case"delete":return L._writeDelete(eu);case"publish":return L._writePublish(v,eu);case"invalidate":return L.invalidate(eu);default:Ci.error("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=S.subscribe&&(!S.subscribe.reliesOnPrototype||S.prototype.subscribe);w&&f==null&&(f=!0);let v=S.subscribeOnThisThread?S.subscribeOnThisThread((0,wi.getWorkerIndex)()):(0,wi.getWorkerIndex)()===0,F=w&&v&&await S.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(F)for await(let L of F)try{if(!(L.type==="transaction"?L.writes[0]:L)){console.error("Bad subscription event");continue}let X=Ye(L,()=>{if(L.type==="transaction"){let J=[];for(let Y of L.writes){Y[Ae]=L;try{J.push(y(Y))}catch(j){throw j.message+=" writing "+JSON.stringify(Y)+" of event "+JSON.stringify(L),j}}return Promise.all(J)}else if(L.type==="define_schema"){let J=this.attributes.slice(0),Y;for(let j of L.attributes)J.find(De=>De.name===j.name)||(J.push(j),Y=!0);Y&&(st({table:n,database:c,attributes:J,origin:"cluster"}),su.signalSchemaChange(new nu.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(L)});L.onCommit&&(X?.then&&D&&su.signalUserChange(new nu.UserEventMsg(process.pid)),X?.then?X.then(L.onCommit):L.onCommit())}catch(G){console.error("error in subscription handler",G)}}catch(w){console.error(w)}})(),this}static getResource(S,N,D){let y=super.getResource(S,N,D);if(S!=null)try{if(y.hasOwnProperty(ce))return y;let w=y._txnForRequest();if(typeof S=="object"&&S&&!Array.isArray(S))throw new Error(`Invalid id ${JSON.stringify(S)}`);let v,F,G={transaction:w?.getReadTxn()},X;return cu(S,N,G,y,D?.allowInvalidated,(J,Y)=>{Y?F(Y):(y[ce]=J?.value,y[Zt]=J?.version,X=!0,v?.(y))}),X?y:new Promise((J,Y)=>{v=J,F=Y})}catch(w){throw w.message.includes("Unable to serialize object")&&(w.message+=": "+JSON.stringify(S)),w}return y}static setTTLExpiration(S){(0,wi.getWorkerIndex)()===0&&(d=S*1e3,this.expirationTimer&&clearInterval(this.expirationTimer),this.expirationTimer=setInterval(()=>{if(this.primaryStore.rootStore.status!=="open")return clearInterval(this.expirationTimer);for(let{key:N,value:D,version:y}of this.primaryStore.getRange({start:!1,versions:!0}))y<Date.now()-d&&y>0&&D?.__invalidated__==null&&q.evict(N,D,y)},d).unref())}static enableAuditing(){E=!0,ZT(),q.audit=!0}static coerceId(S){return S===""?null:Qd(S,k)}static async dropTable(){if(delete ve[c][n],c===o){for(let S in r)_.remove(q.tableName+"/"+S),r[S].drop();_.remove(q.tableName+"/"),i.drop(),await _.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));su.signalSchemaChange(new nu.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.DROP_TABLE,c,n))}static Source;static get(S,N){return S&&typeof S=="object"&&!Array.isArray(S)&&S.url===""?{recordCount:this.getRecordCount(),records:"./",name:n,database:c,attributes:h}:super.get(S,N)}get(S){if(typeof S=="string")return this.getProperty(S);if(this[Bs])return this.search(S);if(S?.property)return this.getProperty(S.property);if(this.doesExist()||this[Ae]?.hasOwnProperty("returnNonexistent")&&this[Ae].returnNonexistent)return this}static allowRead(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.read){let y=D[n].attribute_permissions;if(y){N||(N={});let w=N.select;if(w){let v=xT(y,"read");N.select=w.filter(F=>v[F])}else N.select=y.filter(v=>v.read).map(v=>v.attribute_name);return N}else return!0}}allowUpdate(S,N,D){if(!S)return!1;let y=S.role.permission;if(y.super_user)return!0;if(y[n]?.update){let w=y[n].attribute_permissions;if(w){let v=xT(w,"update");for(let F in N)if(!v[F])return!1;if(D)for(let F of w){let L=F.attribute_name;!F.update&&!(L in N)&&(N[L]=this.getProperty(L))}}else return!0}}allowCreate(S,N){return this.allowUpdate(S,{})}static allowCreate(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.insert){let y=D[n].attribute_permissions;if(y){let w=xT(y,"insert");for(let v in N)if(!w[v])return!1}else return!0}}static allowDelete(S){if(!S)return!1;let N=S.role.permission;if(N.super_user||N[n]?.delete)return!0}update(S,N){if(!this._txnForRequest())throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;let y;if(typeof S=="object"&&S){if(N)for(let w in this[ce])S[w]===void 0&&(S[w]=void 0);y=this[ht],y&&(S=Object.assign(y,S)),this[ht]=y=S}return!this[ce]&&t&&!(y||(y=this[ht]))?.[t]&&(y||(y=this[ht]=Object.create(null)),y[t]=this[ae]),this._writeUpdate(this),this}invalidate(S){this._txnForRequest().addWrite({key:this[ae],store:i,invalidated:!0,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,commit:(D,y)=>{if(y)return;let w={__invalidated__:D};for(let G in r)w[G]=this.getProperty(G);let v=q.Source,F,L=this[ae];return S?.isNotification||v?.shouldReceiveInvalidations&&(F=v.invalidate(L,this)),i.put(this[ae],w,D),{type:E&&"invalidate",[bi]:F}}})}static evict(S,N,D){let y=this.Source;if(y?.get&&(!y.get.reliesOnPrototype||y.prototype.get)){let w;if(!N){let v=i.getEntry(S);if(!v)return;N=v.value,D=v.version}if(N)for(let v in r)w||(w={__invalidated__:0}),w[v]=N[v];return w?i.put(S,w,D,D):i.remove(S,D)}else return i.remove(S,D)}lock(){throw new Error("Not yet implemented")}static operation(S,N){return S.table||=n,S.schema||=c,aB.operation(S,N)}async put(S){this.update(S,!0)}_writeUpdate(S,N){let D=this._txnForRequest();if(this[ae]===void 0)throw new Error("Can not save record without an id");let y=this[ce],w,v,F=this[ae];y||(this[ce]={}),D.addWrite({key:F,store:i,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(L,G)=>{let X;if(G){if(w)return;let Y=i.getEntry(F);y=Y?.value;let j=this[Ae];j&&Y?.version>(j.lastModified||0)&&(j.lastModified=Y.version)}if(!v){if(v=!0,N?.isNotification)S=ca(S);else{if(S[tB]&&(w=!Du(S),w))return;t&&S[t]!==F&&(S[t]=F),U&&(S[U.name]=U.type==="Date"?new Date(L):U.type==="String"?new Date(L).toISOString():L),$&&(y?S[$.name]=y[$.name]:S[$.name]=$.type==="Date"?new Date(L):$.type==="String"?new Date(L).toISOString():L),S=ca(S);let Y=q.Source;Y?.put&&(!Y.put.reliesOnPrototype||Y.prototype.put)&&(X=Y.put(F,S,this))}if(S[ce])throw new Error("Can not assign a record with a record property");this[ce]=S}if(Ci.trace("Checking timestamp for put",F,this[Zt]>L,this[Zt],L),this[Zt]>L)return E&&{type:"put",value:i.encoder.encode(S)};let J=i.encoder.encode(S);return i.put(this[ae],(0,qo.asBinary)(J),L),Ze(this[ae],y,S),y===null&&!G&&qn(-1),{type:E&&"put",value:J,[bi]:X}}})}async delete(S){return typeof S=="string"?this.deleteProperty(S):this[ce]?this._writeDelete(S):!1}_writeDelete(S){let N=this._txnForRequest(),D,y=this[ae],w;return N.addWrite({key:y,store:i,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,commit:(v,F)=>{let L=this[ce];if(F){let G=i.getEntry(y);L=G?.value;let X=this[Ae];X&&G?.version>(X.lastModified||0)&&(X.lastModified=G.version)}if(!D&&(D=!0,!S?.isNotification)){let G=q.Source;G?.delete&&(!G.delete.reliesOnPrototype||G.prototype.delete)&&(w=G.delete(y,this))}if(!(this[Zt]>v))return Ze(this[ae],L),Ci.trace("Write delete entry",E||f,v),E||f?(i.put(this[ae],null,v),E||XT(),F||qn(1)):i.remove(this[ae]),{type:E&&"delete",[bi]:w}}}),!0}search(S){let N=this._txnForRequest();if(!S)throw new Error("No query provided");let D=S.reverse===!0,y=S.conditions;y?y.length===void 0&&(y=Array.from(y)):y=Array.isArray(S)?S:S[Symbol.iterator]?Array.from(S):[],this[ae]&&(y=[{attribute:null,comparator:"prefix",value:this[ae]}].concat(y));for(let Y of y){let j=Y[0]??Y.attribute,De=j==null?k:h.find(an=>an.name==j);if(De)De.type&&(Y[1]===void 0?Y.value=w(Y.value,De):Y[1]=w(Y[1],De));else if(j!=null)throw(0,Ii.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function w(Y,j){return Array.isArray(Y)?Y.map(De=>Qd(De,j)):Qd(Y,j)}a(w,"coerceTypedValues"),y.length>1&&(y=(0,iB.sortBy)(y,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===tu.SEARCH_TYPES.EQUALS){let De=Y[0]??Y.attribute;if(De==null||De===t)Y.estimated_count=1;else{let an=r[De];Y.estimated_count=an?an.getValuesCount(Y[1]??Y.value):1/0}}else j===tu.SEARCH_TYPES.CONTAINS||j===tu.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===tu.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=oee:Y.estimated_count=iee}return Y.estimated_count}));let v=N.getReadTxn();v.use();let F=S.select,L=y[0],G;if(!L)G=i.getRange(D?{end:!1,reverse:!0,transaction:v,lazy:F?.length<4}:{start:!1,transaction:v,lazy:F?.length<4}).map(({value:Y})=>Y?new Promise(j=>setImmediate(()=>j(Y))):qo.SKIP);else{let Y=PE(L,v,D,q,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=y.slice(1).map(vE);G=J(Y,j)}else{for(let De=1;De<y.length;De++){let an=y[De],iE=PE(an,v,D,q,S.allowFullScan);Y=Y.concat(iE)}let j=new Set;Y=Y.filter(De=>j.has(De)?!1:(j.add(De),!0)),G=J(Y)}}(S.offset||S.limit!==void 0)&&(G=G.slice(S.offset,S.limit!==void 0?(S.offset||0)+S.limit:void 0)),G.onDone=()=>{v.done()};let X=this[Ae];function J(Y,j){let De=j?.length,an={transaction:v,lazy:De>0||F?.length<4,alwaysPrefetch:!0};return Y.map(iE=>new Promise(oE=>cu(iE,X,an,null,!1,UB=>{let aE=UB?.value;if(!aE)return oE(qo.SKIP);for(let cE=0;cE<De;cE++)if(!j[cE](aE))return oE(qo.SKIP);oE(aE)})))}return a(J,"idsToRecords"),G}async subscribe(S){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||st({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=Jv(q,this[ae]??null,function(v,F,L){try{this.send({id:v,timestamp:L,...F})}catch(G){console.error(G)}},S.startTime,this[Bs]),D=this[ae],y=S.previousCount;y>1e3&&(y=1e3);let w=S.startTime;if(this[Bs]){if(w){if(y)throw new Ii.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:v,value:F}of u.getRange({start:[w,Number.MAX_SAFE_INTEGER]})){let[L,G,X]=v;if(v.length>3&&(X=v.slice(2)),G!==s)continue;let J=vn(F,i);(D==null||nB(D,X))&&N.send({id:X,timestamp:L,...J}),N.startTime=L}}else if(y){let v=[];for(let{key:F,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[G,X,J]=F;if(F.length>3&&(J=F.slice(2)),X!==s)continue;if(D==null||nB(D,J)){let Y=vn(L,i);if(v.push({id:J,timestamp:G,...Y}),--y<=0)break}}catch(G){Ci.error("Error getting history entry",F,G)}for(let F=v.length;F>0;)N.send(v[--F]);v[0]&&(N.startTime=v[0].timestamp)}else if(!S.omitCurrent)for(let{key:v,value:F,version:L}of i.getRange({start:D??!1,end:D==null?void 0:[D,oB.MAXIMUM_KEY],versions:!0}))F&&N.send({id:v,timestamp:L,value:F})}else{y&&!w&&(w=0);let v=this[Zt];if(w<v){let F=[],L=v;do{let G=[L,s,D],X=u.get(G);if(X){S.omitCurrent=!0;let J=vn(X,i);F.push({id:D,timestamp:L,...J}),L=J.lastVersion}else break;y&&y--}while(L>w&&y!==0);for(let G=F.length;G>0;)N.send(F[--G]);N.startTime=v}!S.omitCurrent&&this.doesExist()&&N.send({id:D,timestamp:this[Zt],value:this})}return S.listener&&N.on("data",S.listener),N}doesExist(){return!!this[ce]}async publish(S,N){this._writePublish(S,N)}_writePublish(S,N){let D=this._txnForRequest(),y=this[ae]||null,w,v;D.addWrite({store:i,key:y,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(F,L)=>{if(this.validate(S),!v&&(v=!0,!N?.isNotification)){let J=q.Source;J?.publish&&(!J.publish.reliesOnPrototype||J.prototype.publish)&&(w=J.publish(y,S,this))}let G=L>0?i.get(y):this[ce];G===void 0&&!L&&(E||f)&&(E||XT(),qn(1));let X={type:"message",value:i.encoder.encode(S),[bi]:w};return!D.hasWrittenTime&&this[Zt]>F&&(F=X.newTxnTime=this[Zt]+.001),i.put(y,G??null,F),X}})}_txnForRequest(){let S=this[Ae],N=S?.transaction;if(N){let D;return(D=N?.find(y=>y.lmdbDb?.path===i.path))||N.push(D=new jc(i,S.user,u)),D}else return new Kd(i,S.user,u)}validate(S){let N;for(let D=0,y=h.length;D<y;D++){let w=h[D];if(w.type){let v=S[w.name];if(v!=null)switch(w.type){case"Int":case"Float":(typeof v!="number"||w.type==="Int"&&v!==Math.floor(v))&&(N||(N=[])).push(`Property ${w.name} must be an ${w.type==="Int"?"integer":"number"}`);break;case"ID":typeof v=="string"||v?.length>0&&v.every?.(F=>typeof F=="string")||(N||(N=[])).push(`Property ${w.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof v!="string"&&(N||(N=[])).push(`Property ${w.name} must be a string`)}}w.required&&S[w.name]==null&&(N||(N=[])).push(`Property ${w.name} is required`)}if(N)throw new Ii.ClientError(N.join(". "))}getUpdatedTime(){return this[Zt]}wasLoadedFromSource(){return g?!!this[rB]:void 0}static async addAttributes(S){let N=h.slice(0);for(let D of S){if(!D.name)throw new Ii.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Ii.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return st({table:n,database:c,schemaDefined:l,attributes:N}),q.indexingOperation}static async removeAttributes(S){let N=h.filter(D=>!S.includes(D.name));return st({table:n,database:c,schemaDefined:l,attributes:N}),q.indexingOperation}static getRecordCount(){let S=0;for(let{key:N,value:D}of i.getRange({end:!1}))S++,N[0]?.description==="deletions"&&(S+=D||0);return i.getStats().entryCount-S}static updatedAttributes(){Mu(this,this)}static async deleteHistory(S=0){let N;for(let{key:D,value:y}of u.getRange({start:[0,0],end:[S,0]})){await new Promise(L=>setImmediate(L));let[w,v,F]=D;D.length>3&&(F=D.slice(2)),v===s&&(N=i.remove(F))}await N}static async*getHistory(S=0,N=1/0){for(let{key:D,value:y}of u.getRange({start:[S,0],end:[N,0]})){await new Promise(G=>setImmediate(G));let[w,v,F]=D;if(D.length>3&&(F=D.slice(2)),v!==s)continue;let L=vn(y,i);L.id=F,L.timestamp=w,yield L}}static async getHistoryOfRecord(S){let N=[],D=i.getEntry(S);if(!D)return N;let y=D.version,w=0;do{await new Promise(L=>setImmediate(L));let v=[y,s,S],F=u.get(v);if(F){let L=vn(F,i);L.timestamp=y,N.push(L),y=L.lastVersion}else break}while(w<1e3);return N.reverse()}static cleanup(){z?.remove()}}q.updatedAttributes();let Oe=q.prototype;return Oe[tB]=!0,d&&q.setTTLExpiration(d/1e3),b&&CB(),q;function Ze(Z,S,N){let D;for(let y in r){let w=r[y],v=w.isIndexing,F=N?.[y],L=S?.[y];if(F===L&&!v)continue;D=!0;let G=(0,ru.getIndexedValues)(L);if(G){jv&&w.prefetch(G.map(X=>({key:X,value:Z})),sB);for(let X=0,J=G.length;X<J;X++)w.remove(G[X],Z)}if(G=(0,ru.getIndexedValues)(F),G){jv&&w.prefetch(G.map(X=>({key:X,value:Z})),sB);for(let X=0,J=G.length;X<J;X++)w.put(G[X],Z)}}return D}a(Ze,"updateIndices");function cu(Z,S,N,D,y,w){let v=a(()=>{let F=N.transaction;if(F?.isDone)throw new Error("Invalid read transaction");let L;F&&!F.hasRunLoadRecord&&(L=!0,F.hasRunLoadRecord=!0);let G;try{G=i.getEntry(Z,N)}catch(j){throw j.message+=". The read txn is "+JSON.stringify(F)+" first loadRecord: "+L,console.error(j),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),j}let X,J,Y;if(G?(S&&G?.version>(S.lastModified||0)&&(S.lastModified=G.version),J=G.version,X=G.value,(J<0||!X||typeof X.__invalidated__=="number"||d&&J<Date.now()-d)&&(Y=!0)):Y=!0,g&&sm(Y,"cache-hit",n),Y&&!y&&(D&&(D[rB]=!0),g))return Vo(Z,X,J,S).then(j=>{if(j?.value?.[ce])throw new Error("Can not assign a record with a record property");S&&j?.version>(S.lastModified||0)&&(S.lastModified=j.version),w(j)},j=>{w(null,j)});if(G?.value?.[ce])throw new Error("Can not assign a record with a record property");w(G)},"whenPrefetched");if(!N.alwaysPrefetch&&(Z==null||i.cache?.get(Z)))return v();i.prefetch([Z],v)}a(cu,"loadRecord");function Di(){P=new Set,(0,wi.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let S of P)S()}a(Z,"onCommit")}a(Di,"setupCommitListeners");async function Vo(Z,S=null,N,D){if(N<0){let L;return P||Di(),await new Promise(G=>{let X,J=a(()=>{if(L=i.getEntry(Z),!L||L.version>0){if(clearTimeout(X),P.delete(J),typeof L?.value?.__invalidated__=="number")return G(Vo(Z,L.value,L.version,D));G(L)}},"listener");P.add(J),X=setTimeout(()=>{P.delete(J),G(Vo(Z,L?.value,void 0,D))},1e4).unref()})}let y=S?.__invalidated__,w=-(N||1);i.put(Z,S,w,N);let v={transaction:D?.transaction,replacingRecord:S,replacingVersion:N},F=D?.responseHeaders;F&&(v.responseHeaders=F);try{let L=performance.now(),G=await q.Source.get(Z,v),X=performance.now()-L;oi(X,"cache-resolution",n),F&&F.append("Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`);let J=v.lastModified||N;(!J||d&&J<Date.now()-d)&&(J=(0,ru.getNextMonotonicTime)());let j=Ze(Z,S,G)&&N||y>0;return G?(t&&(G[t]=Z),typeof G.toJSON=="function"&&(G=G.toJSON()),i.put(Z,G,J,w)):i.remove(Z,w),j&&E&&u.put([J,s,Z],Yd(y,null,G?{type:"put",value:i.encoder.encode(G)}:{type:"delete"})),{version:J,value:G}}catch(L){throw i.put(Z,S,N,w),L}}a(Vo,"getFromSource");function qn(Z){p||(p=i.get([eB,kT.threadId])||0),p+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([eB,kT.threadId],p)},50))}a(qn,"recordDeletion");function XT(){T||(T=setTimeout(()=>{if(T=null,i.rootStore.status==="open"){for(let{key:Z,value:S}of i.getRange({start:!0}))if(S===null){let N=i.getEntry(Z);N?.value===null&&i.remove(Z,N.version),qn(-1)}}},q.getRecordCount()*100+cee).unref())}a(XT,"enqueueDeletionCleanup");function ZT(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),qn(-1)})}a(ZT,"addDeleteRemoval");function CB(){(0,wi.getWorkerIndex)()===0&&setInterval(async()=>{try{let Z=b.name,S=r[Z];if(!S)throw new Error(`expiresAt attribute ${b} must be indexed`);for(let{value:N}of S.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let D=i.getEntry(N);D?.value?.[Z]<Date.now()&&q.evict(N,D.value,D.version),await new Promise(y=>setImmediate(y))}}catch(Z){Ci.error("Error in evicting old records",Z)}},aee).unref()}a(CB,"runRecordExpirationEviction")}function xT(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 sB(){}function uee(e){aB=e}function Qd(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!lee.test(e)&&(e+="Z"),new Date(e)):r?e:(0,zd.autoCast)(e)}function nB(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}var zr,qo,ru,iB,kT,tu,iu,Ii,su,nu,Ci,oB,wi,zd,aB,iee,oee,aee,jv,eB,Zt,tB,_de,rB,eu,cee,lee,dd=Se(()=>{zr=C(A()),qo=require("lmdb"),ru=C(Ht()),iB=require("lodash"),kT=require("worker_threads");jr();Kv();tu=C(xe()),iu=C(Q());Zv();Ii=C(W()),su=C(ks()),nu=C(Fr());de();Hu();Ci=C(x());vu();$n();oB=require("ordered-binary"),wi=C(dt());Zc();zd=C(V());ji();iee=1e8,oee=1e7,aee=6e4;iu.initSync();jv=iu.get(zr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),eB=Symbol.for("deletions"),Zt=Symbol.for("version"),tB=Symbol.for("incremental-update"),_de=Symbol("source-resource"),rB=Symbol("load-from-source"),eu={isNotification:!0,allowInvalidated:!0},cee=(0,zd.convertToMS)(iu.get(zr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Jd,"makeTable");a(xT,"attributesAsObject");a(sB,"noop");a(uee,"setServerUtilities");lee=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Qd,"coerceType");a(nB,"isDescendantId")});var Ne={};je(Ne,{database:()=>qa,databases:()=>ve,dropDatabase:()=>Vh,dropTableMeta:()=>mee,getDatabases:()=>xr,getTables:()=>_ee,onUpdatedTable:()=>dT,readMetaDb:()=>ou,resetDatabases:()=>dee,table:()=>st,tables:()=>nr});function _ee(){return eE||xr(),nr||{}}function xr(){if(eE)return ve;eE=!0,ko=new Map;let e=(0,yt.getHdbBasePath)()&&(0,Me.join)((0,yt.getHdbBasePath)(),jt.DATABASES_DIR_NAME),t=(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,yt.get)(jt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,fr.existsSync)(e)?e:(0,Me.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,fr.existsSync)(e))for(let r of(0,fr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&ou((0,Me.join)(e,r.name),null,s)}if((0,fr.existsSync)((0,xo.getBaseSchemaPath)())){for(let r of(0,fr.readdirSync)((0,xo.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Me.join)((0,xo.getBaseSchemaPath)(),r.name),n=(0,Me.join)((0,xo.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,fr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Me.join)(n,i.name);ou((0,Me.join)(s,i.name),(0,Me.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,fr.existsSync)(n))for(let o of(0,fr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Me.extname)(o.name).toLowerCase()===".mdb"&&ou((0,Me.join)(n,o.name),(0,Me.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Me.join)(c.path,(0,Me.basename)(o+".mdb"));(0,fr.existsSync)(u)&&ou(u,o,r,null,!0)}}for(let r in ve){let s=ko.get(r);if(s){let n=ve[r];r.includes("delete")&&Le.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Le.trace(`delete table class ${i}`),delete n[i])}else if(delete ve[r],r==="data"){for(let n in nr)delete nr[n];delete nr[tE]}}return ko=null,ve}}function dee(){eE=!1;for(let[,e]of Bn)e.needsDeletion=!0;xr();for(let[e,t]of Bn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),Bn.delete(e));return ve}function ou(e,t,r=YT,s,n){let i=new VT.default(e,!1);e.includes("delete")&&Le.trace(`reading meta data from ${e}`);try{let o=Bn.get(e);o?o.needsDeletion=!1:(o=(0,Xd.open)(i),Bn.set(e,o));let c=new Ui.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Fo.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,fr.existsSync)(s)&&(i.path=s,l=(0,Xd.open)(i),l.isLegacy=!0):l=HT(o));let _=_B(r),d=_[tE],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[p,T]=f.toString().split("/");e.includes("delete")&&Le.trace(`read key ${f}`),T===""?T=h.name:T||(T=p,p=t,h.name||(h.name=T,h.indexed=!h.is_hash_attribute)),d?.add(p);let g=E.get(p);g||E.set(p,g={attributes:[]}),(T==null||h.is_hash_attribute)&&(g.primary=h),T!=null&&g.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:p,primary:T}=h;if(!T){for(let q of p)if(q.is_hash_attribute||q.isPrimaryKey){T=q;break}if(!T)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(p)}`)}let g=_[f],O={},k=[],$,U,b=typeof T.audit=="boolean"?T.audit:(0,yt.get)(jt.CONFIG_PARAMS.LOGGING_AUDITLOG),P=T.trackDeletes,z=T.expiration;if(g)O=g.indices,k=g.attributes,g.schemaVersion++;else{$=T.tableId,$?$>=(u.get(Go)||0)&&u.putSync(Go,$+1):(T.tableId=$=u.get(Go),$||($=1),u.putSync(Go,$+1),u.putSync(T.key,T));let q=new Ui.default(!T.is_hash_attribute,T.is_hash_attribute);Le.trace(`openDB ${T.key} from ${r}`),U=o.openDB(T.key,q),U.rootStore=o,U.tableId=$}for(let q of p){q.attribute=q.name;try{if(!q.is_hash_attribute&&(q.indexed||q.attribute&&!q.name)){if(!O[q.name]){let Ze=new Ui.default(!q.is_hash_attribute,q.is_hash_attribute);Le.trace(`openDB ${q.key} from ${r}`),O[q.name]=o.openDB(q.key,Ze)}let Oe=k.find(Ze=>Ze.name===q.name);Oe?k.splice(k.indexOf(Oe),1,q):k.push(q)}}catch(Oe){Le.error("Error trying to update attribute",q,k,O,Oe)}}if(!g){Le.trace(`creating table class ${f}`,Object.keys(_)),g=dB(_,f,Jd({primaryStore:U,auditStore:l,audit:b,expirationMS:z&&z*1e3,trackDeletes:P,tableName:f,tableId:$,primaryKey:T.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:O,attributes:p,schemaDefined:T.schemaDefined,dbisDB:u})),g.schemaVersion=1;for(let q of KT)q(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function _B(e){let t=ve[e];if(t||(e==="data"?t=ve[e]=nr:e==="system"?Object.defineProperty(ve,"system",{value:t=Object.create(null),configurable:!0}):t=ve[e]=Object.create(null)),ko&&!ko.has(e)){let r=new Set;t[tE]=r,ko.set(e,r)}return t}function dB(e,t,r){return e[t]=r,r}function qa({database:e,table:t}){e||(e=YT),xr();let r=_B(e),s=(0,Me.join)((0,yt.getHdbBasePath)(),jt.DATABASES_DIR_NAME),n=t&&(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,yt.get)(jt.CONFIG_PARAMS.STORAGE_PATH)||((0,fr.existsSync)(s)?s:(0,Me.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME));let i=(0,Me.join)(s,(n?t:e)+".mdb"),o=Bn.get(i);if(!o){let c=new VT.default(i,!1);o=(0,Xd.open)(c),Bn.set(i,o)}return o}async function Vh(e){if(!ve[e])throw new Error("Schema does not exist");let t=ve[e];for(let r in t){let n=t[r].primaryStore.rootStore;Bn.delete(n.path),n.status==="open"&&(await n.close(),await cB.remove(n.path))}if(e==="data"){for(let r in nr)delete nr[r];delete nr[tE]}delete ve[e]}function st({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=YT);let u=qa({database:t,table:e}),l=ve[t],_=l?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let d,E,f,h;o==null&&(o=!0);let p=new Ui.default(!1);for(let U of s)U.attribute?(U.name=U.attribute,U.indexed=!0):U.attribute=U.name,U.expiresAt&&(U.indexed=!0);let T,g;if(_){if(Le.trace(`${e} table already exists`),d=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);_.attributes.splice(0,_.attributes.length,...s)}else{let U=u.auditStore;U||(U=HT(u)),E=s.find(q=>q.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,yt.get)(jt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),Le.trace(`${e} table loading, opening primary store`);let b=new Ui.default(!1,!0),P=e+"/";Le.trace(`openDB ${P} from ${t}`);let z=u.openDB(P,b);z.rootStore=u,Le.trace(`openDB ${Fo.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(Fo.INTERNAL_DBIS_NAME,p),z.tableId=h.get(Go),z.tableId||(z.tableId=1),h.putSync(Go,z.tableId+1),E.tableId=z.tableId,_=dB(l,e,Jd({primaryStore:z,auditStore:U,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:o,dbisDB:h})),_.schemaVersion=1,T=!0,$(),h.put(P,E)}Le.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Le.trace(`openDB ${Fo.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(Fo.INTERNAL_DBIS_NAME,p)),_.dbisDB=h;let O=[];for(let{key:U,value:b}of h.getRange({start:!0})){let[P,z]=U.toString().split("/");if(z===""&&(z=b.name),z){if(P!==e)continue}else z=P;if(!s.find(Oe=>Oe.name===z)?.indexed&&b.indexed&&!b.isPrimaryKey){$(),T=!0,h.remove(U);let Oe=_.indices[P];Oe&&O.push(Oe)}}Le.trace(`${e} table loading, comparing atributes`);let k=[];try{for(let U of s||[]){let b=e+"/"+(U.name||"");Object.defineProperty(U,"key",{value:b,configurable:!0});let P=h.get(b);if(U.isPrimaryKey){if(n===!0&&!_.audit){_.enableAuditing(),P||(b=e+"/",P=h.get(b));let q=Object.assign({},P,{audit:!0});T=!0,$(),h.put(b,q)}continue}P?.attribute&&!P.name&&(P.indexed=!0);let z=!P||P.type!==U.type||P.indexed!==U.indexed||JSON.stringify(P.attributes)!==JSON.stringify(U.attributes)||JSON.stringify(P.elements)!==JSON.stringify(U.elements);if(U.indexed){let q=new Ui.default(!0,!1);Le.trace(`openDB ${b} from ${t}`);let Oe=u.openDB(b,q);(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<au.workerData?.restartNumber)&&(T=!0,$(),P=h.get(b),(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<au.workerData?.restartNumber)&&(T=!0,U.lastIndexedKey=P?.lastIndexedKey||!1,U.indexingPID=process.pid,Oe.isIndexing=!0,Object.defineProperty(U,"dbi",{value:Oe}),k.push(U)),h.put(b,U)),f[U.name]=Oe}else z&&(T=!0,$(),h.put(b,U))}}finally{g&&g()}if(T&&(_.schemaVersion++,_.updatedAttributes()),Le.trace(`${e} table loading, running index`),k.length>0||O.length>0?_.indexingOperation=hee(_,k,O):T&&Zd.signalSchemaChange(new jd.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,T)for(let U of KT)U(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Le.trace(`${e} table loaded`),_;function $(){g||u.transactionSync(()=>({then(U){g=U}}))}a($,"startTxn")}async function hee(e,t,r){try{let s=e.schemaVersion;await Zd.signalSchemaChange(new jd.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:l,value:_,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(_){if(u++,n=e.primaryStore.ifVersion(l,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,p=(0,uB.getIndexedValues)(_[h]);if(p)for(let T=0,g=p.length;T<g;T++)f.dbi.put(p[T],l)}}),n.then(()=>u--,E=>{u--,Le.error(E)}),au.workerData&&au.workerData.restartNumber!==lB.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=l,e.dbisDB.put(E.key,E);if(i)return}u>Eee?await n:u>fee&&await new Promise(E=>setImmediate(E))}for(let l of t)delete l.lastIndexedKey,delete l.indexingPID,l.dbi.isIndexing=!1,n=e.dbisDB.put(l.key,l)}await n,await Zd.signalSchemaChange(new jd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function mee({table:e,database:t}){let r=qa({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 dT(e){KT.push(e)}var yt,Fo,Xd,Me,fr,xo,Ui,VT,jt,cB,$T,uB,Zd,jd,au,Le,lB,YT,tE,nr,ve,Go,KT,eE,Bn,ko,Eee,fee,de=Se(()=>{yt=C(Q()),Fo=C(xe()),Xd=require("lmdb"),Me=require("path"),fr=require("fs"),xo=C(we());dd();Ui=C(xu()),VT=C(Vu()),jt=C(A()),cB=C(require("fs-extra")),$T=require("../index"),uB=C(Ht()),Zd=C(ks()),jd=C(Fr()),au=require("worker_threads"),Le=C(x()),lB=C(dt());Zc();YT="data",tE=Symbol("defined-tables");(0,yt.initSync)();nr=Object.create(null),ve=Object.create(null);(0,$T._assignPackageExport)("databases",ve);(0,$T._assignPackageExport)("tables",nr);Go=Symbol.for("next-table-id"),KT=[],Bn=new Map;a(_ee,"getTables");a(xr,"getDatabases");a(dee,"resetDatabases");a(ou,"readMetaDb");a(_B,"ensureDB");a(dB,"setTable");a(qa,"database");a(Vh,"dropDatabase");a(st,"table");Eee=1e3,fee=10;a(hee,"runIndexing");a(mee,"dropTableMeta");a(dT,"onUpdatedTable")});var V=m((Rde,yB)=>{"use strict";var Hn=require("path"),SB=require("fs-extra"),er=x(),EB=require("fs-extra"),rE=require("os"),See=require("net"),pee=require("recursive-iterator"),Ge=A(),Tee=DR(),fB=require("papaparse"),sE=require("moment"),{inspect:Ree}=require("util"),hB=require("is-number"),Tde=require("lodash"),gee=require("minimist"),Aee=require("https"),Oee=require("http"),{hdb_errors:nE}=W(),Nee=/^((\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)))$/,pB=require("util").promisify(setTimeout),bee=100,yee=5,Iee="",wee=4,mB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};yB.exports={isEmpty:hr,isEmptyOrZeroLength:bs,arrayHasEmptyValues:Dee,arrayHasEmptyOrZeroLengthValues:Lee,buildFolderPath:Mee,isBoolean:TB,errorizeMessage:Cee,stripFileExtension:vee,autoCast:Bee,autoCastJSON:RB,autoCastJSONDeep:QT,removeDir:Hee,compareVersions:qee,isCompatibleDataVersion:Fee,escapeRawValue:Gee,unescapeValue:xee,stringifyProps:kee,timeoutPromise:$ee,isClusterOperation:Kee,getClusterUser:Qee,checkGlobalSchemaTable:Wee,getHomeDir:AB,getPropsFilePath:Vee,promisifyPapaParse:zee,removeBOM:OB,createEventPromise:Jee,checkProcessRunning:Xee,checkSchemaTableExist:Zee,checkSchemaExists:NB,checkTableExists:bB,getStartOfTomorrowInSeconds:jee,getLimitKey:ete,isObject:Pee,isNotEmptyAndHasValue:Uee,autoCasterIsNumberCheck:gB,backtickASTSchemaItems:tte,isPortTaken:Yee,createForkArgs:rte,autoCastBoolean:ste,async_set_timeout:pB,getTableHashAttribute:nte,doesSchemaExist:ite,doesTableExist:ote,stringifyObj:ate,ms_to_time:cte,changeExtension:ute,getEnvCliRootPath:zT,noBootFile:lte,httpRequest:_te,transformReq:dte,convertToMS:Ete,PACKAGE_ROOT:Ge.PACKAGE_ROOT};function Cee(e){return e instanceof Error?e:new Error(e)}a(Cee,"errorizeMessage");function hr(e){return e==null}a(hr,"isEmpty");function Uee(e){return!hr(e)&&(e||e===0||e===""||TB(e))}a(Uee,"isNotEmptyAndHasValue");function bs(e){return hr(e)||e.length===0||e.size===0}a(bs,"isEmptyOrZeroLength");function Dee(e){if(hr(e))return!0;for(let t=0;t<e.length;t++)if(hr(e[t]))return!0;return!1}a(Dee,"arrayHasEmptyValues");function Lee(e){if(bs(e))return!0;for(let t=0;t<e.length;t++)if(bs(e[t]))return!0;return!1}a(Lee,"arrayHasEmptyOrZeroLengthValues");function Mee(...e){try{return e.join(Hn.sep)}catch{console.error(e)}}a(Mee,"buildFolderPath");function TB(e){return hr(e)?!1:e===!0||e===!1}a(TB,"isBoolean");function Pee(e){return hr(e)?!1:typeof e=="object"}a(Pee,"isObject");function vee(e){return bs(e)?Iee:e.slice(0,-wee)}a(vee,"stripFileExtension");function Bee(e){return hr(e)||e===""||typeof e!="string"?e:mB[e]!==void 0?mB[e]:gB(e)===!0?Number(e):Nee.test(e)?new Date(e):e}a(Bee,"autoCast");function RB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(RB,"autoCastJSON");function QT(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=QT(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=QT(r);s!==r&&(e[t]=s)}return e}else return RB(e)}a(QT,"autoCastJSONDeep");function gB(e){if(e.startsWith("0.")&&hB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&hB(e))}a(gB,"autoCasterIsNumberCheck");async function Hee(e){if(bs(e))throw new Error(`Directory path: ${e} does not exist`);try{await EB.emptyDir(e),await EB.remove(e)}catch(t){throw er.error(`Error removing files in ${e} -- ${t}`),t}}a(Hee,"removeDir");function qee(e,t){if(bs(e)){er.info("Invalid current version sent as parameter.");return}if(bs(t)){er.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 l=0;l<u;l++)if(r=parseInt(o[l],10)-parseInt(c[l],10),r)return r;return o.length-c.length}a(qee,"compareVersions");function Fee(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Fee,"isCompatibleDataVersion");function Gee(e){if(hr(e))return e;let t=String(e);return t==="."?Ge.UNICODE_PERIOD:t===".."?Ge.UNICODE_PERIOD+Ge.UNICODE_PERIOD:t.replace(Ge.FORWARD_SLASH_REGEX,Ge.UNICODE_FORWARD_SLASH)}a(Gee,"escapeRawValue");function xee(e){if(hr(e))return e;let t=String(e);return t===Ge.UNICODE_PERIOD?".":t===Ge.UNICODE_PERIOD+Ge.UNICODE_PERIOD?"..":String(e).replace(Ge.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(xee,"unescapeValue");function kee(e,t){if(hr(e))return er.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+rE.EOL}!bs(s)&&s[0]===";"?r+=" "+s+n+rE.EOL:bs(s)||(r+=s+"="+n+rE.EOL)}catch{er.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(kee,"stringifyProps");function AB(){let e;try{e=rE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(AB,"getHomeDir");function Vee(){let e=Hn.join(AB(),Ge.HDB_HOME_DIR_NAME,Ge.BOOT_PROPS_FILE_NAME);return SB.existsSync(e)||(e=Hn.join(__dirname,"../","hdb_boot_properties.file")),e}a(Vee,"getPropsFilePath");function $ee(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a($ee,"timeoutPromise");async function Yee(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=See.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Yee,"isPortTaken");function Kee(e){try{return Ge.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){er.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Kee,"isClusterOperation");function Wee(e,t){let r=(de(),re(Ne)).getDatabases();if(!r[e])return nE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return nE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Wee,"checkGlobalSchemaTable");function Qee(e,t){if(hr(t)){er.warn("No CLUSTERING_USER defined, clustering disabled");return}if(hr(e)||bs(e)){er.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){er.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){er.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Qee,"getClusterUser");function zee(){fB.parsePromise=function(e,t,r){return new Promise(function(s,n){fB.parse(e,{header:!0,transformHeader:OB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(zee,"promisifyPapaParse");function OB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(OB,"removeBOM");function Jee(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;er.info(`Got cluster status event response: ${Ree(n)}`);try{i.cancel()}catch{er.error("Error trying to cancel timeout.")}s(n)})})}a(Jee,"createEventPromise");async function Xee(e){let t=!0,r=0;do await pB(bee*r++),(await Tee.findPs(e)).length>0&&(t=!1);while(t&&r<yee);if(t)throw new Error(`process ${e} was not started`)}a(Xee,"checkProcessRunning");function Zee(e,t){let r=NB(e);if(r)return r;let s=bB(e,t);if(s)return s}a(Zee,"checkSchemaTableExist");function NB(e){let{getDatabases:t}=(de(),re(Ne));if(!t()[e])return nE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(NB,"checkSchemaExists");function bB(e,t){let{getDatabases:r}=(de(),re(Ne));if(!r()[e][t])return nE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(bB,"checkTableExists");function jee(){let e=sE().utc().add(1,Ge.MOMENT_DAYS_TAG).startOf(Ge.MOMENT_DAYS_TAG).unix(),t=sE().utc().unix();return e-t}a(jee,"getStartOfTomorrowInSeconds");function ete(){return sE().utc().format("DD-MM-YYYY")}a(ete,"getLimitKey");function tte(e){try{let t=new pee(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){er.error("Got an error back ticking items."),er.error(t)}}a(tte,"backtickASTSchemaItems");function rte(e){return[e]}a(rte,"createForkArgs");function ste(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(ste,"autoCastBoolean");function nte(e,t){let{getDatabases:r}=(de(),re(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(nte,"getTableHashAttribute");function ite(e){let{getDatabases:t}=(de(),re(Ne));return t()[e]!==void 0}a(ite,"doesSchemaExist");function ote(e,t){let{getDatabases:r}=(de(),re(Ne));return r()[e]?.[t]!==void 0}a(ote,"doesTableExist");function ate(e){try{return JSON.stringify(e)}catch{return e}}a(ate,"stringifyObj");function cte(e){let t=sE.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(cte,"ms_to_time");function ute(e,t){let r=Hn.basename(e,Hn.extname(e));return Hn.join(Hn.dirname(e),r+t)}a(ute,"changeExtension");function zT(){if(process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=gee(process.argv);if(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(zT,"getEnvCliRootPath");var WT;function lte(){if(WT)return WT;let e=zT();zT()&&SB.pathExistsSync(Hn.join(e,Ge.HDB_CONFIG_FILE))&&(WT=!0)}a(lte,"noBootFile");function _te(e,t){let r;return e.protocol==="http:"?r=Oee:r=Aee,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(_te,"httpRequest");function dte(e){if(!e.schema&&!e.database){e.schema=Ge.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(dte,"transformReq");function Ete(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(Ete,"convertToMS")});var wB=m((Ode,IB)=>{"use strict";var JT=A(),fte=V(),hte=ds(),Jr=x(),mte=E_(),Ste=ic(),Ade=PS(),pte=xs(),Tte=uc(),Rte=require("semver/functions/gte"),gte=3e4,Ate=7;IB.exports=Ote;async function Ote(){try{Jr.notify("Starting update nodes. This process will attempt to update any node connections the need to be reestablished after a 4.0.0 upgrade"),await pte.setSchemaDataToGlobalAsync();let e=await hte.getAllNodeRecords(),t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];n.system_info.hdb_version===JT.PRE_4_0_0_VERSION&&t.push(Nte(n))}await Promise.allSettled(t),Jr.notify("Shutting down 4.0.0 clustering upgrade process")}catch(e){throw Jr.error(e),e}}a(Ote,"updateAllNodes");async function Nte(e){try{let{name:t,subscriptions:r}=e;Jr.notify("Running 4.0.0 update on node:",t);let s=!1,n=0;for(;n<Ate;){let i=[];if(await mte.buildNodeStatus(e,i),Jr.trace("Received status:",i[0].status,"from node:",t),i[0].status==="open"&&Rte(i[0].system_info.hdb_version,"4.0.0")){Jr.notify("Received open status from node:",t,"calling add node");let o={operation:JT.OPERATIONS_ENUM.ADD_NODE,node_name:t,subscriptions:r};await Ste(o,!0),Jr.notify("Successfully added node",t),s=!0;break}n=(Date.now()-e.__updatedtime__)/(1e3*60*60*24),Jr.trace("Update node has been running for",n,"days. Calling node status again for node:",t),await fte.async_set_timeout(gte)}s||(Jr.error("4.0.0 node update was unable to update connection to node:",t),Jr.error("Removing following node record from hdb_nodes",e),await Tte({operation:JT.OPERATIONS_ENUM.REMOVE_NODE,node_name:t}))}catch(t){throw Jr.error(t),t}}a(Nte,"updateNode")});var bte=wB();(async()=>{try{await bte()}catch(e){console.error("Error launching 4.0.0 node update"),console.error(e),process.exit(1)}})();
26
+ `+nT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(F9,"getServerOptions");function G9(){let e=Jr.get(C9),t=Jr.get(U9),r;return e&&(e===!0||e.toUpperCase()===IP)&&(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(G9,"getCORSOpts");function x9(){return Jr.get(M9)}a(x9,"getHeaderTimeoutConfig")});var xP=m((l_e,GP)=>{"use strict";var{decode:k9}=require("msgpackr"),{isMainThread:V9,parentPort:$9,threadId:c_e}=require("worker_threads"),iT=nt(),Bo=He(),Y9=A(),Qc=x(),UP=Q(),MP=A();dt();var K9=$s(),{recordAction:W9,recordActionBinary:Q9}=(ro(),se(vl)),{publishToStream:z9}=iT,u_e={durable:Bo.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Bo.WORK_QUEUE_CONSUMER_NAMES.deliver_group},J9,X9,Z9,PP,vP;GP.exports={initialize:BP,workQueueListener:FP,setSubscription:j9,setIgnoreOrigin:t7,getDatabaseSubscriptions:e7};async function BP(){vP=!0,Qc.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await iT.getNATSReferences();J9=e,X9=e.info.server_name,Z9=t,PP=r}a(BP,"initialize");var wd=new Map;function j9(e,t,r){let s=wd.get(e);s||wd.set(e,s=new Map),s.set(t,r),vP||BP().then(FP)}a(j9,"setSubscription");function e7(){return wd}a(e7,"getDatabaseSubscriptions");var HP;function t7(e){HP=e}a(t7,"setIgnoreOrigin");var qP=100,DP=new Array(qP),Id=0;async function FP(){let t=await(await PP.consumers.get(Bo.WORK_QUEUE_CONSUMER_NAMES.stream_name,Bo.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await DP[Id],DP[Id]=r7(r).catch(s=>{Qc.error(s)}),++Id>=qP&&(Id=0)}a(FP,"workQueueListener");V9||$9.on("message",async e=>{let{type:t}=e;t===MP.ITC_EVENT_TYPES.SHUTDOWN&&iT.closeConnection()});async function r7(e){let t=k9(e.data);W9(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Bo.MSG_HEADERS.ORIGIN)===UP.get(Y9.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!HP;if(Q9(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}try{let{operation:i,schema:o,next:c,table:u,records:l,hash_values:_,__origin:d}=t;Qc.trace("processing message:",i,o,u,(l?"records: "+l.map(R=>R.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),Qc.trace(`messageProcessor nats msg id: ${e.headers.get(Bo.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:T}=d||{},p=wd.get(o)?.get(u);if(!p)throw new Error("Missing table for replication message",u);if(i==="define_schema")t.type=i,p.send(t);else if(l.length===1&&!c)p.send({type:LP(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:T});else{let R=l.map((O,q)=>({type:LP(i),value:O,id:_?.[q],table:u}));for(;c;)R.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;p.send({type:"transaction",writes:R,table:u,timestamp:f,onCommit:E,user:h,nodeName:T})}UP.get(MP.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&z9(e.subject.split(".").slice(0,-1).join("."),K9.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){Qc.error(i)}e.ack()}a(r7,"messageProcessor");function LP(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(LP,"convertOperation")});var _T={};je(_T,{disableNATS:()=>n7,setNATSReplicator:()=>oT,start:()=>s7});function s7(){Ud.default.get(Dd.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&o7()}function n7(e=!0){KP=e}function o7(){if(KP)return;let e=Vr(),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];oT(n,r,i)}}dT((r,s)=>{oT(r.tableName,r.databaseName,r),s&&QP(r)}),!kP&&(kP=!0)}function oT(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.Source?.isNATSReplicator)return;let s;r.sourcedFrom(class extends mt{static{a(this,"NATSReplicator")}put(o){let c;return s?.put&&(!s.put.reliesOnPrototype||s.prototype.put)&&(c=s.put(this[ce],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ce],record:o},c)}delete(){let o;return s?.delete&&(!s.delete.reliesOnPrototype||s.prototype.delete)&&(o=s.delete(this[ce],this.getContext())),n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ce]},o)}publish(o){let c;return s?.publish&&(!s.publish.reliesOnPrototype||s.prototype.publish)&&(c=s.publish(this[ce],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ce],record:o},c)}invalidate(o){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ce]})}static defineSchema(o){QP(o)}static mergeSource(o,c){return s=o,s?.get&&(!s.get.reliesOnPrototype||s.prototype.get)&&(c?.replicationSource?this.get=async(u,l)=>{let _=await s.get(u,l);return _&&n(l).addWrite(t,{operation:"put",table:e,id:u,record:_}),_}:this.get=(u,l)=>s.get(u,l)),this}static subscribe(){let o=new ts;return(0,VP.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<i7}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0});function n(i){let o=i?.transaction?.nats;return o||(i?.transaction?(i.transaction.push(o=i.transaction.nats=new Cd(i.transaction,i)),o.user=i.user):o=WP),o}a(n,"getNATSTransaction")}function QP(e){let t=Ud.default.get(Dd.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,cT.publishToStream)(`${uT.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,lT.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 cT,uT,lT,VP,$P,Ud,Dd,YP,KP,i7,WP,kP,Cd,aT,zP=pe(()=>{Ee();rs();cT=U(nt()),uT=U(He()),lT=U($s());aa();VP=U(xP()),$P=U(qt()),Ud=U(Q()),Dd=U(A()),YP=U(x());a(s7,"start");a(n7,"disableNATS");i7=2;a(o7,"assignReplicationSource");a(oT,"setNATSReplicator");a(QP,"publishSchema");Cd=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r,s){let n=this.writes_by_db.get(t);if(n||this.writes_by_db.set(t,n=[]),s?.then)return s.then(()=>n.push(r));n.push(r)}commit(t){let r=Ud.default.get(Dd.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,l;for(let _ of i){let d=_.table,E=_.operation=="put"?"upsert":_.operation;u||(YP.trace(`Sending transaction event ${E}`),l=u={operation:E,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,E!=="delete"&&(u.records=o)),u.table===d&&u.operation===E?(o.push(_.record),c.push(_.id)):l=l.next={operation:E,table:d,id:_.id,record:_.record}}s.push((0,cT.publishToStream)(`${uT.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,lT.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},aT=class extends Cd{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,$P.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};WP=new aT});async function XP({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await ET.getResource(e,{});n=new hT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await ET.get(e);i&&i.delete()}n=new Md(e,t)}return n}function fT(){return Ld++,Ld>65500&&(Ld=1),Ld}var JP,zc,ET,Ld,Md,hT,ZP=pe(()=>{Ee();Nc();JP=U(qt()),zc=U(x());Wn();ET=st({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(XP,"getSession");Ld=1;a(fT,"getNextMessageId");Md=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,l;if(c>-1?(u=n.slice(c),l=n.slice(0,c)):l=n,!l)throw new Error("No topic provided");let _=!1,d;if((l.endsWith("+")||l.endsWith("#"))&&(_=!0,l.endsWith("+")&&(d=!0),l=l.slice(0,l.length-1)),l.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(l.indexOf("#")>-1||l.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let E=this.subscriptions.find(O=>O.topic===n);E&&(E.end(),this.subscriptions.splice(this.subscriptions.indexOf(E),1));let f={search:u,user:this.user,startTime:o,omitCurrent:i,isCollection:_,shallowWildcard:d,url:""},h=Ln.getMatch(l);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);f.url=h.relativeURL;let T=h.path,p=h.Resource,R=await Ke(f,async()=>{let O=await p.subscribe(f);if(!O)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!O[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let q of O)try{let $;if(q.type&&q.type!=="put"&&q.type!=="delete"&&q.type!=="message"||s&&!s(q))continue;r?(q.topic=n,$=this.needsAcknowledge(q)):$=fT();let w=q.id;Array.isArray(w)&&(w=To(w)),w==null&&(w=""),this.listener(T+"/"+w,q.value,$,t)}catch($){(0,zc.warn)($)}})(),O});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){return fT()}acknowledge(t){}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;let i=Ln.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 Ke(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=[]}},hT=class extends Md{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=fT();return this.awaitingAcks.set(r,{topic:t.topic,timestamp:t.timestamp}),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t);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,zc.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,JP.getNextMonotonicTime)()),(0,zc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),ET.put(this.sessionRecord)),t.qos}}});var pT={};je(pT,{start:()=>c7});async function c7({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:l,onClose:_}=tv(o,(d,E)=>{if(o.send(d),E&&o._socket.writableNeedDrain)return new Promise(f=>this._socket.once("drain",f))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",l),o.on("close",_),o.on("error",d=>{(0,cn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;a7&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,rv.getSuperUser)());let{onMessage:u,onClose:l}=tv(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,cn.info)("Socket error",_)})},{port:t,securePort:s})}function tv(e,t,r,s,n){ev||(ev=!0,nm(_=>{_.push({metric:"mqtt-connections",connections:mT})})),mT++;let i,o={protocolVersion:4},c=(0,Pd.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){mT--,i?.disconnect()}return a(l,"onClose"),c.on("packet",async _=>{s?.then&&(s=await s),i?.then&&await i;try{switch(_.cmd){case"connect":if(o.protocolVersion=_.protocolVersion,_.username)try{s=await tt.auth(_.username,_.password.toString()),(0,ST.get)(un.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&jP.notify({username:s.username,status:un.AUTH_AUDIT_STATUS.SUCCESS,type:un.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,ST.get)(un.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&jP.error({username:s.username,status:un.AUTH_AUDIT_STATUS.FAILURE,type:un.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),d({cmd:"connack",reasonCode:134,returnCode:134})}if(!s&&n.requireAuthentication)return d({cmd:"connack",reasonCode:134,returnCode:134});try{n.authorizeClient?.(_,s),i=XP({user:s,..._}),i=await i}catch(O){return(0,cn.error)(O),d({cmd:"connack",reasonCode:O.code||128,returnCode:O.code||128})}d({cmd:"connack",sessionPresent:i.sessionWasPresent,reasonCode:0,returnCode:0}),i.setListener((O,q,$,w)=>{try{let I=O.indexOf("/",1),D=I>0?O.slice(0,I):O;d({cmd:"publish",topic:O,payload:E(q),messageId:$||Math.floor(Math.random()*1e8),qos:w.qos},D)}catch(I){(0,cn.error)(I),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let O of _.subscriptions){let q;try{q=(await i.addSubscription(O,O.qos>=1)).qos||0}catch($){(0,cn.error)($),q=128}f.push(q)}await i.committed,d({cmd:"suback",granted:f,messageId:_.messageId});break;case"unsubscribe":for(let O of _.unsubscriptions)i.removeSubscription(O);d({cmd:"unsuback",messageId:_.messageId});break;case"pubrel":d({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let h=_.qos===2?"pubrec":"puback",T=e.deserialize||(e.deserialize=yo(r?.headers["content-type"])),p=_.payload?.length>0?T(_.payload):void 0,R;try{R=await i.publish(_,p)}catch(O){console.warn(O),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:R===!1?144:0},_.topic);break;case"pubrec":d({cmd:"pubrel",messageId:_.messageId,reasonCode:0});break;case"pubcomp":case"puback":i.acknowledge(_.messageId);break;case"pingreq":d({cmd:"pingresp"});break;case"disconnect":i?.disconnect(),e.close?e.close():e.end();break}}catch(f){console.error(f),d({cmd:"disconnect"})}function d(f,h){let T=(0,Pd.generate)(f,o);t(T),ui(T.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?Zs(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Pd,rv,ST,un,cn,jP,a7,ev,mT,sv=pe(()=>{Pd=require("mqtt-packet");ZP();rv=U(Ir());go();ro();es();ST=U(Q()),un=U(A()),cn=U(x()),jP=(0,cn.loggerWithTag)("auth-event"),a7=!0;a(c7,"start");mT=0;a(tv,"onSocket")});var Ev={};je(Ev,{loadComponent:()=>vd,loadComponentDirectories:()=>dv});function dv(e,t){t&&(RT=t),e&&(gT=e);let r=[];if((0,Ns.existsSync)(TT)){let n=(0,Ns.readdirSync)(TT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,vr.join)(TT,o);r.push(vd(c,RT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(vd(s,RT,s)),Promise.all(r).then(()=>{_v=!0})}async function vd(e,t,r,s,n){if(!iv.has(e)){iv.set(e,!0),n&&(gT=n);try{let i,o=(0,vr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Ns.existsSync)(o)?i=(0,ov.parseDocument)((0,Ns.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=d7;let c=[];for(let u in i){let l=i[u];if(!l)continue;let _,d=l.package;if(d){let E=e,f;for(;!(0,Ns.existsSync)(f=(0,vr.join)(E,"node_modules",u));)if(E=(0,vr.dirname)(E),E.length<(0,lv.getHdbBasePath)().length){f=null;break}if(f)_=await vd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=_7[u];if(_)try{c.push(_);let E=a(p=>(p.origin=r,st(p)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,T=!f?.https&&f?.port;if(Jc.isMainThread&&(_=await _.startOnMainThread?.({server:tt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_,s&&f))for(let p of[T,h])try{if(+p&&!nv.includes(p)){nv.push(p);let R=AT.get(OT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);OP(p,R)}}catch(R){console.error("Error listening on socket",p,R,u)}if(t.isWorker&&(_=await _.start?.({server:tt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_),gT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,uv.handleHDBError)("Can not reference parent directories");let p=(0,vr.join)(e,l.files);for(let R of await(0,av.default)(p,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:q}=R,$=(0,vr.relative)(e,O),w=(0,vr.basename)(e),I=l.path||"/";I=I.startsWith("/")?I:I.startsWith("./")?"/"+w+I.slice(2):I==="."?"/"+w:"/"+w+"/"+I,I+=(I.endsWith("/")?"":"/")+$;try{if(q.isFile()){let D=await l7(O);Jc.isMainThread&&await _.setupFile?.(D,I,O,t),t.isWorker&&await _.handleFile?.(D,I,O,t)}else Jc.isMainThread&&await _.setupDirectory?.(I,O,t),t.isWorker&&await _.handleDirectory?.(I,O,t)}catch(D){console.error(`Could not load ${q.isFile()?"file":"directory"} ${O} using ${l.module} for application ${e}`,D),t.set(l.path||"/",new Xc(D))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new Xc(E),null,!0)}}if(Jc.isMainThread&&!_v&&(0,cv.watchDir)(e,async()=>dv()),i.extensionModule)return await Fu((0,vr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new Xc(i))}}}var Ns,vr,Jc,ov,AT,OT,av,cv,uv,lv,u7,l7,TT,gT,_v,RT,_7,d7,nv,iv,Xc,fv=pe(()=>{Ns=require("fs"),vr=require("path"),Jc=require("worker_threads"),ov=require("yaml"),AT=U(Q()),OT=U(A());Fg();Vg();$g();CL();fP();pP();av=U(require("fast-glob")),cv=U(dt());kE();es();uv=U(W());rs();Ee();NP();lv=U(Q()),u7=U(CP());P_();zP();sv();({readFile:l7}=Ns.promises),TT=AT.get(OT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),gT=new Map;a(dv,"loadComponentDirectories");_7={REST:Rp,graphqlSchema:xE,jsResource:$E,fastifyRoutes:jp,login:KE,static:eT,operationsApi:u7,customFunctions:{},clustering:_T,authentication:bc,mqtt:pT},d7={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},nv=[],iv=new Map;a(vd,"loadComponent");Xc=class extends mt{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 Rv=m((q_e,Tv)=>{"use strict";var qd=require("fs-extra"),NT=require("path"),Bd=x(),hv=V(),Hd=A(),pv=Q(),E7=gr();Tv.exports=f7;async function f7(){let e=h7(),t=pv.get(Hd.CONFIG_PARAMS.ROOTPATH),r=NT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Hd.PACKAGE_ROOT}},n=NT.join(t,"node_modules");await qd.ensureDir(n);let i,o=!0,c=!1;try{i=await qd.readJson(r)}catch(u){if(hv.isEmptyOrZeroLength(e))return;if(u.code!==Hd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!hv.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await mv(l);s.dependencies[u]=_+l}if(!o){Bd.notify("Installing components"),await Sv(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await mv(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Bd.notify("Removing component",u),c=!0);c&&(Bd.notify("Updating components."),await Sv(r,s))}a(f7,"installComponents");function h7(){let e=E7.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(h7,"getComponentsConfig");async function mv(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":NT.extname(e)||await qd.pathExists(e)?"file:":"github:"}a(mv,"getPkgPrefix");async function Sv(e,t){Bd.trace("npm installing components package.json",t),await qd.writeFile(e,JSON.stringify(t,null," ")),await k_().installAllRootModules(pv.get(Hd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(Sv,"installPackages")});var Ov=m((G_e,Av)=>{var{isMainThread:gv}=require("worker_threads"),{getTables:m7}=(Ee(),se(be)),{loadComponentDirectories:S7,loadComponent:p7}=(fv(),se(Ev)),{resetResources:T7}=(Nc(),se(iD)),R7=Rv(),g7=gr(),{dirname:A7}=require("path"),{getConnection:O7}=nt(),N7=Q(),b7=A(),bT=new Map;async function y7(e=!1){!gv&&N7.get(b7.CONFIG_PARAMS.CLUSTERING_ENABLED)&&O7(),gv&&await R7();let t=T7();m7(),t.isWorker=e,await p7(A7(g7.getConfigFilePath()),t,"hdb",!0,bT),await S7(bT,t);let r=[];for(let[s]of bT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(y7,"loadRootComponents");Av.exports.loadRootComponents=y7});var dt=m((V_e,qn)=>{"use strict";var{Worker:I7,MessageChannel:w7,parentPort:bs,isMainThread:UT,threadId:C7,workerData:Zc}=require("worker_threads"),{PACKAGE_ROOT:U7}=A(),{join:yv,isAbsolute:D7,extname:Gd}=require("path"),{server:L7}=(es(),se(gu)),{watch:M7,readdir:P7}=require("fs/promises"),{totalmem:Nv}=require("os"),DT=A(),Ho=x(),k_e=A(),{randomBytes:v7}=require("crypto"),B7=1024*1024,Hn=[],Bn=[],H7=50,Iv=1e4,q7="restart",wv="request_thread_info",Cv="resource_report",Uv="thread_info",Dv="added-port",F7="ack",yT;qn.exports={startWorker:IT,restartWorkers:LT,shutdownWorkers:V7,workers:Hn,setMonitorListener:X7,onMessageFromWorkers:$7,onMessageByType:Y7,broadcast:K7,broadcastWithAcknowledgement:Q7,setChildListenerByType:k7,getWorkerIndex:Mv,getTicketKeys:Pv,setMainIsWorker:G7,restartNumber:Zc?.restartNumber||1};var Lv;function Mv(){return Zc?Zc.workerIndex:Lv?0:void 0}a(Mv,"getWorkerIndex");function G7(e){Lv=e}a(G7,"setMainIsWorker");var Fd;function Pv(){return Fd||(Fd=UT?v7(48):Zc.ticketKeys,Fd)}a(Pv,"getTicketKeys");Object.defineProperty(L7,"workerIndex",{get(){return Mv()}});var vv={[wv](e,t){z7(t)},[Cv](e,t){J7(t,e)}};function IT(e,t={}){let r=process.constrainedMemory?.()||Nv();r=Math.min(r,Nv());let s=Math.max(Math.floor(r/B7/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Bn){let{port1:u,port2:l}=new w7;c.postMessage({type:Dv,port:u},[u]),i.push(l)}Gd(e)||(e+=".js");let o=new I7(D7(e)?e:yv(U7,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:i,workerIndex:t.workerIndex,name:t.name,restartNumber:qn.exports.restartNumber,ticketKeys:Pv()},transferList:i},t));return kd(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{IT(e,t)},o.on("error",c=>{console.error("Worker error:",c),Ho.error("Worker error:",c)}),o.on("exit",c=>{Hn.splice(Hn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<H7?(t.unexpectedRestarts=o.unexpectedRestarts+1,IT(e,t)):Ho.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{vv[c.type]?.(c,o)}),Hn.push(o),j7(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(IT,"startWorker");var x7=[DT.THREAD_TYPES.HTTP];async function LT(e=null,t=2,r=!0){if(UT){if(r){let{loadRootComponents:n}=Ov();await n()}qn.exports.restartNumber++,t<1&&(t=t*Hn.length);let s=[];for(let n of Hn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:qn.exports.restartNumber,type:DT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=x7.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),Iv*2).unref();n.on("exit",()=>{clearTimeout(u),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else bs.postMessage({type:q7,workerType:e})}a(LT,"restartWorkers");function k7(e,t){vv[e]=t}a(k7,"setChildListenerByType");function V7(e){return LT(e,1/0,!1)}a(V7,"shutdownWorkers");var Bv=[];function $7(e){Bv.push(e)}a($7,"onMessageFromWorkers");var wT=new Map;function Y7(e,t){let r=wT.get(e);r||wT.set(e,r=[]),r.push(t)}a(Y7,"onMessageByType");function K7(e){for(let t of Bn)try{t.postMessage(e)}catch(r){Ho.error("Unable to send message to worker",r)}}a(K7,"broadcast");var xd=new Map,W7=1;function Q7(e){return new Promise(t=>{let r=0;for(let s of Bn)try{let n=W7++,i=a(()=>{xd.delete(n),--r===0&&t(),s!==bs&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,xd.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of xd)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Ho.error("Unable to send message to worker",n)}r===0&&t()})}a(Q7,"broadcastWithAcknowledgement");function z7(e){e.postMessage({type:Uv,workers:Hv()})}a(z7,"sendThreadInfo");function Hv(){let e=Date.now();return Hn.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(Hv,"getChildWorkerInfo");function J7(e,t){e.resources=t,e.resources.updated=Date.now()}a(J7,"recordResourceReport");var CT;function X7(e){CT=e}a(X7,"setMonitorListener");var Z7=1e3,bv=!1;function j7(){bv||(bv=!0,setInterval(()=>{for(let e of Hn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}CT&&CT()},Z7).unref())}a(j7,"startMonitoring");var eee=1e3;if(bs){kd(bs);for(let e of Zc.addPorts)kd(e);setInterval(()=>{let e=process.memoryUsage();bs.postMessage({type:Cv,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},eee).unref(),yT=a(()=>new Promise((e,t)=>{bs.on("message",r),bs.postMessage({type:wv});function r(s){s.type===Uv&&(bs.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else yT=Hv;qn.exports.getThreadInfo=yT;function kd(e,t){Bn.push(e),e.on("message",r=>{if(r.type===Dv)kd(r.port);else if(r.type===F7){let s=xd.get(r.id);s&&s()}else{for(let n of Bv)n(r,e);let s=wT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Ho.error(i)}}}).on("close",()=>{Bn.splice(Bn.indexOf(e),1)}).on("exit",()=>{Bn.splice(Bn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(kd,"addPort");if(UT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await P7(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(yv(s,i.name));try{for await(let{filename:i}of M7(s,{persistent:!1}))(Gd(i)===".ts"||Gd(i)===".js"||Gd(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await LT(),console.log("Reloaded HarperDB components")},100))}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");qn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else bs.on("message",async e=>{let{type:t}=e;t===DT.ITC_EVENT_TYPES.SHUTDOWN&&(qn.exports.restartNumber=e.restartNumber,bs.unref(),setTimeout(()=>{Ho.warn("Thread did not voluntarily terminate",C7),process.exit(0)},Iv).unref())})});function HT(e){let t=e.auditStore=e.openDB(kv.AUDIT_STORE_NAME,ree);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,$v.getWorkerIndex)()===0&&e.on("aftercommit",()=>{PT||(PT=setTimeout(()=>{if(PT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-qv,0]})){if((n[0]&15)===BT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},qv/10).unref())}),t}function Yd(e,t,r){let s=Wv[r.type],n=3;if(t?t.length>80?(s|=Vd,n=(0,ln.writeKey)(t,ys,e?14:6),MT.setUint16(2,n)):(n=(0,ln.writeKey)(t,ys,e?11:3),ys[1]=n):ys[1]=0,e){s|=Kv;let i=s&Vd?6:3;MT.setFloat64(i,e),t||(n=i+8)}return ys[0]=s,s&Vd?MT.setUint16(4,0):ys[2]=0,r.value?Buffer.concat([ys.slice(0,n),r.value]):ys.subarray(0,n)}function Fn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Vd,i=n?6:3,o;r&Kv&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&vT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:Wv[r&7],value:u,lastVersion:o,get user(){return c?(0,ln.readKey)(e,i,c):void 0}}}var ln,$d,kv,Vv,$v,Yv,ys,MT,tee,ree,qv,PT,vT,Fv,BT,Gv,xv,Vd,Kv,Wv,jc=pe(()=>{ln=require("ordered-binary"),$d=U(Q()),kv=U(ke()),Vv=U(A()),$v=U(dt()),Yv=U(V());(0,$d.initSync)();ys=Buffer.alloc(1024),MT=new DataView(ys.buffer,ys.byteOffset,1024),tee={writeKey(e,t,r){if(Array.isArray(e)){let s=t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength));return s.setFloat64(r,e[0]),s.setUint32(r+8,e[1]),(0,ln.writeKey)(e[2],t,r+12)}else return(0,ln.writeKey)(e,t,r)},readKey(e,t,r){if(e[t]>40){let s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength));return[s.getFloat64(t),s.getUint32(t+8),(0,ln.readKey)(e,t+12,r)]}else return(0,ln.readKey)(e,t,r)}},ree={encoding:"binary",keyEncoder:tee},qv=(0,Yv.convertToMS)((0,$d.get)(Vv.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,PT=null;a(HT,"openAuditStore");vT=16,Fv=1,BT=2,Gv=3,xv=4,Vd=128,Kv=64,Wv={put:Fv|vT,[Fv]:"put",delete:BT,[BT]:"delete",message:Gv|vT,[Gv]:"message",invalidate:xv,[xv]:"invalidate"};a(Yd,"createAuditEntry");a(Fn,"readAuditEntry")});var qT,Ci,see,eu,Kd,Qv=pe(()=>{qT=U(qt());jc();Ci=Symbol("completion"),see=100,eu=class{static{a(this,"DatabaseTransaction")}writes=[];hasWrittenTime;username;lmdbDb;auditStore;readTxn;constructor(t,r,s){this.lmdbDb=t,this.username=r?.username,this.auditStore=s}getReadTxn(){return this.readTxn||(this.readTxn=this.lmdbDb.useReadTransaction())}resetReadSnapshot(){this.readTxn&&(this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}validate(){for(let t of this.writes||[])t.validate?.()}commit(t=(0,qT.getNextMonotonicTime)(),r=!0,s=0){this.resetReadSnapshot();let n,i=[],o=0,c;this.hasWrittenTime=!1;let u=a(_=>{let d=_.commit(t,s);if(d&&(d[Ci]&&(i||(i=[]),i.push(d[Ci])),c=_.store,this.auditStore)){d.user=this.username,d.lastVersion=_.lastVersion,d.newTxnTime&&!this.hasWrittenTime&&(t=d.newTxnTime),this.hasWrittenTime=!0;let E=[t,_.store.tableId,_.key];_.invalidated&&(E.invalidated=!0),this.auditStore.put(E,Yd(_.lastVersion,this.username,d))}},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){let d=_.store.getEntry(_.key),E=s===0&&_.lastVersion!==void 0?_.lastVersion:_.lastVersion=d?.version??null,f=_.store.ifVersion(_.key,E,l);n=n||f}else l();else for(let d of this.writes)u(d)},"nextCondition");return this.writes.length<see>>s?l():(s=1,n=this.writes[0].store.transaction(()=>{for(let _ of this.writes)u(_);return!0})),n?.then(_=>_?(c&&i.push(c.flushed),Promise.all(i).then(()=>(this.writes=[],{txnTime:t}))):this.commit(t,r,s+1))}abort(){this.resetReadSnapshot(),this.writes=[]}},Kd=class extends eu{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,qT.getNextMonotonicTime)())}getReadTxn(){}}});function Zv(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Fo||((0,Ui.onMessageByType)(Jv,d=>{let E=d.auditIds;GT(d.path,E,d.txnId)}),(0,Ui.onMessageByType)(Xv,d=>{(0,Is.trace)("confirming to proceed with txn",d.txnId)}),Fo=Object.create(null));let c=Fo[i]||(Fo[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=To(t);let l=new FT(r);l.startTime=s,n&&(l.includeDescendants=n);let _=u.get(t);return _?_.push(l):(u.set(t,_=[l]),_.tables=u,_.key=t),l.subscriptions=_,l}function GT(e,t,r,s){if(!Fo)return;let n=Fo[e];if(n){if(qo&&qo+1!==r){(0,Is.trace)("Waiting to ensure latest txn id",qo,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Wd)o<r&&((0,Is.trace)("Txn",r,"waiting for txn",o),await c);if(qo+1!==r){await(0,Ui.broadcastWithAcknowledgement)({type:Xv,txnId:r});for(let[o,c]of Wd)o<r&&((0,Is.trace)("Txn",r,"waiting for txn",o),await c)}Wd.delete(r),(0,Is.trace)("Proceeding with txn id",r),qo=r-1,GT(e,t,r,s)})();return Wd.set(r,i),i}(0,Is.trace)("Notifying with txn id",r,s),qo=r;try{n.auditStore.resetReadTxn()}catch(i){throw i.message+=" in "+e,i}e:for(let i of t){let[o,c,u]=i,l=n[c];if(!l)continue;(0,zv.writeKey)(i,iee,0);let _=i[3];_&&(i.length=3);let d,E=To(u),f;do{let h=l.get(E);if(h){for(let p of h)if(!(f&&!p.includeDescendants)){if(p.startTime>=o){(0,Is.info)("omitting",u,p.startTime,o);continue}try{if(p.crossThreads===!1&&!s)continue;if(d===void 0){let R=n.auditStore.get(i);if(!R||(d=Fn(R,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}p.listener(u,d,o)}catch(R){console.error(R),(0,Is.info)(R)}}}if(E==null)break;let T=E.lastIndexOf?.("/",E.length-2);T>-1?E=E.slice(0,T+1):E=null,f=!0}while(!0)}}}function jv(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",({next:i,last:o,txnId:c})=>{let u,l=[];if(t)do{if(i.flag&nee)continue;let _;i.meta&&i.meta.store===t&&(_=i.meta.key)&&(typeof _[2]=="symbol"&&(_[2]=null),_.invalidated&&(_[3]=!0),l.push(_))}while(i!=o&&(i=i.next));l.length!==0&&((0,Ui.broadcast)({type:Jv,path:n,auditIds:l,txnId:c,start:u}),GT(n,l,c,!0))})}}var Is,Ui,zv,Jv,Xv,nee,Fo,iee,FT,qo,Wd,eB=pe(()=>{Is=U(x()),Ui=U(dt()),zv=require("ordered-binary");aa();Nc();jc();Jv="transaction",Xv="transaction-await",nee=67108864,iee=Buffer.alloc(4096);a(Zv,"addSubscription");FT=class extends ts{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"}}},Wd=new Map;a(GT,"notifyFromTransactionData");a(jv,"listenToCommits")});var Bp={};je(Bp,{coerceType:()=>Qd,makeTable:()=>Jd,setServerUtilities:()=>lee});function Jd(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:l,dbisDB:_}=e,{expirationMS:d,audit:E,trackDeletes:f}=e,{attributes:h}=e;h||(h=[]),jv(i,u);let T=0,p,R,O,q={},$,w,I,D;for(let Z of h)(Z.assignCreatedTime||Z.name==="__createdtime__")&&($=Z),(Z.assignUpdatedTime||Z.name==="__updatedtime__")&&(w=Z),Z.expiresAt&&(I=Z),Z.isPrimaryKey&&(q=Z);let z;E&&ZT();class M extends mt{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=h;static expirationTimer;static createdTimeProperty=$;static updatedTimeProperty=w;static get expirationMS(){return d}static dbisDB=_;static schemaDefined=l;static sourcedFrom(S,N){if(N&&(this.sourceOptions=N,N.expiration&&this.setTTLExpiration(N.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(S,this.sourceOptions);else if(S.mergeSource)this.Source=S.mergeSource(this.Source,this.sourceOptions);else throw new Error("Can not assign multiple sources to a table with no source providing a (static) mergeSource method");else this.Source=S;return R=S&&S.get&&(!S.get.reliesOnPrototype||S.prototype.get),(async()=>{let L=!1,b=a(async C=>{let H=C.value,k=C.table?Be[c][C.table]:M;if(c===Xr.SYSTEM_SCHEMA_NAME&&(C.table===Xr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||C.table===Xr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),C.id===void 0&&(C.id=H[k.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));let P=await k.getResource(C.id,C,tu);switch(C.type){case"put":return P._writeUpdate(H,tu);case"delete":return P._writeDelete(tu);case"publish":return P._writePublish(H,tu);case"invalidate":return P.invalidate(tu);default:Mi.error("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=S.subscribe&&(!S.subscribe.reliesOnPrototype||S.prototype.subscribe);C&&f==null&&(f=!0);let H=S.subscribeOnThisThread?S.subscribeOnThisThread((0,Li.getWorkerIndex)()):(0,Li.getWorkerIndex)()===0,k=C&&H&&await S.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(k)for await(let P of k)try{if(!(P.type==="transaction"?P.writes[0]:P)){console.error("Bad subscription event");continue}let X=Ke(P,()=>{if(P.type==="transaction"){let J=[];for(let Y of P.writes){Y[Oe]=P;try{J.push(b(Y))}catch(j){throw j.message+=" writing "+JSON.stringify(Y)+" of event "+JSON.stringify(P),j}}return Promise.all(J)}else if(P.type==="define_schema"){let J=this.attributes.slice(0),Y;for(let j of P.attributes)J.find(Le=>Le.name===j.name)||(J.push(j),Y=!0);Y&&(st({table:n,database:c,attributes:J,origin:"cluster"}),nu.signalSchemaChange(new iu.SchemaEventMsg(process.pid,Xr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return b(P)});P.onCommit&&(X?.then&&L&&nu.signalUserChange(new iu.UserEventMsg(process.pid)),X?.then?X.then(P.onCommit):P.onCommit())}catch(G){console.error("error in subscription handler",G)}}catch(C){console.error(C)}})(),this}static getResource(S,N,L){let b=super.getResource(S,N,L);if(S!=null)try{if(b.hasOwnProperty(ue))return b;let C=b._txnForRequest();if(typeof S=="object"&&S&&!Array.isArray(S))throw new Error(`Invalid id ${JSON.stringify(S)}`);let H,k,G={transaction:C?.getReadTxn()},X;return Lt(S,N,G,b,L?.allowInvalidated,(J,Y)=>{Y?k(Y):(b[ue]=J?.value,b[jt]=J?.version,X=!0,H?.(b))}),X?b:new Promise((J,Y)=>{H=J,k=Y})}catch(C){throw C.message.includes("Unable to serialize object")&&(C.message+=": "+JSON.stringify(S)),C}return b}static setTTLExpiration(S){(0,Li.getWorkerIndex)()===0&&(d=S*1e3,this.expirationTimer&&clearInterval(this.expirationTimer),this.expirationTimer=setInterval(()=>{if(this.primaryStore.rootStore.status!=="open")return clearInterval(this.expirationTimer);for(let{key:N,value:L,version:b}of this.primaryStore.getRange({start:!1,versions:!0}))b<Date.now()-d&&b>0&&L?.__invalidated__==null&&M.evict(N,L,b)},d).unref())}static enableAuditing(){E=!0,ZT(),M.audit=!0}static coerceId(S){return S===""?null:Qd(S,q)}static async dropTable(){if(delete Be[c][n],c===o){for(let S in r)_.remove(M.tableName+"/"+S),r[S].drop();_.remove(M.tableName+"/"),i.drop(),await _.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));nu.signalSchemaChange(new iu.SchemaEventMsg(process.pid,Xr.OPERATIONS_ENUM.DROP_TABLE,c,n))}static Source;static get(S,N){return S&&typeof S=="object"&&!Array.isArray(S)&&S.url===""?{recordCount:this.getRecordCount(),records:"./",name:n,database:c,attributes:h}:super.get(S,N)}get(S){if(typeof S=="string")return this.getProperty(S);if(this[Gs])return this.search(S);if(S?.property)return this.getProperty(S.property);if(this.doesExist()||this[Oe]?.hasOwnProperty("returnNonexistent")&&this[Oe].returnNonexistent)return this}static allowRead(S,N){if(!S)return!1;let L=S.role.permission;if(L.super_user)return!0;if(L[n]?.read){let b=L[n].attribute_permissions;if(b){N||(N={});let C=N.select;if(C){let H=xT(b,"read");N.select=C.filter(k=>H[k])}else N.select=b.filter(H=>H.read).map(H=>H.attribute_name);return N}else return!0}}allowUpdate(S,N,L){if(!S)return!1;let b=S.role.permission;if(b.super_user)return!0;if(b[n]?.update){let C=b[n].attribute_permissions;if(C){let H=xT(C,"update");for(let k in N)if(!H[k])return!1;if(L)for(let k of C){let P=k.attribute_name;!k.update&&!(P in N)&&(N[P]=this.getProperty(P))}}else return!0}}allowCreate(S,N){return this.allowUpdate(S,{})}static allowCreate(S,N){if(!S)return!1;let L=S.role.permission;if(L.super_user)return!0;if(L[n]?.insert){let b=L[n].attribute_permissions;if(b){let C=xT(b,"insert");for(let H in N)if(!C[H])return!1}else return!0}}static allowDelete(S){if(!S)return!1;let N=S.role.permission;if(N.super_user||N[n]?.delete)return!0}update(S,N){if(!this._txnForRequest())throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;let b;if(typeof S=="object"&&S){if(N)for(let C in this[ue])S[C]===void 0&&(S[C]=void 0);b=this[ht],b&&(S=Object.assign(b,S)),this[ht]=b=S}return!this[ue]&&t&&!(b||(b=this[ht]))?.[t]&&(b||(b=this[ht]=Object.create(null)),b[t]=this[ce]),this._writeUpdate(this),this}invalidate(S){this._txnForRequest().addWrite({key:this[ce],store:i,invalidated:!0,lastVersion:this[jt],nodeName:this[Oe]?.nodeName,commit:(L,b)=>{if(b)return;let C={__invalidated__:L};for(let G in r)C[G]=this.getProperty(G);let H=M.Source,k,P=this[ce];return S?.isNotification||H?.shouldReceiveInvalidations&&(k=H.invalidate(P,this)),i.put(this[ce],C,L),{type:E&&"invalidate",[Ci]:k}}})}static evict(S,N,L){let b=this.Source;if(b?.get&&(!b.get.reliesOnPrototype||b.prototype.get)){let C;if(!N){let H=i.getEntry(S);if(!H)return;N=H.value,L=H.version}if(N)for(let H in r)C||(C={__invalidated__:0}),C[H]=N[H];return C?i.put(S,C,L,L):i.remove(S,L)}else return i.remove(S,L)}lock(){throw new Error("Not yet implemented")}static operation(S,N){return S.table||=n,S.schema||=c,uB.operation(S,N)}async put(S){this.update(S,!0)}_writeUpdate(S,N){let L=this._txnForRequest();if(this[ce]===void 0)throw new Error("Can not save record without an id");let b=this[ue],C,H,k=this[ce];b||(this[ue]={}),L.addWrite({key:k,store:i,lastVersion:this[jt],nodeName:this[Oe]?.nodeName,validate:()=>{this.validate(S)},commit:(P,G)=>{let X;if(G){if(C)return;let Y=i.getEntry(k);b=Y?.value;let j=this[Oe];j&&Y?.version>(j.lastModified||0)&&(j.lastModified=Y.version)}if(!H){if(H=!0,N?.isNotification)S=ua(S);else{if(S[sB]&&(C=!Du(S),C))return;t&&S[t]!==k&&(S[t]=k),w&&(S[w.name]=w.type==="Date"?new Date(P):w.type==="String"?new Date(P).toISOString():P),$&&(b?S[$.name]=b[$.name]:S[$.name]=$.type==="Date"?new Date(P):$.type==="String"?new Date(P).toISOString():P),S=ua(S);let Y=M.Source;Y?.put&&(!Y.put.reliesOnPrototype||Y.prototype.put)&&(X=Y.put(k,S,this))}if(S[ue])throw new Error("Can not assign a record with a record property");this[ue]=S}if(Mi.trace("Checking timestamp for put",k,this[jt]>P,this[jt],P),this[jt]>P)return E&&{type:"put",value:i.encoder.encode(S)};let J=i.encoder.encode(S);return i.put(this[ce],(0,Go.asBinary)(J),P),Ne(this[ce],b,S),b===null&&!G&&Cs(-1),{type:E&&"put",value:J,[Ci]:X}}})}async delete(S){return typeof S=="string"?this.deleteProperty(S):this[ue]?this._writeDelete(S):!1}_writeDelete(S){let N=this._txnForRequest(),L,b=this[ce],C;return N.addWrite({key:b,store:i,lastVersion:this[jt],nodeName:this[Oe]?.nodeName,commit:(H,k)=>{let P=this[ue];if(k){let G=i.getEntry(b);P=G?.value;let X=this[Oe];X&&G?.version>(X.lastModified||0)&&(X.lastModified=G.version)}if(!L&&(L=!0,!S?.isNotification)){let G=M.Source;G?.delete&&(!G.delete.reliesOnPrototype||G.prototype.delete)&&(C=G.delete(b,this))}if(!(this[jt]>H))return Ne(this[ce],P),Mi.trace("Write delete entry",E||f,H),E||f?(i.put(this[ce],null,H),E||XT(),k||Cs(1)):i.remove(this[ce]),{type:E&&"delete",[Ci]:C}}}),!0}search(S){let N=this._txnForRequest();if(!S)throw new Error("No query provided");let L=S.reverse===!0,b=S.conditions;b?b.length===void 0&&(b=Array.from(b)):b=Array.isArray(S)?S:S[Symbol.iterator]?Array.from(S):[],this[ce]&&(b=[{attribute:null,comparator:"prefix",value:this[ce]}].concat(b));for(let Y of b){let j=Y[0]??Y.attribute,Le=j==null?q:h.find(_n=>_n.name==j);if(Le)Le.type&&(Y[1]===void 0?Y.value=C(Y.value,Le):Y[1]=C(Y[1],Le));else if(j!=null)throw(0,Di.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function C(Y,j){return Array.isArray(Y)?Y.map(Le=>Qd(Le,j)):Qd(Y,j)}a(C,"coerceTypedValues"),b.length>1&&(b=(0,aB.sortBy)(b,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===ru.SEARCH_TYPES.EQUALS){let Le=Y[0]??Y.attribute;if(Le==null||Le===t)Y.estimated_count=1;else{let _n=r[Le];Y.estimated_count=_n?_n.getValuesCount(Y[1]??Y.value):1/0}}else j===ru.SEARCH_TYPES.CONTAINS||j===ru.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===ru.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=aee:Y.estimated_count=oee}return Y.estimated_count}));let H=N.getReadTxn();H.use();let k=S.select,P=b[0],G;if(!P)G=i.getRange(L?{end:!1,reverse:!0,transaction:H,lazy:k?.length<4}:{start:!1,transaction:H,lazy:k?.length<4}).map(({value:Y})=>Y?new Promise(j=>setImmediate(()=>j(Y))):Go.SKIP);else{let Y=PE(P,H,L,M,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=b.slice(1).map(vE);G=J(Y,j)}else{for(let Le=1;Le<b.length;Le++){let _n=b[Le],iE=PE(_n,H,L,M,S.allowFullScan);Y=Y.concat(iE)}let j=new Set;Y=Y.filter(Le=>j.has(Le)?!1:(j.add(Le),!0)),G=J(Y)}}(S.offset||S.limit!==void 0)&&(G=G.slice(S.offset,S.limit!==void 0?(S.offset||0)+S.limit:void 0)),G.onDone=()=>{H.done()};let X=this[Oe];function J(Y,j){let Le=j?.length,_n={transaction:H,lazy:Le>0||k?.length<4,alwaysPrefetch:!0};return Y.map(iE=>new Promise(oE=>Lt(iE,X,_n,null,!1,LB=>{let aE=LB?.value;if(!aE)return oE(Go.SKIP);for(let cE=0;cE<Le;cE++)if(!j[cE](aE))return oE(Go.SKIP);oE(aE)})))}return a(J,"idsToRecords"),G}async subscribe(S){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||st({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=Zv(M,this[ce]??null,function(H,k,P){try{this.send({id:H,timestamp:P,...k})}catch(G){console.error(G)}},S.startTime,this[Gs]),L=this[ce],b=S.previousCount;b>1e3&&(b=1e3);let C=S.startTime;if(this[Gs]){if(C){if(b)throw new Di.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:H,value:k}of u.getRange({start:[C,Number.MAX_SAFE_INTEGER]})){let[P,G,X]=H;if(H.length>3&&(X=H.slice(2)),G!==s)continue;let J=Fn(k,i);(L==null||oB(L,X))&&N.send({id:X,timestamp:P,...J}),N.startTime=P}}else if(b){let H=[];for(let{key:k,value:P}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[G,X,J]=k;if(k.length>3&&(J=k.slice(2)),X!==s)continue;if(L==null||oB(L,J)){let Y=Fn(P,i);if(H.push({id:J,timestamp:G,...Y}),--b<=0)break}}catch(G){Mi.error("Error getting history entry",k,G)}for(let k=H.length;k>0;)N.send(H[--k]);H[0]&&(N.startTime=H[0].timestamp)}else if(!S.omitCurrent)for(let{key:H,value:k,version:P}of i.getRange({start:L??!1,end:L==null?void 0:[L,cB.MAXIMUM_KEY],versions:!0}))k&&N.send({id:H,timestamp:P,value:k})}else{b&&!C&&(C=0);let H=this[jt];if(C<H){let k=[],P=H;do{let G=[P,s,L],X=u.get(G);if(X){S.omitCurrent=!0;let J=Fn(X,i);k.push({id:L,timestamp:P,...J}),P=J.lastVersion}else break;b&&b--}while(P>C&&b!==0);for(let G=k.length;G>0;)N.send(k[--G]);N.startTime=H}!S.omitCurrent&&this.doesExist()&&N.send({id:L,timestamp:this[jt],value:this})}return S.listener&&N.on("data",S.listener),N}doesExist(){return!!this[ue]}async publish(S,N){this._writePublish(S,N)}_writePublish(S,N){let L=this._txnForRequest(),b=this[ce]||null,C,H;L.addWrite({store:i,key:b,lastVersion:this[jt],nodeName:this[Oe]?.nodeName,validate:()=>{this.validate(S)},commit:(k,P)=>{if(this.validate(S),!H&&(H=!0,!N?.isNotification)){let J=M.Source;J?.publish&&(!J.publish.reliesOnPrototype||J.prototype.publish)&&(C=J.publish(b,S,this))}let G=P>0?i.get(b):this[ue];G===void 0&&!P&&(E||f)&&(E||XT(),Cs(1));let X={type:"message",value:i.encoder.encode(S),[Ci]:C};return!L.hasWrittenTime&&this[jt]>k&&(k=X.newTxnTime=this[jt]+.001),i.put(b,G??null,k),X}})}_txnForRequest(){let S=this[Oe],N=S?.transaction;if(N){let L;return(L=N?.find(b=>b.lmdbDb?.path===i.path))||N.push(L=new eu(i,S.user,u)),L}else return new Kd(i,S.user,u)}validate(S){let N;for(let L=0,b=h.length;L<b;L++){let C=h[L];if(C.type){let H=S[C.name];if(H!=null)switch(C.type){case"Int":case"Float":(typeof H!="number"||C.type==="Int"&&H!==Math.floor(H))&&(N||(N=[])).push(`Property ${C.name} must be an ${C.type==="Int"?"integer":"number"}`);break;case"ID":typeof H=="string"||H?.length>0&&H.every?.(k=>typeof k=="string")||(N||(N=[])).push(`Property ${C.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof H!="string"&&(N||(N=[])).push(`Property ${C.name} must be a string`)}}C.required&&S[C.name]==null&&(N||(N=[])).push(`Property ${C.name} is required`)}if(N)throw new Di.ClientError(N.join(". "))}getUpdatedTime(){return this[jt]}wasLoadedFromSource(){return R?!!this[nB]:void 0}static async addAttributes(S){let N=h.slice(0);for(let L of S){if(!L.name)throw new Di.ClientError("Attribute name is required");if(L.name.match(/[`/]/))throw new Di.ClientError("Attribute names cannot include backticks or forward slashes");N.push(L)}return st({table:n,database:c,schemaDefined:l,attributes:N}),M.indexingOperation}static async removeAttributes(S){let N=h.filter(L=>!S.includes(L.name));return st({table:n,database:c,schemaDefined:l,attributes:N}),M.indexingOperation}static getRecordCount(){let S=0;for(let{key:N,value:L}of i.getRange({end:!1}))S++,N[0]?.description==="deletions"&&(S+=L||0);return i.getStats().entryCount-S}static updatedAttributes(){Mu(this,this)}static async deleteHistory(S=0){let N;for(let{key:L,value:b}of u.getRange({start:[0,0],end:[S,0]})){await new Promise(P=>setImmediate(P));let[C,H,k]=L;L.length>3&&(k=L.slice(2)),H===s&&(N=i.remove(k))}await N}static async*getHistory(S=0,N=1/0){for(let{key:L,value:b}of u.getRange({start:[S,0],end:[N,0]})){await new Promise(G=>setImmediate(G));let[C,H,k]=L;if(L.length>3&&(k=L.slice(2)),H!==s)continue;let P=Fn(b,i);P.id=k,P.timestamp=C,yield P}}static async getHistoryOfRecord(S){let N=[],L=i.getEntry(S);if(!L)return N;let b=L.version,C=0;do{await new Promise(P=>setImmediate(P));let H=[b,s,S],k=u.get(H);if(k){let P=Fn(k,i);P.timestamp=b,N.push(P),b=P.lastVersion}else break}while(C<1e3);return N.reverse()}static cleanup(){z?.remove()}}M.updatedAttributes();let ee=M.prototype;return ee[sB]=!0,d&&M.setTTLExpiration(d/1e3),I&&DB(),M;function Ne(Z,S,N){let L;for(let b in r){let C=r[b],H=C.isIndexing,k=N?.[b],P=S?.[b];if(k===P&&!H)continue;L=!0;let G=(0,su.getIndexedValues)(P);if(G){tB&&C.prefetch(G.map(X=>({key:X,value:Z})),iB);for(let X=0,J=G.length;X<J;X++)C.remove(G[X],Z)}if(G=(0,su.getIndexedValues)(k),G){tB&&C.prefetch(G.map(X=>({key:X,value:Z})),iB);for(let X=0,J=G.length;X<J;X++)C.put(G[X],Z)}}return L}a(Ne,"updateIndices");function Lt(Z,S,N,L,b,C){let H=a(()=>{let k=N.transaction;if(k?.isDone)throw new Error("Invalid read transaction");let P;k&&!k.hasRunLoadRecord&&(P=!0,k.hasRunLoadRecord=!0);let G;try{G=i.getEntry(Z,N)}catch(j){throw j.message+=". The read txn is "+JSON.stringify(k)+" first loadRecord: "+P,console.error(j),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),j}let X,J,Y;if(G?(S&&G?.version>(S.lastModified||0)&&(S.lastModified=G.version),J=G.version,X=G.value,(J<0||!X||typeof X.__invalidated__=="number"||d&&J<Date.now()-d)&&(Y=!0)):Y=!0,R&&sm(Y,"cache-hit",n),Y&&!b&&(L&&(L[nB]=!0),R))return jr(Z,X,J,S).then(j=>{if(j?.value?.[ue])throw new Error("Can not assign a record with a record property");S&&j?.version>(S.lastModified||0)&&(S.lastModified=j.version),C(j)},j=>{C(null,j)});if(G?.value?.[ue])throw new Error("Can not assign a record with a record property");C(G)},"whenPrefetched");if(!N.alwaysPrefetch&&(Z==null||i.cache?.get(Z)))return H();i.prefetch([Z],H)}a(Lt,"loadRecord");function rr(){D=new Set,(0,Li.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let S of D)S()}a(Z,"onCommit")}a(rr,"setupCommitListeners");async function jr(Z,S=null,N,L){if(N<0){let P;return D||rr(),await new Promise(G=>{let X,J=a(()=>{if(P=i.getEntry(Z),!P||P.version>0){if(clearTimeout(X),D.delete(J),typeof P?.value?.__invalidated__=="number")return G(jr(Z,P.value,P.version,L));G(P)}},"listener");D.add(J),X=setTimeout(()=>{D.delete(J),G(jr(Z,P?.value,void 0,L))},1e4).unref()})}let b=S?.__invalidated__,C=-(N||1);i.put(Z,S,C,N);let H={requestContext:L,replacingRecord:S,replacingVersion:N},k=L?.responseHeaders;try{let P=performance.now(),G=await M.Source.get(Z,H),X=performance.now()-P;ui(X,"cache-resolution",n),k&&k.append("Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`);let J=H.lastModified||N;(!J||d&&J<Date.now()-d)&&(J=(0,su.getNextMonotonicTime)());let j=Ne(Z,S,G)&&N||b>0;return G?(t&&(G[t]=Z),typeof G.toJSON=="function"&&(G=G.toJSON()),i.put(Z,G,J,C)):i.remove(Z,C),j&&E&&u.put([J,s,Z],Yd(b,null,G?{type:"put",value:i.encoder.encode(G)}:{type:"delete"})),{version:J,value:G}}catch(P){throw i.put(Z,S,N,C),P}}a(jr,"getFromSource");function Cs(Z){T||(T=i.get([rB,kT.threadId])||0),T+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([rB,kT.threadId],T)},50))}a(Cs,"recordDeletion");function XT(){p||(p=setTimeout(()=>{if(p=null,i.rootStore.status==="open"){for(let{key:Z,value:S}of i.getRange({start:!0}))if(S===null){let N=i.getEntry(Z);N?.value===null&&i.remove(Z,N.version),Cs(-1)}}},M.getRecordCount()*100+uee).unref())}a(XT,"enqueueDeletionCleanup");function ZT(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),Cs(-1)})}a(ZT,"addDeleteRemoval");function DB(){(0,Li.getWorkerIndex)()===0&&setInterval(async()=>{try{let Z=I.name,S=r[Z];if(!S)throw new Error(`expiresAt attribute ${I} must be indexed`);for(let{value:N}of S.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let L=i.getEntry(N);L?.value?.[Z]<Date.now()&&M.evict(N,L.value,L.version),await new Promise(b=>setImmediate(b))}}catch(Z){Mi.error("Error in evicting old records",Z)}},cee).unref()}a(DB,"runRecordExpirationEviction")}function xT(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 iB(){}function lee(e){uB=e}function Qd(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!_ee.test(e)&&(e+="Z"),new Date(e)):r?e:(0,zd.autoCast)(e)}function oB(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}var Xr,Go,su,aB,kT,ru,ou,Di,nu,iu,Mi,cB,Li,zd,uB,oee,aee,cee,tB,rB,jt,sB,dde,nB,tu,uee,_ee,dd=pe(()=>{Xr=U(A()),Go=require("lmdb"),su=U(qt()),aB=require("lodash"),kT=require("worker_threads");rs();Qv();ru=U(ke()),ou=U(Q());eB();Di=U(W()),nu=U(Ks()),iu=U(xr());Ee();Hu();Mi=U(x());vu();Wn();cB=require("ordered-binary"),Li=U(dt());jc();zd=U(V());ro();oee=1e8,aee=1e7,cee=6e4;ou.initSync();tB=ou.get(Xr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),rB=Symbol.for("deletions"),jt=Symbol.for("version"),sB=Symbol.for("incremental-update"),dde=Symbol("source-resource"),nB=Symbol("load-from-source"),tu={isNotification:!0,allowInvalidated:!0},uee=(0,zd.convertToMS)(ou.get(Xr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Jd,"makeTable");a(xT,"attributesAsObject");a(iB,"noop");a(lee,"setServerUtilities");_ee=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Qd,"coerceType");a(oB,"isDescendantId")});var be={};je(be,{database:()=>Fa,databases:()=>Be,dropDatabase:()=>Vh,dropTableMeta:()=>See,getDatabases:()=>Vr,getTables:()=>dee,onUpdatedTable:()=>dT,readMetaDb:()=>au,resetDatabases:()=>Eee,table:()=>st,tables:()=>or});function dee(){return eE||Vr(),or||{}}function Vr(){if(eE)return Be;eE=!0,$o=new Map;let e=(0,yt.getHdbBasePath)()&&(0,Pe.join)((0,yt.getHdbBasePath)(),er.DATABASES_DIR_NAME),t=(0,yt.get)(er.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,yt.get)(er.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,mr.existsSync)(e)?e:(0,Pe.join)((0,yt.getHdbBasePath)(),er.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,mr.existsSync)(e))for(let r of(0,mr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Pe.basename)(r.name,".mdb");r.isFile()&&(0,Pe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&au((0,Pe.join)(e,r.name),null,s)}if((0,mr.existsSync)((0,Vo.getBaseSchemaPath)())){for(let r of(0,mr.readdirSync)((0,Vo.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Pe.join)((0,Vo.getBaseSchemaPath)(),r.name),n=(0,Pe.join)((0,Vo.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,mr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Pe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Pe.join)(n,i.name);au((0,Pe.join)(s,i.name),(0,Pe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,mr.existsSync)(n))for(let o of(0,mr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Pe.extname)(o.name).toLowerCase()===".mdb"&&au((0,Pe.join)(n,o.name),(0,Pe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Pe.join)(c.path,(0,Pe.basename)(o+".mdb"));(0,mr.existsSync)(u)&&au(u,o,r,null,!0)}}for(let r in Be){let s=$o.get(r);if(s){let n=Be[r];r.includes("delete")&&Me.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Me.trace(`delete table class ${i}`),delete n[i])}else if(delete Be[r],r==="data"){for(let n in or)delete or[n];delete or[tE]}}return $o=null,Be}}function Eee(){eE=!1;for(let[,e]of Gn)e.needsDeletion=!0;Vr();for(let[e,t]of Gn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),Gn.delete(e));return Be}function au(e,t,r=YT,s,n){let i=new VT.default(e,!1);e.includes("delete")&&Me.trace(`reading meta data from ${e}`);try{let o=Gn.get(e);o?o.needsDeletion=!1:(o=(0,Xd.open)(i),Gn.set(e,o));let c=new Pi.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(xo.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,mr.existsSync)(s)&&(i.path=s,l=(0,Xd.open)(i),l.isLegacy=!0):l=HT(o));let _=EB(r),d=_[tE],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[T,p]=f.toString().split("/");e.includes("delete")&&Me.trace(`read key ${f}`),p===""?p=h.name:p||(p=T,T=t,h.name||(h.name=p,h.indexed=!h.is_hash_attribute)),d?.add(T);let R=E.get(T);R||E.set(T,R={attributes:[]}),(p==null||h.is_hash_attribute)&&(R.primary=h),p!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:T,primary:p}=h;if(!p){for(let M of T)if(M.is_hash_attribute||M.isPrimaryKey){p=M;break}if(!p)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(T)}`)}let R=_[f],O={},q=[],$,w,I=typeof p.audit=="boolean"?p.audit:(0,yt.get)(er.CONFIG_PARAMS.LOGGING_AUDITLOG),D=p.trackDeletes,z=p.expiration;if(R)O=R.indices,q=R.attributes,R.schemaVersion++;else{$=p.tableId,$?$>=(u.get(ko)||0)&&u.putSync(ko,$+1):(p.tableId=$=u.get(ko),$||($=1),u.putSync(ko,$+1),u.putSync(p.key,p));let M=new Pi.default(!p.is_hash_attribute,p.is_hash_attribute);Me.trace(`openDB ${p.key} from ${r}`),w=o.openDB(p.key,M),w.rootStore=o,w.tableId=$}for(let M of T){M.attribute=M.name;try{if(!M.is_hash_attribute&&(M.indexed||M.attribute&&!M.name)){if(!O[M.name]){let Ne=new Pi.default(!M.is_hash_attribute,M.is_hash_attribute);Me.trace(`openDB ${M.key} from ${r}`),O[M.name]=o.openDB(M.key,Ne)}let ee=q.find(Ne=>Ne.name===M.name);ee?q.splice(q.indexOf(ee),1,M):q.push(M)}}catch(ee){Me.error("Error trying to update attribute",M,q,O,ee)}}if(!R){Me.trace(`creating table class ${f}`,Object.keys(_)),R=fB(_,f,Jd({primaryStore:w,auditStore:l,audit:I,expirationMS:z&&z*1e3,trackDeletes:D,tableName:f,tableId:$,primaryKey:p.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:O,attributes:T,schemaDefined:p.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let M of KT)M(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function EB(e){let t=Be[e];if(t||(e==="data"?t=Be[e]=or:e==="system"?Object.defineProperty(Be,"system",{value:t=Object.create(null),configurable:!0}):t=Be[e]=Object.create(null)),$o&&!$o.has(e)){let r=new Set;t[tE]=r,$o.set(e,r)}return t}function fB(e,t,r){return e[t]=r,r}function Fa({database:e,table:t}){e||(e=YT),Vr();let r=EB(e),s=(0,Pe.join)((0,yt.getHdbBasePath)(),er.DATABASES_DIR_NAME),n=t&&(0,yt.get)(er.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,yt.get)(er.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,yt.get)(er.CONFIG_PARAMS.STORAGE_PATH)||((0,mr.existsSync)(s)?s:(0,Pe.join)((0,yt.getHdbBasePath)(),er.LEGACY_DATABASES_DIR_NAME));let i=(0,Pe.join)(s,(n?t:e)+".mdb"),o=Gn.get(i);if(!o){let c=new VT.default(i,!1);o=(0,Xd.open)(c),Gn.set(i,o)}return o}async function Vh(e){if(!Be[e])throw new Error("Schema does not exist");let t=Be[e];for(let r in t){let n=t[r].primaryStore.rootStore;Gn.delete(n.path),n.status==="open"&&(await n.close(),await lB.remove(n.path))}if(e==="data"){for(let r in or)delete or[r];delete or[tE]}delete Be[e]}function st({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=YT);let u=Fa({database:t,table:e}),l=Be[t],_=l?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let d,E,f,h;o==null&&(o=!0);let T=new Pi.default(!1);for(let w of s)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let p,R;if(_){if(Me.trace(`${e} table already exists`),d=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);_.attributes.splice(0,_.attributes.length,...s)}else{let w=u.auditStore;w||(w=HT(u)),E=s.find(M=>M.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,yt.get)(er.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),Me.trace(`${e} table loading, opening primary store`);let I=new Pi.default(!1,!0),D=e+"/";Me.trace(`openDB ${D} from ${t}`);let z=u.openDB(D,I);z.rootStore=u,Me.trace(`openDB ${xo.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(xo.INTERNAL_DBIS_NAME,T),z.tableId=h.get(ko),z.tableId||(z.tableId=1),h.putSync(ko,z.tableId+1),E.tableId=z.tableId,_=fB(l,e,Jd({primaryStore:z,auditStore:w,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:o,dbisDB:h})),_.schemaVersion=1,p=!0,$(),h.put(D,E)}Me.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Me.trace(`openDB ${xo.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(xo.INTERNAL_DBIS_NAME,T)),_.dbisDB=h;let O=[];for(let{key:w,value:I}of h.getRange({start:!0})){let[D,z]=w.toString().split("/");if(z===""&&(z=I.name),z){if(D!==e)continue}else z=D;if(!s.find(ee=>ee.name===z)?.indexed&&I.indexed&&!I.isPrimaryKey){$(),p=!0,h.remove(w);let ee=_.indices[D];ee&&O.push(ee)}}Me.trace(`${e} table loading, comparing atributes`);let q=[];try{for(let w of s||[]){let I=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:I,configurable:!0});let D=h.get(I);if(w.isPrimaryKey){if(D=D||h.get(I=e+"/"),n===!0&&!_.audit||(+r||void 0)!==(+D.expiration||void 0)){let M=Object.assign({},D);n&&(_.enableAuditing(),M.audit=!0),r&&(M.expiration=+r),p=!0,$(),h.put(I,M)}continue}D?.attribute&&!D.name&&(D.indexed=!0);let z=!D||D.type!==w.type||D.indexed!==w.indexed||JSON.stringify(D.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(D.elements)!==JSON.stringify(w.elements);if(w.indexed){let M=new Pi.default(!0,!1);Me.trace(`openDB ${I} from ${t}`);let ee=u.openDB(I,M);(z||D.indexingPID&&D.indexingPID!==process.pid||D.restartNumber<cu.workerData?.restartNumber)&&(p=!0,$(),D=h.get(I),(z||D.indexingPID&&D.indexingPID!==process.pid||D.restartNumber<cu.workerData?.restartNumber)&&(p=!0,w.lastIndexedKey=D?.lastIndexedKey||!1,w.indexingPID=process.pid,ee.isIndexing=!0,Object.defineProperty(w,"dbi",{value:ee}),q.push(w)),h.put(I,w)),f[w.name]=ee}else z&&(p=!0,$(),h.put(I,w))}}finally{R&&R()}if(p&&(_.schemaVersion++,_.updatedAttributes()),Me.trace(`${e} table loading, running index`),q.length>0||O.length>0?_.indexingOperation=mee(_,q,O):p&&Zd.signalSchemaChange(new jd.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,p)for(let w of KT)w(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Me.trace(`${e} table loaded`),_;function $(){R||u.transactionSync(()=>({then(w){R=w}}))}a($,"startTxn")}async function mee(e,t,r){try{let s=e.schemaVersion;await Zd.signalSchemaChange(new jd.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:l,value:_,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(_){if(u++,n=e.primaryStore.ifVersion(l,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,T=(0,_B.getIndexedValues)(_[h]);if(T)for(let p=0,R=T.length;p<R;p++)f.dbi.put(T[p],l)}}),n.then(()=>u--,E=>{u--,Me.error(E)}),cu.workerData&&cu.workerData.restartNumber!==dB.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=l,e.dbisDB.put(E.key,E);if(i)return}u>fee?await n:u>hee&&await new Promise(E=>setImmediate(E))}for(let l of t)delete l.lastIndexedKey,delete l.indexingPID,l.dbi.isIndexing=!1,n=e.dbisDB.put(l.key,l)}await n,await Zd.signalSchemaChange(new jd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Me.error("Error in indexing",s)}}function See({table:e,database:t}){let r=Fa({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 dT(e){KT.push(e)}var yt,xo,Xd,Pe,mr,Vo,Pi,VT,er,lB,$T,_B,Zd,jd,cu,Me,dB,YT,tE,or,Be,ko,KT,eE,Gn,$o,fee,hee,Ee=pe(()=>{yt=U(Q()),xo=U(ke()),Xd=require("lmdb"),Pe=require("path"),mr=require("fs"),Vo=U(Ce());dd();Pi=U(xu()),VT=U(Vu()),er=U(A()),lB=U(require("fs-extra")),$T=require("../index"),_B=U(qt()),Zd=U(Ks()),jd=U(xr()),cu=require("worker_threads"),Me=U(x()),dB=U(dt());jc();YT="data",tE=Symbol("defined-tables");(0,yt.initSync)();or=Object.create(null),Be=Object.create(null);(0,$T._assignPackageExport)("databases",Be);(0,$T._assignPackageExport)("tables",or);ko=Symbol.for("next-table-id"),KT=[],Gn=new Map;a(dee,"getTables");a(Vr,"getDatabases");a(Eee,"resetDatabases");a(au,"readMetaDb");a(EB,"ensureDB");a(fB,"setTable");a(Fa,"database");a(Vh,"dropDatabase");a(st,"table");fee=1e3,hee=10;a(mee,"runIndexing");a(See,"dropTableMeta");a(dT,"onUpdatedTable")});var V=m((gde,wB)=>{"use strict";var xn=require("path"),TB=require("fs-extra"),tr=x(),hB=require("fs-extra"),rE=require("os"),pee=require("net"),Tee=require("recursive-iterator"),xe=A(),Ree=DR(),mB=require("papaparse"),sE=require("moment"),{inspect:gee}=require("util"),SB=require("is-number"),Rde=require("lodash"),Aee=require("minimist"),Oee=require("https"),Nee=require("http"),{hdb_errors:nE}=W(),bee=/^((\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)))$/,RB=require("util").promisify(setTimeout),yee=100,Iee=5,wee="",Cee=4,pB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};wB.exports={isEmpty:Sr,isEmptyOrZeroLength:ws,arrayHasEmptyValues:Lee,arrayHasEmptyOrZeroLengthValues:Mee,buildFolderPath:Pee,isBoolean:gB,errorizeMessage:Uee,stripFileExtension:Bee,autoCast:Hee,autoCastJSON:AB,autoCastJSONDeep:QT,removeDir:qee,compareVersions:Fee,isCompatibleDataVersion:Gee,escapeRawValue:xee,unescapeValue:kee,stringifyProps:Vee,timeoutPromise:Yee,isClusterOperation:Wee,getClusterUser:zee,checkGlobalSchemaTable:Qee,getHomeDir:NB,getPropsFilePath:$ee,promisifyPapaParse:Jee,removeBOM:bB,createEventPromise:Xee,checkProcessRunning:Zee,checkSchemaTableExist:jee,checkSchemaExists:yB,checkTableExists:IB,getStartOfTomorrowInSeconds:ete,getLimitKey:tte,isObject:vee,isNotEmptyAndHasValue:Dee,autoCasterIsNumberCheck:OB,backtickASTSchemaItems:rte,isPortTaken:Kee,createForkArgs:ste,autoCastBoolean:nte,async_set_timeout:RB,getTableHashAttribute:ite,doesSchemaExist:ote,doesTableExist:ate,stringifyObj:cte,ms_to_time:ute,changeExtension:lte,getEnvCliRootPath:zT,noBootFile:_te,httpRequest:dte,transformReq:Ete,convertToMS:fte,PACKAGE_ROOT:xe.PACKAGE_ROOT};function Uee(e){return e instanceof Error?e:new Error(e)}a(Uee,"errorizeMessage");function Sr(e){return e==null}a(Sr,"isEmpty");function Dee(e){return!Sr(e)&&(e||e===0||e===""||gB(e))}a(Dee,"isNotEmptyAndHasValue");function ws(e){return Sr(e)||e.length===0||e.size===0}a(ws,"isEmptyOrZeroLength");function Lee(e){if(Sr(e))return!0;for(let t=0;t<e.length;t++)if(Sr(e[t]))return!0;return!1}a(Lee,"arrayHasEmptyValues");function Mee(e){if(ws(e))return!0;for(let t=0;t<e.length;t++)if(ws(e[t]))return!0;return!1}a(Mee,"arrayHasEmptyOrZeroLengthValues");function Pee(...e){try{return e.join(xn.sep)}catch{console.error(e)}}a(Pee,"buildFolderPath");function gB(e){return Sr(e)?!1:e===!0||e===!1}a(gB,"isBoolean");function vee(e){return Sr(e)?!1:typeof e=="object"}a(vee,"isObject");function Bee(e){return ws(e)?wee:e.slice(0,-Cee)}a(Bee,"stripFileExtension");function Hee(e){return Sr(e)||e===""||typeof e!="string"?e:pB[e]!==void 0?pB[e]:OB(e)===!0?Number(e):bee.test(e)?new Date(e):e}a(Hee,"autoCast");function AB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(AB,"autoCastJSON");function QT(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=QT(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=QT(r);s!==r&&(e[t]=s)}return e}else return AB(e)}a(QT,"autoCastJSONDeep");function OB(e){if(e.startsWith("0.")&&SB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&SB(e))}a(OB,"autoCasterIsNumberCheck");async function qee(e){if(ws(e))throw new Error(`Directory path: ${e} does not exist`);try{await hB.emptyDir(e),await hB.remove(e)}catch(t){throw tr.error(`Error removing files in ${e} -- ${t}`),t}}a(qee,"removeDir");function Fee(e,t){if(ws(e)){tr.info("Invalid current version sent as parameter.");return}if(ws(t)){tr.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 l=0;l<u;l++)if(r=parseInt(o[l],10)-parseInt(c[l],10),r)return r;return o.length-c.length}a(Fee,"compareVersions");function Gee(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Gee,"isCompatibleDataVersion");function xee(e){if(Sr(e))return e;let t=String(e);return t==="."?xe.UNICODE_PERIOD:t===".."?xe.UNICODE_PERIOD+xe.UNICODE_PERIOD:t.replace(xe.FORWARD_SLASH_REGEX,xe.UNICODE_FORWARD_SLASH)}a(xee,"escapeRawValue");function kee(e){if(Sr(e))return e;let t=String(e);return t===xe.UNICODE_PERIOD?".":t===xe.UNICODE_PERIOD+xe.UNICODE_PERIOD?"..":String(e).replace(xe.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(kee,"unescapeValue");function Vee(e,t){if(Sr(e))return tr.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+rE.EOL}!ws(s)&&s[0]===";"?r+=" "+s+n+rE.EOL:ws(s)||(r+=s+"="+n+rE.EOL)}catch{tr.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Vee,"stringifyProps");function NB(){let e;try{e=rE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(NB,"getHomeDir");function $ee(){let e=xn.join(NB(),xe.HDB_HOME_DIR_NAME,xe.BOOT_PROPS_FILE_NAME);return TB.existsSync(e)||(e=xn.join(__dirname,"../","hdb_boot_properties.file")),e}a($ee,"getPropsFilePath");function Yee(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Yee,"timeoutPromise");async function Kee(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=pee.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Kee,"isPortTaken");function Wee(e){try{return xe.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){tr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Wee,"isClusterOperation");function Qee(e,t){let r=(Ee(),se(be)).getDatabases();if(!r[e])return nE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return nE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Qee,"checkGlobalSchemaTable");function zee(e,t){if(Sr(t)){tr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Sr(e)||ws(e)){tr.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){tr.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){tr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(zee,"getClusterUser");function Jee(){mB.parsePromise=function(e,t,r){return new Promise(function(s,n){mB.parse(e,{header:!0,transformHeader:bB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Jee,"promisifyPapaParse");function bB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(bB,"removeBOM");function Xee(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;tr.info(`Got cluster status event response: ${gee(n)}`);try{i.cancel()}catch{tr.error("Error trying to cancel timeout.")}s(n)})})}a(Xee,"createEventPromise");async function Zee(e){let t=!0,r=0;do await RB(yee*r++),(await Ree.findPs(e)).length>0&&(t=!1);while(t&&r<Iee);if(t)throw new Error(`process ${e} was not started`)}a(Zee,"checkProcessRunning");function jee(e,t){let r=yB(e);if(r)return r;let s=IB(e,t);if(s)return s}a(jee,"checkSchemaTableExist");function yB(e){let{getDatabases:t}=(Ee(),se(be));if(!t()[e])return nE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(yB,"checkSchemaExists");function IB(e,t){let{getDatabases:r}=(Ee(),se(be));if(!r()[e][t])return nE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(IB,"checkTableExists");function ete(){let e=sE().utc().add(1,xe.MOMENT_DAYS_TAG).startOf(xe.MOMENT_DAYS_TAG).unix(),t=sE().utc().unix();return e-t}a(ete,"getStartOfTomorrowInSeconds");function tte(){return sE().utc().format("DD-MM-YYYY")}a(tte,"getLimitKey");function rte(e){try{let t=new Tee(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){tr.error("Got an error back ticking items."),tr.error(t)}}a(rte,"backtickASTSchemaItems");function ste(e){return[e]}a(ste,"createForkArgs");function nte(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(nte,"autoCastBoolean");function ite(e,t){let{getDatabases:r}=(Ee(),se(be)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(ite,"getTableHashAttribute");function ote(e){let{getDatabases:t}=(Ee(),se(be));return t()[e]!==void 0}a(ote,"doesSchemaExist");function ate(e,t){let{getDatabases:r}=(Ee(),se(be));return r()[e]?.[t]!==void 0}a(ate,"doesTableExist");function cte(e){try{return JSON.stringify(e)}catch{return e}}a(cte,"stringifyObj");function ute(e){let t=sE.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(ute,"ms_to_time");function lte(e,t){let r=xn.basename(e,xn.extname(e));return xn.join(xn.dirname(e),r+t)}a(lte,"changeExtension");function zT(){if(process.env[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Aee(process.argv);if(e[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(zT,"getEnvCliRootPath");var WT;function _te(){if(WT)return WT;let e=zT();zT()&&TB.pathExistsSync(xn.join(e,xe.HDB_CONFIG_FILE))&&(WT=!0)}a(_te,"noBootFile");function dte(e,t){let r;return e.protocol==="http:"?r=Nee:r=Oee,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(dte,"httpRequest");function Ete(e){if(!e.schema&&!e.database){e.schema=xe.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Ete,"transformReq");function fte(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(fte,"convertToMS")});var UB=m((Nde,CB)=>{"use strict";var JT=A(),hte=V(),mte=ms(),Zr=x(),Ste=E_(),pte=oc(),Ode=PS(),Tte=Ys(),Rte=lc(),gte=require("semver/functions/gte"),Ate=3e4,Ote=7;CB.exports=Nte;async function Nte(){try{Zr.notify("Starting update nodes. This process will attempt to update any node connections the need to be reestablished after a 4.0.0 upgrade"),await Tte.setSchemaDataToGlobalAsync();let e=await mte.getAllNodeRecords(),t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];n.system_info.hdb_version===JT.PRE_4_0_0_VERSION&&t.push(bte(n))}await Promise.allSettled(t),Zr.notify("Shutting down 4.0.0 clustering upgrade process")}catch(e){throw Zr.error(e),e}}a(Nte,"updateAllNodes");async function bte(e){try{let{name:t,subscriptions:r}=e;Zr.notify("Running 4.0.0 update on node:",t);let s=!1,n=0;for(;n<Ote;){let i=[];if(await Ste.buildNodeStatus(e,i),Zr.trace("Received status:",i[0].status,"from node:",t),i[0].status==="open"&&gte(i[0].system_info.hdb_version,"4.0.0")){Zr.notify("Received open status from node:",t,"calling add node");let o={operation:JT.OPERATIONS_ENUM.ADD_NODE,node_name:t,subscriptions:r};await pte(o,!0),Zr.notify("Successfully added node",t),s=!0;break}n=(Date.now()-e.__updatedtime__)/(1e3*60*60*24),Zr.trace("Update node has been running for",n,"days. Calling node status again for node:",t),await hte.async_set_timeout(Ate)}s||(Zr.error("4.0.0 node update was unable to update connection to node:",t),Zr.error("Removing following node record from hdb_nodes",e),await Rte({operation:JT.OPERATIONS_ENUM.REMOVE_NODE,node_name:t}))}catch(t){throw Zr.error(t),t}}a(bte,"updateNode")});var yte=UB();(async()=>{try{await yte()}catch(e){console.error("Error launching 4.0.0 node update"),console.error(e),process.exit(1)}})();