harperdb 4.2.0-alpha.11 → 4.2.0-alpha.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +32 -32
- package/bin/lite.js +19 -19
- package/index.js +0 -1
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +16 -16
- package/launchServiceScripts/launchNatsReplyService.js +16 -16
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +16 -16
- package/package.json +6 -6
- package/resources/analytics.d.ts +9 -0
- package/resources/databases.d.ts +7 -0
- package/server/jobs/jobProcess.js +16 -16
- package/server/threads/threadServer.js +19 -19
- package/utility/scripts/restartHdb.js +16 -16
package/bin/harperdb.js
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var BG=Object.create;var fc=Object.defineProperty;var HG=Object.getOwnPropertyDescriptor;var qG=Object.getOwnPropertyNames;var FG=Object.getPrototypeOf,GG=Object.prototype.hasOwnProperty;var a=(e,t)=>fc(e,"name",{value:t,configurable:!0});var ge=(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)fc(e,r,{get:t[r],enumerable:!0})},dO=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of qG(t))!GG.call(e,n)&&n!==r&&fc(e,n,{get:()=>t[n],enumerable:!(s=HG(t,n))||s.enumerable});return e};var U=(e,t,r)=>(r=e!=null?BG(FG(e)):{},dO(t||!e||!e.__esModule?fc(r,"default",{value:e,enumerable:!0}):r,e)),te=e=>dO(fc({},"__esModule",{value:!0}),e);var hO=m((gle,fO)=>{var xG=require("fast-glob"),{statSync:Uh,existsSync:Mh,readFileSync:kG,writeFileSync:$G}=require("fs"),{spawnSync:VG,spawn:YG}=require("child_process"),{isMainThread:KG}=require("worker_threads"),{join:sn,relative:EO}=require("path"),{PACKAGE_ROOT:qr}=g(),{tmpdir:WG}=require("os");require("source-map-support").install();var QG=["resources","server","dataLayer"],hc="ts-build",Ph,zG=__filename.endsWith("tsBuild.js");if(zG){if(KG){let r;try{Uh(sn(qr,hc)),r=!0}catch{}if(r)for(let s of xG.sync(QG.map(n=>n+"/**/*.ts"),{cwd:qr})){let n=0,i=0;try{n=Uh(sn(qr,s)).mtimeMs-5e3,i=Uh(sn(qr,hc,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."),Ph=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),Ph=!0;if(Ph){let s=VG(process.argv[0],[sn(qr,"node_modules/.bin/tsc")],{cwd:qr});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let n=sn(WG(),"harperdb-tsc.pid"),i;if(Mh(n))try{process.kill(+kG(n,{encoding:"utf8"}),0),i=!0}catch{}if(!i){console.log("starting tsc background process");let o=YG(process.argv[0],[sn(qr,"node_modules/.bin/tsc"),"--watch"],{cwd:qr,detached:!0,stdio:"ignore"});$G(n,o.pid.toString()),o.unref()}}}}let e=fO.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(qr)&&!s[0].includes("node_modules")){let i=EO(qr,s[0]),o;i.startsWith(hc)?o=sn(qr,EO(hc,i)):o=sn(qr,hc,i);let c=sn(o,r),u=c+".js";if(Mh(u))return u;if(c.includes(".")&&Mh(c))return c}return t(r,s,n)}}});var g=m((Ole,CO)=>{"use strict";var Fr=require("path"),JG=require("fs"),{relative:Rle,join:Ale}=Fr,{existsSync:jG}=JG;function XG(){let e=__dirname;for(;!jG(Fr.join(e,"package.json"));){let t=Fr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(XG,"getHDBPackageRoot");var Wn=XG(),mO="js",jl=mO,ZG="harperdb-config.yaml",ex="defaultConfig.yaml",tx="hdb",pO=`harperdb.${jl}`,SO=`customFunctionsServer.${jl}`,rx=`restartHdb.${jl}`,Bh="HarperDB",Jl="Custom Functions",Xl="Clustering Hub",Zl="Clustering Leaf",sx="Clustering Ingest Service",nx="Clustering Reply Service",ix="foreground.pid",ox="hdb.pid",ax="data",cx={HDB:Bh,CLUSTERING_HUB:Xl,CLUSTERING_LEAF:Zl,CLUSTERING_INGEST_SERVICE:sx,CLUSTERING_REPLY_SERVICE:nx,CUSTOM_FUNCTIONS:Jl,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"},ux={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},lx={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},_x={harperdb:Bh,"clustering hub":Xl,"clustering leaf":Zl,"custom functions":Jl,custom_functions:Jl,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},dx={CLUSTERING_HUB_PROC_DESCRIPTOR:Xl,CLUSTERING_LEAF_PROC_DESCRIPTOR:Zl},vh={HDB:Fr.join(Wn,"server/harperdb"),CUSTOM_FUNCTIONS:Fr.join(Wn,"server/customFunctions"),CLUSTERING_HUB:Fr.join(Wn,"server/nats"),CLUSTERING_LEAF:Fr.join(Wn,"server/nats")},Ex={HDB:Fr.join(vh.HDB,pO),CUSTOM_FUNCTIONS:Fr.join(vh.CUSTOM_FUNCTIONS,SO)},fx={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Fr.join(Wn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Fr.join(Wn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Fr.join(Wn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},hx={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},TO="support@harperdb.io",mx="customer-success@harperdb.io",gO=1,px=4141,RO="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Sx="https://www.harperdb.io/product",Tx=`For support, please submit a request at ${RO} or contact ${TO}`,AO=`For license support, please contact ${mx}`,gx="None of the specified records were found.",Rx="hash attribute not found",Ax=`Your current license only supports ${gO} role. ${AO}`,Ox="Your current license only supports 3 connections to a node.",Nx="127.0.0.1",bx=1,yx=/^\.$/,Ix=/^\.\.$/,wx="U+002E",Cx=/\//g,Lx="U+002F",Dx=/U\+002F/g,Ux=/^U\+002E$/,Mx=/^U\+002EU\+002E$/,Px="d",vx=999999,Bx="*",Hx="--max-old-space-size=",qx="system",Fx="__hdb_hash",Gx=".harperdb",xx=".hdb",kx="keys",$x="hdb_boot_properties.file",Vx=".updateConfig.json",Yx="SIGTSTP",Kx=24,Wx=6e4,Qx=448,zx="blob",Jx="trash",jx="database",Xx="schema",Zx="transactions",ek=".count",tk="id",rk="PROCESS_NAME",OO={SETTINGS_PATH_KEY:"settings_path"},NO=require("lodash"),sk={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"},nk={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},ik={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},ok={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"},ak={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:",ck={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"},uk={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"},lk="060493.ks",_k=".license",dk={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"},Ek={CSV:".csv",JSON:".json"},fk={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},hk={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},mc={};mc[K.INSERT]=K.INSERT;mc[K.UPDATE]=K.UPDATE;mc[K.UPSERT]=K.UPSERT;mc[K.DELETE]=K.DELETE;var Ne=Object.create(null);Ne[K.DESCRIBE_ALL]=K.DESCRIBE_ALL;Ne[K.DESCRIBE_TABLE]=K.DESCRIBE_TABLE;Ne[K.DESCRIBE_SCHEMA]=K.DESCRIBE_SCHEMA;Ne[K.READ_LOG]=K.READ_LOG;Ne[K.ADD_NODE]=K.ADD_NODE;Ne[K.LIST_USERS]=K.LIST_USERS;Ne[K.LIST_ROLES]=K.LIST_ROLES;Ne[K.USER_INFO]=K.USER_INFO;Ne[K.SQL]=K.SQL;Ne[K.GET_JOB]=K.GET_JOB;Ne[K.SEARCH_JOBS_BY_START_DATE]=K.SEARCH_JOBS_BY_START_DATE;Ne[K.DELETE_FILES_BEFORE]=K.DELETE_FILES_BEFORE;Ne[K.EXPORT_LOCAL]=K.EXPORT_LOCAL;Ne[K.EXPORT_TO_S3]=K.EXPORT_TO_S3;Ne[K.CLUSTER_STATUS]=K.CLUSTER_STATUS;Ne[K.REMOVE_NODE]=K.REMOVE_NODE;Ne[K.RESTART]=K.RESTART;Ne[K.CUSTOM_FUNCTIONS_STATUS]=K.CUSTOM_FUNCTIONS_STATUS;Ne[K.GET_CUSTOM_FUNCTIONS]=K.GET_CUSTOM_FUNCTIONS;Ne[K.GET_CUSTOM_FUNCTION]=K.GET_CUSTOM_FUNCTION;Ne[K.SET_CUSTOM_FUNCTION]=K.SET_CUSTOM_FUNCTION;Ne[K.DROP_CUSTOM_FUNCTION]=K.DROP_CUSTOM_FUNCTION;Ne[K.ADD_CUSTOM_FUNCTION_PROJECT]=K.ADD_CUSTOM_FUNCTION_PROJECT;Ne[K.DROP_CUSTOM_FUNCTION_PROJECT]=K.DROP_CUSTOM_FUNCTION_PROJECT;Ne[K.PACKAGE_CUSTOM_FUNCTION_PROJECT]=K.PACKAGE_CUSTOM_FUNCTION_PROJECT;Ne[K.DEPLOY_CUSTOM_FUNCTION_PROJECT]=K.DEPLOY_CUSTOM_FUNCTION_PROJECT;var mk={DEBUG:"debug",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},pk={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},bO={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"},Sk=NO.invert(bO),A={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"},yO={settings_path:OO.SETTINGS_PATH_KEY,hdb_root_key:A.ROOTPATH,hdb_root:A.ROOTPATH,server_port_key:A.OPERATIONSAPI_NETWORK_PORT,server_port:A.OPERATIONSAPI_NETWORK_PORT,cert_key:A.OPERATIONSAPI_TLS_CERTIFICATE,certificate:A.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:A.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:A.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:A.OPERATIONSAPI_NETWORK_HTTPS,https_on:A.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:A.OPERATIONSAPI_NETWORK_CORS,cors_on:A.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:A.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:A.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:A.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:A.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:A.LOGGING_LEVEL,log_level:A.LOGGING_LEVEL,log_path_key:A.LOGGING_ROOT,log_path:A.LOGGING_ROOT,props_env_key:A.OPERATIONSAPI_NODEENV,node_env:A.OPERATIONSAPI_NODEENV,clustering_node_name_key:A.CLUSTERING_NODENAME,node_name:A.CLUSTERING_NODENAME,clustering_enabled_key:A.CLUSTERING_ENABLED,clustering:A.CLUSTERING_ENABLED,max_http_threads:A.HTTP_THREADS,max_hdb_processes:A.HTTP_THREADS,server_timeout_key:A.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:A.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:A.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:A.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:A.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:A.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:A.LOGGING_AUDITLOG,disable_transaction_log:A.LOGGING_AUDITLOG,operation_token_timeout_key:A.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:A.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:A.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:A.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:A.CUSTOMFUNCTIONS_ENABLED,custom_functions:A.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:A.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:A.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:A.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:A.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:A.HTTP_THREADS,log_to_file:A.LOGGING_FILE,log_to_stdstreams:A.LOGGING_STDSTREAMS,run_in_foreground:A.OPERATIONSAPI_FOREGROUND,local_studio_on:A.LOCALSTUDIO_ENABLED,clustering_port:A.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:A.CLUSTERING_USER,clustering_enabled:A.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:A.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:A.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:A.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:A.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:A.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:A.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:A.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:A.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:A.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:A.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:A.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:A.CLUSTERING_NODENAME,clustering_tls_certificate:A.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:A.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:A.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:A.CLUSTERING_TLS_INSECURE,clustering_tls_verify:A.CLUSTERING_TLS_VERIFY,clustering_loglevel:A.CLUSTERING_LOGLEVEL,clustering_republishmessages:A.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:A.CLUSTERING_DATABASELEVEL,customfunctions_enabled:A.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:A.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:A.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:A.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:A.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:A.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:A.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:A.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:A.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:A.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:A.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:A.CUSTOMFUNCTIONS_NODEENV,http_threads:A.HTTP_THREADS,http_session_affinity:A.HTTP_SESSION_AFFINITY,customfunctions_processes:A.HTTP_THREADS,customfunctions_root:A.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:A.LOCALSTUDIO_ENABLED,logging_file:A.LOGGING_FILE,logging_level:A.LOGGING_LEVEL,logging_root:A.LOGGING_ROOT,logging_rotation_enabled:A.LOGGING_ROTATION_ENABLED,logging_rotation_compress:A.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:A.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:A.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:A.LOGGING_ROTATION_PATH,logging_stdstreams:A.LOGGING_STDSTREAMS,logging_auditlog:A.LOGGING_AUDITLOG,logging_auditretention:A.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:A.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:A.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:A.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:A.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:A.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:A.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:A.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:A.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:A.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:A.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:A.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:A.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:A.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:A.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:A.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:A.OPERATIONSAPI_NODEENV,operationsapi_root:A.ROOTPATH,schemas:A.SCHEMAS,storage_path:A.STORAGE_PATH,ignorescripts:A.IGNORE_SCRIPTS,mqtt_network_port:A.MQTT_NETWORK_PORT,mqtt_websocket:A.MQTT_WEBSOCKET,mqtt_network_secureport:A.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:A.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:A.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:A.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:A.AUTHENTICATION_CACHETTL,authentication_enablesessions:A.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:A.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:A.AUTHENTICATION_REFRESHTOKENTIMEOUT};for(let e in A){let t=A[e];yO[t.toLowerCase()]=t}var Tk={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},gk={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"},Rk={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"},Ak={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Ok={VERSION_DEFAULT:"2.2.0"},Nk={DEVELOPMENT:8192,DEFAULT:512},bk={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"},yk={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"},Ik={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},IO={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},wk=Symbol("metadata"),Ck="__clustering__",Lk=Object.values(IO),Dk=15984864e5,wO={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Uk=NO.invert(wO),Mk={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"},Pk=111,vk=`\r
|
|
3
|
-
`,
|
|
4
|
-
`}a(cn,"createLogRecord");function Rc(e){nn&&GO(e),on&&process.stdout.write(e)}a(Rc,"logStdOut");function s_(e){nn&&GO(e),on&&process.stderr.write(e)}a(s_,"logStdErr");function GO(e){o$(),Yo?Gi.appendFileSync(Yo,e):Sc.log(e)}a(GO,"logToFile");function Fh(){try{Gi.closeSync(Yo)}catch{}Yo=null}a(Fh,"closeLogFile");function o$(){if(!Yo){try{if(!Tc)debugger;Yo=Gi.openSync(Tc,"a")}catch(e){Sc.error(e)}setTimeout(()=>{Fh()},r$).unref()}}a(o$,"openLogFile");function r_(...e){Wt[Kt]<=Wt.info&&Rc(cn("info",e))}a(r_,"info");function Gh(...e){Wt[Kt]<=Wt.trace&&Rc(cn("trace",e))}a(Gh,"trace");function gc(...e){Wt[Kt]<=Wt.error&&s_(cn("error",e))}a(gc,"error");function xh(...e){Wt[Kt]<=Wt.debug&&Rc(cn("debug",e))}a(xh,"debug");function xO(...e){Wt[Kt]<=Wt.notify&&Rc(cn("notify",e))}a(xO,"notify");function kO(...e){Wt[Kt]<=Wt.fatal&&s_(cn("fatal",e))}a(kO,"fatal");function kh(...e){Wt[Kt]<=Wt.warn&&s_(cn("warn",e))}a(kh,"warn");function a$(e,t,...r){t===HO.STDERR?s_(cn(e,r)):Rc(cn(e,r))}a(a$,"logCustomLevel");function c$(){let e;try{e=Xk.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=an.join(e,_t.HDB_HOME_DIR_NAME,_t.BOOT_PROPS_FILE_NAME);return Gi.existsSync(t)||(t=an.join(qh,"utility/hdb_boot_properties.file")),t}a(c$,"getPropsFilePath");function u$(e){Kt=e}a(u$,"setLogLevel");function PO(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(PO,"autoCastBoolean");function l$(e){try{if(e.includes("config/settings.js")){let o=BO(e);return{level:o.get(_t.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:an.dirname(o.get(_t.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(_t.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(_t.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=vO.parseDocument(Gi.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===_t.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(l$,"getLogConfig");function _$(){try{let e=vO.parseDocument(Gi.readFileSync(t$,"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(_$,"getDefaultConfig");function d$(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(d$,"AuthAuditLog")});var xi=m((Cle,E$)=>{E$.exports={name:"harperdb",version:"4.2.0-alpha.11",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.382.0","@aws-sdk/lib-storage":"3.382.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.5","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.14.2",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.9","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 ki=m((Ule,$O)=>{"use strict";var Lle=require("fs-extra"),Dle=D();$O.exports={version:f$,printVersion:m$,nodeVersion:h$};var Qn=xi();function f$(){if(Qn)return Qn.version}a(f$,"version");function h$(){if(Qn&&Qn.engines&&Qn.engines["preferred-node"])return Qn.engines["preferred-node"]}a(h$,"nodeVersion");function m$(){Qn&&console.log(`HarperDB Version ${Qn.version}`)}a(m$,"printVersion")});var WO=m((Ple,KO)=>{"use strict";var VO=require("semver/functions/major"),p$=require("semver/functions/satisfies"),YO=xi(),Ac=process.versions&&process.versions.node?process.versions.node:void 0;KO.exports=S$;function S$(){let e=YO.engines.node,t=YO.engines["preferred-node"];if(Ac){if(e&&!p$(Ac,e))return{error:`This version of HarperDB supports Node.js versions: ${e}, the currently installed Node.js version is: ${Ac}. Please install a version of Node.js that is withing the defined range.`};if(t&&VO(Ac)!==VO(t))return{warn:`This version of HarperDB is tested against Node.js version ${t}, the currently installed Node.js version is: ${Ac}. Some issues may occur with untested versions of Node.js.`}}}a(S$,"checkNodeVersion")});var Vh=m((Ble,QO)=>{"use strict";var T$=require("util"),g$=require("path"),R$=require("child_process"),A$=T$.promisify(R$.execFile),O$=1e3*1e3*10;QO.exports={findPs:N$};async function N$(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await A$("ps",["wwxo",`pid,${r}`],{maxBuffer:O$});for(let n of s.trim().split(`
|
|
5
|
-
`).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:g$.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(N$,"findPs")});var Ge=m((qle,JO)=>{"use strict";var b$="__dbis__",y$="__txns__",I$="__environment_name__",w$="__dbi_defintion__",C$={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"},L$=["__createdtime__","__updatedtime__"],D$="\uFFFF",zO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},U$=Object.values(zO);JO.exports={AUDIT_STORE_NAME:y$,INTERNAL_DBIS_NAME:b$,DBI_DEFINITION_NAME:w$,SEARCH_TYPES:C$,TIMESTAMP_NAMES:L$,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:I$,TRANSACTIONS_DBI_NAMES_ENUM:zO,TRANSACTIONS_DBIS:U$,OVERFLOW_MARKER:D$}});var gr=m((Fle,iN)=>{"use strict";var jO=g(),XO=Ge(),ZO={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},eN=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),tN={500:eN("There was an error processing your request."),400:"Invalid request"},M$=tN[ZO.INTERNAL_SERVER_ERROR],P$={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.`},v$={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},B$={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"},H$={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 ${XO.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${XO.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},q$={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${jO.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 ${jO.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"},rN={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"},F$={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."},G$={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`},x$={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"},k$={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},$$={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`},sN={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.`},nN={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}`},V$={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."},Y$={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},K$={...rN,...B$,...P$,...F$,...G$,...x$,...k$,...$$,...q$,...sN,...nN,...V$,...Y$,...v$};iN.exports={CHECK_LOGS_WRAPPER:eN,HDB_ERROR_MSGS:K$,DEFAULT_ERROR_MSGS:tN,DEFAULT_ERROR_RESP:M$,HTTP_STATUS_CODES:ZO,LMDB_ERRORS_ENUM:H$,AUTHENTICATION_ERROR_MSGS:rN,VALIDATION_ERROR_MSGS:sN,ITC_ERRORS:nN}});var z=m((xle,cN)=>{"use strict";var Ko=gr(),W$=D(),Q$=g(),n_=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,oN),this.http_resp_code=s||Ko.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Ko.DEFAULT_ERROR_MSGS[s]?Ko.DEFAULT_ERROR_MSGS[s]:Ko.DEFAULT_ERROR_MSGS[Ko.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&&W$[n](i)}},Yh=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.http_resp_code=r||400,t;super(t),this.http_resp_code=r||400}},Kh=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.http_resp_code=r||500}};function oN(e,t,r,s=Q$.LOG_LEVELS.ERROR,n=null,i=!1){if(aN(e))return e;let o=new n_(e,t,r,s,n);return i&&delete o.stack,o}a(oN,"handleHDBError");function aN(e){return e.__proto__.constructor.name===n_.name}a(aN,"isHDBError");cN.exports={isHDBError:aN,handleHDBError:oN,ClientError:Yh,ServerError:Kh,hdb_errors:Ko}});var De=m(($le,hN)=>{"use strict";var Ic=g(),z$=F(),Qt=$(),wc=require("path"),J$=require("minimist"),uN=require("fs-extra"),lN=require("lodash");Qt.initSync();var{CONFIG_PARAMS:zn,SCHEMAS_PARAM_CONFIG:Oc,SYSTEM_SCHEMA_NAME:i_}=Ic,Nc,bc,yc;function _N(){if(Nc!==void 0)return Nc;if(Qt.getHdbBasePath()!==void 0)return Nc=Qt.get(zn.STORAGE_PATH)||wc.join(Qt.getHdbBasePath(),Ic.DATABASES_DIR_NAME),Nc}a(_N,"getBaseSchemaPath");function dN(){if(bc!==void 0)return bc;if(Qt.getHdbBasePath()!==void 0)return bc=fN(i_),bc}a(dN,"getSystemSchemaPath");function EN(){if(yc!==void 0)return yc;if(Qt.getHdbBasePath()!==void 0)return yc=Qt.get(Ic.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||wc.join(Qt.getHdbBasePath(),Ic.TRANSACTIONS_DIR_NAME),yc}a(EN,"getTransactionAuditStoreBasePath");function j$(e,t){let r=Qt.get(zn.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||wc.join(EN(),e.toString())}a(j$,"getTransactionAuditStorePath");function fN(e,t){e=e.toString(),t=t&&t.toString();let r=Qt.get(Ic.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||wc.join(_N(),e)}a(fN,"getSchemaPath");function X$(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,J$(process.argv));let s=r[zn.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!z$.isObject(s))throw o;i=s}for(let o of i){let c=o[i_];if(!c)continue;let u=Qt.get(zn.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[Oc.PATH];if(l)return lN.set(u,[i_,Oc.TABLES,t,Oc.PATH],l),Qt.setProperty(zn.SCHEMAS,u),l;let _=c?.[Oc.PATH];if(_)return lN.set(u,[i_,Oc.PATH],_),Qt.setProperty(zn.SCHEMAS,u),_}}let n=r[zn.STORAGE_PATH.toUpperCase()];if(n){if(!uN.pathExistsSync(n))throw new Error(n+" does not exist");let i=wc.join(n,e);return uN.mkdirsSync(i),Qt.setProperty(zn.STORAGE_PATH,n),i}return dN()}a(X$,"initSystemSchemaPaths");function Z$(){Nc=void 0,bc=void 0,yc=void 0}a(Z$,"resetPaths");hN.exports={getBaseSchemaPath:_N,getSystemSchemaPath:dN,getTransactionAuditStorePath:j$,getTransactionAuditStoreBasePath:EN,getSchemaPath:fN,initSystemSchemaPaths:X$,resetPaths:Z$}});var Ht=m((Wle,gN)=>{"use strict";var eV=gr().LMDB_ERRORS_ENUM,Yle=require("lmdb"),tV=Ge(),Kle=require("buffer").Buffer,{OVERFLOW_MARKER:mN,MAX_SEARCH_KEY_LENGTH:o_}=tV,pN=["number","string","symbol","boolean","bigint"];function rV(e){if(e=e?.primaryStore||e,!e)throw new Error(eV.ENV_REQUIRED)}a(rV,"validateEnv");function sV(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(sV,"stringifyData");function nV(e){return e instanceof Date?e.valueOf():e}a(nV,"convertKeyValueToWrite");function iV(e){if(e==null)return;if(pN.includes(typeof e))return e.length>o_?[e.slice(0,o_)+mN]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(pN.includes(typeof n))n.length>o_?t.push(n.slice(0,o_)+mN):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(iV,"getIndexedValues");var a_=0,SN=0;function TN(){SN=Date.now()-performance.now()}a(TN,"adjustStartTime");TN();var oV=6e4;setInterval(TN,oV).unref();function aV(){let e=performance.now()+SN;return e>a_?(a_=e,e):(a_+=488e-6,a_)}a(aV,"getNextMonotonicTime");gN.exports={validateEnv:rV,stringifyData:sV,convertKeyValueToWrite:nV,getNextMonotonicTime:aV,getIndexedValues:iV}});var RN,bs,Wh,Cc=ge(()=>{RN=require("events"),bs=class extends RN.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new Wh;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)}},Wh=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 Lc(e){return e[Ot]||(e[Ot]=Object.create(null))}function d_(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[Ot];if(l&&c in l)return l[c];let _=this[le]?.[c];if(_&&typeof _=="object"){let d=AN(_,o);if(d)return l||(l=this[Ot]=Object.create(null)),l[c]=d}return _},set(l){Lc(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,c_.ClientError)(`${c} must be a string, attempt to assign ${l}`);Lc(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,c_.ClientError)(`${c} must be a string, attempt to assign ${l}`);Lc(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[Ot];return u?.[o]!==void 0?u[o]:this[le]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new c_.ClientError("Can not add a property to a sealed table schema");Lc(this)[o]=c}),i("deleteProperty",function(o){Lc(this)[o]=void 0}),i("toJSON",function(){let o=this[Ot],c;for(let l in o)c||(c=Object.assign({},this[le])),c[l]=o[l];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[le])),Object.assign(c,this)),c||this[le]}),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 AN(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[le]=n}},d_(r,t)),new r(e)):new u_(e);case Array:let s=new __(e.length);s[le]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=AN(o,t?.elements)),s[n]=o}return s}}function E_(e){let t=e[Ot],r;for(let n in t){r||(r=Object.assign({},e[le]));let i=t[n];i&&typeof i=="object"&&(i=E_(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[le])),Object.assign(r,e)),r||e[le]}function Dc(e){let t;if(e[le]&&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=Dc(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Ot];for(let s in r){t||(t=Object.assign({},e[le]));let n=r[s];n&&typeof n=="object"&&(n=Dc(n)),t[s]=n}return t?Object.freeze(t):e[le]||Object.freeze(e)}function l_(e){let t=e[le];if(!t)return!0;if(e.constructor===Array){if(e[$i]||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?.[le]===n){if(l_(i))return!0}else return!0}}else{let r=e[Ot];for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[le]===i){if(l_(n))return!0}else return!0}else return!0}}return!1}var c_,Ot,u_,$i,__,f_=ge(()=>{ys();c_=U(z()),Ot=Symbol("own-data");a(Lc,"getChanges");a(d_,"assignTrackedAccessors");a(AN,"trackObject");u_=class{static{a(this,"GenericTrackedObject")}constructor(t){this[le]=t}};d_(u_,{});a(E_,"collapseData");a(Dc,"deepFreeze");a(l_,"hasChanges");$i=Symbol.for("has-array-changes"),__=class extends Array{static{a(this,"TrackedArray")}[$i];constructor(t){super(t)}splice(...t){return this[$i]=!0,super.splice(...t)}push(...t){return this[$i]=!0,super.push(...t)}pop(){return this[$i]=!0,super.pop()}unshift(...t){return this[$i]=!0,super.unshift(...t)}shift(){return this[$i]=!0,super.shift()}};__.prototype.constructor=Array});function Xe(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 Qh;e.timestamp&&(r.timestamp=e.timestamp),r[be]=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 ON,NN,Qh,Vi=ge(()=>{ON=U(Ht()),NN=require("../index");ys();a(Xe,"transaction");(0,NN._assignPackageExport)("transaction",Xe);Xe.commit=function(e){let t=(e[be]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Xe.abort=function(e){let t=(e[be]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()};Qh=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,ON.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 jh(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(uV[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]=ws.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 gt.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 zh.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let p=Xh(e);if(!p)throw new zh.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:b,value:R})=>new Promise(P=>setImmediate(()=>P(p(R)?b:yN.SKIP))))}let S={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(S):h.getRange(S).map(({value:p})=>p)}function Xh(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case gt.SEARCH_TYPES.EQUALS:case void 0:return Is(r,n=>n===s);case gt.SEARCH_TYPES.CONTAINS:return Is(r,n=>n?.toString().includes(s));case gt.SEARCH_TYPES.ENDS_WITH:case gt.SEARCH_TYPES._ENDS_WITH:return Is(r,n=>n?.toString().endsWith(s));case gt.SEARCH_TYPES.STARTS_WITH:case gt.SEARCH_TYPES._STARTS_WITH:return Is(r,n=>typeof n=="string"&&n.startsWith(s));case gt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),Is(r,n=>(0,ws.compareKeys)(n,s[0])>=0&&(0,ws.compareKeys)(n,s[1])<=0);case"gt":case gt.SEARCH_TYPES.GREATER_THAN:case gt.SEARCH_TYPES._GREATER_THAN:return Is(r,n=>(0,ws.compareKeys)(n,s)>0);case"ge":case gt.SEARCH_TYPES.GREATER_THAN_EQUAL:case gt.SEARCH_TYPES._GREATER_THAN_EQUAL:return Is(r,n=>(0,ws.compareKeys)(n,s)>=0);case gt.SEARCH_TYPES.LESS_THAN:case"lt":case gt.SEARCH_TYPES._LESS_THAN:return Is(r,n=>(0,ws.compareKeys)(n,s)<0);case"le":case gt.SEARCH_TYPES.LESS_THAN_EQUAL:case gt.SEARCH_TYPES._LESS_THAN_EQUAL:return Is(r,n=>(0,ws.compareKeys)(n,s)<=0);case"ne":return Is(r,n=>(0,ws.compareKeys)(n,s)!==0);default:return}}function Is(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function h_(e){if(!e)return;let t=new Jh,r,s,n,i,o;for(;r=bN.exec(e);){i=bN.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=cV[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 zh,gt,ws,yN,bN,cV,uV,Jh,m_=ge(()=>{zh=U(z()),gt=U(Ge()),ws=require("ordered-binary"),yN=require("lmdb"),bN=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,cV={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(jh,"idsForCondition");uV={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(Xh,"filterByType");a(Is,"attributeComparator");a(h_,"parseQuery");Jh=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 tm={};je(tm,{CONTEXT:()=>be,ID_PROPERTY:()=>ae,IS_COLLECTION:()=>un,RECORD_PROPERTY:()=>le,Resource:()=>Nt,SAVE_UPDATES_PROPERTY:()=>UN,snake_case:()=>_V});function _V(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function IN(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 em(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function es(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[be]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[be]||i):l=i:(l=n,c=l[ae]??l[this.primaryKey]??null):i?o=i[be]||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 d of n){if(typeof d=="object"&&d)break;c.push(d)}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 d=c.indexOf("?");if(d>-1){let f=this.parseQuery(c.slice(d+1));u?u=Object.assign(f,u):u=f,c=c.slice(0,d)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;if(o||(o={}),t.allowInvalidated&&(o.allowInvalidated=!0),o.transaction){let d=this.getResource(c,o,t);return d.then?d.then(_):_(d)}else return Xe(o,()=>{let d=this.getResource(c,o,t);return d.then?d.then(_):_(d)});function _(d){if(t.type==="read"&&(d[UN]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?d.allowRead(o.user,o):t.type==="update"?d.doesExist?.()===!1?d.allowCreate(o.user,o):d.allowUpdate(o.user,o):t.type==="create"?d.allowCreate(o.user,o):d.allowDelete(o.user,o);if(E?.then)return E.then(f=>{if(!f)throw new p_(o.user);return typeof l?.then=="function"?l.then(h=>e(d,u,o,h)):e(d,u,o,l)});if(!E)throw new p_(o.user)}return typeof l?.then=="function"?l.then(E=>e(d,u,o,E)):e(d,u,o,l)}a(_,"authorizeActionOnResource")}}function ts(e,t){let r=new DN.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 Zh(e){let t=e[le];if(t){let r=e[Ot];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 wN(e){if(typeof e=="string")return t=>Zh(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=Zh(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=Zh(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 CN,LN,DN,be,ae,un,UN,le,lV,Nt,p_,em,ys=ge(()=>{CN=require("crypto");Cc();LN=require("../index"),DN=U(z());f_();Vi();m_();be=Symbol.for("context"),ae=Symbol.for("primary-key"),un=Symbol("is-collection"),UN=Symbol("save-updates"),le=Symbol("stored-record"),lV={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Nt=class{static{a(this,"Resource")}[be];[ae];static transactions;constructor(t,r){this[ae]=t;let s=r?.[be];this[be]=s!==void 0?s:r||null}updateModificationTime(t=Date.now()){t>this[LAST_MODIFICATION_PROPERTY]&&(this[LAST_MODIFICATION_PROPERTY]=t)}static get=es(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=wN(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=es(function(t,r,s,n){if(Array.isArray(n)&&t[un]){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):ts(t,"put")},{hasContent:!0,type:"update"});static delete=es(function(t,r,s,n){return t.delete?t.delete(r):ts(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,CN.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),Xe(s,()=>{let i=new this(n,s),o=i.put?i.put(r):ts(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static post=es(function(t,r,s,n){return t[ae]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=es(function(t,r,s,n){return t.connect?t.connect(r):ts(t,"connect")},{type:"read"});static subscribe=es(function(t,r,s,n){return t.subscribe?t.subscribe(r):ts(t,"subscribe")},{type:"read"});static publish=es(function(t,r,s,n){return t[ae]!=null&&t.update(),t.publish?t.publish(n,r):ts(t,"publish")},{hasContent:!0,type:"create"});static search=es(function(t,r,s,n){let i=t.search?t.search(s):ts(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=wN(o);return i.map(c)}return i},{type:"read"});static query=es(function(t,r,s,n){return t.search?t.search(n,r):ts(t,"search")},{hasContent:!0,type:"read"});static copy=es(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):ts(t,"copy")},{type:"create"});static move=es(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):ts(t,"move")},{type:"delete"});post(t){if(this[un])return this.constructor.create(this[ae],t,this[be]);ts(this,"post")}static isCollection(t){return t?.[un]}static coerceId(t){return t}static parseQuery(t){return h_(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&&lV[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:IN(t,this)}}return IN(t,this)}static getResource(t,r,s){let n,i=r[be],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[un]=!0),n}connect(t){let r=new bs;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[be]}};Nt.prototype[be]=null;(0,LN._assignPackageExport)("Resource",Nt);a(_V,"snake_case");p_=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.http_resp_code=403):(super("Must login"),this.http_resp_code=401)}};a(IN,"pathToId");em=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(es,"transactional");a(ts,"missingMethod");a(Zh,"selectFromObject");a(wN,"transformForSelect")});var S_={};je(S_,{server:()=>bt});var MN,bt,ln=ge(()=>{MN=require("../index"),bt={};(0,MN._assignPackageExport)("server",bt)});var nm={};je(nm,{loadGQLSchema:()=>EV,start:()=>sm,startOnMainThread:()=>dV});function sm({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 S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let V=function(O){if(O.kind==="NonNullType"){let x=V(O.type);return x.nullable=!0,x}return O.kind==="ListType"?{type:"array",elements:V(O.type)}:{type:O.name?.value}};a(V,"getProperty");let p=S.name.value,b=[],R={table:null,database:null,properties:b};E.set(p,R);for(let O of S.directives){if(O.name.value==="table"){for(let w of O.arguments)R[w.name.value]=w.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=p),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,f.push(R)}if(O.name.value==="sealed"&&(R.sealed=!0),O.name.value==="export"){R.export=!0;for(let w of O.arguments)w.name.value==="name"&&(R.export={name:w.value.value})}}let P=!1;for(let O of S.fields){let w=V(O.type);w.name=O.name.value,b.push(w);for(let x of O.directives)if(x.name.value==="primaryKey")P?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,P=!0);else if(x.name.value==="indexed")w.indexed=!0;else if(x.name.value==="createdTime")w.assignCreatedTime=!0;else if(x.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(x.name.value==="expiresAt")w.expiresAt=!0;else if(x.name.value==="allow"){let k=w.authorizedRoles=[];for(let J of x.arguments)J.name.value==="role"&&k.push(J.value.value)}}R.typeName=p,p==="Query"&&(h=R)}for(let[S,p]of E)for(let b of p.properties){let R=E.get(b.type);R&&(b.properties=R.properties)}for(let S of f)S.tableClass=e(S),S.export&&i.set((0,rm.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass);if(h)for(let S of h.properties){let p=E.get(S.type);if(!p)throw new Error(`${S.type} was not found as a Query export`);i.set((0,rm.dirname)(s)+"/"+S.name,p.tableClass)}}}var rm,dV,EV,PN=ge(()=>{rm=require("path");_e();a(sm,"start");dV=sm,EV=sm({ensureTable:dt}).handleFile});async function T_(e){return fV?(Uc||(Uc=hV(pV)),(await(await Uc).import(e)).namespace):import(e)}async function hV(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Uc=new Compartment({console,Math,Date,fetch:mV,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,BN.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:Nt,tables:Rr,databases:xe})}};let s=await(0,vN.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Uc}function mV(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 pV(){return{Resource:Nt,tables:Rr}}var vN,BN,fV,Uc,im=ge(()=>{ys();_e();vN=require("fs/promises"),BN=require("path"),fV=!1;a(T_,"secureImport");a(hV,"getCompartment");a(mV,"secureOnlyFetch");a(pV,"getGlobalVars")});var am={};je(am,{handleFile:()=>SV});async function SV(e,t,r,s){let n=new Map,i=(0,HN.pathToFileURL)(r).toString(),o=await T_(i);u(o.default)&&s.set((0,om.dirname)(t),o.default),c(o,(0,om.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 HN,om,qN=ge(()=>{HN=require("url");im();om=require("path");a(SV,"handleFile")});var um={};je(um,{start:()=>TV});function TV({resources:e}){e.set("login",cm),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var cm,FN=ge(()=>{ys();a(TV,"start");cm=class extends Nt{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var _m=m((R_e,kN)=>{"use strict";var{Readable:gV}=require("stream"),RV=1e4;kN.exports={streamAsJSON(e){return new lm({value:e})}};var lm=class extends gV{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),GN)}catch(n){yield GN(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);xN(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>RV?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 xN(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 GN(e){return console.error(e),JSON.stringify(e.toString())}a(GN,"handleError");function xN(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(xN,"when")});var tb=m((N_e,eb)=>{"use strict";var dm=require("recursive-iterator"),AV=require("alasql"),Em=require("clone"),$N=F(),{handleHDBError:VN,hdb_errors:OV}=z(),{HDB_ERROR_MSGS:YN,HTTP_STATUS_CODES:KN}=OV,{getDatabases:NV}=(_e(),te(ye)),bV=["DISTINCT_ARRAY"],WN=Symbol("validateTables"),fm=Symbol("validateTable"),O_e=Symbol("getAllColumns"),QN=Symbol("validateAllColumns"),g_=Symbol("findColumn"),zN=Symbol("validateOrderBy"),Mc=Symbol("validateSegment"),hm=Symbol("validateColumn"),JN=Symbol("setColumnsForTable"),jN=Symbol("checkColumnsForAsterisk"),XN=Symbol("validateGroupBy"),ZN=Symbol("hasColumns"),mm=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[WN](),this[jN](),this[QN]()}[WN](){if(this[ZN]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[fm](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[fm](t.table)})}}[ZN](){let t=!1,r=new dm(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[fm](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=NV();if(!r[t.databaseid])throw VN(new Error,YN.SCHEMA_NOT_FOUND(t.databaseid),KN.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw VN(new Error,YN.TABLE_NOT_FOUND(t.databaseid,t.tableid),KN.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Em(n);i.table=Em(t),this.attributes.push(i)})}[g_](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)}[jN](){let t=new dm(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[JN](r.tableid)}[JN](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new AV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[QN](){this[Mc](this.statement.columns,!1),this[Mc](this.statement.joins,!1),this[Mc](this.statement.where,!1),this[XN](this.statement.group,!1),this[Mc](this.statement.order,!0)}[Mc](t,r){if(!t)return;let s=new dm(t),n=[];for(let{node:i,path:o}of s)!$N.isEmpty(i)&&!$N.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[zN](i):n.push(this[hm](i)));return n}[XN](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&bV.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Em(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[g_](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[g_](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`}[zN](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[hm](t)}[hm](t){let r=this[g_](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]}};eb.exports=mm});var sb=m((y_e,rb)=>{"use strict";var pm=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")}};rb.exports=pm});var ib=m((w_e,nb)=>{"use strict";var Sm=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};nb.exports=Sm});var R_=m((L_e,ob)=>{"use strict";var gm=$(),Rm=g();gm.initSync();var yV=gm.get(Rm.CONFIG_PARAMS.STORAGE_COMPRESSION),IV=gm.get(Rm.CONFIG_PARAMS.STORAGE_CACHING)!==!1,wV=Rm.UPDATES_PROPERTY,Tm=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=yV&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=IV&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===wV)}};ob.exports=Tm});var O_=m((U_e,cb)=>{"use strict";var Wo=$(),Pc=g();Wo.initSync();var CV=Wo.get(Pc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Wo.get(Pc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Wo.get(Pc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",ab=Wo.get(Pc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),LV=Wo.get(Pc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),A_=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=CV,this.noFSAccess=!0,ab!==void 0&&(this.overlappingSync=ab),this.noReadAhead=LV}};cb.exports=A_;A_.MAX_DBS=1e4});var we=m((P_e,Sb)=>{"use strict";var Om=require("lmdb"),rs=require("fs-extra"),Ar=require("path"),N_=Ht(),_b=D(),zt=gr().LMDB_ERRORS_ENUM,b_=ib(),Nm=R_(),db=O_(),Jn=Ge(),ub=g(),{table:DV,resetDatabases:UV}=(_e(),te(ye)),lb=$(),ss=Jn.INTERNAL_DBIS_NAME,Eb=Jn.DBI_DEFINITION_NAME,MV="data.mdb",PV="lock.mdb",vc=".mdb",vV="-lock",Am=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Gr(t,r),this.key_type=this.dbi[Jn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Jn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Om.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function y_(e,t){if(e===void 0)throw new Error(zt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(zt.ENV_NAME_REQUIRED)}a(y_,"pathEnvNameValidation");async function bm(e,t,r=!0){try{await rs.access(e)}catch(s){throw s.code==="ENOENT"?new Error(zt.INVALID_BASE_PATH):s}try{let s=Ar.join(e,t+vc);return await rs.access(s,rs.constants.R_OK|rs.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await rs.access(Ar.join(e,t,MV),rs.constants.R_OK|rs.constants.F_OK),Ar.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(zt.INVALID_ENVIRONMENT)}else throw new Error(zt.INVALID_ENVIRONMENT);throw s}}a(bm,"validateEnvironmentPath");function I_(e,t){if(N_.validateEnv(e),t===void 0)throw new Error(zt.DBI_NAME_REQUIRED)}a(I_,"validateEnvDBIName");async function BV(e,t,r=!1,s=!1){y_(e,t);let n=Ar.basename(e);t=t.toString();let i=lb.get(ub.CONFIG_PARAMS.SCHEMAS);i||lb.setProperty(ub.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await bm(e,t,s),fb(e,t,r)}catch(o){if(o.message===zt.INVALID_ENVIRONMENT){let c=Ar.join(e,t);await rs.mkdirp(s?c:e);let u=new db(s?c:c+vc,!1),l=Om.open(u);l.dbis=Object.create(null);let _=new Nm(!1);l.openDB(ss,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=ym(e,t,r);return l[Jn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(BV,"createEnvironment");async function HV(e,t,r,s=!0){y_(e,t),t=t.toString();let n=Ar.join(e,t);return DV({table:t,database:Ar.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(HV,"copyEnvironment");async function fb(e,t,r=!1){y_(e,t),t=t.toString();let s=ym(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 bm(e,t),i=Ar.join(e,t+vc),o=n!=i,c=new db(n,o),u=Om.open(c);u.dbis=Object.create(null);let l=mb(u);for(let _=0;_<l.length;_++)Gr(u,l[_]);return u[Jn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(fb,"openEnvironment");async function qV(e,t,r=!1){y_(e,t),t=t.toString();let s=Ar.join(e,t+vc),n=await bm(e,t);if(global.lmdb_map!==void 0){let i=ym(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await hb(o),delete global.lmdb_map[i]}}await rs.remove(n),await rs.remove(n===s?n+vV:Ar.join(Ar.dirname(n),PV))}a(qV,"deleteEnvironment");async function hb(e){N_.validateEnv(e);let t=e[Jn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(hb,"closeEnvironment");function ym(e,t,r=!1){let n=`${Ar.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(ym,"getCachedEnvironmentName");function FV(e){N_.validateEnv(e);let t=Object.create(null),r=Gr(e,ss);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==ss)try{t[s]=Object.assign(new b_,n)}catch{_b.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(FV,"listDBIDefinitions");function mb(e){N_.validateEnv(e);let t=[],r=Gr(e,ss);for(let{key:s}of r.getRange({start:!1}))s!==ss&&t.push(s);return t}a(mb,"listDBIs");function GV(e,t){let s=Gr(e,ss).getEntry(t),n=new b_;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{_b.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(GV,"getDBIDefinition");function pb(e,t,r,s=!r){if(I_(e,t),t=t.toString(),t===ss)throw new Error(zt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Gr(e,t)}catch(n){if(n.message===zt.DBI_DOES_NOT_EXIST){let i=new Nm(r,s===!0),o=e.openDB(t,i),c=new b_(r===!0,s);return o[Eb]=c,Gr(e,ss).putSync(t,c),e.dbis[t]=o,o}throw n}}a(pb,"createDBI");function Gr(e,t){if(I_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ss?r=GV(e,t):r=new b_,r===void 0)throw new Error(zt.DBI_DOES_NOT_EXIST);let s;try{let n=new Nm(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(zt.DBI_DOES_NOT_EXIST):n}return s[Eb]=r,e.dbis[t]=s,s}a(Gr,"openDBI");function xV(e,t){I_(e,t),t=t.toString();let r=Gr(e,t),s=r.getStats();return r[Jn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(xV,"statDBI");async function kV(e,t){try{let r=Ar.join(e,t+vc);return(await rs.stat(r)).size}catch{throw new Error(zt.INVALID_ENVIRONMENT)}}a(kV,"environmentDataSize");function $V(e,t){if(I_(e,t),t=t.toString(),t===ss)throw new Error(zt.CANNOT_DROP_INTERNAL_DBIS_NAME);Gr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Gr(e,ss).removeSync(t)}a($V,"dropDBI");function VV(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Gr(e,i)}catch(o){if(o.message===zt.DBI_DOES_NOT_EXIST)pb(e,i,i!==t,i===t),s=!0;else throw o}}s&&UV()}a(VV,"initializeDBIs");Sb.exports={openDBI:Gr,openEnvironment:fb,createEnvironment:BV,listDBIs:mb,listDBIDefinitions:FV,createDBI:pb,dropDBI:$V,statDBI:xV,deleteEnvironment:qV,initializeDBIs:VV,TransactionCursor:Am,environmentDataSize:kV,copyEnvironment:HV,closeEnvironment:hb}});var gb=m((B_e,Tb)=>{"use strict";var Im=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};Tb.exports=Im});var Ab=m((q_e,Rb)=>{"use strict";var wm=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}};Rb.exports=wm});var Nb=m((G_e,Ob)=>{"use strict";var Cm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};Ob.exports=Cm});var Ki=m((Y_e,Ib)=>{"use strict";var YV=we(),KV=gb(),WV=Ab(),QV=Nb(),Cs=Ht(),Bc=gr().LMDB_ERRORS_ENUM,zV=Ge(),_n=g(),JV=F(),jV=require("uuid"),k_e=require("lmdb"),{handleHDBError:XV,hdb_errors:ZV}=z(),{OVERFLOW_MARKER:$_e,MAX_SEARCH_KEY_LENGTH:V_e}=zV,bb=$();bb.initSync();var w_=bb.get(_n.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Lm=_n.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Yi=_n.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function eY(e,t,r,s,n=Cs.getNextMonotonicTime()){Pm(e,t,r,s),Dm(e,t,r);let i=new KV,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];yb(l,!0,n);let _=tY(e,t,r,l),d=l[t];o.push(_),c.push(d)}return Um(o,c,s,i,n)}a(eY,"insertRecords");function tY(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][_n.FUNC_VAL],s[o]=c)}let u=Cs.getIndexedValues(c),l=e.dbis[o];if(u){w_&&l.prefetch(u.map(_=>({key:_,value:n})),C_);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}w_&&e.dbis[t].prefetch([n],C_),e.dbis[t].put(n,s,s[Yi])})}a(tY,"insertRecord");function rY(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(rY,"removeSkippedRecords");function yb(e,t,r){let s=r>0;(s||!Number.isInteger(e[Yi]))&&(e[Yi]=r||(r=Cs.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Lm]))&&(e[Lm]=r||Cs.getNextMonotonicTime()):delete e[Lm]}a(yb,"setTimestamps");function Dm(e,t,r){r.indexOf(_n.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(_n.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(_n.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(_n.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),YV.initializeDBIs(e,t,r)}a(Dm,"initializeTransaction");async function sY(e,t,r,s,n=Cs.getNextMonotonicTime()){Pm(e,t,r,s),Dm(e,t,r);let i=new WV,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=Mm(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return Um(c,u,s,i,n,o)}a(sY,"updateRecords");async function nY(e,t,r,s,n=Cs.getNextMonotonicTime()){try{Pm(e,t,r,s)}catch(u){throw XV(u,u.message,ZV.HTTP_STATUS_CODES.BAD_REQUEST)}Dm(e,t,r);let i=new QV,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;JV.isEmpty(l[t])?(_=jV.v4(),l[t]=_):_=l[t];let d=Mm(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return Um(o,c,s,i,n)}a(nY,"upsertRecords");async function Um(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Cs.getNextMonotonicTime(),rY(r,i),s}a(Um,"finalizeWrite");function Mm(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(yb(r,!_,o),Number.isInteger(r[Yi])&&l[Yi]>r[Yi])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let S=r[h],p=e.dbis[h];if(p===void 0)continue;let b=l[h];if(typeof S=="function"){let P=S([[l]]);Array.isArray(P)&&(S=P[0][_n.FUNC_VAL],r[h]=S)}if(S===b)continue;let R=Cs.getIndexedValues(b);if(R){w_&&p.prefetch(R.map(P=>({key:P,value:s})),C_);for(let P=0,V=R.length;P<V;P++)p.remove(R[P],s)}if(R=Cs.getIndexedValues(S),R){w_&&p.prefetch(R.map(P=>({key:P,value:s})),C_);for(let P=0,V=R.length;P<V;P++)p.put(R[P],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Yi])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:Mm(e,t,r,s,n,i,o))}a(Mm,"updateUpsertRecord");function iY(e,t,r){if(Cs.validateEnv(e),t===void 0)throw new Error(Bc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Bc.WRITE_ATTRIBUTES_REQUIRED):new Error(Bc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(iY,"validateBasic");function Pm(e,t,r,s){if(iY(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Bc.RECORDS_REQUIRED):new Error(Bc.RECORDS_MUST_BE_ARRAY)}a(Pm,"validateWrite");function C_(){}a(C_,"noop");Ib.exports={insertRecords:eY,updateRecords:sY,upsertRecords:nY}});var dn=m((W_e,oY)=>{oY.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 Ls=m((Q_e,Lb)=>{"use strict";var Cb=F(),wb=g(),Qo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,En=require("joi"),jn={schema_format:{pattern:Qo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},aY=En.alternatives(En.string().min(1).max(jn.schema_length.maximum).pattern(Qo).messages({"string.pattern.base":"{:#label} "+jn.schema_format.message}),En.number()).required(),cY=En.alternatives(En.string().min(1).max(jn.schema_length.maximum).pattern(Qo).messages({"string.pattern.base":"{:#label} "+jn.schema_format.message}),En.number()),uY=En.alternatives(En.string().min(1).max(jn.schema_length.maximum).pattern(Qo).messages({"string.pattern.base":"{:#label} "+jn.schema_format.message}),En.number()).required();function lY(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>jn.schema_length.maximum?`'${e}' maximum of 250 characters`:Qo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(lY,"checkValidTable");function _Y(e,t){return Cb.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(_Y,"validateSchemaExists");function dY(e,t){let r=t.state.ancestors[0].schema;return Cb.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(dY,"validateTableExists");function EY(e,t){return e.toLowerCase()===wb.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${wb.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(EY,"validateSchemaName");Lb.exports={common_validators:jn,schema_regex:Qo,hdb_schema_table:aY,validateSchemaExists:_Y,validateTableExists:dY,validateSchemaName:EY,checkValidTable:lY,hdb_database:cY,hdb_table:uY}});var He=m((J_e,Db)=>{"use strict";var Jt=require("validate.js");Jt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Jt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Jt.validators.type.checks={Object:function(e){return Jt.isObject(e)&&!Jt.isArray(e)},Array:Jt.isArray,Integer:Jt.isInteger,Number:Jt.isNumber,String:Jt.isString,Date:Jt.isDate,Boolean:function(e){return typeof e=="boolean"}};Jt.validators.hasValidFileExt=function(e,t){return Jt.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};Db.exports={validateObject:fY,validateObjectAsync:hY,validateBySchema:mY};function fY(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Jt(e,t,{format:"flat"});return r?new Error(r):null}a(fY,"validateObject");async function hY(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Jt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(hY,"validateObjectAsync");function mY(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(mY,"validateBySchema")});var L_=m((X_e,Ub)=>{var{common_validators:Ds}=Ls(),qc=He(),Hc="is required",Ze={database:{presence:!1,format:Ds.schema_format,length:Ds.schema_length},schema:{presence:!1,format:Ds.schema_format,length:Ds.schema_length},table:{presence:!0,format:Ds.schema_format,length:Ds.schema_length},attribute:{presence:!0,format:Ds.schema_format,length:Ds.schema_length},hash_attribute:{presence:!0,format:Ds.schema_format,length:Ds.schema_length}};function Fc(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(Fc,"makeAttributesStrings");function pY(e){return e=Fc(e),Ze.table.presence=!1,Ze.attribute.presence=!1,Ze.hash_attribute.presence=!1,qc.validateObject(e,Ze)}a(pY,"schema_object");function SY(e){return e=Fc(e),Ze.table.presence={message:Hc},Ze.attribute.presence=!1,Ze.hash_attribute.presence=!1,qc.validateObject(e,Ze)}a(SY,"table_object");function TY(e){return e=Fc(e),Ze.table.presence={message:Hc},Ze.attribute.presence=!1,qc.validateObject(e,Ze)}a(TY,"create_table_object");function gY(e){return e=Fc(e),Ze.table.presence={message:Hc},Ze.attribute.presence={message:Hc},Ze.hash_attribute.presence=!1,qc.validateObject(e,Ze)}a(gY,"attribute_object");function RY(e){return e=Fc(e),Ze.table.presence={message:Hc},Ze.attribute.presence=!1,Ze.hash_attribute.presence=!1,qc.validateObject(e,Ze)}a(RY,"describe_table");function AY(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(AY,"validateTableResidence");Ub.exports={schema_object:pY,create_table_object:TY,table_object:SY,attribute_object:gY,describe_table:RY,validateTableResidence:AY}});var Pb=m((ede,Mb)=>{"use strict";var OY=require("uuid"),vm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||OY.v4(),this.schema_table=`${this.schema}.${this.table}`}};Mb.exports=vm});var D_=m((rde,vb)=>{"use strict";var NY=Pb(),Bm=class extends NY{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}};vb.exports=Bm});var Hb=m((nde,Bb)=>{"use strict";Bb.exports=yY;var bY="inserted";function yY(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===bY?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(yY,"returnObject")});var U_=m((ode,kb)=>{"use strict";var IY=g(),Hm=we(),wY=Ki(),{getSystemSchemaPath:CY,getSchemaPath:LY}=De(),DY=dn(),UY=L_(),MY=D_(),PY=Hb(),{handleHDBError:qb,hdb_errors:Gb}=z(),Fb=F(),{HTTP_STATUS_CODES:vY}=Gb,qm=DY.hdb_attribute,xb=[];for(let e=0;e<qm.attributes.length;e++)xb.push(qm.attributes[e].attribute);var BY="inserted";kb.exports=HY;async function HY(e){let t=UY.attribute_object(e);if(t)throw qb(new Error,t.message,Gb.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Fb.checkGlobalSchemaTable(e.schema,e.table);if(r)throw qb(new Error,r,vY.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Fb.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 MY(e.schema,e.table,e.attribute,e.id);try{let i=await Hm.openEnvironment(LY(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}`);Hm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Hm.openEnvironment(CY(),IY.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await wY.insertRecords(o,qm.hash_attribute,xb,[n]);return PY(BY,c,{records:[n]},u)}catch(i){throw i}}a(HY,"lmdbCreateAttribute")});var Gm=m((cde,Vb)=>{var{hdb_table:qY,hdb_database:$b}=Ls(),FY=He(),Fm=require("joi"),GY={undefined:"undefined",null:"null"},xY=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||GY[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"),kY=Fm.object({database:$b,schema:$b,table:qY,records:Fm.array().items(Fm.object().custom(xY)).required()});Vb.exports=function(e){return FY.validateBySchema(e,kY)}});var Gc=m((_de,Kb)=>{"use strict";var fn=F(),Yb=D(),lde=Gm(),{getDatabases:$Y}=(_e(),te(ye)),{ClientError:Wi}=z();Kb.exports=VY;function VY(e){if(fn.isEmpty(e))throw new Wi("invalid update parameters defined.");if(fn.isEmptyOrZeroLength(e.schema))throw new Wi("invalid schema specified.");if(fn.isEmptyOrZeroLength(e.table))throw new Wi("invalid table specified.");if(!Array.isArray(e.records))throw new Wi("records must be an array");let t=$Y()[e.schema]?.[e.table];if(fn.isEmpty(t))throw new Wi(`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&&fn.isEmptyOrZeroLength(o[r]))throw Yb.error("a valid hash attribute must be provided with update record:",o),new Wi("a valid hash attribute must be provided with update record, check log for more info");if(!fn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Yb.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Wi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!fn.isEmpty(o[r])&&o[r]!==""&&s.has(fn.autoCast(o[r]))&&(o.skip=!0),s.add(fn.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(VY,"insertUpdateValidate")});var xc=m((Ede,Wb)=>{"use strict";var YY=g().OPERATIONS_ENUM,xm=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=YY.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};Wb.exports=xm});var Yc=m((mde,Qb)=>{"use strict";var hde=xc(),M_=g(),$m=F(),km=D(),KY=require("uuid"),{handleHDBError:kc,hdb_errors:WY}=z(),{HDB_ERROR_MSGS:$c,HTTP_STATUS_CODES:Vc}=WY;Qb.exports=QY;function QY(e,t,r){for(let n=0;n<t.length;n++)zY(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];JY(i,r,e.operation)}}a(QY,"processRows");function zY(e){if(Buffer.byteLength(String(e))>M_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw kc(new Error,$c.ATTR_NAME_LENGTH_ERR(e),Vc.BAD_REQUEST,void 0,void 0,!0);if($m.isEmptyOrZeroLength(e)||$m.isEmpty(e.trim()))throw kc(new Error,$c.ATTR_NAME_NULLISH_ERR,Vc.BAD_REQUEST,void 0,void 0,!0)}a(zY,"validateAttribute");function JY(e,t,r){if(!e.hasOwnProperty(t)||$m.isEmptyOrZeroLength(e[t])){if(r===M_.OPERATIONS_ENUM.INSERT||r===M_.OPERATIONS_ENUM.UPSERT){e[t]=KY.v4();return}throw km.error("Update transaction aborted due to record with no hash value:",e),kc(new Error,$c.RECORD_MISSING_HASH_ERR,Vc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>M_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw km.error(e),kc(new Error,$c.HASH_VAL_LENGTH_ERR,Vc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw km.error(e),kc(new Error,$c.INVALID_FORWARD_SLASH_IN_HASH_ERR,Vc.BAD_REQUEST,void 0,void 0,!0)}a(JY,"validateHash")});var Jb=m((Sde,zb)=>{"use strict";var Vm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};zb.exports=Vm});var Zb=m((gde,Xb)=>{"use strict";var Ym=we(),jY=D(),jb=gr().LMDB_ERRORS_ENUM;Xb.exports=XY;async function XY(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 Ym.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==jb.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Ym.closeEnvironment(global.lmdb_map[s]),await Ym.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==jb.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){jY.error(t)}}a(XY,"cleanLMDBMap")});var hn=m((Ade,sy)=>{"use strict";var Kc=require("crypto"),ZY=$(),{CONFIG_PARAMS:eK}=g(),ty="aes-256-cbc",tK=32,rK=16,Km=64,ry=32,sK=Km+ry,ey=new Map;sy.exports={encrypt:nK,decrypt:iK,createNatsTableStreamName:oK};function nK(e){let t=Kc.randomBytes(tK),r=Kc.randomBytes(rK),s=Kc.createCipheriv(ty,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(nK,"encrypt");function iK(e){let t=e.substr(0,Km),r=e.substr(Km,ry),s=e.substr(sK,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Kc.createDecipheriv(ty,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(iK,"decrypt");function oK(e,t){let r=ZY.get(eK.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=ey.get(r);return s||(s=Kc.createHash("md5").update(r).digest("hex"),ey.set(r,s)),s}a(oK,"createNatsTableStreamName")});var Xn=m((bde,iy)=>{"use strict";var Nde=jt(),P_=D(),ny=L_(),aK=hn(),v_=F(),{handleHDBError:B_,hdb_errors:cK}=z(),{HDB_ERROR_MSGS:H_,HTTP_STATUS_CODES:Wm}=cK,uK=$();uK.initSync();var{getDatabases:Qm}=(_e(),te(ye));iy.exports={describeAll:lK,describeTable:q_,describeSchema:_K};async function lK(e){try{let t=v_.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Qm(),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 q_({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 q_({schema:l,table:d},f)}E&&c.push(E)}catch(E){P_.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 P_.error("Got an error in describeAll"),P_.error(t),B_(new Error,H_.DESCRIBE_ALL_ERR)}}a(lK,"describeAll");async function q_(e,t){v_.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=ny.describe_table(e);if(i)throw i;let c=Qm()[r];if(!c)throw B_(new Error,H_.SCHEMA_NOT_FOUND(e.schema),Wm.NOT_FOUND);let u=c[s];if(!u)throw B_(new Error,H_.TABLE_NOT_FOUND(e.schema,e.table),Wm.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=aK.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){P_.warn(`unable to stat table dbi due to ${d}`)}return _}a(q_,"descTable");async function _K(e){v_.transformReq(e);let t=ny.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=Qm()[s];if(!i)throw B_(new Error,H_.SCHEMA_NOT_FOUND(e.schema),Wm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),v_.isEmpty(u)||u.describe){let l=await q_({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(_K,"describeSchema")});var xr=m((Cde,ly)=>{var dK=dn(),{callbackify:ay,promisify:EK}=require("util"),{getDatabases:cy}=(_e(),te(ye));ly.exports={setSchemaDataToGlobal:oy,getTableSchema:fK,getSystemSchema:hK,setSchemaDataToGlobalAsync:EK(oy)};var uy=Xn(),Ide=ay(uy.describeAll),wde=ay(uy.describeTable);function oy(e){global.hdb_schema=cy(),e&&e()}a(oy,"setSchemaDataToGlobal");function fK(e,t,r){let s=cy()[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(fK,"getTableSchema");function hK(){return dK}a(hK,"getSystemSchema")});var Xt=m((Dde,fy)=>{"use strict";var G_=Gm(),yt=F(),mK=require("util"),x_=kr(),pK=xr(),_y=D(),{handleHDBError:Qi,hdb_errors:SK}=z(),{HTTP_STATUS_CODES:zi}=SK,TK=mK.promisify(pK.getTableSchema),gK="updated",dy="inserted",Ey="upserted";fy.exports={insert:AK,update:OK,upsert:NK,validation:RK,flush:bK};async function RK(e){if(yt.isEmpty(e))throw new Error("invalid update parameters defined.");if(yt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(yt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await TK(e.schema,e.table),r=G_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&yt.isEmptyOrZeroLength(c[s]))throw _y.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(!yt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw _y.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!yt.isEmpty(c[s])&&c[s]!==""&&n.has(yt.autoCast(c[s]))&&(c.skip=!0),n.add(yt.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(RK,"validation");async function AK(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=G_(e);if(t)throw Qi(new Error,t.message,zi.BAD_REQUEST);yt.transformReq(e);let r=yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Qi(new Error,r,zi.BAD_REQUEST);let s=await x_.createRecords(e);return F_(dy,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(AK,"insertData");async function OK(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=G_(e);if(t)throw Qi(new Error,t.message,zi.BAD_REQUEST);yt.transformReq(e);let r=yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Qi(new Error,r,zi.BAD_REQUEST);let s=await x_.updateRecords(e);return yt.isEmpty(s.existing_rows)?F_(gK,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):F_(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(OK,"updateData");async function NK(e){if(e.operation!=="upsert")throw Qi(new Error,"invalid operation, must be upsert",zi.INTERNAL_SERVER_ERROR);let t=G_(e);if(t)throw Qi(new Error,t.message,zi.BAD_REQUEST);yt.transformReq(e);let r=yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Qi(new Error,r,zi.BAD_REQUEST);let s=await x_.upsertRecords(e);return F_(Ey,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(NK,"upsertData");function F_(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===dy?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===Ey?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(F_,"returnObject");function bK(e){return yt.transformReq(e),x_.flush(e.schema,e.table)}a(bK,"flush")});var Jm=m((Mde,py)=>{var yK=He(),zm=require("joi"),{hdb_table:IK,hdb_database:hy}=Ls(),my={schema:hy,database:hy,table:IK},wK={date:zm.date().iso().required()},CK={timestamp:zm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};py.exports=function(e,t){let r=t==="timestamp"?{...my,...CK}:{...my,...wK},s=zm.object(r);return yK.validateBySchema(e,s)}});var gy=m((Pde,Ty)=>{var LK=He(),jm=require("joi"),{hdb_table:DK,hdb_database:Sy}=Ls(),UK=jm.object({schema:Sy,database:Sy,table:DK,hash_values:jm.array().required(),ids:jm.array()});Ty.exports=function(e){return LK.validateBySchema(e,UK)}});var tp=m((vde,Ry)=>{"use strict";var Xm=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}},Zm=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}},ep=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Ry.exports={InsertObject:Xm,NoSQLSeachObject:Zm,DeleteResponseObject:ep}});var Xi=m((Hde,yy)=>{"use strict";var Oy=Jm(),MK=gy(),Ji=F(),Ay=require("moment"),Ny=D(),{promisify:PK,callbackify:vK}=require("util"),ji=g(),BK=xr(),rp=PK(BK.getTableSchema),sp=kr(),{DeleteResponseObject:HK}=tp(),{handleHDBError:Zn,hdb_errors:qK}=z(),{HDB_ERROR_MSGS:k_,HTTP_STATUS_CODES:ei}=qK,FK="records successfully deleted",GK=vK(by);yy.exports={delete:GK,deleteRecord:by,deleteFilesBefore:xK,deleteAuditLogsBefore:kK};async function xK(e){let t=Oy(e,"date");if(t)throw Zn(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);if(Ji.transformReq(e),!Ay(e.date,Ay.ISO_8601).isValid())throw Zn(new Error,k_.INVALID_DATE,ei.BAD_REQUEST,ji.LOG_LEVELS.ERROR,k_.INVALID_DATE,!0);let s=Ji.checkSchemaTableExist(e.schema,e.table);if(s)throw Zn(new Error,s,ei.NOT_FOUND,ji.LOG_LEVELS.ERROR,s,!0);let n=await sp.deleteRecordsBefore(e);if(await rp(e.schema,e.table),Ny.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(xK,"deleteFilesBefore");async function kK(e){let t=Oy(e,"timestamp");if(t)throw Zn(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);if(Ji.transformReq(e),isNaN(e.timestamp))throw Zn(new Error,k_.INVALID_VALUE("Timestamp"),ei.BAD_REQUEST,ji.LOG_LEVELS.ERROR,k_.INVALID_VALUE("Timestamp"),!0);let r=Ji.checkSchemaTableExist(e.schema,e.table);if(r)throw Zn(new Error,r,ei.NOT_FOUND,ji.LOG_LEVELS.ERROR,r,!0);let s=await sp.deleteAuditLogsBefore(e);return await rp(e.schema,e.table),Ny.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(kK,"deleteAuditLogsBefore");async function by(e){e.ids&&(e.hash_values=e.ids);let t=MK(e);if(t)throw Zn(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);Ji.transformReq(e);let r=Ji.checkSchemaTableExist(e.schema,e.table);if(r)throw Zn(new Error,r,ei.NOT_FOUND,ji.LOG_LEVELS.ERROR,r,!0);try{await rp(e.schema,e.table);let s=await sp.deleteRecords(e);return Ji.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${FK}`),s}catch(s){if(s.message===ji.SEARCH_NOT_FOUND_MESSAGE){let n=new HK;return n.message=ji.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(by,"deleteRecord")});var $_=m((Fde,Cy)=>{var $K=require("crypto"),Iy=9;function VK(e){let t=KK(Iy),r=wy(e+t);return t+r}a(VK,"createHash");function YK(e,t){let r=e.substr(0,Iy),s=r+wy(t+r);return e===s}a(YK,"validateHash");function KK(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(KK,"generateSalt");function wy(e){return $K.createHash("md5").update(e).digest("hex")}a(wy,"md5");Cy.exports={hash:VK,validate:YK}});var Dy=m((xde,Ly)=>{var np=He(),qt={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function WK(e){return qt.password.presence=!0,qt.username.presence=!0,qt.role.presence=!0,qt.active.presence=!0,np.validateObject(e,qt)}a(WK,"addUserValidation");function QK(e){return qt.password.presence=!1,qt.username.presence=!0,qt.role.presence=!1,qt.active.presence=!1,np.validateObject(e,qt)}a(QK,"alterUserValidation");function zK(e){return qt.password.presence=!1,qt.username.presence=!0,qt.role.presence=!1,qt.active.presence=!1,np.validateObject(e,qt)}a(zK,"dropUserValidation");Ly.exports={addUserValidation:WK,alterUserValidation:QK,dropUserValidation:zK}});var Me=m((Vde,My)=>{"use strict";var{platform:$de}=require("os"),JK="nats-server.zip",ip="nats-server",jK=process.platform==="win32"?`${ip}.exe`:ip,op="HDB",XK=/^[^\s.,*>]+$/,Uy="__request__",ZK=a(e=>`${e}.${Uy}`,"REQUEST_SUBJECT"),e1={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},t1={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},r1={HUB:"hub.pid",LEAF:"leaf.pid"},s1={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},n1={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:op,deliver_subject:"__HDB__.WORKQUEUE"},i1={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:op,deliver_subject:"HDB.SCHEMAQUEUE"},o1={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:op,deliver_subject:"HDB.USERQUEUE"},a1={SUCCESS:"success",ERROR:"error"},c1={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},u1={TXN:"txn",MSGID:"msgid"},zo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},l1={[zo.ERR]:1,[zo.WRN]:2,[zo.INF]:3,[zo.DBG]:4,[zo.TRC]:5},_1={debug:"-D",trace:"-DVV"};My.exports={NATS_SERVER_ZIP:JK,NATS_SERVER_NAME:ip,NATS_BINARY_NAME:jK,PID_FILES:r1,NATS_CONFIG_FILES:t1,SERVER_SUFFIX:s1,WORK_QUEUE_CONSUMER_NAMES:n1,SCHEMA_QUEUE_CONSUMER_NAMES:i1,USER_QUEUE_CONSUMER_NAMES:o1,NATS_TERM_CONSTRAINTS_RX:XK,REQUEST_SUFFIX:Uy,UPDATE_REMOTE_RESPONSE_STATUSES:a1,CLUSTER_STATUS_STATUSES:c1,REQUEST_SUBJECT:ZK,SUBJECT_PREFIXES:u1,MSG_HEADERS:e1,LOG_LEVELS:zo,LOG_LEVEL_FLAGS:_1,LOG_LEVEL_HIERARCHY:l1}});var ap=m((Kde,Py)=>{"use strict";var d1={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))},E1="certificate.pem",f1="privateKey.pem",h1="ca.pem";Py.exports={CERTIFICATE_VALUES:d1,CERTIFICATE_PEM_NAME:E1,PRIVATEKEY_PEM_NAME:f1,CA_PEM_NAME:h1}});var up=m((Qde,Gy)=>{"use strict";var qy=require("fs-extra"),re=require("joi"),m1=require("os"),{boolean:Te,string:pn,number:Or,array:cp}=re.types(),{totalmem:vy}=require("os"),Jo=require("path"),p1=D(),Y_=F(),Wde=ap(),By=g(),S1=He(),Hy="log",T1="components",g1="Invalid logging.rotation.maxSize unit. Available units are G, M or K",R1="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",A1="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",O1="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",N1="rootPath config parameter is undefined",b1="clustering.enabled config parameter is undefined",mn=Or.min(0).required(),K_=cp.items({host:pn.required(),port:mn}).empty(null),Sn;Gy.exports={configValidator:y1,routesValidator:U1,route_constraints:K_};function y1(e){if(Sn=e.rootPath,Y_.isEmpty(Sn))throw N1;let t=Te.required(),r=re.valid("production","development").required(),s=Or.min(0).max(1e3).empty(null).default(D1),n=pn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(V_),i=re.custom(I1).messages({"any.custom":"{:#label} {:#error}"}),o=pn.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=re.string().empty(null).default(V_),u=re.custom(w1).empty(null).default(V_),l=e.clustering?.enabled;if(Y_.isEmpty(l))throw b1;let _;return l===!0?_=re.object({enabled:t,hubServer:re.object({cluster:re.object({name:re.required().empty(null),network:re.object({port:mn,routes:K_}).required()}).required(),leafNodes:re.object({network:re.object({port:mn}).required()}).required(),network:re.object({port:mn}).required()}).required(),leafServer:re.object({network:re.object({port:mn,routes:K_}).required(),streams:re.object({maxAge:Or.min(120).allow(null).optional(),maxBytes:Or.min(1).allow(null).optional(),maxMsgs:Or.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:re.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:Te.optional(),databaseLevel:Te.optional(),tls:re.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Te.required(),verify:Te.optional()}),user:pn.optional().empty(null)}).required():_=re.object({enabled:t,tls:re.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Te.required()})}).required(),re.object({authentication:re.object({authorizeLocal:Te,cacheTTL:Or.required(),enableSessions:Te,operationTokenTimeout:re.required(),refreshTokenTimeout:re.required()}),analytics:re.object({aggregatePeriod:Or}),clustering:_,customFunctions:re.object({enabled:t,network:re.object({cors:Te.required(),corsAccessList:cp.required(),headersTimeout:Or.min(1).required(),https:Te.required(),keepAliveTimeout:Or.min(1).required(),port:mn,timeout:Or.min(1).required()}),nodeEnv:r,root:n,tls:re.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:re.object({enabled:t}).required(),logging:re.object({auditAuthEvents:re.object({logFailed:Te,logSuccessful:Te}),file:Te.required(),level:re.valid("notify","fatal","error","warn","info","debug","trace"),rotation:re.object({enabled:Te.optional(),compress:Te.optional(),interval:pn.custom(L1).optional().empty(null),maxSize:pn.custom(C1).optional().empty(null),path:pn.optional().empty(null).default(V_)}).required(),root:n,stdStreams:Te.required(),auditLog:Te.required()}).required(),operationsApi:re.object({foreground:Te.required(),network:re.object({cors:Te.required(),corsAccessList:cp.required(),headersTimeout:Or.min(1).required(),https:Te.required(),keepAliveTimeout:Or.min(1).required(),port:mn,timeout:Or.min(1).required()}).required(),nodeEnv:r,tls:re.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:pn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:re.object({network:re.object({port:mn,securePort:mn}).required(),webSocket:Te.optional(),requireAuthentication:Te.optional()}),http:re.object({threads:s}).required(),storage:re.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(y1,"configValidator");function Fy(e){return qy.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Fy,"doesPathExist");function I1(e,t){if(e===null)return;let r=Fy(e);return r?t.message(r):e}a(I1,"validatePemFile");function w1(e,t){re.assert(e,pn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Fy(e);if(r)return t.message(r)}a(w1,"validatePath");function C1(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(g1);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(A1):e}a(C1,"validateRotationMaxSize");function L1(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(R1);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(O1):e}a(L1,"validateRotationInterval");function D1(e,t){let r=t.state.path.join("."),s=m1.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||vy();return i=Math.round(Math.min(i,vy())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),p1.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(D1,"setDefaultThreads");function V_(e,t){if(!Y_.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Y_.isEmpty(Sn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Jo.join(Sn,T1);case"logging.root":return Jo.join(Sn,Hy);case"clustering.leafServer.streams.path":return Jo.join(Sn,"clustering","leaf");case"storage.path":let s=Jo.join(Sn,By.LEGACY_DATABASES_DIR_NAME);return qy.existsSync(s)?s:Jo.join(Sn,By.DATABASES_DIR_NAME);case"logging.rotation.path":return Jo.join(Sn,Hy);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(V_,"setDefaultRoot");function U1(e){let t=re.object({routes:K_});return S1.validateBySchema({routes:e},t)}a(U1,"routesValidator")});var et=m((jde,Jy)=>{"use strict";var $r=g(),Rt=F(),Et=D(),{configValidator:M1,routesValidator:xy}=up(),Zt=require("fs-extra"),P1=require("yaml"),ns=require("path"),v1=require("is-number"),$y=require("properties-reader"),B1=require("lodash"),{handleHDBError:H1}=z(),{HTTP_STATUS_CODES:q1,HDB_ERROR_MSGS:W_}=gr(),Jde=require("minimist"),{SCHEMAS_PARAM_CONFIG:Wc,CONFIG_PARAMS:ti,CONFIG_PARAM_MAP:Tn}=$r,F1="Unable to get config value because config is uninitialized",G1="Config successfully initialized",x1="Error backing up config file",k1="Empty parameter sent to getConfigValue",Vy=ns.join($r.PACKAGE_ROOT,"config","yaml",$r.HDB_DEFAULT_CONFIG_FILE),$1="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",ky={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"},Q_,It;Jy.exports={createConfigFile:V1,getDefaultConfig:Y1,getConfigValue:Ky,initConfig:Wy,flattenConfig:eo,updateConfigValue:Qy,updateConfigObject:W1,getConfiguration:J1,setConfiguration:j1,readConfigFile:dp,getClusteringRoutes:X1,initOldConfig:zy,getConfigFromFile:Z1,getConfigFilePath:Zi,addConfig:eW,deleteConfigFromFile:tW};function V1(e){let t=ri(Vy);Q_=eo(t.toJSON());let r;for(let o in e){let c=Tn[o.toLowerCase()];if(c===ti.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=lp(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){Et.error(_)}}}r&&Yy(t,r),_p(t);let s=t.toJSON();It=eo(s);let n=t.getIn(["rootPath"]),i=ns.join(n,$r.HDB_CONFIG_FILE);Zt.createFileSync(i),Zt.writeFileSync(i,String(t)),Et.trace(`Config file written to ${i}`)}a(V1,"createConfigFile");function Yy(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!Rt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Wc.TABLES))for(let i in s[n][Wc.TABLES])for(let o in s[n][Wc.TABLES][i]){let c=s[n][Wc.TABLES][i][o],u=[ti.SCHEMAS,n,Wc.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=[ti.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){Et.error("Error parsing schemas CLI/env config arguments",s)}}a(Yy,"setSchemasConfig");function Y1(e){if(Q_===void 0){let r=ri(Vy);Q_=eo(r.toJSON())}let t=Tn[e.toLowerCase()];if(t!==void 0)return Q_[t.toLowerCase()]}a(Y1,"getDefaultConfig");function Ky(e){if(e==null){Et.error(k1);return}if(It===void 0){Et.trace(F1);return}let t=Tn[e.toLowerCase()];if(t!==void 0)return It[t.toLowerCase()]}a(Ky,"getConfigValue");function Zi(e=Rt.getPropsFilePath()){let t=Rt.getEnvCliRootPath();return t?ns.join(t,$r.HDB_CONFIG_FILE):$y(e).get($r.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Zi,"getConfigFilePath");function Wy(e=!1){if(It===void 0||e){let t;if(!Rt.noBootFile()){t=Rt.getPropsFilePath();try{Zt.accessSync(t,Zt.constants.F_OK|Zt.constants.R_OK)}catch(i){throw Et.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Zi(t),s;if(r.includes("config/settings.js"))try{zy(r);return}catch(i){if(i.code!==$r.NODE_ERROR_CODES.ENOENT)throw i}try{s=ri(r)}catch(i){if(i.code===$r.NODE_ERROR_CODES.ENOENT){Et.trace(`HarperDB config file not found at ${r}.
|
|
6
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw Et.error(i),new Error(`Error reading HarperDB config file at ${r}`)}K1(s,r),_p(s);let n=s.toJSON();if(It=eo(n),It.logging_rotation_rotate)for(let i in ky)It[i]&&Et.error(`Config ${ky[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Et.trace(G1)}}a(Wy,"initConfig");function K1(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ns.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ns.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ns.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(Et.trace("Updating config file with missing config params"),Zt.writeFileSync(t,String(e)))}a(K1,"checkForUpdatedConfig");function _p(e){let t=e.toJSON(),r=M1(t);if(r.error)throw W_.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(_p,"validateConfig");function W1(e,t){It===void 0&&(It={});let r=Tn[e.toLowerCase()];if(r===void 0){Et.trace(`Unable to update config object because config param '${e}' does not exist`);return}It[r.toLowerCase()]=t}a(W1,"updateConfigObject");function Qy(e,t,r=void 0,s=!1,n=!1,i=!1){It===void 0&&Wy();let o=Ky(Tn.hdb_root),c=ns.join(o,$r.HDB_CONFIG_FILE),u=ri(c),l;if(r===void 0&&e.toLowerCase()===ti.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Tn[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=lp(E,t);u.setIn([...f],h)}else for(let E in r){let f=Tn[E.toLowerCase()];if(f===ti.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),S=lp(f,r[E]);f==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(p){Et.error(p)}}}l&&Yy(u,l),_p(u);let _=u.getIn(["rootPath"]),d=ns.join(_,$r.HDB_CONFIG_FILE);s===!0&&Q1(c,_),Zt.writeFileSync(d,String(u)),n&&(It=eo(u.toJSON())),Et.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Qy,"updateConfigValue");function Q1(e,t){try{let r=ns.join(t,"backup",`${$r.HDB_CONFIG_FILE}.bak`);Zt.copySync(e,r),Et.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Et.error(x1),Et.error(r)}}a(Q1,"backupConfigFile");var z1=["schemas"];function eo(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!z1.includes(r)){let s=eo(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(eo,"flattenConfig");function lp(e,t){if(e===ti.CLUSTERING_NODENAME||e===ti.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(v1(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Rt.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 Rt.autoCast(t)}a(lp,"castConfigValue");function J1(){let e=Rt.getPropsFilePath(),t=Zi(e);return ri(t).toJSON()}a(J1,"getConfiguration");async function j1(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Qy(void 0,void 0,n,!0),$1}catch(i){throw typeof i=="string"||i instanceof String?H1(i,i,q1.BAD_REQUEST,void 0,void 0,!0):i}}a(j1,"setConfiguration");function dp(){let e=Rt.getPropsFilePath();try{Zt.accessSync(e,Zt.constants.F_OK|Zt.constants.R_OK)}catch(s){if(!Rt.noBootFile())throw Et.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Zi(e);return ri(t).toJSON()}a(dp,"readConfigFile");function ri(e){return P1.parseDocument(Zt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ri,"parseYamlDoc");function X1(){let e=dp(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Rt.isEmptyOrZeroLength(t)?[]:t;let r=xy(t);if(r)throw W_.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=Rt.isEmptyOrZeroLength(s)?[]:s;let n=xy(s);if(n)throw W_.CONFIG_VALIDATION(n.message);if(!Rt.isEmptyOrZeroLength(s)&&!Rt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!Rt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw W_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(X1,"getClusteringRoutes");function zy(e){let t=$y(e);It={};for(let r in Tn){let s=t.get(r.toUpperCase());if(Rt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Tn[r].toLowerCase();n===ti.LOGGING_ROOT?It[n]=ns.dirname(s):It[n]=s}return It}a(zy,"initOldConfig");function Z1(e){let t=dp();return B1.get(t,e.replaceAll("_","."))}a(Z1,"getConfigFromFile");async function eW(e,t){let r=ri(Zi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Zt.writeFile(Zi(),String(r))}a(eW,"addConfig");function tW(e){let t=Zi(Rt.getPropsFilePath()),r=ri(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=ns.join(s,$r.HDB_CONFIG_FILE);Zt.writeFileSync(n,String(r))}a(tW,"deleteConfigFromFile")});var Xy=m((Zde,jy)=>{"use strict";var z_=g(),J_=class{static{a(this,"BaseLicense")}constructor(t=0,r=z_.RAM_ALLOCATION_ENUM.DEFAULT,s=z_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Ep=class extends J_{static{a(this,"ExtendedLicense")}constructor(t=0,r=z_.RAM_ALLOCATION_ENUM.DEFAULT,s=z_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};jy.exports={BaseLicense:J_,ExtendedLicense:Ep}});var Qc=m((tEe,nI)=>{"use strict";var Xo=require("fs-extra"),Zy=$_(),eI=require("crypto"),rW=require("moment"),sW=require("uuid").v4,Ft=D(),hp=require("path"),nW=F(),si=g(),iW=Xy().ExtendedLicense,jo="invalid license key format",oW="061183",aW="mofi25",cW="aes-256-cbc",uW=16,lW=32,tI=$();tI.initSync();var fp;nI.exports={validateLicense:rI,generateFingerPrint:dW,licenseSearch:sI,getLicense:hW};function mp(){return hp.join(tI.getHdbBasePath(),si.LICENSE_KEY_DIR_NAME,si.LICENSE_FILE_NAME)}a(mp,"getLicenseDirPath");function _W(){let e=mp();return hp.join(e,si.LICENSE_FILE_NAME)}a(_W,"getLicenseFilePath");function pp(){let e=mp();return hp.join(e,si.REG_KEY_FILE_NAME)}a(pp,"getFingerPrintFilePath");async function dW(){let e=pp();try{return await Xo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await EW();throw Ft.error(`Error writing fingerprint file to ${e}`),Ft.error(t),new Error("There was an error generating the fingerprint")}}a(dW,"generateFingerPrint");async function EW(){let e=sW(),t=Zy.hash(e),r=pp();try{await Xo.mkdirp(mp()),await Xo.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ft.error(`Error writing fingerprint file to ${r}`),Ft.error(s),new Error("There was an error generating the fingerprint")}return t}a(EW,"writeFingerprint");function rI(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:si.RAM_ALLOCATION_ENUM.DEFAULT,version:si.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ft.error("empty license key passed to validate."),r;let s=pp(),n=!1;try{n=Xo.statSync(s)}catch(i){Ft.error(i)}if(n){let i;try{i=Xo.readFileSync(s,"utf8")}catch{Ft.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(aW),c=o[1];c=Buffer.concat([Buffer.from(c)],uW);let u=Buffer.concat([Buffer.from(i)],lW),l=eI.createDecipheriv(cW,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=fW(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(jo),Ft.error(jo),new Error(jo)}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(jo),Ft.error(jo),new Error(jo)}else r.exp_date=_;r.exp_date<rW().valueOf()&&(r.valid_date=!1),Zy.validate(o[1],`${oW}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Ft.error("Invalid licence"),r}a(rI,"validateLicense");function fW(e,t){try{let r=eI.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ft.warn("Check old license failed")}}a(fW,"checkOldLicense");function sI(){let e=new iW,t=[];try{t=Xo.readFileSync(_W(),"utf-8").split(si.NEW_LINE)}catch(r){r.code==="ENOENT"?Ft.info("no license file found"):Ft.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(nW.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=rI(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){Ft.error("There was an error parsing the license string."),Ft.error(n),e.ram_allocation=si.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return fp=e,e}a(sI,"licenseSearch");async function hW(){return fp||await sI(),fp}a(hW,"getLicense")});var er=m((oEe,gI)=>{"use strict";var uI="username is required",lI="nothing to update, must supply active, role or password to update",_I="password cannot be an empty string",dI="If role is specified, it cannot be empty.",EI="active must be true or false";gI.exports={addUser:NW,alterUser:bW,dropUser:IW,getSuperUser:DW,userInfo:wW,listUsers:X_,listUsersExternal:CW,setUsersToGlobal:ea,findAndValidateUser:TI,getClusterUser:UW,USERNAME_REQUIRED:uI,ALTERUSER_NOTHING_TO_UPDATE:lI,EMPTY_PASSWORD:_I,EMPTY_ROLE:dI,ACTIVE_BOOLEAN:EI};var fI=Xt(),mW=Xi(),Tp=$_(),hI=Dy(),mI=jt(),gp=gn(),Nr=F(),pI=require("validate.js"),de=D(),{promisify:pW}=require("util"),Rp=hn(),iI=g(),oI=Me(),SW=et(),sEe=$(),nEe=Qc(),TW=dn(),{table:iEe}=(_e(),te(ye)),{handleHDBError:Us,hdb_errors:gW}=z(),{HTTP_STATUS_CODES:Ms,AUTHENTICATION_ERROR_MSGS:Sp,HDB_ERROR_MSGS:Zo}=gW,{UserEventMsg:Ap}=is(),aI=require("lodash"),{_assignPackageExport:RW}=require("../index");RW("getUser",TI);var SI={username:!0,active:!0,role:!0,password:!0},cI=new Map,j_=mI.searchByValue,AW=mI.searchByHash,OW=pW(mW.delete);async function NW(e){let t=pI.cleanAttributes(e,SI),r=hI.addUserValidation(t);if(r)throw Us(new Error,r.message,Ms.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await j_(s),n=n&&Array.from(n)}catch(u){throw de.error("There was an error searching for a role in add user"),de.error(u),u}if(!n||n.length<1)throw Us(new Error,Zo.ROLE_NAME_NOT_FOUND(t.role),Ms.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Us(new Error,Zo.DUP_ROLES_FOUND(t.role),Ms.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Rp.encrypt(t.password)),t.password=Tp.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await fI.insert(i)}catch(u){throw de.error("There was an error searching for a user."),de.error(u),u}de.debug(o);try{await ea()}catch(u){throw de.error("Got an error setting users to global"),de.error(u),u}if(o.skipped_hashes.length===1)throw Us(new Error,Zo.USER_ALREADY_EXISTS(t.username),Ms.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],gp.signalUserChange(new Ap(process.pid)),`${c.username} successfully added`}a(NW,"addUser");async function bW(e){let t=pI.cleanAttributes(e,SI);if(Nr.isEmptyOrZeroLength(t.username))throw new Error(uI);if(Nr.isEmptyOrZeroLength(t.password)&&Nr.isEmptyOrZeroLength(t.role)&&Nr.isEmptyOrZeroLength(t.active))throw new Error(lI);if(!Nr.isEmpty(t.password)&&Nr.isEmptyOrZeroLength(t.password.trim()))throw new Error(_I);if(!Nr.isEmpty(t.active)&&!Nr.isBoolean(t.active))throw new Error(EI);let r=yW(t.username);if(!Nr.isEmpty(t.password)&&!Nr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Rp.encrypt(t.password)),t.password=Tp.hash(t.password)),t.role==="")throw new Error(dI);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 j_(i)||[])}catch(c){throw de.error("Got an error searching for a role."),de.error(c),c}if(!o||o.length===0){let c=Zo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw de.error(c),Us(new Error,c,Ms.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Zo.ALTER_USER_DUP_ROLES(t.role);throw de.error(c),Us(new Error,c,Ms.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await fI.update(s)}catch(i){throw de.error("Error during update."),de.error(i),i}try{await ea()}catch(i){throw de.error("Got an error setting users to global"),de.error(i),i}return gp.signalUserChange(new Ap(process.pid)),n}a(bW,"alterUser");function yW(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(yW,"isClusterUser");async function IW(e){try{let t=hI.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Nr.isEmpty(global.hdb_users.get(e.username)))throw Us(new Error,Zo.USER_NOT_EXIST(e.username),Ms.NOT_FOUND,void 0,void 0,!0);let s;try{s=await OW(r)}catch(n){throw de.error("Got an error deleting a user."),de.error(n),n}de.debug(s);try{await ea()}catch(n){throw de.error("Got an error setting users to global."),de.error(n),n}return gp.signalUserChange(new Ap(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(IW,"dropUser");async function wW(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 AW(r)}catch(n){throw de.error("Got an error searching for a role."),de.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw de.error(r),r}return t}a(wW,"userInfo");async function CW(){let e;try{e=await X_()}catch(t){throw de.error("Got an error listing users."),de.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(CW,"listUsersExternal");async function X_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await j_(e)}catch(o){throw de.error("Got an error searching for roles."),de.error(o),o}let r={};for(let o of t)r[o.id]=aI.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 j_(s)}catch(o){throw de.error("Got an error searching for users."),de.error(o),o}let i=new Map;for(let o of n)o=aI.cloneDeep(o),o.role=r[o.role],LW(o.role),i.set(o.username,o);return i}catch(e){throw de.error("got an error listing users"),de.error(e),Nr.errorizeMessage(e)}return null}a(X_,"listUsers");function LW(e){try{if(!e){de.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(TW)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){de.error("Got an error trying to set system permissions."),de.error(t)}}a(LW,"appendSystemTablesToRole");async function ea(){try{let e=await X_();global.hdb_users=e}catch(e){throw de.error(e),e}}a(ea,"setUsersToGlobal");async function TI(e,t,r=!0){global.hdb_users||await ea();let s=global.hdb_users.get(e);if(!s)throw Us(new Error,Sp.GENERIC_AUTH_FAIL,Ms.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Us(new Error,Sp.USER_INACTIVE,Ms.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(cI.get(t)===s.password)return n;if(Tp.validate(s.password,t))cI.set(t,s.password);else throw Us(new Error,Sp.GENERIC_AUTH_FAIL,Ms.UNAUTHORIZED,void 0,void 0,!0)}return n}a(TI,"findAndValidateUser");async function DW(){global.hdb_users||await ea();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(DW,"getSuperUser");async function UW(){let e=await X_(),t=SW.getConfigFromFile(iI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Nr.isEmpty(r)&&r?.role?.role===iI.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Rp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+oI.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+oI.SERVER_SUFFIX.ADMIN,r}a(UW,"getClusterUser")});var Jc=m((lEe,NI)=>{"use strict";var to=D(),br=g(),MW=Zb(),cEe=xr(),uEe=Xn(),PW=er(),{validateEvent:RI}=is(),zc=kr(),vW=require("process"),{resetDatabases:BW}=(_e(),te(ye)),HW={[br.ITC_EVENT_TYPES.SCHEMA]:qW,[br.ITC_EVENT_TYPES.USER]:OI};async function qW(e){let t=RI(e);if(t){to.error(t);return}to.trace("ITC schemaHandler received schema event:",e),await MW(e.message),await FW(e.message)}a(qW,"schemaHandler");async function FW(e){try{zc.resetReadTxn(br.SYSTEM_SCHEMA_NAME,br.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),zc.resetReadTxn(br.SYSTEM_SCHEMA_NAME,br.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),zc.resetReadTxn(br.SYSTEM_SCHEMA_NAME,br.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=BW();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){to.error(t)}}a(FW,"syncSchemaMetadata");var AI=[];async function OI(e){try{try{zc.resetReadTxn(br.SYSTEM_SCHEMA_NAME,br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),zc.resetReadTxn(br.SYSTEM_SCHEMA_NAME,br.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){to.warn(r)}let t=RI(e);if(t){to.error(t);return}to.trace(`ITC userHandler ${br.HDB_ITC_CLIENT_PREFIX}${vW.pid} received user event:`,e),await PW.setUsersToGlobal();for(let r of AI)r()}catch(t){to.error(t)}}a(OI,"userHandler");OI.addListener=function(e){AI.push(e)};NI.exports=HW});var is=m((mEe,yI)=>{"use strict";var dEe=D(),Op=F(),GW=g(),{ITC_ERRORS:jc}=gr(),{parentPort:EEe,threadId:xW,isMainThread:kW,workerData:fEe}=require("worker_threads"),{onMessageFromWorkers:$W,broadcast:hEe,broadcastWithAcknowledgement:VW}=tt();yI.exports={sendItcEvent:YW,validateEvent:bI,SchemaEventMsg:KW,UserEventMsg:WW};var Z_;$W(async(e,t)=>{Z_=Z_||Jc(),bI(e),Z_[e.type]&&await Z_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function YW(e){return!kW&&e.message&&(e.message.originator=xW),VW(e)}a(YW,"sendItcEvent");function bI(e){if(typeof e!="object")return jc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Op.isEmpty(e.type))return jc.MISSING_TYPE;if(!e.hasOwnProperty("message")||Op.isEmpty(e.message))return jc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Op.isEmpty(e.message.originator))return jc.MISSING_ORIGIN;if(GW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return jc.INVALID_EVENT(e.type)}a(bI,"validateEvent");function KW(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(KW,"SchemaEventMsg");function WW(e){this.originator=e}a(WW,"UserEventMsg")});var gn=m((TEe,LI)=>{"use strict";var II=g(),SEe=F(),ed=D(),wI=Jb(),ta,{sendItcEvent:CI}=is();function QW(e){try{ed.trace("signalSchemaChange called with message:",e),ta=ta||Jc();let t=new wI(II.ITC_EVENT_TYPES.SCHEMA,e);return ta.schema(t),CI(t)}catch(t){ed.error(t)}}a(QW,"signalSchemaChange");function zW(e){try{ed.trace("signalUserChange called with message:",e),ta=ta||Jc();let t=new wI(II.ITC_EVENT_TYPES.USER,e);return ta.user(t),CI(t)}catch(t){ed.error(t)}}a(zW,"signalUserChange");LI.exports={signalSchemaChange:QW,signalUserChange:zW}});var td=m((REe,UI)=>{"use strict";var DI=F(),JW=g(),jW=D(),XW=U_(),ZW=D_(),eQ=gn(),{SchemaEventMsg:tQ}=is(),rQ="already exists in";UI.exports=sQ;async function sQ(e,t,r){if(DI.isEmptyOrZeroLength(r))return r;let s=[];DI.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 nQ(e,t.schema,t.name,i)})),n}a(sQ,"lmdbCheckForNewAttributes");async function nQ(e,t,r,s){let n=new ZW(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await iQ(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(rQ))jW.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(nQ,"createNewAttribute");async function iQ(e){let t;return t=await XW(e),eQ.signalSchemaChange(new tQ(process.pid,JW.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(iQ,"createAttribute")});var ra=m((OEe,MI)=>{"use strict";var Np=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}};MI.exports=Np});var vI=m((bEe,PI)=>{"use strict";var oQ=ra(),aQ=g().OPERATIONS_ENUM,bp=class extends oQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(aQ.INSERT,r,s,n,i),this.records=t}};PI.exports=bp});var HI=m((IEe,BI)=>{"use strict";var cQ=ra(),uQ=g().OPERATIONS_ENUM,yp=class extends cQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(uQ.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};BI.exports=yp});var FI=m((CEe,qI)=>{"use strict";var lQ=ra(),_Q=g().OPERATIONS_ENUM,Ip=class extends lQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(_Q.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};qI.exports=Ip});var xI=m((DEe,GI)=>{"use strict";var dQ=ra(),EQ=g().OPERATIONS_ENUM,wp=class extends dQ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(EQ.DELETE,s,n,t,i),this.original_records=r}};GI.exports=wp});var Xc=m((PEe,YI)=>{"use strict";var MEe=require("path"),kI=we(),fQ=vI(),hQ=HI(),mQ=FI(),pQ=xI(),sa=Ge(),$I=F(),{CONFIG_PARAMS:SQ}=g(),VI=$();VI.initSync();var rd=g().OPERATIONS_ENUM,{getTransactionAuditStorePath:TQ}=De();YI.exports=gQ;async function gQ(e,t){if(VI.get(SQ.LOGGING_AUDITLOG)===!1)return;let r=TQ(e.schema,e.table),s=await kI.openEnvironment(r,e.table,!0),n=RQ(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){kI.initializeDBIs(s,sa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,sa.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[sa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[sa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),$I.isEmpty(n.user_name)||s.dbis[sa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[sa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(gQ,"writeTransaction");function RQ(e,t){let r=$I.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===rd.INSERT)return new fQ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rd.UPDATE)return new hQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rd.UPSERT)return new mQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rd.DELETE)return new pQ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(RQ,"createTransactionObject")});var Cp=m((HEe,KI)=>{"use strict";var AQ=Gc(),BEe=xc(),Zc=g(),OQ=Yc(),NQ=Ki().insertRecords,bQ=we(),yQ=D(),IQ=td(),{getSchemaPath:wQ}=De(),CQ=Xc();KI.exports=LQ;async function LQ(e){try{let{schema_table:t,attributes:r}=AQ(e);OQ(e,r,t.hash_attribute),e.schema!==Zc.SYSTEM_SCHEMA_NAME&&(r.includes(Zc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Zc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Zc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Zc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await IQ(e.hdb_auth_header,t,r),n=wQ(e.schema,e.table),i=await bQ.openEnvironment(n,e.table),o=await NQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await CQ(e,o)}catch(c){yQ.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(LQ,"lmdbCreateRecords")});var zI=m((FEe,QI)=>{"use strict";var WI=g(),DQ=Cp(),UQ=xc(),MQ=require("fs-extra"),{getSchemaPath:PQ}=De();QI.exports=vQ;async function vQ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new UQ(WI.SYSTEM_SCHEMA_NAME,WI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await DQ(r),await MQ.mkdirp(PQ(e.schema))}a(vQ,"lmdbCreateSchema")});var jI=m((xEe,JI)=>{"use strict";var Lp=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}};JI.exports=Lp});var tw=m((KEe,ew)=>{"use strict";var XI=we(),Dp=Ht(),Up=gr().LMDB_ERRORS_ENUM,BQ=Ge(),ZI=D(),$Ee=F(),HQ=require("lmdb"),qQ=jI(),FQ=g(),{OVERFLOW_MARKER:VEe,MAX_SEARCH_KEY_LENGTH:YEe}=BQ,GQ=FQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function xQ(e,t,r,s){if(Dp.validateEnv(e),t===void 0)throw new Error(Up.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Up.IDS_REQUIRED):new Error(Up.IDS_MUST_BE_ITERABLE);try{let n=XI.listDBIs(e);XI.initializeDBIs(e,t,n);let i=new qQ,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[GQ]>s){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,HQ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let p=0;p<n.length;p++){let b=n[p];if(!h.hasOwnProperty(b)||b===t)continue;let R=e.dbis[b],P=h[b];if(P!=null)try{let V=Dp.getIndexedValues(P);if(V)for(let O=0,w=V.length;O<w;O++)R.remove(V[O],o)}catch{ZI.warn(`cannot delete from attribute: ${b}, ${P}:${o}`)}}});c.push(S),u.push(o),i.original_records.push(h)}catch(h){ZI.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=Dp.getNextMonotonicTime(),i}catch(n){throw n}}a(xQ,"deleteRecords");ew.exports={deleteRecords:xQ}});var eu=m((QEe,sw)=>{"use strict";var na=F(),kQ=tw(),$Q=we(),{getSchemaPath:VQ}=De(),YQ=Xc(),KQ=D();sw.exports=WQ;async function WQ(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(na.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(na.isEmptyOrZeroLength(e.hash_values)&&!na.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];na.isEmpty(u)||e.hash_values.push(u)}}if(na.isEmptyOrZeroLength(e.hash_values))return rw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(na.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=VQ(e.schema,e.table),i=await $Q.openEnvironment(n,e.table),o=await kQ.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await YQ(e,o)}catch(c){KQ.error(`unable to write transaction due to ${c.message}`)}return rw(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(WQ,"lmdbDeleteRecords");function rw(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(rw,"createDeleteResponse")});var Pp=m((jEe,nw)=>{"use strict";var QQ=g(),JEe=Ht();function Mp(e,t){let r=Object.create(null);if(t.length===1&&QQ.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(Mp,"parseRow");function zQ(e,t,r,s){let n=Mp(r,e);s.push(n)}a(zQ,"searchAll");function JQ(e,t,r,s){let n=Mp(r,e);s[t]=n}a(JQ,"searchAllToMap");function jQ(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(jQ,"iterateDBI");function ro(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(ro,"pushResults");function XQ(e,t,r,s,n,i){t.toString().endsWith(e)&&ro(t,r,s,n,i)}a(XQ,"endsWith");function ZQ(e,t,r,s,n,i){t.toString().includes(e)&&ro(t,r,s,n,i)}a(ZQ,"contains");function ez(e,t,r,s,n,i){t>e&&ro(t,r,s,n,i)}a(ez,"greaterThanCompare");function tz(e,t,r,s,n,i){t>=e&&ro(t,r,s,n,i)}a(tz,"greaterThanEqualCompare");function rz(e,t,r,s,n,i){t<e&&ro(t,r,s,n,i)}a(rz,"lessThanCompare");function sz(e,t,r,s,n,i){t<=e&&ro(t,r,s,n,i)}a(sz,"lessThanEqualCompare");nw.exports={parseRow:Mp,searchAll:zQ,searchAllToMap:JQ,iterateDBI:jQ,endsWith:XQ,contains:ZQ,greaterThanCompare:ez,greaterThanEqualCompare:tz,lessThanCompare:rz,lessThanEqualCompare:sz,pushResults:ro}});var ia=m((rfe,_w)=>{"use strict";var ni=we(),ZEe=D(),yr=Ht(),sd=Ge(),Ke=gr().LMDB_ERRORS_ENUM,efe=F(),nz=g(),nd=Pp(),{parseRow:iz}=nd,tfe=require("lmdb"),{OVERFLOW_MARKER:iw,MAX_SEARCH_KEY_LENGTH:oz}=sd;function ow(e,t,r,s=!1,n=void 0,i=void 0){return so(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(ow,"iterateFullIndex");function tu(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return so(e,t,r,(_,d,E,f)=>{let R={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?(R.values=!1,d.getRange(R).map(P=>({value:P}))):d.getRange(R)})}a(tu,"iterateRangeBetween");function so(e,t,r,s){let n=e.database||e,i=ni.openDBI(n,r);i[sd.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ni.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(so,"setupTransaction");function aw(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(iw)){if(!n)if(r)n=ni.openDBI(e,r);else{let u=ni.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=ni.openDBI(e,u[l]),!n[sd.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(aw,"getOverflowCheck");function az(e,t,r,s=!1,n=void 0,i=void 0){if(yr.validateEnv(e),t===void 0)throw new Error(Ke.HASH_ATTRIBUTE_REQUIRED);return so(e,t,t,(o,c,u)=>(id(r),r=ru(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>iz(l.value,r))))}a(az,"searchAll");function cz(e,t,r,s=!1,n=void 0,i=void 0){if(yr.validateEnv(e),t===void 0)throw new Error(Ke.HASH_ATTRIBUTE_REQUIRED);id(r),r=ru(e.database||e,r);let o=new Map;for(let{key:c,value:u}of ow(e,t,t,s,n,i))o.set(c,nd.parseRow(u,r));return o}a(cz,"searchAllToMap");function uz(e,t,r=!1,s=void 0,n=void 0){if(yr.validateEnv(e),t===void 0)throw new Error(Ke.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=ow(e,void 0,t,r,s,n),c=o.transaction,u=aw(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(uz,"iterateDBI");function lz(e,t){if(yr.validateEnv(e),t===void 0)throw new Error(Ke.HASH_ATTRIBUTE_REQUIRED);return ni.statDBI(e,t).entryCount}a(lz,"countAll");function _z(e,t,r,s,n=!1,i=void 0,o=void 0){return ii(e,r,s),so(e,t,r,(c,u,l,_)=>(s=yr.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(_z,"equals");function dz(e,t,r){return ii(e,t,r),ni.openDBI(e,t).getValuesCount(r)}a(dz,"count");function Ez(e,t,r,s,n=!1,i=void 0,o=void 0){return ii(e,r,s),so(e,null,r,(c,u)=>{s=yr.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(Ez,"startsWith");function fz(e,t,r,s,n=!1,i=void 0,o=void 0){return cw(e,t,r,s,n,i,o,!0)}a(fz,"endsWith");function cw(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return ii(e,r,s),so(e,null,r,(u,l,_,d)=>{let E=aw(_,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(iw)?l.getValues(f,{transaction:u}).map(S=>{let p=E(f,S);if(c?p.endsWith(s):p.includes(s))return{key:p,value:S}}).filter(S=>S):(c?h.endsWith(s):h.includes(s))?l[sd.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(S=>({key:f,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(cw,"contains");function hz(e,t,r,s,n=!1,i=void 0,o=void 0){ii(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),tu(e,t,r,s,u,n,i,o,!0,!1)}a(hz,"greaterThan");function mz(e,t,r,s,n=!1,i=void 0,o=void 0){ii(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),tu(e,t,r,s,u,n,i,o,!1,!1)}a(mz,"greaterThanEqual");function pz(e,t,r,s,n=!1,i=void 0,o=void 0){ii(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),tu(e,t,r,u,s,n,i,o,!1,!0)}a(pz,"lessThan");function Sz(e,t,r,s,n=!1,i=void 0,o=void 0){ii(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),tu(e,t,r,u,s,n,i,o,!1,!1)}a(Sz,"lessThanEqual");function Tz(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(yr.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=yr.convertKeyValueToWrite(s),n=yr.convertKeyValueToWrite(n),s>n)throw new Error(Ke.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return tu(e,t,r,s,n,i,o,c)}a(Tz,"between");function gz(e,t,r,s){yr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Ke.HASH_ATTRIBUTE_REQUIRED);if(id(r),r=ru(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=nd.parseRow(c,r)),o}a(gz,"searchByHash");function Rz(e,t,r){yr.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(Rz,"checkHashExists");function Az(e,t,r,s,n=[]){return lw(e,t,r,s,n),uw(e,t,r,s,n).map(i=>i[1])}a(Az,"batchSearchByHash");function Oz(e,t,r,s,n=[]){lw(e,t,r,s,n);let i=new Map;for(let[o,c]of uw(e,t,r,s,n))i.set(o,c);return i}a(Oz,"batchSearchByHashToMap");function uw(e,t,r,s,n=[]){return so(e,t,t,(i,o,c)=>{r=ru(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,nd.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(uw,"batchHashSearch");function lw(e,t,r,s,n){if(yr.validateEnv(e),t===void 0)throw new Error(Ke.HASH_ATTRIBUTE_REQUIRED);if(id(r),s==null)throw new Error(Ke.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Ke.IDS_MUST_BE_ITERABLE)}a(lw,"initializeBatchSearchByHash");function id(e){if(!Array.isArray(e))throw e===void 0?new Error(Ke.FETCH_ATTRIBUTES_REQUIRED):new Error(Ke.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(id,"validateFetchAttributes");function ii(e,t,r){if(yr.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>oz)throw new Error(Ke.SEARCH_VALUE_TOO_LARGE)}a(ii,"validateComparisonFunctions");function ru(e,t){return t.length===1&&nz.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ni.listDBIs(e)),t}a(ru,"setGetWholeRowAttributes");_w.exports={searchAll:az,searchAllToMap:cz,count:dz,countAll:lz,equals:_z,startsWith:Ez,endsWith:fz,contains:cw,searchByHash:gz,setGetWholeRowAttributes:ru,batchSearchByHash:Az,batchSearchByHashToMap:Oz,checkHashExists:Rz,iterateDBI:uz,greaterThan:hz,greaterThanEqual:mz,lessThan:pz,lessThanEqual:Sz,between:Tz}});var oa=m((nfe,mw)=>{var dw=require("lodash"),Ew=He(),Pe=require("joi"),Nz=F(),{hdb_schema_table:od,checkValidTable:fw,hdb_table:hw,hdb_database:ad}=Ls(),{handleHDBError:bz,hdb_errors:yz}=z(),{getDatabases:Iz}=(_e(),te(ye)),{HTTP_STATUS_CODES:wz}=yz,Cz=Pe.object({database:ad,schema:ad,table:hw,search_attribute:od,search_value:Pe.any().required(),get_attributes:Pe.array().min(1).items(od).optional(),desc:Pe.bool(),limit:Pe.number().integer().min(1),offset:Pe.number().integer().min(0)}),Lz=Pe.object({database:ad,schema:ad,table:hw,operator:Pe.string().valid("and","or").default("and").lowercase(),offset:Pe.number().integer().min(0),limit:Pe.number().integer().min(1),get_attributes:Pe.array().min(1).items(od).optional(),conditions:Pe.array().min(1).items(Pe.object({search_attribute:od,search_type:Pe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:Pe.when("search_type",{switch:[{is:"equals",then:Pe.any()},{is:"between",then:Pe.array().items(Pe.alternatives([Pe.string(),Pe.number()])).length(2)}],otherwise:Pe.alternatives(Pe.string(),Pe.number())}).required()})).required()});mw.exports=function(e,t){let r=null;switch(t){case"value":r=Ew.validateBySchema(e,Cz);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(fw("database",e.schema)),i(fw("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=Ew.validateBySchema(e,Lz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=Nz.checkGlobalSchemaTable(e.schema,e.table);if(n)return bz(new Error,n,wz.NOT_FOUND);let o=Iz()[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=dw.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!dw.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 vp=m((ofe,pw)=>{"use strict";var Dz=we(),Uz=oa(),{getSchemaPath:Mz}=De();pw.exports=Pz;function Pz(e){let t=Uz(e,"hashes");if(t)throw t;let r=Mz(e.schema,e.table);return Dz.openEnvironment(r,e.table)}a(Pz,"initialize")});var Bp=m((cfe,Sw)=>{"use strict";var vz=ia(),Bz=vp();Sw.exports=Hz;async function Hz(e){let t=await Bz(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return vz.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Hz,"lmdbGetDataByHash")});var aa=m((lfe,Tw)=>{"use strict";var Hp=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};Tw.exports=Hp});var Rw=m((Efe,gw)=>{"use strict";var dfe=aa(),qz=ia(),Fz=vp();gw.exports=Gz;async function Gz(e){let t=await Fz(e),r=global.hdb_schema[e.schema][e.table];return qz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Gz,"lmdbSearchByHash")});var os=m((hfe,Aw)=>{"use strict";var qp=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=_}};Aw.exports=qp});var cd=m((pfe,ww)=>{"use strict";var Gt=ia(),xz=we(),kz=F(),ce=Ge(),no=g(),$z=dn(),Ow=gr().LMDB_ERRORS_ENUM,{getSchemaPath:Vz}=De(),Rn=no.SEARCH_WILDCARDS;async function Yz(e,t,r){let s;e.schema===no.SYSTEM_SCHEMA_NAME?s=$z[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Iw(e,s.hash_attribute,r,t);return bw(e,n,s.hash_attribute,r)}a(Yz,"prepSearch");async function bw(e,t,r,s){let n=Vz(e.schema,e.table),i=await xz.openEnvironment(n,e.table),o=yw(i,e,t,r),c=o.transaction||i;if([ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ce.SEARCH_TYPES.SEARCH_ALL,ce.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Kz(e,r)===!1){let _=e.search_attribute;if(_===r)return s?Nw(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?Nw(o,d):o.map(d)}let l=e.search_attribute===r?o.map(_=>_.key):o.map(_=>_.value);return s===!0?Gt.batchSearchByHashToMap(c,r,e.get_attributes,l):Gt.batchSearchByHash(c,r,e.get_attributes,l)}a(bw,"executeSearch");function yw(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 ce.SEARCH_TYPES.EQUALS:n=Gt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.CONTAINS:n=Gt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.ENDS_WITH:case ce.SEARCH_TYPES._ENDS_WITH:n=Gt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.STARTS_WITH:case ce.SEARCH_TYPES._STARTS_WITH:n=Gt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Gt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Gt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ce.SEARCH_TYPES.SEARCH_ALL:return Gt.searchAll(e,s,t.get_attributes,o,c,u);case ce.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Gt.searchAllToMap(e,s,t.get_attributes,o,c,u);case ce.SEARCH_TYPES.BETWEEN:n=Gt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ce.SEARCH_TYPES.GREATER_THAN:case ce.SEARCH_TYPES._GREATER_THAN:n=Gt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.GREATER_THAN_EQUAL:case ce.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Gt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.LESS_THAN:case ce.SEARCH_TYPES._LESS_THAN:n=Gt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.LESS_THAN_EQUAL:case ce.SEARCH_TYPES._LESS_THAN_EQUAL:n=Gt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(yw,"searchByType");function Nw(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Nw,"createMapFromIterable");function Kz(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(Kz,"checkToFetchMore");function Iw(e,t,r,s){if(kz.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),Rn.indexOf(n)>-1)return r===!0?ce.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ce.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Rn[0])<0&&n.indexOf(Rn[1])<0)return c===!0?r===!0?ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ce.SEARCH_TYPES.EQUALS;if(Rn.indexOf(i)>=0&&Rn.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ce.SEARCH_TYPES.CONTAINS;if(Rn.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ce.SEARCH_TYPES.ENDS_WITH;if(Rn.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ce.SEARCH_TYPES.STARTS_WITH;if(n.includes(Rn[0])||n.includes(Rn[1]))return ce.SEARCH_TYPES.EQUALS;throw new Error(Ow.UNKNOWN_SEARCH_TYPE)}else switch(s){case no.VALUE_SEARCH_COMPARATORS.BETWEEN:return ce.SEARCH_TYPES.BETWEEN;case no.VALUE_SEARCH_COMPARATORS.GREATER:return ce.SEARCH_TYPES.GREATER_THAN;case no.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ce.SEARCH_TYPES.GREATER_THAN_EQUAL;case no.VALUE_SEARCH_COMPARATORS.LESS:return ce.SEARCH_TYPES.LESS_THAN;case no.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ce.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Ow.UNKNOWN_SEARCH_TYPE)}}a(Iw,"createSearchTypeFromSearchObject");ww.exports={executeSearch:bw,createSearchTypeFromSearchObject:Iw,prepSearch:Yz,searchByType:yw}});var Lw=m((gfe,Cw)=>{"use strict";var Tfe=os(),Wz=oa(),Qz=F(),zz=g(),Jz=cd();Cw.exports=jz;function jz(e,t){if(!Qz.isEmpty(t)&&zz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Wz(e,"value");if(s)throw s;let n=!0;return Jz.prepSearch(e,t,n)}a(jz,"lmdbGetDataByValue")});var su=m((Ofe,Dw)=>{"use strict";var Afe=os(),Xz=oa(),Zz=F(),eJ=g(),tJ=cd();Dw.exports=rJ;async function rJ(e,t){if(!Zz.isEmpty(t)&&eJ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Xz(e,"value");if(s)throw s;return tJ.prepSearch(e,t,!1)}a(rJ,"lmdbSearchByValue")});var Mw=m((yfe,Uw)=>{"use strict";var bfe=Ge(),Fp=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}},Gp=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},xp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Uw.exports={SearchByConditionsObject:Fp,SearchCondition:Gp,SortAttribute:xp}});var qw=m((Lfe,Hw)=>{"use strict";var wfe=Mw().SearchByConditionsObject,sJ=os(),nJ=oa(),kp=ia(),ud=Ge(),{Resource:Cfe}=(ys(),te(tm)),Bw=cd(),iJ=Pp(),oJ=require("lodash"),{getSchemaPath:aJ}=De(),Pw=we(),{handleHDBError:cJ,hdb_errors:uJ}=z(),{HTTP_STATUS_CODES:lJ}=uJ,_J=1e8;Hw.exports=dJ;async function dJ(e){let t=nJ(e,"conditions");if(t)throw cJ(t,t.message,lJ.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=aJ(e.schema,e.table),s=await Pw.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)Pw.openDBI(s,l.search_attribute);let i=oJ.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===ud.SEARCH_TYPES.EQUALS?l.estimated_count=kp.count(s,l.search_attribute,l.search_value):_===ud.SEARCH_TYPES.CONTAINS||_===ud.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=_J}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await vw(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(Bw.filterByType),d=_.length,E=kp.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=>iJ.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await vw(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=kp.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(dJ,"lmdbSearchByConditions");async function vw(e,t,r,s){let n=new sJ(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===ud.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Bw.searchByType(e,n,i,s).map(o=>o.value)}a(vw,"executeConditionSearch")});var nu=m((Ufe,Fw)=>{"use strict";var EJ=g().OPERATIONS_ENUM,$p=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=EJ.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Fw.exports=$p});var Vp=m((Pfe,Ww)=>{"use strict";var $w=os(),Vw=nu(),Yw=su(),Kw=eu(),tr=g(),Gw=F(),xw=we(),{getTransactionAuditStorePath:fJ,getSchemaPath:hJ}=De(),kw=D();Ww.exports=mJ;async function mJ(e){try{if(Gw.isEmpty(global.hdb_schema[e.schema])||Gw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await pJ(e),await SJ(e);let t=hJ(e.schema,e.table);try{await xw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")kw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=fJ(e.schema,e.table);await xw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")kw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(mJ,"lmdbDropTable");async function pJ(e){let t=new $w(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Yw(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 Vw(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Kw(n)}a(pJ,"deleteAttributesFromSystem");async function SJ(e){let t=new $w(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Yw(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 Vw(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Kw(n)}catch(i){throw i}}a(SJ,"dropTableFromSystem")});var zw=m((Bfe,Qw)=>{"use strict";var TJ=require("fs-extra"),gJ=os(),RJ=aa(),AJ=nu(),OJ=Vp(),NJ=eu(),bJ=Bp(),yJ=su(),An=g(),{getSchemaPath:IJ}=De(),{handleHDBError:wJ,hdb_errors:CJ}=z(),{HDB_ERROR_MSGS:LJ,HTTP_STATUS_CODES:DJ}=CJ;Qw.exports=UJ;async function UJ(e){let t;try{t=await MJ(e.schema);let r=new gJ(An.SYSTEM_SCHEMA_NAME,An.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,An.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[An.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await yJ(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await OJ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new AJ(An.SYSTEM_SCHEMA_NAME,An.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await NJ(n);let i=IJ(t);await TJ.remove(i)}catch(r){throw r}}a(UJ,"lmdbDropSchema");async function MJ(e){let t=new RJ(An.SYSTEM_SCHEMA_NAME,An.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[An.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await bJ(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw wJ(new Error,LJ.SCHEMA_NOT_FOUND(e),DJ.NOT_FOUND,void 0,void 0,!0);return s}a(MJ,"validateDropSchema")});var iu=m((qfe,Jw)=>{"use strict";var Yp=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Jw.exports=Yp});var Wp=m((xfe,jw)=>{"use strict";var PJ=require("fs-extra"),ld=we(),{getTransactionAuditStorePath:vJ}=De(),Kp=Ge(),Gfe=iu();jw.exports=BJ;async function BJ(e){let t;try{let r=vJ(e.schema,e.table);await PJ.mkdirp(r),t=await ld.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{ld.createDBI(t,Kp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ld.createDBI(t,Kp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ld.createDBI(t,Kp.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(BJ,"createTransactionsAuditEnvironment")});var tC=m(($fe,eC)=>{"use strict";var Qp=g(),Xw=we(),HJ=Ki(),{getSystemSchemaPath:qJ,getSchemaPath:FJ}=De(),GJ=dn(),xJ=U_(),zp=D_(),kJ=D(),$J=Wp(),jp=GJ.hdb_table,Zw=[];for(let e=0;e<jp.attributes.length;e++)Zw.push(jp.attributes[e].attribute);eC.exports=VJ;async function VJ(e,t){let r=FJ(t.schema,t.table),s=new zp(t.schema,t.table,Qp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new zp(t.schema,t.table,Qp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new zp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Xw.createEnvironment(r,t.table),e!==void 0){let o=await Xw.openEnvironment(qJ(),Qp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await HJ.insertRecords(o,jp.hash_attribute,Zw,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Jp(s),await Jp(n),await Jp(i)}await $J(t)}catch(o){throw o}}a(VJ,"lmdbCreateTable");async function Jp(e){try{await xJ(e)}catch(t){kJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Jp,"createAttribute")});var sC=m((Yfe,rC)=>{"use strict";var YJ=Gc(),KJ=Yc(),WJ=td(),ou=g(),QJ=Ki().updateRecords,zJ=we(),{getSchemaPath:JJ}=De(),jJ=Xc(),XJ=D();rC.exports=ZJ;async function ZJ(e){try{let{schema_table:t,attributes:r}=YJ(e);KJ(e,r,t.hash_attribute),e.schema!==ou.SYSTEM_SCHEMA_NAME&&(r.includes(ou.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ou.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ou.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ou.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await WJ(e.hdb_auth_header,t,r),n=JJ(e.schema,e.table),i=await zJ.openEnvironment(n,e.table),o=await QJ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await jJ(e,o)}catch(c){XJ.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(ZJ,"lmdbUpdateRecords")});var iC=m((Wfe,nC)=>{"use strict";var ej=g().OPERATIONS_ENUM,Xp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=ej.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};nC.exports=Xp});var aC=m((Jfe,oC)=>{"use strict";var zfe=iC(),tj=Gc(),rj=Yc(),sj=td(),au=g(),nj=Ki().upsertRecords,ij=we(),{getSchemaPath:oj}=De(),aj=Xc(),cj=D(),{handleHDBError:uj,hdb_errors:lj}=z();oC.exports=_j;async function _j(e){let t;try{t=tj(e)}catch(u){throw uj(u,u.message,lj.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;rj(e,s,r.hash_attribute),e.schema!==au.SYSTEM_SCHEMA_NAME&&(s.includes(au.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(au.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(au.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(au.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await sj(e.hdb_auth_header,r,s),i=oj(e.schema,e.table),o=await ij.openEnvironment(i,e.table),c=await nj(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await aj(e,c)}catch(u){cj.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(_j,"lmdbUpsertRecords")});var uC=m((Xfe,cC)=>{"use strict";var Zp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};cC.exports=Zp});var _C=m((ehe,lC)=>{"use strict";var eS=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}};lC.exports=eS});var fC=m((she,EC)=>{"use strict";var tS=we(),{getTransactionAuditStorePath:dj}=De(),rhe=uC(),cu=Ge(),Ej=F(),dC=_C(),fj=require("util").promisify,hj=fj(setTimeout),mj=1e4,pj=100;EC.exports=Sj;async function Sj(e){let t=dj(e.schema,e.table),r=await tS.openEnvironment(t,e.table,!0),s=tS.listDBIs(r);tS.initializeDBIs(r,cu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new dC;do n=await Tj(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 hj(pj);while(n.transactions_deleted>0);return i}a(Sj,"deleteAuditLogsBefore");async function Tj(e,t){let r=new dC;try{let s=e.dbis[cu.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[cu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Ej.isEmpty(c)||(n=e.dbis[cu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[cu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>mj)break}return await n,r}catch(s){throw s}}a(Tj,"deleteTransactions")});var mC=m((ihe,hC)=>{"use strict";var rS=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};hC.exports=rS});var SC=m((che,pC)=>{"use strict";var gj=os(),Rj=nu(),ahe=mC(),Ps=g(),Aj=F(),sS=we(),Oj=dn(),Nj=su(),bj=eu(),{getSchemaPath:yj}=De();pC.exports=Ij;async function Ij(e,t=!0){let r;e.schema===Ps.SYSTEM_SCHEMA_NAME?r=Oj[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await Cj(e),n=yj(e.schema,e.table),i=await sS.openEnvironment(n,e.table);return t===!0&&await wj(e,i,r.hash_attribute),sS.dropDBI(i,e.attribute),s}a(Ij,"lmdbDropAttribute");async function wj(e,t,r){let s=sS.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(wj,"removeAttributeFromAllObjects");async function Cj(e){let t=new gj(Ps.SYSTEM_SCHEMA_NAME,Ps.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ps.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ps.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ps.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await Nj(t)).filter(o=>o[Ps.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Aj.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Ps.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Rj(Ps.SYSTEM_SCHEMA_NAME,Ps.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return bj(i)}a(Cj,"dropAttributeFromSystem")});var NC=m((_he,OC)=>{"use strict";var nS=we(),ca=Ge(),lhe=Ht(),iS=g(),TC=F(),{getTransactionAuditStorePath:Lj}=De(),Dj=ia(),_d=ra(),Uj=D();OC.exports=Mj;async function Mj(e){let t=Lj(e.schema,e.table),r=await nS.openEnvironment(t,e.table,!0),s=nS.listDBIs(r);nS.initializeDBIs(r,ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case iS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return gC(r,e.search_values);case iS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,vj(r,e.search_values,n);case iS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Pj(r,e.search_values);default:return gC(r)}}a(Mj,"readAuditLog");function gC(e,t=[0,Date.now()]){TC.isEmpty(t[0])&&(t[0]=0),TC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new _d,n))}a(gC,"searchTransactionsByTimestamp");function Pj(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[ca.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,AC(e,i))}return Object.fromEntries(r)}a(Pj,"searchTransactionsByUsername");function vj(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=Dj.equals(e,ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ca.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=AC(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);RC(u,"records",r,_,o),RC(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(vj,"searchTransactionsByHashValues");function RC(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 _d(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new _d(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(RC,"loopRecords");function AC(e,t){let r=[];try{let s=e.dbis[ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new _d,i);r.push(o)}}catch(i){Uj.warn(i)}return r}catch(s){throw s}}a(AC,"batchSearchTransactions")});var yC=m((hhe,bC)=>{"use strict";var{getSchemaPath:Ehe}=De(),fhe=we(),{database:Bj}=(_e(),te(ye));bC.exports={writeTransaction:Hj};async function Hj(e,t,r){return Bj({database:e,table:t}).transaction(r)}a(Hj,"writeTransaction")});var LC=m((phe,CC)=>{"use strict";var{getSchemaPath:IC}=De(),wC=we();CC.exports={flush:qj,resetReadTxn:Fj};async function qj(e,t){return(await wC.openEnvironment(IC(e,t),t.toString())).flushed}a(qj,"flush");async function Fj(e,t){try{(await wC.openEnvironment(IC(e,t),t.toString())).resetReadTxn()}catch{}}a(Fj,"resetReadTxn")});var PC=m((The,MC)=>{"use strict";var{Readable:Gj}=require("stream"),{getDatabases:xj}=(_e(),te(ye)),{readSync:kj,openSync:$j,createReadStream:DC}=require("fs"),{open:Vj}=require("lmdb"),UC=R_(),Yj=O_(),{INTERNAL_DBIS_NAME:Kj}=Ge();MC.exports=Qj;var oS=32768,Wj=100;async function Qj(e){let t=e.database||e.schema||"data",r=xj()[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=Vj({noSync:!0,maxDbs:Yj.MAX_DBS}),E,f=d.openDB(Kj,new UC(!1)),h=_.useReadTransaction(),S=0;for(let{key:b,value:R}of _.getRange({transaction:h,start:!1}))if(n.some(P=>b.startsWith?.(P+"/"))){f.put(b,R);let[,P]=b.split("/"),V=!P,O=new UC(!V,V);O.encoding="binary";let w=d.openDB(b,O),x=_.openDB(b,O);for(let{key:k,version:J,value:Oe}of x.getRange({transaction:h,versions:V}))E=w.put(k,Oe,J),S++%Wj===0&&await new Promise(Tt=>setTimeout(Tt,20))}await E;let p=DC(d.path);return p.headers=u(),p.on("close",()=>{h.done(),d.close()}),p}let o=r[Object.keys(r)[0]].primaryStore,c=$j(o.path);return o.transaction(()=>{let l=Buffer.alloc(oS);kj(c,l,0,oS);let _=o.useReadTransaction(),d=DC(null,{fd:c,start:oS}),E=new Gj.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(Qj,"getBackup")});var HC=m((Rhe,BC)=>{"use strict";var zj=D(),{handleHDBError:Jj}=z(),jj=sb(),Xj=U_(),Zj=Cp(),e2=zI(),t2=eu(),r2=Bp(),s2=Rw(),n2=Lw(),i2=su(),o2=qw(),a2=zw(),c2=tC(),u2=sC(),l2=aC(),_2=fC(),d2=Vp(),E2=SC(),f2=NC(),h2=yC(),vC=LC(),m2=PC(),aS=class extends jj{static{a(this,"LMDBBridge")}async searchByConditions(t){return o2(t)}async getDataByHash(t){return await r2(t)}async searchByHash(t){return await s2(t)}async getDataByValue(t,r){return await n2(t,r)}async searchByValue(t){return await i2(t)}async createSchema(t){return await e2(t)}async dropSchema(t){return await a2(t)}async createTable(t,r){return await c2(t,r)}async dropTable(t){return await d2(t)}async createAttribute(t){return await Xj(t)}async createRecords(t){return await Zj(t)}async updateRecords(t){return await u2(t)}async upsertRecords(t){try{return await l2(t)}catch(r){throw Jj(r,null,null,zj.ERR,r)}}async deleteRecords(t){return await t2(t)}async dropAttribute(t){return await E2(t)}async deleteAuditLogsBefore(t){return await _2(t)}async readAuditLog(t){return await f2(t)}writeTransaction(t,r,s){return h2.writeTransaction(t,r,s)}flush(t,r){return vC.flush(t,r)}resetReadTxn(t,r){return vC.resetReadTxn(t,r)}getBackup(t){return m2(t)}};BC.exports=aS});var KC={};je(KC,{ResourceBridge:()=>lS});function _S({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 FC(e,t){let r=vs(e),s=_S(e,r);if(!r)throw new as.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 Xe(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&&E_(u),t?yield{key:c,value:u}:yield u}})}function vs(e){let t=e.database||e.schema||S2,r=cs()[t];if(!r)throw(0,as.handleHDBError)(new Error,p2.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function GC(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*xC(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 kC,dd,as,$C,VC,us,cS,uS,YC,p2,S2,T2,g2,qC,lS,WC=ge(()=>{"use strict";kC=U(HC()),dd=U(oa()),as=U(z());_e();$C=U(Gc()),VC=U(Yc()),us=U(g()),cS=U(gn()),uS=U(is()),YC=U(F());Vi();f_();({HDB_ERROR_MSGS:p2}=as.hdb_errors),S2="data",T2=1e4,g2=10,lS=class extends kC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),qC=this}async searchByConditions(t){let r=(0,dd.default)(t,"conditions");if(r)throw(0,as.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=vs(t);if(!s)throw new as.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:_S(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 as.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}]}dt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await vs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=vs(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){vs(t).dropTable()}createSchema(t){return uu({database:t.schema,table:null}),cS.signalSchemaChange(new uS.SchemaEventMsg(process.pid,us.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await dS(t.schema),cS.signalSchemaChange(new uS.SchemaEventMsg(process.pid,us.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,qC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,$C.default)(t);(0,VC.default)(t,s,r.primaryKey);let n,i=cs()[t.schema][t.table],o={user:t.hdb_user};return Xe(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=E_(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=cs()[t.schema][t.table],s={user:t.hdb_user};return Xe(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 GC(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=cs()[t.schema][t.table];if(!r.createdTimeProperty)throw new as.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:us.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,YC.async_set_timeout)(g2),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%T2===0&&await l();return u.length>0&&await l(),n?GC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,dd.default)(t,"hashes");if(r)throw r;return FC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of FC(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&us.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,dd.default)(t,"value");if(s)throw s;let n=vs(t);if(!n)throw new as.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===us.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:_S(t,n)})}async getDataByValue(t,r){let s=new Map,n=vs(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){vs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return vs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=vs(t),s={};switch(t.search_type){case us.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 us.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of xC(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return xC(r,t.search_values?.[0],t.search_values?.[1])}}};a(_S,"getSelect");a(FC,"getRecords");a(vs,"getTable");a(GC,"createDeleteResponse");a(xC,"groupRecordsInHistory")});var kr=m((Ihe,QC)=>{"use strict";var{ResourceBridge:R2}=(WC(),te(KC)),A2=$();A2.initSync();var Ed;function O2(){return Ed||(Ed=new R2,Ed)}a(O2,"getBridge");QC.exports=O2()});var XC=m((Che,jC)=>{"use strict";var zC=require("lodash"),lu=require("mathjs"),N2=require("jsonata"),JC=F();jC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?zC.uniqWith(e,zC.isEqual):e,searchJSON:b2,mad:_u.bind(null,lu.mad),mean:_u.bind(null,lu.mean),mode:_u.bind(null,lu.mode),prod:_u.bind(null,lu.prod),median:_u.bind(null,lu.median)};function _u(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(_u,"aggregateFunction");function b2(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(JC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),JC.isEmpty(this.__ala__.res[r])){let s=N2(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(b2,"searchJSON")});var eL=m((Dhe,ZC)=>{"use strict";var rt=require("moment"),ES="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;ZC.exports={current_date:()=>rt().utc().format("YYYY-MM-DD"),current_time:()=>rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return rt(e).utc().format("YYYY");case"month":return rt(e).utc().format("MM");case"day":return rt(e).utc().format("DD");case"hour":return rt(e).utc().format("HH");case"minute":return rt(e).utc().format("mm");case"second":return rt(e).utc().format("ss");case"millisecond":return rt(e).utc().format("SSS");default:break}},date:e=>rt(e).utc().format(ES),date_format:(e,t)=>rt(e).utc().format(t),date_add:(e,t,r)=>rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=rt(e).utc(),n=rt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>rt().utc().valueOf(),get_server_time:()=>rt().format(ES),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(ES)}});var nL=m((Uhe,sL)=>{"use strict";var y2=require("@turf/area"),I2=require("@turf/length"),w2=require("@turf/circle"),C2=require("@turf/difference"),L2=require("@turf/distance"),D2=require("@turf/boolean-contains"),U2=require("@turf/boolean-equal"),M2=require("@turf/boolean-disjoint"),P2=require("@turf/helpers"),tL=g(),Ee=F();sL.exports={geoArea:v2,geoLength:B2,geoCircle:H2,geoDifference:q2,geoDistance:rL,geoNear:F2,geoContains:G2,geoEqual:x2,geoCrosses:k2,geoConvert:$2};var fS="geo1 is required",hS="geo2 is required";function v2(e){if(Ee.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=Ee.autoCastJSON(e)),y2.default(e)}a(v2,"geoArea");function B2(e,t){if(Ee.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=Ee.autoCastJSON(e)),I2.default(e,{units:t||"kilometers"})}a(B2,"geoLength");function H2(e,t,r){if(Ee.isEmpty(e))throw new Error("point is required");if(Ee.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=Ee.autoCastJSON(e)),w2.default(e,t,{units:r||"kilometers"})}a(H2,"geoCircle");function q2(e,t){if(Ee.isEmpty(e))throw new Error("poly1 is required");if(Ee.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),C2(e,t)}a(q2,"geoDifference");function rL(e,t,r){if(Ee.isEmpty(e))throw new Error("point1 is required");if(Ee.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),L2.default(e,t,{units:r||"kilometers"})}a(rL,"geoDistance");function F2(e,t,r,s){if(Ee.isEmpty(e))throw new Error("point1 is required");if(Ee.isEmpty(t))throw new Error("point2 is required");if(Ee.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return rL(e,t,s)<=r}a(F2,"geoNear");function G2(e,t){if(Ee.isEmpty(e))throw new Error(fS);if(Ee.isEmpty(e))throw new Error(hS);return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),D2.default(e,t)}a(G2,"geoContains");function x2(e,t){if(Ee.isEmpty(e))throw new Error(fS);if(Ee.isEmpty(e))throw new Error(hS);return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),U2.default(e,t)}a(x2,"geoEqual");function k2(e,t){if(Ee.isEmpty(e))throw new Error(fS);if(Ee.isEmpty(e))throw new Error(hS);return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),!M2.default(e,t)}a(k2,"geoCrosses");function $2(e,t,r){if(Ee.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ee.isEmpty(t))throw new Error("geo_type is required");if(Ee.isEmpty(tL.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(tL.GEO_CONVERSION_ENUM).join(",")}`);return P2[t](e,r)}a($2,"geoConvert")});var fd=m((Phe,iL)=>{var io=XC(),Ir=eL(),Bs=nL();iL.exports=e=>{e.aggr.mad=e.aggr.MAD=io.mad,e.aggr.mean=e.aggr.MEAN=io.mean,e.aggr.mode=e.aggr.MODE=io.mode,e.aggr.prod=e.aggr.PROD=io.prod,e.aggr.median=e.aggr.MEDIAN=io.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=io.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=io.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Ir.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Ir.current_time,e.fn.extract=e.fn.EXTRACT=Ir.extract,e.fn.date=e.fn.DATE=Ir.date,e.fn.date_format=e.fn.DATE_FORMAT=Ir.date_format,e.fn.date_add=e.fn.DATE_ADD=Ir.date_add,e.fn.date_sub=e.fn.DATE_SUB=Ir.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Ir.date_diff,e.fn.now=e.fn.NOW=Ir.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Ir.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Ir.get_server_time,e.fn.getdate=e.fn.GETDATE=Ir.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Ir.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Bs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Bs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Bs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Bs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Bs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Bs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Bs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Bs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Bs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Bs.geoNear}});var uL=m((vhe,cL)=>{"use strict";var du=require("lodash"),wt=require("alasql");wt.options.cache=!1;var V2=fd(),oL=require("clone"),hd=require("recursive-iterator"),ie=D(),oe=F(),ua=kr(),Y2=g(),{hdb_errors:K2}=z(),{getDatabases:aL}=(_e(),te(ye)),W2="IS NULL",ls="There was a problem performing this search. Please check the logs and try again.";V2(wt);var mS=class{static{a(this,"SQLSearch")}constructor(t,r){if(oe.isEmpty(t))throw ie.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(),oe.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!oe.isEmptyOrZeroLength(s))return ie.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw ie.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ie.error(s),new Error(ls)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw ie.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ie.error(s),new Error(ls)}if(Object.keys(this.data).length===0)return ie.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw ie.error("Error thrown from processJoins in SQLSearch class method search."),ie.error(s),new Error(ls)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw ie.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ie.error(s),new Error(ls)}try{return t=await this._finalSQL(),t}catch(s){throw ie.error("Error thrown from finalSQL in SQLSearch class method search."),ie.error(s),new Error(ls)}}_getColumns(){let t=new hd(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(oL(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=du.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=aL()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(oe.isEmpty(this.statement.where)){ie.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new hd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!oe.isEmpty(r)&&r.right)if(oe.isNotEmptyAndHasValue(r.right.value)){let s=oe.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new wt.yy.LogicValue({value:s}):r.right instanceof wt.yy.StringValue&&!oe.isEmpty(s)&&oe.autoCasterIsNumberCheck(s.toString())&&(r.right=new wt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=oe.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new wt.yy.LogicValue({value:i}):s instanceof wt.yy.StringValue&&oe.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new wt.yy.NumValue({value:i}))});if(t){ie.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new hd(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(!oe.isEmpty(Y2.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(oe.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(oe.isEmptyOrZeroLength(r.left.columnid)||oe.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(oe.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"=":!oe.isEmpty(r.right.value)||!oe.isEmpty(r.left.value)?s.add(oe.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(oe.isEmptyOrZeroLength(this.all_table_attributes)&&oe.isEmptyOrZeroLength(this.statement.from)&&oe.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&&du.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(oe.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);oe.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(oe.isEmptyOrZeroLength(this.all_table_attributes)&&!oe.isEmptyOrZeroLength(this.columns.columns))return t;if(oe.isEmptyOrZeroLength(this.all_table_attributes)&&oe.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await wt.promise(r)}catch(r){throw ie.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ie.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(oL(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(oe.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(W2)>-1&&this.tables.forEach(n=>{let i={columnid:aL()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=du.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),!oe.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!oe.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await ua.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 ie.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ie.error(_),new Error(ls)}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 ua.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,oe.autoCast(f)))}))}catch(_){throw ie.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ie.error(_),new Error(ls)}else if(!oe.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!oe.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 ua.getDataByValue(c,f.operation);if(u)for(let[S]of h)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...s[i]],this._setMergedHashAttribute(i,oe.autoCast(S)));else for(let[S,p]of h)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,p[n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,p[n.attribute]),this._setMergedHashAttribute(i,oe.autoCast(S)))}}catch(_){throw ie.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ie.error(_),new Error(ls)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await ua.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,oe.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,oe.autoCast(d)))}catch(_){throw ie.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ie.error(_),new Error(ls)}}}_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 wt.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 wt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new wt.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 wt.yy.FuncValue:new wt.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,S=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${S}.${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 "${S}.${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 wt.promise(h,t),t=null}catch(f){throw ie.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ie.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 S=E[f];o.forEach(p=>{S[p.key]!==null&&S[p.key]!==void 0&&p.keys.add(S[p.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),S=du.difference(h,[...f.keys].map(p=>p.toString()));for(let p=0,b=S.length;p<b;p++){let R=S[p];delete this.data[`${f.schema}_${f.table}`].__merged_data[R]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new hd(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=du.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 ie.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ie.error(i),new Error(ls)}}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 ua.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 S=n.columns[h],p=f[S]===void 0?null:f[S];this.data[s].__merged_data[E].push(p)}}}}catch(r){throw ie.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ie.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();ie.trace(`Final SQL: ${n}`),s=await wt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),ie.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw ie.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ie.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 ie.error(K2.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ie.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 ua.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 ie.error("There was an error when processing this SQL operation. Check your logs"),ie.error(o),new Error(ls)}}return Object.values(Object.values(this.data)[0].__merged_data)}};cL.exports=mS});var jt=m((Hhe,lL)=>{"use strict";var Q2=tb();lL.exports={searchByConditions:J2,searchByHash:j2,searchByValue:X2,search:Z2};var pS=kr(),{transformReq:SS}=F(),z2=uL();async function J2(e){return SS(e),pS.searchByConditions(e)}a(J2,"searchByConditions");async function j2(e){SS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of pS.searchByHash(e))r&&t.push(r);return t}a(j2,"searchByHash");async function X2(e){SS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of pS.searchByValue(e))t.push(r);return t}a(X2,"searchByValue");function Z2(e,t){try{let r=new Q2(e);r.validate(),new z2(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(Z2,"search")});var md=m((Fhe,_L)=>{"use strict";var e3=kr();_L.exports={writeTransaction:t3};function t3(e,t,r){return e3.writeTransaction(e,t,r)}a(t3,"writeTransaction")});var hL=m((khe,fL)=>{"use strict";var r3=jt(),s3=xr(),dL=D(),n3=Xt(),xhe=md(),i3=require("clone"),gS=require("alasql"),o3=fd(),EL=require("util"),a3=EL.promisify(s3.getTableSchema),c3=EL.promisify(r3.search),u3=g(),TS=F();o3(gS);fL.exports={update:_3};var l3="There was a problem performing this update. Please check the logs and try again.";async function _3({statement:e,hdb_user:t}){let r=await a3(e.table.databaseid,e.table.tableid),s=d3(e.columns);TS.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=i3(n),c=TS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=gS.parse(u).statements[0],_=await c3(l),d=E3(s,_);return f3(o,d,t)}a(_3,"update");function d3(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=gS.compile(`SELECT ${r.expression.toString()} AS [${u3.FUNC_VAL}] FROM ?`)}),t}catch(t){throw dL.error(t),new Error(l3)}}a(d3,"createUpdateRecord");function E3(e,t){return TS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(E3,"buildUpdateRecords");async function f3(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await n3.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){dL.error(`Error delete new_attributes from update response: ${i}`)}return n}a(f3,"updateRecords")});var pL=m((Khe,mL)=>{var h3=require("alasql"),m3=jt(),p3=D(),S3=kr(),AS=require("util"),RS=F(),T3=g(),g3=xr(),Vhe=md(),Yhe=Xt(),R3="record",A3="successfully deleted",O3=AS.callbackify(I3),N3=AS.promisify(m3.search),b3=AS.promisify(g3.getTableSchema);mL.exports={convertDelete:O3};function y3(e){return`${e.deleted_hashes.length} ${R3}${e.deleted_hashes.length===1?"":"s"} ${A3}`}a(y3,"generateReturnMessage");async function I3({statement:e,hdb_user:t}){let r=await b3(e.table.databaseid,e.table.tableid);RS.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=RS.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=h3.parse(o).statements[0],u={operation:T3.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await N3(c);let l=await S3.deleteRecords(u);return RS.isEmptyOrZeroLength(l.message)&&(l.message=y3(l)),delete l.txn_time,l}catch(l){throw p3.error(l),l.hdb_code?l.message:l}}a(I3,"convertDelete")});var AL=m((Qhe,RL)=>{"use strict";var w3=Xn(),{hdb_errors:SL}=z(),{getDatabases:TL}=(_e(),te(ye));RL.exports={checkSchemaExists:gL,checkSchemaTableExists:C3,schema_describe:w3};async function gL(e){if(!TL()[e])return SL.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(gL,"checkSchemaExists");async function C3(e,t){let r=await gL(e);if(r)return r;if(!TL()[e][t])return SL.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(C3,"checkSchemaTableExists")});var Ad={};je(Ad,{addAnalyticsListener:()=>yS,recordAction:()=>ao,recordActionBinary:()=>Rd,setAnalyticsEnabled:()=>L3});function L3(e){UL=e}function ao(e,t,r,s,n){if(!UL)return;let i=t+"-"+r;s&&(i+="-"+s);let o=Td.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Td.set(i,o)),Sd||D3()}function Rd(e,t,r,s,n){ao(e?1:0,t,r,s,n)}function yS(e){PL.push(e)}function D3(){Sd=performance.now(),setTimeout(()=>{let e=performance.now()-Sd;Sd=0;let t=[],r={time:Date.now(),period:e,threadId:oo.threadId,metrics:t};for(let[n,i]of Td)if(i.sort){i.sort();let o=i.length;t.push(Object.assign(i.description,{median:i[o>>1],mean:i.total/o,p95:i[Math.floor(o*.95)],p90:i[Math.floor(o*.9)],count:o}))}else t.push(i);let s=process.memoryUsage();t.push({metric:"memory",threadId:oo.threadId,...s});for(let n of PL)n(t);Td=new Map,oo.parentPort?oo.parentPort.postMessage({type:ML,report:r}):BL({report:r})},bS).unref()}async function U3(e,t=6e4){let r=IS(),s;for(let _ of r.primaryStore.getRange({start:pd+"z",end:pd,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:S,type:p,metric:b,count:R,threadId:P,...V}=f;R||(R=1);let O=b+(h?"-"+h:"");S&&(O+="-"+S);let w=i.get(O);if(w)for(let x in V){let k=V[x];if(typeof k=="number"){let J=w.count||1;w[x]=(w[x]*J+k*R)/(w.count=J+R)}}else w=Object.assign({period:t},f),i.set(O,w)}await M3()}for(let[_,d]of i)d.id=pd+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:pd+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-OL,active:l-NL,time:c}),OL=u,NL=l}async function P3(e,t){let r=IS(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function IS(){return bL||(bL=dt({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function B3(){vL=!0,setInterval(async()=>{await U3(bS,NS),await P3(v3,bS)},NS/2).unref()}function BL(e,t){let r=e.report;r.threadId=t?.threadId||oo.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(yL+=s.mean*s.count);r.totalBytesProcessed=yL,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(IL.get(t))}),IL.set(t,t.performance.eventLoopUtilization())),r.id=(0,LL.getNextMonotonicTime)(),IS().put(r),vL||B3(),H3&&(HL=F3(r))}async function F3(e){if(await HL,!oi){let r=(0,Eu.dirname)((0,CL.getLogFilePath)());try{oi=await(0,OS.open)((0,Eu.join)(r,"analytics.log"),"r+")}catch{oi=await(0,OS.open)((0,Eu.join)(r,"analytics.log"),"w+")}}let t=(await oi.stat()).size;if(t>q3){let r=Buffer.alloc(t);await oi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await oi.write(r,{position:0}),await oi.truncate(r.length),t=r.length}await oi.write(JSON.stringify(e)+`
|
|
7
|
-
`,t)}var
|
|
2
|
+
"use strict";var xG=Object.create;var mc=Object.defineProperty;var kG=Object.getOwnPropertyDescriptor;var $G=Object.getOwnPropertyNames;var VG=Object.getPrototypeOf,YG=Object.prototype.hasOwnProperty;var a=(e,t)=>mc(e,"name",{value:t,configurable:!0});var Te=(e,t)=>()=>(e&&(t=e(e=0)),t);var m=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ke=(e,t)=>{for(var r in t)mc(e,r,{get:t[r],enumerable:!0})},mO=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of $G(t))!YG.call(e,n)&&n!==r&&mc(e,n,{get:()=>t[n],enumerable:!(s=kG(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?xG(VG(e)):{},mO(t||!e||!e.__esModule?mc(r,"default",{value:e,enumerable:!0}):r,e)),re=e=>mO(mc({},"__esModule",{value:!0}),e);var TO=m((Ile,SO)=>{var KG=require("fast-glob"),{statSync:Hh,existsSync:qh,readFileSync:WG,writeFileSync:QG}=require("fs"),{spawnSync:zG,spawn:JG}=require("child_process"),{isMainThread:jG}=require("worker_threads"),{join:on,relative:pO}=require("path"),{PACKAGE_ROOT:qr}=R(),{tmpdir:XG}=require("os");require("source-map-support").install();var ZG=["resources","server","dataLayer"],pc="ts-build",Fh,ex=__filename.endsWith("tsBuild.js");if(ex){if(jG){let r;try{Hh(on(qr,pc)),r=!0}catch{}if(r)for(let s of KG.sync(ZG.map(n=>n+"/**/*.ts"),{cwd:qr})){let n=0,i=0;try{n=Hh(on(qr,s)).mtimeMs-5e3,i=Hh(on(qr,pc,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."),Fh=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),Fh=!0;if(Fh){let s=zG(process.argv[0],[on(qr,"node_modules/.bin/tsc")],{cwd:qr});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let n=on(XG(),"harperdb-tsc.pid"),i;if(qh(n))try{process.kill(+WG(n,{encoding:"utf8"}),0),i=!0}catch{}if(!i){console.log("starting tsc background process");let o=JG(process.argv[0],[on(qr,"node_modules/.bin/tsc"),"--watch"],{cwd:qr,detached:!0,stdio:"ignore"});QG(n,o.pid.toString()),o.unref()}}}}let e=SO.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(qr)&&!s[0].includes("node_modules")){let i=pO(qr,s[0]),o;i.startsWith(pc)?o=on(qr,pO(pc,i)):o=on(qr,pc,i);let c=on(o,r),u=c+".js";if(qh(u))return u;if(c.includes(".")&&qh(c))return c}return t(r,s,n)}}});var R=m((Lle,MO)=>{"use strict";var Fr=require("path"),tx=require("fs"),{relative:wle,join:Cle}=Fr,{existsSync:rx}=tx;function sx(){let e=__dirname;for(;!rx(Fr.join(e,"package.json"));){let t=Fr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(sx,"getHDBPackageRoot");var Qn=sx(),gO="js",t_=gO,nx="harperdb-config.yaml",ix="defaultConfig.yaml",ox="hdb",RO=`harperdb.${t_}`,AO=`customFunctionsServer.${t_}`,ax=`restartHdb.${t_}`,xh="HarperDB",e_="Custom Functions",r_="Clustering Hub",s_="Clustering Leaf",cx="Clustering Ingest Service",ux="Clustering Reply Service",lx="foreground.pid",_x="hdb.pid",dx="data",Ex={HDB:xh,CLUSTERING_HUB:r_,CLUSTERING_LEAF:s_,CLUSTERING_INGEST_SERVICE:cx,CLUSTERING_REPLY_SERVICE:ux,CUSTOM_FUNCTIONS:e_,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"},fx={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},hx={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},mx={harperdb:xh,"clustering hub":r_,"clustering leaf":s_,"custom functions":e_,custom_functions:e_,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},px={CLUSTERING_HUB_PROC_DESCRIPTOR:r_,CLUSTERING_LEAF_PROC_DESCRIPTOR:s_},Gh={HDB:Fr.join(Qn,"server/harperdb"),CUSTOM_FUNCTIONS:Fr.join(Qn,"server/customFunctions"),CLUSTERING_HUB:Fr.join(Qn,"server/nats"),CLUSTERING_LEAF:Fr.join(Qn,"server/nats")},Sx={HDB:Fr.join(Gh.HDB,RO),CUSTOM_FUNCTIONS:Fr.join(Gh.CUSTOM_FUNCTIONS,AO)},Tx={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Fr.join(Qn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Fr.join(Qn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Fr.join(Qn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},gx={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},OO="support@harperdb.io",Rx="customer-success@harperdb.io",NO=1,Ax=4141,bO="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Ox="https://www.harperdb.io/product",Nx=`For support, please submit a request at ${bO} or contact ${OO}`,yO=`For license support, please contact ${Rx}`,bx="None of the specified records were found.",yx="hash attribute not found",Ix=`Your current license only supports ${NO} role. ${yO}`,wx="Your current license only supports 3 connections to a node.",Cx="127.0.0.1",Lx=1,Dx=/^\.$/,Ux=/^\.\.$/,Mx="U+002E",Px=/\//g,vx="U+002F",Bx=/U\+002F/g,Hx=/^U\+002E$/,qx=/^U\+002EU\+002E$/,Fx="d",Gx=999999,xx="*",kx="--max-old-space-size=",$x="system",Vx="__hdb_hash",Yx=".harperdb",Kx=".hdb",Wx="keys",Qx="hdb_boot_properties.file",zx=".updateConfig.json",Jx="SIGTSTP",jx=24,Xx=6e4,Zx=448,ek="blob",tk="trash",rk="database",sk="schema",nk="transactions",ik=".count",ok="id",ak="PROCESS_NAME",IO={SETTINGS_PATH_KEY:"settings_path"},wO=require("lodash"),ck={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"},uk={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},lk={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},_k={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"},dk={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:",Ek={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"},fk={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"},hk="060493.ks",mk=".license",pk={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},W={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"},Sk={CSV:".csv",JSON:".json"},Tk={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},gk={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Sc={};Sc[W.INSERT]=W.INSERT;Sc[W.UPDATE]=W.UPDATE;Sc[W.UPSERT]=W.UPSERT;Sc[W.DELETE]=W.DELETE;var Oe=Object.create(null);Oe[W.DESCRIBE_ALL]=W.DESCRIBE_ALL;Oe[W.DESCRIBE_TABLE]=W.DESCRIBE_TABLE;Oe[W.DESCRIBE_SCHEMA]=W.DESCRIBE_SCHEMA;Oe[W.READ_LOG]=W.READ_LOG;Oe[W.ADD_NODE]=W.ADD_NODE;Oe[W.LIST_USERS]=W.LIST_USERS;Oe[W.LIST_ROLES]=W.LIST_ROLES;Oe[W.USER_INFO]=W.USER_INFO;Oe[W.SQL]=W.SQL;Oe[W.GET_JOB]=W.GET_JOB;Oe[W.SEARCH_JOBS_BY_START_DATE]=W.SEARCH_JOBS_BY_START_DATE;Oe[W.DELETE_FILES_BEFORE]=W.DELETE_FILES_BEFORE;Oe[W.EXPORT_LOCAL]=W.EXPORT_LOCAL;Oe[W.EXPORT_TO_S3]=W.EXPORT_TO_S3;Oe[W.CLUSTER_STATUS]=W.CLUSTER_STATUS;Oe[W.REMOVE_NODE]=W.REMOVE_NODE;Oe[W.RESTART]=W.RESTART;Oe[W.CUSTOM_FUNCTIONS_STATUS]=W.CUSTOM_FUNCTIONS_STATUS;Oe[W.GET_CUSTOM_FUNCTIONS]=W.GET_CUSTOM_FUNCTIONS;Oe[W.GET_CUSTOM_FUNCTION]=W.GET_CUSTOM_FUNCTION;Oe[W.SET_CUSTOM_FUNCTION]=W.SET_CUSTOM_FUNCTION;Oe[W.DROP_CUSTOM_FUNCTION]=W.DROP_CUSTOM_FUNCTION;Oe[W.ADD_CUSTOM_FUNCTION_PROJECT]=W.ADD_CUSTOM_FUNCTION_PROJECT;Oe[W.DROP_CUSTOM_FUNCTION_PROJECT]=W.DROP_CUSTOM_FUNCTION_PROJECT;Oe[W.PACKAGE_CUSTOM_FUNCTION_PROJECT]=W.PACKAGE_CUSTOM_FUNCTION_PROJECT;Oe[W.DEPLOY_CUSTOM_FUNCTION_PROJECT]=W.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Rk={DEBUG:"debug",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},Ak={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},CO={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"},Ok=wO.invert(CO),O={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_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"},LO={settings_path:IO.SETTINGS_PATH_KEY,hdb_root_key:O.ROOTPATH,hdb_root:O.ROOTPATH,server_port_key:O.OPERATIONSAPI_NETWORK_PORT,server_port:O.OPERATIONSAPI_NETWORK_PORT,cert_key:O.OPERATIONSAPI_TLS_CERTIFICATE,certificate:O.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:O.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:O.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:O.OPERATIONSAPI_NETWORK_HTTPS,https_on:O.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:O.OPERATIONSAPI_NETWORK_CORS,cors_on:O.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:O.LOGGING_LEVEL,log_level:O.LOGGING_LEVEL,log_path_key:O.LOGGING_ROOT,log_path:O.LOGGING_ROOT,props_env_key:O.OPERATIONSAPI_NODEENV,node_env:O.OPERATIONSAPI_NODEENV,clustering_node_name_key:O.CLUSTERING_NODENAME,node_name:O.CLUSTERING_NODENAME,clustering_enabled_key:O.CLUSTERING_ENABLED,clustering:O.CLUSTERING_ENABLED,max_http_threads:O.HTTP_THREADS,max_hdb_processes:O.HTTP_THREADS,server_timeout_key:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:O.LOGGING_AUDITLOG,disable_transaction_log:O.LOGGING_AUDITLOG,operation_token_timeout_key:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:O.CUSTOMFUNCTIONS_ENABLED,custom_functions:O.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:O.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:O.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:O.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:O.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:O.HTTP_THREADS,log_to_file:O.LOGGING_FILE,log_to_stdstreams:O.LOGGING_STDSTREAMS,run_in_foreground:O.OPERATIONSAPI_FOREGROUND,local_studio_on:O.LOCALSTUDIO_ENABLED,clustering_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:O.CLUSTERING_USER,clustering_enabled:O.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:O.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:O.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:O.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:O.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:O.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:O.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:O.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:O.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:O.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:O.CLUSTERING_NODENAME,clustering_tls_certificate:O.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:O.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:O.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:O.CLUSTERING_TLS_INSECURE,clustering_tls_verify:O.CLUSTERING_TLS_VERIFY,clustering_loglevel:O.CLUSTERING_LOGLEVEL,clustering_republishmessages:O.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:O.CLUSTERING_DATABASELEVEL,customfunctions_enabled:O.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:O.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:O.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:O.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:O.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:O.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:O.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:O.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:O.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:O.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:O.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:O.CUSTOMFUNCTIONS_NODEENV,http_threads:O.HTTP_THREADS,http_session_affinity:O.HTTP_SESSION_AFFINITY,customfunctions_processes:O.HTTP_THREADS,customfunctions_root:O.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:O.LOCALSTUDIO_ENABLED,logging_file:O.LOGGING_FILE,logging_level:O.LOGGING_LEVEL,logging_root:O.LOGGING_ROOT,logging_rotation_enabled:O.LOGGING_ROTATION_ENABLED,logging_rotation_compress:O.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:O.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:O.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:O.LOGGING_ROTATION_PATH,logging_stdstreams:O.LOGGING_STDSTREAMS,logging_auditlog:O.LOGGING_AUDITLOG,logging_auditretention:O.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:O.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:O.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:O.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:O.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:O.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:O.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:O.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:O.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:O.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:O.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:O.OPERATIONSAPI_NODEENV,operationsapi_root:O.ROOTPATH,schemas:O.SCHEMAS,storage_path:O.STORAGE_PATH,ignorescripts:O.IGNORE_SCRIPTS,mqtt_network_port:O.MQTT_NETWORK_PORT,mqtt_websocket:O.MQTT_WEBSOCKET,mqtt_network_secureport:O.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:O.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:O.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:O.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:O.AUTHENTICATION_CACHETTL,authentication_enablesessions:O.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT};for(let e in O){let t=O[e];LO[t.toLowerCase()]=t}var Nk={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},bk={csv_file_load:"csv_file_load",csv_data_load:W.CSV_DATA_LOAD,csv_url_load:W.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"},yk={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"},Ik={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},wk={VERSION_DEFAULT:"2.2.0"},Ck={DEVELOPMENT:8192,DEFAULT:512},Lk={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"},Dk={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"},Uk={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},DO={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Mk=Symbol("metadata"),Pk="__clustering__",vk=Object.values(DO),Bk=15984864e5,UO={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Hk=wO.invert(UO),qk={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"},Fk=111,Gk=`\r
|
|
3
|
+
`,xk={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},kk=["*","%"],$k="unauthorized_access",Vk="func_val",Yk={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Kk={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Wk={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"},Qk={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},zk={HTTP:"http"},Jk={STOPPED:"stopped",ONLINE:"online"},jk="3.x.x",Xk={SUCCESS:"success",FAILURE:"failure"},Zk={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};MO.exports={LOCAL_HARPERDB_OPERATIONS:Oe,HDB_SUPPORT_ADDRESS:OO,HDB_SUPPORT_URL:bO,HDB_PRICING_URL:Ox,SUPPORT_HELP_MSG:Nx,LICENSE_HELP_MSG:yO,HDB_PROC_NAME:RO,HDB_PROC_DESCRIPTOR:xh,CLUSTERING_LEAF_PROC_DESCRIPTOR:s_,CLUSTERING_HUB_PROC_DESCRIPTOR:r_,SYSTEM_SCHEMA_NAME:$x,HASH_FOLDER_NAME:Vx,HDB_HOME_DIR_NAME:Yx,UPDATE_FILE_NAME:zx,LICENSE_KEY_DIR_NAME:Wx,BOOT_PROPS_FILE_NAME:Qx,JOB_TYPE_ENUM:bk,JOB_STATUS_ENUM:pk,SYSTEM_TABLE_NAMES:_k,SYSTEM_TABLE_HASH_ATTRIBUTES:dk,OPERATIONS_ENUM:W,VALID_S3_FILE_TYPES:Sk,S3_BUCKET_AUTH_KEYS:Tk,VALID_SQL_OPS_ENUM:gk,GEO_CONVERSION_ENUM:Ak,HDB_SETTINGS_NAMES:CO,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Ok,SERVICE_ACTIONS_ENUM:Rk,CLUSTER_MESSAGE_TYPE_ENUM:yk,CLUSTER_CONNECTION_DIRECTION_ENUM:Ik,CLUSTER_EVENTS_DEFS_ENUM:Lk,PERIOD_REGEX:Dx,DOUBLE_PERIOD_REGEX:Ux,UNICODE_PERIOD:Mx,FORWARD_SLASH_REGEX:Px,UNICODE_FORWARD_SLASH:vx,ESCAPED_FORWARD_SLASH_REGEX:Bx,ESCAPED_PERIOD_REGEX:Hx,ESCAPED_DOUBLE_PERIOD_REGEX:qx,REG_KEY_FILE_NAME:hk,RESTART_TIMEOUT_MS:Xx,HDB_FILE_PERMISSIONS:Zx,DATABASES_DIR_NAME:rk,LEGACY_DATABASES_DIR_NAME:sk,TRANSACTIONS_DIR_NAME:nk,LIMIT_COUNT_NAME:ik,ID_ATTRIBUTE_STRING:ok,INSERT_MODULE_ENUM:uk,UPGRADE_JSON_FIELD_NAMES_ENUM:lk,RESTART_CODE:Jx,RESTART_CODE_NUM:jx,CLUSTER_OPERATIONS:Sc,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:fk,HDB_INTERNAL_SC_CHANNEL_PREFIX:Tr,INTERNAL_SC_CHANNELS:Ek,CLUSTERING_MESSAGE_TYPES:qk,HDB_FILE_SUFFIX:Kx,BLOB_FOLDER_NAME:ek,HDB_TRASH_DIR:tk,ORIGINATOR_SET_VALUE:Fk,LICENSE_VALUES:wk,RAM_ALLOCATION_ENUM:Ck,TIME_STAMP_NAMES_ENUM:DO,TIME_STAMP_NAMES:vk,PERMS_UPDATE_RELEASE_TIMESTAMP:Bk,SEARCH_NOT_FOUND_MESSAGE:bx,SEARCH_ATTRIBUTE_NOT_FOUND:yx,LICENSE_ROLE_DENIED_RESPONSE:Ix,LICENSE_MAX_CONNS_REACHED:wx,BASIC_LICENSE_MAX_NON_CU_ROLES:NO,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Ax,VALUE_SEARCH_COMPARATORS:UO,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Hk,LICENSE_FILE_NAME:mk,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Dk,NEW_LINE:Gk,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Lx,MOMENT_DAYS_TAG:Fx,API_TURNOVER_SEC:Gx,LOOPBACK:Cx,CODE_EXTENSION:t_,WILDCARD_SEARCH_VALUE:xx,NODE_ERROR_CODES:Uk,JAVASCRIPT_EXTENSION:gO,PERMS_CRUD_ENUM:xk,UNAUTHORIZED_PERMISSION_NAME:$k,SEARCH_WILDCARDS:kk,FUNC_VAL:Vk,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:Yk,JWT_ENUM:Kk,CLUSTERING_FLAG:Pk,ITC_EVENT_TYPES:Wk,CUSTOM_FUNCTION_PROC_NAME:AO,CUSTOM_FUNCTION_PROC_DESCRIPTOR:e_,SERVICES:Qk,THREAD_TYPES:zk,MEM_SETTING_KEY:kx,HDB_RESTART_SCRIPT:ax,PROCESS_DESCRIPTORS:Ex,SERVICE_SERVERS:Sx,SERVICE_SERVERS_CWD:Gh,PROCESS_DESCRIPTORS_VALIDATE:mx,LAUNCH_SERVICE_SCRIPTS:Tx,LOG_LEVELS:hx,PROCESS_NAME_ENV_PROP:ak,LOG_NAMES:fx,PM2_PROCESS_STATUSES:Jk,CONFIG_PARAM_MAP:LO,CONFIG_PARAMS:O,HDB_CONFIG_FILE:nx,HDB_DEFAULT_CONFIG_FILE:ix,ROLE_TYPES_ENUM:gx,BOOT_PROP_PARAMS:IO,INSTALL_PROMPTS:ck,HDB_ROOT_DIR_NAME:ox,CLUSTERING_PROCESSES:px,FOREGROUND_PID_FILE:lx,PACKAGE_ROOT:Qn,PRE_4_0_0_VERSION:jk,SCHEMAS_PARAM_CONFIG:Nk,METADATA_PROPERTY:Mk,AUTH_AUDIT_STATUS:Xk,AUTH_AUDIT_TYPES:Zk,HDB_PID_FILE:_x,DEFAULT_DATABASE_NAME:dx};TO()});var Gi=m((Ule,BO)=>{"use strict";var PO=require("minimist");BO.exports=e$;function e$(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=vO(process.env),s=vO(PO(process.argv))):(r=process.env,s=PO(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(e$,"assignCMDENVVariables");function vO(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(vO,"objKeysToLowerCase")});var C=m((Ple,Qh)=>{"use strict";var xi=require("fs-extra"),{workerData:t$,threadId:r$}=require("worker_threads"),un=require("path"),FO=require("yaml"),GO=require("properties-reader"),dt=R(),HO=Gi(),s$=require("os"),{PACKAGE_ROOT:$h}=R(),{_assignPackageExport:n$}=require("../index"),gc={};for(let e in console)gc[e]||(gc[e]=console[e]);var Wt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},xO={STDOUT:"stdOut",STDERR:"stdErr"},i$=un.join($h,"logs"),o$=un.join($h,"config/yaml/",dt.HDB_DEFAULT_CONFIG_FILE),a$=1e4,an,cn,Kt,n_,i_,Rc,Wo,Tc;Tc===void 0&&kO();Qh.exports={notify:YO,fatal:KO,error:Ac,warn:Wh,info:o_,debug:Kh,trace:Yh,setLogLevel:f$,log_level:Kt,loggerWithTag:c$,suppressLogging:u$,initLogSettings:kO,setupConsoleLogging:$O,logCustomLevel:d$,closeLogFile:Vh,getLogFilePath:()=>Rc,OUTPUTS:xO,AuthAuditLog:p$};n$("logger",Qh.exports);function kO(e=!1){try{if(Tc===void 0||e){Vh();let t=E$(),r=HO(["ROOTPATH"]);try{Tc=GO(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!xi.pathExistsSync(un.join(r.ROOTPATH,dt.HDB_CONFIG_FILE)))throw s}({level:Kt,config_log_path:i_,to_file:an,to_stream:cn}=h$(r.ROOTPATH?un.join(r.ROOTPATH,dt.HDB_CONFIG_FILE):Tc.get("settings_path"))),n_=dt.LOG_NAMES.HDB,Rc=un.join(i_,n_)}}catch(t){if(Tc=void 0,t.code===dt.NODE_ERROR_CODES.ENOENT){let r=HO(Object.keys(dt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=dt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===dt.CONFIG_PARAMS.LOGGING_LEVEL){Kt=u;continue}if(c===dt.CONFIG_PARAMS.LOGGING_STDSTREAMS){cn=u;continue}c===dt.CONFIG_PARAMS.LOGGING_FILE&&(an=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=m$();an=an===void 0?n:an,an=qO(an),cn=cn===void 0?i:cn,cn=qO(cn),Kt=Kt===void 0?s:Kt,i_=i$,n_=dt.LOG_NAMES.INSTALL,Rc=un.join(i_,n_);return}throw Ac("Error initializing log settings"),Ac(t),t}$O()}a(kO,"initLogSettings");var kh=!0;function $O(){Ko("error",Ac),Ko("warn",Wh),Ko("log",o_),Ko("info",o_),Ko("debug",Kh),Ko("trace",Yh)}a($O,"setupConsoleLogging");function Ko(e,t){console[e]=function(...r){if(kh&&t(...r),!/PM2 log:|App \[/.test(r[0]))return gc[e](...r)}}a(Ko,"logConsole");function c$(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(YO),fatal:r(KO),error:r(Ac),warn:r(Wh),info:r(o_),debug:r(Kh),trace:r(Yh)};function r(s){return function(...n){return s(t,...n)}}}a(c$,"loggerWithTag");function u$(e){try{kh=!1,e()}finally{kh=!0}}a(u$,"suppressLogging");var l$=t$?.name?.replace(/ /g,"-")||"main";function ln(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||l$+"/"+r$);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}
|
|
4
|
+
`}a(ln,"createLogRecord");function Oc(e){an&&VO(e),cn&&process.stdout.write(e)}a(Oc,"logStdOut");function a_(e){an&&VO(e),cn&&process.stderr.write(e)}a(a_,"logStdErr");function VO(e){_$(),Wo?xi.appendFileSync(Wo,e):gc.log(e)}a(VO,"logToFile");function Vh(){try{xi.closeSync(Wo)}catch{}Wo=null}a(Vh,"closeLogFile");function _$(){if(!Wo){try{if(!Rc)debugger;Wo=xi.openSync(Rc,"a")}catch(e){gc.error(e)}setTimeout(()=>{Vh()},a$).unref()}}a(_$,"openLogFile");function o_(...e){Wt[Kt]<=Wt.info&&Oc(ln("info",e))}a(o_,"info");function Yh(...e){Wt[Kt]<=Wt.trace&&Oc(ln("trace",e))}a(Yh,"trace");function Ac(...e){Wt[Kt]<=Wt.error&&a_(ln("error",e))}a(Ac,"error");function Kh(...e){Wt[Kt]<=Wt.debug&&Oc(ln("debug",e))}a(Kh,"debug");function YO(...e){Wt[Kt]<=Wt.notify&&Oc(ln("notify",e))}a(YO,"notify");function KO(...e){Wt[Kt]<=Wt.fatal&&a_(ln("fatal",e))}a(KO,"fatal");function Wh(...e){Wt[Kt]<=Wt.warn&&a_(ln("warn",e))}a(Wh,"warn");function d$(e,t,...r){t===xO.STDERR?a_(ln(e,r)):Oc(ln(e,r))}a(d$,"logCustomLevel");function E$(){let e;try{e=s$.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=un.join(e,dt.HDB_HOME_DIR_NAME,dt.BOOT_PROPS_FILE_NAME);return xi.existsSync(t)||(t=un.join($h,"utility/hdb_boot_properties.file")),t}a(E$,"getPropsFilePath");function f$(e){Kt=e}a(f$,"setLogLevel");function qO(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(qO,"autoCastBoolean");function h$(e){try{if(e.includes("config/settings.js")){let o=GO(e);return{level:o.get(dt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:un.dirname(o.get(dt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(dt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(dt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=FO.parseDocument(xi.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===dt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(h$,"getLogConfig");function m$(){try{let e=FO.parseDocument(xi.readFileSync(o$,"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(m$,"getDefaultConfig");function p$(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(p$,"AuthAuditLog")});var ki=m((Ble,S$)=>{S$.exports={name:"harperdb",version:"4.2.0-alpha.13",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 $i=m((Fle,WO)=>{"use strict";var Hle=require("fs-extra"),qle=C();WO.exports={version:T$,printVersion:R$,nodeVersion:g$};var zn=ki();function T$(){if(zn)return zn.version}a(T$,"version");function g$(){if(zn&&zn.engines&&zn.engines["preferred-node"])return zn.engines["preferred-node"]}a(g$,"nodeVersion");function R$(){zn&&console.log(`HarperDB Version ${zn.version}`)}a(R$,"printVersion")});var jO=m((xle,JO)=>{"use strict";var QO=require("semver/functions/major"),A$=require("semver/functions/satisfies"),zO=ki(),Nc=process.versions&&process.versions.node?process.versions.node:void 0;JO.exports=O$;function O$(){let e=zO.engines.node,t=zO.engines["preferred-node"];if(Nc){if(e&&!A$(Nc,e))return{error:`This version of HarperDB supports Node.js versions: ${e}, the currently installed Node.js version is: ${Nc}. Please install a version of Node.js that is withing the defined range.`};if(t&&QO(Nc)!==QO(t))return{warn:`This version of HarperDB is tested against Node.js version ${t}, the currently installed Node.js version is: ${Nc}. Some issues may occur with untested versions of Node.js.`}}}a(O$,"checkNodeVersion")});var zh=m(($le,XO)=>{"use strict";var N$=require("util"),b$=require("path"),y$=require("child_process"),I$=N$.promisify(y$.execFile),w$=1e3*1e3*10;XO.exports={findPs:C$};async function C$(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await I$("ps",["wwxo",`pid,${r}`],{maxBuffer:w$});for(let n of s.trim().split(`
|
|
5
|
+
`).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:b$.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(C$,"findPs")});var Ge=m((Yle,eN)=>{"use strict";var L$="__dbis__",D$="__txns__",U$="__environment_name__",M$="__dbi_defintion__",P$={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"},v$=["__createdtime__","__updatedtime__"],B$="\uFFFF",ZO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},H$=Object.values(ZO);eN.exports={AUDIT_STORE_NAME:D$,INTERNAL_DBIS_NAME:L$,DBI_DEFINITION_NAME:M$,SEARCH_TYPES:P$,TIMESTAMP_NAMES:v$,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:U$,TRANSACTIONS_DBI_NAMES_ENUM:ZO,TRANSACTIONS_DBIS:H$,OVERFLOW_MARKER:B$}});var gr=m((Kle,uN)=>{"use strict";var tN=R(),rN=Ge(),sN={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},nN=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),iN={500:nN("There was an error processing your request."),400:"Invalid request"},q$=iN[sN.INTERNAL_SERVER_ERROR],F$={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.`},G$={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},x$={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"},k$={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 ${rN.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${rN.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"},$$={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${tN.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 ${tN.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"},oN={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"},V$={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."},Y$={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`},K$={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"},W$={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Q$={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`},aN={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.`},cN={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}`},z$={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."},J$={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},j$={...oN,...x$,...F$,...V$,...Y$,...K$,...W$,...Q$,...$$,...aN,...cN,...z$,...J$,...G$};uN.exports={CHECK_LOGS_WRAPPER:nN,HDB_ERROR_MSGS:j$,DEFAULT_ERROR_MSGS:iN,DEFAULT_ERROR_RESP:q$,HTTP_STATUS_CODES:sN,LMDB_ERRORS_ENUM:k$,AUTHENTICATION_ERROR_MSGS:oN,VALIDATION_ERROR_MSGS:aN,ITC_ERRORS:cN}});var z=m((Qle,dN)=>{"use strict";var Qo=gr(),X$=C(),Z$=R(),c_=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,lN),this.statusCode=s||Qo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Qo.DEFAULT_ERROR_MSGS[s]?Qo.DEFAULT_ERROR_MSGS[s]:Qo.DEFAULT_ERROR_MSGS[Qo.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&&X$[n](i)}},Jh=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}},jh=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function lN(e,t,r,s=Z$.LOG_LEVELS.ERROR,n=null,i=!1){if(_N(e))return e;let o=new c_(e,t,r,s,n);return i&&delete o.stack,o}a(lN,"handleHDBError");function _N(e){return e.__proto__.constructor.name===c_.name}a(_N,"isHDBError");dN.exports={isHDBError:_N,handleHDBError:lN,ClientError:Jh,ServerError:jh,hdb_errors:Qo}});var De=m((Jle,TN)=>{"use strict";var Cc=R(),eV=F(),Qt=Y(),Lc=require("path"),tV=require("minimist"),EN=require("fs-extra"),fN=require("lodash");Qt.initSync();var{CONFIG_PARAMS:Jn,SCHEMAS_PARAM_CONFIG:bc,SYSTEM_SCHEMA_NAME:u_}=Cc,yc,Ic,wc;function hN(){if(yc!==void 0)return yc;if(Qt.getHdbBasePath()!==void 0)return yc=Qt.get(Jn.STORAGE_PATH)||Lc.join(Qt.getHdbBasePath(),Cc.DATABASES_DIR_NAME),yc}a(hN,"getBaseSchemaPath");function mN(){if(Ic!==void 0)return Ic;if(Qt.getHdbBasePath()!==void 0)return Ic=SN(u_),Ic}a(mN,"getSystemSchemaPath");function pN(){if(wc!==void 0)return wc;if(Qt.getHdbBasePath()!==void 0)return wc=Qt.get(Cc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Lc.join(Qt.getHdbBasePath(),Cc.TRANSACTIONS_DIR_NAME),wc}a(pN,"getTransactionAuditStoreBasePath");function rV(e,t){let r=Qt.get(Jn.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Lc.join(pN(),e.toString())}a(rV,"getTransactionAuditStorePath");function SN(e,t){e=e.toString(),t=t&&t.toString();let r=Qt.get(Cc.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Lc.join(hN(),e)}a(SN,"getSchemaPath");function sV(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,tV(process.argv));let s=r[Jn.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!eV.isObject(s))throw o;i=s}for(let o of i){let c=o[u_];if(!c)continue;let u=Qt.get(Jn.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[bc.PATH];if(l)return fN.set(u,[u_,bc.TABLES,t,bc.PATH],l),Qt.setProperty(Jn.SCHEMAS,u),l;let _=c?.[bc.PATH];if(_)return fN.set(u,[u_,bc.PATH],_),Qt.setProperty(Jn.SCHEMAS,u),_}}let n=r[Jn.STORAGE_PATH.toUpperCase()];if(n){if(!EN.pathExistsSync(n))throw new Error(n+" does not exist");let i=Lc.join(n,e);return EN.mkdirsSync(i),Qt.setProperty(Jn.STORAGE_PATH,n),i}return mN()}a(sV,"initSystemSchemaPaths");function nV(){yc=void 0,Ic=void 0,wc=void 0}a(nV,"resetPaths");TN.exports={getBaseSchemaPath:hN,getSystemSchemaPath:mN,getTransactionAuditStorePath:rV,getTransactionAuditStoreBasePath:pN,getSchemaPath:SN,initSystemSchemaPaths:sV,resetPaths:nV}});var Ht=m((e_e,NN)=>{"use strict";var iV=gr().LMDB_ERRORS_ENUM,Xle=require("lmdb"),oV=Ge(),Zle=require("buffer").Buffer,{OVERFLOW_MARKER:gN,MAX_SEARCH_KEY_LENGTH:l_}=oV,RN=["number","string","symbol","boolean","bigint"];function aV(e){if(e=e?.primaryStore||e,!e)throw new Error(iV.ENV_REQUIRED)}a(aV,"validateEnv");function cV(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(cV,"stringifyData");function uV(e){return e instanceof Date?e.valueOf():e}a(uV,"convertKeyValueToWrite");function lV(e){if(e==null)return;if(RN.includes(typeof e))return e.length>l_?[e.slice(0,l_)+gN]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(RN.includes(typeof n))n.length>l_?t.push(n.slice(0,l_)+gN):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(lV,"getIndexedValues");var __=0,AN=0;function ON(){AN=Date.now()-performance.now()}a(ON,"adjustStartTime");ON();var _V=6e4;setInterval(ON,_V).unref();function dV(){let e=performance.now()+AN;return e>__?(__=e,e):(__+=488e-6,__)}a(dV,"getNextMonotonicTime");NN.exports={validateEnv:aV,stringifyData:cV,convertKeyValueToWrite:uV,getNextMonotonicTime:dV,getIndexedValues:lV}});var bN,ys,Xh,Dc=Te(()=>{bN=require("events"),ys=class extends bN.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new Xh;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)}},Xh=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 Uc(e){return e[Nt]||(e[Nt]=Object.create(null))}function m_(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[Nt];if(l&&c in l)return l[c];let _=this[le]?.[c];if(_&&typeof _=="object"){let d=yN(_,o);if(d)return l||(l=this[Nt]=Object.create(null)),l[c]=d}return _},set(l){Uc(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,d_.ClientError)(`${c} must be a string, attempt to assign ${l}`);Uc(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,d_.ClientError)(`${c} must be a string, attempt to assign ${l}`);Uc(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[Nt];return u?.[o]!==void 0?u[o]:this[le]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new d_.ClientError("Can not add a property to a sealed table schema");Uc(this)[o]=c}),i("deleteProperty",function(o){Uc(this)[o]=void 0}),i("toJSON",function(){let o=this[Nt],c;for(let l in o)c||(c=Object.assign({},this[le])),c[l]=o[l];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[le])),Object.assign(c,this)),c||this[le]}),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 yN(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[le]=n}},m_(r,t)),new r(e)):new E_(e);case Array:let s=new h_(e.length);s[le]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=yN(o,t?.elements)),s[n]=o}return s}}function p_(e){let t=e[Nt],r;for(let n in t){r||(r=Object.assign({},e[le]));let i=t[n];i&&typeof i=="object"&&(i=p_(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[le])),Object.assign(r,e)),r||e[le]}function Mc(e){let t;if(e[le]&&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=Mc(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Nt];for(let s in r){t||(t=Object.assign({},e[le]));let n=r[s];n&&typeof n=="object"&&(n=Mc(n)),t[s]=n}return t?Object.freeze(t):e[le]||Object.freeze(e)}function f_(e){let t=e[le];if(!t)return!0;if(e.constructor===Array){if(e[Vi]||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?.[le]===n){if(f_(i))return!0}else return!0}}else{let r=e[Nt];for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[le]===i){if(f_(n))return!0}else return!0}else return!0}}return!1}var d_,Nt,E_,Vi,h_,S_=Te(()=>{Is();d_=D(z()),Nt=Symbol("own-data");a(Uc,"getChanges");a(m_,"assignTrackedAccessors");a(yN,"trackObject");E_=class{static{a(this,"GenericTrackedObject")}constructor(t){this[le]=t}};m_(E_,{});a(p_,"collapseData");a(Mc,"deepFreeze");a(f_,"hasChanges");Vi=Symbol.for("has-array-changes"),h_=class extends Array{static{a(this,"TrackedArray")}[Vi];constructor(t){super(t)}splice(...t){return this[Vi]=!0,super.splice(...t)}push(...t){return this[Vi]=!0,super.push(...t)}pop(){return this[Vi]=!0,super.pop()}unshift(...t){return this[Vi]=!0,super.unshift(...t)}shift(){return this[Vi]=!0,super.shift()}};h_.prototype.constructor=Array});function Xe(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 Zh;e.timestamp&&(r.timestamp=e.timestamp),r[Ne]=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 IN,wN,Zh,Yi=Te(()=>{IN=D(Ht()),wN=require("../index");Is();a(Xe,"transaction");(0,wN._assignPackageExport)("transaction",Xe);Xe.commit=function(e){let t=(e[Ne]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Xe.abort=function(e){let t=(e[Ne]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()};Zh=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,IN.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 rm(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(fV[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]=Cs.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 Rt.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 em.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let T=sm(e);if(!T)throw new em.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:A,value:g})=>new Promise(x=>setImmediate(()=>x(T(g)?A:LN.SKIP))))}let S={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(S):h.getRange(S).map(({value:T})=>T)}function sm(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case Rt.SEARCH_TYPES.EQUALS:case void 0:return ws(r,n=>n===s);case Rt.SEARCH_TYPES.CONTAINS:return ws(r,n=>n?.toString().includes(s));case Rt.SEARCH_TYPES.ENDS_WITH:case Rt.SEARCH_TYPES._ENDS_WITH:return ws(r,n=>n?.toString().endsWith(s));case Rt.SEARCH_TYPES.STARTS_WITH:case Rt.SEARCH_TYPES._STARTS_WITH:return ws(r,n=>typeof n=="string"&&n.startsWith(s));case Rt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),ws(r,n=>(0,Cs.compareKeys)(n,s[0])>=0&&(0,Cs.compareKeys)(n,s[1])<=0);case"gt":case Rt.SEARCH_TYPES.GREATER_THAN:case Rt.SEARCH_TYPES._GREATER_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)>0);case"ge":case Rt.SEARCH_TYPES.GREATER_THAN_EQUAL:case Rt.SEARCH_TYPES._GREATER_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)>=0);case Rt.SEARCH_TYPES.LESS_THAN:case"lt":case Rt.SEARCH_TYPES._LESS_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)<0);case"le":case Rt.SEARCH_TYPES.LESS_THAN_EQUAL:case Rt.SEARCH_TYPES._LESS_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)<=0);case"ne":return ws(r,n=>(0,Cs.compareKeys)(n,s)!==0);default:return}}function ws(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function T_(e){if(!e)return;let t=new tm,r,s,n,i,o;for(;r=CN.exec(e);){i=CN.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=EV[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 em,Rt,Cs,LN,CN,EV,fV,tm,g_=Te(()=>{em=D(z()),Rt=D(Ge()),Cs=require("ordered-binary"),LN=require("lmdb"),CN=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,EV={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(rm,"idsForCondition");fV={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(sm,"filterByType");a(ws,"attributeComparator");a(T_,"parseQuery");tm=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 om={};Ke(om,{CONTEXT:()=>Ne,ID_PROPERTY:()=>ue,IS_COLLECTION:()=>_n,RECORD_PROPERTY:()=>le,Resource:()=>bt,SAVE_UPDATES_PROPERTY:()=>BN,snake_case:()=>mV});function mV(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function DN(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 im(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Gr(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[Ne]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Ne]||i):l=i:(l=n,c=l[ue]??l[this.primaryKey]??null):i?o=i[Ne]||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 Xe(o,()=>{let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)});function d(E){if(t.type==="read"&&(E[BN]=!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 R_(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!f)throw new R_(o.user)}return typeof l?.then=="function"?l.then(f=>e(E,u,o,f)):e(E,u,o,l)}a(d,"authorizeActionOnResource")}}function xr(e,t){let r=new vN.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 nm(e){let t=e[le];if(t){let r=e[Nt];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 UN(e){if(typeof e=="string")return t=>nm(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=nm(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=nm(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 MN,PN,vN,Ne,ue,_n,BN,le,hV,bt,R_,im,Is=Te(()=>{MN=require("crypto");Dc();PN=require("../index"),vN=D(z());S_();Yi();g_();Ne=Symbol.for("context"),ue=Symbol.for("primary-key"),_n=Symbol("is-collection"),BN=Symbol("save-updates"),le=Symbol("stored-record"),hV={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},bt=class{static{a(this,"Resource")}[Ne];[ue];static transactions;constructor(t,r){this[ue]=t;let s=r?.[Ne];this[Ne]=s!==void 0?s:r||null}updateModificationTime(t=Date.now()){t>this[LAST_MODIFICATION_PROPERTY]&&(this[LAST_MODIFICATION_PROPERTY]=t)}static get=Gr(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=UN(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=Gr(function(t,r,s,n){if(Array.isArray(n)&&t[_n]){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):xr(t,"put")},{hasContent:!0,type:"update"});static delete=Gr(function(t,r,s,n){return t.delete?t.delete(r):xr(t,"delete")},{hasContent:!1,type:"delete",allowInvalidated:!0});static getNewId(){return(0,MN.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),Xe(s,()=>{let i=new this(n,s),o=i.put?i.put(r):xr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Gr(function(t,r,s,n){return t.invalidate?t.invalidate(r):xr(t,"delete")},{hasContent:!1,type:"update",allowInvalidated:!0});static post=Gr(function(t,r,s,n){return t[ue]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Gr(function(t,r,s,n){return t.connect?t.connect(r):xr(t,"connect")},{type:"read"});static subscribe=Gr(function(t,r,s,n){return t.subscribe?t.subscribe(r):xr(t,"subscribe")},{type:"read"});static publish=Gr(function(t,r,s,n){return t[ue]!=null&&t.update(),t.publish?t.publish(n,r):xr(t,"publish")},{hasContent:!0,type:"create"});static search=Gr(function(t,r,s,n){let i=t.search?t.search(s):xr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=UN(o);return i.map(c)}return i},{type:"read"});static query=Gr(function(t,r,s,n){return t.search?t.search(n,r):xr(t,"search")},{hasContent:!0,type:"read"});static copy=Gr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):xr(t,"copy")},{type:"create"});static move=Gr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):xr(t,"move")},{type:"delete"});post(t){if(this[_n])return this.constructor.create(this[ue],t,this[Ne]);xr(this,"post")}static isCollection(t){return t?.[_n]}static coerceId(t){return t}static parseQuery(t){return T_(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&&hV[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:DN(t,this)}}return DN(t,this)}static getResource(t,r,s){let n,i=r[Ne],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[ue]===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=_[ue],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[_n]=!0),n}connect(t){let r=new ys;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[ue]}getContext(){return this[Ne]}};bt.prototype[Ne]=null;(0,PN._assignPackageExport)("Resource",bt);a(mV,"snake_case");R_=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(DN,"pathToId");im=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Gr,"transactional");a(xr,"missingMethod");a(nm,"selectFromObject");a(UN,"transformForSelect")});var Pc={};Ke(Pc,{server:()=>Et});var HN,Et,rs=Te(()=>{HN=require("../index"),Et={};(0,HN._assignPackageExport)("server",Et)});var um={};Ke(um,{loadGQLSchema:()=>SV,start:()=>cm,startOnMainThread:()=>pV});function cm({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 S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let V=function(I){if(I.kind==="NonNullType"){let M=V(I.type);return M.nullable=!0,M}return I.kind==="ListType"?{type:"array",elements:V(I.type)}:{type:I.name?.value}};a(V,"getProperty");let T=S.name.value,A=[],g={table:null,database:null,properties:A};E.set(T,g);for(let I of S.directives){if(I.name.value==="table"){for(let b of I.arguments)g[b.name.value]=b.value.value;g.schema&&(g.database=g.schema),g.table||(g.table=T),g.audit&&(g.audit=g.audit!=="false"),g.attributes=g.properties,f.push(g)}if(I.name.value==="sealed"&&(g.sealed=!0),I.name.value==="export"){g.export=!0;for(let b of I.arguments)b.name.value==="name"&&(g.export={name:b.value.value})}}let x=!1;for(let I of S.fields){let b=V(I.type);b.name=I.name.value,A.push(b);for(let M of I.directives)if(M.name.value==="primaryKey")x?console.warn("Can not define two attributes as a primary key"):(b.isPrimaryKey=!0,x=!0);else if(M.name.value==="indexed")b.indexed=!0;else if(M.name.value==="createdTime")b.assignCreatedTime=!0;else if(M.name.value==="updatedTime")b.assignUpdatedTime=!0;else if(M.name.value==="expiresAt")b.expiresAt=!0;else if(M.name.value==="allow"){let J=b.authorizedRoles=[];for(let B of M.arguments)B.name.value==="role"&&J.push(B.value.value)}}g.typeName=T,T==="Query"&&(h=g)}for(let[S,T]of E)for(let A of T.properties){let g=E.get(A.type);g&&(A.properties=g.properties)}for(let S of f)S.tableClass=e(S),S.export&&i.set((0,am.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass);if(h)for(let S of h.properties){let T=E.get(S.type);if(!T)throw new Error(`${S.type} was not found as a Query export`);i.set((0,am.dirname)(s)+"/"+S.name,T.tableClass)}}}var am,pV,SV,qN=Te(()=>{am=require("path");_e();a(cm,"start");pV=cm,SV=cm({ensureTable:ft}).handleFile});async function A_(e){return TV?(vc||(vc=gV(AV)),(await(await vc).import(e)).namespace):import(e)}async function gV(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),vc=new Compartment({console,Math,Date,fetch:RV,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,GN.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:bt,tables:Rr,databases:xe})}};let s=await(0,FN.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),vc}function RV(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 AV(){return{Resource:bt,tables:Rr}}var FN,GN,TV,vc,lm=Te(()=>{Is();_e();FN=require("fs/promises"),GN=require("path"),TV=!1;a(A_,"secureImport");a(gV,"getCompartment");a(RV,"secureOnlyFetch");a(AV,"getGlobalVars")});var dm={};Ke(dm,{handleFile:()=>OV});async function OV(e,t,r,s){let n=new Map,i=(0,xN.pathToFileURL)(r).toString(),o=await A_(i);u(o.default)&&s.set((0,_m.dirname)(t),o.default),c(o,(0,_m.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 xN,_m,kN=Te(()=>{xN=require("url");lm();_m=require("path");a(OV,"handleFile")});var fm={};Ke(fm,{start:()=>NV});function NV({resources:e}){e.set("login",Em),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Em,$N=Te(()=>{Is();a(NV,"start");Em=class extends bt{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 mm=m((w_e,KN)=>{"use strict";var{Readable:bV}=require("stream"),yV=1e4;KN.exports={streamAsJSON(e){return new hm({value:e})}};var hm=class extends bV{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),VN)}catch(n){yield VN(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);YN(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>yV?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 YN(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 VN(e){return console.error(e),JSON.stringify(e.toString())}a(VN,"handleError");function YN(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(YN,"when")});var ib=m((D_e,nb)=>{"use strict";var pm=require("recursive-iterator"),IV=require("alasql"),Sm=require("clone"),WN=F(),{handleHDBError:QN,hdb_errors:wV}=z(),{HDB_ERROR_MSGS:zN,HTTP_STATUS_CODES:JN}=wV,{getDatabases:CV}=(_e(),re(be)),LV=["DISTINCT_ARRAY"],jN=Symbol("validateTables"),Tm=Symbol("validateTable"),L_e=Symbol("getAllColumns"),XN=Symbol("validateAllColumns"),O_=Symbol("findColumn"),ZN=Symbol("validateOrderBy"),Bc=Symbol("validateSegment"),gm=Symbol("validateColumn"),eb=Symbol("setColumnsForTable"),tb=Symbol("checkColumnsForAsterisk"),rb=Symbol("validateGroupBy"),sb=Symbol("hasColumns"),Rm=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[jN](),this[tb](),this[XN]()}[jN](){if(this[sb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Tm](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Tm](t.table)})}}[sb](){let t=!1,r=new pm(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Tm](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=CV();if(!r[t.databaseid])throw QN(new Error,zN.SCHEMA_NOT_FOUND(t.databaseid),JN.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw QN(new Error,zN.TABLE_NOT_FOUND(t.databaseid,t.tableid),JN.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Sm(n);i.table=Sm(t),this.attributes.push(i)})}[O_](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[tb](){let t=new pm(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[eb](r.tableid)}[eb](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new IV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[XN](){this[Bc](this.statement.columns,!1),this[Bc](this.statement.joins,!1),this[Bc](this.statement.where,!1),this[rb](this.statement.group,!1),this[Bc](this.statement.order,!0)}[Bc](t,r){if(!t)return;let s=new pm(t),n=[];for(let{node:i,path:o}of s)!WN.isEmpty(i)&&!WN.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[ZN](i):n.push(this[gm](i)));return n}[rb](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&LV.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Sm(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[O_](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[O_](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`}[ZN](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[gm](t)}[gm](t){let r=this[O_](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]}};nb.exports=Rm});var ab=m((M_e,ob)=>{"use strict";var Am=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")}};ob.exports=Am});var ub=m((v_e,cb)=>{"use strict";var Om=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};cb.exports=Om});var N_=m((H_e,lb)=>{"use strict";var bm=Y(),ym=R();bm.initSync();var DV=bm.get(ym.CONFIG_PARAMS.STORAGE_COMPRESSION),UV=bm.get(ym.CONFIG_PARAMS.STORAGE_CACHING)!==!1,MV=ym.UPDATES_PROPERTY,Nm=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=DV&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=UV&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===MV)}};lb.exports=Nm});var y_=m((F_e,db)=>{"use strict";var zo=Y(),Hc=R();zo.initSync();var PV=zo.get(Hc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||zo.get(Hc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||zo.get(Hc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",_b=zo.get(Hc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),vV=zo.get(Hc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),b_=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=PV,this.noFSAccess=!0,_b!==void 0&&(this.overlappingSync=_b),this.noReadAhead=vV}};db.exports=b_;b_.MAX_DBS=1e4});var we=m((x_e,Ab)=>{"use strict";var wm=require("lmdb"),ss=require("fs-extra"),Ar=require("path"),I_=Ht(),hb=C(),zt=gr().LMDB_ERRORS_ENUM,w_=ub(),Cm=N_(),mb=y_(),jn=Ge(),Eb=R(),{table:BV,resetDatabases:HV}=(_e(),re(be)),fb=Y(),ns=jn.INTERNAL_DBIS_NAME,pb=jn.DBI_DEFINITION_NAME,qV="data.mdb",FV="lock.mdb",qc=".mdb",GV="-lock",Im=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=kr(t,r),this.key_type=this.dbi[jn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[jn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new wm.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function C_(e,t){if(e===void 0)throw new Error(zt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(zt.ENV_NAME_REQUIRED)}a(C_,"pathEnvNameValidation");async function Lm(e,t,r=!0){try{await ss.access(e)}catch(s){throw s.code==="ENOENT"?new Error(zt.INVALID_BASE_PATH):s}try{let s=Ar.join(e,t+qc);return await ss.access(s,ss.constants.R_OK|ss.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await ss.access(Ar.join(e,t,qV),ss.constants.R_OK|ss.constants.F_OK),Ar.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(zt.INVALID_ENVIRONMENT)}else throw new Error(zt.INVALID_ENVIRONMENT);throw s}}a(Lm,"validateEnvironmentPath");function L_(e,t){if(I_.validateEnv(e),t===void 0)throw new Error(zt.DBI_NAME_REQUIRED)}a(L_,"validateEnvDBIName");async function xV(e,t,r=!1,s=!1){C_(e,t);let n=Ar.basename(e);t=t.toString();let i=fb.get(Eb.CONFIG_PARAMS.SCHEMAS);i||fb.setProperty(Eb.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await Lm(e,t,s),Sb(e,t,r)}catch(o){if(o.message===zt.INVALID_ENVIRONMENT){let c=Ar.join(e,t);await ss.mkdirp(s?c:e);let u=new mb(s?c:c+qc,!1),l=wm.open(u);l.dbis=Object.create(null);let _=new Cm(!1);l.openDB(ns,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Dm(e,t,r);return l[jn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(xV,"createEnvironment");async function kV(e,t,r,s=!0){C_(e,t),t=t.toString();let n=Ar.join(e,t);return BV({table:t,database:Ar.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(kV,"copyEnvironment");async function Sb(e,t,r=!1){C_(e,t),t=t.toString();let s=Dm(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 Lm(e,t),i=Ar.join(e,t+qc),o=n!=i,c=new mb(n,o),u=wm.open(c);u.dbis=Object.create(null);let l=gb(u);for(let _=0;_<l.length;_++)kr(u,l[_]);return u[jn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(Sb,"openEnvironment");async function $V(e,t,r=!1){C_(e,t),t=t.toString();let s=Ar.join(e,t+qc),n=await Lm(e,t);if(global.lmdb_map!==void 0){let i=Dm(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Tb(o),delete global.lmdb_map[i]}}await ss.remove(n),await ss.remove(n===s?n+GV:Ar.join(Ar.dirname(n),FV))}a($V,"deleteEnvironment");async function Tb(e){I_.validateEnv(e);let t=e[jn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Tb,"closeEnvironment");function Dm(e,t,r=!1){let n=`${Ar.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Dm,"getCachedEnvironmentName");function VV(e){I_.validateEnv(e);let t=Object.create(null),r=kr(e,ns);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==ns)try{t[s]=Object.assign(new w_,n)}catch{hb.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(VV,"listDBIDefinitions");function gb(e){I_.validateEnv(e);let t=[],r=kr(e,ns);for(let{key:s}of r.getRange({start:!1}))s!==ns&&t.push(s);return t}a(gb,"listDBIs");function YV(e,t){let s=kr(e,ns).getEntry(t),n=new w_;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{hb.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(YV,"getDBIDefinition");function Rb(e,t,r,s=!r){if(L_(e,t),t=t.toString(),t===ns)throw new Error(zt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return kr(e,t)}catch(n){if(n.message===zt.DBI_DOES_NOT_EXIST){let i=new Cm(r,s===!0),o=e.openDB(t,i),c=new w_(r===!0,s);return o[pb]=c,kr(e,ns).putSync(t,c),e.dbis[t]=o,o}throw n}}a(Rb,"createDBI");function kr(e,t){if(L_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ns?r=YV(e,t):r=new w_,r===void 0)throw new Error(zt.DBI_DOES_NOT_EXIST);let s;try{let n=new Cm(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(zt.DBI_DOES_NOT_EXIST):n}return s[pb]=r,e.dbis[t]=s,s}a(kr,"openDBI");function KV(e,t){L_(e,t),t=t.toString();let r=kr(e,t),s=r.getStats();return r[jn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(KV,"statDBI");async function WV(e,t){try{let r=Ar.join(e,t+qc);return(await ss.stat(r)).size}catch{throw new Error(zt.INVALID_ENVIRONMENT)}}a(WV,"environmentDataSize");function QV(e,t){if(L_(e,t),t=t.toString(),t===ns)throw new Error(zt.CANNOT_DROP_INTERNAL_DBIS_NAME);kr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],kr(e,ns).removeSync(t)}a(QV,"dropDBI");function zV(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{kr(e,i)}catch(o){if(o.message===zt.DBI_DOES_NOT_EXIST)Rb(e,i,i!==t,i===t),s=!0;else throw o}}s&&HV()}a(zV,"initializeDBIs");Ab.exports={openDBI:kr,openEnvironment:Sb,createEnvironment:xV,listDBIs:gb,listDBIDefinitions:VV,createDBI:Rb,dropDBI:QV,statDBI:KV,deleteEnvironment:$V,initializeDBIs:zV,TransactionCursor:Im,environmentDataSize:WV,copyEnvironment:kV,closeEnvironment:Tb}});var Nb=m(($_e,Ob)=>{"use strict";var Um=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};Ob.exports=Um});var yb=m((Y_e,bb)=>{"use strict";var Mm=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}};bb.exports=Mm});var wb=m((W_e,Ib)=>{"use strict";var Pm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};Ib.exports=Pm});var Wi=m((X_e,Db)=>{"use strict";var JV=we(),jV=Nb(),XV=yb(),ZV=wb(),Ls=Ht(),Fc=gr().LMDB_ERRORS_ENUM,eY=Ge(),dn=R(),tY=F(),rY=require("uuid"),z_e=require("lmdb"),{handleHDBError:sY,hdb_errors:nY}=z(),{OVERFLOW_MARKER:J_e,MAX_SEARCH_KEY_LENGTH:j_e}=eY,Cb=Y();Cb.initSync();var D_=Cb.get(dn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),vm=dn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ki=dn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function iY(e,t,r,s,n=Ls.getNextMonotonicTime()){Fm(e,t,r,s),Bm(e,t,r);let i=new jV,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];Lb(l,!0,n);let _=oY(e,t,r,l),d=l[t];o.push(_),c.push(d)}return Hm(o,c,s,i,n)}a(iY,"insertRecords");function oY(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][dn.FUNC_VAL],s[o]=c)}let u=Ls.getIndexedValues(c),l=e.dbis[o];if(u){D_&&l.prefetch(u.map(_=>({key:_,value:n})),U_);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}D_&&e.dbis[t].prefetch([n],U_),e.dbis[t].put(n,s,s[Ki])})}a(oY,"insertRecord");function aY(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(aY,"removeSkippedRecords");function Lb(e,t,r){let s=r>0;(s||!Number.isInteger(e[Ki]))&&(e[Ki]=r||(r=Ls.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[vm]))&&(e[vm]=r||Ls.getNextMonotonicTime()):delete e[vm]}a(Lb,"setTimestamps");function Bm(e,t,r){r.indexOf(dn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(dn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(dn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(dn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),JV.initializeDBIs(e,t,r)}a(Bm,"initializeTransaction");async function cY(e,t,r,s,n=Ls.getNextMonotonicTime()){Fm(e,t,r,s),Bm(e,t,r);let i=new XV,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=qm(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return Hm(c,u,s,i,n,o)}a(cY,"updateRecords");async function uY(e,t,r,s,n=Ls.getNextMonotonicTime()){try{Fm(e,t,r,s)}catch(u){throw sY(u,u.message,nY.HTTP_STATUS_CODES.BAD_REQUEST)}Bm(e,t,r);let i=new ZV,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;tY.isEmpty(l[t])?(_=rY.v4(),l[t]=_):_=l[t];let d=qm(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return Hm(o,c,s,i,n)}a(uY,"upsertRecords");async function Hm(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Ls.getNextMonotonicTime(),aY(r,i),s}a(Hm,"finalizeWrite");function qm(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(Lb(r,!_,o),Number.isInteger(r[Ki])&&l[Ki]>r[Ki])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let S=r[h],T=e.dbis[h];if(T===void 0)continue;let A=l[h];if(typeof S=="function"){let x=S([[l]]);Array.isArray(x)&&(S=x[0][dn.FUNC_VAL],r[h]=S)}if(S===A)continue;let g=Ls.getIndexedValues(A);if(g){D_&&T.prefetch(g.map(x=>({key:x,value:s})),U_);for(let x=0,V=g.length;x<V;x++)T.remove(g[x],s)}if(g=Ls.getIndexedValues(S),g){D_&&T.prefetch(g.map(x=>({key:x,value:s})),U_);for(let x=0,V=g.length;x<V;x++)T.put(g[x],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Ki])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:qm(e,t,r,s,n,i,o))}a(qm,"updateUpsertRecord");function lY(e,t,r){if(Ls.validateEnv(e),t===void 0)throw new Error(Fc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Fc.WRITE_ATTRIBUTES_REQUIRED):new Error(Fc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(lY,"validateBasic");function Fm(e,t,r,s){if(lY(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Fc.RECORDS_REQUIRED):new Error(Fc.RECORDS_MUST_BE_ARRAY)}a(Fm,"validateWrite");function U_(){}a(U_,"noop");Db.exports={insertRecords:iY,updateRecords:cY,upsertRecords:uY}});var En=m((ede,_Y)=>{_Y.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Ds=m((tde,Pb)=>{"use strict";var Mb=F(),Ub=R(),Jo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,fn=require("joi"),Xn={schema_format:{pattern:Jo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},dY=fn.alternatives(fn.string().min(1).max(Xn.schema_length.maximum).pattern(Jo).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),fn.number()).required(),EY=fn.alternatives(fn.string().min(1).max(Xn.schema_length.maximum).pattern(Jo).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),fn.number()),fY=fn.alternatives(fn.string().min(1).max(Xn.schema_length.maximum).pattern(Jo).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),fn.number()).required();function hY(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Xn.schema_length.maximum?`'${e}' maximum of 250 characters`:Jo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(hY,"checkValidTable");function mY(e,t){return Mb.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(mY,"validateSchemaExists");function pY(e,t){let r=t.state.ancestors[0].schema;return Mb.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(pY,"validateTableExists");function SY(e,t){return e.toLowerCase()===Ub.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Ub.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(SY,"validateSchemaName");Pb.exports={common_validators:Xn,schema_regex:Jo,hdb_schema_table:dY,validateSchemaExists:mY,validateTableExists:pY,validateSchemaName:SY,checkValidTable:hY,hdb_database:EY,hdb_table:fY}});var He=m((sde,vb)=>{"use strict";var Jt=require("validate.js");Jt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Jt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Jt.validators.type.checks={Object:function(e){return Jt.isObject(e)&&!Jt.isArray(e)},Array:Jt.isArray,Integer:Jt.isInteger,Number:Jt.isNumber,String:Jt.isString,Date:Jt.isDate,Boolean:function(e){return typeof e=="boolean"}};Jt.validators.hasValidFileExt=function(e,t){return Jt.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};vb.exports={validateObject:TY,validateObjectAsync:gY,validateBySchema:RY};function TY(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Jt(e,t,{format:"flat"});return r?new Error(r):null}a(TY,"validateObject");async function gY(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Jt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(gY,"validateObjectAsync");function RY(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(RY,"validateBySchema")});var M_=m((ide,Bb)=>{var{common_validators:Us}=Ds(),xc=He(),Gc="is required",Ze={database:{presence:!1,format:Us.schema_format,length:Us.schema_length},schema:{presence:!1,format:Us.schema_format,length:Us.schema_length},table:{presence:!0,format:Us.schema_format,length:Us.schema_length},attribute:{presence:!0,format:Us.schema_format,length:Us.schema_length},hash_attribute:{presence:!0,format:Us.schema_format,length:Us.schema_length}};function kc(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(kc,"makeAttributesStrings");function AY(e){return e=kc(e),Ze.table.presence=!1,Ze.attribute.presence=!1,Ze.hash_attribute.presence=!1,xc.validateObject(e,Ze)}a(AY,"schema_object");function OY(e){return e=kc(e),Ze.table.presence={message:Gc},Ze.attribute.presence=!1,Ze.hash_attribute.presence=!1,xc.validateObject(e,Ze)}a(OY,"table_object");function NY(e){return e=kc(e),Ze.table.presence={message:Gc},Ze.attribute.presence=!1,xc.validateObject(e,Ze)}a(NY,"create_table_object");function bY(e){return e=kc(e),Ze.table.presence={message:Gc},Ze.attribute.presence={message:Gc},Ze.hash_attribute.presence=!1,xc.validateObject(e,Ze)}a(bY,"attribute_object");function yY(e){return e=kc(e),Ze.table.presence={message:Gc},Ze.attribute.presence=!1,Ze.hash_attribute.presence=!1,xc.validateObject(e,Ze)}a(yY,"describe_table");function IY(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(IY,"validateTableResidence");Bb.exports={schema_object:AY,create_table_object:NY,table_object:OY,attribute_object:bY,describe_table:yY,validateTableResidence:IY}});var qb=m((ade,Hb)=>{"use strict";var wY=require("uuid"),Gm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||wY.v4(),this.schema_table=`${this.schema}.${this.table}`}};Hb.exports=Gm});var P_=m((ude,Fb)=>{"use strict";var CY=qb(),xm=class extends CY{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}};Fb.exports=xm});var xb=m((_de,Gb)=>{"use strict";Gb.exports=DY;var LY="inserted";function DY(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===LY?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(DY,"returnObject")});var v_=m((Ede,Kb)=>{"use strict";var UY=R(),km=we(),MY=Wi(),{getSystemSchemaPath:PY,getSchemaPath:vY}=De(),BY=En(),HY=M_(),qY=P_(),FY=xb(),{handleHDBError:kb,hdb_errors:Vb}=z(),$b=F(),{HTTP_STATUS_CODES:GY}=Vb,$m=BY.hdb_attribute,Yb=[];for(let e=0;e<$m.attributes.length;e++)Yb.push($m.attributes[e].attribute);var xY="inserted";Kb.exports=kY;async function kY(e){let t=HY.attribute_object(e);if(t)throw kb(new Error,t.message,Vb.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&$b.checkGlobalSchemaTable(e.schema,e.table);if(r)throw kb(new Error,r,GY.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=$b.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 qY(e.schema,e.table,e.attribute,e.id);try{let i=await km.openEnvironment(vY(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}`);km.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await km.openEnvironment(PY(),UY.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await MY.insertRecords(o,$m.hash_attribute,Yb,[n]);return FY(xY,c,{records:[n]},u)}catch(i){throw i}}a(kY,"lmdbCreateAttribute")});var Ym=m((hde,Qb)=>{var{hdb_table:$Y,hdb_database:Wb}=Ds(),VY=He(),Vm=require("joi"),YY={undefined:"undefined",null:"null"},KY=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||YY[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"),WY=Vm.object({database:Wb,schema:Wb,table:$Y,records:Vm.array().items(Vm.object().custom(KY)).required()});Qb.exports=function(e){return VY.validateBySchema(e,WY)}});var $c=m((Sde,Jb)=>{"use strict";var hn=F(),zb=C(),pde=Ym(),{getDatabases:QY}=(_e(),re(be)),{ClientError:Qi}=z();Jb.exports=zY;function zY(e){if(hn.isEmpty(e))throw new Qi("invalid update parameters defined.");if(hn.isEmptyOrZeroLength(e.schema))throw new Qi("invalid schema specified.");if(hn.isEmptyOrZeroLength(e.table))throw new Qi("invalid table specified.");if(!Array.isArray(e.records))throw new Qi("records must be an array");let t=QY()[e.schema]?.[e.table];if(hn.isEmpty(t))throw new Qi(`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&&hn.isEmptyOrZeroLength(o[r]))throw zb.error("a valid hash attribute must be provided with update record:",o),new Qi("a valid hash attribute must be provided with update record, check log for more info");if(!hn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw zb.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Qi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!hn.isEmpty(o[r])&&o[r]!==""&&s.has(hn.autoCast(o[r]))&&(o.skip=!0),s.add(hn.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(zY,"insertUpdateValidate")});var Vc=m((gde,jb)=>{"use strict";var JY=R().OPERATIONS_ENUM,Km=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=JY.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};jb.exports=Km});var Qc=m((Ode,Xb)=>{"use strict";var Ade=Vc(),B_=R(),Qm=F(),Wm=C(),jY=require("uuid"),{handleHDBError:Yc,hdb_errors:XY}=z(),{HDB_ERROR_MSGS:Kc,HTTP_STATUS_CODES:Wc}=XY;Xb.exports=ZY;function ZY(e,t,r){for(let n=0;n<t.length;n++)eK(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];tK(i,r,e.operation)}}a(ZY,"processRows");function eK(e){if(Buffer.byteLength(String(e))>B_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Yc(new Error,Kc.ATTR_NAME_LENGTH_ERR(e),Wc.BAD_REQUEST,void 0,void 0,!0);if(Qm.isEmptyOrZeroLength(e)||Qm.isEmpty(e.trim()))throw Yc(new Error,Kc.ATTR_NAME_NULLISH_ERR,Wc.BAD_REQUEST,void 0,void 0,!0)}a(eK,"validateAttribute");function tK(e,t,r){if(!e.hasOwnProperty(t)||Qm.isEmptyOrZeroLength(e[t])){if(r===B_.OPERATIONS_ENUM.INSERT||r===B_.OPERATIONS_ENUM.UPSERT){e[t]=jY.v4();return}throw Wm.error("Update transaction aborted due to record with no hash value:",e),Yc(new Error,Kc.RECORD_MISSING_HASH_ERR,Wc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>B_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Wm.error(e),Yc(new Error,Kc.HASH_VAL_LENGTH_ERR,Wc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Wm.error(e),Yc(new Error,Kc.INVALID_FORWARD_SLASH_IN_HASH_ERR,Wc.BAD_REQUEST,void 0,void 0,!0)}a(tK,"validateHash")});var ey=m((bde,Zb)=>{"use strict";var zm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};Zb.exports=zm});var sy=m((Ide,ry)=>{"use strict";var Jm=we(),rK=C(),ty=gr().LMDB_ERRORS_ENUM;ry.exports=sK;async function sK(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 Jm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==ty.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Jm.closeEnvironment(global.lmdb_map[s]),await Jm.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==ty.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){rK.error(t)}}a(sK,"cleanLMDBMap")});var mn=m((Cde,ay)=>{"use strict";var zc=require("crypto"),nK=Y(),{CONFIG_PARAMS:iK}=R(),iy="aes-256-cbc",oK=32,aK=16,jm=64,oy=32,cK=jm+oy,ny=new Map;ay.exports={encrypt:uK,decrypt:lK,createNatsTableStreamName:_K};function uK(e){let t=zc.randomBytes(oK),r=zc.randomBytes(aK),s=zc.createCipheriv(iy,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(uK,"encrypt");function lK(e){let t=e.substr(0,jm),r=e.substr(jm,oy),s=e.substr(cK,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=zc.createDecipheriv(iy,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(lK,"decrypt");function _K(e,t){let r=nK.get(iK.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=ny.get(r);return s||(s=zc.createHash("md5").update(r).digest("hex"),ny.set(r,s)),s}a(_K,"createNatsTableStreamName")});var Zn=m((Ude,uy)=>{"use strict";var Dde=jt(),H_=C(),cy=M_(),dK=mn(),q_=F(),{handleHDBError:F_,hdb_errors:EK}=z(),{HDB_ERROR_MSGS:G_,HTTP_STATUS_CODES:Xm}=EK,fK=Y();fK.initSync();var{getDatabases:Zm}=(_e(),re(be));uy.exports={describeAll:hK,describeTable:x_,describeSchema:mK};async function hK(e){try{let t=q_.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Zm(),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 x_({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 x_({schema:l,table:d},f)}E&&c.push(E)}catch(E){H_.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 H_.error("Got an error in describeAll"),H_.error(t),F_(new Error,G_.DESCRIBE_ALL_ERR)}}a(hK,"describeAll");async function x_(e,t){q_.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=cy.describe_table(e);if(i)throw i;let c=Zm()[r];if(!c)throw F_(new Error,G_.SCHEMA_NOT_FOUND(e.schema),Xm.NOT_FOUND);let u=c[s];if(!u)throw F_(new Error,G_.TABLE_NOT_FOUND(e.schema,e.table),Xm.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=dK.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){H_.warn(`unable to stat table dbi due to ${d}`)}return _}a(x_,"descTable");async function mK(e){q_.transformReq(e);let t=cy.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=Zm()[s];if(!i)throw F_(new Error,G_.SCHEMA_NOT_FOUND(e.schema),Xm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),q_.isEmpty(u)||u.describe){let l=await x_({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(mK,"describeSchema")});var $r=m((Bde,fy)=>{var pK=En(),{callbackify:_y,promisify:SK}=require("util"),{getDatabases:dy}=(_e(),re(be));fy.exports={setSchemaDataToGlobal:ly,getTableSchema:TK,getSystemSchema:gK,setSchemaDataToGlobalAsync:SK(ly)};var Ey=Zn(),Pde=_y(Ey.describeAll),vde=_y(Ey.describeTable);function ly(e){global.hdb_schema=dy(),e&&e()}a(ly,"setSchemaDataToGlobal");function TK(e,t,r){let s=dy()[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(TK,"getTableSchema");function gK(){return pK}a(gK,"getSystemSchema")});var Xt=m((qde,Sy)=>{"use strict";var $_=Ym(),yt=F(),RK=require("util"),V_=Vr(),AK=$r(),hy=C(),{handleHDBError:zi,hdb_errors:OK}=z(),{HTTP_STATUS_CODES:Ji}=OK,NK=RK.promisify(AK.getTableSchema),bK="updated",my="inserted",py="upserted";Sy.exports={insert:IK,update:wK,upsert:CK,validation:yK,flush:LK};async function yK(e){if(yt.isEmpty(e))throw new Error("invalid update parameters defined.");if(yt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(yt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await NK(e.schema,e.table),r=$_(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&&yt.isEmptyOrZeroLength(c[s]))throw hy.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(!yt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw hy.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!yt.isEmpty(c[s])&&c[s]!==""&&n.has(yt.autoCast(c[s]))&&(c.skip=!0),n.add(yt.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(yK,"validation");async function IK(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=$_(e);if(t)throw zi(new Error,t.message,Ji.BAD_REQUEST);yt.transformReq(e);let r=yt.checkSchemaTableExist(e.schema,e.table);if(r)throw zi(new Error,r,Ji.BAD_REQUEST);let s=await V_.createRecords(e);return k_(my,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(IK,"insertData");async function wK(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=$_(e);if(t)throw zi(new Error,t.message,Ji.BAD_REQUEST);yt.transformReq(e);let r=yt.checkSchemaTableExist(e.schema,e.table);if(r)throw zi(new Error,r,Ji.BAD_REQUEST);let s=await V_.updateRecords(e);return yt.isEmpty(s.existing_rows)?k_(bK,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):k_(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(wK,"updateData");async function CK(e){if(e.operation!=="upsert")throw zi(new Error,"invalid operation, must be upsert",Ji.INTERNAL_SERVER_ERROR);let t=$_(e);if(t)throw zi(new Error,t.message,Ji.BAD_REQUEST);yt.transformReq(e);let r=yt.checkSchemaTableExist(e.schema,e.table);if(r)throw zi(new Error,r,Ji.BAD_REQUEST);let s=await V_.upsertRecords(e);return k_(py,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(CK,"upsertData");function k_(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===my?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===py?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(k_,"returnObject");function LK(e){return yt.transformReq(e),V_.flush(e.schema,e.table)}a(LK,"flush")});var tp=m((Gde,Ry)=>{var DK=He(),ep=require("joi"),{hdb_table:UK,hdb_database:Ty}=Ds(),gy={schema:Ty,database:Ty,table:UK},MK={date:ep.date().iso().required()},PK={timestamp:ep.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Ry.exports=function(e,t){let r=t==="timestamp"?{...gy,...PK}:{...gy,...MK},s=ep.object(r);return DK.validateBySchema(e,s)}});var Ny=m((xde,Oy)=>{var vK=He(),rp=require("joi"),{hdb_table:BK,hdb_database:Ay}=Ds(),HK=rp.object({schema:Ay,database:Ay,table:BK,hash_values:rp.array().required(),ids:rp.array()});Oy.exports=function(e){return vK.validateBySchema(e,HK)}});var op=m((kde,by)=>{"use strict";var sp=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}},np=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}},ip=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};by.exports={InsertObject:sp,NoSQLSeachObject:np,DeleteResponseObject:ip}});var Zi=m((Vde,Ly)=>{"use strict";var Iy=tp(),qK=Ny(),ji=F(),yy=require("moment"),wy=C(),{promisify:FK,callbackify:GK}=require("util"),Xi=R(),xK=$r(),ap=FK(xK.getTableSchema),cp=Vr(),{DeleteResponseObject:kK}=op(),{handleHDBError:ei,hdb_errors:$K}=z(),{HDB_ERROR_MSGS:Y_,HTTP_STATUS_CODES:ti}=$K,VK="records successfully deleted",YK=GK(Cy);Ly.exports={delete:YK,deleteRecord:Cy,deleteFilesBefore:KK,deleteAuditLogsBefore:WK};async function KK(e){let t=Iy(e,"date");if(t)throw ei(t,t.message,ti.BAD_REQUEST,void 0,void 0,!0);if(ji.transformReq(e),!yy(e.date,yy.ISO_8601).isValid())throw ei(new Error,Y_.INVALID_DATE,ti.BAD_REQUEST,Xi.LOG_LEVELS.ERROR,Y_.INVALID_DATE,!0);let s=ji.checkSchemaTableExist(e.schema,e.table);if(s)throw ei(new Error,s,ti.NOT_FOUND,Xi.LOG_LEVELS.ERROR,s,!0);let n=await cp.deleteRecordsBefore(e);if(await ap(e.schema,e.table),wy.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(KK,"deleteFilesBefore");async function WK(e){let t=Iy(e,"timestamp");if(t)throw ei(t,t.message,ti.BAD_REQUEST,void 0,void 0,!0);if(ji.transformReq(e),isNaN(e.timestamp))throw ei(new Error,Y_.INVALID_VALUE("Timestamp"),ti.BAD_REQUEST,Xi.LOG_LEVELS.ERROR,Y_.INVALID_VALUE("Timestamp"),!0);let r=ji.checkSchemaTableExist(e.schema,e.table);if(r)throw ei(new Error,r,ti.NOT_FOUND,Xi.LOG_LEVELS.ERROR,r,!0);let s=await cp.deleteAuditLogsBefore(e);return await ap(e.schema,e.table),wy.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(WK,"deleteAuditLogsBefore");async function Cy(e){e.ids&&(e.hash_values=e.ids);let t=qK(e);if(t)throw ei(t,t.message,ti.BAD_REQUEST,void 0,void 0,!0);ji.transformReq(e);let r=ji.checkSchemaTableExist(e.schema,e.table);if(r)throw ei(new Error,r,ti.NOT_FOUND,Xi.LOG_LEVELS.ERROR,r,!0);try{await ap(e.schema,e.table);let s=await cp.deleteRecords(e);return ji.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${VK}`),s}catch(s){if(s.message===Xi.SEARCH_NOT_FOUND_MESSAGE){let n=new kK;return n.message=Xi.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(Cy,"deleteRecord")});var K_=m((Kde,My)=>{var QK=require("crypto"),Dy=9;function zK(e){let t=jK(Dy),r=Uy(e+t);return t+r}a(zK,"createHash");function JK(e,t){let r=e.substr(0,Dy),s=r+Uy(t+r);return e===s}a(JK,"validateHash");function jK(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(jK,"generateSalt");function Uy(e){return QK.createHash("md5").update(e).digest("hex")}a(Uy,"md5");My.exports={hash:zK,validate:JK}});var vy=m((Qde,Py)=>{var up=He(),qt={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function XK(e){return qt.password.presence=!0,qt.username.presence=!0,qt.role.presence=!0,qt.active.presence=!0,up.validateObject(e,qt)}a(XK,"addUserValidation");function ZK(e){return qt.password.presence=!1,qt.username.presence=!0,qt.role.presence=!1,qt.active.presence=!1,up.validateObject(e,qt)}a(ZK,"alterUserValidation");function e1(e){return qt.password.presence=!1,qt.username.presence=!0,qt.role.presence=!1,qt.active.presence=!1,up.validateObject(e,qt)}a(e1,"dropUserValidation");Py.exports={addUserValidation:XK,alterUserValidation:ZK,dropUserValidation:e1}});var Me=m((jde,Hy)=>{"use strict";var{platform:Jde}=require("os"),t1="nats-server.zip",lp="nats-server",r1=process.platform==="win32"?`${lp}.exe`:lp,_p="HDB",s1=/^[^\s.,*>]+$/,By="__request__",n1=a(e=>`${e}.${By}`,"REQUEST_SUBJECT"),i1={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},o1={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},a1={HUB:"hub.pid",LEAF:"leaf.pid"},c1={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},u1={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:_p,deliver_subject:"__HDB__.WORKQUEUE"},l1={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:_p,deliver_subject:"HDB.SCHEMAQUEUE"},_1={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:_p,deliver_subject:"HDB.USERQUEUE"},d1={SUCCESS:"success",ERROR:"error"},E1={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},f1={TXN:"txn",MSGID:"msgid"},jo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},h1={[jo.ERR]:1,[jo.WRN]:2,[jo.INF]:3,[jo.DBG]:4,[jo.TRC]:5},m1={debug:"-D",trace:"-DVV"};Hy.exports={NATS_SERVER_ZIP:t1,NATS_SERVER_NAME:lp,NATS_BINARY_NAME:r1,PID_FILES:a1,NATS_CONFIG_FILES:o1,SERVER_SUFFIX:c1,WORK_QUEUE_CONSUMER_NAMES:u1,SCHEMA_QUEUE_CONSUMER_NAMES:l1,USER_QUEUE_CONSUMER_NAMES:_1,NATS_TERM_CONSTRAINTS_RX:s1,REQUEST_SUFFIX:By,UPDATE_REMOTE_RESPONSE_STATUSES:d1,CLUSTER_STATUS_STATUSES:E1,REQUEST_SUBJECT:n1,SUBJECT_PREFIXES:f1,MSG_HEADERS:i1,LOG_LEVELS:jo,LOG_LEVEL_FLAGS:m1,LOG_LEVEL_HIERARCHY:h1}});var dp=m((Zde,qy)=>{"use strict";var p1={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))},S1="certificate.pem",T1="privateKey.pem",g1="ca.pem";qy.exports={CERTIFICATE_VALUES:p1,CERTIFICATE_PEM_NAME:S1,PRIVATEKEY_PEM_NAME:T1,CA_PEM_NAME:g1}});var fp=m((tEe,Vy)=>{"use strict";var ky=require("fs-extra"),se=require("joi"),R1=require("os"),{boolean:ge,string:Sn,number:Or,array:Ep}=se.types(),{totalmem:Fy}=require("os"),Xo=require("path"),A1=C(),Q_=F(),eEe=dp(),Gy=R(),O1=He(),xy="log",N1="components",b1="Invalid logging.rotation.maxSize unit. Available units are G, M or K",y1="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",I1="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",w1="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",C1="rootPath config parameter is undefined",L1="clustering.enabled config parameter is undefined",pn=Or.min(0).required(),z_=Ep.items({host:Sn.required(),port:pn}).empty(null),Tn;Vy.exports={configValidator:D1,routesValidator:H1,route_constraints:z_};function D1(e){if(Tn=e.rootPath,Q_.isEmpty(Tn))throw C1;let t=ge.required(),r=se.valid("production","development").required(),s=Or.min(0).max(1e3).empty(null).default(B1),n=Sn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(W_),i=se.custom(U1).messages({"any.custom":"{:#label} {:#error}"}),o=Sn.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=se.string().empty(null).default(W_),u=se.custom(M1).empty(null).default(W_),l=e.clustering?.enabled;if(Q_.isEmpty(l))throw L1;let _;return l===!0?_=se.object({enabled:t,hubServer:se.object({cluster:se.object({name:se.required().empty(null),network:se.object({port:pn,routes:z_}).required()}).required(),leafNodes:se.object({network:se.object({port:pn}).required()}).required(),network:se.object({port:pn}).required()}).required(),leafServer:se.object({network:se.object({port:pn,routes:z_}).required(),streams:se.object({maxAge:Or.min(120).allow(null).optional(),maxBytes:Or.min(1).allow(null).optional(),maxMsgs:Or.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:se.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:ge.optional(),databaseLevel:ge.optional(),tls:se.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ge.required(),verify:ge.optional()}),user:Sn.optional().empty(null)}).required():_=se.object({enabled:t,tls:se.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ge.required()})}).required(),se.object({authentication:se.object({authorizeLocal:ge,cacheTTL:Or.required(),enableSessions:ge,operationTokenTimeout:se.required(),refreshTokenTimeout:se.required()}),analytics:se.object({aggregatePeriod:Or}),clustering:_,customFunctions:se.object({enabled:t,network:se.object({cors:ge.required(),corsAccessList:Ep.required(),headersTimeout:Or.min(1).required(),https:ge.required(),keepAliveTimeout:Or.min(1).required(),port:pn,timeout:Or.min(1).required()}),nodeEnv:r,root:n,tls:se.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:se.object({enabled:t}).required(),logging:se.object({auditAuthEvents:se.object({logFailed:ge,logSuccessful:ge}),file:ge.required(),level:se.valid("notify","fatal","error","warn","info","debug","trace"),rotation:se.object({enabled:ge.optional(),compress:ge.optional(),interval:Sn.custom(v1).optional().empty(null),maxSize:Sn.custom(P1).optional().empty(null),path:Sn.optional().empty(null).default(W_)}).required(),root:n,stdStreams:ge.required(),auditLog:ge.required()}).required(),operationsApi:se.object({foreground:ge.required(),network:se.object({cors:ge.required(),corsAccessList:Ep.required(),headersTimeout:Or.min(1).required(),https:ge.required(),keepAliveTimeout:Or.min(1).required(),port:pn,timeout:Or.min(1).required()}).required(),nodeEnv:r,tls:se.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Sn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:se.object({network:se.object({port:pn,securePort:pn}).required(),webSocket:ge.optional(),requireAuthentication:ge.optional()}),http:se.object({threads:s}).required(),storage:se.object({writeAsync:ge.required(),overlappingSync:ge.optional(),caching:ge.optional(),compression:ge.optional(),noReadAhead:ge.optional(),path:u,prefetchWrites:ge.optional()}).required(),ignoreScripts:ge.optional()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(D1,"configValidator");function $y(e){return ky.existsSync(e)?null:`Specified path ${e} does not exist.`}a($y,"doesPathExist");function U1(e,t){if(e===null)return;let r=$y(e);return r?t.message(r):e}a(U1,"validatePemFile");function M1(e,t){se.assert(e,Sn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=$y(e);if(r)return t.message(r)}a(M1,"validatePath");function P1(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(b1);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(I1):e}a(P1,"validateRotationMaxSize");function v1(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(y1);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(w1):e}a(v1,"validateRotationInterval");function B1(e,t){let r=t.state.path.join("."),s=R1.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Fy();return i=Math.round(Math.min(i,Fy())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),A1.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(B1,"setDefaultThreads");function W_(e,t){if(!Q_.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Q_.isEmpty(Tn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Xo.join(Tn,N1);case"logging.root":return Xo.join(Tn,xy);case"clustering.leafServer.streams.path":return Xo.join(Tn,"clustering","leaf");case"storage.path":let s=Xo.join(Tn,Gy.LEGACY_DATABASES_DIR_NAME);return ky.existsSync(s)?s:Xo.join(Tn,Gy.DATABASES_DIR_NAME);case"logging.rotation.path":return Xo.join(Tn,xy);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(W_,"setDefaultRoot");function H1(e){let t=se.object({routes:z_});return O1.validateBySchema({routes:e},t)}a(H1,"routesValidator")});var et=m((nEe,eI)=>{"use strict";var Yr=R(),At=F(),ht=C(),{configValidator:q1,routesValidator:Yy}=fp(),Zt=require("fs-extra"),F1=require("yaml"),is=require("path"),G1=require("is-number"),Wy=require("properties-reader"),x1=require("lodash"),{handleHDBError:k1}=z(),{HTTP_STATUS_CODES:$1,HDB_ERROR_MSGS:J_}=gr(),sEe=require("minimist"),{server:V1}=(rs(),re(Pc)),{SCHEMAS_PARAM_CONFIG:Jc,CONFIG_PARAMS:ri,CONFIG_PARAM_MAP:gn}=Yr,Y1="Unable to get config value because config is uninitialized",K1="Config successfully initialized",W1="Error backing up config file",Q1="Empty parameter sent to getConfigValue",Qy=is.join(Yr.PACKAGE_ROOT,"config","yaml",Yr.HDB_DEFAULT_CONFIG_FILE),z1="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Ky={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"},j_,It;eI.exports={createConfigFile:J1,getDefaultConfig:j1,getConfigValue:Jy,initConfig:jy,flattenConfig:to,updateConfigValue:Xy,updateConfigObject:Z1,getConfiguration:rW,setConfiguration:sW,readConfigFile:pp,getClusteringRoutes:nW,initOldConfig:Zy,getConfigFromFile:iW,getConfigFilePath:eo,addConfig:oW,deleteConfigFromFile:aW};function J1(e){let t=si(Qy);j_=to(t.toJSON());let r;for(let o in e){let c=gn[o.toLowerCase()];if(c===ri.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=hp(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){ht.error(_)}}}r&&zy(t,r),mp(t);let s=t.toJSON();It=to(s);let n=t.getIn(["rootPath"]),i=is.join(n,Yr.HDB_CONFIG_FILE);Zt.createFileSync(i),Zt.writeFileSync(i,String(t)),ht.trace(`Config file written to ${i}`)}a(J1,"createConfigFile");function zy(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!At.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Jc.TABLES))for(let i in s[n][Jc.TABLES])for(let o in s[n][Jc.TABLES][i]){let c=s[n][Jc.TABLES][i][o],u=[ri.SCHEMAS,n,Jc.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=[ri.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){ht.error("Error parsing schemas CLI/env config arguments",s)}}a(zy,"setSchemasConfig");function j1(e){if(j_===void 0){let r=si(Qy);j_=to(r.toJSON())}let t=gn[e.toLowerCase()];if(t!==void 0)return j_[t.toLowerCase()]}a(j1,"getDefaultConfig");function Jy(e){if(e==null){ht.error(Q1);return}if(It===void 0){ht.trace(Y1);return}let t=gn[e.toLowerCase()];if(t!==void 0)return It[t.toLowerCase()]}a(Jy,"getConfigValue");function eo(e=At.getPropsFilePath()){let t=At.getEnvCliRootPath();return t?is.join(t,Yr.HDB_CONFIG_FILE):Wy(e).get(Yr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(eo,"getConfigFilePath");function jy(e=!1){if(It===void 0||e){let t;if(!At.noBootFile()){t=At.getPropsFilePath();try{Zt.accessSync(t,Zt.constants.F_OK|Zt.constants.R_OK)}catch(i){throw ht.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=eo(t),s;if(r.includes("config/settings.js"))try{Zy(r);return}catch(i){if(i.code!==Yr.NODE_ERROR_CODES.ENOENT)throw i}try{s=si(r)}catch(i){if(i.code===Yr.NODE_ERROR_CODES.ENOENT){ht.trace(`HarperDB config file not found at ${r}.
|
|
6
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw ht.error(i),new Error(`Error reading HarperDB config file at ${r}`)}X1(s,r),mp(s);let n=s.toJSON();if(V1.config=n,It=to(n),It.logging_rotation_rotate)for(let i in Ky)It[i]&&ht.error(`Config ${Ky[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);ht.trace(K1)}}a(jy,"initConfig");function X1(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],is.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],is.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],is.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(ht.trace("Updating config file with missing config params"),Zt.writeFileSync(t,String(e)))}a(X1,"checkForUpdatedConfig");function mp(e){let t=e.toJSON(),r=q1(t);if(r.error)throw J_.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(mp,"validateConfig");function Z1(e,t){It===void 0&&(It={});let r=gn[e.toLowerCase()];if(r===void 0){ht.trace(`Unable to update config object because config param '${e}' does not exist`);return}It[r.toLowerCase()]=t}a(Z1,"updateConfigObject");function Xy(e,t,r=void 0,s=!1,n=!1,i=!1){It===void 0&&jy();let o=Jy(gn.hdb_root),c=is.join(o,Yr.HDB_CONFIG_FILE),u=si(c),l;if(r===void 0&&e.toLowerCase()===ri.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=gn[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=hp(E,t);u.setIn([...f],h)}else for(let E in r){let f=gn[E.toLowerCase()];if(f===ri.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),S=hp(f,r[E]);f==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(T){ht.error(T)}}}l&&zy(u,l),mp(u);let _=u.getIn(["rootPath"]),d=is.join(_,Yr.HDB_CONFIG_FILE);s===!0&&eW(c,_),Zt.writeFileSync(d,String(u)),n&&(It=to(u.toJSON())),ht.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Xy,"updateConfigValue");function eW(e,t){try{let r=is.join(t,"backup",`${Yr.HDB_CONFIG_FILE}.bak`);Zt.copySync(e,r),ht.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){ht.error(W1),ht.error(r)}}a(eW,"backupConfigFile");var tW=["schemas"];function to(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!tW.includes(r)){let s=to(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(to,"flattenConfig");function hp(e,t){if(e===ri.CLUSTERING_NODENAME||e===ri.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(G1(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||At.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 At.autoCast(t)}a(hp,"castConfigValue");function rW(){let e=At.getPropsFilePath(),t=eo(e);return si(t).toJSON()}a(rW,"getConfiguration");async function sW(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Xy(void 0,void 0,n,!0),z1}catch(i){throw typeof i=="string"||i instanceof String?k1(i,i,$1.BAD_REQUEST,void 0,void 0,!0):i}}a(sW,"setConfiguration");function pp(){let e=At.getPropsFilePath();try{Zt.accessSync(e,Zt.constants.F_OK|Zt.constants.R_OK)}catch(s){if(!At.noBootFile())throw ht.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=eo(e);return si(t).toJSON()}a(pp,"readConfigFile");function si(e){return F1.parseDocument(Zt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(si,"parseYamlDoc");function nW(){let e=pp(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=At.isEmptyOrZeroLength(t)?[]:t;let r=Yy(t);if(r)throw J_.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=At.isEmptyOrZeroLength(s)?[]:s;let n=Yy(s);if(n)throw J_.CONFIG_VALIDATION(n.message);if(!At.isEmptyOrZeroLength(s)&&!At.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!At.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw J_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(nW,"getClusteringRoutes");function Zy(e){let t=Wy(e);It={};for(let r in gn){let s=t.get(r.toUpperCase());if(At.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=gn[r].toLowerCase();n===ri.LOGGING_ROOT?It[n]=is.dirname(s):It[n]=s}return It}a(Zy,"initOldConfig");function iW(e){let t=pp();return x1.get(t,e.replaceAll("_","."))}a(iW,"getConfigFromFile");async function oW(e,t){let r=si(eo());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Zt.writeFile(eo(),String(r))}a(oW,"addConfig");function aW(e){let t=eo(At.getPropsFilePath()),r=si(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=is.join(s,Yr.HDB_CONFIG_FILE);Zt.writeFileSync(n,String(r))}a(aW,"deleteConfigFromFile")});var rI=m((oEe,tI)=>{"use strict";var X_=R(),Z_=class{static{a(this,"BaseLicense")}constructor(t=0,r=X_.RAM_ALLOCATION_ENUM.DEFAULT,s=X_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Sp=class extends Z_{static{a(this,"ExtendedLicense")}constructor(t=0,r=X_.RAM_ALLOCATION_ENUM.DEFAULT,s=X_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};tI.exports={BaseLicense:Z_,ExtendedLicense:Sp}});var jc=m((cEe,cI)=>{"use strict";var ea=require("fs-extra"),sI=K_(),nI=require("crypto"),cW=require("moment"),uW=require("uuid").v4,Ft=C(),gp=require("path"),lW=F(),ni=R(),_W=rI().ExtendedLicense,Zo="invalid license key format",dW="061183",EW="mofi25",fW="aes-256-cbc",hW=16,mW=32,iI=Y();iI.initSync();var Tp;cI.exports={validateLicense:oI,generateFingerPrint:SW,licenseSearch:aI,getLicense:RW};function Rp(){return gp.join(iI.getHdbBasePath(),ni.LICENSE_KEY_DIR_NAME,ni.LICENSE_FILE_NAME)}a(Rp,"getLicenseDirPath");function pW(){let e=Rp();return gp.join(e,ni.LICENSE_FILE_NAME)}a(pW,"getLicenseFilePath");function Ap(){let e=Rp();return gp.join(e,ni.REG_KEY_FILE_NAME)}a(Ap,"getFingerPrintFilePath");async function SW(){let e=Ap();try{return await ea.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await TW();throw Ft.error(`Error writing fingerprint file to ${e}`),Ft.error(t),new Error("There was an error generating the fingerprint")}}a(SW,"generateFingerPrint");async function TW(){let e=uW(),t=sI.hash(e),r=Ap();try{await ea.mkdirp(Rp()),await ea.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ft.error(`Error writing fingerprint file to ${r}`),Ft.error(s),new Error("There was an error generating the fingerprint")}return t}a(TW,"writeFingerprint");function oI(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ni.RAM_ALLOCATION_ENUM.DEFAULT,version:ni.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ft.error("empty license key passed to validate."),r;let s=Ap(),n=!1;try{n=ea.statSync(s)}catch(i){Ft.error(i)}if(n){let i;try{i=ea.readFileSync(s,"utf8")}catch{Ft.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(EW),c=o[1];c=Buffer.concat([Buffer.from(c)],hW);let u=Buffer.concat([Buffer.from(i)],mW),l=nI.createDecipheriv(fW,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=gW(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Zo),Ft.error(Zo),new Error(Zo)}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(Zo),Ft.error(Zo),new Error(Zo)}else r.exp_date=_;r.exp_date<cW().valueOf()&&(r.valid_date=!1),sI.validate(o[1],`${dW}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Ft.error("Invalid licence"),r}a(oI,"validateLicense");function gW(e,t){try{let r=nI.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ft.warn("Check old license failed")}}a(gW,"checkOldLicense");function aI(){let e=new _W,t=[];try{t=ea.readFileSync(pW(),"utf-8").split(ni.NEW_LINE)}catch(r){r.code==="ENOENT"?Ft.info("no license file found"):Ft.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(lW.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=oI(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){Ft.error("There was an error parsing the license string."),Ft.error(n),e.ram_allocation=ni.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Tp=e,e}a(aI,"licenseSearch");async function RW(){return Tp||await aI(),Tp}a(RW,"getLicense")});var er=m((EEe,NI)=>{"use strict";var EI="username is required",fI="nothing to update, must supply active, role or password to update",hI="password cannot be an empty string",mI="If role is specified, it cannot be empty.",pI="active must be true or false";NI.exports={addUser:LW,alterUser:DW,dropUser:MW,getSuperUser:HW,userInfo:PW,listUsers:td,listUsersExternal:vW,setUsersToGlobal:ra,findAndValidateUser:OI,getClusterUser:qW,USERNAME_REQUIRED:EI,ALTERUSER_NOTHING_TO_UPDATE:fI,EMPTY_PASSWORD:hI,EMPTY_ROLE:mI,ACTIVE_BOOLEAN:pI};var SI=Xt(),AW=Zi(),Np=K_(),TI=vy(),gI=jt(),bp=Rn(),Nr=F(),RI=require("validate.js"),de=C(),{promisify:OW}=require("util"),yp=mn(),uI=R(),lI=Me(),NW=et(),lEe=Y(),_Ee=jc(),bW=En(),{table:dEe}=(_e(),re(be)),{handleHDBError:Ms,hdb_errors:yW}=z(),{HTTP_STATUS_CODES:Ps,AUTHENTICATION_ERROR_MSGS:Op,HDB_ERROR_MSGS:ta}=yW,{UserEventMsg:Ip}=os(),_I=require("lodash"),{_assignPackageExport:IW}=require("../index");IW("getUser",OI);var AI={username:!0,active:!0,role:!0,password:!0},dI=new Map,ed=gI.searchByValue,wW=gI.searchByHash,CW=OW(AW.delete);async function LW(e){let t=RI.cleanAttributes(e,AI),r=TI.addUserValidation(t);if(r)throw Ms(new Error,r.message,Ps.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await ed(s),n=n&&Array.from(n)}catch(u){throw de.error("There was an error searching for a role in add user"),de.error(u),u}if(!n||n.length<1)throw Ms(new Error,ta.ROLE_NAME_NOT_FOUND(t.role),Ps.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Ms(new Error,ta.DUP_ROLES_FOUND(t.role),Ps.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=yp.encrypt(t.password)),t.password=Np.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await SI.insert(i)}catch(u){throw de.error("There was an error searching for a user."),de.error(u),u}de.debug(o);try{await ra()}catch(u){throw de.error("Got an error setting users to global"),de.error(u),u}if(o.skipped_hashes.length===1)throw Ms(new Error,ta.USER_ALREADY_EXISTS(t.username),Ps.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],bp.signalUserChange(new Ip(process.pid)),`${c.username} successfully added`}a(LW,"addUser");async function DW(e){let t=RI.cleanAttributes(e,AI);if(Nr.isEmptyOrZeroLength(t.username))throw new Error(EI);if(Nr.isEmptyOrZeroLength(t.password)&&Nr.isEmptyOrZeroLength(t.role)&&Nr.isEmptyOrZeroLength(t.active))throw new Error(fI);if(!Nr.isEmpty(t.password)&&Nr.isEmptyOrZeroLength(t.password.trim()))throw new Error(hI);if(!Nr.isEmpty(t.active)&&!Nr.isBoolean(t.active))throw new Error(pI);let r=UW(t.username);if(!Nr.isEmpty(t.password)&&!Nr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=yp.encrypt(t.password)),t.password=Np.hash(t.password)),t.role==="")throw new Error(mI);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 ed(i)||[])}catch(c){throw de.error("Got an error searching for a role."),de.error(c),c}if(!o||o.length===0){let c=ta.ALTER_USER_ROLE_NOT_FOUND(t.role);throw de.error(c),Ms(new Error,c,Ps.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=ta.ALTER_USER_DUP_ROLES(t.role);throw de.error(c),Ms(new Error,c,Ps.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await SI.update(s)}catch(i){throw de.error("Error during update."),de.error(i),i}try{await ra()}catch(i){throw de.error("Got an error setting users to global"),de.error(i),i}return bp.signalUserChange(new Ip(process.pid)),n}a(DW,"alterUser");function UW(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(UW,"isClusterUser");async function MW(e){try{let t=TI.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Nr.isEmpty(global.hdb_users.get(e.username)))throw Ms(new Error,ta.USER_NOT_EXIST(e.username),Ps.NOT_FOUND,void 0,void 0,!0);let s;try{s=await CW(r)}catch(n){throw de.error("Got an error deleting a user."),de.error(n),n}de.debug(s);try{await ra()}catch(n){throw de.error("Got an error setting users to global."),de.error(n),n}return bp.signalUserChange(new Ip(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(MW,"dropUser");async function PW(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 wW(r)}catch(n){throw de.error("Got an error searching for a role."),de.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw de.error(r),r}return t}a(PW,"userInfo");async function vW(){let e;try{e=await td()}catch(t){throw de.error("Got an error listing users."),de.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(vW,"listUsersExternal");async function td(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await ed(e)}catch(o){throw de.error("Got an error searching for roles."),de.error(o),o}let r={};for(let o of t)r[o.id]=_I.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 ed(s)}catch(o){throw de.error("Got an error searching for users."),de.error(o),o}let i=new Map;for(let o of n)o=_I.cloneDeep(o),o.role=r[o.role],BW(o.role),i.set(o.username,o);return i}catch(e){throw de.error("got an error listing users"),de.error(e),Nr.errorizeMessage(e)}return null}a(td,"listUsers");function BW(e){try{if(!e){de.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(bW)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){de.error("Got an error trying to set system permissions."),de.error(t)}}a(BW,"appendSystemTablesToRole");async function ra(){try{let e=await td();global.hdb_users=e}catch(e){throw de.error(e),e}}a(ra,"setUsersToGlobal");async function OI(e,t,r=!0){global.hdb_users||await ra();let s=global.hdb_users.get(e);if(!s)throw Ms(new Error,Op.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Ms(new Error,Op.USER_INACTIVE,Ps.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(dI.get(t)===s.password)return n;if(Np.validate(s.password,t))dI.set(t,s.password);else throw Ms(new Error,Op.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}return n}a(OI,"findAndValidateUser");async function HW(){global.hdb_users||await ra();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(HW,"getSuperUser");async function qW(){let e=await td(),t=NW.getConfigFromFile(uI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Nr.isEmpty(r)&&r?.role?.role===uI.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=yp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+lI.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+lI.SERVER_SUFFIX.ADMIN,r}a(qW,"getClusterUser")});var Zc=m((pEe,wI)=>{"use strict";var ro=C(),br=R(),FW=sy(),hEe=$r(),mEe=Zn(),GW=er(),{validateEvent:bI}=os(),Xc=Vr(),xW=require("process"),{resetDatabases:kW}=(_e(),re(be)),$W={[br.ITC_EVENT_TYPES.SCHEMA]:VW,[br.ITC_EVENT_TYPES.USER]:II};async function VW(e){let t=bI(e);if(t){ro.error(t);return}ro.trace("ITC schemaHandler received schema event:",e),await FW(e.message),await YW(e.message)}a(VW,"schemaHandler");async function YW(e){try{Xc.resetReadTxn(br.SYSTEM_SCHEMA_NAME,br.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Xc.resetReadTxn(br.SYSTEM_SCHEMA_NAME,br.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Xc.resetReadTxn(br.SYSTEM_SCHEMA_NAME,br.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=kW();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ro.error(t)}}a(YW,"syncSchemaMetadata");var yI=[];async function II(e){try{try{Xc.resetReadTxn(br.SYSTEM_SCHEMA_NAME,br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Xc.resetReadTxn(br.SYSTEM_SCHEMA_NAME,br.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ro.warn(r)}let t=bI(e);if(t){ro.error(t);return}ro.trace(`ITC userHandler ${br.HDB_ITC_CLIENT_PREFIX}${xW.pid} received user event:`,e),await GW.setUsersToGlobal();for(let r of yI)r()}catch(t){ro.error(t)}}a(II,"userHandler");II.addListener=function(e){yI.push(e)};wI.exports=$W});var os=m((OEe,LI)=>{"use strict";var TEe=C(),wp=F(),KW=R(),{ITC_ERRORS:eu}=gr(),{parentPort:gEe,threadId:WW,isMainThread:QW,workerData:REe}=require("worker_threads"),{onMessageFromWorkers:zW,broadcast:AEe,broadcastWithAcknowledgement:JW}=tt();LI.exports={sendItcEvent:jW,validateEvent:CI,SchemaEventMsg:XW,UserEventMsg:ZW};var rd;zW(async(e,t)=>{rd=rd||Zc(),CI(e),rd[e.type]&&await rd[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function jW(e){return!QW&&e.message&&(e.message.originator=WW),JW(e)}a(jW,"sendItcEvent");function CI(e){if(typeof e!="object")return eu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||wp.isEmpty(e.type))return eu.MISSING_TYPE;if(!e.hasOwnProperty("message")||wp.isEmpty(e.message))return eu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||wp.isEmpty(e.message.originator))return eu.MISSING_ORIGIN;if(KW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return eu.INVALID_EVENT(e.type)}a(CI,"validateEvent");function XW(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(XW,"SchemaEventMsg");function ZW(e){this.originator=e}a(ZW,"UserEventMsg")});var Rn=m((yEe,PI)=>{"use strict";var DI=R(),bEe=F(),sd=C(),UI=ey(),sa,{sendItcEvent:MI}=os();function eQ(e){try{sd.trace("signalSchemaChange called with message:",e),sa=sa||Zc();let t=new UI(DI.ITC_EVENT_TYPES.SCHEMA,e);return sa.schema(t),MI(t)}catch(t){sd.error(t)}}a(eQ,"signalSchemaChange");function tQ(e){try{sd.trace("signalUserChange called with message:",e),sa=sa||Zc();let t=new UI(DI.ITC_EVENT_TYPES.USER,e);return sa.user(t),MI(t)}catch(t){sd.error(t)}}a(tQ,"signalUserChange");PI.exports={signalSchemaChange:eQ,signalUserChange:tQ}});var nd=m((wEe,BI)=>{"use strict";var vI=F(),rQ=R(),sQ=C(),nQ=v_(),iQ=P_(),oQ=Rn(),{SchemaEventMsg:aQ}=os(),cQ="already exists in";BI.exports=uQ;async function uQ(e,t,r){if(vI.isEmptyOrZeroLength(r))return r;let s=[];vI.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 lQ(e,t.schema,t.name,i)})),n}a(uQ,"lmdbCheckForNewAttributes");async function lQ(e,t,r,s){let n=new iQ(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await _Q(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(cQ))sQ.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(lQ,"createNewAttribute");async function _Q(e){let t;return t=await nQ(e),oQ.signalSchemaChange(new aQ(process.pid,rQ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(_Q,"createAttribute")});var na=m((LEe,HI)=>{"use strict";var Cp=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}};HI.exports=Cp});var FI=m((UEe,qI)=>{"use strict";var dQ=na(),EQ=R().OPERATIONS_ENUM,Lp=class extends dQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(EQ.INSERT,r,s,n,i),this.records=t}};qI.exports=Lp});var xI=m((PEe,GI)=>{"use strict";var fQ=na(),hQ=R().OPERATIONS_ENUM,Dp=class extends fQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(hQ.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};GI.exports=Dp});var $I=m((BEe,kI)=>{"use strict";var mQ=na(),pQ=R().OPERATIONS_ENUM,Up=class extends mQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(pQ.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};kI.exports=Up});var YI=m((qEe,VI)=>{"use strict";var SQ=na(),TQ=R().OPERATIONS_ENUM,Mp=class extends SQ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(TQ.DELETE,s,n,t,i),this.original_records=r}};VI.exports=Mp});var tu=m((xEe,zI)=>{"use strict";var GEe=require("path"),KI=we(),gQ=FI(),RQ=xI(),AQ=$I(),OQ=YI(),ia=Ge(),WI=F(),{CONFIG_PARAMS:NQ}=R(),QI=Y();QI.initSync();var id=R().OPERATIONS_ENUM,{getTransactionAuditStorePath:bQ}=De();zI.exports=yQ;async function yQ(e,t){if(QI.get(NQ.LOGGING_AUDITLOG)===!1)return;let r=bQ(e.schema,e.table),s=await KI.openEnvironment(r,e.table,!0),n=IQ(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){KI.initializeDBIs(s,ia.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ia.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[ia.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[ia.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),WI.isEmpty(n.user_name)||s.dbis[ia.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[ia.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(yQ,"writeTransaction");function IQ(e,t){let r=WI.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===id.INSERT)return new gQ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===id.UPDATE)return new RQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===id.UPSERT)return new AQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===id.DELETE)return new OQ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(IQ,"createTransactionObject")});var Pp=m((VEe,JI)=>{"use strict";var wQ=$c(),$Ee=Vc(),ru=R(),CQ=Qc(),LQ=Wi().insertRecords,DQ=we(),UQ=C(),MQ=nd(),{getSchemaPath:PQ}=De(),vQ=tu();JI.exports=BQ;async function BQ(e){try{let{schema_table:t,attributes:r}=wQ(e);CQ(e,r,t.hash_attribute),e.schema!==ru.SYSTEM_SCHEMA_NAME&&(r.includes(ru.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ru.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ru.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ru.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await MQ(e.hdb_auth_header,t,r),n=PQ(e.schema,e.table),i=await DQ.openEnvironment(n,e.table),o=await LQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await vQ(e,o)}catch(c){UQ.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(BQ,"lmdbCreateRecords")});var ZI=m((KEe,XI)=>{"use strict";var jI=R(),HQ=Pp(),qQ=Vc(),FQ=require("fs-extra"),{getSchemaPath:GQ}=De();XI.exports=xQ;async function xQ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new qQ(jI.SYSTEM_SCHEMA_NAME,jI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await HQ(r),await FQ.mkdirp(GQ(e.schema))}a(xQ,"lmdbCreateSchema")});var tw=m((QEe,ew)=>{"use strict";var vp=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}};ew.exports=vp});var iw=m((ZEe,nw)=>{"use strict";var rw=we(),Bp=Ht(),Hp=gr().LMDB_ERRORS_ENUM,kQ=Ge(),sw=C(),JEe=F(),$Q=require("lmdb"),VQ=tw(),YQ=R(),{OVERFLOW_MARKER:jEe,MAX_SEARCH_KEY_LENGTH:XEe}=kQ,KQ=YQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function WQ(e,t,r,s){if(Bp.validateEnv(e),t===void 0)throw new Error(Hp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Hp.IDS_REQUIRED):new Error(Hp.IDS_MUST_BE_ITERABLE);try{let n=rw.listDBIs(e);rw.initializeDBIs(e,t,n);let i=new VQ,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[KQ]>s){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,$Q.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let T=0;T<n.length;T++){let A=n[T];if(!h.hasOwnProperty(A)||A===t)continue;let g=e.dbis[A],x=h[A];if(x!=null)try{let V=Bp.getIndexedValues(x);if(V)for(let I=0,b=V.length;I<b;I++)g.remove(V[I],o)}catch{sw.warn(`cannot delete from attribute: ${A}, ${x}:${o}`)}}});c.push(S),u.push(o),i.original_records.push(h)}catch(h){sw.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=Bp.getNextMonotonicTime(),i}catch(n){throw n}}a(WQ,"deleteRecords");nw.exports={deleteRecords:WQ}});var su=m((tfe,aw)=>{"use strict";var oa=F(),QQ=iw(),zQ=we(),{getSchemaPath:JQ}=De(),jQ=tu(),XQ=C();aw.exports=ZQ;async function ZQ(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(oa.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(oa.isEmptyOrZeroLength(e.hash_values)&&!oa.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];oa.isEmpty(u)||e.hash_values.push(u)}}if(oa.isEmptyOrZeroLength(e.hash_values))return ow([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(oa.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=JQ(e.schema,e.table),i=await zQ.openEnvironment(n,e.table),o=await QQ.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await jQ(e,o)}catch(c){XQ.error(`unable to write transaction due to ${c.message}`)}return ow(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(ZQ,"lmdbDeleteRecords");function ow(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(ow,"createDeleteResponse")});var Fp=m((nfe,cw)=>{"use strict";var ez=R(),sfe=Ht();function qp(e,t){let r=Object.create(null);if(t.length===1&&ez.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(qp,"parseRow");function tz(e,t,r,s){let n=qp(r,e);s.push(n)}a(tz,"searchAll");function rz(e,t,r,s){let n=qp(r,e);s[t]=n}a(rz,"searchAllToMap");function sz(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(sz,"iterateDBI");function so(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(so,"pushResults");function nz(e,t,r,s,n,i){t.toString().endsWith(e)&&so(t,r,s,n,i)}a(nz,"endsWith");function iz(e,t,r,s,n,i){t.toString().includes(e)&&so(t,r,s,n,i)}a(iz,"contains");function oz(e,t,r,s,n,i){t>e&&so(t,r,s,n,i)}a(oz,"greaterThanCompare");function az(e,t,r,s,n,i){t>=e&&so(t,r,s,n,i)}a(az,"greaterThanEqualCompare");function cz(e,t,r,s,n,i){t<e&&so(t,r,s,n,i)}a(cz,"lessThanCompare");function uz(e,t,r,s,n,i){t<=e&&so(t,r,s,n,i)}a(uz,"lessThanEqualCompare");cw.exports={parseRow:qp,searchAll:tz,searchAllToMap:rz,iterateDBI:sz,endsWith:nz,contains:iz,greaterThanCompare:oz,greaterThanEqualCompare:az,lessThanCompare:cz,lessThanEqualCompare:uz,pushResults:so}});var aa=m((ufe,hw)=>{"use strict";var ii=we(),ofe=C(),yr=Ht(),od=Ge(),We=gr().LMDB_ERRORS_ENUM,afe=F(),lz=R(),ad=Fp(),{parseRow:_z}=ad,cfe=require("lmdb"),{OVERFLOW_MARKER:uw,MAX_SEARCH_KEY_LENGTH:dz}=od;function lw(e,t,r,s=!1,n=void 0,i=void 0){return no(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(lw,"iterateFullIndex");function nu(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return no(e,t,r,(_,d,E,f)=>{let g={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?(g.values=!1,d.getRange(g).map(x=>({value:x}))):d.getRange(g)})}a(nu,"iterateRangeBetween");function no(e,t,r,s){let n=e.database||e,i=ii.openDBI(n,r);i[od.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ii.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(no,"setupTransaction");function _w(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(uw)){if(!n)if(r)n=ii.openDBI(e,r);else{let u=ii.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=ii.openDBI(e,u[l]),!n[od.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(_w,"getOverflowCheck");function Ez(e,t,r,s=!1,n=void 0,i=void 0){if(yr.validateEnv(e),t===void 0)throw new Error(We.HASH_ATTRIBUTE_REQUIRED);return no(e,t,t,(o,c,u)=>(cd(r),r=iu(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>_z(l.value,r))))}a(Ez,"searchAll");function fz(e,t,r,s=!1,n=void 0,i=void 0){if(yr.validateEnv(e),t===void 0)throw new Error(We.HASH_ATTRIBUTE_REQUIRED);cd(r),r=iu(e.database||e,r);let o=new Map;for(let{key:c,value:u}of lw(e,t,t,s,n,i))o.set(c,ad.parseRow(u,r));return o}a(fz,"searchAllToMap");function hz(e,t,r=!1,s=void 0,n=void 0){if(yr.validateEnv(e),t===void 0)throw new Error(We.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=lw(e,void 0,t,r,s,n),c=o.transaction,u=_w(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(hz,"iterateDBI");function mz(e,t){if(yr.validateEnv(e),t===void 0)throw new Error(We.HASH_ATTRIBUTE_REQUIRED);return ii.statDBI(e,t).entryCount}a(mz,"countAll");function pz(e,t,r,s,n=!1,i=void 0,o=void 0){return oi(e,r,s),no(e,t,r,(c,u,l,_)=>(s=yr.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(pz,"equals");function Sz(e,t,r){return oi(e,t,r),ii.openDBI(e,t).getValuesCount(r)}a(Sz,"count");function Tz(e,t,r,s,n=!1,i=void 0,o=void 0){return oi(e,r,s),no(e,null,r,(c,u)=>{s=yr.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(Tz,"startsWith");function gz(e,t,r,s,n=!1,i=void 0,o=void 0){return dw(e,t,r,s,n,i,o,!0)}a(gz,"endsWith");function dw(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return oi(e,r,s),no(e,null,r,(u,l,_,d)=>{let E=_w(_,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(uw)?l.getValues(f,{transaction:u}).map(S=>{let T=E(f,S);if(c?T.endsWith(s):T.includes(s))return{key:T,value:S}}).filter(S=>S):(c?h.endsWith(s):h.includes(s))?l[od.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(S=>({key:f,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(dw,"contains");function Rz(e,t,r,s,n=!1,i=void 0,o=void 0){oi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),nu(e,t,r,s,u,n,i,o,!0,!1)}a(Rz,"greaterThan");function Az(e,t,r,s,n=!1,i=void 0,o=void 0){oi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),nu(e,t,r,s,u,n,i,o,!1,!1)}a(Az,"greaterThanEqual");function Oz(e,t,r,s,n=!1,i=void 0,o=void 0){oi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),nu(e,t,r,u,s,n,i,o,!1,!0)}a(Oz,"lessThan");function Nz(e,t,r,s,n=!1,i=void 0,o=void 0){oi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),nu(e,t,r,u,s,n,i,o,!1,!1)}a(Nz,"lessThanEqual");function bz(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(yr.validateEnv(e),r===void 0)throw new Error(We.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(We.START_VALUE_REQUIRED);if(n===void 0)throw new Error(We.END_VALUE_REQUIRED);if(s=yr.convertKeyValueToWrite(s),n=yr.convertKeyValueToWrite(n),s>n)throw new Error(We.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return nu(e,t,r,s,n,i,o,c)}a(bz,"between");function yz(e,t,r,s){yr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(We.HASH_ATTRIBUTE_REQUIRED);if(cd(r),r=iu(n,r),s===void 0)throw new Error(We.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=ad.parseRow(c,r)),o}a(yz,"searchByHash");function Iz(e,t,r){yr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(We.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(We.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(Iz,"checkHashExists");function wz(e,t,r,s,n=[]){return fw(e,t,r,s,n),Ew(e,t,r,s,n).map(i=>i[1])}a(wz,"batchSearchByHash");function Cz(e,t,r,s,n=[]){fw(e,t,r,s,n);let i=new Map;for(let[o,c]of Ew(e,t,r,s,n))i.set(o,c);return i}a(Cz,"batchSearchByHashToMap");function Ew(e,t,r,s,n=[]){return no(e,t,t,(i,o,c)=>{r=iu(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,ad.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(Ew,"batchHashSearch");function fw(e,t,r,s,n){if(yr.validateEnv(e),t===void 0)throw new Error(We.HASH_ATTRIBUTE_REQUIRED);if(cd(r),s==null)throw new Error(We.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(We.IDS_MUST_BE_ITERABLE)}a(fw,"initializeBatchSearchByHash");function cd(e){if(!Array.isArray(e))throw e===void 0?new Error(We.FETCH_ATTRIBUTES_REQUIRED):new Error(We.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(cd,"validateFetchAttributes");function oi(e,t,r){if(yr.validateEnv(e),t===void 0)throw new Error(We.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(We.SEARCH_VALUE_REQUIRED);if(r?.length>dz)throw new Error(We.SEARCH_VALUE_TOO_LARGE)}a(oi,"validateComparisonFunctions");function iu(e,t){return t.length===1&&lz.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ii.listDBIs(e)),t}a(iu,"setGetWholeRowAttributes");hw.exports={searchAll:Ez,searchAllToMap:fz,count:Sz,countAll:mz,equals:pz,startsWith:Tz,endsWith:gz,contains:dw,searchByHash:yz,setGetWholeRowAttributes:iu,batchSearchByHash:wz,batchSearchByHashToMap:Cz,checkHashExists:Iz,iterateDBI:hz,greaterThan:Rz,greaterThanEqual:Az,lessThan:Oz,lessThanEqual:Nz,between:bz}});var ca=m((_fe,gw)=>{var mw=require("lodash"),pw=He(),Pe=require("joi"),Lz=F(),{hdb_schema_table:ud,checkValidTable:Sw,hdb_table:Tw,hdb_database:ld}=Ds(),{handleHDBError:Dz,hdb_errors:Uz}=z(),{getDatabases:Mz}=(_e(),re(be)),{HTTP_STATUS_CODES:Pz}=Uz,vz=Pe.object({database:ld,schema:ld,table:Tw,search_attribute:ud,search_value:Pe.any().required(),get_attributes:Pe.array().min(1).items(ud).optional(),desc:Pe.bool(),limit:Pe.number().integer().min(1),offset:Pe.number().integer().min(0)}),Bz=Pe.object({database:ld,schema:ld,table:Tw,operator:Pe.string().valid("and","or").default("and").lowercase(),offset:Pe.number().integer().min(0),limit:Pe.number().integer().min(1),get_attributes:Pe.array().min(1).items(ud).optional(),conditions:Pe.array().min(1).items(Pe.object({search_attribute:ud,search_type:Pe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:Pe.when("search_type",{switch:[{is:"equals",then:Pe.any()},{is:"between",then:Pe.array().items(Pe.alternatives([Pe.string(),Pe.number()])).length(2)}],otherwise:Pe.alternatives(Pe.string(),Pe.number())}).required()})).required()});gw.exports=function(e,t){let r=null;switch(t){case"value":r=pw.validateBySchema(e,vz);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Sw("database",e.schema)),i(Sw("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=pw.validateBySchema(e,Bz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=Lz.checkGlobalSchemaTable(e.schema,e.table);if(n)return Dz(new Error,n,Pz.NOT_FOUND);let o=Mz()[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=mw.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!mw.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 Gp=m((Efe,Rw)=>{"use strict";var Hz=we(),qz=ca(),{getSchemaPath:Fz}=De();Rw.exports=Gz;function Gz(e){let t=qz(e,"hashes");if(t)throw t;let r=Fz(e.schema,e.table);return Hz.openEnvironment(r,e.table)}a(Gz,"initialize")});var xp=m((hfe,Aw)=>{"use strict";var xz=aa(),kz=Gp();Aw.exports=$z;async function $z(e){let t=await kz(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return xz.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a($z,"lmdbGetDataByHash")});var ua=m((pfe,Ow)=>{"use strict";var kp=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};Ow.exports=kp});var bw=m((gfe,Nw)=>{"use strict";var Tfe=ua(),Vz=aa(),Yz=Gp();Nw.exports=Kz;async function Kz(e){let t=await Yz(e),r=global.hdb_schema[e.schema][e.table];return Vz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Kz,"lmdbSearchByHash")});var as=m((Afe,yw)=>{"use strict";var $p=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=_}};yw.exports=$p});var _d=m((Nfe,Uw)=>{"use strict";var Gt=aa(),Wz=we(),Qz=F(),ae=Ge(),io=R(),zz=En(),Iw=gr().LMDB_ERRORS_ENUM,{getSchemaPath:Jz}=De(),An=io.SEARCH_WILDCARDS;async function jz(e,t,r){let s;e.schema===io.SYSTEM_SCHEMA_NAME?s=zz[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Dw(e,s.hash_attribute,r,t);return Cw(e,n,s.hash_attribute,r)}a(jz,"prepSearch");async function Cw(e,t,r,s){let n=Jz(e.schema,e.table),i=await Wz.openEnvironment(n,e.table),o=Lw(i,e,t,r),c=o.transaction||i;if([ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ae.SEARCH_TYPES.SEARCH_ALL,ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Xz(e,r)===!1){let _=e.search_attribute;if(_===r)return s?ww(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?ww(o,d):o.map(d)}let l=e.search_attribute===r?o.map(_=>_.key):o.map(_=>_.value);return s===!0?Gt.batchSearchByHashToMap(c,r,e.get_attributes,l):Gt.batchSearchByHash(c,r,e.get_attributes,l)}a(Cw,"executeSearch");function Lw(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case ae.SEARCH_TYPES.EQUALS:n=Gt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.CONTAINS:n=Gt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.ENDS_WITH:case ae.SEARCH_TYPES._ENDS_WITH:n=Gt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.STARTS_WITH:case ae.SEARCH_TYPES._STARTS_WITH:n=Gt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Gt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Gt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.SEARCH_ALL:return Gt.searchAll(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Gt.searchAllToMap(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.BETWEEN:n=Gt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN:case ae.SEARCH_TYPES._GREATER_THAN:n=Gt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN_EQUAL:case ae.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Gt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.LESS_THAN:case ae.SEARCH_TYPES._LESS_THAN:n=Gt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.LESS_THAN_EQUAL:case ae.SEARCH_TYPES._LESS_THAN_EQUAL:n=Gt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Lw,"searchByType");function ww(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(ww,"createMapFromIterable");function Xz(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(Xz,"checkToFetchMore");function Dw(e,t,r,s){if(Qz.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),An.indexOf(n)>-1)return r===!0?ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ae.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(An[0])<0&&n.indexOf(An[1])<0)return c===!0?r===!0?ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ae.SEARCH_TYPES.EQUALS;if(An.indexOf(i)>=0&&An.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ae.SEARCH_TYPES.CONTAINS;if(An.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ae.SEARCH_TYPES.ENDS_WITH;if(An.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ae.SEARCH_TYPES.STARTS_WITH;if(n.includes(An[0])||n.includes(An[1]))return ae.SEARCH_TYPES.EQUALS;throw new Error(Iw.UNKNOWN_SEARCH_TYPE)}else switch(s){case io.VALUE_SEARCH_COMPARATORS.BETWEEN:return ae.SEARCH_TYPES.BETWEEN;case io.VALUE_SEARCH_COMPARATORS.GREATER:return ae.SEARCH_TYPES.GREATER_THAN;case io.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ae.SEARCH_TYPES.GREATER_THAN_EQUAL;case io.VALUE_SEARCH_COMPARATORS.LESS:return ae.SEARCH_TYPES.LESS_THAN;case io.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ae.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Iw.UNKNOWN_SEARCH_TYPE)}}a(Dw,"createSearchTypeFromSearchObject");Uw.exports={executeSearch:Cw,createSearchTypeFromSearchObject:Dw,prepSearch:jz,searchByType:Lw}});var Pw=m((Ife,Mw)=>{"use strict";var yfe=as(),Zz=ca(),eJ=F(),tJ=R(),rJ=_d();Mw.exports=sJ;function sJ(e,t){if(!eJ.isEmpty(t)&&tJ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Zz(e,"value");if(s)throw s;let n=!0;return rJ.prepSearch(e,t,n)}a(sJ,"lmdbGetDataByValue")});var ou=m((Lfe,vw)=>{"use strict";var Cfe=as(),nJ=ca(),iJ=F(),oJ=R(),aJ=_d();vw.exports=cJ;async function cJ(e,t){if(!iJ.isEmpty(t)&&oJ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=nJ(e,"value");if(s)throw s;return aJ.prepSearch(e,t,!1)}a(cJ,"lmdbSearchByValue")});var Hw=m((Mfe,Bw)=>{"use strict";var Ufe=Ge(),Vp=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}},Yp=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Kp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Bw.exports={SearchByConditionsObject:Vp,SearchCondition:Yp,SortAttribute:Kp}});var kw=m((Hfe,xw)=>{"use strict";var vfe=Hw().SearchByConditionsObject,uJ=as(),lJ=ca(),Wp=aa(),dd=Ge(),{Resource:Bfe}=(Is(),re(om)),Gw=_d(),_J=Fp(),dJ=require("lodash"),{getSchemaPath:EJ}=De(),qw=we(),{handleHDBError:fJ,hdb_errors:hJ}=z(),{HTTP_STATUS_CODES:mJ}=hJ,pJ=1e8;xw.exports=SJ;async function SJ(e){let t=lJ(e,"conditions");if(t)throw fJ(t,t.message,mJ.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=EJ(e.schema,e.table),s=await qw.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)qw.openDBI(s,l.search_attribute);let i=dJ.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===dd.SEARCH_TYPES.EQUALS?l.estimated_count=Wp.count(s,l.search_attribute,l.search_value):_===dd.SEARCH_TYPES.CONTAINS||_===dd.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=pJ}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Fw(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(Gw.filterByType),d=_.length,E=Wp.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=>_J.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await Fw(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=Wp.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(SJ,"lmdbSearchByConditions");async function Fw(e,t,r,s){let n=new uJ(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===dd.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Gw.searchByType(e,n,i,s).map(o=>o.value)}a(Fw,"executeConditionSearch")});var au=m((Ffe,$w)=>{"use strict";var TJ=R().OPERATIONS_ENUM,Qp=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=TJ.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};$w.exports=Qp});var zp=m((xfe,jw)=>{"use strict";var Ww=as(),Qw=au(),zw=ou(),Jw=su(),tr=R(),Vw=F(),Yw=we(),{getTransactionAuditStorePath:gJ,getSchemaPath:RJ}=De(),Kw=C();jw.exports=AJ;async function AJ(e){try{if(Vw.isEmpty(global.hdb_schema[e.schema])||Vw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await OJ(e),await NJ(e);let t=RJ(e.schema,e.table);try{await Yw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Kw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=gJ(e.schema,e.table);await Yw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Kw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(AJ,"lmdbDropTable");async function OJ(e){let t=new Ww(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await zw(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 Qw(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Jw(n)}a(OJ,"deleteAttributesFromSystem");async function NJ(e){let t=new Ww(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await zw(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 Qw(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Jw(n)}catch(i){throw i}}a(NJ,"dropTableFromSystem")});var Zw=m(($fe,Xw)=>{"use strict";var bJ=require("fs-extra"),yJ=as(),IJ=ua(),wJ=au(),CJ=zp(),LJ=su(),DJ=xp(),UJ=ou(),On=R(),{getSchemaPath:MJ}=De(),{handleHDBError:PJ,hdb_errors:vJ}=z(),{HDB_ERROR_MSGS:BJ,HTTP_STATUS_CODES:HJ}=vJ;Xw.exports=qJ;async function qJ(e){let t;try{t=await FJ(e.schema);let r=new yJ(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await UJ(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await CJ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new wJ(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await LJ(n);let i=MJ(t);await bJ.remove(i)}catch(r){throw r}}a(qJ,"lmdbDropSchema");async function FJ(e){let t=new IJ(On.SYSTEM_SCHEMA_NAME,On.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[On.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await DJ(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw PJ(new Error,BJ.SCHEMA_NOT_FOUND(e),HJ.NOT_FOUND,void 0,void 0,!0);return s}a(FJ,"validateDropSchema")});var cu=m((Yfe,eC)=>{"use strict";var Jp=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};eC.exports=Jp});var Xp=m((Qfe,tC)=>{"use strict";var GJ=require("fs-extra"),Ed=we(),{getTransactionAuditStorePath:xJ}=De(),jp=Ge(),Wfe=cu();tC.exports=kJ;async function kJ(e){let t;try{let r=xJ(e.schema,e.table);await GJ.mkdirp(r),t=await Ed.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{Ed.createDBI(t,jp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Ed.createDBI(t,jp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Ed.createDBI(t,jp.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(kJ,"createTransactionsAuditEnvironment")});var iC=m((Jfe,nC)=>{"use strict";var Zp=R(),rC=we(),$J=Wi(),{getSystemSchemaPath:VJ,getSchemaPath:YJ}=De(),KJ=En(),WJ=v_(),eS=P_(),QJ=C(),zJ=Xp(),rS=KJ.hdb_table,sC=[];for(let e=0;e<rS.attributes.length;e++)sC.push(rS.attributes[e].attribute);nC.exports=JJ;async function JJ(e,t){let r=YJ(t.schema,t.table),s=new eS(t.schema,t.table,Zp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new eS(t.schema,t.table,Zp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new eS(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await rC.createEnvironment(r,t.table),e!==void 0){let o=await rC.openEnvironment(VJ(),Zp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await $J.insertRecords(o,rS.hash_attribute,sC,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await tS(s),await tS(n),await tS(i)}await zJ(t)}catch(o){throw o}}a(JJ,"lmdbCreateTable");async function tS(e){try{await WJ(e)}catch(t){QJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(tS,"createAttribute")});var aC=m((Xfe,oC)=>{"use strict";var jJ=$c(),XJ=Qc(),ZJ=nd(),uu=R(),ej=Wi().updateRecords,tj=we(),{getSchemaPath:rj}=De(),sj=tu(),nj=C();oC.exports=ij;async function ij(e){try{let{schema_table:t,attributes:r}=jJ(e);XJ(e,r,t.hash_attribute),e.schema!==uu.SYSTEM_SCHEMA_NAME&&(r.includes(uu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(uu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(uu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(uu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await ZJ(e.hdb_auth_header,t,r),n=rj(e.schema,e.table),i=await tj.openEnvironment(n,e.table),o=await ej(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await sj(e,o)}catch(c){nj.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(ij,"lmdbUpdateRecords")});var uC=m((ehe,cC)=>{"use strict";var oj=R().OPERATIONS_ENUM,sS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=oj.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};cC.exports=sS});var _C=m((she,lC)=>{"use strict";var rhe=uC(),aj=$c(),cj=Qc(),uj=nd(),lu=R(),lj=Wi().upsertRecords,_j=we(),{getSchemaPath:dj}=De(),Ej=tu(),fj=C(),{handleHDBError:hj,hdb_errors:mj}=z();lC.exports=pj;async function pj(e){let t;try{t=aj(e)}catch(u){throw hj(u,u.message,mj.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;cj(e,s,r.hash_attribute),e.schema!==lu.SYSTEM_SCHEMA_NAME&&(s.includes(lu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(lu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(lu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(lu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await uj(e.hdb_auth_header,r,s),i=dj(e.schema,e.table),o=await _j.openEnvironment(i,e.table),c=await lj(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await Ej(e,c)}catch(u){fj.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(pj,"lmdbUpsertRecords")});var EC=m((ihe,dC)=>{"use strict";var nS=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};dC.exports=nS});var hC=m((ahe,fC)=>{"use strict";var iS=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}};fC.exports=iS});var SC=m((lhe,pC)=>{"use strict";var oS=we(),{getTransactionAuditStorePath:Sj}=De(),uhe=EC(),_u=Ge(),Tj=F(),mC=hC(),gj=require("util").promisify,Rj=gj(setTimeout),Aj=1e4,Oj=100;pC.exports=Nj;async function Nj(e){let t=Sj(e.schema,e.table),r=await oS.openEnvironment(t,e.table,!0),s=oS.listDBIs(r);oS.initializeDBIs(r,_u.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new mC;do n=await bj(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 Rj(Oj);while(n.transactions_deleted>0);return i}a(Nj,"deleteAuditLogsBefore");async function bj(e,t){let r=new mC;try{let s=e.dbis[_u.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[_u.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Tj.isEmpty(c)||(n=e.dbis[_u.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[_u.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Aj)break}return await n,r}catch(s){throw s}}a(bj,"deleteTransactions")});var gC=m((dhe,TC)=>{"use strict";var aS=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};TC.exports=aS});var AC=m((hhe,RC)=>{"use strict";var yj=as(),Ij=au(),fhe=gC(),vs=R(),wj=F(),cS=we(),Cj=En(),Lj=ou(),Dj=su(),{getSchemaPath:Uj}=De();RC.exports=Mj;async function Mj(e,t=!0){let r;e.schema===vs.SYSTEM_SCHEMA_NAME?r=Cj[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await vj(e),n=Uj(e.schema,e.table),i=await cS.openEnvironment(n,e.table);return t===!0&&await Pj(e,i,r.hash_attribute),cS.dropDBI(i,e.attribute),s}a(Mj,"lmdbDropAttribute");async function Pj(e,t,r){let s=cS.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(Pj,"removeAttributeFromAllObjects");async function vj(e){let t=new yj(vs.SYSTEM_SCHEMA_NAME,vs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await Lj(t)).filter(o=>o[vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(wj.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Ij(vs.SYSTEM_SCHEMA_NAME,vs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return Dj(i)}a(vj,"dropAttributeFromSystem")});var wC=m((She,IC)=>{"use strict";var uS=we(),la=Ge(),phe=Ht(),lS=R(),OC=F(),{getTransactionAuditStorePath:Bj}=De(),Hj=aa(),fd=na(),qj=C();IC.exports=Fj;async function Fj(e){let t=Bj(e.schema,e.table),r=await uS.openEnvironment(t,e.table,!0),s=uS.listDBIs(r);uS.initializeDBIs(r,la.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case lS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return NC(r,e.search_values);case lS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,xj(r,e.search_values,n);case lS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Gj(r,e.search_values);default:return NC(r)}}a(Fj,"readAuditLog");function NC(e,t=[0,Date.now()]){OC.isEmpty(t[0])&&(t[0]=0),OC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[la.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 fd,n))}a(NC,"searchTransactionsByTimestamp");function Gj(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[la.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,yC(e,i))}return Object.fromEntries(r)}a(Gj,"searchTransactionsByUsername");function xj(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=Hj.equals(e,la.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,la.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=yC(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);bC(u,"records",r,_,o),bC(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(xj,"searchTransactionsByHashValues");function bC(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 fd(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new fd(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(bC,"loopRecords");function yC(e,t){let r=[];try{let s=e.dbis[la.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 fd,i);r.push(o)}}catch(i){qj.warn(i)}return r}catch(s){throw s}}a(yC,"batchSearchTransactions")});var LC=m((Ahe,CC)=>{"use strict";var{getSchemaPath:ghe}=De(),Rhe=we(),{database:kj}=(_e(),re(be));CC.exports={writeTransaction:$j};async function $j(e,t,r){return kj({database:e,table:t}).transaction(r)}a($j,"writeTransaction")});var PC=m((Nhe,MC)=>{"use strict";var{getSchemaPath:DC}=De(),UC=we();MC.exports={flush:Vj,resetReadTxn:Yj};async function Vj(e,t){return(await UC.openEnvironment(DC(e,t),t.toString())).flushed}a(Vj,"flush");async function Yj(e,t){try{(await UC.openEnvironment(DC(e,t),t.toString())).resetReadTxn()}catch{}}a(Yj,"resetReadTxn")});var qC=m((yhe,HC)=>{"use strict";var{Readable:Kj}=require("stream"),{getDatabases:Wj}=(_e(),re(be)),{readSync:Qj,openSync:zj,createReadStream:vC}=require("fs"),{open:Jj}=require("lmdb"),BC=N_(),jj=y_(),{INTERNAL_DBIS_NAME:Xj}=Ge();HC.exports=e2;var _S=32768,Zj=100;async function e2(e){let t=e.database||e.schema||"data",r=Wj()[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=Jj({noSync:!0,maxDbs:jj.MAX_DBS}),E,f=d.openDB(Xj,new BC(!1)),h=_.useReadTransaction(),S=0;for(let{key:A,value:g}of _.getRange({transaction:h,start:!1}))if(n.some(x=>A.startsWith?.(x+"/"))){f.put(A,g);let[,x]=A.split("/"),V=!x,I=new BC(!V,V);I.encoding="binary";let b=d.openDB(A,I),M=_.openDB(A,I);for(let{key:J,version:B,value:Ie}of M.getRange({transaction:h,versions:V}))E=b.put(J,Ie,B),S++%Zj===0&&await new Promise(_t=>setTimeout(_t,20))}await E;let T=vC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=zj(o.path);return o.transaction(()=>{let l=Buffer.alloc(_S);Qj(c,l,0,_S);let _=o.useReadTransaction(),d=vC(null,{fd:c,start:_S}),E=new Kj.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(e2,"getBackup")});var xC=m((whe,GC)=>{"use strict";var t2=C(),{handleHDBError:r2}=z(),s2=ab(),n2=v_(),i2=Pp(),o2=ZI(),a2=su(),c2=xp(),u2=bw(),l2=Pw(),_2=ou(),d2=kw(),E2=Zw(),f2=iC(),h2=aC(),m2=_C(),p2=SC(),S2=zp(),T2=AC(),g2=wC(),R2=LC(),FC=PC(),A2=qC(),dS=class extends s2{static{a(this,"LMDBBridge")}async searchByConditions(t){return d2(t)}async getDataByHash(t){return await c2(t)}async searchByHash(t){return await u2(t)}async getDataByValue(t,r){return await l2(t,r)}async searchByValue(t){return await _2(t)}async createSchema(t){return await o2(t)}async dropSchema(t){return await E2(t)}async createTable(t,r){return await f2(t,r)}async dropTable(t){return await S2(t)}async createAttribute(t){return await n2(t)}async createRecords(t){return await i2(t)}async updateRecords(t){return await h2(t)}async upsertRecords(t){try{return await m2(t)}catch(r){throw r2(r,null,null,t2.ERR,r)}}async deleteRecords(t){return await a2(t)}async dropAttribute(t){return await T2(t)}async deleteAuditLogsBefore(t){return await p2(t)}async readAuditLog(t){return await g2(t)}writeTransaction(t,r,s){return R2.writeTransaction(t,r,s)}flush(t,r){return FC.flush(t,r)}resetReadTxn(t,r){return FC.resetReadTxn(t,r)}getBackup(t){return A2(t)}};GC.exports=dS});var JC={};Ke(JC,{ResourceBridge:()=>hS});function mS({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 $C(e,t){let r=Bs(e),s=mS(e,r);if(!r)throw new cs.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 Xe(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&&p_(u),t?yield{key:c,value:u}:yield u}})}function Bs(e){let t=e.database||e.schema||N2,r=us()[t];if(!r)throw(0,cs.handleHDBError)(new Error,O2.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function VC(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*YC(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 KC,hd,cs,WC,QC,ls,ES,fS,zC,O2,N2,b2,y2,kC,hS,jC=Te(()=>{"use strict";KC=D(xC()),hd=D(ca()),cs=D(z());_e();WC=D($c()),QC=D(Qc()),ls=D(R()),ES=D(Rn()),fS=D(os()),zC=D(F());Yi();S_();({HDB_ERROR_MSGS:O2}=cs.hdb_errors),N2="data",b2=1e4,y2=10,hS=class extends KC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),kC=this}async searchByConditions(t){let r=(0,hd.default)(t,"conditions");if(r)throw(0,cs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=Bs(t);if(!s)throw new cs.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:mS(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 cs.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}]}ft({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await Bs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Bs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(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){Bs(t).dropTable()}createSchema(t){return du({database:t.schema,table:null}),ES.signalSchemaChange(new fS.SchemaEventMsg(process.pid,ls.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await pS(t.schema),ES.signalSchemaChange(new fS.SchemaEventMsg(process.pid,ls.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,kC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,WC.default)(t);(0,QC.default)(t,s,r.primaryKey);let n,i=us()[t.schema][t.table],o={user:t.hdb_user};return Xe(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=p_(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=us()[t.schema][t.table],s={user:t.hdb_user};return Xe(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 VC(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=us()[t.schema][t.table];if(!r.createdTimeProperty)throw new cs.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:ls.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,zC.async_set_timeout)(y2),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%b2===0&&await l();return u.length>0&&await l(),n?VC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,hd.default)(t,"hashes");if(r)throw r;return $C(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of $C(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&ls.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,hd.default)(t,"value");if(s)throw s;let n=Bs(t);if(!n)throw new cs.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===ls.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:mS(t,n)})}async getDataByValue(t,r){let s=new Map,n=Bs(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){Bs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Bs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Bs(t),s={};switch(t.search_type){case ls.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 ls.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of YC(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return YC(r,t.search_values?.[0],t.search_values?.[1])}}};a(mS,"getSelect");a($C,"getRecords");a(Bs,"getTable");a(VC,"createDeleteResponse");a(YC,"groupRecordsInHistory")});var Vr=m((Phe,XC)=>{"use strict";var{ResourceBridge:I2}=(jC(),re(JC)),w2=Y();w2.initSync();var md;function C2(){return md||(md=new I2,md)}a(C2,"getBridge");XC.exports=C2()});var rL=m((Bhe,tL)=>{"use strict";var ZC=require("lodash"),Eu=require("mathjs"),L2=require("jsonata"),eL=F();tL.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?ZC.uniqWith(e,ZC.isEqual):e,searchJSON:D2,mad:fu.bind(null,Eu.mad),mean:fu.bind(null,Eu.mean),mode:fu.bind(null,Eu.mode),prod:fu.bind(null,Eu.prod),median:fu.bind(null,Eu.median)};function fu(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(fu,"aggregateFunction");function D2(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(eL.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),eL.isEmpty(this.__ala__.res[r])){let s=L2(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(D2,"searchJSON")});var nL=m((qhe,sL)=>{"use strict";var rt=require("moment"),SS="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;sL.exports={current_date:()=>rt().utc().format("YYYY-MM-DD"),current_time:()=>rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return rt(e).utc().format("YYYY");case"month":return rt(e).utc().format("MM");case"day":return rt(e).utc().format("DD");case"hour":return rt(e).utc().format("HH");case"minute":return rt(e).utc().format("mm");case"second":return rt(e).utc().format("ss");case"millisecond":return rt(e).utc().format("SSS");default:break}},date:e=>rt(e).utc().format(SS),date_format:(e,t)=>rt(e).utc().format(t),date_add:(e,t,r)=>rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=rt(e).utc(),n=rt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>rt().utc().valueOf(),get_server_time:()=>rt().format(SS),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(SS)}});var cL=m((Fhe,aL)=>{"use strict";var U2=require("@turf/area"),M2=require("@turf/length"),P2=require("@turf/circle"),v2=require("@turf/difference"),B2=require("@turf/distance"),H2=require("@turf/boolean-contains"),q2=require("@turf/boolean-equal"),F2=require("@turf/boolean-disjoint"),G2=require("@turf/helpers"),iL=R(),Ee=F();aL.exports={geoArea:x2,geoLength:k2,geoCircle:$2,geoDifference:V2,geoDistance:oL,geoNear:Y2,geoContains:K2,geoEqual:W2,geoCrosses:Q2,geoConvert:z2};var TS="geo1 is required",gS="geo2 is required";function x2(e){if(Ee.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=Ee.autoCastJSON(e)),U2.default(e)}a(x2,"geoArea");function k2(e,t){if(Ee.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=Ee.autoCastJSON(e)),M2.default(e,{units:t||"kilometers"})}a(k2,"geoLength");function $2(e,t,r){if(Ee.isEmpty(e))throw new Error("point is required");if(Ee.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=Ee.autoCastJSON(e)),P2.default(e,t,{units:r||"kilometers"})}a($2,"geoCircle");function V2(e,t){if(Ee.isEmpty(e))throw new Error("poly1 is required");if(Ee.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),v2(e,t)}a(V2,"geoDifference");function oL(e,t,r){if(Ee.isEmpty(e))throw new Error("point1 is required");if(Ee.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),B2.default(e,t,{units:r||"kilometers"})}a(oL,"geoDistance");function Y2(e,t,r,s){if(Ee.isEmpty(e))throw new Error("point1 is required");if(Ee.isEmpty(t))throw new Error("point2 is required");if(Ee.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return oL(e,t,s)<=r}a(Y2,"geoNear");function K2(e,t){if(Ee.isEmpty(e))throw new Error(TS);if(Ee.isEmpty(e))throw new Error(gS);return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),H2.default(e,t)}a(K2,"geoContains");function W2(e,t){if(Ee.isEmpty(e))throw new Error(TS);if(Ee.isEmpty(e))throw new Error(gS);return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),q2.default(e,t)}a(W2,"geoEqual");function Q2(e,t){if(Ee.isEmpty(e))throw new Error(TS);if(Ee.isEmpty(e))throw new Error(gS);return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),!F2.default(e,t)}a(Q2,"geoCrosses");function z2(e,t,r){if(Ee.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ee.isEmpty(t))throw new Error("geo_type is required");if(Ee.isEmpty(iL.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(iL.GEO_CONVERSION_ENUM).join(",")}`);return G2[t](e,r)}a(z2,"geoConvert")});var pd=m((xhe,uL)=>{var oo=rL(),Ir=nL(),Hs=cL();uL.exports=e=>{e.aggr.mad=e.aggr.MAD=oo.mad,e.aggr.mean=e.aggr.MEAN=oo.mean,e.aggr.mode=e.aggr.MODE=oo.mode,e.aggr.prod=e.aggr.PROD=oo.prod,e.aggr.median=e.aggr.MEDIAN=oo.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=oo.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=oo.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Ir.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Ir.current_time,e.fn.extract=e.fn.EXTRACT=Ir.extract,e.fn.date=e.fn.DATE=Ir.date,e.fn.date_format=e.fn.DATE_FORMAT=Ir.date_format,e.fn.date_add=e.fn.DATE_ADD=Ir.date_add,e.fn.date_sub=e.fn.DATE_SUB=Ir.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Ir.date_diff,e.fn.now=e.fn.NOW=Ir.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Ir.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Ir.get_server_time,e.fn.getdate=e.fn.GETDATE=Ir.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Ir.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Hs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Hs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Hs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Hs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Hs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Hs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Hs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Hs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Hs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Hs.geoNear}});var EL=m((khe,dL)=>{"use strict";var hu=require("lodash"),wt=require("alasql");wt.options.cache=!1;var J2=pd(),lL=require("clone"),Sd=require("recursive-iterator"),ie=C(),oe=F(),_a=Vr(),j2=R(),{hdb_errors:X2}=z(),{getDatabases:_L}=(_e(),re(be)),Z2="IS NULL",_s="There was a problem performing this search. Please check the logs and try again.";J2(wt);var RS=class{static{a(this,"SQLSearch")}constructor(t,r){if(oe.isEmpty(t))throw ie.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(),oe.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!oe.isEmptyOrZeroLength(s))return ie.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw ie.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ie.error(s),new Error(_s)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw ie.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ie.error(s),new Error(_s)}if(Object.keys(this.data).length===0)return ie.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw ie.error("Error thrown from processJoins in SQLSearch class method search."),ie.error(s),new Error(_s)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw ie.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ie.error(s),new Error(_s)}try{return t=await this._finalSQL(),t}catch(s){throw ie.error("Error thrown from finalSQL in SQLSearch class method search."),ie.error(s),new Error(_s)}}_getColumns(){let t=new Sd(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(lL(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=hu.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=_L()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(oe.isEmpty(this.statement.where)){ie.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Sd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!oe.isEmpty(r)&&r.right)if(oe.isNotEmptyAndHasValue(r.right.value)){let s=oe.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new wt.yy.LogicValue({value:s}):r.right instanceof wt.yy.StringValue&&!oe.isEmpty(s)&&oe.autoCasterIsNumberCheck(s.toString())&&(r.right=new wt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=oe.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new wt.yy.LogicValue({value:i}):s instanceof wt.yy.StringValue&&oe.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new wt.yy.NumValue({value:i}))});if(t){ie.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Sd(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(!oe.isEmpty(j2.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(oe.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(oe.isEmptyOrZeroLength(r.left.columnid)||oe.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(oe.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"=":!oe.isEmpty(r.right.value)||!oe.isEmpty(r.left.value)?s.add(oe.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(oe.isEmptyOrZeroLength(this.all_table_attributes)&&oe.isEmptyOrZeroLength(this.statement.from)&&oe.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&&hu.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(oe.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);oe.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(oe.isEmptyOrZeroLength(this.all_table_attributes)&&!oe.isEmptyOrZeroLength(this.columns.columns))return t;if(oe.isEmptyOrZeroLength(this.all_table_attributes)&&oe.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await wt.promise(r)}catch(r){throw ie.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ie.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(lL(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(oe.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(Z2)>-1&&this.tables.forEach(n=>{let i={columnid:_L()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=hu.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),!oe.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!oe.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await _a.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 ie.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ie.error(_),new Error(_s)}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 _a.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,oe.autoCast(f)))}))}catch(_){throw ie.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ie.error(_),new Error(_s)}else if(!oe.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!oe.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 _a.getDataByValue(c,f.operation);if(u)for(let[S]of h)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...s[i]],this._setMergedHashAttribute(i,oe.autoCast(S)));else for(let[S,T]of h)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,T[n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,T[n.attribute]),this._setMergedHashAttribute(i,oe.autoCast(S)))}}catch(_){throw ie.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ie.error(_),new Error(_s)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await _a.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,oe.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,oe.autoCast(d)))}catch(_){throw ie.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ie.error(_),new Error(_s)}}}_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 wt.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 wt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new wt.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 wt.yy.FuncValue:new wt.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,S=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${S}.${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 "${S}.${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 wt.promise(h,t),t=null}catch(f){throw ie.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ie.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 S=E[f];o.forEach(T=>{S[T.key]!==null&&S[T.key]!==void 0&&T.keys.add(S[T.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),S=hu.difference(h,[...f.keys].map(T=>T.toString()));for(let T=0,A=S.length;T<A;T++){let g=S[T];delete this.data[`${f.schema}_${f.table}`].__merged_data[g]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Sd(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=hu.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 ie.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ie.error(i),new Error(_s)}}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 _a.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 S=n.columns[h],T=f[S]===void 0?null:f[S];this.data[s].__merged_data[E].push(T)}}}}catch(r){throw ie.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ie.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();ie.trace(`Final SQL: ${n}`),s=await wt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),ie.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw ie.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ie.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 ie.error(X2.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ie.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 _a.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 ie.error("There was an error when processing this SQL operation. Check your logs"),ie.error(o),new Error(_s)}}return Object.values(Object.values(this.data)[0].__merged_data)}};dL.exports=RS});var jt=m((Vhe,fL)=>{"use strict";var e3=ib();fL.exports={searchByConditions:r3,searchByHash:s3,searchByValue:n3,search:i3};var AS=Vr(),{transformReq:OS}=F(),t3=EL();async function r3(e){return OS(e),AS.searchByConditions(e)}a(r3,"searchByConditions");async function s3(e){OS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of AS.searchByHash(e))r&&t.push(r);return t}a(s3,"searchByHash");async function n3(e){OS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of AS.searchByValue(e))t.push(r);return t}a(n3,"searchByValue");function i3(e,t){try{let r=new e3(e);r.validate(),new t3(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(i3,"search")});var Td=m((Khe,hL)=>{"use strict";var o3=Vr();hL.exports={writeTransaction:a3};function a3(e,t,r){return o3.writeTransaction(e,t,r)}a(a3,"writeTransaction")});var TL=m((zhe,SL)=>{"use strict";var c3=jt(),u3=$r(),mL=C(),l3=Xt(),Qhe=Td(),_3=require("clone"),bS=require("alasql"),d3=pd(),pL=require("util"),E3=pL.promisify(u3.getTableSchema),f3=pL.promisify(c3.search),h3=R(),NS=F();d3(bS);SL.exports={update:p3};var m3="There was a problem performing this update. Please check the logs and try again.";async function p3({statement:e,hdb_user:t}){let r=await E3(e.table.databaseid,e.table.tableid),s=S3(e.columns);NS.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=_3(n),c=NS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=bS.parse(u).statements[0],_=await f3(l),d=T3(s,_);return g3(o,d,t)}a(p3,"update");function S3(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=bS.compile(`SELECT ${r.expression.toString()} AS [${h3.FUNC_VAL}] FROM ?`)}),t}catch(t){throw mL.error(t),new Error(m3)}}a(S3,"createUpdateRecord");function T3(e,t){return NS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(T3,"buildUpdateRecords");async function g3(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await l3.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){mL.error(`Error delete new_attributes from update response: ${i}`)}return n}a(g3,"updateRecords")});var RL=m((Zhe,gL)=>{var R3=require("alasql"),A3=jt(),O3=C(),N3=Vr(),IS=require("util"),yS=F(),b3=R(),y3=$r(),jhe=Td(),Xhe=Xt(),I3="record",w3="successfully deleted",C3=IS.callbackify(M3),L3=IS.promisify(A3.search),D3=IS.promisify(y3.getTableSchema);gL.exports={convertDelete:C3};function U3(e){return`${e.deleted_hashes.length} ${I3}${e.deleted_hashes.length===1?"":"s"} ${w3}`}a(U3,"generateReturnMessage");async function M3({statement:e,hdb_user:t}){let r=await D3(e.table.databaseid,e.table.tableid);yS.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=yS.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=R3.parse(o).statements[0],u={operation:b3.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await L3(c);let l=await N3.deleteRecords(u);return yS.isEmptyOrZeroLength(l.message)&&(l.message=U3(l)),delete l.txn_time,l}catch(l){throw O3.error(l),l.hdb_code?l.message:l}}a(M3,"convertDelete")});var yL=m((tme,bL)=>{"use strict";var P3=Zn(),{hdb_errors:AL}=z(),{getDatabases:OL}=(_e(),re(be));bL.exports={checkSchemaExists:NL,checkSchemaTableExists:v3,schema_describe:P3};async function NL(e){if(!OL()[e])return AL.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(NL,"checkSchemaExists");async function v3(e,t){let r=await NL(e);if(r)return r;if(!OL()[e][t])return AL.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(v3,"checkSchemaTableExists")});var Nd={};Ke(Nd,{addAnalyticsListener:()=>DS,recordAction:()=>qs,recordActionBinary:()=>da,setAnalyticsEnabled:()=>B3});function B3(e){BL=e}function qs(e,t,r,s,n){if(!BL)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Ad.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Ad.set(i,o)),Rd||H3()}function da(e,t,r,s,n){qs(e?1:0,t,r,s,n)}function DS(e){qL.push(e)}function H3(){Rd=performance.now(),setTimeout(()=>{let e=performance.now()-Rd;Rd=0;let t=[],r={time:Date.now(),period:e,threadId:ao.threadId,metrics:t};for(let[n,i]of Ad)if(i.sort){i.sort();let o=i.length;t.push(Object.assign(i.description,{median:i[o>>1],mean:i.total/o,p95:i[Math.floor(o*.95)],p90:i[Math.floor(o*.9)],count:o}))}else t.push(i);let s=process.memoryUsage();t.push({metric:"memory",threadId:ao.threadId,...s});for(let n of qL)n(t);Ad=new Map,ao.parentPort?ao.parentPort.postMessage({type:HL,report:r}):GL({report:r})},LS).unref()}async function q3(e,t=6e4){let r=US(),s;for(let _ of r.primaryStore.getRange({start:gd+"z",end:gd,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:S,type:T,metric:A,count:g,threadId:x,...V}=f;g||(g=1);let I=A+(h?"-"+h:"");S&&(I+="-"+S);let b=i.get(I);if(b)for(let M in V){let J=V[M];if(typeof J=="number"){let B=b.count||1;b[M]=(b[M]*B+J*g)/(b.count=B+g)}}else b=Object.assign({period:t},f),i.set(I,b)}await F3()}for(let[_,d]of i)d.id=gd+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:gd+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-IL,active:l-wL,time:c}),IL=u,wL=l}async function G3(e,t){let r=US(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function US(){return CL||(CL=ft({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function k3(){FL=!0,setInterval(async()=>{await q3(LS,CS),await G3(x3,LS)},CS/2).unref()}function GL(e,t){let r=e.report;r.threadId=t?.threadId||ao.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(LL+=s.mean*s.count);r.totalBytesProcessed=LL,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(DL.get(t))}),DL.set(t,t.performance.eventLoopUtilization())),r.id=(0,PL.getNextMonotonicTime)(),US().put(r),FL||k3(),$3&&(xL=Y3(r))}async function Y3(e){if(await xL,!ai){let r=(0,mu.dirname)((0,ML.getLogFilePath)());try{ai=await(0,wS.open)((0,mu.join)(r,"analytics.log"),"r+")}catch{ai=await(0,wS.open)((0,mu.join)(r,"analytics.log"),"w+")}}let t=(await ai.stat()).size;if(t>V3){let r=Buffer.alloc(t);await ai.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ai.write(r,{position:0}),await ai.truncate(r.length),t=r.length}await ai.write(JSON.stringify(e)+`
|
|
7
|
+
`,t)}var ao,UL,ML,mu,wS,PL,Od,vL,Ad,CS,BL,Rd,LS,HL,qL,gd,IL,wL,F3,x3,CL,FL,LL,DL,$3,xL,ai,V3,co=Te(()=>{ao=require("worker_threads"),UL=D(tt());_e();ML=D(C()),mu=require("path"),wS=require("fs/promises"),PL=D(Ht()),Od=D(Y()),vL=D(R());rs();(0,Od.initSync)();Ad=new Map,CS=(0,Od.get)(vL.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3,BL=CS>0;a(B3,"setAnalyticsEnabled");a(qs,"recordAction");Et.recordAnalytics=qs;a(da,"recordActionBinary");Rd=0,LS=1e3,HL="analytics-report",qL=[];a(DS,"addAnalyticsListener");a(H3,"sendAnalytics");gd="sum-";a(q3,"aggregation");IL=0,wL=0,F3=a(()=>new Promise(setImmediate),"rest");a(G3,"cleanup");x3=36e5;a(US,"getAnalyticsTable");(0,UL.setChildListenerByType)(HL,GL);a(k3,"startScheduledTasks");LL=0,DL=new Map,$3=!1;a(GL,"recordAnalytics");V3=1e6;a(Y3,"logAnalytics")});var Qe=m((mme,oD)=>{"use strict";var Ct=Y();Ct.initSync();var K3=require("fs-extra"),W3=require("semver"),gu=require("path"),{monotonicFactory:Q3}=require("ulidx"),BS=Q3(),z3=require("util"),$L=require("child_process"),J3=z3.promisify($L.exec),j3=$L.spawn,fe=Me(),Re=R(),bd=F(),Kr=C(),yd=mn(),X3=Td(),pu=et(),{Encoder:Z3,decode:HS}=require("msgpackr"),VL=new Z3,{isEmpty:uo}=bd,YL=er(),KL=12e10,e4=48*36e11,t4=5e9,{connect:r4,StorageType:WL,RetentionPolicy:QL,AckPolicy:Id,DeliverPolicy:wd,DiscardPolicy:s4,NatsConnection:dme,JetStreamManager:Eme,JetStreamClient:fme,StringCodec:hme,JSONCodec:n4,createInbox:qS,headers:i4,ErrorCode:kL}=require("nats"),{PACKAGE_ROOT:o4}=R(),a4=ki(),{recordAction:c4}=(co(),re(Nd)),zL=n4(),u4="clustering",l4=a4.engines[fe.NATS_SERVER_NAME],_4=gu.join(o4,"dependencies"),vS=gu.join(_4,`${process.platform}-${process.arch}`,fe.NATS_BINARY_NAME),MS,PS,Su,Ea,fa;oD.exports={runCommand:JL,checkNATSServerInstalled:d4,createConnection:FS,getConnection:Cd,getJetStreamManager:Ru,getJetStream:jL,getNATSReferences:rr,getServerList:f4,createLocalStream:GS,listStreams:XL,deleteLocalStream:h4,getServerConfig:Au,listRemoteStreams:m4,viewStream:p4,viewStreamIterator:S4,publishToStream:T4,createWorkQueueStream:g4,addSourceToWorkStream:eD,request:A4,removeSourceFromWorkStream:rD,reloadNATS:xS,reloadNATSHub:O4,reloadNATSLeaf:N4,extractServerName:tD,requestErrorHandler:b4,updateWorkStream:y4,createLocalTableStream:nD,createTableStreams:I4,purgeTableStream:iD,purgeSchemaTableStreams:w4,getStreamInfo:C4,updateLocalStreams:D4,closeConnection:E4,getJsmServerName:Ou,addNatsMsgHeader:ZL,updateIngestStreamConsumer:R4};async function JL(e,t=void 0){let{stdout:r,stderr:s}=await J3(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
8
8
|
`,""));return r.replace(`
|
|
9
|
-
`,"")}a(KL,"runCommand");async function o4(){try{await G3.access(LS)}catch{return!1}let e=await KL(`${LS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return x3.eq(t,n4)}a(o4,"checkNATSServerInstalled");async function PS(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await xL.getClusterUser();if(co(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Vr.trace("create nats connection called");let i=await J3({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:Ct.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Ct.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Ct.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return Vr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(PS,"createConnection");async function a4(){Hs&&(await Hs.drain(),Hs=void 0,_a=void 0,da=void 0,mu=void 0)}a(a4,"closeConnection");var Hs,mu;async function Id(){return mu||(mu=PS(Ct.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Hs=await mu),Hs||mu}a(Id,"getConnection");async function Su(){if(_a)return _a;co(Hs)&&await Id();let{domain:e}=Tu(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(co(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return _a=await Hs.jetstreamManager({domain:e}),_a}a(Su,"getJetStreamManager");async function WL(){if(da)return da;co(Hs)&&await Id();let{domain:e}=Tu(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(co(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return da=Hs.jetstream({domain:e}),da}a(WL,"getJetStream");async function rr(){let e=Hs||await Id(),t=_a||await Su(),r=da||await WL();return{connection:e,jsm:t,js:r}}a(rr,"getNATSReferences");async function c4(e){let t=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await xL.getClusterUser(),n=await PS(t,r,s),i=MS(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=YL.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 Od.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(c4,"getServerList");async function vS(e,t){let{jsm:r}=await rr(),s=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:$L.File,retention:VL.Limits,subjects:t,discard:j3.Old,duplicate_window:kL,max_msgs:n,max_bytes:i,max_age:s})}a(vS,"createLocalStream");async function QL(){let{jsm:e}=await rr(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(QL,"listStreams");async function u4(e){let{jsm:t}=await rr();await t.streams.delete(e)}a(u4,"deleteLocalStream");async function l4(e){let{connection:t}=await rr(),r=[],s=MS(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(YL.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(l4,"listRemoteStreams");async function _4(e,t=void 0,r=void 0){let{jsm:s,js:n}=await rr(),i=DS(),o={durable_name:i,ack_policy:bd.Explicit};t&&(o.deliver_policy=yd.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=US(_.data),E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};if(_.headers&&(E.origin=_.headers.get(fe.MSG_HEADERS.ORIGIN),E.nats_msg_id=_.headers.get(fe.MSG_HEADERS.NATS_MSG_ID)),l.push(E),_.ack(),_.info.pending===0)break}return await c.delete(),l}a(_4,"viewStream");async function*d4(e,t=void 0,r=void 0){let{jsm:s,js:n}=await rr(),i=DS(),o={durable_name:i,ack_policy:bd.Explicit};t&&(o.deliver_policy=yd.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 _=US(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(fe.MSG_HEADERS.ORIGIN),E.nats_msg_id=l.headers.get(fe.MSG_HEADERS.NATS_MSG_ID)),yield E}if(l.ack(),l.info.pending===0)break}await c.delete()}a(d4,"viewStreamIterator");async function E4(e,t,r,s){Vr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=zL(s,r);let{js:n}=await rr(),i=await gu(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:GL.encode(s);try{Vr.trace(`publishToStream publishing to subject: ${o}`),r4(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 ZL(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Vr.trace(`publishToStream creating stream: ${t}`);let _=o.split(".");_[2]="*",await vS(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(E4,"publishToStream");function zL(e,t){t===void 0&&(t=Z3());let r=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(fe.MSG_HEADERS.NATS_MSG_ID)){let s=Od.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${DS()}`;t.append(fe.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(fe.MSG_HEADERS.ORIGIN)||t.append(fe.MSG_HEADERS.ORIGIN,r),t}a(zL,"addNatsMsgHeader");function Tu(e){e=e.toLowerCase();let t=pu.join(Ct.get(Re.CONFIG_PARAMS.ROOTPATH),s4);if(e===Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return co(CS)&&(CS={port:fu.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:fu.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+fe.SERVER_SUFFIX.HUB,config_file:fe.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:pu.join(t,fe.PID_FILES.HUB),hdb_nats_path:t}),CS;if(e===Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return co(wS)&&(wS={port:fu.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:fu.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+fe.SERVER_SUFFIX.LEAF,config_file:fe.NATS_CONFIG_FILES.LEAF_SERVER,domain:fu.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+fe.SERVER_SUFFIX.LEAF,pid_file_path:pu.join(t,fe.PID_FILES.LEAF),hdb_nats_path:t}),wS;Vr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Tu,"getServerConfig");async function f4(e){let{jsm:t}=await rr(),r=await gu();try{await t.streams.add({name:e.stream_name,storage:$L.File,retention:VL.Limits,duplicate_window:kL,max_age:Q3,max_bytes:z3,subjects:[`${fe.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:bd.Explicit,durable_name:e.durable_name,deliver_policy:yd.All,max_ack_pending:1e4});else throw s}}a(f4,"createWorkQueueStream");async function h4(){let{jsm:e}=await rr();(await e.consumers.info(fe.WORK_QUEUE_CONSUMER_NAMES.stream_name,fe.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Vr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(fe.WORK_QUEUE_CONSUMER_NAMES.stream_name,fe.WORK_QUEUE_CONSUMER_NAMES.durable_name),Vr.info("Adding pull consumer to ingest stream"),await e.consumers.add(fe.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:bd.Explicit,durable_name:fe.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:yd.All,max_ack_pending:1e4}))}a(h4,"updateIngestStreamConsumer");async function JL(e,t,r){let{jsm:s}=await rr(),n=await s.streams.info(t),i=jL(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=Nd.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 S=0,p=n.config.sources.length;S<p;S++)if(d=n.config.sources[S],E=S,_&&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:`${fe.SUBJECT_PREFIXES.TXN}.>`};_||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(JL,"addSourceToWorkStream");function jL(e){return e.split(".")[1]}a(jL,"extractServerName");async function XL(e,t,r){let{schema:s,table:n}=r,i=Nd.createNatsTableStreamName(s,n),{jsm:o}=await rr(),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(XL,"removeSourceFromWorkStream");async function m4(e,t,r=2e4,s=MS()){if(!Od.isObject(t))throw new Error("data param must be an object");let n=GL.encode(t),{connection:i}=await rr(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return US(c.data)}a(m4,"request");function BS(e){return new Promise(async(t,r)=>{let s=Y3(LS,["--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(BS,"reloadNATS");async function p4(){let{pid_file_path:e}=Tu(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await BS(e)}a(p4,"reloadNATSHub");async function S4(){let{pid_file_path:e}=Tu(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await BS(e)}a(S4,"reloadNATSLeaf");function T4(e,t,r){let s;switch(e.code){case qL.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case qL.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(T4,"requestErrorHandler");async function g4(e,t){let r=t+fe.SERVER_SUFFIX.LEAF;await ZL(async()=>{e.subscribe===!0?await JL(r,fe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await XL(r,fe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(g4,"updateWorkStream");function ZL(e){return K3.writeTransaction(Re.SYSTEM_SCHEMA_NAME,Re.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(ZL,"exclusiveLock");async function eD(e,t){let r=Nd.createNatsTableStreamName(e,t),s=await gu(),n=N4(e,t,s);await vS(r,[n])}a(eD,"createLocalTableStream");async function R4(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await eD(s,n)}}a(R4,"createTableStreams");async function tD(e,t){if(Ct.get(Re.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Nd.createNatsTableStreamName(e,t),{jsm:s}=await rr();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Vr.warn(r);else throw r}}a(tD,"purgeTableStream");async function A4(e,t){if(Ct.get(Re.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await tD(e,t[r])}a(A4,"purgeSchemaTableStreams");async function O4(e){return(await Su()).streams.info(e)}a(O4,"getStreamInfo");function N4(e,t,r){return`${fe.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(N4,"createSubjectName");async function gu(){if(hu)return hu;if(hu=(await Su())?.nc?.info?.server_name,hu===void 0)throw new Error("Unable to get jetstream manager server name");return hu}a(gu,"getJsmServerName");async function b4(){let e=await Su(),t=await gu(),r=await QL();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=y4(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===fe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let l=`${fe.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Vr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else if(n.name===fe.WORK_QUEUE_CONSUMER_NAMES.stream_name){let l=`${fe.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Vr.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(".");Vr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}a(b4,"updateLocalStreams");function y4(e){let{config:t}=e,r=!1;if(t.name===fe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===fe.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Ct.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(y4,"updateStreamLimits")});var Dd=m((_me,oD)=>{"use strict";var Ea=L_(),fa=AL(),I4=D(),w4=require("uuid").v4,lme=require("clone"),Cd=gn(),ha=g(),C4=require("util"),ai=kr(),{handleHDBError:sr,hdb_errors:L4}=z(),{HDB_ERROR_MSGS:wd,HTTP_STATUS_CODES:nr}=L4,{SchemaEventMsg:Ld}=is(),sD=We(),{getDatabases:D4}=(_e(),te(ye)),{transformReq:ma}=F();oD.exports={createSchema:U4,createSchemaStructure:nD,createTable:M4,createTableStructure:iD,createAttribute:q4,dropSchema:P4,dropTable:v4,dropAttribute:B4,getBackup:F4};async function U4(e){let t=await nD(e);return Cd.signalSchemaChange(new Ld(process.pid,e.operation,e.schema)),t}a(U4,"createSchema");async function nD(e){let t=Ea.schema_object(e);if(t)throw sr(t,t.message,nr.BAD_REQUEST,void 0,void 0,!0);if(ma(e),!await fa.checkSchemaExists(e.schema))throw sr(new Error,wd.SCHEMA_EXISTS_ERR(e.schema),nr.BAD_REQUEST,ha.LOG_LEVELS.ERROR,wd.SCHEMA_EXISTS_ERR(e.schema),!0);return await ai.createSchema(e),`database '${e.schema}' successfully created`}a(nD,"createSchemaStructure");async function M4(e){return ma(e),await iD(e)}a(M4,"createTable");async function iD(e){let t=Ea.create_table_object(e);if(t)throw sr(t,t.message,nr.BAD_REQUEST,void 0,void 0,!0);if(Ea.validateTableResidence(e.residence),!await fa.checkSchemaTableExists(e.schema,e.table))throw sr(new Error,wd.TABLE_EXISTS_ERR(e.schema,e.table),nr.BAD_REQUEST,ha.LOG_LEVELS.ERROR,wd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:w4(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await ai.createTable(s,e);else throw sr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",nr.BAD_REQUEST);else await ai.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(iD,"createTableStructure");async function P4(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Ea.schema_object(e),s=t??r;if(s)throw sr(s,s.message,nr.BAD_REQUEST,void 0,void 0,!0);ma(e);let n=await fa.checkSchemaExists(e.schema);if(n)throw sr(new Error,n,nr.NOT_FOUND,ha.LOG_LEVELS.ERROR,n,!0);let i=await fa.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ai.dropSchema(e),Cd.signalSchemaChange(new Ld(process.pid,e.operation,e.schema)),await sD.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(P4,"dropSchema");async function v4(e){let t=Ea.table_object(e);if(t)throw sr(t,t.message,nr.BAD_REQUEST,void 0,void 0,!0);ma(e);let r=await fa.checkSchemaTableExists(e.schema,e.table);if(r)throw sr(new Error,r,nr.NOT_FOUND,ha.LOG_LEVELS.ERROR,r,!0);return await ai.dropTable(e),await sD.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(v4,"dropTable");async function B4(e){let t=Ea.attribute_object(e);if(t)throw sr(t,t.message,nr.BAD_REQUEST,void 0,void 0,!0);ma(e);let r=await fa.checkSchemaTableExists(e.schema,e.table);if(r)throw sr(new Error,r,nr.NOT_FOUND,ha.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw sr(new Error,"You cannot drop a hash attribute",nr.BAD_REQUEST,void 0,void 0,!0);if(ha.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw sr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,nr.BAD_REQUEST,void 0,void 0,!0);try{return await ai.dropAttribute(e),H4(e),Cd.signalSchemaChange(new Ld(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw I4.error(`Got an error deleting attribute ${C4.inspect(e)}.`),s}}a(B4,"dropAttribute");function H4(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(H4,"dropAttributeFromGlobal");async function q4(e){ma(e);let t=D4()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw sr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,nr.BAD_REQUEST,void 0,void 0,!0);return await ai.createAttribute(e),Cd.signalSchemaChange(new Ld(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(q4,"createAttribute");function F4(e){return ai.getBackup(e)}a(F4,"getBackup")});var cD=m((Eme,aD)=>{"use strict";var{OPERATIONS_ENUM:G4}=g(),HS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=G4.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};aD.exports=HS});var qS=m((mme,ED)=>{"use strict";var x4=kr(),hme=cD(),Ud=F(),Md=g(),k4=$(),{handleHDBError:uD,hdb_errors:$4}=z(),{HDB_ERROR_MSGS:lD,HTTP_STATUS_CODES:_D}=$4,V4=Object.values(Md.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),dD="To use this operation audit log must be enabled in harperdb-config.yaml";ED.exports=Y4;async function Y4(e){if(Ud.isEmpty(e.schema))throw new Error(lD.SCHEMA_REQUIRED_ERR);if(Ud.isEmpty(e.table))throw new Error(lD.TABLE_REQUIRED_ERR);if(!k4.get(Md.CONFIG_PARAMS.LOGGING_AUDITLOG))throw uD(new Error,dD,_D.BAD_REQUEST,Md.LOG_LEVELS.ERROR,dD,!0);let t=Ud.checkSchemaTableExist(e.schema,e.table);if(t)throw uD(new Error,t,_D.NOT_FOUND,Md.LOG_LEVELS.ERROR,t,!0);if(!Ud.isEmpty(e.search_type)&&V4.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await x4.readAuditLog(e)}a(Y4,"readAuditLog")});var hD=m((Sme,fD)=>{"use strict";var{OPERATIONS_ENUM:K4}=g(),FS=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=K4.GET_BACKUP,this.schema=t,this.table=r}};fD.exports=FS});var SD=m((Ame,pD)=>{"use strict";var W4=kr(),gme=hD(),GS=F(),Q4=g(),Rme=$(),{handleHDBError:z4,hdb_errors:J4}=z(),{HDB_ERROR_MSGS:mD,HTTP_STATUS_CODES:j4}=J4;pD.exports=X4;async function X4(e){if(GS.isEmpty(e.schema))throw new Error(mD.SCHEMA_REQUIRED_ERR);if(GS.isEmpty(e.table))throw new Error(mD.TABLE_REQUIRED_ERR);let t=GS.checkSchemaTableExist(e.schema,e.table);if(t)throw z4(new Error,t,j4.NOT_FOUND,Q4.LOG_LEVELS.ERROR,t,!0);return await W4.getBackup(read_audit_log_object)}a(X4,"getBackup")});var ND=m((Nme,OD)=>{var ci=require("validate.js"),gD=He(),pa=g(),{handleHDBError:Z4,hdb_errors:eX}=z(),{HDB_ERROR_MSGS:Qe,HTTP_STATUS_CODES:tX}=eX,xS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),rX={STRUCTURE_USER:"structure_user"},TD=Object.values(pa.ROLE_TYPES_ENUM),sX="attribute_permissions",nX="attribute_name",{PERMS_CRUD_ENUM:Sa}=pa,iX=[sX,...Object.values(Sa)],RD=[Sa.READ,Sa.INSERT,Sa.UPDATE],oX=[nX,...RD];function aX(e){let t=xS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,AD(e,t)}a(aX,"addRoleValidation");function cX(e){let t=xS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,AD(e,t)}a(cX,"alterRoleValidation");function uX(e){let t=xS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,gD.validateObject(e,t)}a(uX,"dropRoleValidation");var lX=["operation","role","id","permission","hdb_user","hdb_auth_header"];function AD(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)lX.includes(s[o])||n.push(s[o]);n.length>0&&st(Qe.INVALID_ROLE_JSON_KEYS(n),r);let i=gD.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{st(o,r)}),e.permission){let o=_X(e);o&&st(o,r),TD.forEach(c=>{e.permission[c]&&!ci.isBoolean(e.permission[c])&&st(Qe.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(TD.indexOf(o)<0){if(o===rX.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]||st(Qe.SCHEMA_NOT_FOUND(d),r)}continue}st(Qe.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){st(Qe.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]){st(Qe.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{iX.includes(_)||st(Qe.INVALID_PERM_KEY(_),r,o,u)}),Object.values(Sa).forEach(_=>{ci.isDefined(l[_])?ci.isBoolean(l[_])||st(Qe.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):st(Qe.TABLE_PERM_MISSING(_),r,o,u)}),ci.isDefined(l.attribute_permissions)){if(!ci.isArray(l.attribute_permissions)){st(Qe.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{st(Qe.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(S=>{!oX.includes(S)&&S!==Sa.DELETE&&st(Qe.INVALID_ATTR_PERM_KEY(S),r,o,u)}),!ci.isDefined(f.attribute_name)){st(Qe.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){st(Qe.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}RD.forEach(S=>{ci.isDefined(f[S])?ci.isBoolean(f[S])||st(Qe.ATTR_PERM_NOT_BOOLEAN(S,h),r,o,u):st(Qe.ATTR_PERM_MISSING(S,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}`;st(Qe.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return dX(r)}a(AD,"customValidate");OD.exports={addRoleValidation:aX,alterRoleValidation:cX,dropRoleValidation:uX};function _X(e){let{operation:t,permission:r}=e;if(t===pa.OPERATIONS_ENUM.ADD_ROLE||t===pa.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 Qe.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?pa.ROLE_TYPES_ENUM.SUPER_USER:pa.ROLE_TYPES_ENUM.CLUSTER_USER;return Qe.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(_X,"validateNoSUPerms");function dX(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Qe.ROLE_PERMS_ERROR,...e};return Z4(new Error,s,tX.BAD_REQUEST)}else return null}a(dX,"generateRolePermResponse");function st(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(st,"addPermError")});var Bd=m((yme,wD)=>{"use strict";var bD=Xt(),yD=jt(),EX=Xi(),$S=ND(),VS=gn(),fX=require("uuid").v4,hX=require("util"),Pd=g(),mX=F(),YS=yD.searchByValue,pX=yD.searchByHash,SX=hX.promisify(EX.delete),TX=os(),gX=aa(),{hdb_errors:RX,handleHDBError:Ta}=z(),{HDB_ERROR_MSGS:ID,HTTP_STATUS_CODES:vd}=RX,{UserEventMsg:KS}=is();wD.exports={addRole:AX,alterRole:OX,dropRole:NX,listRoles:bX};function kS(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(kS,"scrubRoleDetails");async function AX(e){let t=$S.addRoleValidation(e);if(t)throw t;e=kS(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 YS(r)||[])}catch(i){throw Ta(i)}if(s&&s.length>0)throw Ta(new Error,ID.ROLE_ALREADY_EXISTS(e.role),vd.CONFLICT,void 0,void 0,!0);e.id||(e.id=fX());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await bD.insert(n),VS.signalUserChange(new KS(process.pid)),e=kS(e),e}a(AX,"addRole");async function OX(e){let t=$S.alterRoleValidation(e);if(t)throw t;e=kS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await bD.update(r)}catch(n){throw Ta(n)}if(s&&s?.message==="updated 0 of 1 records")throw Ta(new Error,"Invalid role id",vd.BAD_REQUEST,void 0,void 0,!0);return await VS.signalUserChange(new KS(process.pid)),e}a(OX,"alterRole");async function NX(e){let t=$S.dropRoleValidation(e);if(t)throw Ta(new Error,t,vd.BAD_REQUEST,void 0,void 0,!0);let r=new gX(Pd.SYSTEM_SCHEMA_NAME,Pd.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await pX(r));if(s.length===0)throw Ta(new Error,ID.ROLE_NOT_FOUND,vd.NOT_FOUND,void 0,void 0,!0);let n=new TX(Pd.SYSTEM_SCHEMA_NAME,Pd.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await YS(n)),o=!1;if(mX.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 SX(c),VS.signalUserChange(new KS(process.pid)),`${s[0].role} successfully deleted`}a(NX,"dropRole");async function bX(){return YS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(bX,"listRoles")});var UD=m((wme,DD)=>{"use strict";var yX=$(),ui=require("joi"),IX=He(),CD=require("moment"),wX=require("fs-extra"),WS=require("path"),CX=require("lodash"),Ru=g(),{LOG_LEVELS:uo}=g(),LX="YYYY-MM-DD hh:mm:ss",DX=WS.resolve(__dirname,"../logs");DD.exports=function(e){return IX.validateBySchema(e,UX)};var UX=ui.object({from:ui.custom(LD),until:ui.custom(LD),level:ui.valid(uo.NOTIFY,uo.FATAL,uo.ERROR,uo.WARN,uo.INFO,uo.DEBUG,uo.TRACE),order:ui.valid("asc","desc"),limit:ui.number().min(1),start:ui.number().min(0),log_name:ui.custom(MX)});function LD(e,t){if(CD(e,CD.ISO_8601).format(LX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(LD,"validateDatetime");function MX(e,t){if(CX.invert(Ru.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=yX.get(Ru.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Ru.LOG_NAMES.HDB:e,i=n===Ru.LOG_NAMES.INSTALL?WS.join(DX,Ru.LOG_NAMES.INSTALL):WS.join(s,n);return wX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(MX,"validateReadLogPath")});var zS=m((Lme,MD)=>{"use strict";var Hd=g(),PX=D(),vX=$(),BX=UD(),QS=require("path"),HX=require("fs-extra"),{once:qX}=require("events"),{handleHDBError:FX,hdb_errors:GX}=z(),{PACKAGE_ROOT:xX}=g(),kX=QS.join(xX,"logs"),$X=1e3;MD.exports=VX;async function VX(e){let t=BX(e);if(t)throw FX(t,t.message,GX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=vX.get(Hd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Hd.LOG_NAMES.HDB:e.log_name,n=s===Hd.LOG_NAMES.INSTALL?QS.join(kX,Hd.LOG_NAMES.INSTALL):QS.join(r,s),i=HX.createReadStream(n);i.on("error",O=>{PX.error(O)});let o=e.level!==void 0,c=o?e.level:void 0,u=e.from!==void 0,l=u?new Date(e.from):void 0,_=e.until!==void 0,d=_?new Date(e.until):void 0,E=e.limit===void 0?$X:e.limit,f=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,S=h+E,p=0,b=[],R="",P;i.on("data",O=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;O=R+O;let x=0,k;for(;(k=w.exec(O))&&!i.destroyed;){P&&(P.message=O.slice(x,k.index),V(P));let[J,Oe,Tt]=k,$o=Tt.split("] ["),Ec=$o[0],qi=$o[1];$o.splice(0,2),P={timestamp:Oe,thread:Ec,level:qi,tags:$o,message:""},x=k.index+J.length}R=O.slice(x)}),i.on("end",O=>{i.destroyed||P&&(P.message=R.trim(),V(P))}),i.resume();function V(O){let w,x,k;switch(!0){case(o&&u&&_):w=new Date(O.timestamp),x=new Date(l),k=new Date(d),O.level===c&&w>=x&&w<=k&&p<h?p++:O.level===c&&w>=x&&w<=k&&(li(O,f,b),p++,p===S&&i.destroy());break;case(o&&u):w=new Date(O.timestamp),x=new Date(l),O.level===c&&w>=x&&p<h?p++:O.level===c&&w>=x&&(li(O,f,b),p++,p===S&&i.destroy());break;case(o&&_):w=new Date(O.timestamp),k=new Date(d),O.level===c&&w<=k&&p<h?p++:O.level===c&&w<=k&&(li(O,f,b),p++,p===S&&i.destroy());break;case(u&&_):w=new Date(O.timestamp),x=new Date(l),k=new Date(d),w>=x&&w<=k&&p<h?p++:w>=x&&w<=k&&(li(O,f,b),p++,p===S&&i.destroy());break;case o:O.level===c&&p<h?p++:O.level===c&&(li(O,f,b),p++,p===S&&i.destroy());break;case u:w=new Date(O.timestamp),x=new Date(l),w>=x&&p<h?p++:w>=x&&p>=h&&(li(O,f,b),p++,p===S&&i.destroy());break;case _:w=new Date(O.timestamp),k=new Date(d),w<=k&&p<h?p++:w<=k&&p>=h&&(li(O,f,b),p++,p===S&&i.destroy());break;default:p<h?p++:(li(O,f,b),p++,p===S&&i.destroy())}}return a(V,"onLogMessage"),await qX(i,"close"),b}a(VX,"readLog");function li(e,t,r){t==="desc"?YX(e,r):t==="asc"?KX(e,r):r.push(e)}a(li,"pushLineToResult");function YX(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(YX,"insertDescending");function KX(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(KX,"insertAscending")});var Fd=m((vme,HD)=>{"use strict";var JS=require("joi"),{string:qd,boolean:PD,date:WX}=JS.types(),QX=He(),{validateSchemaExists:Ume,validateTableExists:Mme,validateSchemaName:Pme}=Ls(),zX=g(),JX=Me(),vD=$();vD.initSync();var jX=qd.invalid(vD.get(zX.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(JX.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(),BD={operation:qd.valid("add_node","update_node"),node_name:jX,subscriptions:JS.array().items({table:qd.optional(),schema:qd.required(),subscribe:PD.required(),publish:PD.required().custom(ZX),start_time:WX.iso()}).min(1).required()};function XX(e){return QX.validateBySchema(e,JS.object(BD))}a(XX,"addUpdateNodeValidator");function ZX(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(ZX,"checkForFalsy");HD.exports={addUpdateNodeValidator:XX,validation_schema:BD}});var FD=m((Hme,qD)=>{var eZ=He(),tZ={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};qD.exports=function(e){return eZ.validateObject(e,tZ)}});var Gd=m((qme,GD)=>{"use strict";var rZ=g().OPERATIONS_ENUM,jS=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=rZ.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};GD.exports=jS});var kD=m((Gme,xD)=>{"use strict";var sZ={OPERATION:"operation",REFRESH:"refresh"},XS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},ZS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};xD.exports={JWTTokens:XS,TOKEN_TYPE_ENUM:sZ,JWTRSAKeys:ZS}});var Nu=m((kme,KD)=>{"use strict";var Ou=require("jsonwebtoken"),eT=require("fs-extra"),tT=F(),Yr=g(),{handleHDBError:ir,hdb_errors:nZ}=z(),{HTTP_STATUS_CODES:or,AUTHENTICATION_ERROR_MSGS:ar}=nZ,Au=D(),$D=$_(),nT=er(),iZ=Xt().update,oZ=Gd(),aZ=gn(),{UserEventMsg:cZ}=is(),_i=$();_i.initSync();var rT=require("path"),{JWTTokens:uZ,JWTRSAKeys:lZ,TOKEN_TYPE_ENUM:xd}=kD(),_Z=_i.get(Yr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?_i.get(Yr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",dZ=_i.get(Yr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?_i.get(Yr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",kd="RS256",sT;KD.exports={createTokens:EZ,validateOperationToken:hZ,refreshOperationToken:fZ,validateRefreshToken:YD};async function EZ(e){if(tT.isEmpty(e)||typeof e!="object")throw ir(new Error,ar.INVALID_AUTH_OBJECT,or.BAD_REQUEST,void 0,void 0,!0);if(tT.isEmpty(e.username))throw ir(new Error,ar.USERNAME_REQUIRED,or.BAD_REQUEST,void 0,void 0,!0);if(tT.isEmpty(e.password))throw ir(new Error,ar.PASSWORD_REQUIRED,or.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await nT.findAndValidateUser(e.username,e.password),!t)throw ir(new Error,ar.INVALID_CREDENTIALS,or.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw Au.error(E),ir(new Error,ar.INVALID_CREDENTIALS,or.UNAUTHORIZED,void 0,void 0,!0)}let r=await $d(),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 VD(i,r.private_key,r.passphrase),c=await Ou.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:dZ,algorithm:kd,subject:xd.REFRESH}),u=$D.hash(c),l=new oZ(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await iZ(l)}catch(E){Au.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw ir(new Error,ar.REFRESH_TOKEN_SAVE_FAILED,or.INTERNAL_SERVER_ERROR);return aZ.signalUserChange(new cZ(process.pid)),new uZ(o,c)}a(EZ,"createTokens");async function VD(e,t,r){return await Ou.sign(e,{key:t,passphrase:r},{expiresIn:_Z,algorithm:kd,subject:xd.OPERATION})}a(VD,"signOperationToken");async function $d(){if(sT===void 0)try{let e=rT.join(_i.getHdbBasePath(),Yr.LICENSE_KEY_DIR_NAME,Yr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=rT.join(_i.getHdbBasePath(),Yr.LICENSE_KEY_DIR_NAME,Yr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=rT.join(_i.getHdbBasePath(),Yr.LICENSE_KEY_DIR_NAME,Yr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await eT.readFile(e)).toString(),n=(await eT.readFile(t)).toString(),i=(await eT.readFile(r)).toString();sT=new lZ(i,n,s)}catch(e){throw Au.error(e),ir(new Error,ar.NO_ENCRYPTION_KEYS,or.INTERNAL_SERVER_ERROR)}return sT}a($d,"getJWTRSAKeys");async function fZ(e){if(!e)throw ir(new Error,ar.INVALID_BODY,or.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw ir(new Error,ar.REFRESH_TOKEN_REQUIRED,or.BAD_REQUEST,void 0,void 0,!0);await YD(e.refresh_token);let t=await $d(),r=await Ou.decode(e.refresh_token);return{operation_token:await VD({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(fZ,"refreshOperationToken");async function hZ(e){try{let t=await $d(),r=await Ou.verify(e,t.public_key,{algorithms:kd,subject:xd.OPERATION});return await nT.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Au.warn(t),t.name&&t.name==="TokenExpiredError"?ir(new Error,ar.TOKEN_EXPIRED,or.FORBIDDEN):ir(new Error,ar.INVALID_TOKEN,or.UNAUTHORIZED)}}a(hZ,"validateOperationToken");async function YD(e){let t;try{let r=await $d(),s=await Ou.verify(e,r.public_key,{algorithms:kd,subject:xd.REFRESH});t=await nT.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Au.warn(r),r.name&&r.name==="TokenExpiredError"?ir(new Error,ar.TOKEN_EXPIRED,or.FORBIDDEN):ir(new Error,ar.INVALID_TOKEN,or.UNAUTHORIZED)}if(!$D.validate(t.refresh_token,e))throw ir(new Error,ar.INVALID_TOKEN,or.UNAUTHORIZED);return t}a(YD,"validateRefreshToken")});var iT=m((Yme,zD)=>{"use strict";var mZ=FD(),ga=require("passport"),pZ=require("passport-local").Strategy,SZ=require("passport-http").BasicStrategy,TZ=require("util"),gZ=er(),QD=TZ.callbackify(gZ.findAndValidateUser),Vme=gr(),RZ=g(),WD=Nu();ga.use(new pZ(function(e,t,r){QD(e,t,r)}));ga.use(new SZ(function(e,t,r){QD(e,t,r)}));ga.serializeUser(function(e,t){t(null,e)});ga.deserializeUser(function(e,t){t(null,e)});function AZ(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":ga.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===RZ.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?WD.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):WD.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:ga.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(AZ,"authorize");function OZ(e,t){let r=mZ(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(OZ,"checkPermissions");zD.exports={authorize:AZ,checkPermissions:OZ}});var Ra=m((Wme,JD)=>{"use strict";var oT=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},aT=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};JD.exports={Node:oT,NodeSubscription:aT}});var XD=m((zme,jD)=>{"use strict";var NZ=g().OPERATIONS_ENUM,cT=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=NZ.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};jD.exports=cT});var bu=m((jme,ZD)=>{"use strict";var uT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},lT=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,this.attributes=c}};ZD.exports={RemotePayloadObject:uT,RemotePayloadSubscription:lT}});var tU=m((Zme,eU)=>{"use strict";var _T=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}};eU.exports=_T});var nU=m((npe,sU)=>{"use strict";var bZ=tU(),tpe=Ge(),rU=we(),yZ=D(),{getSchemaPath:rpe,getTransactionAuditStorePath:spe}=De(),{getDatabases:IZ}=(_e(),te(ye));sU.exports=wZ;async function wZ(e){let t=new bZ;try{let r=IZ()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await rU.environmentDataSize(schema_path,e.name),o=await rU.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){yZ.warn(`unable to stat table dbi due to ${r}`)}return t}a(wZ,"lmdbGetTableSize")});var oU=m((ope,iU)=>{"use strict";var dT=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}};iU.exports=dT});var On=m((lpe,lU)=>{"use strict";var CZ=require("fs-extra"),LZ=require("path"),xt=require("systeminformation"),di=D(),DZ=We(),ET=Me(),Yd=g(),UZ=nU(),uU=Xn(),{getThreadInfo:aU}=tt(),OT=$();OT.initSync();var MZ=oU(),{openEnvironment:cpe}=we(),{getSchemaPath:upe}=De(),{database:PZ}=(_e(),te(ye)),Vd;lU.exports={getHDBProcessInfo:pT,getNetworkInfo:TT,getDiskInfo:ST,getMemoryInfo:mT,getCPUInfo:hT,getTimeInfo:fT,getSystemInformation:gT,systemInformation:vZ,getTableSize:RT,getMetrics:AT};function fT(){return xt.time()}a(fT,"getTimeInfo");async function hT(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:l,..._}=await xt.cpu();_.cpu_speed=await xt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:S,raw_currentload_user:p,cpus:b,...R}=await xt.currentLoad();return R.cpus=[],b.forEach(P=>{let{raw_load:V,raw_load_idle:O,raw_load_irq:w,raw_load_nice:x,raw_load_system:k,raw_load_user:J,...Oe}=P;R.cpus.push(Oe)}),_.current_load=R,_}catch(e){return di.error(`error in getCPUInfo: ${e}`),{}}}a(hT,"getCPUInfo");async function mT(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await xt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return di.error(`error in getMemoryInfo: ${e}`),{}}}a(mT,"getMemoryInfo");async function pT(){let e={core:[],clustering:[]};try{let t=await xt.processes(),r;try{r=Number.parseInt(await CZ.readFile(LZ.join(OT.get(Yd.CONFIG_PARAMS.ROOTPATH),Yd.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===Yd.NODE_ERROR_CODES.ENOENT)di.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 di.error(`error in getHDBProcessInfo: ${t}`),e}}a(pT,"getHDBProcessInfo");async function ST(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await xt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,...l}=await xt.fsStats();return e.read_write=l,e.size=await xt.fsSize(),e}catch(t){return di.error(`error in getDiskInfo: ${t}`),e}}a(ST,"getDiskInfo");async function TT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await xt.networkInterfaceDefault(),e.latency=await xt.inetChecksite("google.com"),(await xt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:l,ieee8021xState:_,carrier_changes:d,...E}=s;e.interfaces.push(E)}),(await xt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return di.error(`error in getNetworkInfo: ${t}`),e}}a(TT,"getNetworkInfo");async function gT(){if(Vd!==void 0)return Vd;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await xt.osInfo();e=c;let u=await xt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Vd=e,Vd}catch(t){return di.error(`error in getSystemInformation: ${t}`),e}}a(gT,"getSystemInformation");async function RT(){let e=[],t=await uU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await UZ(s));return e}a(RT,"getTableSize");async function AT(){let e=await uU.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=PZ({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){di.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(AT,"getMetrics");async function cU(){if(OT.get(Yd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await DZ.getNATSReferences(),r=await t.streams.info(ET.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(ET.WORK_QUEUE_CONSUMER_NAMES.stream_name,ET.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(cU,"getNatsStreamInfo");async function vZ(e){let t=new MZ;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await gT(),t.time=fT(),t.cpu=await hT(),t.memory=await mT(),t.disk=await ST(),t.network=await TT(),t.harperdb_processes=await pT(),t.table_size=await RT(),t.metrics=await AT(),t.threads=await aU(),t.replication=await cU(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await gT();break;case"time":t.time=fT();break;case"cpu":t.cpu=await hT();break;case"memory":t.memory=await mT();break;case"disk":t.disk=await ST();break;case"network":t.network=await TT();break;case"harperdb_processes":t.harperdb_processes=await pT();break;case"table_size":t.table_size=await RT();break;case"database_metrics":case"metrics":t.metrics=await AT();break;case"threads":t.threads=await aU();break;case"replication":t.replication=await cU();break;default:break}return t}a(vZ,"systemInformation")});var Nn=m((fpe,fU)=>{"use strict";var BZ=Xt(),NT=F(),HZ=require("util"),lo=g(),_U=$();_U.initSync();var qZ=iT(),dU=jt(),{Node:dpe,NodeSubscription:Epe}=Ra(),FZ=aa(),GZ=XD(),{RemotePayloadObject:xZ,RemotePayloadSubscription:kZ}=bu(),{handleHDBError:$Z,hdb_errors:VZ}=z(),{HTTP_STATUS_CODES:YZ,HDB_ERROR_MSGS:KZ}=VZ,WZ=os(),QZ=On(),zZ=ki(),{getDatabases:JZ}=(_e(),te(ye)),jZ=HZ.promisify(qZ.authorize),XZ=dU.searchByHash,ZZ=dU.searchByValue;fU.exports={authHeaderToUser:e5,isEmpty:t5,getNodeRecord:r5,upsertNodeRecord:s5,buildNodePayloads:n5,checkClusteringEnabled:i5,getAllNodeRecords:o5,getSystemInfo:a5,reverseSubscription:EU};async function e5(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await jZ(t,null),e}a(e5,"authHeaderToUser");function t5(e){return e==null}a(t5,"isEmpty");async function r5(e){let t=new FZ(lo.SYSTEM_SCHEMA_NAME,lo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return XZ(t)}a(r5,"getNodeRecord");async function s5(e){let t=new GZ(lo.SYSTEM_SCHEMA_NAME,lo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return BZ.upsert(t)}a(s5,"upsertNodeRecord");function EU(e){if(NT.isEmpty(e.subscribe)||NT.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(EU,"reverseSubscription");function n5(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,_=NT.getTableHashAttribute(u,l),{subscribe:d,publish:E}=EU(c),f=JZ()[u]?.[l],h=new kZ(u,l,_,E,d,c.start_time,f.schemaDefined&&f.attributes);n.push(h)}return new xZ(r,t,n,s)}a(n5,"buildNodePayloads");function i5(){if(!_U.get(lo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw $Z(new Error,KZ.CLUSTERING_NOT_ENABLED,YZ.BAD_REQUEST,void 0,void 0,!0)}a(i5,"checkClusteringEnabled");async function o5(){let e=new WZ(lo.SYSTEM_SCHEMA_NAME,lo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await ZZ(e))}a(o5,"getAllNodeRecords");async function a5(){let e=await QZ.getSystemInformation();return{hdb_version:zZ.version(),node_version:e.node_version,platform:e.platform}}a(a5,"getSystemInfo")});var bT=m((mpe,AU)=>{"use strict";var Kd=We(),hU=F(),mU=Me(),pU=g(),Wd=D(),SU=Dd(),c5=iu(),{RemotePayloadObject:u5}=bu(),{handleHDBError:TU,hdb_errors:l5}=z(),{HTTP_STATUS_CODES:gU}=l5,{NodeSubscription:RU}=Ra();AU.exports=_5;async function _5(e,t){let r;try{r=await Kd.request(`${t}.${mU.REQUEST_SUFFIX}`,new u5(pU.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Wd.trace("Response from remote describe all request:",r)}catch(o){Wd.error(`addNode received error from describe all request to remote node: ${o}`);let c=Kd.requestErrorHandler(o,"add_node",t);throw TU(new Error,c,gU.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===mU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw TU(new Error,o,gU.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===pU.SYSTEM_SCHEMA_NAME){await Kd.createLocalTableStream(c,u);let h=new RU(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=hU.doesSchemaExist(c),_=s[c]!==void 0,d=u?hU.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(Wd.trace(`addNode creating schema: ${c}`),await SU.createSchema({operation:"create_schema",schema:c})),!d&&E){Wd.trace(`addNode creating table: ${u} in schema: ${c}`);let h=new c5(c,u,s[c][u].hash_attribute);h.attributes=s[c][u].attributes,await SU.createTable(h)}await Kd.createLocalTableStream(c,u);let f=new RU(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(_5,"reviewSubscriptions")});var wu=m((Spe,bU)=>{"use strict";var{handleHDBError:Qd,hdb_errors:d5}=z(),{HTTP_STATUS_CODES:zd}=d5,{addUpdateNodeValidator:E5}=Fd(),yu=D(),NU=g(),OU=Me(),f5=F(),yT=We(),Iu=Nn(),h5=$(),m5=bT(),{Node:p5,NodeSubscription:S5}=Ra(),{broadcast:T5}=tt(),g5="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",R5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",A5=h5.get(NU.CONFIG_PARAMS.CLUSTERING_NODENAME);bU.exports=O5;async function O5(e,t=!1){yu.trace("addNode called with:",e),Iu.checkClusteringEnabled();let r=E5(e);if(r)throw Qd(r,r.message,zd.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Iu.getNodeRecord(s);if(!f5.isEmptyOrZeroLength(d))throw Qd(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,zd.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await m5(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=g5,o;let c=Iu.buildNodePayloads(n,A5,NU.OPERATIONS_ENUM.ADD_NODE,await Iu.getSystemInfo());yu.trace("addNode sending remote payload:",c);let u;try{u=await yT.request(`${s}.${OU.REQUEST_SUFFIX}`,c)}catch(d){yu.error(`addNode received error from request: ${d}`);let E=yT.requestErrorHandler(d,"add_node",s);throw Qd(new Error,E,zd.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===OU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw Qd(new Error,d,zd.INTERNAL_SERVER_ERROR,"error",d)}yu.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];yu.trace("Add node updating work stream for node:",s,"subscriptions:",f),await yT.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new S5(f.schema,f.table,f.publish,f.subscribe))}let _=new p5(s,l,u.system_info);return await Iu.upsertNodeRecord(_),T5({type:"nats_update"}),i.length>0?o.message=R5:o.message=`Successfully added '${s}' to manifest`,o}a(O5,"addNode")});var wT=m((gpe,wU)=>{"use strict";var{handleHDBError:Jd,hdb_errors:N5}=z(),{HTTP_STATUS_CODES:jd}=N5,{addUpdateNodeValidator:b5}=Fd(),Cu=D(),IU=g(),yU=Me(),y5=F(),IT=We(),Lu=Nn(),I5=$(),{cloneDeep:w5}=require("lodash"),C5=bT(),{NodeSubscription:L5}=Ra(),{broadcast:D5}=tt(),U5="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",M5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",P5=I5.get(IU.CONFIG_PARAMS.CLUSTERING_NODENAME);wU.exports=v5;async function v5(e){Cu.trace("updateNode called with:",e),Lu.checkClusteringEnabled();let t=b5(e);if(t)throw Jd(t,t.message,jd.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=w5(await Lu.getNodeRecord(r));if(y5.isEmptyOrZeroLength(s))throw Jd(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,jd.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await C5(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=U5,o;let c=Lu.buildNodePayloads(n,P5,IU.OPERATIONS_ENUM.UPDATE_NODE,await Lu.getSystemInfo());Cu.trace("updateNode sending remote payload:",c);let u;try{u=await IT.request(`${r}.${yU.REQUEST_SUFFIX}`,c)}catch(l){Cu.error(`updateNode received error from request: ${l}`);let _=IT.requestErrorHandler(l,"update_node",r);throw Jd(new Error,_,jd.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===yU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw Jd(new Error,l,jd.INTERNAL_SERVER_ERROR,"error",l)}Cu.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];Cu.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await IT.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await B5(s[0],n,u.system_info),i.length>0?o.message=M5:o.message=`Successfully updated '${r}'`,o}a(v5,"updateNode");async function B5(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 L5(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Lu.upsertNodeRecord(s),D5({type:"nats_update"})}a(B5,"updateNodeTable")});var MU=m((Ape,UU)=>{"use strict";var DU=require("joi"),{string:CU}=DU.types(),H5=He(),LU=g(),q5=$(),F5=Me();UU.exports=G5;function G5(e){let t=CU.invalid(q5.get(LU.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(F5.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=DU.object({operation:CU.valid(LU.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return H5.validateBySchema(e,r)}a(G5,"removeNodeValidator")});var Zd=m((Npe,FU)=>{"use strict";var{handleHDBError:PU,hdb_errors:x5}=z(),{HTTP_STATUS_CODES:vU}=x5,k5=MU(),Du=D(),BU=Nn(),$5=F(),Xd=g(),HU=Me(),qU=We(),V5=$(),{RemotePayloadObject:Y5}=bu(),{NodeSubscription:K5}=Ra(),W5=nu(),Q5=Xi(),{broadcast:z5}=tt(),J5=V5.get(Xd.CONFIG_PARAMS.CLUSTERING_NODENAME);FU.exports=j5;async function j5(e){Du.trace("removeNode called with:",e),BU.checkClusteringEnabled();let t=k5(e);if(t)throw PU(t,t.message,vU.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await BU.getNodeRecord(r);if($5.isEmptyOrZeroLength(s))throw PU(new Error,`Node '${r}' was not found.`,vU.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new Y5(Xd.OPERATIONS_ENUM.REMOVE_NODE,J5,[]),i,o=!1;try{i=await qU.request(`${r}.${HU.REQUEST_SUFFIX}`,n),Du.trace("Remove node reply from remote node:",r,i)}catch(u){Du.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];Du.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new K5(_.schema,_.table,!1,!1);await qU.updateWorkStream(d,r)}let c=new W5(Xd.SYSTEM_SCHEMA_NAME,Xd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Q5.deleteRecord(c),z5({type:"nats_update"}),i?.status===HU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Du.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(j5,"removeNode")});var kU=m((ype,xU)=>{"use strict";var GU=require("joi"),{string:X5,array:Z5}=GU.types(),e8=He(),t8=Fd();xU.exports=r8;function r8(e){let t=GU.object({operation:X5.valid("configure_cluster").required(),connections:Z5.items(t8.validation_schema).required()});return e8.validateBySchema(e,t)}a(r8,"configureClusterValidator")});var CT=m((wpe,WU)=>{"use strict";var s8=g(),eE=D(),n8=F(),i8=Zd(),o8=wu(),$U=Nn(),a8=kU(),{handleHDBError:VU,hdb_errors:c8}=z(),{HTTP_STATUS_CODES:YU}=c8,u8="Configure cluster complete.",l8="Failed to configure the cluster. Check the logs for more details.",_8="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";WU.exports=d8;async function d8(e){eE.trace("configure cluster called with:",e),$U.checkClusteringEnabled();let t=a8(e);if(t)throw VU(t,t.message,YU.BAD_REQUEST,void 0,void 0,!0);let r=await $U.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(KU(i8,{operation:s8.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);eE.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(KU(o8,f,f.node_name))}let c=await Promise.allSettled(i);eE.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"&&(eE.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let S=h?.value?.result;typeof S=="string"&&S.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(n8.isEmptyOrZeroLength(u))return{message:u8,connections:l};if(_)return{message:_8,failed_nodes:u,connections:l};throw VU(new Error,l8,YU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(d8,"configureCluster");async function KU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(KU,"functionWrapper")});var zU=m((Lpe,QU)=>{"use strict";var tE=require("joi"),E8=He(),{validateSchemaExists:f8,validateTableExists:h8,validateSchemaName:m8}=Ls(),p8=tE.object({operation:tE.string().valid("purge_stream"),schema:tE.string().custom(f8).custom(m8).required(),table:tE.string().custom(h8).required()});function S8(e){return E8.validateBySchema(e,p8)}a(S8,"purgeStreamValidator");QU.exports=S8});var LT=m((Upe,JU)=>{"use strict";var{handleHDBError:T8,hdb_errors:g8}=z(),{HTTP_STATUS_CODES:R8}=g8,A8=zU(),O8=We(),N8=Nn();JU.exports=b8;async function b8(e){let t=A8(e);if(t)throw T8(t,t.message,R8.BAD_REQUEST,void 0,void 0,!0);N8.checkClusteringEnabled();let{schema:r,table:s}=e;return await O8.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(b8,"purgeStream")});var sE=m((Ppe,rM)=>{"use strict";var UT=Nn(),y8=We(),ZU=$(),rE=g(),_o=Me(),I8=F(),DT=D(),{RemotePayloadObject:w8}=bu(),{ErrorCode:jU}=require("nats"),XU=ZU.get(rE.CONFIG_PARAMS.CLUSTERING_ENABLED),eM=ZU.get(rE.CONFIG_PARAMS.CLUSTERING_NODENAME);rM.exports={clusterStatus:C8,buildNodeStatus:tM};async function C8(){let e={node_name:eM,is_enabled:XU,connections:[]};if(!XU)return e;let t=await UT.getAllNodeRecords();if(I8.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(tM(t[s],e.connections));return await Promise.allSettled(r),e}a(C8,"clusterStatus");async function tM(e,t){let r=e.name,s=new w8(rE.OPERATIONS_ENUM.CLUSTER_STATUS,eM,void 0,await UT.getSystemInfo()),n,i,o=_o.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await y8.request(_o.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===_o.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=_o.CLUSTER_STATUS_STATUSES.CLOSED,DT.error(`Error getting node status from ${r} `,n))}catch(u){DT.warn(`Error getting node status from ${r}`,u),u.code===jU.NoResponders?o=_o.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===jU.Timeout?o=_o.CLUSTER_STATUS_STATUSES.TIMEOUT:o=_o.CLUSTER_STATUS_STATUSES.CLOSED}let c=new L8(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!==rE.PRE_4_0_0_VERSION&&await UT.upsertNodeRecord(u)}catch(u){DT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(tM,"buildNodeStatus");function L8(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(L8,"NodeStatusObject")});var iE=m((Bpe,sM)=>{"use strict";var{handleHDBError:D8,hdb_errors:U8}=z(),{HTTP_STATUS_CODES:M8}=U8,P8=We(),v8=Nn(),MT=F(),nE=require("joi"),B8=He(),H8=2e3,q8=nE.object({timeout:nE.number().min(1),connected_nodes:nE.boolean(),routes:nE.boolean()});sM.exports=F8;async function F8(e){v8.checkClusteringEnabled();let t=B8.validateBySchema(e,q8);if(t)throw D8(t,t.message,M8.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||MT.autoCastBoolean(s),o=n===void 0||MT.autoCastBoolean(n),c={nodes:[]},u=await P8.getServerList(r??H8),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(S=>S.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(S=>({host:S.split(":")[0],port:MT.autoCast(S.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(F8,"clusterNetwork")});var aM=m((qpe,oM)=>{"use strict";var PT=require("joi"),nM=He(),{route_constraints:iM}=up();oM.exports={setRoutesValidator:G8,deleteRoutesValidator:x8};function G8(e){let t=PT.object({server:PT.valid("hub","leaf").required(),routes:iM.required()});return nM.validateBySchema(e,t)}a(G8,"setRoutesValidator");function x8(e){let t=PT.object({routes:iM.required()});return nM.validateBySchema(e,t)}a(x8,"deleteRoutesValidator")});var aE=m((Gpe,_M)=>{"use strict";var Eo=et(),vT=F(),oE=g(),cM=aM(),{handleHDBError:uM,hdb_errors:k8}=z(),{HTTP_STATUS_CODES:lM}=k8,$8="cluster routes successfully set",V8="cluster routes successfully deleted";_M.exports={setRoutes:Y8,getRoutes:K8,deleteRoutes:W8};function Y8(e){let t=cM.setRoutesValidator(e);if(t)throw uM(t,t.message,lM.BAD_REQUEST,void 0,void 0,!0);let r=Eo.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=vT.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"?Eo.updateConfigValue(oE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Eo.updateConfigValue(oE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:$8,set:o,skipped:i}}a(Y8,"setRoutes");function K8(){let e=Eo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(K8,"getRoutes");function W8(e){let t=cM.deleteRoutesValidator(e);if(t)throw uM(t,t.message,lM.BAD_REQUEST,void 0,void 0,!0);let r=Eo.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 S=s[f];if(d.host===S.host&&d.port===S.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,S=n.length;h<S;h++){let p=n[h];if(d.host===p.host&&d.port===p.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=vT.isEmptyOrZeroLength(s)?null:s,Eo.updateConfigValue(oE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=vT.isEmptyOrZeroLength(n)?null:n,Eo.updateConfigValue(oE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:V8,deleted:i,skipped:o}}a(W8,"deleteRoutes")});var EM=m((kpe,dM)=>{"use strict";var Uu=require("alasql"),fo=require("recursive-iterator"),_s=D(),Q8=F(),Mu=g(),BT=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,J8(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=>Mu.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=>!Mu.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][Mu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=z8(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=>!Mu.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new Uu.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 z8(e){return e.filter(t=>t[Mu.PERMS_CRUD_ENUM.READ])}a(z8,"filterReadRestrictedAttrs");function J8(e,t,r,s,n){j8(e,t,r,s,n)}a(J8,"interpretAST");function Pu(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(Pu,"addSchemaTableToMap");function j8(e,t,r,s,n){if(!e){_s.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Uu.yy.Insert?t6(e,t,r):e instanceof Uu.yy.Select?X8(e,t,r,s,n):e instanceof Uu.yy.Update?Z8(e,t,r):e instanceof Uu.yy.Delete?e6(e,t,r):_s.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(j8,"getRecordAttributesAST");function X8(e,t,r,s,n){if(!e){_s.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Q8.isEmptyOrZeroLength(i)){_s.error("No schema specified");return}e.from.forEach(c=>{Pu(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Pu(c.table,t,r,s,n)});let o=new fo(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{_s.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 fo(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{_s.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 fo(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{_s.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 fo(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{_s.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(X8,"getSelectAttributes");function Z8(e,t,r){if(!e){_s.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new fo(e.columns),n=e.table.databaseid;Pu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&HT(e.table.tableid,n,i.columnid,t,r)}a(Z8,"getUpdateAttributes");function e6(e,t,r){if(!e){_s.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new fo(e.where),n=e.table.databaseid;Pu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&HT(e.table.tableid,n,i.columnid,t,r)}a(e6,"getDeleteAttributes");function t6(e,t,r){if(!e){_s.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new fo(e.columns),n=e.into.databaseid;Pu(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&HT(e.into.tableid,n,i.columnid,t,r)}a(t6,"getInsertAttributes");function HT(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(HT,"pushAttribute");dM.exports=BT});var uE=m((Vpe,pM)=>{var cE=Qc(),fM=require("chalk"),wr=D(),hM=require("prompt"),{promisify:r6}=require("util"),qT=g(),s6=require("fs-extra"),n6=require("path"),i6=F(),o6=ki(),mM=$();mM.initSync();var a6=require("moment"),c6=r6(hM.get),u6=n6.join(mM.getHdbBasePath(),qT.LICENSE_KEY_DIR_NAME,qT.LICENSE_FILE_NAME,qT.LICENSE_FILE_NAME);pM.exports={getFingerprint:_6,setLicense:l6,parseLicense:FT,register:d6,getRegistrationInfo:f6};async function l6(e){if(e&&e.key&&e.company){try{wr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await FT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw wr.error(r),wr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(l6,"setLicense");async function _6(){let e={};try{e=await cE.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw wr.error(r),wr.error(t),new Error(r)}return e}a(_6,"getFingerprint");async function FT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");wr.info("Validating license input...");let r=cE.validateLicense(e,t);if(wr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(wr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(wr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{wr.info("writing license to disk"),await s6.writeFile(u6,JSON.stringify({license_key:e,company:t}))}catch(s){throw wr.error("Failed to write License"),s}return"Registration successful."}a(FT,"parseLicense");async function d6(){let e=await E6();return FT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(d6,"register");async function E6(){let e=await cE.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:fM.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:fM.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{hM.start()}catch(s){wr.error(s)}let r;try{r=await c6(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(E6,"promptForRegistration");async function f6(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await cE.getLicense()}catch(r){throw wr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(i6.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=o6.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=a6.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(f6,"getRegistrationInfo")});var TM=m((Kpe,SM)=>{"use strict";var h6=Me(),GT=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+h6.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"}};SM.exports=GT});var AM=m((Qpe,RM)=>{"use strict";var gM=Me(),xT=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+gM.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+gM.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"}};RM.exports=xT});var NM=m((Jpe,OM)=>{"use strict";var kT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};OM.exports=kT});var yM=m((Xpe,bM)=>{"use strict";var m6=Me(),$T=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+m6.SERVER_SUFFIX.ADMIN,this.password=r}};bM.exports=$T});var mE=m((eSe,CM)=>{"use strict";var vu=require("path"),EE=require("fs-extra"),p6=TM(),S6=AM(),T6=NM(),g6=yM(),VT=er(),Aa=F(),cr=et(),dE=g(),lE=Me(),{CONFIG_PARAMS:nt}=dE,Hu=D(),fE=$(),IM=hn(),YT=We(),Bu="clustering",R6=1e4,wM=5;CM.exports={generateNatsConfig:A6,removeNatsConfig:O6};async function A6(e=!1,t=void 0){fE.initSync();let r=fE.get(nt.ROOTPATH),s=vu.join(r,Bu,lE.PID_FILES.HUB),n=vu.join(r,Bu,lE.PID_FILES.LEAF),i=cr.getConfigFromFile(nt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=vu.join(r,Bu,lE.NATS_CONFIG_FILES.HUB_SERVER),c=vu.join(r,Bu,lE.NATS_CONFIG_FILES.LEAF_SERVER),u=cr.getConfigFromFile(nt.CLUSTERING_TLS_CERTIFICATE),l=cr.getConfigFromFile(nt.CLUSTERING_TLS_PRIVATEKEY),_=cr.getConfigFromFile(nt.CLUSTERING_TLS_CERT_AUTH),d=cr.getConfigFromFile(nt.CLUSTERING_TLS_INSECURE),E=cr.getConfigFromFile(nt.CLUSTERING_TLS_VERIFY),f=cr.getConfigFromFile(nt.CLUSTERING_NODENAME),h=cr.getConfigFromFile(nt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await YT.checkNATSServerInstalled()||hE("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await VT.listUsers(),p=cr.getConfigFromFile(nt.CLUSTERING_USER),b=await VT.getClusterUser();(Aa.isEmpty(b)||b.active!==!0)&&hE(`Invalid cluster user '${p}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await _E(nt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await _E(nt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await _E(nt.CLUSTERING_HUBSERVER_NETWORK_PORT),await _E(nt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let R=[],P=[];for(let[Oe,Tt]of S.entries())Tt.role.role===dE.ROLE_TYPES_ENUM.CLUSTER_USER&&Tt.active&&(R.push(new g6(Tt.username,IM.decrypt(Tt.hash))),P.push(new T6(Tt.username,IM.decrypt(Tt.hash))));let V=[],{hub_routes:O}=cr.getClusteringRoutes();if(!Aa.isEmptyOrZeroLength(O))for(let Oe of O)V.push(`tls://${b.sys_name_encoded}:${b.uri_encoded_d_hash}@${Oe.host}:${Oe.port}`);let w=new p6(cr.getConfigFromFile(nt.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,cr.getConfigFromFile(nt.CLUSTERING_HUBSERVER_CLUSTER_NAME),cr.getConfigFromFile(nt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),V,R,P);_==null&&(delete w.tls.ca_file,delete w.leafnodes.tls.ca_file),t=Aa.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===dE.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await EE.writeJson(o,w),Hu.trace(`Hub server config written to ${o}`));let x=`tls://${b.sys_name_encoded}:${b.uri_encoded_d_hash}@0.0.0.0:${h}`,k=`tls://${b.uri_encoded_name}:${b.uri_encoded_d_hash}@0.0.0.0:${h}`,J=new S6(cr.getConfigFromFile(nt.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[x],[k],R,P,u,l,_,d);_==null&&delete J.tls.ca_file,(t===void 0||t===dE.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await EE.writeJson(c,J),Hu.trace(`Leaf server config written to ${c}`))}a(A6,"generateNatsConfig");async function _E(e){let t=fE.get(e);return Aa.isEmpty(t)&&hE(`port undefined for '${e}'`),await Aa.isPortTaken(t)&&hE(`'${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(_E,"isPortAvailable");function hE(e){let t=`Error generating clustering config: ${e}`;Hu.error(t),console.error(t),process.exit(1)}a(hE,"generateNatsConfigError");async function O6(e){let{port:t,config_file:r}=YT.getServerConfig(e),{username:s,decrypt_hash:n}=await VT.getClusterUser(),i=0,o=500;for(;i<wM;){try{let l=await YT.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){Hu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=wM)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 Aa.async_set_timeout(o*i)}let c="0".repeat(R6),u=vu.join(fE.get(nt.ROOTPATH),Bu,r);await EE.writeFile(u,c),await EE.remove(u),Hu.notify(e,"started.")}a(O6,"removeNatsConfig")});var vM=m((rSe,PM)=>{"use strict";var Cr=$(),N6=Qc(),ue=g(),qu=Me(),bn=require("path"),{PACKAGE_ROOT:SE}=g(),LM=$(),pE=F(),Oa="/dev/null",b6=bn.join(SE,"launchServiceScripts"),DM=bn.join(SE,"utility/scripts"),y6=bn.join(DM,ue.HDB_RESTART_SCRIPT),UM=bn.resolve(SE,"dependencies",`${process.platform}-${process.arch}`,qu.NATS_BINARY_NAME);function MM(){let t=N6.licenseSearch().ram_allocation||ue.RAM_ALLOCATION_ENUM.DEFAULT,r=ue.MEM_SETTING_KEY+t,s={[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return pE.noBootFile()&&(s[ue.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=pE.getEnvCliRootPath()),{name:ue.PROCESS_DESCRIPTORS.HDB,script:ue.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:SE}}a(MM,"generateMainServerConfig");var I6=9930;function w6(){Cr.initSync(!0);let e=Cr.get(ue.CONFIG_PARAMS.ROOTPATH),t=bn.join(e,"clustering",qu.NATS_CONFIG_FILES.HUB_SERVER),r=bn.join(Cr.get(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ue.LOG_NAMES.HDB),s=LM.get(ue.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=qu.LOG_LEVEL_FLAGS[Cr.get(ue.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==I6?"-"+s:""),script:UM,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Cr.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Oa,i.error_file=Oa),i}a(w6,"generateNatsHubServerConfig");var C6=9940;function L6(){Cr.initSync(!0);let e=Cr.get(ue.CONFIG_PARAMS.ROOTPATH),t=bn.join(e,"clustering",qu.NATS_CONFIG_FILES.LEAF_SERVER),r=bn.join(Cr.get(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ue.LOG_NAMES.HDB),s=LM.get(ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=qu.LOG_LEVEL_FLAGS[Cr.get(ue.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==C6?"-"+s:""),script:UM,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Cr.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Oa,i.error_file=Oa),i}a(L6,"generateNatsLeafServerConfig");function D6(){Cr.initSync();let e=bn.join(Cr.get(ue.CONFIG_PARAMS.LOGGING_ROOT),ue.LOG_NAMES.HDB),t={name:ue.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ue.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:b6,autorestart:!1};return Cr.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Oa,t.error_file=Oa),t}a(D6,"generateClusteringUpgradeV4ServiceConfig");function U6(){let e={[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.RESTART_HDB};return pE.noBootFile()&&(e[ue.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=pE.getEnvCliRootPath()),{...{name:ue.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:DM},script:y6}}a(U6,"generateRestart");function M6(){return{apps:[MM()]}}a(M6,"generateAllServiceConfigs");PM.exports={generateAllServiceConfigs:M6,generateMainServerConfig:MM,generateRestart:U6,generateNatsHubServerConfig:w6,generateNatsLeafServerConfig:L6,generateClusteringUpgradeV4ServiceConfig:D6}});var Na=m((uSe,zM)=>{"use strict";var Ae=g(),P6=F(),Fu=mE(),Gu=We(),qs=Me(),Ei=vM(),TE=$(),yn=D(),v6=Nn(),{startWorker:BM,onMessageFromWorkers:B6}=tt(),H6=On(),q6=require("util"),qM=require("child_process"),{execFile:F6}=qM,nSe=q6.promisify(qM.exec),iSe=require("systeminformation"),me;zM.exports={enterPM2Mode:G6,start:ho,stop:KT,reload:FM,restart:GM,list:WT,describe:kM,connect:In,kill:Y6,startAllServices:K6,startService:QT,getUniqueServicesList:$M,restartAllServices:W6,isServiceRegistered:VM,reloadStopStart:YM,restartHdb:xM,deleteProcess:$6,startClusteringProcesses:WM,startClusteringThreads:QM,isHdbRestartRunning:V6,isClusteringRunning:z6,stopClustering:Q6,reloadClustering:J6};var{PACKAGE_ROOT:oSe}=g(),aSe=g(),{loggerWithTag:cSe}=yn,xu=!1;B6(e=>{e.type==="restart"&&TE.initSync(!0)});function G6(){xu=!0}a(G6,"enterPM2Mode");function In(){return me||(me=require("pm2")),new Promise((e,t)=>{me.connect((r,s)=>{yn.setupConsoleLogging(),r&&t(r),e(s)})})}a(In,"connect");var ur,x6=10,HM;function ho(e){if(xu)return k6(e);let t=F6(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=ur.indexOf(t);i>-1&&ur.splice(i,1),!HM&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<x6&&ho(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=TE.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&qs.LOG_LEVEL_HIERARCHY[i]>=qs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===qs.LOG_LEVELS.ERR||l===qs.LOG_LEVELS.WRN?yn.OUTPUTS.STDERR:yn.OUTPUTS.STDOUT;yn.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=qs.LOG_LEVELS[d]}if(qs.LOG_LEVEL_HIERARCHY[i]>=qs.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===qs.LOG_LEVELS.ERR||l===qs.LOG_LEVELS.WRN?yn.OUTPUTS.STDERR:yn.OUTPUTS.STDOUT;yn.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!ur){ur=[];let n=a(()=>{HM=!0,ur&&(ur.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)}ur.push(t)}a(ho,"start");function k6(e){return new Promise(async(t,r)=>{try{await In()}catch(s){r(s)}me.start(e,(s,n)=>{s&&(me.disconnect(),r(s)),me.disconnect(),t(n)})})}a(k6,"startWithPM2");function KT(e){if(!xu){for(let t of ur||[])t.name===e&&(ur.splice(ur.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await In()}catch(s){r(s)}me.stop(e,async(s,n)=>{s&&(me.disconnect(),r(s)),me.delete(e,(i,o)=>{i&&(me.disconnect(),r(s)),me.disconnect(),t(o)})})})}a(KT,"stop");function FM(e){return new Promise(async(t,r)=>{try{await In()}catch(s){r(s)}me.reload(e,(s,n)=>{s&&(me.disconnect(),r(s)),me.disconnect(),t(n)})})}a(FM,"reload");function GM(e){if(!xu)for(let t of ur||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await In()}catch(s){r(s)}me.restart(e,(s,n)=>{me.disconnect(),t(n)})})}a(GM,"restart");function $6(e){return new Promise(async(t,r)=>{try{await In()}catch(s){r(s)}me.delete(e,(s,n)=>{s&&(me.disconnect(),r(s)),me.disconnect(),t(n)})})}a($6,"deleteProcess");async function xM(){await ho(Ei.generateRestart())}a(xM,"restartHdb");async function V6(){let e=await WT();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(V6,"isHdbRestartRunning");function WT(){return new Promise(async(e,t)=>{try{await In()}catch(r){t(r)}me.list((r,s)=>{r&&(me.disconnect(),t(r)),me.disconnect(),e(s)})})}a(WT,"list");function kM(e){return new Promise(async(t,r)=>{try{await In()}catch(s){r(s)}me.describe(e,(s,n)=>{s&&(me.disconnect(),r(s)),me.disconnect(),t(n)})})}a(kM,"describe");function Y6(){if(!xu){for(let e of ur||[])e.kill();ur=[];return}return new Promise(async(e,t)=>{try{await In()}catch(r){t(r)}me.killDaemon((r,s)=>{r&&(me.disconnect(),t(r)),me.disconnect(),e(s)})})}a(Y6,"kill");async function K6(){try{await WM(),await QM(),await ho(Ei.generateAllServiceConfigs())}catch(e){throw me.disconnect(),e}}a(K6,"startAllServices");async function QT(e){try{let t;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Ei.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Ei.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Ei.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Ei.generateNatsHubServerConfig(),await ho(t),await Fu.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Ei.generateNatsLeafServerConfig(),await ho(t),await Fu.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Ei.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ho(t)}catch(t){throw me.disconnect(),t}}a(QT,"startService");async function $M(){try{let e=await WT(),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 me.disconnect(),e}}a($M,"getUniqueServicesList");async function W6(e=[]){try{let t=!1,r=await $M();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ae.PROCESS_DESCRIPTORS.HDB?t=!0:await GM(o))}t&&await YM(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw me.disconnect(),t}}a(W6,"restartAllServices");async function VM(e){if(ur?.find(r=>r.name===e))return!0;let t=await H6.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(VM,"isServiceRegistered");async function YM(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?TE.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):TE.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await kM(e),s=P6.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await KT(e),await QT(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await xM():await FM(e)}a(YM,"reloadStopStart");var KM;async function WM(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];await QT(t)}}a(WM,"startClusteringProcesses");async function QM(){KM=BM(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Gu.createWorkQueueStream(qs.WORK_QUEUE_CONSUMER_NAMES),await Gu.updateIngestStreamConsumer(),await Gu.updateLocalStreams();let e=await v6.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){yn.info("Starting clustering upgrade 4.0.0 process"),BM(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(QM,"startClusteringThreads");async function Q6(){for(let e in Ae.CLUSTERING_PROCESSES)if(e!==Ae.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ae.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await KM.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await KT(t)}}a(Q6,"stopClustering");async function z6(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await VM(t)===!1)return!1}return!0}a(z6,"isClusteringRunning");async function J6(){await Fu.generateNatsConfig(!0),await Gu.reloadNATSHub(),await Gu.reloadNATSLeaf(),await Fu.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Fu.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(J6,"reloadClustering")});var ya=m((_Se,tP)=>{"use strict";var j6=require("minimist"),{isMainThread:jT,parentPort:XM}=require("worker_threads"),ke=g(),{PROCESS_DESCRIPTORS_VALIDATE:ku}=ke,Fs=D(),XT=F(),gE=mE(),ba=We(),zT=Me(),ZM=et(),Gs=Na(),JM=On(),X6=Fi(),{restartWorkers:RE,onMessageByType:Z6}=tt(),{handleHDBError:e9,hdb_errors:t9}=z(),{HTTP_STATUS_CODES:r9}=t9,AE=$();AE.initSync();var $u=`Restarting HarperDB. This may take up to ${ke.RESTART_TIMEOUT_MS/1e3} seconds.`,s9="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",jM="Clustering is not enabled so cannot be restarted",n9="Invalid service",mo,ds;tP.exports={restart:eP,restartService:ZT};jT&&Z6(ke.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?ZT({service:e.workerType}):eP({operation:"restart"})});async function eP(e){ds=Object.keys(e).length===0,mo=await Gs.isServiceRegistered(ke.HDB_PROC_DESCRIPTOR);let t=j6(process.argv);if(t.service){await ZT(t);return}if(ds&&!mo){console.error(s9);return}if(ds&&console.log($u),mo){Gs.enterPM2Mode(),Fs.notify($u);let r=X6(Object.keys(ke.CONFIG_PARAM_MAP),!0);return XT.isEmptyOrZeroLength(Object.keys(r))||ZM.updateConfigValue(void 0,void 0,r,!0,!0),o9(),$u}return jT?(Fs.notify($u),await eg(),setTimeout(()=>{RE()},50)):XM.postMessage({type:ke.ITC_EVENT_TYPES.RESTART}),$u}a(eP,"restart");async function ZT(e){let{service:t}=e;if(ke.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw e9(new Error,n9,r9.BAD_REQUEST,void 0,void 0,!0);if(mo=await Gs.isServiceRegistered(ke.HDB_PROC_DESCRIPTOR),!jT)return XM.postMessage({type:ke.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case ku.clustering:if(!AE.get(ke.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=jM;break}ds&&console.log("Restarting clustering"),Fs.notify("Restarting clustering"),await eg();break;case ku.clustering_config:case ku["clustering config"]:if(!AE.get(ke.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=jM;break}ds&&console.log("Restarting clustering_config"),Fs.notify("Restarting clustering_config"),await Gs.reloadClustering();break;case"custom_functions":case"custom functions":case ku.harperdb:case ku.http_workers:if(ds&&!mo){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}ds&&console.log("Restarting http_workers"),Fs.notify("Restarting http_workers"),mo?await Gs.restart(ke.HDB_PROC_DESCRIPTOR):setTimeout(()=>{RE("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Fs.error(r),ds&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(ZT,"restartService");async function i9(){await ba.publishToStream(`${zT.SUBJECT_PREFIXES.TXN}.${zT.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,zT.WORK_QUEUE_CONSUMER_NAMES.stream_name,ba.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(i9,"postDummyNatsMsg");async function o9(){await eg(),await Gs.restart(ke.HDB_PROC_DESCRIPTOR),await XT.async_set_timeout(2e3),AE.get(ke.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await JT(),ds&&(await ba.closeConnection(),process.exit(0))}a(o9,"restartPM2Mode");async function eg(){if(!ZM.getConfigFromFile(ke.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await JM.getHDBProcessInfo()).clustering.length===0)Fs.trace("Clustering not running, restart will start clustering services"),await gE.generateNatsConfig(!0),await Gs.startClusteringProcesses(),await Gs.startClusteringThreads(),await JT(),ds&&await ba.closeConnection();else{await i9(),await gE.generateNatsConfig(!0),mo?(Fs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Gs.restart(ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Gs.restart(ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await JM.getHDBProcessInfo()).clustering.forEach(n=>{Fs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await XT.async_set_timeout(3e3),await JT(),await ba.updateLocalStreams(),ds&&await ba.closeConnection(),Fs.trace("Restart clustering restarting ingest and reply service threads");let t=RE(ke.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=RE(ke.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(eg,"restartClustering");async function JT(){await gE.removeNatsConfig(ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await gE.removeNatsConfig(ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(JT,"removeNatsConfig")});var dP=m((fSe,_P)=>{"use strict";var ESe=require("lodash"),lr=g(),{handleHDBError:rP,hdb_errors:a9}=z(),{HDB_ERROR_MSGS:c9,HTTP_STATUS_CODES:u9}=a9,tg=D();_P.exports={getRolePermissions:_9};var po=Object.create(null),l9=a(e=>({key:e,perms:{}}),"perms_template_obj"),oP=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),aP=a((e=!1,t=!1,r=!1,s=!1)=>({[lr.PERMS_CRUD_ENUM.READ]:e,[lr.PERMS_CRUD_ENUM.INSERT]:t,[lr.PERMS_CRUD_ENUM.UPDATE]:r,[lr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),rg=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...aP(t,r,s,n)}),"table_perms_template"),sP=a((e,t=aP())=>({attribute_name:e,describe:lP(t),[Vu]:t[Vu],[sg]:t[sg],[ng]:t[ng]}),"attr_perms_template"),nP=a((e,t=!1)=>({attribute_name:e,describe:t,[Vu]:t}),"timestamp_attr_perms_template"),{READ:Vu,INSERT:sg,UPDATE:ng}=lr.PERMS_CRUD_ENUM,cP=Object.values(lr.PERMS_CRUD_ENUM),uP=[Vu,sg,ng];function _9(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[lr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(po[t]&&po[t].key===s)return po[t].perms;let n=d9(e,r);return po[t]?po[t].key=s:po[t]=l9(s),po[t].perms=n,n}catch(r){if(!e[lr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[lr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<lr.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 tg.error(s),tg.debug(r),rP(new Error,c9.OUTDATED_PERMS_TRANSLATION_ERROR,u9.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
10
|
-
${r.stack}`;throw tg.error(s),rP(new Error)}}}a(_9,"getRolePermissions");function d9(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[lr.SYSTEM_SCHEMA_NAME]=s[lr.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]=E9(t[i]);return}r[i]=oP(),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=f9(c,u);r[i].describe||cP.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=rg()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=rg()})}),r}a(d9,"translateRolePermissions");function E9(e){let t=oP(!0);return Object.keys(e).forEach(r=>{t.tables[r]=rg(!0,!0,!0,!0,!0)}),t}a(E9,"createStructureUserPermissions");function f9(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 lr.TIME_STAMP_NAMES.includes(d)&&(E=nP(d,_[Vu])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=sP(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=lP(_),n.attribute_permissions.push(_),c||h9(_,u)}else if(l!==o){let _;lr.TIME_STAMP_NAMES.includes(l)?_=nP(l):_=sP(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=iP(n),n}else return e.describe=iP(e),e}a(f9,"getTableAttrPerms");function iP(e){return cP.filter(t=>e[t]).length>0}a(iP,"getSchemaTableDescribePerm");function lP(e){return uP.filter(t=>e[t]).length>0}a(lP,"getAttributeDescribePerm");function h9(e,t){uP.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(h9,"checkForHashPerms")});var EP={};je(EP,{Resources:()=>OE,keyArrayToString:()=>Ia,resetResources:()=>m9,resources:()=>fi});function m9(){return fi=new OE}function Ia(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var OE,fi,Yu=ge(()=>{Vi();OE=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 Xe(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(m9,"resetResources");a(Ia,"keyArrayToString")});var Ku={};je(Ku,{authentication:()=>TP,login:()=>b9,logout:()=>y9,start:()=>N9});async function TP(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?g9?T9:[]:S9?p9:[];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 NE&&(h["Access-Control-Allow-Credentials"]="true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),NE&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(NE){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let S=n.indexOf(";",h),p=n.indexOf("=",h);c=n.slice(p+1,S===-1?n.length:S),u=await hP.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,S)=>{let p=new IE.AuthAuditLog(f,h,Lt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);p.auth_strategy=S,c&&(p.session_id=c),e.headers.referer&&(p.referer=e.headers.referer),e.headers.origin&&(p.origin=e.headers.origin),h===Lt.AUTH_AUDIT_STATUS.SUCCESS?fP.notify(p):fP.error(p)},"authAuditLog"),_;if(s){if(_=wa.get(s),!_){let[f,h]=s.split(" "),S,p;try{switch(f){case"Basic":[S,p]=atob(h).split(":"),_=S||p?await bt.auth(S,p):null;break;case"Bearer":try{_=await(0,yE.validateOperationToken)(h)}catch(b){if(b.message==="invalid token")try{return await(0,yE.validateRefreshToken)(h),{status:-1}}catch{throw b}}break}}catch(b){return O9&&(wa.get(h)||(wa.set(h,h),l(S,Lt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:wn({error:b.message},e)}}wa.set(s,_),A9&&l(_.username,Lt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await bt.auth(u.user,null,!1):R9&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,bE.getSuperUser)());NE&&(e.session.update=function(f){if(!c){c=(0,pP.v4)();let S=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${c}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("set-cookie",S):d?.headers?.set&&d.headers.set("set-cookie",S)}return f.id=c,hP.put(f)},e.login=async function(f,h){e.user=await bt.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")&&fi.loginPath?(d.status=302,d.headers.Location=fi.loginPath(e)):d.headers["WWW-Authenticate"]="Basic");let E=o.length;if(E>0){let f=d.headers;f||(d.headers=f={});for(let h=0;h<E;){let S=o[h++];f[S]=o[h++]}}return o=null,d}function N9({server:e,port:t}){e.request(TP,{port:t||"all"}),mP||(mP=!0,setInterval(()=>{wa=new Map},Kr.get(Lt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),SP.user.addListener(()=>{wa=new Map}))}async function b9(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 y9(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var bE,yE,pP,Kr,Lt,IE,SP,fP,p9,S9,T9,g9,hP,NE,R9,A9,O9,wa,mP,wE=ge(()=>{bE=U(er());ln();Yu();yE=U(Nu());_e();pP=require("uuid"),Kr=U($()),Lt=U(g()),IE=U(D());Ca();SP=U(Jc()),fP=(0,IE.loggerWithTag)("auth-event");Kr.initSync();p9=Kr.get(Lt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),S9=Kr.get(Lt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),T9=Kr.get(Lt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),g9=Kr.get(Lt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);bt.auth=bE.findAndValidateUser;hP=dt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),NE=Kr.get(Lt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,R9=Kr.get(Lt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,A9=Kr.get(Lt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,O9=Kr.get(Lt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,wa=new Map;a(TP,"authentication");a(N9,"start");a(b9,"login");a(y9,"logout")});var yP=m((OSe,bP)=>{"use strict";var pe=require("joi"),gP=require("fs-extra"),RP=require("path"),Ln=He(),AP=$(),OP=g(),NP=D(),{hdb_errors:I9}=z(),{HDB_ERROR_MSGS:kt}=I9,Cn=/^[a-zA-Z0-9-_]+$/;bP.exports={getDropCustomFunctionValidator:C9,setCustomFunctionValidator:L9,addComponentValidator:P9,dropCustomFunctionProjectValidator:v9,packageComponentValidator:B9,deployComponentValidator:H9,setComponentFileValidator:D9,getComponentFileValidator:M9,dropComponentFileValidator:U9};function CE(e,t,r){try{let s=AP.get(OP.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=RP.join(s,t);return gP.existsSync(n)?e?t:r.message(kt.PROJECT_EXISTS):e?r.message(kt.NO_PROJECT):t}catch(s){return NP.error(s),r.message(kt.VALIDATION_ERR)}}a(CE,"checkProjectExists");function Wu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Wu,"checkFilePath");function w9(e,t,r,s){try{let n=AP.get(OP.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=RP.join(n,e,t,r+".js");return gP.existsSync(i)?r:s.message(kt.NO_FILE)}catch(n){return NP.error(n),s.message(kt.VALIDATION_ERR)}}a(w9,"checkFileExists");function C9(e){let t=pe.object({project:pe.string().pattern(Cn).custom(CE.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),type:pe.string().valid("helpers","routes").required(),file:pe.string().pattern(Cn).custom(w9.bind(null,e.project,e.type)).custom(Wu).required().messages({"string.pattern.base":kt.BAD_FILE_NAME})});return Ln.validateBySchema(e,t)}a(C9,"getDropCustomFunctionValidator");function L9(e){let t=pe.object({project:pe.string().pattern(Cn).custom(CE.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),type:pe.string().valid("helpers","routes").required(),file:pe.string().custom(Wu).required(),function_content:pe.string().required()});return Ln.validateBySchema(e,t)}a(L9,"setCustomFunctionValidator");function D9(e){let t=pe.object({project:pe.string().pattern(Cn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),file:pe.string().custom(Wu).required(),payload:pe.string().optional(),encoding:pe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ln.validateBySchema(e,t)}a(D9,"setComponentFileValidator");function U9(e){let t=pe.object({project:pe.string().pattern(Cn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),file:pe.string().custom(Wu).optional()});return Ln.validateBySchema(e,t)}a(U9,"dropComponentFileValidator");function M9(e){let t=pe.object({project:pe.string().required(),file:pe.string().custom(Wu).required(),encoding:pe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ln.validateBySchema(e,t)}a(M9,"getComponentFileValidator");function P9(e){let t=pe.object({project:pe.string().pattern(Cn).custom(CE.bind(null,!1)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(P9,"addComponentValidator");function v9(e){let t=pe.object({project:pe.string().pattern(Cn).custom(CE.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(v9,"dropCustomFunctionProjectValidator");function B9(e){let t=pe.object({project:pe.string().pattern(Cn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),skip_node_modules:pe.boolean()});return Ln.validateBySchema(e,t)}a(B9,"packageComponentValidator");function H9(e){let t=pe.object({project:pe.string().pattern(Cn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),payload:pe.string().optional().messages({"string.pattern.base":kt.BAD_PACKAGE}),package:pe.string().optional()});return Ln.validateBySchema(e,t)}a(H9,"deployComponentValidator")});var DE=m((bSe,CP)=>{"use strict";var Ce=require("fs-extra"),ig=require("fast-glob"),Se=require("path"),IP=require("tar-fs"),q9=require("uuid").v4,og=require("normalize-path"),xs=yP(),Dt=D(),Ue=g(),ze=$(),LE=et(),F9=F(),{PACKAGE_ROOT:G9}=g(),{handleHDBError:ft,hdb_errors:x9}=z(),{HDB_ERROR_MSGS:hi,HTTP_STATUS_CODES:ht}=x9,k9=Se.join(G9,"application-template"),ag=Se.join(ze.get(Ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function wP(){let e=ze.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw ft(new Error,hi.NOT_ENABLED,ht.BAD_REQUEST,void 0,void 0,!0)}a(wP,"isCFEnabled");function $9(){Dt.trace("getting custom api status");let e={};try{e={is_enabled:ze.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:ze.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:ze.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw ft(new Error,hi.FUNCTION_STATUS,ht.INTERNAL_SERVER_ERROR,Dt.ERR,t)}return e}a($9,"customFunctionsStatus");function V9(){Dt.trace("getting custom api endpoints");let e={},t=ze.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{ig.sync(og(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:ig.sync(og(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:ig.sync(og(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw ft(new Error,hi.GET_FUNCTIONS,ht.INTERNAL_SERVER_ERROR,Dt.ERR,r)}return e}a(V9,"getCustomFunctions");function Y9(e){e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=xs.getDropCustomFunctionValidator(e);if(t)throw ft(t,t.message,ht.BAD_REQUEST);Dt.trace("getting custom api endpoint file content");let r=ze.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=Se.join(r,s,n,i+".js");try{return Ce.readFileSync(o,{encoding:"utf8"})}catch(c){throw ft(new Error,hi.GET_FUNCTION,ht.INTERNAL_SERVER_ERROR,Dt.ERR,c)}}a(Y9,"getCustomFunction");function K9(e){wP(),e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=xs.setCustomFunctionValidator(e);if(t)throw ft(t,t.message,ht.BAD_REQUEST);Dt.trace("setting custom function file content");let r=ze.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return Ce.outputFileSync(Se.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw ft(new Error,hi.SET_FUNCTION,ht.INTERNAL_SERVER_ERROR,Dt.ERR,c)}}a(K9,"setCustomFunction");function W9(e){e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=xs.getDropCustomFunctionValidator(e);if(t)throw ft(t,t.message,ht.BAD_REQUEST);Dt.trace("dropping custom function file");let r=ze.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return Ce.unlinkSync(Se.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw ft(new Error,hi.DROP_FUNCTION,ht.INTERNAL_SERVER_ERROR,Dt.ERR,o)}}a(W9,"dropCustomFunction");function Q9(e){wP(),e.project&&(e.project=Se.parse(e.project).name);let t=xs.addComponentValidator(e);if(t)throw ft(t,t.message,ht.BAD_REQUEST);Dt.trace("adding component");let r=ze.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=Se.join(r,s);return Ce.mkdirSync(n,{recursive:!0}),Ce.copySync(k9,n),`Successfully added project: ${s}`}catch(n){throw ft(new Error,hi.ADD_FUNCTION,ht.INTERNAL_SERVER_ERROR,Dt.ERR,n)}}a(Q9,"addComponent");function z9(e){e.project&&(e.project=Se.parse(e.project).name);let t=xs.dropCustomFunctionProjectValidator(e);if(t)throw ft(t,t.message,ht.BAD_REQUEST);Dt.trace("dropping custom function project");let r=ze.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=ze.get(Ue.CONFIG_PARAMS.APPS);if(!F9.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 LE.updateConfigValue(Ue.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=Se.join(r,s);return Ce.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw ft(new Error,hi.DROP_FUNCTION_PROJECT,ht.INTERNAL_SERVER_ERROR,Dt.ERR,i)}}a(z9,"dropCustomFunctionProject");async function J9(e){e.project&&(e.project=Se.parse(e.project).name);let t=xs.packageComponentValidator(e);if(t)throw ft(t,t.message,ht.BAD_REQUEST);let r=ze.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;Dt.trace("packaging component",s);let n;try{n=await Ce.realpath(Se.join(r,s))}catch(u){if(u.code!==Ue.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Ce.realpath(Se.join(ze.get(Ue.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(l){if(l.code===Ue.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Ce.ensureDir(ag);let i=Se.join(ag,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(Se.join(n,"node_modules"))}),IP.pack(n,o).pipe(Ce.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Ce.readFileSync(i,{encoding:"base64"});return await Ce.remove(i),{project:s,payload:c}}a(J9,"packageComponent");async function j9(e){e.project&&(e.project=Se.parse(e.project).name);let t=xs.deployComponentValidator(e);if(t)throw ft(t,t.message,ht.BAD_REQUEST);let r=ze.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,package:i}=e;if(Dt.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 Ce.ensureDir(o);let c,u;do c=Se.join(ag,q9()+".tar"),u=await Ce.pathExists(c);while(u);await Ce.outputFile(c,n,{encoding:"base64"});let l=Ce.createReadStream(c);l.pipe(IP.extract(o)),await new Promise(_=>l.on("end",_)),await Ce.unlink(c)}return LE.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a(j9,"deployComponent");async function X9(){let e=LE.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 Ce.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 Ce.stat(u),_={name:Se.basename(c),mtime:l.mtime,size:l.size};n.entries.push(_)}}return n},"walk_dir");return r(ze.get(Ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:ze.get(Ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(Se.sep).slice(-1).pop(),entries:t})}a(X9,"getComponents");async function Z9(e){let t=xs.getComponentFileValidator(e);if(t)throw ft(t,t.message,ht.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await Ce.readFile(Se.join(ze.get(Ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file),r)}catch(s){throw s.code===Ue.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Se.join(e.project,e.file)}'`):s}}a(Z9,"getComponentFile");async function e7(e){let t=xs.setComponentFileValidator(e);if(t)throw ft(t,t.message,ht.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=Se.join(ze.get(Ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file);return e.payload!==void 0?(await Ce.ensureFile(s),await Ce.outputFile(s,e.payload,r)):await Ce.ensureDir(s),"Successfully set component: "+e.file}a(e7,"setComponentFile");async function t7(e){let t=xs.dropComponentFileValidator(e);if(t)throw ft(t,t.message,ht.BAD_REQUEST);let r=e.file?Se.join(e.project,e.file):e.project,s=Se.join(ze.get(Ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await Ce.pathExists(s)&&await Ce.remove(s),LE.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(t7,"dropComponent");CP.exports={customFunctionsStatus:$9,getCustomFunctions:V9,getCustomFunction:Y9,setCustomFunction:K9,dropCustomFunction:W9,addComponent:Q9,dropCustomFunctionProject:z9,packageComponent:J9,deployComponent:j9,getComponents:X9,getComponentFile:Z9,setComponentFile:e7,dropComponent:t7}});var cg=m((ISe,DP)=>{"use strict";var ks=require("joi"),LP=He();DP.exports={readTransactionLogValidator:r7,deleteTransactionLogsBeforeValidator:s7};function r7(e){let t=ks.object({schema:ks.string().required(),table:ks.string().required(),from:ks.date().timestamp(),to:ks.date().timestamp(),limit:ks.number().min(1)});return LP.validateBySchema(e,t)}a(r7,"readTransactionLogValidator");function s7(e){let t=ks.object({schema:ks.string().required(),table:ks.string().required(),timestamp:ks.date().timestamp().required()});return LP.validateBySchema(e,t)}a(s7,"deleteTransactionLogsBeforeValidator")});var ME=m((CSe,BP)=>{"use strict";var ug=g(),UE=We(),UP=F(),MP=$(),PP=hn(),{handleHDBError:La,hdb_errors:n7}=z(),{HTTP_STATUS_CODES:Da}=n7,{readTransactionLogValidator:i7,deleteTransactionLogsBeforeValidator:o7}=cg(),vP="This operation relies on clustering and cannot run with it disable.",a7="Logs successfully deleted from transaction log.",c7="All logs successfully deleted from transaction log.";BP.exports={readTransactionLog:u7,deleteTransactionLogsBefore:l7};async function*u7(e){let t=i7(e);if(t)throw La(t,t.message,Da.BAD_REQUEST,void 0,void 0,!0);if(!MP.get(ug.CONFIG_PARAMS.CLUSTERING_ENABLED))throw La(new Error,vP,Da.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=UP.checkSchemaTableExist(r,s);if(n)throw La(new Error,n,Da.NOT_FOUND,void 0,void 0,!0);let i=PP.createNatsTableStreamName(r,s),o=await UE.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===ug.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}a(u7,"readTransactionLog");async function l7(e){let t=o7(e);if(t)throw La(t,t.message,Da.BAD_REQUEST,void 0,void 0,!0);if(!MP.get(ug.CONFIG_PARAMS.CLUSTERING_ENABLED))throw La(new Error,vP,Da.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=UP.checkSchemaTableExist(r,s);if(i)throw La(new Error,i,Da.NOT_FOUND,void 0,void 0,!0);let o=PP.createNatsTableStreamName(r,s),{jsm:c}=await UE.getNATSReferences(),u=await UE.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=a7,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=c7):d=(await UE.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(l7,"deleteTransactionLogsBefore")});var HE=m((DSe,$P)=>{"use strict";var PE=require("joi"),vE=require("path"),HP=require("fs-extra"),{exec:_7}=require("child_process"),d7=require("util"),qP=d7.promisify(_7),Qu=g(),{handleHDBError:Ua,hdb_errors:E7}=z(),{HTTP_STATUS_CODES:Ma}=E7,Ju=$(),f7=He(),zu=D();Ju.initSync();var lg=Ju.get(Qu.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),FP="npm install --omit=dev --json",h7=`${FP} --dry-run`;$P.exports={installModules:T7,auditModules:g7,installAllRootModules:m7,uninstallRootModule:p7,linkHarperdb:S7};async function m7(e=!1){await BE(),await ju(e?"npm install --ignore-scripts":"npm install",Ju.get(Qu.CONFIG_PARAMS.ROOTPATH))}a(m7,"installAllRootModules");async function p7(e){await ju(`npm uninstall ${e}`,Ju.get(Qu.CONFIG_PARAMS.ROOTPATH))}a(p7,"uninstallRootModule");async function S7(){await BE(),await ju(`npm link ${Qu.PACKAGE_ROOT}`,Ju.get(Qu.CONFIG_PARAMS.ROOTPATH))}a(S7,"linkHarperdb");async function ju(e,t=void 0){let{stdout:r,stderr:s}=await qP(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
|
|
11
|
-
`,""));return
|
|
12
|
-
`,"")}a(
|
|
9
|
+
`,"")}a(JL,"runCommand");async function d4(){try{await K3.access(vS)}catch{return!1}let e=await JL(`${vS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return W3.eq(t,l4)}a(d4,"checkNATSServerInstalled");async function FS(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await YL.getClusterUser();if(uo(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Kr.trace("create nats connection called");let i=await r4({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:Ct.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Ct.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Ct.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return Kr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(FS,"createConnection");async function E4(){Fs&&(await Fs.drain(),Fs=void 0,Ea=void 0,fa=void 0,Tu=void 0)}a(E4,"closeConnection");var Fs,Tu;async function Cd(){return Tu||(Tu=FS(Ct.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Fs=await Tu),Fs||Tu}a(Cd,"getConnection");async function Ru(){if(Ea)return Ea;uo(Fs)&&await Cd();let{domain:e}=Au(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(uo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ea=await Fs.jetstreamManager({domain:e}),Ea}a(Ru,"getJetStreamManager");async function jL(){if(fa)return fa;uo(Fs)&&await Cd();let{domain:e}=Au(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(uo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return fa=Fs.jetstream({domain:e}),fa}a(jL,"getJetStream");async function rr(){let e=Fs||await Cd(),t=Ea||await Ru(),r=fa||await jL();return{connection:e,jsm:t,js:r}}a(rr,"getNATSReferences");async function f4(e){let t=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await YL.getClusterUser(),n=await FS(t,r,s),i=qS(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=zL.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 bd.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(f4,"getServerList");async function GS(e,t){let{jsm:r}=await rr(),s=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:WL.File,retention:QL.Limits,subjects:t,discard:s4.Old,duplicate_window:KL,max_msgs:n,max_bytes:i,max_age:s})}a(GS,"createLocalStream");async function XL(){let{jsm:e}=await rr(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(XL,"listStreams");async function h4(e){let{jsm:t}=await rr();await t.streams.delete(e)}a(h4,"deleteLocalStream");async function m4(e){let{connection:t}=await rr(),r=[],s=qS(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(zL.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(m4,"listRemoteStreams");async function p4(e,t=void 0,r=void 0){let{jsm:s,js:n}=await rr(),i=BS(),o={durable_name:i,ack_policy:Id.Explicit};t&&(o.deliver_policy=wd.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=HS(_.data),E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};if(_.headers&&(E.origin=_.headers.get(fe.MSG_HEADERS.ORIGIN),E.nats_msg_id=_.headers.get(fe.MSG_HEADERS.NATS_MSG_ID)),l.push(E),_.ack(),_.info.pending===0)break}return await c.delete(),l}a(p4,"viewStream");async function*S4(e,t=void 0,r=void 0){let{jsm:s,js:n}=await rr(),i=BS(),o={durable_name:i,ack_policy:Id.Explicit};t&&(o.deliver_policy=wd.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 _=HS(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(fe.MSG_HEADERS.ORIGIN),E.nats_msg_id=l.headers.get(fe.MSG_HEADERS.NATS_MSG_ID)),yield E}if(l.ack(),l.info.pending===0)break}await c.delete()}a(S4,"viewStreamIterator");async function T4(e,t,r,s){Kr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=ZL(s,r);let{js:n}=await rr(),i=await Ou(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:VL.encode(s);try{Kr.trace(`publishToStream publishing to subject: ${o}`),c4(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 sD(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Kr.trace(`publishToStream creating stream: ${t}`);let _=o.split(".");_[2]="*",await GS(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(T4,"publishToStream");function ZL(e,t){t===void 0&&(t=i4());let r=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(fe.MSG_HEADERS.NATS_MSG_ID)){let s=bd.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${BS()}`;t.append(fe.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(fe.MSG_HEADERS.ORIGIN)||t.append(fe.MSG_HEADERS.ORIGIN,r),t}a(ZL,"addNatsMsgHeader");function Au(e){e=e.toLowerCase();let t=gu.join(Ct.get(Re.CONFIG_PARAMS.ROOTPATH),u4);if(e===Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return uo(PS)&&(PS={port:pu.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:pu.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+fe.SERVER_SUFFIX.HUB,config_file:fe.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:gu.join(t,fe.PID_FILES.HUB),hdb_nats_path:t}),PS;if(e===Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return uo(MS)&&(MS={port:pu.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:pu.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+fe.SERVER_SUFFIX.LEAF,config_file:fe.NATS_CONFIG_FILES.LEAF_SERVER,domain:pu.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+fe.SERVER_SUFFIX.LEAF,pid_file_path:gu.join(t,fe.PID_FILES.LEAF),hdb_nats_path:t}),MS;Kr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Au,"getServerConfig");async function g4(e){let{jsm:t}=await rr(),r=await Ou();try{await t.streams.add({name:e.stream_name,storage:WL.File,retention:QL.Limits,duplicate_window:KL,max_age:e4,max_bytes:t4,subjects:[`${fe.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:Id.Explicit,durable_name:e.durable_name,deliver_policy:wd.All,max_ack_pending:1e4});else throw s}}a(g4,"createWorkQueueStream");async function R4(){let{jsm:e}=await rr();(await e.consumers.info(fe.WORK_QUEUE_CONSUMER_NAMES.stream_name,fe.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Kr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(fe.WORK_QUEUE_CONSUMER_NAMES.stream_name,fe.WORK_QUEUE_CONSUMER_NAMES.durable_name),Kr.info("Adding pull consumer to ingest stream"),await e.consumers.add(fe.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:Id.Explicit,durable_name:fe.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:wd.All,max_ack_pending:1e4}))}a(R4,"updateIngestStreamConsumer");async function eD(e,t,r){let{jsm:s}=await rr(),n=await s.streams.info(t),i=tD(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=yd.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 S=0,T=n.config.sources.length;S<T;S++)if(d=n.config.sources[S],E=S,_&&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:`${fe.SUBJECT_PREFIXES.TXN}.>`};_||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(eD,"addSourceToWorkStream");function tD(e){return e.split(".")[1]}a(tD,"extractServerName");async function rD(e,t,r){let{schema:s,table:n}=r,i=yd.createNatsTableStreamName(s,n),{jsm:o}=await rr(),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(rD,"removeSourceFromWorkStream");async function A4(e,t,r=2e4,s=qS()){if(!bd.isObject(t))throw new Error("data param must be an object");let n=VL.encode(t),{connection:i}=await rr(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return HS(c.data)}a(A4,"request");function xS(e){return new Promise(async(t,r)=>{let s=j3(vS,["--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(xS,"reloadNATS");async function O4(){let{pid_file_path:e}=Au(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await xS(e)}a(O4,"reloadNATSHub");async function N4(){let{pid_file_path:e}=Au(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await xS(e)}a(N4,"reloadNATSLeaf");function b4(e,t,r){let s;switch(e.code){case kL.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case kL.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(b4,"requestErrorHandler");async function y4(e,t){let r=t+fe.SERVER_SUFFIX.LEAF;await sD(async()=>{e.subscribe===!0?await eD(r,fe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await rD(r,fe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(y4,"updateWorkStream");function sD(e){return X3.writeTransaction(Re.SYSTEM_SCHEMA_NAME,Re.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(sD,"exclusiveLock");async function nD(e,t){let r=yd.createNatsTableStreamName(e,t),s=await Ou(),n=L4(e,t,s);await GS(r,[n])}a(nD,"createLocalTableStream");async function I4(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await nD(s,n)}}a(I4,"createTableStreams");async function iD(e,t){if(Ct.get(Re.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=yd.createNatsTableStreamName(e,t),{jsm:s}=await rr();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Kr.warn(r);else throw r}}a(iD,"purgeTableStream");async function w4(e,t){if(Ct.get(Re.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await iD(e,t[r])}a(w4,"purgeSchemaTableStreams");async function C4(e){return(await Ru()).streams.info(e)}a(C4,"getStreamInfo");function L4(e,t,r){return`${fe.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(L4,"createSubjectName");async function Ou(){if(Su)return Su;if(Su=(await Ru())?.nc?.info?.server_name,Su===void 0)throw new Error("Unable to get jetstream manager server name");return Su}a(Ou,"getJsmServerName");async function D4(){let e=await Ru(),t=await Ou(),r=await XL();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=U4(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===fe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let l=`${fe.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Kr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else if(n.name===fe.WORK_QUEUE_CONSUMER_NAMES.stream_name){let l=`${fe.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Kr.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(".");Kr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}a(D4,"updateLocalStreams");function U4(e){let{config:t}=e,r=!1;if(t.name===fe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===fe.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Ct.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(U4,"updateStreamLimits")});var Md=m((Tme,lD)=>{"use strict";var ha=M_(),ma=yL(),M4=C(),P4=require("uuid").v4,Sme=require("clone"),Dd=Rn(),pa=R(),v4=require("util"),ci=Vr(),{handleHDBError:sr,hdb_errors:B4}=z(),{HDB_ERROR_MSGS:Ld,HTTP_STATUS_CODES:nr}=B4,{SchemaEventMsg:Ud}=os(),aD=Qe(),{getDatabases:H4}=(_e(),re(be)),{transformReq:Sa}=F();lD.exports={createSchema:q4,createSchemaStructure:cD,createTable:F4,createTableStructure:uD,createAttribute:V4,dropSchema:G4,dropTable:x4,dropAttribute:k4,getBackup:Y4};async function q4(e){let t=await cD(e);return Dd.signalSchemaChange(new Ud(process.pid,e.operation,e.schema)),t}a(q4,"createSchema");async function cD(e){let t=ha.schema_object(e);if(t)throw sr(t,t.message,nr.BAD_REQUEST,void 0,void 0,!0);if(Sa(e),!await ma.checkSchemaExists(e.schema))throw sr(new Error,Ld.SCHEMA_EXISTS_ERR(e.schema),nr.BAD_REQUEST,pa.LOG_LEVELS.ERROR,Ld.SCHEMA_EXISTS_ERR(e.schema),!0);return await ci.createSchema(e),`database '${e.schema}' successfully created`}a(cD,"createSchemaStructure");async function F4(e){return Sa(e),await uD(e)}a(F4,"createTable");async function uD(e){let t=ha.create_table_object(e);if(t)throw sr(t,t.message,nr.BAD_REQUEST,void 0,void 0,!0);if(ha.validateTableResidence(e.residence),!await ma.checkSchemaTableExists(e.schema,e.table))throw sr(new Error,Ld.TABLE_EXISTS_ERR(e.schema,e.table),nr.BAD_REQUEST,pa.LOG_LEVELS.ERROR,Ld.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:P4(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await ci.createTable(s,e);else throw sr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",nr.BAD_REQUEST);else await ci.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(uD,"createTableStructure");async function G4(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ha.schema_object(e),s=t??r;if(s)throw sr(s,s.message,nr.BAD_REQUEST,void 0,void 0,!0);Sa(e);let n=await ma.checkSchemaExists(e.schema);if(n)throw sr(new Error,n,nr.NOT_FOUND,pa.LOG_LEVELS.ERROR,n,!0);let i=await ma.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ci.dropSchema(e),Dd.signalSchemaChange(new Ud(process.pid,e.operation,e.schema)),await aD.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(G4,"dropSchema");async function x4(e){let t=ha.table_object(e);if(t)throw sr(t,t.message,nr.BAD_REQUEST,void 0,void 0,!0);Sa(e);let r=await ma.checkSchemaTableExists(e.schema,e.table);if(r)throw sr(new Error,r,nr.NOT_FOUND,pa.LOG_LEVELS.ERROR,r,!0);return await ci.dropTable(e),await aD.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(x4,"dropTable");async function k4(e){let t=ha.attribute_object(e);if(t)throw sr(t,t.message,nr.BAD_REQUEST,void 0,void 0,!0);Sa(e);let r=await ma.checkSchemaTableExists(e.schema,e.table);if(r)throw sr(new Error,r,nr.NOT_FOUND,pa.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw sr(new Error,"You cannot drop a hash attribute",nr.BAD_REQUEST,void 0,void 0,!0);if(pa.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw sr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,nr.BAD_REQUEST,void 0,void 0,!0);try{return await ci.dropAttribute(e),$4(e),Dd.signalSchemaChange(new Ud(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw M4.error(`Got an error deleting attribute ${v4.inspect(e)}.`),s}}a(k4,"dropAttribute");function $4(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($4,"dropAttributeFromGlobal");async function V4(e){Sa(e);let t=H4()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw sr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,nr.BAD_REQUEST,void 0,void 0,!0);return await ci.createAttribute(e),Dd.signalSchemaChange(new Ud(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(V4,"createAttribute");function Y4(e){return ci.getBackup(e)}a(Y4,"getBackup")});var dD=m((Rme,_D)=>{"use strict";var{OPERATIONS_ENUM:K4}=R(),kS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=K4.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};_D.exports=kS});var $S=m((Nme,pD)=>{"use strict";var W4=Vr(),Ome=dD(),Pd=F(),vd=R(),Q4=Y(),{handleHDBError:ED,hdb_errors:z4}=z(),{HDB_ERROR_MSGS:fD,HTTP_STATUS_CODES:hD}=z4,J4=Object.values(vd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),mD="To use this operation audit log must be enabled in harperdb-config.yaml";pD.exports=j4;async function j4(e){if(Pd.isEmpty(e.schema))throw new Error(fD.SCHEMA_REQUIRED_ERR);if(Pd.isEmpty(e.table))throw new Error(fD.TABLE_REQUIRED_ERR);if(!Q4.get(vd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw ED(new Error,mD,hD.BAD_REQUEST,vd.LOG_LEVELS.ERROR,mD,!0);let t=Pd.checkSchemaTableExist(e.schema,e.table);if(t)throw ED(new Error,t,hD.NOT_FOUND,vd.LOG_LEVELS.ERROR,t,!0);if(!Pd.isEmpty(e.search_type)&&J4.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await W4.readAuditLog(e)}a(j4,"readAuditLog")});var TD=m((yme,SD)=>{"use strict";var{OPERATIONS_ENUM:X4}=R(),VS=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=X4.GET_BACKUP,this.schema=t,this.table=r}};SD.exports=VS});var AD=m((Lme,RD)=>{"use strict";var Z4=Vr(),wme=TD(),YS=F(),eX=R(),Cme=Y(),{handleHDBError:tX,hdb_errors:rX}=z(),{HDB_ERROR_MSGS:gD,HTTP_STATUS_CODES:sX}=rX;RD.exports=nX;async function nX(e){if(YS.isEmpty(e.schema))throw new Error(gD.SCHEMA_REQUIRED_ERR);if(YS.isEmpty(e.table))throw new Error(gD.TABLE_REQUIRED_ERR);let t=YS.checkSchemaTableExist(e.schema,e.table);if(t)throw tX(new Error,t,sX.NOT_FOUND,eX.LOG_LEVELS.ERROR,t,!0);return await Z4.getBackup(read_audit_log_object)}a(nX,"getBackup")});var wD=m((Ume,ID)=>{var ui=require("validate.js"),ND=He(),Ta=R(),{handleHDBError:iX,hdb_errors:oX}=z(),{HDB_ERROR_MSGS:ze,HTTP_STATUS_CODES:aX}=oX,KS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),cX={STRUCTURE_USER:"structure_user"},OD=Object.values(Ta.ROLE_TYPES_ENUM),uX="attribute_permissions",lX="attribute_name",{PERMS_CRUD_ENUM:ga}=Ta,_X=[uX,...Object.values(ga)],bD=[ga.READ,ga.INSERT,ga.UPDATE],dX=[lX,...bD];function EX(e){let t=KS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,yD(e,t)}a(EX,"addRoleValidation");function fX(e){let t=KS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,yD(e,t)}a(fX,"alterRoleValidation");function hX(e){let t=KS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,ND.validateObject(e,t)}a(hX,"dropRoleValidation");var mX=["operation","role","id","permission","hdb_user","hdb_auth_header"];function yD(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)mX.includes(s[o])||n.push(s[o]);n.length>0&&st(ze.INVALID_ROLE_JSON_KEYS(n),r);let i=ND.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{st(o,r)}),e.permission){let o=pX(e);o&&st(o,r),OD.forEach(c=>{e.permission[c]&&!ui.isBoolean(e.permission[c])&&st(ze.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(OD.indexOf(o)<0){if(o===cX.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]||st(ze.SCHEMA_NOT_FOUND(d),r)}continue}st(ze.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){st(ze.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]){st(ze.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{_X.includes(_)||st(ze.INVALID_PERM_KEY(_),r,o,u)}),Object.values(ga).forEach(_=>{ui.isDefined(l[_])?ui.isBoolean(l[_])||st(ze.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):st(ze.TABLE_PERM_MISSING(_),r,o,u)}),ui.isDefined(l.attribute_permissions)){if(!ui.isArray(l.attribute_permissions)){st(ze.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{st(ze.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(S=>{!dX.includes(S)&&S!==ga.DELETE&&st(ze.INVALID_ATTR_PERM_KEY(S),r,o,u)}),!ui.isDefined(f.attribute_name)){st(ze.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){st(ze.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}bD.forEach(S=>{ui.isDefined(f[S])?ui.isBoolean(f[S])||st(ze.ATTR_PERM_NOT_BOOLEAN(S,h),r,o,u):st(ze.ATTR_PERM_MISSING(S,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}`;st(ze.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return SX(r)}a(yD,"customValidate");ID.exports={addRoleValidation:EX,alterRoleValidation:fX,dropRoleValidation:hX};function pX(e){let{operation:t,permission:r}=e;if(t===Ta.OPERATIONS_ENUM.ADD_ROLE||t===Ta.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 ze.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Ta.ROLE_TYPES_ENUM.SUPER_USER:Ta.ROLE_TYPES_ENUM.CLUSTER_USER;return ze.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(pX,"validateNoSUPerms");function SX(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:ze.ROLE_PERMS_ERROR,...e};return iX(new Error,s,aX.BAD_REQUEST)}else return null}a(SX,"generateRolePermResponse");function st(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(st,"addPermError")});var qd=m((Pme,UD)=>{"use strict";var CD=Xt(),LD=jt(),TX=Zi(),QS=wD(),zS=Rn(),gX=require("uuid").v4,RX=require("util"),Bd=R(),AX=F(),JS=LD.searchByValue,OX=LD.searchByHash,NX=RX.promisify(TX.delete),bX=as(),yX=ua(),{hdb_errors:IX,handleHDBError:Ra}=z(),{HDB_ERROR_MSGS:DD,HTTP_STATUS_CODES:Hd}=IX,{UserEventMsg:jS}=os();UD.exports={addRole:wX,alterRole:CX,dropRole:LX,listRoles:DX};function WS(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(WS,"scrubRoleDetails");async function wX(e){let t=QS.addRoleValidation(e);if(t)throw t;e=WS(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 JS(r)||[])}catch(i){throw Ra(i)}if(s&&s.length>0)throw Ra(new Error,DD.ROLE_ALREADY_EXISTS(e.role),Hd.CONFLICT,void 0,void 0,!0);e.id||(e.id=gX());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await CD.insert(n),zS.signalUserChange(new jS(process.pid)),e=WS(e),e}a(wX,"addRole");async function CX(e){let t=QS.alterRoleValidation(e);if(t)throw t;e=WS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await CD.update(r)}catch(n){throw Ra(n)}if(s&&s?.message==="updated 0 of 1 records")throw Ra(new Error,"Invalid role id",Hd.BAD_REQUEST,void 0,void 0,!0);return await zS.signalUserChange(new jS(process.pid)),e}a(CX,"alterRole");async function LX(e){let t=QS.dropRoleValidation(e);if(t)throw Ra(new Error,t,Hd.BAD_REQUEST,void 0,void 0,!0);let r=new yX(Bd.SYSTEM_SCHEMA_NAME,Bd.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await OX(r));if(s.length===0)throw Ra(new Error,DD.ROLE_NOT_FOUND,Hd.NOT_FOUND,void 0,void 0,!0);let n=new bX(Bd.SYSTEM_SCHEMA_NAME,Bd.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await JS(n)),o=!1;if(AX.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 NX(c),zS.signalUserChange(new jS(process.pid)),`${s[0].role} successfully deleted`}a(LX,"dropRole");async function DX(){return JS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(DX,"listRoles")});var BD=m((Bme,vD)=>{"use strict";var UX=Y(),li=require("joi"),MX=He(),MD=require("moment"),PX=require("fs-extra"),XS=require("path"),vX=require("lodash"),Nu=R(),{LOG_LEVELS:lo}=R(),BX="YYYY-MM-DD hh:mm:ss",HX=XS.resolve(__dirname,"../logs");vD.exports=function(e){return MX.validateBySchema(e,qX)};var qX=li.object({from:li.custom(PD),until:li.custom(PD),level:li.valid(lo.NOTIFY,lo.FATAL,lo.ERROR,lo.WARN,lo.INFO,lo.DEBUG,lo.TRACE),order:li.valid("asc","desc"),limit:li.number().min(1),start:li.number().min(0),log_name:li.custom(FX)});function PD(e,t){if(MD(e,MD.ISO_8601).format(BX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(PD,"validateDatetime");function FX(e,t){if(vX.invert(Nu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=UX.get(Nu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Nu.LOG_NAMES.HDB:e,i=n===Nu.LOG_NAMES.INSTALL?XS.join(HX,Nu.LOG_NAMES.INSTALL):XS.join(s,n);return PX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(FX,"validateReadLogPath")});var eT=m((qme,qD)=>{"use strict";var Fd=R(),GX=C(),xX=Y(),kX=BD(),ZS=require("path"),HD=require("fs-extra"),{once:$X}=require("events"),{handleHDBError:VX,hdb_errors:YX}=z(),{PACKAGE_ROOT:KX}=R(),WX=ZS.join(KX,"logs"),QX=1e3,zX=200;qD.exports=JX;async function JX(e){let t=kX(e);if(t)throw VX(t,t.message,YX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=xX.get(Fd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Fd.LOG_NAMES.HDB:e.log_name,n=s===Fd.LOG_NAMES.INSTALL?ZS.join(WX,Fd.LOG_NAMES.INSTALL):ZS.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?QX:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,S=0;E==="desc"&&!u&&!_&&(S=Math.max(HD.statSync(n).size-(h+5)*zX,0));let T=HD.createReadStream(n,{start:S});T.on("error",b=>{GX.error(b)});let A=0,g=[],x="",V;T.on("data",b=>{let M=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;b=x+b;let J=0,B;for(;(B=M.exec(b))&&!T.destroyed;){V&&(V.message=b.slice(J,B.index),I(V));let[Ie,_t,Zl]=B,Yo=Zl.split("] ["),hc=Yo[0],Fi=Yo[1];Yo.splice(0,2),V={timestamp:_t,thread:hc,level:Fi,tags:Yo,message:""},J=B.index+Ie.length}x=b.slice(J)}),T.on("end",b=>{T.destroyed||V&&(V.message=x.trim(),I(V))}),T.resume();function I(b){let M,J,B;switch(!0){case(i&&c&&l):M=new Date(b.timestamp),J=new Date(u),B=new Date(_),b.level===o&&M>=J&&M<=B&&A<f?A++:b.level===o&&M>=J&&M<=B&&(_i(b,E,g),A++,A===h&&T.destroy());break;case(i&&c):M=new Date(b.timestamp),J=new Date(u),b.level===o&&M>=J&&A<f?A++:b.level===o&&M>=J&&(_i(b,E,g),A++,A===h&&T.destroy());break;case(i&&l):M=new Date(b.timestamp),B=new Date(_),b.level===o&&M<=B&&A<f?A++:b.level===o&&M<=B&&(_i(b,E,g),A++,A===h&&T.destroy());break;case(c&&l):M=new Date(b.timestamp),J=new Date(u),B=new Date(_),M>=J&&M<=B&&A<f?A++:M>=J&&M<=B&&(_i(b,E,g),A++,A===h&&T.destroy());break;case i:b.level===o&&A<f?A++:b.level===o&&(_i(b,E,g),A++,A===h&&T.destroy());break;case c:M=new Date(b.timestamp),J=new Date(u),M>=J&&A<f?A++:M>=J&&A>=f&&(_i(b,E,g),A++,A===h&&T.destroy());break;case l:M=new Date(b.timestamp),B=new Date(_),M<=B&&A<f?A++:M<=B&&A>=f&&(_i(b,E,g),A++,A===h&&T.destroy());break;default:A<f?A++:(_i(b,E,g),A++,A===h&&T.destroy())}}return a(I,"onLogMessage"),await $X(T,"close"),g}a(JX,"readLog");function _i(e,t,r){t==="desc"?jX(e,r):t==="asc"?XX(e,r):r.push(e)}a(_i,"pushLineToResult");function jX(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(jX,"insertDescending");function XX(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(XX,"insertAscending")});var xd=m(($me,kD)=>{"use strict";var tT=require("joi"),{string:Gd,boolean:FD,date:ZX}=tT.types(),eZ=He(),{validateSchemaExists:Gme,validateTableExists:xme,validateSchemaName:kme}=Ds(),tZ=R(),rZ=Me(),GD=Y();GD.initSync();var sZ=Gd.invalid(GD.get(tZ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(rZ.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(),xD={operation:Gd.valid("add_node","update_node"),node_name:sZ,subscriptions:tT.array().items({table:Gd.optional(),schema:Gd.required(),subscribe:FD.required(),publish:FD.required().custom(iZ),start_time:ZX.iso()}).min(1).required()};function nZ(e){return eZ.validateBySchema(e,tT.object(xD))}a(nZ,"addUpdateNodeValidator");function iZ(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(iZ,"checkForFalsy");kD.exports={addUpdateNodeValidator:nZ,validation_schema:xD}});var VD=m((Yme,$D)=>{var oZ=He(),aZ={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};$D.exports=function(e){return oZ.validateObject(e,aZ)}});var kd=m((Kme,YD)=>{"use strict";var cZ=R().OPERATIONS_ENUM,rT=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=cZ.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};YD.exports=rT});var WD=m((Qme,KD)=>{"use strict";var uZ={OPERATION:"operation",REFRESH:"refresh"},sT=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},nT=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};KD.exports={JWTTokens:sT,TOKEN_TYPE_ENUM:uZ,JWTRSAKeys:nT}});var Iu=m((Jme,jD)=>{"use strict";var yu=require("jsonwebtoken"),iT=require("fs-extra"),oT=F(),Wr=R(),{handleHDBError:ir,hdb_errors:lZ}=z(),{HTTP_STATUS_CODES:or,AUTHENTICATION_ERROR_MSGS:ar}=lZ,bu=C(),QD=K_(),uT=er(),_Z=Xt().update,dZ=kd(),EZ=Rn(),{UserEventMsg:fZ}=os(),di=Y();di.initSync();var aT=require("path"),{JWTTokens:hZ,JWTRSAKeys:mZ,TOKEN_TYPE_ENUM:$d}=WD(),pZ=di.get(Wr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?di.get(Wr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",SZ=di.get(Wr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?di.get(Wr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Vd="RS256",cT;jD.exports={createTokens:TZ,validateOperationToken:RZ,refreshOperationToken:gZ,validateRefreshToken:JD};async function TZ(e){if(oT.isEmpty(e)||typeof e!="object")throw ir(new Error,ar.INVALID_AUTH_OBJECT,or.BAD_REQUEST,void 0,void 0,!0);if(oT.isEmpty(e.username))throw ir(new Error,ar.USERNAME_REQUIRED,or.BAD_REQUEST,void 0,void 0,!0);if(oT.isEmpty(e.password))throw ir(new Error,ar.PASSWORD_REQUIRED,or.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await uT.findAndValidateUser(e.username,e.password),!t)throw ir(new Error,ar.INVALID_CREDENTIALS,or.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw bu.error(E),ir(new Error,ar.INVALID_CREDENTIALS,or.UNAUTHORIZED,void 0,void 0,!0)}let r=await Yd(),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 zD(i,r.private_key,r.passphrase),c=await yu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:SZ,algorithm:Vd,subject:$d.REFRESH}),u=QD.hash(c),l=new dZ(Wr.SYSTEM_SCHEMA_NAME,Wr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await _Z(l)}catch(E){bu.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw ir(new Error,ar.REFRESH_TOKEN_SAVE_FAILED,or.INTERNAL_SERVER_ERROR);return EZ.signalUserChange(new fZ(process.pid)),new hZ(o,c)}a(TZ,"createTokens");async function zD(e,t,r){return await yu.sign(e,{key:t,passphrase:r},{expiresIn:pZ,algorithm:Vd,subject:$d.OPERATION})}a(zD,"signOperationToken");async function Yd(){if(cT===void 0)try{let e=aT.join(di.getHdbBasePath(),Wr.LICENSE_KEY_DIR_NAME,Wr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=aT.join(di.getHdbBasePath(),Wr.LICENSE_KEY_DIR_NAME,Wr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=aT.join(di.getHdbBasePath(),Wr.LICENSE_KEY_DIR_NAME,Wr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await iT.readFile(e)).toString(),n=(await iT.readFile(t)).toString(),i=(await iT.readFile(r)).toString();cT=new mZ(i,n,s)}catch(e){throw bu.error(e),ir(new Error,ar.NO_ENCRYPTION_KEYS,or.INTERNAL_SERVER_ERROR)}return cT}a(Yd,"getJWTRSAKeys");async function gZ(e){if(!e)throw ir(new Error,ar.INVALID_BODY,or.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw ir(new Error,ar.REFRESH_TOKEN_REQUIRED,or.BAD_REQUEST,void 0,void 0,!0);await JD(e.refresh_token);let t=await Yd(),r=await yu.decode(e.refresh_token);return{operation_token:await zD({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(gZ,"refreshOperationToken");async function RZ(e){try{let t=await Yd(),r=await yu.verify(e,t.public_key,{algorithms:Vd,subject:$d.OPERATION});return await uT.findAndValidateUser(r.username,void 0,!1)}catch(t){throw bu.warn(t),t.name&&t.name==="TokenExpiredError"?ir(new Error,ar.TOKEN_EXPIRED,or.FORBIDDEN):ir(new Error,ar.INVALID_TOKEN,or.UNAUTHORIZED)}}a(RZ,"validateOperationToken");async function JD(e){let t;try{let r=await Yd(),s=await yu.verify(e,r.public_key,{algorithms:Vd,subject:$d.REFRESH});t=await uT.findAndValidateUser(s.username,void 0,!1)}catch(r){throw bu.warn(r),r.name&&r.name==="TokenExpiredError"?ir(new Error,ar.TOKEN_EXPIRED,or.FORBIDDEN):ir(new Error,ar.INVALID_TOKEN,or.UNAUTHORIZED)}if(!QD.validate(t.refresh_token,e))throw ir(new Error,ar.INVALID_TOKEN,or.UNAUTHORIZED);return t}a(JD,"validateRefreshToken")});var lT=m((Zme,eU)=>{"use strict";var AZ=VD(),Aa=require("passport"),OZ=require("passport-local").Strategy,NZ=require("passport-http").BasicStrategy,bZ=require("util"),yZ=er(),ZD=bZ.callbackify(yZ.findAndValidateUser),Xme=gr(),IZ=R(),XD=Iu();Aa.use(new OZ(function(e,t,r){ZD(e,t,r)}));Aa.use(new NZ(function(e,t,r){ZD(e,t,r)}));Aa.serializeUser(function(e,t){t(null,e)});Aa.deserializeUser(function(e,t){t(null,e)});function wZ(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":Aa.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===IZ.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?XD.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):XD.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Aa.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(wZ,"authorize");function CZ(e,t){let r=AZ(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(CZ,"checkPermissions");eU.exports={authorize:wZ,checkPermissions:CZ}});var Oa=m((tpe,tU)=>{"use strict";var _T=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},dT=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};tU.exports={Node:_T,NodeSubscription:dT}});var sU=m((spe,rU)=>{"use strict";var LZ=R().OPERATIONS_ENUM,ET=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=LZ.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};rU.exports=ET});var wu=m((ipe,nU)=>{"use strict";var fT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},hT=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)}};nU.exports={RemotePayloadObject:fT,RemotePayloadSubscription:hT}});var oU=m((ape,iU)=>{"use strict";var mT=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}};iU.exports=mT});var uU=m((dpe,cU)=>{"use strict";var DZ=oU(),upe=Ge(),aU=we(),UZ=C(),{getSchemaPath:lpe,getTransactionAuditStorePath:_pe}=De(),{getDatabases:MZ}=(_e(),re(be));cU.exports=PZ;async function PZ(e){let t=new DZ;try{let r=MZ()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await aU.environmentDataSize(schema_path,e.name),o=await aU.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){UZ.warn(`unable to stat table dbi due to ${r}`)}return t}a(PZ,"lmdbGetTableSize")});var _U=m((fpe,lU)=>{"use strict";var pT=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}};lU.exports=pT});var Nn=m((Spe,hU)=>{"use strict";var vZ=require("fs-extra"),BZ=require("path"),xt=require("systeminformation"),Ei=C(),HZ=Qe(),ST=Me(),Wd=R(),qZ=uU(),fU=Zn(),{getThreadInfo:dU}=tt(),wT=Y();wT.initSync();var FZ=_U(),{openEnvironment:mpe}=we(),{getSchemaPath:ppe}=De(),{database:GZ}=(_e(),re(be)),Kd;hU.exports={getHDBProcessInfo:AT,getNetworkInfo:NT,getDiskInfo:OT,getMemoryInfo:RT,getCPUInfo:gT,getTimeInfo:TT,getSystemInformation:bT,systemInformation:xZ,getTableSize:yT,getMetrics:IT};function TT(){return xt.time()}a(TT,"getTimeInfo");async function gT(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:l,..._}=await xt.cpu();_.cpu_speed=await xt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:S,raw_currentload_user:T,cpus:A,...g}=await xt.currentLoad();return g.cpus=[],A.forEach(x=>{let{raw_load:V,raw_load_idle:I,raw_load_irq:b,raw_load_nice:M,raw_load_system:J,raw_load_user:B,...Ie}=x;g.cpus.push(Ie)}),_.current_load=g,_}catch(e){return Ei.error(`error in getCPUInfo: ${e}`),{}}}a(gT,"getCPUInfo");async function RT(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await xt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Ei.error(`error in getMemoryInfo: ${e}`),{}}}a(RT,"getMemoryInfo");async function AT(){let e={core:[],clustering:[]};try{let t=await xt.processes(),r;try{r=Number.parseInt(await vZ.readFile(BZ.join(wT.get(Wd.CONFIG_PARAMS.ROOTPATH),Wd.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===Wd.NODE_ERROR_CODES.ENOENT)Ei.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 Ei.error(`error in getHDBProcessInfo: ${t}`),e}}a(AT,"getHDBProcessInfo");async function OT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await xt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,...l}=await xt.fsStats();return e.read_write=l,e.size=await xt.fsSize(),e}catch(t){return Ei.error(`error in getDiskInfo: ${t}`),e}}a(OT,"getDiskInfo");async function NT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await xt.networkInterfaceDefault(),e.latency=await xt.inetChecksite("google.com"),(await xt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:l,ieee8021xState:_,carrier_changes:d,...E}=s;e.interfaces.push(E)}),(await xt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Ei.error(`error in getNetworkInfo: ${t}`),e}}a(NT,"getNetworkInfo");async function bT(){if(Kd!==void 0)return Kd;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await xt.osInfo();e=c;let u=await xt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Kd=e,Kd}catch(t){return Ei.error(`error in getSystemInformation: ${t}`),e}}a(bT,"getSystemInformation");async function yT(){let e=[],t=await fU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await qZ(s));return e}a(yT,"getTableSize");async function IT(){let e=await fU.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=GZ({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){Ei.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(IT,"getMetrics");async function EU(){if(wT.get(Wd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await HZ.getNATSReferences(),r=await t.streams.info(ST.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(ST.WORK_QUEUE_CONSUMER_NAMES.stream_name,ST.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(EU,"getNatsStreamInfo");async function xZ(e){let t=new FZ;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await bT(),t.time=TT(),t.cpu=await gT(),t.memory=await RT(),t.disk=await OT(),t.network=await NT(),t.harperdb_processes=await AT(),t.table_size=await yT(),t.metrics=await IT(),t.threads=await dU(),t.replication=await EU(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await bT();break;case"time":t.time=TT();break;case"cpu":t.cpu=await gT();break;case"memory":t.memory=await RT();break;case"disk":t.disk=await OT();break;case"network":t.network=await NT();break;case"harperdb_processes":t.harperdb_processes=await AT();break;case"table_size":t.table_size=await yT();break;case"database_metrics":case"metrics":t.metrics=await IT();break;case"threads":t.threads=await dU();break;case"replication":t.replication=await EU();break;default:break}return t}a(xZ,"systemInformation")});var bn=m((Ape,TU)=>{"use strict";var kZ=Xt(),CT=F(),$Z=require("util"),_o=R(),mU=Y();mU.initSync();var VZ=lT(),pU=jt(),{Node:gpe,NodeSubscription:Rpe}=Oa(),YZ=ua(),KZ=sU(),{RemotePayloadObject:WZ,RemotePayloadSubscription:QZ}=wu(),{handleHDBError:zZ,hdb_errors:JZ}=z(),{HTTP_STATUS_CODES:jZ,HDB_ERROR_MSGS:XZ}=JZ,ZZ=as(),e5=Nn(),t5=$i(),{getDatabases:r5}=(_e(),re(be)),s5=$Z.promisify(VZ.authorize),n5=pU.searchByHash,i5=pU.searchByValue;TU.exports={authHeaderToUser:o5,isEmpty:a5,getNodeRecord:c5,upsertNodeRecord:u5,buildNodePayloads:l5,checkClusteringEnabled:_5,getAllNodeRecords:d5,getSystemInfo:E5,reverseSubscription:SU};async function o5(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await s5(t,null),e}a(o5,"authHeaderToUser");function a5(e){return e==null}a(a5,"isEmpty");async function c5(e){let t=new YZ(_o.SYSTEM_SCHEMA_NAME,_o.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return n5(t)}a(c5,"getNodeRecord");async function u5(e){let t=new KZ(_o.SYSTEM_SCHEMA_NAME,_o.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return kZ.upsert(t)}a(u5,"upsertNodeRecord");function SU(e){if(CT.isEmpty(e.subscribe)||CT.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(SU,"reverseSubscription");function l5(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,_=CT.getTableHashAttribute(u,l),{subscribe:d,publish:E}=SU(c),f=r5()[u]?.[l],h=new QZ(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new WZ(r,t,n,s)}a(l5,"buildNodePayloads");function _5(){if(!mU.get(_o.CONFIG_PARAMS.CLUSTERING_ENABLED))throw zZ(new Error,XZ.CLUSTERING_NOT_ENABLED,jZ.BAD_REQUEST,void 0,void 0,!0)}a(_5,"checkClusteringEnabled");async function d5(){let e=new ZZ(_o.SYSTEM_SCHEMA_NAME,_o.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await i5(e))}a(d5,"getAllNodeRecords");async function E5(){let e=await e5.getSystemInformation();return{hdb_version:t5.version(),node_version:e.node_version,platform:e.platform}}a(E5,"getSystemInfo")});var LT=m((Npe,IU)=>{"use strict";var Qd=Qe(),gU=F(),RU=Me(),AU=R(),zd=C(),OU=Md(),f5=cu(),{RemotePayloadObject:h5}=wu(),{handleHDBError:NU,hdb_errors:m5}=z(),{HTTP_STATUS_CODES:bU}=m5,{NodeSubscription:yU}=Oa();IU.exports=p5;async function p5(e,t){let r;try{r=await Qd.request(`${t}.${RU.REQUEST_SUFFIX}`,new h5(AU.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),zd.trace("Response from remote describe all request:",r)}catch(o){zd.error(`addNode received error from describe all request to remote node: ${o}`);let c=Qd.requestErrorHandler(o,"add_node",t);throw NU(new Error,c,bU.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===RU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw NU(new Error,o,bU.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===AU.SYSTEM_SCHEMA_NAME){await Qd.createLocalTableStream(c,u);let h=new yU(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=gU.doesSchemaExist(c),_=s[c]!==void 0,d=u?gU.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(zd.trace(`addNode creating schema: ${c}`),await OU.createSchema({operation:"create_schema",schema:c})),!d&&E){zd.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new f5(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await OU.createTable(h)}await Qd.createLocalTableStream(c,u);let f=new yU(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(p5,"reviewSubscriptions")});var Du=m((ype,LU)=>{"use strict";var{handleHDBError:Jd,hdb_errors:S5}=z(),{HTTP_STATUS_CODES:jd}=S5,{addUpdateNodeValidator:T5}=xd(),Cu=C(),CU=R(),wU=Me(),g5=F(),DT=Qe(),Lu=bn(),R5=Y(),A5=LT(),{Node:O5,NodeSubscription:N5}=Oa(),{broadcast:b5}=tt(),y5="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",I5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",w5=R5.get(CU.CONFIG_PARAMS.CLUSTERING_NODENAME);LU.exports=C5;async function C5(e,t=!1){Cu.trace("addNode called with:",e),Lu.checkClusteringEnabled();let r=T5(e);if(r)throw Jd(r,r.message,jd.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Lu.getNodeRecord(s);if(!g5.isEmptyOrZeroLength(d))throw Jd(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,jd.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await A5(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=y5,o;let c=Lu.buildNodePayloads(n,w5,CU.OPERATIONS_ENUM.ADD_NODE,await Lu.getSystemInfo());Cu.trace("addNode sending remote payload:",c);let u;try{u=await DT.request(`${s}.${wU.REQUEST_SUFFIX}`,c)}catch(d){Cu.error(`addNode received error from request: ${d}`);let E=DT.requestErrorHandler(d,"add_node",s);throw Jd(new Error,E,jd.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===wU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw Jd(new Error,d,jd.INTERNAL_SERVER_ERROR,"error",d)}Cu.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];Cu.trace("Add node updating work stream for node:",s,"subscriptions:",f),await DT.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new N5(f.schema,f.table,f.publish,f.subscribe))}let _=new O5(s,l,u.system_info);return await Lu.upsertNodeRecord(_),b5({type:"nats_update"}),i.length>0?o.message=I5:o.message=`Successfully added '${s}' to manifest`,o}a(C5,"addNode")});var MT=m((wpe,MU)=>{"use strict";var{handleHDBError:Xd,hdb_errors:L5}=z(),{HTTP_STATUS_CODES:Zd}=L5,{addUpdateNodeValidator:D5}=xd(),Uu=C(),UU=R(),DU=Me(),U5=F(),UT=Qe(),Mu=bn(),M5=Y(),{cloneDeep:P5}=require("lodash"),v5=LT(),{NodeSubscription:B5}=Oa(),{broadcast:H5}=tt(),q5="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",F5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",G5=M5.get(UU.CONFIG_PARAMS.CLUSTERING_NODENAME);MU.exports=x5;async function x5(e){Uu.trace("updateNode called with:",e),Mu.checkClusteringEnabled();let t=D5(e);if(t)throw Xd(t,t.message,Zd.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=P5(await Mu.getNodeRecord(r));if(U5.isEmptyOrZeroLength(s))throw Xd(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,Zd.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await v5(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=q5,o;let c=Mu.buildNodePayloads(n,G5,UU.OPERATIONS_ENUM.UPDATE_NODE,await Mu.getSystemInfo());Uu.trace("updateNode sending remote payload:",c);let u;try{u=await UT.request(`${r}.${DU.REQUEST_SUFFIX}`,c)}catch(l){Uu.error(`updateNode received error from request: ${l}`);let _=UT.requestErrorHandler(l,"update_node",r);throw Xd(new Error,_,Zd.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===DU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw Xd(new Error,l,Zd.INTERNAL_SERVER_ERROR,"error",l)}Uu.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];Uu.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await UT.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await k5(s[0],n,u.system_info),i.length>0?o.message=F5:o.message=`Successfully updated '${r}'`,o}a(x5,"updateNode");async function k5(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 B5(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Mu.upsertNodeRecord(s),H5({type:"nats_update"})}a(k5,"updateNodeTable")});var qU=m((Lpe,HU)=>{"use strict";var BU=require("joi"),{string:PU}=BU.types(),$5=He(),vU=R(),V5=Y(),Y5=Me();HU.exports=K5;function K5(e){let t=PU.invalid(V5.get(vU.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Y5.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=BU.object({operation:PU.valid(vU.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return $5.validateBySchema(e,r)}a(K5,"removeNodeValidator")});var tE=m((Upe,VU)=>{"use strict";var{handleHDBError:FU,hdb_errors:W5}=z(),{HTTP_STATUS_CODES:GU}=W5,Q5=qU(),Pu=C(),xU=bn(),z5=F(),eE=R(),kU=Me(),$U=Qe(),J5=Y(),{RemotePayloadObject:j5}=wu(),{NodeSubscription:X5}=Oa(),Z5=au(),e6=Zi(),{broadcast:t6}=tt(),r6=J5.get(eE.CONFIG_PARAMS.CLUSTERING_NODENAME);VU.exports=s6;async function s6(e){Pu.trace("removeNode called with:",e),xU.checkClusteringEnabled();let t=Q5(e);if(t)throw FU(t,t.message,GU.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await xU.getNodeRecord(r);if(z5.isEmptyOrZeroLength(s))throw FU(new Error,`Node '${r}' was not found.`,GU.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new j5(eE.OPERATIONS_ENUM.REMOVE_NODE,r6,[]),i,o=!1;try{i=await $U.request(`${r}.${kU.REQUEST_SUFFIX}`,n),Pu.trace("Remove node reply from remote node:",r,i)}catch(u){Pu.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];Pu.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new X5(_.schema,_.table,!1,!1);await $U.updateWorkStream(d,r)}let c=new Z5(eE.SYSTEM_SCHEMA_NAME,eE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await e6.deleteRecord(c),t6({type:"nats_update"}),i?.status===kU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Pu.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(s6,"removeNode")});var WU=m((Ppe,KU)=>{"use strict";var YU=require("joi"),{string:n6,array:i6}=YU.types(),o6=He(),a6=xd();KU.exports=c6;function c6(e){let t=YU.object({operation:n6.valid("configure_cluster").required(),connections:i6.items(a6.validation_schema).required()});return o6.validateBySchema(e,t)}a(c6,"configureClusterValidator")});var PT=m((Bpe,XU)=>{"use strict";var u6=R(),rE=C(),l6=F(),_6=tE(),d6=Du(),QU=bn(),E6=WU(),{handleHDBError:zU,hdb_errors:f6}=z(),{HTTP_STATUS_CODES:JU}=f6,h6="Configure cluster complete.",m6="Failed to configure the cluster. Check the logs for more details.",p6="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";XU.exports=S6;async function S6(e){rE.trace("configure cluster called with:",e),QU.checkClusteringEnabled();let t=E6(e);if(t)throw zU(t,t.message,JU.BAD_REQUEST,void 0,void 0,!0);let r=await QU.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(jU(_6,{operation:u6.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);rE.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(jU(d6,f,f.node_name))}let c=await Promise.allSettled(i);rE.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"&&(rE.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let S=h?.value?.result;typeof S=="string"&&S.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(l6.isEmptyOrZeroLength(u))return{message:h6,connections:l};if(_)return{message:p6,failed_nodes:u,connections:l};throw zU(new Error,m6,JU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(S6,"configureCluster");async function jU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(jU,"functionWrapper")});var eM=m((qpe,ZU)=>{"use strict";var sE=require("joi"),T6=He(),{validateSchemaExists:g6,validateTableExists:R6,validateSchemaName:A6}=Ds(),O6=sE.object({operation:sE.string().valid("purge_stream"),schema:sE.string().custom(g6).custom(A6).required(),table:sE.string().custom(R6).required()});function N6(e){return T6.validateBySchema(e,O6)}a(N6,"purgeStreamValidator");ZU.exports=N6});var vT=m((Gpe,tM)=>{"use strict";var{handleHDBError:b6,hdb_errors:y6}=z(),{HTTP_STATUS_CODES:I6}=y6,w6=eM(),C6=Qe(),L6=bn();tM.exports=D6;async function D6(e){let t=w6(e);if(t)throw b6(t,t.message,I6.BAD_REQUEST,void 0,void 0,!0);L6.checkClusteringEnabled();let{schema:r,table:s}=e;return await C6.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(D6,"purgeStream")});var iE=m((kpe,aM)=>{"use strict";var HT=bn(),U6=Qe(),nM=Y(),nE=R(),Eo=Me(),M6=F(),BT=C(),{RemotePayloadObject:P6}=wu(),{ErrorCode:rM}=require("nats"),sM=nM.get(nE.CONFIG_PARAMS.CLUSTERING_ENABLED),iM=nM.get(nE.CONFIG_PARAMS.CLUSTERING_NODENAME);aM.exports={clusterStatus:v6,buildNodeStatus:oM};async function v6(){let e={node_name:iM,is_enabled:sM,connections:[]};if(!sM)return e;let t=await HT.getAllNodeRecords();if(M6.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(oM(t[s],e.connections));return await Promise.allSettled(r),e}a(v6,"clusterStatus");async function oM(e,t){let r=e.name,s=new P6(nE.OPERATIONS_ENUM.CLUSTER_STATUS,iM,void 0,await HT.getSystemInfo()),n,i,o=Eo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await U6.request(Eo.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Eo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Eo.CLUSTER_STATUS_STATUSES.CLOSED,BT.error(`Error getting node status from ${r} `,n))}catch(u){BT.warn(`Error getting node status from ${r}`,u),u.code===rM.NoResponders?o=Eo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===rM.Timeout?o=Eo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Eo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new B6(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!==nE.PRE_4_0_0_VERSION&&await HT.upsertNodeRecord(u)}catch(u){BT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(oM,"buildNodeStatus");function B6(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(B6,"NodeStatusObject")});var aE=m((Vpe,cM)=>{"use strict";var{handleHDBError:H6,hdb_errors:q6}=z(),{HTTP_STATUS_CODES:F6}=q6,G6=Qe(),x6=bn(),qT=F(),oE=require("joi"),k6=He(),$6=2e3,V6=oE.object({timeout:oE.number().min(1),connected_nodes:oE.boolean(),routes:oE.boolean()});cM.exports=Y6;async function Y6(e){x6.checkClusteringEnabled();let t=k6.validateBySchema(e,V6);if(t)throw H6(t,t.message,F6.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||qT.autoCastBoolean(s),o=n===void 0||qT.autoCastBoolean(n),c={nodes:[]},u=await G6.getServerList(r??$6),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(S=>S.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(S=>({host:S.split(":")[0],port:qT.autoCast(S.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Y6,"clusterNetwork")});var dM=m((Kpe,_M)=>{"use strict";var FT=require("joi"),uM=He(),{route_constraints:lM}=fp();_M.exports={setRoutesValidator:K6,deleteRoutesValidator:W6};function K6(e){let t=FT.object({server:FT.valid("hub","leaf").required(),routes:lM.required()});return uM.validateBySchema(e,t)}a(K6,"setRoutesValidator");function W6(e){let t=FT.object({routes:lM.required()});return uM.validateBySchema(e,t)}a(W6,"deleteRoutesValidator")});var uE=m((Qpe,mM)=>{"use strict";var fo=et(),GT=F(),cE=R(),EM=dM(),{handleHDBError:fM,hdb_errors:Q6}=z(),{HTTP_STATUS_CODES:hM}=Q6,z6="cluster routes successfully set",J6="cluster routes successfully deleted";mM.exports={setRoutes:j6,getRoutes:X6,deleteRoutes:Z6};function j6(e){let t=EM.setRoutesValidator(e);if(t)throw fM(t,t.message,hM.BAD_REQUEST,void 0,void 0,!0);let r=fo.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=GT.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"?fo.updateConfigValue(cE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):fo.updateConfigValue(cE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:z6,set:o,skipped:i}}a(j6,"setRoutes");function X6(){let e=fo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(X6,"getRoutes");function Z6(e){let t=EM.deleteRoutesValidator(e);if(t)throw fM(t,t.message,hM.BAD_REQUEST,void 0,void 0,!0);let r=fo.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 S=s[f];if(d.host===S.host&&d.port===S.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,S=n.length;h<S;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=GT.isEmptyOrZeroLength(s)?null:s,fo.updateConfigValue(cE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=GT.isEmptyOrZeroLength(n)?null:n,fo.updateConfigValue(cE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:J6,deleted:i,skipped:o}}a(Z6,"deleteRoutes")});var SM=m((Jpe,pM)=>{"use strict";var vu=require("alasql"),ho=require("recursive-iterator"),ds=C(),e8=F(),Bu=R(),xT=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,r8(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=>Bu.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=>!Bu.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][Bu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=t8(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=>!Bu.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new vu.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 t8(e){return e.filter(t=>t[Bu.PERMS_CRUD_ENUM.READ])}a(t8,"filterReadRestrictedAttrs");function r8(e,t,r,s,n){s8(e,t,r,s,n)}a(r8,"interpretAST");function Hu(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(Hu,"addSchemaTableToMap");function s8(e,t,r,s,n){if(!e){ds.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof vu.yy.Insert?a8(e,t,r):e instanceof vu.yy.Select?n8(e,t,r,s,n):e instanceof vu.yy.Update?i8(e,t,r):e instanceof vu.yy.Delete?o8(e,t,r):ds.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(s8,"getRecordAttributesAST");function n8(e,t,r,s,n){if(!e){ds.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(e8.isEmptyOrZeroLength(i)){ds.error("No schema specified");return}e.from.forEach(c=>{Hu(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Hu(c.table,t,r,s,n)});let o=new ho(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{ds.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 ho(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{ds.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 ho(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{ds.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 ho(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{ds.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(n8,"getSelectAttributes");function i8(e,t,r){if(!e){ds.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new ho(e.columns),n=e.table.databaseid;Hu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&kT(e.table.tableid,n,i.columnid,t,r)}a(i8,"getUpdateAttributes");function o8(e,t,r){if(!e){ds.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new ho(e.where),n=e.table.databaseid;Hu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&kT(e.table.tableid,n,i.columnid,t,r)}a(o8,"getDeleteAttributes");function a8(e,t,r){if(!e){ds.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new ho(e.columns),n=e.into.databaseid;Hu(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&kT(e.into.tableid,n,i.columnid,t,r)}a(a8,"getInsertAttributes");function kT(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(kT,"pushAttribute");pM.exports=xT});var _E=m((Xpe,AM)=>{var lE=jc(),TM=require("chalk"),wr=C(),gM=require("prompt"),{promisify:c8}=require("util"),$T=R(),u8=require("fs-extra"),l8=require("path"),_8=F(),d8=$i(),RM=Y();RM.initSync();var E8=require("moment"),f8=c8(gM.get),h8=l8.join(RM.getHdbBasePath(),$T.LICENSE_KEY_DIR_NAME,$T.LICENSE_FILE_NAME,$T.LICENSE_FILE_NAME);AM.exports={getFingerprint:p8,setLicense:m8,parseLicense:VT,register:S8,getRegistrationInfo:g8};async function m8(e){if(e&&e.key&&e.company){try{wr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await VT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw wr.error(r),wr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(m8,"setLicense");async function p8(){let e={};try{e=await lE.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw wr.error(r),wr.error(t),new Error(r)}return e}a(p8,"getFingerprint");async function VT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");wr.info("Validating license input...");let r=lE.validateLicense(e,t);if(wr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(wr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(wr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{wr.info("writing license to disk"),await u8.writeFile(h8,JSON.stringify({license_key:e,company:t}))}catch(s){throw wr.error("Failed to write License"),s}return"Registration successful."}a(VT,"parseLicense");async function S8(){let e=await T8();return VT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(S8,"register");async function T8(){let e=await lE.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:TM.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:TM.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{gM.start()}catch(s){wr.error(s)}let r;try{r=await f8(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(T8,"promptForRegistration");async function g8(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await lE.getLicense()}catch(r){throw wr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(_8.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=d8.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=E8.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(g8,"getRegistrationInfo")});var NM=m((eSe,OM)=>{"use strict";var R8=Me(),YT=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+R8.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"}};OM.exports=YT});var IM=m((rSe,yM)=>{"use strict";var bM=Me(),KT=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+bM.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+bM.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"}};yM.exports=KT});var CM=m((nSe,wM)=>{"use strict";var WT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};wM.exports=WT});var DM=m((oSe,LM)=>{"use strict";var A8=Me(),QT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+A8.SERVER_SUFFIX.ADMIN,this.password=r}};LM.exports=QT});var SE=m((cSe,PM)=>{"use strict";var qu=require("path"),hE=require("fs-extra"),O8=NM(),N8=IM(),b8=CM(),y8=DM(),zT=er(),Na=F(),cr=et(),fE=R(),dE=Me(),{CONFIG_PARAMS:nt}=fE,Gu=C(),mE=Y(),UM=mn(),JT=Qe(),Fu="clustering",I8=1e4,MM=5;PM.exports={generateNatsConfig:w8,removeNatsConfig:C8};async function w8(e=!1,t=void 0){mE.initSync();let r=mE.get(nt.ROOTPATH),s=qu.join(r,Fu,dE.PID_FILES.HUB),n=qu.join(r,Fu,dE.PID_FILES.LEAF),i=cr.getConfigFromFile(nt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=qu.join(r,Fu,dE.NATS_CONFIG_FILES.HUB_SERVER),c=qu.join(r,Fu,dE.NATS_CONFIG_FILES.LEAF_SERVER),u=cr.getConfigFromFile(nt.CLUSTERING_TLS_CERTIFICATE),l=cr.getConfigFromFile(nt.CLUSTERING_TLS_PRIVATEKEY),_=cr.getConfigFromFile(nt.CLUSTERING_TLS_CERT_AUTH),d=cr.getConfigFromFile(nt.CLUSTERING_TLS_INSECURE),E=cr.getConfigFromFile(nt.CLUSTERING_TLS_VERIFY),f=cr.getConfigFromFile(nt.CLUSTERING_NODENAME),h=cr.getConfigFromFile(nt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await JT.checkNATSServerInstalled()||pE("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await zT.listUsers(),T=cr.getConfigFromFile(nt.CLUSTERING_USER),A=await zT.getClusterUser();(Na.isEmpty(A)||A.active!==!0)&&pE(`Invalid cluster user '${T}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await EE(nt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await EE(nt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await EE(nt.CLUSTERING_HUBSERVER_NETWORK_PORT),await EE(nt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let g=[],x=[];for(let[Ie,_t]of S.entries())_t.role.role===fE.ROLE_TYPES_ENUM.CLUSTER_USER&&_t.active&&(g.push(new y8(_t.username,UM.decrypt(_t.hash))),x.push(new b8(_t.username,UM.decrypt(_t.hash))));let V=[],{hub_routes:I}=cr.getClusteringRoutes();if(!Na.isEmptyOrZeroLength(I))for(let Ie of I)V.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${Ie.host}:${Ie.port}`);let b=new O8(cr.getConfigFromFile(nt.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,cr.getConfigFromFile(nt.CLUSTERING_HUBSERVER_CLUSTER_NAME),cr.getConfigFromFile(nt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),V,g,x);_==null&&(delete b.tls.ca_file,delete b.leafnodes.tls.ca_file),t=Na.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===fE.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await hE.writeJson(o,b),Gu.trace(`Hub server config written to ${o}`));let M=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,J=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new N8(cr.getConfigFromFile(nt.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[M],[J],g,x,u,l,_,d);_==null&&delete B.tls.ca_file,(t===void 0||t===fE.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await hE.writeJson(c,B),Gu.trace(`Leaf server config written to ${c}`))}a(w8,"generateNatsConfig");async function EE(e){let t=mE.get(e);return Na.isEmpty(t)&&pE(`port undefined for '${e}'`),await Na.isPortTaken(t)&&pE(`'${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(EE,"isPortAvailable");function pE(e){let t=`Error generating clustering config: ${e}`;Gu.error(t),console.error(t),process.exit(1)}a(pE,"generateNatsConfigError");async function C8(e){let{port:t,config_file:r}=JT.getServerConfig(e),{username:s,decrypt_hash:n}=await zT.getClusterUser(),i=0,o=500;for(;i<MM;){try{let l=await JT.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){Gu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=MM)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 Na.async_set_timeout(o*i)}let c="0".repeat(I8),u=qu.join(mE.get(nt.ROOTPATH),Fu,r);await hE.writeFile(u,c),await hE.remove(u),Gu.notify(e,"started.")}a(C8,"removeNatsConfig")});var GM=m((lSe,FM)=>{"use strict";var Cr=Y(),L8=jc(),ce=R(),xu=Me(),yn=require("path"),{PACKAGE_ROOT:gE}=R(),vM=Y(),TE=F(),ba="/dev/null",D8=yn.join(gE,"launchServiceScripts"),BM=yn.join(gE,"utility/scripts"),U8=yn.join(BM,ce.HDB_RESTART_SCRIPT),HM=yn.resolve(gE,"dependencies",`${process.platform}-${process.arch}`,xu.NATS_BINARY_NAME);function qM(){let t=L8.licenseSearch().ram_allocation||ce.RAM_ALLOCATION_ENUM.DEFAULT,r=ce.MEM_SETTING_KEY+t,s={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return TE.noBootFile()&&(s[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=TE.getEnvCliRootPath()),{name:ce.PROCESS_DESCRIPTORS.HDB,script:ce.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:gE}}a(qM,"generateMainServerConfig");var M8=9930;function P8(){Cr.initSync(!0);let e=Cr.get(ce.CONFIG_PARAMS.ROOTPATH),t=yn.join(e,"clustering",xu.NATS_CONFIG_FILES.HUB_SERVER),r=yn.join(Cr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=vM.get(ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=xu.LOG_LEVEL_FLAGS[Cr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==M8?"-"+s:""),script:HM,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Cr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ba,i.error_file=ba),i}a(P8,"generateNatsHubServerConfig");var v8=9940;function B8(){Cr.initSync(!0);let e=Cr.get(ce.CONFIG_PARAMS.ROOTPATH),t=yn.join(e,"clustering",xu.NATS_CONFIG_FILES.LEAF_SERVER),r=yn.join(Cr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=vM.get(ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=xu.LOG_LEVEL_FLAGS[Cr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==v8?"-"+s:""),script:HM,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Cr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ba,i.error_file=ba),i}a(B8,"generateNatsLeafServerConfig");function H8(){Cr.initSync();let e=yn.join(Cr.get(ce.CONFIG_PARAMS.LOGGING_ROOT),ce.LOG_NAMES.HDB),t={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ce.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:D8,autorestart:!1};return Cr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ba,t.error_file=ba),t}a(H8,"generateClusteringUpgradeV4ServiceConfig");function q8(){let e={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.RESTART_HDB};return TE.noBootFile()&&(e[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=TE.getEnvCliRootPath()),{...{name:ce.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:BM},script:U8}}a(q8,"generateRestart");function F8(){return{apps:[qM()]}}a(F8,"generateAllServiceConfigs");FM.exports={generateAllServiceConfigs:F8,generateMainServerConfig:qM,generateRestart:q8,generateNatsHubServerConfig:P8,generateNatsLeafServerConfig:B8,generateClusteringUpgradeV4ServiceConfig:H8}});var ya=m((pSe,eP)=>{"use strict";var Ae=R(),G8=F(),ku=SE(),$u=Qe(),Gs=Me(),fi=GM(),RE=Y(),In=C(),x8=bn(),{startWorker:xM,onMessageFromWorkers:k8}=tt(),$8=Nn(),V8=require("util"),$M=require("child_process"),{execFile:Y8}=$M,dSe=V8.promisify($M.exec),ESe=require("systeminformation"),me;eP.exports={enterPM2Mode:K8,start:mo,stop:jT,reload:VM,restart:YM,list:XT,describe:WM,connect:wn,kill:j8,startAllServices:X8,startService:ZT,getUniqueServicesList:QM,restartAllServices:Z8,isServiceRegistered:zM,reloadStopStart:JM,restartHdb:KM,deleteProcess:z8,startClusteringProcesses:XM,startClusteringThreads:ZM,isHdbRestartRunning:J8,isClusteringRunning:t9,stopClustering:e9,reloadClustering:r9};var{PACKAGE_ROOT:fSe}=R(),hSe=R(),{loggerWithTag:mSe}=In,Vu=!1;k8(e=>{e.type==="restart"&&RE.initSync(!0)});function K8(){Vu=!0}a(K8,"enterPM2Mode");function wn(){return me||(me=require("pm2")),new Promise((e,t)=>{me.connect((r,s)=>{In.setupConsoleLogging(),r&&t(r),e(s)})})}a(wn,"connect");var ur,W8=10,kM;function mo(e){if(Vu)return Q8(e);let t=Y8(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=ur.indexOf(t);i>-1&&ur.splice(i,1),!kM&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<W8&&mo(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=RE.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&Gs.LOG_LEVEL_HIERARCHY[i]>=Gs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Gs.LOG_LEVELS.ERR||l===Gs.LOG_LEVELS.WRN?In.OUTPUTS.STDERR:In.OUTPUTS.STDOUT;In.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=Gs.LOG_LEVELS[d]}if(Gs.LOG_LEVEL_HIERARCHY[i]>=Gs.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===Gs.LOG_LEVELS.ERR||l===Gs.LOG_LEVELS.WRN?In.OUTPUTS.STDERR:In.OUTPUTS.STDOUT;In.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!ur){ur=[];let n=a(()=>{kM=!0,ur&&(ur.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)}ur.push(t)}a(mo,"start");function Q8(e){return new Promise(async(t,r)=>{try{await wn()}catch(s){r(s)}me.start(e,(s,n)=>{s&&(me.disconnect(),r(s)),me.disconnect(),t(n)})})}a(Q8,"startWithPM2");function jT(e){if(!Vu){for(let t of ur||[])t.name===e&&(ur.splice(ur.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await wn()}catch(s){r(s)}me.stop(e,async(s,n)=>{s&&(me.disconnect(),r(s)),me.delete(e,(i,o)=>{i&&(me.disconnect(),r(s)),me.disconnect(),t(o)})})})}a(jT,"stop");function VM(e){return new Promise(async(t,r)=>{try{await wn()}catch(s){r(s)}me.reload(e,(s,n)=>{s&&(me.disconnect(),r(s)),me.disconnect(),t(n)})})}a(VM,"reload");function YM(e){if(!Vu)for(let t of ur||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await wn()}catch(s){r(s)}me.restart(e,(s,n)=>{me.disconnect(),t(n)})})}a(YM,"restart");function z8(e){return new Promise(async(t,r)=>{try{await wn()}catch(s){r(s)}me.delete(e,(s,n)=>{s&&(me.disconnect(),r(s)),me.disconnect(),t(n)})})}a(z8,"deleteProcess");async function KM(){await mo(fi.generateRestart())}a(KM,"restartHdb");async function J8(){let e=await XT();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(J8,"isHdbRestartRunning");function XT(){return new Promise(async(e,t)=>{try{await wn()}catch(r){t(r)}me.list((r,s)=>{r&&(me.disconnect(),t(r)),me.disconnect(),e(s)})})}a(XT,"list");function WM(e){return new Promise(async(t,r)=>{try{await wn()}catch(s){r(s)}me.describe(e,(s,n)=>{s&&(me.disconnect(),r(s)),me.disconnect(),t(n)})})}a(WM,"describe");function j8(){if(!Vu){for(let e of ur||[])e.kill();ur=[];return}return new Promise(async(e,t)=>{try{await wn()}catch(r){t(r)}me.killDaemon((r,s)=>{r&&(me.disconnect(),t(r)),me.disconnect(),e(s)})})}a(j8,"kill");async function X8(){try{await XM(),await ZM(),await mo(fi.generateAllServiceConfigs())}catch(e){throw me.disconnect(),e}}a(X8,"startAllServices");async function ZT(e){try{let t;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=fi.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=fi.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=fi.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=fi.generateNatsHubServerConfig(),await mo(t),await ku.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=fi.generateNatsLeafServerConfig(),await mo(t),await ku.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=fi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await mo(t)}catch(t){throw me.disconnect(),t}}a(ZT,"startService");async function QM(){try{let e=await XT(),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 me.disconnect(),e}}a(QM,"getUniqueServicesList");async function Z8(e=[]){try{let t=!1,r=await QM();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ae.PROCESS_DESCRIPTORS.HDB?t=!0:await YM(o))}t&&await JM(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw me.disconnect(),t}}a(Z8,"restartAllServices");async function zM(e){if(ur?.find(r=>r.name===e))return!0;let t=await $8.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(zM,"isServiceRegistered");async function JM(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?RE.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):RE.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await WM(e),s=G8.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await jT(e),await ZT(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await KM():await VM(e)}a(JM,"reloadStopStart");var jM;async function XM(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];await ZT(t)}}a(XM,"startClusteringProcesses");async function ZM(){jM=xM(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await $u.createWorkQueueStream(Gs.WORK_QUEUE_CONSUMER_NAMES),await $u.updateIngestStreamConsumer(),await $u.updateLocalStreams();let e=await x8.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){In.info("Starting clustering upgrade 4.0.0 process"),xM(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(ZM,"startClusteringThreads");async function e9(){for(let e in Ae.CLUSTERING_PROCESSES)if(e!==Ae.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ae.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await jM.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await jT(t)}}a(e9,"stopClustering");async function t9(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await zM(t)===!1)return!1}return!0}a(t9,"isClusteringRunning");async function r9(){await ku.generateNatsConfig(!0),await $u.reloadNATSHub(),await $u.reloadNATSLeaf(),await ku.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ku.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(r9,"reloadClustering")});var wa=m((TSe,oP)=>{"use strict";var s9=require("minimist"),{isMainThread:rg,parentPort:sP}=require("worker_threads"),ke=R(),{PROCESS_DESCRIPTORS_VALIDATE:Yu}=ke,xs=C(),sg=F(),AE=SE(),Ia=Qe(),eg=Me(),nP=et(),ks=ya(),tP=Nn(),n9=Gi(),{restartWorkers:OE,onMessageByType:i9}=tt(),{handleHDBError:o9,hdb_errors:a9}=z(),{HTTP_STATUS_CODES:c9}=a9,NE=Y();NE.initSync();var Ku=`Restarting HarperDB. This may take up to ${ke.RESTART_TIMEOUT_MS/1e3} seconds.`,u9="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",rP="Clustering is not enabled so cannot be restarted",l9="Invalid service",po,Es;oP.exports={restart:iP,restartService:ng};rg&&i9(ke.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?ng({service:e.workerType}):iP({operation:"restart"})});async function iP(e){Es=Object.keys(e).length===0,po=await ks.isServiceRegistered(ke.HDB_PROC_DESCRIPTOR);let t=s9(process.argv);if(t.service){await ng(t);return}if(Es&&!po){console.error(u9);return}if(Es&&console.log(Ku),po){ks.enterPM2Mode(),xs.notify(Ku);let r=n9(Object.keys(ke.CONFIG_PARAM_MAP),!0);return sg.isEmptyOrZeroLength(Object.keys(r))||nP.updateConfigValue(void 0,void 0,r,!0,!0),d9(),Ku}return rg?(xs.notify(Ku),await ig(),setTimeout(()=>{OE()},50)):sP.postMessage({type:ke.ITC_EVENT_TYPES.RESTART}),Ku}a(iP,"restart");async function ng(e){let{service:t}=e;if(ke.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw o9(new Error,l9,c9.BAD_REQUEST,void 0,void 0,!0);if(po=await ks.isServiceRegistered(ke.HDB_PROC_DESCRIPTOR),!rg)return sP.postMessage({type:ke.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Yu.clustering:if(!NE.get(ke.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=rP;break}Es&&console.log("Restarting clustering"),xs.notify("Restarting clustering"),await ig();break;case Yu.clustering_config:case Yu["clustering config"]:if(!NE.get(ke.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=rP;break}Es&&console.log("Restarting clustering_config"),xs.notify("Restarting clustering_config"),await ks.reloadClustering();break;case"custom_functions":case"custom functions":case Yu.harperdb:case Yu.http_workers:if(Es&&!po){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}Es&&console.log("Restarting http_workers"),xs.notify("Restarting http_workers"),po?await ks.restart(ke.HDB_PROC_DESCRIPTOR):setTimeout(()=>{OE("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(xs.error(r),Es&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(ng,"restartService");async function _9(){await Ia.publishToStream(`${eg.SUBJECT_PREFIXES.TXN}.${eg.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,eg.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ia.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(_9,"postDummyNatsMsg");async function d9(){await ig(),await ks.restart(ke.HDB_PROC_DESCRIPTOR),await sg.async_set_timeout(2e3),NE.get(ke.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await tg(),Es&&(await Ia.closeConnection(),process.exit(0))}a(d9,"restartPM2Mode");async function ig(){if(!nP.getConfigFromFile(ke.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await tP.getHDBProcessInfo()).clustering.length===0)xs.trace("Clustering not running, restart will start clustering services"),await AE.generateNatsConfig(!0),await ks.startClusteringProcesses(),await ks.startClusteringThreads(),await tg(),Es&&await Ia.closeConnection();else{await _9(),await AE.generateNatsConfig(!0),po?(xs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ks.restart(ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ks.restart(ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await tP.getHDBProcessInfo()).clustering.forEach(n=>{xs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await sg.async_set_timeout(3e3),await tg(),await Ia.updateLocalStreams(),Es&&await Ia.closeConnection(),xs.trace("Restart clustering restarting ingest and reply service threads");let t=OE(ke.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=OE(ke.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(ig,"restartClustering");async function tg(){await AE.removeNatsConfig(ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await AE.removeNatsConfig(ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(tg,"removeNatsConfig")});var pP=m((ASe,mP)=>{"use strict";var RSe=require("lodash"),lr=R(),{handleHDBError:aP,hdb_errors:E9}=z(),{HDB_ERROR_MSGS:f9,HTTP_STATUS_CODES:h9}=E9,og=C();mP.exports={getRolePermissions:p9};var So=Object.create(null),m9=a(e=>({key:e,perms:{}}),"perms_template_obj"),_P=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),dP=a((e=!1,t=!1,r=!1,s=!1)=>({[lr.PERMS_CRUD_ENUM.READ]:e,[lr.PERMS_CRUD_ENUM.INSERT]:t,[lr.PERMS_CRUD_ENUM.UPDATE]:r,[lr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),ag=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...dP(t,r,s,n)}),"table_perms_template"),cP=a((e,t=dP())=>({attribute_name:e,describe:hP(t),[Wu]:t[Wu],[cg]:t[cg],[ug]:t[ug]}),"attr_perms_template"),uP=a((e,t=!1)=>({attribute_name:e,describe:t,[Wu]:t}),"timestamp_attr_perms_template"),{READ:Wu,INSERT:cg,UPDATE:ug}=lr.PERMS_CRUD_ENUM,EP=Object.values(lr.PERMS_CRUD_ENUM),fP=[Wu,cg,ug];function p9(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[lr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(So[t]&&So[t].key===s)return So[t].perms;let n=S9(e,r);return So[t]?So[t].key=s:So[t]=m9(s),So[t].perms=n,n}catch(r){if(!e[lr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[lr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<lr.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 og.error(s),og.debug(r),aP(new Error,f9.OUTDATED_PERMS_TRANSLATION_ERROR,h9.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
10
|
+
${r.stack}`;throw og.error(s),aP(new Error)}}}a(p9,"getRolePermissions");function S9(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[lr.SYSTEM_SCHEMA_NAME]=s[lr.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]=T9(t[i]);return}r[i]=_P(),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=g9(c,u);r[i].describe||EP.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=ag()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=ag()})}),r}a(S9,"translateRolePermissions");function T9(e){let t=_P(!0);return Object.keys(e).forEach(r=>{t.tables[r]=ag(!0,!0,!0,!0,!0)}),t}a(T9,"createStructureUserPermissions");function g9(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 lr.TIME_STAMP_NAMES.includes(d)&&(E=uP(d,_[Wu])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=cP(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=hP(_),n.attribute_permissions.push(_),c||R9(_,u)}else if(l!==o){let _;lr.TIME_STAMP_NAMES.includes(l)?_=uP(l):_=cP(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=lP(n),n}else return e.describe=lP(e),e}a(g9,"getTableAttrPerms");function lP(e){return EP.filter(t=>e[t]).length>0}a(lP,"getSchemaTableDescribePerm");function hP(e){return fP.filter(t=>e[t]).length>0}a(hP,"getAttributeDescribePerm");function R9(e,t){fP.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(R9,"checkForHashPerms")});var SP={};Ke(SP,{Resources:()=>bE,keyArrayToString:()=>Ca,resetResources:()=>A9,resources:()=>hi});function A9(){return hi=new bE}function Ca(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var bE,hi,Qu=Te(()=>{Yi();bE=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 Xe(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(A9,"resetResources");a(Ca,"keyArrayToString")});var TP={};Ke(TP,{Headers:()=>To});var To,yE=Te(()=>{To=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 zu={};Ke(zu,{authentication:()=>bP,login:()=>D9,logout:()=>U9,start:()=>L9});async function bP(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?y9?b9:[]:N9?O9:[];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 IE&&(h["Access-Control-Allow-Credentials"]="true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),IE&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(IE){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let S=n.indexOf(";",h),T=n.indexOf("=",h);c=n.slice(T+1,S===-1?n.length:S),u=await RP.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,S)=>{let T=new LE.AuthAuditLog(f,h,Lt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);T.auth_strategy=S,c&&(T.session_id=c),e.headers.referer&&(T.referer=e.headers.referer),e.headers.origin&&(T.origin=e.headers.origin),h===Lt.AUTH_AUDIT_STATUS.SUCCESS?gP.notify(T):gP.error(T)},"authAuditLog"),_;if(s){if(_=La.get(s),!_){let[f,h]=s.split(" "),S,T;try{switch(f){case"Basic":[S,T]=atob(h).split(":"),_=S||T?await Et.auth(S,T):null;break;case"Bearer":try{_=await(0,CE.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,CE.validateRefreshToken)(h),{status:-1}}catch{throw A}}break}}catch(A){return C9&&(La.get(h)||(La.set(h,h),l(S,Lt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:Cn({error:A.message},e)}}La.set(s,_),w9&&l(_.username,Lt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await Et.auth(u.user,null,!1):I9&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,wE.getSuperUser)());IE&&(e.session.update=function(f){if(!c){c=(0,OP.v4)();let S=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${c}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",S):d?.headers?.set&&d.headers.set("Set-Cookie",S)}return f.id=c,RP.put(f)},e.login=async function(f,h){e.user=await Et.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")&&hi.loginPath?(d.status=302,d.headers.set("Location",hi.loginPath(e))):d.headers.set("WWW-Authenticate","Basic"));let E=o.length;if(E>0){let f=d.headers;f||(d.headers=f=new To);for(let h=0;h<E;){let S=o[h++];f.set(S,o[h++])}}return o=null,d}function L9({server:e,port:t}){e.request(bP,{port:t||"all"}),AP||(AP=!0,setInterval(()=>{La=new Map},Qr.get(Lt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),NP.user.addListener(()=>{La=new Map}))}async function D9(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 U9(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var wE,CE,OP,Qr,Lt,LE,NP,gP,O9,N9,b9,y9,RP,IE,I9,w9,C9,La,AP,DE=Te(()=>{wE=D(er());rs();Qu();CE=D(Iu());_e();OP=require("uuid"),Qr=D(Y()),Lt=D(R()),LE=D(C());Da();NP=D(Zc());yE();gP=(0,LE.loggerWithTag)("auth-event");Qr.initSync();O9=Qr.get(Lt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),N9=Qr.get(Lt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),b9=Qr.get(Lt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),y9=Qr.get(Lt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);Et.auth=wE.findAndValidateUser;RP=ft({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),IE=Qr.get(Lt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,I9=Qr.get(Lt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,w9=Qr.get(Lt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,C9=Qr.get(Lt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,La=new Map;a(bP,"authentication");a(L9,"start");a(D9,"login");a(U9,"logout")});var UP=m((MSe,DP)=>{"use strict";var pe=require("joi"),yP=require("fs-extra"),IP=require("path"),Dn=He(),wP=Y(),CP=R(),LP=C(),{hdb_errors:M9}=z(),{HDB_ERROR_MSGS:kt}=M9,Ln=/^[a-zA-Z0-9-_]+$/;DP.exports={getDropCustomFunctionValidator:v9,setCustomFunctionValidator:B9,addComponentValidator:G9,dropCustomFunctionProjectValidator:x9,packageComponentValidator:k9,deployComponentValidator:$9,setComponentFileValidator:H9,getComponentFileValidator:F9,dropComponentFileValidator:q9};function UE(e,t,r){try{let s=wP.get(CP.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=IP.join(s,t);return yP.existsSync(n)?e?t:r.message(kt.PROJECT_EXISTS):e?r.message(kt.NO_PROJECT):t}catch(s){return LP.error(s),r.message(kt.VALIDATION_ERR)}}a(UE,"checkProjectExists");function Ju(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Ju,"checkFilePath");function P9(e,t,r,s){try{let n=wP.get(CP.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=IP.join(n,e,t,r+".js");return yP.existsSync(i)?r:s.message(kt.NO_FILE)}catch(n){return LP.error(n),s.message(kt.VALIDATION_ERR)}}a(P9,"checkFileExists");function v9(e){let t=pe.object({project:pe.string().pattern(Ln).custom(UE.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),type:pe.string().valid("helpers","routes").required(),file:pe.string().pattern(Ln).custom(P9.bind(null,e.project,e.type)).custom(Ju).required().messages({"string.pattern.base":kt.BAD_FILE_NAME})});return Dn.validateBySchema(e,t)}a(v9,"getDropCustomFunctionValidator");function B9(e){let t=pe.object({project:pe.string().pattern(Ln).custom(UE.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),type:pe.string().valid("helpers","routes").required(),file:pe.string().custom(Ju).required(),function_content:pe.string().required()});return Dn.validateBySchema(e,t)}a(B9,"setCustomFunctionValidator");function H9(e){let t=pe.object({project:pe.string().pattern(Ln).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),file:pe.string().custom(Ju).required(),payload:pe.string().optional(),encoding:pe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Dn.validateBySchema(e,t)}a(H9,"setComponentFileValidator");function q9(e){let t=pe.object({project:pe.string().pattern(Ln).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),file:pe.string().custom(Ju).optional()});return Dn.validateBySchema(e,t)}a(q9,"dropComponentFileValidator");function F9(e){let t=pe.object({project:pe.string().required(),file:pe.string().custom(Ju).required(),encoding:pe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Dn.validateBySchema(e,t)}a(F9,"getComponentFileValidator");function G9(e){let t=pe.object({project:pe.string().pattern(Ln).custom(UE.bind(null,!1)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME})});return Dn.validateBySchema(e,t)}a(G9,"addComponentValidator");function x9(e){let t=pe.object({project:pe.string().pattern(Ln).custom(UE.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME})});return Dn.validateBySchema(e,t)}a(x9,"dropCustomFunctionProjectValidator");function k9(e){let t=pe.object({project:pe.string().pattern(Ln).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),skip_node_modules:pe.boolean()});return Dn.validateBySchema(e,t)}a(k9,"packageComponentValidator");function $9(e){let t=pe.object({project:pe.string().pattern(Ln).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),payload:pe.string().optional().messages({"string.pattern.base":kt.BAD_PACKAGE}),package:pe.string().optional()});return Dn.validateBySchema(e,t)}a($9,"deployComponentValidator")});var PE=m((vSe,vP)=>{"use strict";var Ce=require("fs-extra"),lg=require("fast-glob"),Se=require("path"),MP=require("tar-fs"),V9=require("uuid").v4,_g=require("normalize-path"),$s=UP(),Dt=C(),Ue=R(),Je=Y(),ME=et(),Y9=F(),{PACKAGE_ROOT:K9}=R(),{handleHDBError:mt,hdb_errors:W9}=z(),{HDB_ERROR_MSGS:mi,HTTP_STATUS_CODES:pt}=W9,Q9=Se.join(K9,"application-template"),dg=Se.join(Je.get(Ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function PP(){let e=Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw mt(new Error,mi.NOT_ENABLED,pt.BAD_REQUEST,void 0,void 0,!0)}a(PP,"isCFEnabled");function z9(){Dt.trace("getting custom api status");let e={};try{e={is_enabled:Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw mt(new Error,mi.FUNCTION_STATUS,pt.INTERNAL_SERVER_ERROR,Dt.ERR,t)}return e}a(z9,"customFunctionsStatus");function J9(){Dt.trace("getting custom api endpoints");let e={},t=Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{lg.sync(_g(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:lg.sync(_g(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:lg.sync(_g(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw mt(new Error,mi.GET_FUNCTIONS,pt.INTERNAL_SERVER_ERROR,Dt.ERR,r)}return e}a(J9,"getCustomFunctions");function j9(e){e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=$s.getDropCustomFunctionValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);Dt.trace("getting custom api endpoint file content");let r=Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=Se.join(r,s,n,i+".js");try{return Ce.readFileSync(o,{encoding:"utf8"})}catch(c){throw mt(new Error,mi.GET_FUNCTION,pt.INTERNAL_SERVER_ERROR,Dt.ERR,c)}}a(j9,"getCustomFunction");function X9(e){PP(),e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=$s.setCustomFunctionValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);Dt.trace("setting custom function file content");let r=Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return Ce.outputFileSync(Se.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw mt(new Error,mi.SET_FUNCTION,pt.INTERNAL_SERVER_ERROR,Dt.ERR,c)}}a(X9,"setCustomFunction");function Z9(e){e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=$s.getDropCustomFunctionValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);Dt.trace("dropping custom function file");let r=Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return Ce.unlinkSync(Se.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw mt(new Error,mi.DROP_FUNCTION,pt.INTERNAL_SERVER_ERROR,Dt.ERR,o)}}a(Z9,"dropCustomFunction");function e7(e){PP(),e.project&&(e.project=Se.parse(e.project).name);let t=$s.addComponentValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);Dt.trace("adding component");let r=Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=Se.join(r,s);return Ce.mkdirSync(n,{recursive:!0}),Ce.copySync(Q9,n),`Successfully added project: ${s}`}catch(n){throw mt(new Error,mi.ADD_FUNCTION,pt.INTERNAL_SERVER_ERROR,Dt.ERR,n)}}a(e7,"addComponent");function t7(e){e.project&&(e.project=Se.parse(e.project).name);let t=$s.dropCustomFunctionProjectValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);Dt.trace("dropping custom function project");let r=Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=Je.get(Ue.CONFIG_PARAMS.APPS);if(!Y9.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 ME.updateConfigValue(Ue.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=Se.join(r,s);return Ce.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw mt(new Error,mi.DROP_FUNCTION_PROJECT,pt.INTERNAL_SERVER_ERROR,Dt.ERR,i)}}a(t7,"dropCustomFunctionProject");async function r7(e){e.project&&(e.project=Se.parse(e.project).name);let t=$s.packageComponentValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);let r=Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;Dt.trace("packaging component",s);let n;try{n=await Ce.realpath(Se.join(r,s))}catch(u){if(u.code!==Ue.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Ce.realpath(Se.join(Je.get(Ue.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(l){if(l.code===Ue.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Ce.ensureDir(dg);let i=Se.join(dg,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(Se.join(n,"node_modules"))}),MP.pack(n,o).pipe(Ce.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Ce.readFileSync(i,{encoding:"base64"});return await Ce.remove(i),{project:s,payload:c}}a(r7,"packageComponent");async function s7(e){e.project&&(e.project=Se.parse(e.project).name);let t=$s.deployComponentValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);let r=Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,package:i}=e;if(Dt.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 Ce.ensureDir(o);let c,u;do c=Se.join(dg,V9()+".tar"),u=await Ce.pathExists(c);while(u);await Ce.outputFile(c,n,{encoding:"base64"});let l=Ce.createReadStream(c);l.pipe(MP.extract(o)),await new Promise(_=>l.on("end",_)),await Ce.unlink(c)}return ME.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a(s7,"deployComponent");async function n7(){let e=ME.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 Ce.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 Ce.stat(u),_={name:Se.basename(c),mtime:l.mtime,size:l.size};n.entries.push(_)}}return n},"walk_dir");return r(Je.get(Ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:Je.get(Ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(Se.sep).slice(-1).pop(),entries:t})}a(n7,"getComponents");async function i7(e){let t=$s.getComponentFileValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await Ce.readFile(Se.join(Je.get(Ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file),r)}catch(s){throw s.code===Ue.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Se.join(e.project,e.file)}'`):s}}a(i7,"getComponentFile");async function o7(e){let t=$s.setComponentFileValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=Se.join(Je.get(Ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file);return e.payload!==void 0?(await Ce.ensureFile(s),await Ce.outputFile(s,e.payload,r)):await Ce.ensureDir(s),"Successfully set component: "+e.file}a(o7,"setComponentFile");async function a7(e){let t=$s.dropComponentFileValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);let r=e.file?Se.join(e.project,e.file):e.project,s=Se.join(Je.get(Ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await Ce.pathExists(s)&&await Ce.remove(s),ME.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(a7,"dropComponent");vP.exports={customFunctionsStatus:z9,getCustomFunctions:J9,getCustomFunction:j9,setCustomFunction:X9,dropCustomFunction:Z9,addComponent:e7,dropCustomFunctionProject:t7,packageComponent:r7,deployComponent:s7,getComponents:n7,getComponentFile:i7,setComponentFile:o7,dropComponent:a7}});var Eg=m((HSe,HP)=>{"use strict";var Vs=require("joi"),BP=He();HP.exports={readTransactionLogValidator:c7,deleteTransactionLogsBeforeValidator:u7};function c7(e){let t=Vs.object({schema:Vs.string().required(),table:Vs.string().required(),from:Vs.date().timestamp(),to:Vs.date().timestamp(),limit:Vs.number().min(1)});return BP.validateBySchema(e,t)}a(c7,"readTransactionLogValidator");function u7(e){let t=Vs.object({schema:Vs.string().required(),table:Vs.string().required(),timestamp:Vs.date().timestamp().required()});return BP.validateBySchema(e,t)}a(u7,"deleteTransactionLogsBeforeValidator")});var BE=m((FSe,kP)=>{"use strict";var fg=R(),vE=Qe(),qP=F(),FP=Y(),GP=mn(),{handleHDBError:Ua,hdb_errors:l7}=z(),{HTTP_STATUS_CODES:Ma}=l7,{readTransactionLogValidator:_7,deleteTransactionLogsBeforeValidator:d7}=Eg(),xP="This operation relies on clustering and cannot run with it disable.",E7="Logs successfully deleted from transaction log.",f7="All logs successfully deleted from transaction log.";kP.exports={readTransactionLog:h7,deleteTransactionLogsBefore:m7};async function*h7(e){let t=_7(e);if(t)throw Ua(t,t.message,Ma.BAD_REQUEST,void 0,void 0,!0);if(!FP.get(fg.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ua(new Error,xP,Ma.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=qP.checkSchemaTableExist(r,s);if(n)throw Ua(new Error,n,Ma.NOT_FOUND,void 0,void 0,!0);let i=GP.createNatsTableStreamName(r,s),o=await vE.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===fg.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}a(h7,"readTransactionLog");async function m7(e){let t=d7(e);if(t)throw Ua(t,t.message,Ma.BAD_REQUEST,void 0,void 0,!0);if(!FP.get(fg.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ua(new Error,xP,Ma.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=qP.checkSchemaTableExist(r,s);if(i)throw Ua(new Error,i,Ma.NOT_FOUND,void 0,void 0,!0);let o=GP.createNatsTableStreamName(r,s),{jsm:c}=await vE.getNATSReferences(),u=await vE.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=E7,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=f7):d=(await vE.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(m7,"deleteTransactionLogsBefore")});var GE=m((xSe,zP)=>{"use strict";var HE=require("joi"),qE=require("path"),$P=require("fs-extra"),{exec:p7}=require("child_process"),S7=require("util"),VP=S7.promisify(p7),ju=R(),{handleHDBError:Pa,hdb_errors:T7}=z(),{HTTP_STATUS_CODES:va}=T7,Zu=Y(),g7=He(),Xu=C();Zu.initSync();var hg=Zu.get(ju.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),YP="npm install --omit=dev --json",R7=`${YP} --dry-run`;zP.exports={installModules:b7,auditModules:y7,installAllRootModules:A7,uninstallRootModule:O7,linkHarperdb:N7};async function A7(e=!1){await FE(),await el(e?"npm install --ignore-scripts":"npm install",Zu.get(ju.CONFIG_PARAMS.ROOTPATH))}a(A7,"installAllRootModules");async function O7(e){await el(`npm uninstall ${e}`,Zu.get(ju.CONFIG_PARAMS.ROOTPATH))}a(O7,"uninstallRootModule");async function N7(){await FE(),await el(`npm link ${ju.PACKAGE_ROOT}`,Zu.get(ju.CONFIG_PARAMS.ROOTPATH))}a(N7,"linkHarperdb");async function el(e,t=void 0){let{stdout:r,stderr:s}=await VP(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
|
|
11
|
+
`,""));return Xu.trace(r,s),r.replace(`
|
|
12
|
+
`,"")}a(el,"runCommand");async function b7(e){Xu.info(`starting installModules for request: ${e}`);let t=QP(e);if(t)throw Pa(t,t.message,va.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?R7:YP;await FE(),await WP(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=qE.join(hg,u),_,d=null;try{let{stdout:E,stderr:f}=await VP(n,{cwd:l});_=E?E.replace(`
|
|
13
13
|
`,""):null,d=f?f.replace(`
|
|
14
|
-
`,""):null}catch(E){E.stderr?i[u].npm_error=
|
|
15
|
-
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(GP,"parseNPMStdErr");async function g7(e){zu.info(`starting auditModules for request: ${e}`);let t=kP(e);if(t)throw Ua(t,t.message,Ma.BAD_REQUEST);let{projects:r}=e;await BE(),await xP(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=vE.join(lg,o);s[o]={npm_output:null,npm_error:null};try{let u=await ju("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=GP(u.stderr)}}return zu.info(`finished auditModules with response ${s}`),s}a(g7,"auditModules");async function BE(){try{return await ju("npm -v"),!0}catch{throw Ua(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Ma.BAD_REQUEST,void 0,void 0,!0)}}a(BE,"checkNPMInstalled");async function xP(e){if(!Array.isArray(e)||e.length===0)throw Ua(new Error,"projects argument must be an array with at least 1 element",Ma.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=vE.join(lg,i.toString());if(!await HP.pathExists(o)){t.push(i);continue}let u=vE.join(o,"package.json");await HP.pathExists(u)||r.push(i)}if(t.length>0)throw Ua(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Ma.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ua(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Ma.BAD_REQUEST,void 0,void 0,!0)}a(xP,"checkProjectPaths");function kP(e){let t=PE.object({projects:PE.array().min(1).items(PE.string()).required(),dry_run:PE.boolean().default(!1)});return f7.validateBySchema(e,t)}a(kP,"modulesValidator")});var YP=m((MSe,VP)=>{"use strict";var _g=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}};VP.exports=_g});var WP=m((vSe,KP)=>{"use strict";var dg=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};KP.exports=dg});var fg=m((HSe,zP)=>{"use strict";var QP=YP(),R7=WP(),{HDB_ERROR_MSGS:A7}=gr(),Eg=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=A7.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 QP(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new R7(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 QP(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}};zP.exports=Eg});var xE=m((FSe,_v)=>{"use strict";var hg=Xt(),qE=jt(),Qr=Dd(),el=Xn(),mg=Xi(),O7=qS(),N7=SD(),tl=er(),FE=Bd(),mt=D(),b7=zS(),y7=wu(),I7=wT(),w7=Zd(),C7=CT(),L7=LT(),D7=sE(),U7=iE(),pg=aE(),Dn=F(),M7=EM(),Sg=uE(),XP=ya(),Wr=g(),ZP=dP(),P7=On(),ev=Nu(),tv=(wE(),te(Ku)),rv=et(),Lr=DE(),v7=require("alasql"),sv=ME(),nv=HE(),iv=fg(),{handleHDBError:_r,hdb_errors:ov}=z(),{HDB_ERROR_MSGS:Ut,HTTP_STATUS_CODES:Xu}=ov,B=new Map,av="delete",mi="insert",Un="read",So="update",Zu="describe",JP=el.describeSchema.name,jP=el.describeTable.name,cv={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},B7="catchup",H7="handleGetJob",q7="handleGetJobsByStartDate",GE={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},F7=[Qr.createTable.name,Qr.createAttribute.name,Qr.dropTable.name,Qr.dropAttribute.name],uv={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},G=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};B.set(hg.insert.name,new G(!1,[mi]));B.set(hg.update.name,new G(!1,[So]));B.set(hg.upsert.name,new G(!1,[mi,So]));B.set(qE.searchByConditions.name,new G(!1,[Un]));B.set(qE.searchByHash.name,new G(!1,[Un]));B.set(qE.searchByValue.name,new G(!1,[Un]));B.set(qE.search.name,new G(!1,[Un]));B.set(Qr.createSchema.name,new G(!0,[]));B.set(Qr.createTable.name,new G(!0,[]));B.set(Qr.createAttribute.name,new G(!1,[mi]));B.set(Qr.dropSchema.name,new G(!0,[]));B.set(Qr.dropTable.name,new G(!0,[]));B.set(Qr.dropAttribute.name,new G(!0,[]));B.set(el.describeSchema.name,new G(!1,[Un]));B.set(el.describeTable.name,new G(!1,[Un]));B.set(mg.deleteRecord.name,new G(!1,[av]));B.set(tl.addUser.name,new G(!0,[]));B.set(tl.alterUser.name,new G(!0,[]));B.set(tl.dropUser.name,new G(!0,[]));B.set(tl.listUsersExternal.name,new G(!0,[]));B.set(FE.listRoles.name,new G(!0,[]));B.set(FE.addRole.name,new G(!0,[]));B.set(FE.alterRole.name,new G(!0,[]));B.set(FE.dropRole.name,new G(!0,[]));B.set(b7.name,new G(!0,[]));B.set(y7.name,new G(!0,[]));B.set(I7.name,new G(!0,[]));B.set(w7.name,new G(!0,[]));B.set(C7.name,new G(!0,[]));B.set(L7.name,new G(!0,[]));B.set(pg.setRoutes.name,new G(!0,[]));B.set(pg.getRoutes.name,new G(!0,[]));B.set(pg.deleteRoutes.name,new G(!0,[]));B.set(rv.setConfiguration.name,new G(!0,[]));B.set(D7.clusterStatus.name,new G(!0,[]));B.set(U7.name,new G(!0,[]));B.set(Sg.getFingerprint.name,new G(!0,[]));B.set(Sg.setLicense.name,new G(!0,[]));B.set(mg.deleteFilesBefore.name,new G(!0,[]));B.set(mg.deleteAuditLogsBefore.name,new G(!0,[]));B.set(XP.restart.name,new G(!0,[]));B.set(XP.restartService.name,new G(!0,[]));B.set(O7.name,new G(!0,[]));B.set(N7.name,new G(!0,[Un]));B.set(P7.systemInformation.name,new G(!0,[]));B.set(rv.getConfiguration.name,new G(!0,[]));B.set(sv.readTransactionLog.name,new G(!0,[]));B.set(sv.deleteTransactionLogsBefore.name,new G(!0,[]));B.set(nv.installModules.name,new G(!0,[]));B.set(nv.auditModules.name,new G(!0,[]));B.set(ev.createTokens.name,new G(!1,[]));B.set(ev.refreshOperationToken.name,new G(!1,[]));B.set(tv.login.name,new G(!1,[]));B.set(tv.logout.name,new G(!1,[]));B.set(Lr.customFunctionsStatus.name,new G(!0,[]));B.set(Lr.getCustomFunctions.name,new G(!0,[]));B.set(Lr.getComponents.name,new G(!0,[]));B.set(Lr.getComponentFile.name,new G(!0,[]));B.set(Lr.setComponentFile.name,new G(!0,[]));B.set(Lr.dropComponent.name,new G(!0,[]));B.set(Lr.getCustomFunction.name,new G(!0,[]));B.set(Lr.setCustomFunction.name,new G(!0,[]));B.set(Lr.dropCustomFunction.name,new G(!0,[]));B.set(Lr.addComponent.name,new G(!0,[]));B.set(Lr.dropCustomFunctionProject.name,new G(!0,[]));B.set(Lr.packageComponent.name,new G(!0,[]));B.set(Lr.deployComponent.name,new G(!0,[]));B.set(Sg.getRegistrationInfo.name,new G(!1,[]));B.set(tl.userInfo.name,new G(!1,[]));B.set(el.describeAll.name,new G(!1,[]));B.set(H7,new G(!1,[]));B.set(q7,new G(!0,[]));B.set(B7,new G(!0,[]));B.set(GE.CSV_DATA_LOAD,new G(!1,[mi,So]));B.set(GE.CSV_URL_LOAD,new G(!1,[mi,So]));B.set(GE.CSV_FILE_LOAD,new G(!1,[mi,So]));B.set(GE.IMPORT_FROM_S3,new G(!1,[mi,So]));B.set(uv.EXPORT_TO_S3,new G(!0,[]));B.set(uv.EXPORT_LOCAL,new G(!0,[]));B.set(Wr.VALID_SQL_OPS_ENUM.DELETE,new G(!1,[av]));B.set(Wr.VALID_SQL_OPS_ENUM.SELECT,new G(!1,[Un]));B.set(Wr.VALID_SQL_OPS_ENUM.INSERT,new G(!1,[mi]));B.set(Wr.VALID_SQL_OPS_ENUM.UPDATE,new G(!1,[So]));_v.exports={verifyPerms:x7,verifyPermsAst:G7,verifyBulkLoadAttributePerms:$7};function G7(e,t,r){if(Dn.isEmptyOrZeroLength(e))throw mt.info("verify_perms_ast has an empty user parameter"),_r(new Error);if(Dn.isEmptyOrZeroLength(t))throw mt.info("verify_perms_ast has an empty user parameter"),_r(new Error);if(Dn.isEmptyOrZeroLength(r))throw mt.info("verify_perms_ast has a null operation parameter"),_r(new Error);try{let s=new iv,n=new M7(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw mt.info("No schemas defined in verifyPermsAst(), will not continue."),_r(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&cv[r])throw _r(new Error,Ut.DROP_SYSTEM,Xu.FORBIDDEN);if(c&&!u)return null;let l=ZP.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof v7.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 _=lv(t,r,o,s);return _||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=n.getAttributesBySchemaTableName(E,d[f]),S=gg(t.role.permission,E,d[f]);Tg(h,S,r,d[f],E,s)}}),s.getPermsResponse())}catch(s){throw _r(s)}}a(G7,"verifyPermsAst");function x7(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw mt.info("null required parameter in verifyPerms"),_r(new Error,Ut.DEFAULT_INVALID_REQUEST,Xu.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 iv;if(Dn.isEmptyOrZeroLength(e.hdb_user.role)||Dn.isEmptyOrZeroLength(e.hdb_user.role.permission))return mt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ut.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(Wr.SYSTEM_SCHEMA_NAME)||n===Wr.SYSTEM_SCHEMA_NAME;if(_&&cv[r])throw _r(new Error,Ut.DROP_SYSTEM,Xu.FORBIDDEN);if(u&&!_||l===!0&&(r===Qr.createSchema.name||r===Qr.dropSchema.name))return null;if(F7.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=ZP.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===JP||r===jP){if(n===Wr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ut.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===JP&&(!d[n]||!d[n][Zu]))return c.handleInvalidItem(Ut.SCHEMA_NOT_FOUND(n));if(r===jP&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Zu]))return c.handleInvalidItem(Ut.TABLE_NOT_FOUND(n,i))}}let E=lv(e.hdb_user,r,o,c,s);if(E)return E;if(B.get(r)&&B.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Wr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let S=[],p=d[n].tables[i];p[Wr.PERMS_CRUD_ENUM.READ]&&(p.attribute_permissions.length>0?p.attribute_permissions.filter(R=>R[Wr.PERMS_CRUD_ENUM.READ]).forEach(R=>{S.push(R.attribute_name)}):S=global.hdb_schema[n][i].attributes.map(b=>b.attribute),e.get_attributes=S)}let f=k7(e),h=gg(e.hdb_user.role.permission,n,i);return Tg(f,h,r,i,n,c,s),c.getPermsResponse()}a(x7,"verifyPerms");function lv(e,t,r,s,n){if(Dn.arrayHasEmptyValues([e,t,r]))throw mt.info("hasPermissions has an invalid parameter"),_r(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||B.get(t).requires_su))return null;if(!B.get(t))throw mt.info(`operation ${t} not found.`),_r(new Error,Ut.OP_NOT_FOUND(t),Xu.BAD_REQUEST);if(B.get(t)&&B.get(t).requires_su)return mt.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ut.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Zu]===!1){s.addInvalidItem(Ut.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ut.SCHEMA_NOT_FOUND(u));continue}let l=r.get(u);for(let _ of l){let d=o[u].tables[_];if(!d||d[Zu]===!1)s.addInvalidItem(Ut.TABLE_NOT_FOUND(u,_));else try{let E=[],f=B.get(t).perms;!Dn.isEmpty(n)&&f.includes(n)&&(f=[n]);for(let h=0;h<f.length;h++){let S=f[h],p=d[S];(p==null||p===!1)&&(mt.info(`Required ${S} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),E.push(S))}E.length>0&&s.addUnauthorizedTable(u,_,E)}catch(E){let f=Ut.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw mt.error(f),mt.error(E),_r(ov.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?s.getPermsResponse():null}a(lv,"hasPermissions");function Tg(e,t,r,s,n,i,o){if(!e||!t)throw mt.info("no attributes specified in checkAttributePerms."),_r(new Error);let c=B.get(r).perms;if(!c||c==="")throw mt.info(`no permissions found for ${r} in checkAttributePerms().`),_r(new Error);if(Dn.isEmptyOrZeroLength(t))return mt.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[Zu]===!1){i.addInvalidItem(Ut.ATTR_NOT_FOUND(n,s,_),n,s);continue}if(c)for(let E of c){if(Wr.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==Un)throw _r(new Error,Ut.SYSTEM_TIMESTAMP_PERMS_ERR,Xu.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(Ut.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}a(Tg,"checkAttributePerms");function k7(e){let t=new Set;try{if(e.action)return t;if(e.operation===Wr.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){mt.info(r)}return t}a(k7,"getRecordAttributes");function gg(e,t,r){let s=new Map;if(Dn.isEmpty(e))return mt.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{mt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(gg,"getAttributePermissions");function $7(e,t,r,s,n,i,o){let c=new Set(i),u=gg(e,s,n);Tg(c,u,t,n,s,o,r)}a($7,"verifyBulkLoadAttributePerms")});var $E=m((xSe,mv)=>{"use strict";mv.exports={evaluateSQL:ree,processAST:hv,convertSQLToAST:fv,checkASTPermissions:Ev};var V7=Xt(),dv=require("util"),Y7=dv.callbackify(V7.insert),K7=jt().search,W7=hL().update,Q7=dv.callbackify(W7),z7=pL().convertDelete,pi=require("alasql"),J7=xE(),kE=D(),j7=fd(),X7=F(),rl=g(),{hdb_errors:Z7,handleHDBError:Rg}=z(),{HTTP_STATUS_CODES:Ag}=Z7;j7(pi);var eee=403,tee="There was a problem performing this insert. Please check the logs and try again.",Og=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function ree(e,t){let r=e.parsed_sql_object;if(!r){r=fv(e.sql);let s,n=r.ast.statements[0];if(n instanceof pi.yy.Insert?s=n.into.databaseid:n instanceof pi.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof pi.yy.Update||n instanceof pi.yy.Delete?s=n.table.databaseid:kE.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof pi.yy.Select)&&X7.isEmptyOrZeroLength(s))return t("No schema specified",null)}hv(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(ree,"evaluateSQL");function Ev(e,t){let r;try{r=J7.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(Ev,"checkASTPermissions");function fv(e){let t=new Og;if(!e)throw Rg(new Error,"The 'sql' parameter is missing from the request body",Ag.BAD_REQUEST);try{let r=e.trim(),s=pi.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
16
|
-
`);throw s[1]?Rg(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Ag.BAD_REQUEST):Rg(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Ag.BAD_REQUEST)}return t}a(fv,"convertSQLToAST");function hv(e,t,r){try{let s=see;if(!e.bypass_auth&&!t.permissions_checked){let i=Ev(e,t);if(i&&i.length>0)return r(eee,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case rl.VALID_SQL_OPS_ENUM.SELECT:s=K7,n=t.ast.statements[0];break;case rl.VALID_SQL_OPS_ENUM.INSERT:s=nee;break;case rl.VALID_SQL_OPS_ENUM.UPDATE:s=Q7;break;case rl.VALID_SQL_OPS_ENUM.DELETE:s=z7;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(hv,"processAST");function see(e,t){kE.info(e),t("unknown sql statement")}a(see,"nullFunction");function nee({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=iee(i,e.values)}catch(o){return r(o)}Y7(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){kE.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(nee,"convertInsert");function iee(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]]=pi.compile(`SELECT ${n.toString()} AS [${rl.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw kE.error(r),new Error(tee)}}a(iee,"createDataObjects")});var Ng=m(($Se,Sv)=>{"use strict";var{S3:oee,GetObjectCommand:aee}=require("@aws-sdk/client-s3");Sv.exports={getFileStreamFromS3:cee,getS3AuthObj:pv};async function cee(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await pv(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new aee(r))).Body}a(cee,"getFileStreamFromS3");function pv(e,t,r){return new oee({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(pv,"getS3AuthObj")});var VE=m((YSe,wv)=>{"use strict";var Rv=jt(),uee=$E(),lee=Ng(),{AsyncParser:_ee,Transform:dee}=require("json2csv"),nl=require("stream"),Dr=F(),bg=require("fs-extra"),Eee=require("path"),zr=D(),{promisify:Av}=require("util"),sl=F(),{handleHDBError:it,hdb_errors:fee}=z(),{HDB_ERROR_MSGS:dr,HTTP_STATUS_CODES:ot}=fee,{streamAsJSON:hee}=_m(),{Upload:mee}=require("@aws-sdk/lib-storage"),Tv=["search_by_value","search_by_hash","sql"],gv=["json","csv"],Ov="json",Nv="csv",pee="Successfully exported JSON locally.",See="Successfully exported CSV locally.",Tee=1e3,gee=Rv.searchByHash,Ree=Rv.searchByValue,Aee=Av(uee.evaluateSQL),Oee=Av(nl.finished);wv.exports={export_to_s3:Iee,export_local:Nee,toCsvStream:bv};async function Nee(e){zr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=yv(e);if(!Dr.isEmpty(t))throw zr.error(t),it(new Error,t,ot.BAD_REQUEST,void 0,void 0,!0);if(Dr.isEmpty(e.path))throw zr.error(dr.MISSING_VALUE("path")),it(new Error,dr.MISSING_VALUE("path"),ot.BAD_REQUEST,void 0,void 0,!0);let r=(Dr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Eee.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Dr.buildFolderPath(e.path,r);await bee(e.path);let n=await Iv(e);return await yee(s,e.format,n)}a(Nee,"export_local");async function bee(e){if(zr.trace("in confirmPath"),Dr.isEmptyOrZeroLength(e))throw it(new Error,`Invalid path: ${e}`,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await bg.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,zr.error(s),it(new Error,s,ot.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw zr.error(r),it(new Error,r,ot.BAD_REQUEST,void 0,void 0,!0)}return!0}a(bee,"confirmPath");async function yee(e,t,r){if(zr.trace("in saveToLocal"),sl.isEmptyOrZeroLength(e))throw it(new Error,dr.INVALID_VALUE("file_path"),ot.BAD_REQUEST,void 0,void 0,!0);if(sl.isEmptyOrZeroLength(t))throw it(new Error,dr.INVALID_VALUE("Source format"),ot.BAD_REQUEST,void 0,void 0,!0);if(sl.isEmpty(r))throw it(new Error,dr.NOT_FOUND("Data"),ot.BAD_REQUEST,void 0,void 0,!0);if(t===Ov){let s=bg.createWriteStream(e);return hee(r).pipe(s),await Oee(s),{message:pee,path:e}}else if(t===Nv){let s=bg.createWriteStream(e),n=nl.Readable.from(r),i={},o={objectMode:!0};return await new _ee(i,o).fromInput(n).toOutput(s).promise(!1),{message:See,path:e}}throw it(new Error,dr.INVALID_VALUE("format"),ot.BAD_REQUEST)}a(yee,"saveToLocal");async function Iee(e){if(!e.s3||Object.keys(e.s3).length===0)throw it(new Error,dr.MISSING_VALUE("S3 object"),ot.BAD_REQUEST);if(Dr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw it(new Error,dr.MISSING_VALUE("aws_access_key_id"),ot.BAD_REQUEST);if(Dr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw it(new Error,dr.MISSING_VALUE("aws_secret_access_key"),ot.BAD_REQUEST);if(Dr.isEmptyOrZeroLength(e.s3.bucket))throw it(new Error,dr.MISSING_VALUE("bucket"),ot.BAD_REQUEST);if(Dr.isEmptyOrZeroLength(e.s3.key))throw it(new Error,dr.MISSING_VALUE("key"),ot.BAD_REQUEST);if(Dr.isEmptyOrZeroLength(e.s3.region))throw it(new Error,dr.MISSING_VALUE("region"),ot.BAD_REQUEST);let t=yv(e);if(!Dr.isEmpty(t))throw it(new Error,t,ot.BAD_REQUEST);zr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Iv(e)}catch(u){throw zr.error(u),u}let s,n=await lee.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new nl.PassThrough;if(e.format===Nv){i=e.s3.key+".csv";let u=bv(r);u.on("error",l=>{throw l}),u.pipe(o)}else if(e.format===Ov){i=e.s3.key+".json";let u=new nl.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%Tee===0&&(u.push(_),_="")}_.length!==0&&u.push(_),u.push("]"),u.push(null)}else throw it(new Error,dr.INVALID_VALUE("format"),ot.BAD_REQUEST);return new mee({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Iee,"export_to_s3");function bv(e){let t=nl.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new dee(r,s);return t.pipe(n)}a(bv,"toCsvStream");function yv(e){if(zr.trace("in exportCoreValidation"),Dr.isEmpty(e.format))return"format missing";if(gv.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${gv.join(", ")}`;let t=e.search_operation.operation;if(Dr.isEmpty(t))return"search_operation.operation missing";if(Tv.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${Tv.join(", ")}`}a(yv,"exportCoreValidation");async function Iv(e){zr.trace("in getRecords");let t,r;if(sl.isEmpty(e.search_operation)||sl.isEmptyOrZeroLength(e.search_operation.operation))throw it(new Error,dr.INVALID_VALUE("Search operation"),ot.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Ree;break;case"search_by_hash":t=gee;break;case"sql":t=Aee;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,zr.error(r),it(new Error,r,ot.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(Iv,"getRecords")});var Pv={};je(Pv,{contentTypes:()=>Uv,findBestSerializer:()=>QE,getDeserializer:()=>Pa,registerContentHandlers:()=>Ig,serialize:()=>wg,serializeMessage:()=>wn});function wee(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function Ig(e){e.register(Lee,{serializers:[{regex:/^application\/json$/,serializer:YE.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new To.EncoderStream(il).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?WE.Readable.from((0,$s.encodeIter)(t,il)):(0,$s.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,yg.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,$s.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,To.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function QE(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=At.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(At.keys()).join(", "))}};r=At.get("application/json"),n="application/json"}return{serializer:r,type:n,parameters:i}}function wg(e,t,r){let s=t.headers["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null&&(r.headers["Content-Type"]=e.contentType,r.headers.Vary="Accept-Encoding",n=e.data),e instanceof Uint8Array)r.headers["Content-Type"]="application/octet-stream",r.headers.Vary="Accept-Encoding",n=e;else{let i=QE(t);if(r.headers.Vary="Accept, Accept-Encoding",r.headers["Content-Type"]=i.type,e[Symbol.iterator]&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers["Content-Encoding"]="br",o=o.pipe((0,KE.createBrotliCompress)({}))),o}n=i.serializer.serialize(e)}return s?(r.headers["Content-Encoding"]="br",new Promise((i,o)=>(0,KE.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function wn(e,t){if(e?.contentType!=null&&e.data!=null)return e;let r=t.serialize;if(r)return r(e);let s=QE(t);return r=t.serialize=s.serializer.serialize,r(e)}function Dee(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 Pa(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=At.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=At.get(e)?.deserialize||Lv(e,s);return o=>Dee(o).then(i)}return At.get(e)?.deserialize||Lv(e,s)}function Lv(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 Uee(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 YE,yg,$s,To,KE,WE,Dv,il,At,Uv,Cv,Mv,Cee,Lee,Ca=ge(()=>{YE=U(_m()),yg=U(VE()),$s=require("msgpackr"),To=require("cbor-x"),KE=require("zlib"),WE=require("stream");ln();Dv=require("../index"),il={useRecords:!1,useToJSON:!0};bt.contentType=function(e,t){At.set(e,t)};At=new Map,Uv=At;(0,Dv._assignPackageExport)("contentTypes",Uv);At.set("application/json",{serializeStream:YE.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});Cv=new To.Encoder(il);At.set("application/cbor",{serializeStream(e){return new To.EncoderStream(il).end(e)},serialize:Cv.encode,deserialize:Cv.decode,q:1});At.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?WE.Readable.from((0,$s.encodeIter)(e,il)):(0,$s.pack)(e)},serialize:$s.pack,deserialize:$s.unpack,q:.9});At.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,yg.toCsvStream)(e)},q:.1});At.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});At.set("text/event-stream",{serializeStream:function(e){return WE.Readable.from(Uee(e,this.serialize))},serialize:function(e){if(e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
14
|
+
`,""):null}catch(E){E.stderr?i[u].npm_error=KP(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 Xu.info(`finished installModules with response ${i}`),i}a(b7,"installModules");function KP(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
|
|
15
|
+
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(KP,"parseNPMStdErr");async function y7(e){Xu.info(`starting auditModules for request: ${e}`);let t=QP(e);if(t)throw Pa(t,t.message,va.BAD_REQUEST);let{projects:r}=e;await FE(),await WP(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=qE.join(hg,o);s[o]={npm_output:null,npm_error:null};try{let u=await el("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=KP(u.stderr)}}return Xu.info(`finished auditModules with response ${s}`),s}a(y7,"auditModules");async function FE(){try{return await el("npm -v"),!0}catch{throw Pa(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",va.BAD_REQUEST,void 0,void 0,!0)}}a(FE,"checkNPMInstalled");async function WP(e){if(!Array.isArray(e)||e.length===0)throw Pa(new Error,"projects argument must be an array with at least 1 element",va.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=qE.join(hg,i.toString());if(!await $P.pathExists(o)){t.push(i);continue}let u=qE.join(o,"package.json");await $P.pathExists(u)||r.push(i)}if(t.length>0)throw Pa(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,va.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Pa(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,va.BAD_REQUEST,void 0,void 0,!0)}a(WP,"checkProjectPaths");function QP(e){let t=HE.object({projects:HE.array().min(1).items(HE.string()).required(),dry_run:HE.boolean().default(!1)});return g7.validateBySchema(e,t)}a(QP,"modulesValidator")});var jP=m(($Se,JP)=>{"use strict";var mg=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}};JP.exports=mg});var ZP=m((YSe,XP)=>{"use strict";var pg=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};XP.exports=pg});var Tg=m((WSe,tv)=>{"use strict";var ev=jP(),I7=ZP(),{HDB_ERROR_MSGS:w7}=gr(),Sg=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=w7.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 ev(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new I7(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 ev(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}};tv.exports=Sg});var VE=m((zSe,pv)=>{"use strict";var gg=Xt(),xE=jt(),Jr=Md(),sl=Zn(),Rg=Zi(),C7=$S(),L7=AD(),nl=er(),kE=qd(),St=C(),D7=eT(),U7=Du(),M7=MT(),P7=tE(),v7=PT(),B7=vT(),H7=iE(),q7=aE(),Ag=uE(),Un=F(),F7=SM(),Og=_E(),nv=wa(),zr=R(),iv=pP(),G7=Nn(),ov=Iu(),av=(DE(),re(zu)),cv=et(),Lr=PE(),x7=require("alasql"),uv=BE(),lv=GE(),_v=Tg(),{handleHDBError:_r,hdb_errors:dv}=z(),{HDB_ERROR_MSGS:Ut,HTTP_STATUS_CODES:tl}=dv,v=new Map,Ev="delete",pi="insert",Mn="read",go="update",rl="describe",rv=sl.describeSchema.name,sv=sl.describeTable.name,fv={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},k7="catchup",$7="handleGetJob",V7="handleGetJobsByStartDate",$E={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Y7=[Jr.createTable.name,Jr.createAttribute.name,Jr.dropTable.name,Jr.dropAttribute.name],hv={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},G=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};v.set(gg.insert.name,new G(!1,[pi]));v.set(gg.update.name,new G(!1,[go]));v.set(gg.upsert.name,new G(!1,[pi,go]));v.set(xE.searchByConditions.name,new G(!1,[Mn]));v.set(xE.searchByHash.name,new G(!1,[Mn]));v.set(xE.searchByValue.name,new G(!1,[Mn]));v.set(xE.search.name,new G(!1,[Mn]));v.set(Jr.createSchema.name,new G(!0,[]));v.set(Jr.createTable.name,new G(!0,[]));v.set(Jr.createAttribute.name,new G(!1,[pi]));v.set(Jr.dropSchema.name,new G(!0,[]));v.set(Jr.dropTable.name,new G(!0,[]));v.set(Jr.dropAttribute.name,new G(!0,[]));v.set(sl.describeSchema.name,new G(!1,[Mn]));v.set(sl.describeTable.name,new G(!1,[Mn]));v.set(Rg.deleteRecord.name,new G(!1,[Ev]));v.set(nl.addUser.name,new G(!0,[]));v.set(nl.alterUser.name,new G(!0,[]));v.set(nl.dropUser.name,new G(!0,[]));v.set(nl.listUsersExternal.name,new G(!0,[]));v.set(kE.listRoles.name,new G(!0,[]));v.set(kE.addRole.name,new G(!0,[]));v.set(kE.alterRole.name,new G(!0,[]));v.set(kE.dropRole.name,new G(!0,[]));v.set(D7.name,new G(!0,[]));v.set(U7.name,new G(!0,[]));v.set(M7.name,new G(!0,[]));v.set(P7.name,new G(!0,[]));v.set(v7.name,new G(!0,[]));v.set(B7.name,new G(!0,[]));v.set(Ag.setRoutes.name,new G(!0,[]));v.set(Ag.getRoutes.name,new G(!0,[]));v.set(Ag.deleteRoutes.name,new G(!0,[]));v.set(cv.setConfiguration.name,new G(!0,[]));v.set(H7.clusterStatus.name,new G(!0,[]));v.set(q7.name,new G(!0,[]));v.set(Og.getFingerprint.name,new G(!0,[]));v.set(Og.setLicense.name,new G(!0,[]));v.set(Rg.deleteFilesBefore.name,new G(!0,[]));v.set(Rg.deleteAuditLogsBefore.name,new G(!0,[]));v.set(nv.restart.name,new G(!0,[]));v.set(nv.restartService.name,new G(!0,[]));v.set(C7.name,new G(!0,[]));v.set(L7.name,new G(!0,[Mn]));v.set(G7.systemInformation.name,new G(!0,[]));v.set(cv.getConfiguration.name,new G(!0,[]));v.set(uv.readTransactionLog.name,new G(!0,[]));v.set(uv.deleteTransactionLogsBefore.name,new G(!0,[]));v.set(lv.installModules.name,new G(!0,[]));v.set(lv.auditModules.name,new G(!0,[]));v.set(ov.createTokens.name,new G(!1,[]));v.set(ov.refreshOperationToken.name,new G(!1,[]));v.set(av.login.name,new G(!1,[]));v.set(av.logout.name,new G(!1,[]));v.set(Lr.customFunctionsStatus.name,new G(!0,[]));v.set(Lr.getCustomFunctions.name,new G(!0,[]));v.set(Lr.getComponents.name,new G(!0,[]));v.set(Lr.getComponentFile.name,new G(!0,[]));v.set(Lr.setComponentFile.name,new G(!0,[]));v.set(Lr.dropComponent.name,new G(!0,[]));v.set(Lr.getCustomFunction.name,new G(!0,[]));v.set(Lr.setCustomFunction.name,new G(!0,[]));v.set(Lr.dropCustomFunction.name,new G(!0,[]));v.set(Lr.addComponent.name,new G(!0,[]));v.set(Lr.dropCustomFunctionProject.name,new G(!0,[]));v.set(Lr.packageComponent.name,new G(!0,[]));v.set(Lr.deployComponent.name,new G(!0,[]));v.set(Og.getRegistrationInfo.name,new G(!1,[]));v.set(nl.userInfo.name,new G(!1,[]));v.set(sl.describeAll.name,new G(!1,[]));v.set($7,new G(!1,[]));v.set(V7,new G(!0,[]));v.set(k7,new G(!0,[]));v.set($E.CSV_DATA_LOAD,new G(!1,[pi,go]));v.set($E.CSV_URL_LOAD,new G(!1,[pi,go]));v.set($E.CSV_FILE_LOAD,new G(!1,[pi,go]));v.set($E.IMPORT_FROM_S3,new G(!1,[pi,go]));v.set(hv.EXPORT_TO_S3,new G(!0,[]));v.set(hv.EXPORT_LOCAL,new G(!0,[]));v.set(zr.VALID_SQL_OPS_ENUM.DELETE,new G(!1,[Ev]));v.set(zr.VALID_SQL_OPS_ENUM.SELECT,new G(!1,[Mn]));v.set(zr.VALID_SQL_OPS_ENUM.INSERT,new G(!1,[pi]));v.set(zr.VALID_SQL_OPS_ENUM.UPDATE,new G(!1,[go]));pv.exports={verifyPerms:W7,verifyPermsAst:K7,verifyBulkLoadAttributePerms:z7};function K7(e,t,r){if(Un.isEmptyOrZeroLength(e))throw St.info("verify_perms_ast has an empty user parameter"),_r(new Error);if(Un.isEmptyOrZeroLength(t))throw St.info("verify_perms_ast has an empty user parameter"),_r(new Error);if(Un.isEmptyOrZeroLength(r))throw St.info("verify_perms_ast has a null operation parameter"),_r(new Error);try{let s=new _v,n=new F7(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw St.info("No schemas defined in verifyPermsAst(), will not continue."),_r(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&fv[r])throw _r(new Error,Ut.DROP_SYSTEM,tl.FORBIDDEN);if(c&&!u)return null;let l=iv.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof x7.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 _=mv(t,r,o,s);return _||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=n.getAttributesBySchemaTableName(E,d[f]),S=bg(t.role.permission,E,d[f]);Ng(h,S,r,d[f],E,s)}}),s.getPermsResponse())}catch(s){throw _r(s)}}a(K7,"verifyPermsAst");function W7(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw St.info("null required parameter in verifyPerms"),_r(new Error,Ut.DEFAULT_INVALID_REQUEST,tl.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 _v;if(Un.isEmptyOrZeroLength(e.hdb_user.role)||Un.isEmptyOrZeroLength(e.hdb_user.role.permission))return St.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ut.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(zr.SYSTEM_SCHEMA_NAME)||n===zr.SYSTEM_SCHEMA_NAME;if(_&&fv[r])throw _r(new Error,Ut.DROP_SYSTEM,tl.FORBIDDEN);if(u&&!_||l===!0&&(r===Jr.createSchema.name||r===Jr.dropSchema.name))return null;if(Y7.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=iv.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===rv||r===sv){if(n===zr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ut.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===rv&&(!d[n]||!d[n][rl]))return c.handleInvalidItem(Ut.SCHEMA_NOT_FOUND(n));if(r===sv&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][rl]))return c.handleInvalidItem(Ut.TABLE_NOT_FOUND(n,i))}}let E=mv(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&&zr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let S=[],T=d[n].tables[i];T[zr.PERMS_CRUD_ENUM.READ]&&(T.attribute_permissions.length>0?T.attribute_permissions.filter(g=>g[zr.PERMS_CRUD_ENUM.READ]).forEach(g=>{S.push(g.attribute_name)}):S=global.hdb_schema[n][i].attributes.map(A=>A.attribute),e.get_attributes=S)}let f=Q7(e),h=bg(e.hdb_user.role.permission,n,i);return Ng(f,h,r,i,n,c,s),c.getPermsResponse()}a(W7,"verifyPerms");function mv(e,t,r,s,n){if(Un.arrayHasEmptyValues([e,t,r]))throw St.info("hasPermissions has an invalid parameter"),_r(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 St.info(`operation ${t} not found.`),_r(new Error,Ut.OP_NOT_FOUND(t),tl.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return St.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ut.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][rl]===!1){s.addInvalidItem(Ut.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ut.SCHEMA_NOT_FOUND(u));continue}let l=r.get(u);for(let _ of l){let d=o[u].tables[_];if(!d||d[rl]===!1)s.addInvalidItem(Ut.TABLE_NOT_FOUND(u,_));else try{let E=[],f=v.get(t).perms;!Un.isEmpty(n)&&f.includes(n)&&(f=[n]);for(let h=0;h<f.length;h++){let S=f[h],T=d[S];(T==null||T===!1)&&(St.info(`Required ${S} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),E.push(S))}E.length>0&&s.addUnauthorizedTable(u,_,E)}catch(E){let f=Ut.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw St.error(f),St.error(E),_r(dv.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?s.getPermsResponse():null}a(mv,"hasPermissions");function Ng(e,t,r,s,n,i,o){if(!e||!t)throw St.info("no attributes specified in checkAttributePerms."),_r(new Error);let c=v.get(r).perms;if(!c||c==="")throw St.info(`no permissions found for ${r} in checkAttributePerms().`),_r(new Error);if(Un.isEmptyOrZeroLength(t))return St.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[rl]===!1){i.addInvalidItem(Ut.ATTR_NOT_FOUND(n,s,_),n,s);continue}if(c)for(let E of c){if(zr.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==Mn)throw _r(new Error,Ut.SYSTEM_TIMESTAMP_PERMS_ERR,tl.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(Ut.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}a(Ng,"checkAttributePerms");function Q7(e){let t=new Set;try{if(e.action)return t;if(e.operation===zr.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){St.info(r)}return t}a(Q7,"getRecordAttributes");function bg(e,t,r){let s=new Map;if(Un.isEmpty(e))return St.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{St.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(bg,"getAttributePermissions");function z7(e,t,r,s,n,i,o){let c=new Set(i),u=bg(e,s,n);Ng(c,u,t,n,s,o,r)}a(z7,"verifyBulkLoadAttributePerms")});var KE=m((jSe,Av)=>{"use strict";Av.exports={evaluateSQL:cee,processAST:Rv,convertSQLToAST:gv,checkASTPermissions:Tv};var J7=Xt(),Sv=require("util"),j7=Sv.callbackify(J7.insert),X7=jt().search,Z7=TL().update,eee=Sv.callbackify(Z7),tee=RL().convertDelete,Si=require("alasql"),ree=VE(),YE=C(),see=pd(),nee=F(),il=R(),{hdb_errors:iee,handleHDBError:yg}=z(),{HTTP_STATUS_CODES:Ig}=iee;see(Si);var oee=403,aee="There was a problem performing this insert. Please check the logs and try again.",wg=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function cee(e,t){let r=e.parsed_sql_object;if(!r){r=gv(e.sql);let s,n=r.ast.statements[0];if(n instanceof Si.yy.Insert?s=n.into.databaseid:n instanceof Si.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Si.yy.Update||n instanceof Si.yy.Delete?s=n.table.databaseid:YE.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Si.yy.Select)&&nee.isEmptyOrZeroLength(s))return t("No schema specified",null)}Rv(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(cee,"evaluateSQL");function Tv(e,t){let r;try{r=ree.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(Tv,"checkASTPermissions");function gv(e){let t=new wg;if(!e)throw yg(new Error,"The 'sql' parameter is missing from the request body",Ig.BAD_REQUEST);try{let r=e.trim(),s=Si.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
16
|
+
`);throw s[1]?yg(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Ig.BAD_REQUEST):yg(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Ig.BAD_REQUEST)}return t}a(gv,"convertSQLToAST");function Rv(e,t,r){try{let s=uee;if(!e.bypass_auth&&!t.permissions_checked){let i=Tv(e,t);if(i&&i.length>0)return r(oee,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case il.VALID_SQL_OPS_ENUM.SELECT:s=X7,n=t.ast.statements[0];break;case il.VALID_SQL_OPS_ENUM.INSERT:s=lee;break;case il.VALID_SQL_OPS_ENUM.UPDATE:s=eee;break;case il.VALID_SQL_OPS_ENUM.DELETE:s=tee;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(Rv,"processAST");function uee(e,t){YE.info(e),t("unknown sql statement")}a(uee,"nullFunction");function lee({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=_ee(i,e.values)}catch(o){return r(o)}j7(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){YE.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(lee,"convertInsert");function _ee(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]]=Si.compile(`SELECT ${n.toString()} AS [${il.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw YE.error(r),new Error(aee)}}a(_ee,"createDataObjects")});var Cg=m((ZSe,Nv)=>{"use strict";var{S3:dee,GetObjectCommand:Eee}=require("@aws-sdk/client-s3");Nv.exports={getFileStreamFromS3:fee,getS3AuthObj:Ov};async function fee(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await Ov(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Eee(r))).Body}a(fee,"getFileStreamFromS3");function Ov(e,t,r){return new dee({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(Ov,"getS3AuthObj")});var WE=m((tTe,Pv)=>{"use strict";var Iv=jt(),hee=KE(),mee=Cg(),{AsyncParser:pee,Transform:See}=require("json2csv"),al=require("stream"),Dr=F(),Lg=require("fs-extra"),Tee=require("path"),jr=C(),{promisify:wv}=require("util"),ol=F(),{handleHDBError:it,hdb_errors:gee}=z(),{HDB_ERROR_MSGS:dr,HTTP_STATUS_CODES:ot}=gee,{streamAsJSON:Ree}=mm(),{Upload:Aee}=require("@aws-sdk/lib-storage"),bv=["search_by_value","search_by_hash","sql"],yv=["json","csv"],Cv="json",Lv="csv",Oee="Successfully exported JSON locally.",Nee="Successfully exported CSV locally.",bee=1e3,yee=Iv.searchByHash,Iee=Iv.searchByValue,wee=wv(hee.evaluateSQL),Cee=wv(al.finished);Pv.exports={export_to_s3:Mee,export_local:Lee,toCsvStream:Dv};async function Lee(e){jr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Uv(e);if(!Dr.isEmpty(t))throw jr.error(t),it(new Error,t,ot.BAD_REQUEST,void 0,void 0,!0);if(Dr.isEmpty(e.path))throw jr.error(dr.MISSING_VALUE("path")),it(new Error,dr.MISSING_VALUE("path"),ot.BAD_REQUEST,void 0,void 0,!0);let r=(Dr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Tee.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Dr.buildFolderPath(e.path,r);await Dee(e.path);let n=await Mv(e);return await Uee(s,e.format,n)}a(Lee,"export_local");async function Dee(e){if(jr.trace("in confirmPath"),Dr.isEmptyOrZeroLength(e))throw it(new Error,`Invalid path: ${e}`,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await Lg.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,jr.error(s),it(new Error,s,ot.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw jr.error(r),it(new Error,r,ot.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Dee,"confirmPath");async function Uee(e,t,r){if(jr.trace("in saveToLocal"),ol.isEmptyOrZeroLength(e))throw it(new Error,dr.INVALID_VALUE("file_path"),ot.BAD_REQUEST,void 0,void 0,!0);if(ol.isEmptyOrZeroLength(t))throw it(new Error,dr.INVALID_VALUE("Source format"),ot.BAD_REQUEST,void 0,void 0,!0);if(ol.isEmpty(r))throw it(new Error,dr.NOT_FOUND("Data"),ot.BAD_REQUEST,void 0,void 0,!0);if(t===Cv){let s=Lg.createWriteStream(e);return Ree(r).pipe(s),await Cee(s),{message:Oee,path:e}}else if(t===Lv){let s=Lg.createWriteStream(e),n=al.Readable.from(r),i={},o={objectMode:!0};return await new pee(i,o).fromInput(n).toOutput(s).promise(!1),{message:Nee,path:e}}throw it(new Error,dr.INVALID_VALUE("format"),ot.BAD_REQUEST)}a(Uee,"saveToLocal");async function Mee(e){if(!e.s3||Object.keys(e.s3).length===0)throw it(new Error,dr.MISSING_VALUE("S3 object"),ot.BAD_REQUEST);if(Dr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw it(new Error,dr.MISSING_VALUE("aws_access_key_id"),ot.BAD_REQUEST);if(Dr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw it(new Error,dr.MISSING_VALUE("aws_secret_access_key"),ot.BAD_REQUEST);if(Dr.isEmptyOrZeroLength(e.s3.bucket))throw it(new Error,dr.MISSING_VALUE("bucket"),ot.BAD_REQUEST);if(Dr.isEmptyOrZeroLength(e.s3.key))throw it(new Error,dr.MISSING_VALUE("key"),ot.BAD_REQUEST);if(Dr.isEmptyOrZeroLength(e.s3.region))throw it(new Error,dr.MISSING_VALUE("region"),ot.BAD_REQUEST);let t=Uv(e);if(!Dr.isEmpty(t))throw it(new Error,t,ot.BAD_REQUEST);jr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Mv(e)}catch(u){throw jr.error(u),u}let s,n=await mee.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new al.PassThrough;if(e.format===Lv){i=e.s3.key+".csv";let u=Dv(r);u.on("error",l=>{throw l}),u.pipe(o)}else if(e.format===Cv){i=e.s3.key+".json";let u=new al.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%bee===0&&(u.push(_),_="")}_.length!==0&&u.push(_),u.push("]"),u.push(null)}else throw it(new Error,dr.INVALID_VALUE("format"),ot.BAD_REQUEST);return new Aee({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Mee,"export_to_s3");function Dv(e){let t=al.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new See(r,s);return t.pipe(n)}a(Dv,"toCsvStream");function Uv(e){if(jr.trace("in exportCoreValidation"),Dr.isEmpty(e.format))return"format missing";if(yv.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${yv.join(", ")}`;let t=e.search_operation.operation;if(Dr.isEmpty(t))return"search_operation.operation missing";if(bv.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${bv.join(", ")}`}a(Uv,"exportCoreValidation");async function Mv(e){jr.trace("in getRecords");let t,r;if(ol.isEmpty(e.search_operation)||ol.isEmptyOrZeroLength(e.search_operation.operation))throw it(new Error,dr.INVALID_VALUE("Search operation"),ot.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Iee;break;case"search_by_hash":t=yee;break;case"sql":t=wee;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,jr.error(r),it(new Error,r,ot.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(Mv,"getRecords")});var Gv={};Ke(Gv,{contentTypes:()=>qv,findBestSerializer:()=>jE,getDeserializer:()=>Ba,registerContentHandlers:()=>Ug,serialize:()=>Mg,serializeMessage:()=>Cn});function Pee(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function Ug(e){e.register(Bee,{serializers:[{regex:/^application\/json$/,serializer:QE.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Ro.EncoderStream(cl).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?JE.Readable.from((0,Ys.encodeIter)(t,cl)):(0,Ys.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Dg.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Ys.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Ro.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function jE(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=Ot.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(Ot.keys()).join(", "))}};r=Ot.get("application/json"),n="application/json"}return{serializer:r,type:n,parameters:i}}function Mg(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=jE(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,zE.createBrotliCompress)({}))),o}n=i.serializer.serialize(e)}return s?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,zE.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Cn(e,t){if(e?.contentType!=null&&e.data!=null)return e;let r=t.serialize;if(r)return r(e);let s=jE(t);return r=t.serialize=s.serializer.serialize,r(e)}function Hee(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 Ba(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Ot.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Ot.get(e)?.deserialize||Bv(e,s);return o=>Hee(o).then(i)}return Ot.get(e)?.deserialize||Bv(e,s)}function Bv(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 qee(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 QE,Dg,Ys,Ro,zE,JE,Hv,cl,Ot,qv,vv,Fv,vee,Bee,Da=Te(()=>{QE=D(mm()),Dg=D(WE()),Ys=require("msgpackr"),Ro=require("cbor-x"),zE=require("zlib"),JE=require("stream");rs();Hv=require("../index"),cl={useRecords:!1,useToJSON:!0};Et.contentType=function(e,t){Ot.set(e,t)};Ot=new Map,qv=Ot;(0,Hv._assignPackageExport)("contentTypes",qv);Ot.set("application/json",{serializeStream:QE.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});vv=new Ro.Encoder(cl);Ot.set("application/cbor",{serializeStream(e){return new Ro.EncoderStream(cl).end(e)},serialize:vv.encode,deserialize:vv.decode,q:1});Ot.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?JE.Readable.from((0,Ys.encodeIter)(e,cl)):(0,Ys.pack)(e)},serialize:Ys.pack,deserialize:Ys.unpack,q:.9});Ot.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Dg.toCsvStream)(e)},q:.1});Ot.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Ot.set("text/event-stream",{serializeStream:function(e){return JE.Readable.from(qee(e,this.serialize))},serialize:function(e){if(e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
17
17
|
`),e.data){let r=e.data;typeof r=="object"&&(r=JSON.stringify(r)),t+="data: "+r+`
|
|
18
18
|
`}return e.id&&(t+="id: "+e.id+`
|
|
19
19
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
20
20
|
`),t+`
|
|
21
21
|
`}else return"data: "+e+`
|
|
22
22
|
|
|
23
|
-
`},q:.8});At.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()}});Mv={type:"application/json",serializeStream:YE.streamAsJSON,serialize:JSON.stringify,deserialize:wee,q:.8};At.set("*/*",Mv);At.set("",Mv);a(wee,"tryJSONParse");a(Ig,"registerContentHandlers");Cee=require("fastify-plugin"),Lee=Cee(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=QE(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(QE,"findBestSerializer");a(wg,"serialize");a(wn,"serializeMessage");a(Dee,"streamToBuffer");a(Pa,"getDeserializer");a(Lv,"deserializerUnknownType");a(Uee,"transformIterable")});var Ug={};je(Ug,{start:()=>vee});async function Pee(e,t){let r=e.headers.accept==="text/event-stream"?"CONNECT":e.method;e.search&&h_(e);let s=performance.now(),n;try{let i=new Dg;e.responseHeaders=i;let o=e.url.slice(1),c=Lg.getMatch(o);if(!c)return t(e);let u={url:c.relativeURL},l=c.Resource,_=await Xe(e,()=>{if(r==="POST"||r==="PUT"||r==="PATCH"||r==="QUERY")try{e.data=Pa(e.headers["content-type"],!0)(e.body)}catch(S){throw new ol.ClientError(S,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.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 ol.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new ol.ServerError(`Method ${r} is not recognized`,501)}}),d=performance.now()-s,E=200,f;if(_==null)E=r==="GET"||r==="HEAD"?404:204;else if(f=e?.lastModified){Mee[0]=f;let S=String.fromCharCode(34,(Mt[0]&63)+62,(Mt[0]>>6)+(Mt[1]<<2&63)+62,(Mt[1]>>4)+(Mt[2]<<4&63)+62,(Mt[2]>>2)+62,(Mt[3]&63)+62,(Mt[3]>>6)+(Mt[4]<<2&63)+62,(Mt[4]>>4)+(Mt[5]<<4&63)+62,(Mt[5]>>2)+62,(Mt[6]&63)+62,(Mt[6]>>6)+(Mt[7]<<2&63)+62,34),p=e.headers["if-none-match"];p&&S==p?(_?.onDone&&_.onDone(),E=304,_=void 0):i.ETag=S}e.createdResource&&(E=201),e.newLocation&&(i.Location=e.newLocation);let h={status:E,headers:i,body:void 0};return i["Server-Timing"]=`db;dur=${d.toFixed(2)}`,ao(d,"TTFB",n,r),Rd(E<400,"success",n,r),_!==void 0&&(h.body=wg(_,e,h),r==="HEAD"&&(h.body=void 0)),h}catch(i){let o=performance.now()-s;ao(o,"TTFB",n,r),Rd(!1,"success",n,r),i.http_resp_code||console.error(i);let c={};return i.http_resp_code===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),c.Allow=i.allow.map(u=>u.toUpperCase()).join(", "))),{status:i.http_resp_code||500,headers:c,body:wn(i.toString(),e)}}}function vee(e){if(vv)return;vv=!0,Lg=e.resources,e.server.http(async(r,s)=>{if(!r.isWebSocket)return Pee(r,s)}),e.server.ws(async(r,s,n)=>{Bv++,Cg||(setTimeout(()=>{console.log("connection count",Bv,"mem",Math.round(process.memoryUsage().heapUsed/1e6)),Cg=!1},1e3),Cg=!0),t(s);let i=new bs;r.on("error",console.error);let o;r.on("message",a(function(d){o||(o=Pa(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 Lg.call(s.pathname.slice(1),s,(_,d)=>(u=!0,_.connect(i)));if(!u)r.send(wn(`No resource was found to handle ${s.pathname}`,s));else{c=l[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;)r.send(wn(_.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 ol,Mt,Mee,vv,Lg,Bv,Cg,Dg,Hv=ge(()=>{Ca();la();ol=U(z());m_();Cc();Vi();Mt=new Uint8Array(8),Mee=new Float64Array(Mt.buffer,0,1);a(Pee,"http");Bv=0;a(vee,"start");Dg=class{static{a(this,"Headers")}set(t,r){this[t]=r}}});var Mg=m((rTe,qv)=>{var{recordAction:zE,recordActionBinary:Bee}=(la(),te(Ad)),Hee=require("fastify-plugin"),qee=200;qv.exports=Hee(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),zE(o,"TTFB",l,d,_),Bee(n.raw.statusCode<400,"success",l,d,_);let E=qee;i?.pipe?(i.on("data",h=>{E+=h.length}),i.on("end",()=>{zE(performance.now()-c,"transfer",l,d,_),zE(E,"bytes-sent",l,d,_)})):(E+=i?.length||0,zE(E,"bytes-sent",l,d,_));let f=o.toFixed(3);n.header("Server-Timing",`db;dur=${f}`)}),r()},{name:"hdb-request-time"})});var Hg=m((sTe,$v)=>{var ef=require("clone"),tf=He(),Fee=F(),XE=g(),Gee=D(),JE=require("fs"),Pg=require("joi"),{string:ZE}=Pg.types(),{hdb_errors:xee,handleHDBError:al}=z(),{HDB_ERROR_MSGS:kee,HTTP_STATUS_CODES:jE}=xee,{common_validators:va}=Ls(),Fv=1e9,Gv=" is required",$ee=["insert","update","upsert"],vg={database:{presence:!1,format:va.schema_format,length:va.schema_length},schema:{presence:!1,format:va.schema_format,length:va.schema_length},table:{presence:!0,format:va.schema_format,length:va.schema_length},action:{inclusion:{within:$ee,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Vee={schema:ZE.required(),table:ZE.required(),action:ZE.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Yee,AWS_SECRET:Kee,AWS_BUCKET:Wee,AWS_FILE_KEY:Qee,REGION:zee}=XE.S3_BUCKET_AUTH_KEYS,Jee={s3:{presence:!0},[`s3.${Yee}`]:{presence:!0,type:"String"},[`s3.${Kee}`]:{presence:!0,type:"String"},[`s3.${Wee}`]:{presence:!0,type:"String"},[`s3.${Qee}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${zee}`]:{presence:!0,type:"String"}},xv=ef(vg);xv.data.presence={message:Gv};var kv=ef(vg);kv.file_path.presence={message:Gv};var jee=Object.assign(ef(vg),Jee),Bg=ef(Vee);Bg.csv_url=ZE.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Bg.passthrough_headers=Pg.object();function Xee(e){let t=tf.validateObject(e,xv);return rf(e,t)}a(Xee,"dataObject");function Zee(e){let t=tf.validateBySchema(e,Pg.object(Bg));return rf(e,t)}a(Zee,"urlObject");function ete(e){let t=tf.validateObject(e,kv);return rf(e,t)}a(ete,"fileObject");function tte(e){let t=tf.validateObject(e,jee);return rf(e,t)}a(tte,"s3FileObject");function rf(e,t){if(!t){let r=Fee.checkGlobalSchemaTable(e.schema,e.table);if(r)return al(new Error,r,jE.BAD_REQUEST);if(e.operation===XE.OPERATIONS_ENUM.CSV_FILE_LOAD){try{JE.accessSync(e.file_path,JE.constants.R_OK|JE.constants.F_OK)}catch(s){return s.code===XE.NODE_ERROR_CODES.ENOENT?al(s,`No such file or directory ${s.path}`,jE.BAD_REQUEST):s.code===XE.NODE_ERROR_CODES.EACCES?al(s,`Permission denied ${s.path}`,jE.BAD_REQUEST):al(s)}try{let s=JE.statSync(e.file_path).size;if(s>Fv)return al(new Error,kee.MAX_FILE_SIZE_ERR(s,Fv),jE.BAD_REQUEST)}catch(s){Gee.error(s),console.error(s)}}}return t}a(rf,"postValidateChecks");$v.exports={dataObject:Xee,urlObject:Zee,fileObject:ete,s3FileObject:tte}});var qg=m((iTe,Vv)=>{"use strict";var cl=D(),sf=g();async function rte(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===sf.OPERATIONS_ENUM.INSERT||t.operation===sf.OPERATIONS_ENUM.UPDATE||t.operation===sf.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===sf.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(cl.info(i.message),i):i.http_resp_msg?(cl.error(`Error calling operation: ${e.name}`),cl.error(i.http_resp_msg),i):(cl.error(`Error calling operation: ${e.name}`),cl.error(i),i)}}a(rte,"callOperationFunctionAsAwait");Vv.exports={callOperationFunctionAsAwait:rte}});var Kv=m((aTe,Yv)=>{"use strict";var Fg=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}},Gg=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};Yv.exports={BulkLoadFileObject:Fg,BulkLoadDataObject:Gg}});var Qv=m((uTe,Wv)=>{"use strict";var xg=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};Wv.exports=xg});var Wg=m((hTe,_B)=>{"use strict";var nf=Xt(),af=Hg(),ste=require("needle"),Es=g(),_Te=Me(),Ba=F(),{handleHDBError:$e,hdb_errors:sB}=z(),{HTTP_STATUS_CODES:Pt,HDB_ERROR_MSGS:pt,CHECK_LOGS_WRAPPER:Ro}=sB,Ha=D(),kg=require("papaparse");Ba.promisifyPapaParse();var hs=require("fs-extra"),nte=require("path"),{chain:zv}=require("stream-chain"),Jv=require("stream-json/streamers/StreamArray"),jv=require("stream-json/utils/Batch"),Xv=require("stream-chain/utils/comp"),{finished:Zv}=require("stream"),ite=$(),nB=qg(),ote=Ng(),{BulkLoadFileObject:Vg,BulkLoadDataObject:ate}=Kv(),Yg=fg(),{verifyBulkLoadAttributePerms:iB}=xE(),dTe=Qv(),ETe=We(),fTe=hn(),{databases:cte}=(_e(),te(ye)),{coerceType:ute}=(cf(),te(Qg)),eB="No records parsed from csv file.",go=`${ite.get("HDB_ROOT")}/tmp`,{schema_regex:lte}=Ls(),tB=1024*1024*2,rB=5e3,_te={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};_B.exports={csvDataLoad:dte,csvURLLoad:Ete,csvFileLoad:fte,importFromS3:hte};async function dte(e,t){let r=af.dataObject(e);if(r)throw $e(r,r.message,Pt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=cB(e.schema,e.table),i=kg.parse(e.data,{header:!0,skipEmptyLines:!0,transform:$g.bind(null,n),dynamicTyping:!1}),o=new Yg;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&iB(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw $e(new Error,c,Pt.BAD_REQUEST,void 0,void 0,!0);let u=new ate(e.action,e.schema,e.table,i.data);return s=await nB.callOperationFunctionAsAwait(uB,u,null),s.message===eB?eB:lB(s.records,s.number_written)}catch(n){throw Ao(n)}}a(dte,"csvDataLoad");async function Ete(e){let t=af.urlObject(e);if(t)throw $e(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${go}/${r}`;try{await mte(e,r)}catch(n){throw Ha.error(pt.DOWNLOAD_FILE_ERR(r)+" - "+n),$e(n,Ro(pt.DOWNLOAD_FILE_ERR(r)))}try{let n=new Vg(this.job_operation_function.name,e.action,e.schema,e.table,s,Es.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Kg(n);return await of(s),i}catch(n){throw await of(s),Ao(n)}}a(Ete,"csvURLLoad");async function fte(e){let t=af.fileObject(e);if(t)throw $e(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);let r=new Vg(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Es.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Kg(r)}catch(s){throw Ao(s)}}a(fte,"csvFileLoad");async function hte(e){let t=af.s3FileObject(e);if(t)throw $e(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=nte.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${go}/${n}`;let i=new Vg(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await pte(n,e);let o=await Kg(i);return await of(r),o}catch(s){throw await of(r),Ao(s)}}a(hte,"importFromS3");async function mte(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await ste("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw $e(s,n,s.statusCode,Es.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}Tte(r,e.csv_url),await Ste(t,r.raw)}a(mte,"downloadCSVFile");async function pte(e,t){try{let r=`${go}/${e}`;await hs.mkdirp(go),await hs.writeFile(`${go}/${e}`,"",{flag:"a+"});let s=await hs.createWriteStream(r),n=await ote.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(){Ha.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Ha.error(pt.S3_DOWNLOAD_ERR+" - "+r),$e(r,Ro(pt.S3_DOWNLOAD_ERR))}}a(pte,"downloadFileFromS3");async function Ste(e,t){try{await hs.mkdirp(go),await hs.writeFile(`${go}/${e}`,t)}catch(r){throw Ha.error(pt.WRITE_TEMP_FILE_ERR),$e(r,Ro(pt.DEFAULT_BULK_LOAD_ERR))}}a(Ste,"writeFileToTempFolder");async function of(e){if(e)try{await hs.access(e),await hs.unlink(e)}catch{Ha.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(of,"deleteTempFile");function Tte(e,t){if(e.statusCode!==sB.HTTP_STATUS_CODES.OK)throw $e(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Pt.BAD_REQUEST);if(!_te[e.headers["content-type"]])throw $e(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Pt.BAD_REQUEST);if(!e.raw)throw $e(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Pt.BAD_REQUEST)}a(Tte,"validateURLResponse");async function Kg(e){try{let t;switch(e.file_type){case Es.VALID_S3_FILE_TYPES.CSV:t=await gte(e);break;case Es.VALID_S3_FILE_TYPES.JSON:t=await Rte(e);break;default:throw $e(new Error,pt.DEFAULT_BULK_LOAD_ERR,Pt.BAD_REQUEST,Es.LOG_LEVELS.ERROR,pt.INVALID_FILE_EXT_ERR(e))}return lB(t.records,t.number_written)}catch(t){throw Ao(t)}}a(Kg,"fileLoad");async function oB(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 nf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&iB(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=$e(c);r(u)}}a(oB,"validateChunk");async function aB(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Ba.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Ba.isEmpty(c)&&!Ba.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 nB.callOperationFunctionAsAwait(uB,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=$e(c,Ro(pt.INSERT_CSV_ERR),Pt.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,pt.INSERT_CSV_ERR+" - "+c);r(u)}}a(aB,"insertChunk");async function gte(e){let t={records:0,number_written:0},r=cB(e.schema,e.table);try{let s=new Yg,n=hs.createReadStream(e.file_path,{highWaterMark:tB});n.setEncoding("utf8"),await kg.parsePromise(n,oB.bind(null,e,s),$g.bind(null,r));let i=s.getPermsResponse();if(i)throw $e(new Error,i,Pt.BAD_REQUEST);return n=hs.createReadStream(e.file_path,{highWaterMark:tB}),n.setEncoding("utf8"),await kg.parsePromise(n,aB.bind(null,e,t),$g.bind(null,r)),n.destroy(),t}catch(s){throw $e(s,Ro(pt.PAPA_PARSE_ERR),Pt.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,pt.PAPA_PARSE_ERR+s)}}a(gte,"callPapaParse");function cB(e,t){let r=cte[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>ute(i,n));return s}a(cB,"createTransformMap");function $g(e,t,r){let s=e.get(r);return s?s(t):Ba.autoCast(t)}a($g,"typeFunction");async function Rte(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new Yg,n=zv([hs.createReadStream(e.file_path,{encoding:"utf-8"}),Jv.withParser(),c=>c.value,new jv({batchSize:rB}),Xv(async c=>{await oB(e,s,r,c)})]);await new Promise((c,u)=>{Zv(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw $e(new Error,i,Pt.BAD_REQUEST);let o=zv([hs.createReadStream(e.file_path,{encoding:"utf-8"}),Jv.withParser(),c=>c.value,new jv({batchSize:rB}),Xv(async c=>{await aB(e,t,r,c)})]);return await new Promise((c,u)=>{Zv(o,l=>{l?u(l):c()}),o.resume()}),t}catch(s){throw $e(s,Ro(pt.INSERT_JSON_ERR),Pt.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,pt.INSERT_JSON_ERR+s)}}a(Rte,"insertJson");async function uB(e){let t={};try{e.data&&e.data.length>0&&Ate(e.data[0])?t=await Ote(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ha.info(t.message))}catch(r){throw Ao(r)}return t}a(uB,"callBulkFileLoad");function Ate(e){let t=Object.keys(e);for(let r of t)if(!lte.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Ate,"validateColumnNames");async function Ote(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=nf.insert;break;case"update":i=nf.update;break;case"upsert":i=nf.upsert;break;default:throw $e(new Error,pt.INVALID_ACTION_PARAM_ERR(s),Pt.BAD_REQUEST,Es.LOG_LEVELS.ERROR,pt.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=Ba.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Ao(o)}}a(Ote,"bulkFileLoad");function lB(e,t){return`successfully loaded ${t} of ${e} records`}a(lB,"buildResponseMsg");function Ao(e){return $e(e,Ro(pt.DEFAULT_BULK_LOAD_ERR),Pt.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,pt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ao,"buildTopLevelErrMsg")});var EB=m((pTe,dB)=>{"use strict";var zg=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};dB.exports=zg});var mB=m((TTe,hB)=>{"use strict";var Nte=g(),fB=require("moment"),bte=require("uuid").v4,Jg=class{static{a(this,"JobObject")}constructor(){this.id=bte(),this.type=void 0,this.start_datetime=fB().valueOf(),this.created_datetime=fB().valueOf(),this.end_datetime=void 0,this.status=Nte.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};hB.exports=Jg});var jg=m((RTe,AB)=>{"use strict";var yte=require("uuid").v4,TB=Xt(),gB=jt(),Ite=os(),wte=aa(),Cte=EB(),Ve=g(),Lte=mB(),Dte=Gd(),Jr=D(),Ute=xc(),qa=F(),{promisify:Mte}=require("util"),Oo=require("moment"),Pte=$E(),uf=Hg(),pB=Jm(),{deleteTransactionLogsBeforeValidator:vte}=cg(),{handleHDBError:Bte,hdb_errors:Hte}=z(),{HTTP_STATUS_CODES:qte}=Hte,SB=gB.searchByValue,Fte=gB.searchByHash,Gte=TB.insert,xte=Mte(Pte.evaluateSQL),kte=TB.update;AB.exports={addJob:Yte,updateJob:Wte,handleGetJob:$te,handleGetJobsByStartDate:Vte,getJobById:RB};async function $te(e){try{let t=await RB(e.id);return qa.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw Jr.error("There was an error getting job",t),new Error(r)}}a($te,"handleGetJob");async function Vte(e){try{let t=await Kte(e);if(Jr.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=Oo(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Oo(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Jr.error(r),new Error(r)}}a(Vte,"handleGetJobsByStartDate");async function Yte(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||qa.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return Jr.info(_),t.error=_,t}if(!Ve.JOB_TYPE_ENUM[e.operation])return Jr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ve.OPERATIONS_ENUM.CSV_FILE_LOAD:s=uf.fileObject(e);break;case Ve.OPERATIONS_ENUM.CSV_URL_LOAD:s=uf.urlObject(e);break;case Ve.OPERATIONS_ENUM.CSV_DATA_LOAD:s=uf.dataObject(e);break;case Ve.OPERATIONS_ENUM.IMPORT_FROM_S3:s=uf.s3FileObject(e);break;case Ve.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ve.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=pB(e,"date");break;case Ve.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=pB(e,"timestamp");break;case Ve.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=vte(e);break;default:break}if(s)throw Bte(s,s.message,qte.BAD_REQUEST,void 0,void 0,!0);let n=new Lte;n.type=e.operation===Ve.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ve.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new Ite(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await SB(i))}catch(_){let d=`There was an error inserting a new job: ${_}`;return Jr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=yte();try{o=await SB(i)}catch(_){let d=`There was an error inserting a new job: ${_}`;return Jr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Jr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new Ute(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await Gte(u)}catch(_){return Jr.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,Jr.trace(_)}return t}a(Yte,"addJob");async function Kte(e){let t=Oo(e.from_date,Oo.ISO_8601),r=Oo(e.to_date,Oo.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 Cte(s,e.hdb_user);try{return await xte(n)}catch(i){throw Jr.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(Kte,"getJobsInDateRange");async function RB(e){if(qa.isEmptyOrZeroLength(e))return qa.errorizeMessage("Invalid job ID specified.");let t=new wte(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Fte(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Jr.error(s),qa.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(RB,"getJobById");async function Wte(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(qa.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ve.JOB_STATUS_ENUM.COMPLETE||e.status===Ve.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Oo().valueOf());let t=new Dte(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await kte(t),r}a(Wte,"updateJob")});var wB=m((OTe,IB)=>{"use strict";var OB=F(),Er=g(),Qte=require("moment"),lf=Wg(),_f=D(),NB=jg(),bB=VE(),yB=Xi(),zte=tt(),Jte=ME(),Xg=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function jte(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(OB.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(OB.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Er.JOB_TYPE_ENUM.csv_file_load:await Mn(e,lf.csvFileLoad);break;case Er.JOB_TYPE_ENUM.csv_url_load:await Mn(e,lf.csvURLLoad);break;case Er.JOB_TYPE_ENUM.csv_data_load:await Mn(e,lf.csvDataLoad);break;case Er.JOB_TYPE_ENUM.import_from_s3:await Mn(e,lf.importFromS3);break;case Er.JOB_TYPE_ENUM.empty_trash:break;case Er.JOB_TYPE_ENUM.export_local:await Mn(e,bB.export_local);break;case Er.JOB_TYPE_ENUM.export_to_s3:await Mn(e,bB.export_to_s3);break;case Er.JOB_TYPE_ENUM.delete_files_before:case Er.JOB_TYPE_ENUM.delete_records_before:await Mn(e,yB.deleteFilesBefore);break;case Er.JOB_TYPE_ENUM.delete_audit_logs_before:await Mn(e,yB.deleteAuditLogsBefore);break;case Er.JOB_TYPE_ENUM.delete_transaction_logs_before:await Mn(e,Jte.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(jte,"parseMessage");async function Mn(e,t){try{e.job.status=Er.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Qte().valueOf(),await NB.updateJob(e.job),await Xte(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):_f.error(`There was an error running ${t.name} job with id ${e.job.id}`),_f.error(s),e.job.message=s,e.job.status=Er.JOB_STATUS_ENUM.ERROR;try{await NB.updateJob(e.job)}catch(n){throw _f.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Mn,"runJob");async function Xte(e){_f.trace("launching job thread:",e),zte.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Er.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Xte,"launchJobThread");IB.exports={parseMessage:jte,RunnerMessage:Xg}});var LB=m((bTe,CB)=>{"use strict";var Zg=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};CB.exports=Zg});var WB=m((ITe,nR)=>{"use strict";var hf=jt(),rR=$E(),df=Wg(),Pn=Dd(),Ef=Xn(),ll=Xi(),Zte=qS(),ul=er(),ff=Bd(),vt=DE(),St=D(),ere=zS(),tre=wu(),rre=wT(),sre=Zd(),nre=CT(),ire=LT(),ore=sE(),are=iE(),eR=aE(),DB=VE(),cre=xE(),sR=jg(),I=g(),{hdb_errors:dl,handleHDBError:_l}=z(),{HTTP_STATUS_CODES:UB}=dl,tR=uE(),MB=ya(),kB=require("util"),Fa=Xt(),ure=xr(),lre=On(),PB=wB(),vB=Nu(),BB=(wE(),te(Ku)),HB=et(),qB=ME(),FB=HE(),{setServerUtilities:_re}=(cf(),te(Qg)),{CONTEXT:dre}=(ys(),te(tm)),{_assignPackageExport:Ere}=require("../index"),{transformReq:fre}=F(),hre=qg(),GB=hf.searchByHash,mre=hf.searchByValue,pre=kB.promisify(hf.search),Sre=kB.promisify(rR.evaluateSQL),Tre={[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},q=LB();async function $B(e,t){try{if(e.body.operation!=="read_log"&&(St.log_level===I.LOG_LEVELS.INFO||St.log_level===I.LOG_LEVELS.DEBUG||St.log_level===I.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;St.info(o)}}catch(s){St.error(s)}let r=await hre.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Tre[e.body.operation]&&ure.setSchemaDataToGlobal(s=>{s&&St.error(s)}),r}a($B,"processLocalTransaction");var xB=Rre();nR.exports={chooseOperation:VB,getOperationFunction:YB,operation:KB,processLocalTransaction:$B};_re(nR.exports);function VB(e){let t;try{t=YB(e)}catch(n){throw St.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=rR.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=rR.checkASTPermissions(e,i);if(o)throw St.error(`${UB.FORBIDDEN} from operation ${e.operation}`),St.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),_l(new Error,o,dl.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=cre.verifyPerms(i,n);if(o)throw St.error(`${UB.FORBIDDEN} from operation ${e.operation}`),St.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),_l(new Error,o,dl.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw _l(n,"There was an error when trying to choose an operation path")}return r}a(VB,"chooseOperation");function YB(e){if(St.trace(`getOperationFunction with operation: ${e.operation}`),xB.has(e.operation))return xB.get(e.operation);throw _l(new Error,dl.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),dl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(YB,"getOperationFunction");Ere("operation",KB);function KB(e,t){e.hdb_user=this[dre]?.user,e.bypass_auth=!t;let r=VB(e);return $B({body:e},r)}a(KB,"operation");async function gre(e){St.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 Fa.insert(i);break;case I.OPERATIONS_ENUM.UPDATE:o=await Fa.update(i);break;case I.OPERATIONS_ENUM.UPSERT:o=await Fa.upsert(i);break;case I.OPERATIONS_ENUM.DELETE:o=await ll.deleteRecord(i);break;default:St.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){St.info("Invalid operation in transaction"),St.error(o)}}a(gre,"catchup");async function Vs(e){fre(e);let t,r;try{r=await sR.addJob(e),t=r.createdJob,St.info("addJob result",r);let s=new PB.RunnerMessage(t,e);return await PB.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 St.error(n),_l(s,n)}}a(Vs,"executeJob");function Rre(){let e=new Map;return e.set(I.OPERATIONS_ENUM.INSERT,new q(Fa.insert)),e.set(I.OPERATIONS_ENUM.UPDATE,new q(Fa.update)),e.set(I.OPERATIONS_ENUM.UPSERT,new q(Fa.upsert)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new q(hf.searchByConditions)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_HASH,new q(GB)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_ID,new q(GB)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_VALUE,new q(mre)),e.set(I.OPERATIONS_ENUM.SEARCH,new q(pre)),e.set(I.OPERATIONS_ENUM.SQL,new q(Sre)),e.set(I.OPERATIONS_ENUM.CSV_DATA_LOAD,new q(Vs,df.csvDataLoad)),e.set(I.OPERATIONS_ENUM.CSV_FILE_LOAD,new q(Vs,df.csvFileLoad)),e.set(I.OPERATIONS_ENUM.CSV_URL_LOAD,new q(Vs,df.csvURLLoad)),e.set(I.OPERATIONS_ENUM.IMPORT_FROM_S3,new q(Vs,df.importFromS3)),e.set(I.OPERATIONS_ENUM.CREATE_SCHEMA,new q(Pn.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_DATABASE,new q(Pn.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_TABLE,new q(Pn.createTable)),e.set(I.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new q(Pn.createAttribute)),e.set(I.OPERATIONS_ENUM.DROP_SCHEMA,new q(Pn.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_DATABASE,new q(Pn.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_TABLE,new q(Pn.dropTable)),e.set(I.OPERATIONS_ENUM.DROP_ATTRIBUTE,new q(Pn.dropAttribute)),e.set(I.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new q(Ef.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_DATABASE,new q(Ef.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_TABLE,new q(Ef.describeTable)),e.set(I.OPERATIONS_ENUM.DESCRIBE_ALL,new q(Ef.describeAll)),e.set(I.OPERATIONS_ENUM.DELETE,new q(ll.deleteRecord)),e.set(I.OPERATIONS_ENUM.ADD_USER,new q(ul.addUser)),e.set(I.OPERATIONS_ENUM.ALTER_USER,new q(ul.alterUser)),e.set(I.OPERATIONS_ENUM.DROP_USER,new q(ul.dropUser)),e.set(I.OPERATIONS_ENUM.LIST_USERS,new q(ul.listUsersExternal)),e.set(I.OPERATIONS_ENUM.LIST_ROLES,new q(ff.listRoles)),e.set(I.OPERATIONS_ENUM.ADD_ROLE,new q(ff.addRole)),e.set(I.OPERATIONS_ENUM.ALTER_ROLE,new q(ff.alterRole)),e.set(I.OPERATIONS_ENUM.DROP_ROLE,new q(ff.dropRole)),e.set(I.OPERATIONS_ENUM.USER_INFO,new q(ul.userInfo)),e.set(I.OPERATIONS_ENUM.READ_LOG,new q(ere)),e.set(I.OPERATIONS_ENUM.ADD_NODE,new q(tre)),e.set(I.OPERATIONS_ENUM.UPDATE_NODE,new q(rre)),e.set(I.OPERATIONS_ENUM.REMOVE_NODE,new q(sre)),e.set(I.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new q(nre)),e.set(I.OPERATIONS_ENUM.PURGE_STREAM,new q(ire)),e.set(I.OPERATIONS_ENUM.SET_CONFIGURATION,new q(HB.setConfiguration)),e.set(I.OPERATIONS_ENUM.CLUSTER_STATUS,new q(ore.clusterStatus)),e.set(I.OPERATIONS_ENUM.CLUSTER_NETWORK,new q(are)),e.set(I.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new q(eR.setRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new q(eR.getRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new q(eR.deleteRoutes)),e.set(I.OPERATIONS_ENUM.EXPORT_TO_S3,new q(Vs,DB.export_to_s3)),e.set(I.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new q(Vs,ll.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new q(Vs,ll.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.EXPORT_LOCAL,new q(Vs,DB.export_local)),e.set(I.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new q(sR.handleGetJobsByStartDate)),e.set(I.OPERATIONS_ENUM.GET_JOB,new q(sR.handleGetJob)),e.set(I.OPERATIONS_ENUM.GET_FINGERPRINT,new q(tR.getFingerprint)),e.set(I.OPERATIONS_ENUM.SET_LICENSE,new q(tR.setLicense)),e.set(I.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new q(tR.getRegistrationInfo)),e.set(I.OPERATIONS_ENUM.RESTART,new q(MB.restart)),e.set(I.OPERATIONS_ENUM.RESTART_SERVICE,new q(MB.restartService)),e.set(I.OPERATIONS_ENUM.CATCHUP,new q(gre)),e.set(I.OPERATIONS_ENUM.SYSTEM_INFORMATION,new q(lre.systemInformation)),e.set(I.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new q(Vs,ll.deleteAuditLogsBefore)),e.set(I.OPERATIONS_ENUM.READ_AUDIT_LOG,new q(Zte)),e.set(I.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new q(vB.createTokens)),e.set(I.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new q(vB.refreshOperationToken)),e.set(I.OPERATIONS_ENUM.LOGIN,new q(BB.login)),e.set(I.OPERATIONS_ENUM.LOGOUT,new q(BB.logout)),e.set(I.OPERATIONS_ENUM.GET_CONFIGURATION,new q(HB.getConfiguration)),e.set(I.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new q(vt.customFunctionsStatus)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new q(vt.getCustomFunctions)),e.set(I.OPERATIONS_ENUM.GET_COMPONENT_FILE,new q(vt.getComponentFile)),e.set(I.OPERATIONS_ENUM.GET_COMPONENTS,new q(vt.getComponents)),e.set(I.OPERATIONS_ENUM.SET_COMPONENT_FILE,new q(vt.setComponentFile)),e.set(I.OPERATIONS_ENUM.DROP_COMPONENT,new q(vt.dropComponent)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new q(vt.getCustomFunction)),e.set(I.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new q(vt.setCustomFunction)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new q(vt.dropCustomFunction)),e.set(I.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new q(vt.addComponent)),e.set(I.OPERATIONS_ENUM.ADD_COMPONENT,new q(vt.addComponent)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new q(vt.dropCustomFunctionProject)),e.set(I.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new q(vt.packageComponent)),e.set(I.OPERATIONS_ENUM.PACKAGE_COMPONENT,new q(vt.packageComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new q(vt.deployComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_COMPONENT,new q(vt.deployComponent)),e.set(I.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new q(qB.readTransactionLog)),e.set(I.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new q(Vs,qB.deleteTransactionLogsBefore)),e.set(I.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new q(FB.installModules)),e.set(I.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new q(FB.auditModules)),e.set(I.OPERATIONS_ENUM.GET_BACKUP,new q(Pn.getBackup)),e}a(Rre,"initializeOperationFunctionMap")});var pf=m((CTe,JB)=>{"use strict";var iR=g(),Are=F(),El=D(),{handleHDBError:oR,hdb_errors:mf}=z(),{isMainThread:Ore}=require("worker_threads"),{Readable:Nre}=require("stream"),QB=require("os"),bre=require("util"),yre=iT(),Ire=bre.promisify(yre.authorize),zB=WB(),{Gzip:wre}=require("zlib");function Cre(e){let t=`Found an uncaught exception with message: ${e.message}. ${QB.EOL}Stack: ${e.stack} ${QB.EOL}Terminating ${Ore?"HDB":"thread"}.`;console.error(t),El.fatal(t),process.exit(1)}a(Cre,"handleServerUncaughtException");function Lre(e,t,r){if(El[e.logLevel||"error"](e),e.http_resp_code)return typeof e.http_resp_msg!="object"?r.code(e.http_resp_code).send({error:e.http_resp_msg||e.message}):r.code(e.http_resp_code).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:mf.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(Lre,"serverErrorHandler");function Dre(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=oR(new Error,"Invalid JSON.",mf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(Are.isEmpty(e.body.operation)){let s=oR(new Error,"Request body must include an 'operation' property.",mf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(Dre,"reqBodyValidationHandler");function Ure(e,t,r){let s;e.body.operation!==iR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==iR.OPERATIONS_ENUM.LOGIN&&e.body.operation!==iR.OPERATIONS_ENUM.LOGOUT?Ire(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{El.warn(n),El.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(oR(n,i,mf.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(Ure,"authHandler");async function Mre(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=zB.chooseOperation(e.body);let n=await zB.processLocalTransaction(e,s);if(n instanceof Nre&&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 wre))}return n}catch(n){throw El.error(n),n}}a(Mre,"handlePostRequest");JB.exports={authHandler:Ure,handlePostRequest:Mre,handleServerUncaughtException:Cre,serverErrorHandler:Lre,reqBodyValidationHandler:Dre}});var eH=m((DTe,ZB)=>{"use strict";var Pre=require("fastify-plugin"),{handlePostRequest:jB,authHandler:vre,reqBodyValidationHandler:Bre}=pf();async function Hre(e){e.decorate("hdbCore",{preValidation:[Bre,vre],request:t=>XB(jB(t)),requestWithoutAuthentication:t=>XB(jB(t,!0))})}a(Hre,"hdbCore");async function XB(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(XB,"convertAsyncIterators");ZB.exports=Pre(Hre)});var rH=m((MTe,tH)=>{"use strict";var aR=require("fs"),Ga=$();Ga.initSync();var{CONFIG_PARAMS:fl}=g(),qre=1024*1024*1024;function Fre(e){let t=Ga.get(fl.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=Ga.get(fl.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:qre,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Ga.get(fl.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=Ga.get(fl.CUSTOMFUNCTIONS_TLS_CERTIFICATE),o=Ga.get(fl.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:aR.readFileSync(`${n}`),cert:aR.readFileSync(i)+(o?`
|
|
23
|
+
`},q:.8});Ot.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()}});Fv={type:"application/json",serializeStream:QE.streamAsJSON,serialize:JSON.stringify,deserialize:Pee,q:.8};Ot.set("*/*",Fv);Ot.set("",Fv);a(Pee,"tryJSONParse");a(Ug,"registerContentHandlers");vee=require("fastify-plugin"),Bee=vee(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=jE(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(jE,"findBestSerializer");a(Mg,"serialize");a(Cn,"serializeMessage");a(Hee,"streamToBuffer");a(Ba,"getDeserializer");a(Bv,"deserializerUnknownType");a(qee,"transformIterable")});var Bg={};Ke(Bg,{start:()=>xee});async function Gee(e,t){let r=e.headers.accept==="text/event-stream"?"CONNECT":e.method;e.search&&T_(e);let s=performance.now(),n,i=new To;try{e.responseHeaders=i;let o=e.url.slice(1),c=vg.getMatch(o);if(!c)return t(e);let u={url:c.relativeURL},l=c.Resource,_=await Xe(e,()=>{if(r==="POST"||r==="PUT"||r==="PATCH"||r==="QUERY")try{e.data=Ba(e.headers["content-type"],!0)(e.body)}catch(A){throw new ul.ClientError(A,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 ul.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new ul.ServerError(`Method ${r} is not recognized`,501)}}),d=performance.now()-s,E=200,f;if(_==null)E=r==="GET"||r==="HEAD"?404:204;else if(f=e?.lastModified){Fee[0]=f;let A=String.fromCharCode(34,(Mt[0]&63)+62,(Mt[0]>>6)+(Mt[1]<<2&63)+62,(Mt[1]>>4)+(Mt[2]<<4&63)+62,(Mt[2]>>2)+62,(Mt[3]&63)+62,(Mt[3]>>6)+(Mt[4]<<2&63)+62,(Mt[4]>>4)+(Mt[5]<<4&63)+62,(Mt[5]>>2)+62,(Mt[6]&63)+62,(Mt[6]>>6)+(Mt[7]<<2&63)+62,34),g=e.headers["if-none-match"];g&&A==g?(_?.onDone&&_.onDone(),E=304,_=void 0):i.set("ETag",A)}e.createdResource&&(E=201),e.newLocation&&i.set("Location",e.newLocation);let h={status:E,headers:i,body:void 0},S=`db;dur=${d.toFixed(2)}`,T=_?.wasLoadedFromSource?.();return T!==void 0&&(T?S+=", miss":f&&i.set("Age",Math.round((Date.now()-f)/1e3))),i.append("Server-Timing",S,!0),qs(d,"TTFB",n,r),da(E<400,"success",n,r),_!==void 0&&(h.body=Mg(_,e,h),r==="HEAD"&&(h.body=void 0)),h}catch(o){let c=performance.now()-s;return qs(c,"TTFB",n,r),da(!1,"success",n,r),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(u=>u.toUpperCase()).join(", ")))),{status:o.statusCode||500,headers:i,body:Cn(o.toString(),e)}}}function xee(e){if(xv)return;xv=!0,vg=e.resources,e.server.http(async(r,s)=>{if(!r.isWebSocket)return Gee(r,s)}),e.server.ws(async(r,s,n)=>{kv++,Pg||(setTimeout(()=>{console.log("connection count",kv,"mem",Math.round(process.memoryUsage().heapUsed/1e6)),Pg=!1},1e3),Pg=!0),t(s);let i=new ys;r.on("error",console.error);let o;r.on("message",a(function(d){o||(o=Ba(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 vg.call(s.pathname.slice(1),s,(_,d)=>(u=!0,_.connect(i)));if(!u)r.send(Cn(`No resource was found to handle ${s.pathname}`,s));else{c=l[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;)r.send(Cn(_.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 ul,Mt,Fee,xv,vg,kv,Pg,$v=Te(()=>{Da();co();ul=D(z());g_();Dc();Yi();yE();Mt=new Uint8Array(8),Fee=new Float64Array(Mt.buffer,0,1);a(Gee,"http");kv=0;a(xee,"start")});var Hg=m((ETe,Vv)=>{var{recordAction:XE,recordActionBinary:kee}=(co(),re(Nd)),$ee=require("fastify-plugin"),Vee=200;Vv.exports=$ee(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),XE(o,"TTFB",l,d,_),kee(n.raw.statusCode<400,"success",l,d,_);let E=Vee;i?.pipe?(i.on("data",h=>{E+=h.length}),i.on("end",()=>{XE(performance.now()-c,"transfer",l,d,_),XE(E,"bytes-sent",l,d,_)})):(E+=i?.length||0,XE(E,"bytes-sent",l,d,_));let f=o.toFixed(3);n.header("Server-Timing",`db;dur=${f}`)}),r()},{name:"hdb-request-time"})});var xg=m((fTe,zv)=>{var sf=require("clone"),nf=He(),Yee=F(),tf=R(),Kee=C(),ZE=require("fs"),qg=require("joi"),{string:rf}=qg.types(),{hdb_errors:Wee,handleHDBError:ll}=z(),{HDB_ERROR_MSGS:Qee,HTTP_STATUS_CODES:ef}=Wee,{common_validators:Ha}=Ds(),Yv=1e9,Kv=" is required",zee=["insert","update","upsert"],Fg={database:{presence:!1,format:Ha.schema_format,length:Ha.schema_length},schema:{presence:!1,format:Ha.schema_format,length:Ha.schema_length},table:{presence:!0,format:Ha.schema_format,length:Ha.schema_length},action:{inclusion:{within:zee,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Jee={schema:rf.required(),table:rf.required(),action:rf.valid("insert","update","upsert")},{AWS_ACCESS_KEY:jee,AWS_SECRET:Xee,AWS_BUCKET:Zee,AWS_FILE_KEY:ete,REGION:tte}=tf.S3_BUCKET_AUTH_KEYS,rte={s3:{presence:!0},[`s3.${jee}`]:{presence:!0,type:"String"},[`s3.${Xee}`]:{presence:!0,type:"String"},[`s3.${Zee}`]:{presence:!0,type:"String"},[`s3.${ete}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${tte}`]:{presence:!0,type:"String"}},Wv=sf(Fg);Wv.data.presence={message:Kv};var Qv=sf(Fg);Qv.file_path.presence={message:Kv};var ste=Object.assign(sf(Fg),rte),Gg=sf(Jee);Gg.csv_url=rf.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Gg.passthrough_headers=qg.object();function nte(e){let t=nf.validateObject(e,Wv);return of(e,t)}a(nte,"dataObject");function ite(e){let t=nf.validateBySchema(e,qg.object(Gg));return of(e,t)}a(ite,"urlObject");function ote(e){let t=nf.validateObject(e,Qv);return of(e,t)}a(ote,"fileObject");function ate(e){let t=nf.validateObject(e,ste);return of(e,t)}a(ate,"s3FileObject");function of(e,t){if(!t){let r=Yee.checkGlobalSchemaTable(e.schema,e.table);if(r)return ll(new Error,r,ef.BAD_REQUEST);if(e.operation===tf.OPERATIONS_ENUM.CSV_FILE_LOAD){try{ZE.accessSync(e.file_path,ZE.constants.R_OK|ZE.constants.F_OK)}catch(s){return s.code===tf.NODE_ERROR_CODES.ENOENT?ll(s,`No such file or directory ${s.path}`,ef.BAD_REQUEST):s.code===tf.NODE_ERROR_CODES.EACCES?ll(s,`Permission denied ${s.path}`,ef.BAD_REQUEST):ll(s)}try{let s=ZE.statSync(e.file_path).size;if(s>Yv)return ll(new Error,Qee.MAX_FILE_SIZE_ERR(s,Yv),ef.BAD_REQUEST)}catch(s){Kee.error(s),console.error(s)}}}return t}a(of,"postValidateChecks");zv.exports={dataObject:nte,urlObject:ite,fileObject:ote,s3FileObject:ate}});var kg=m((mTe,Jv)=>{"use strict";var _l=C(),af=R();async function cte(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===af.OPERATIONS_ENUM.INSERT||t.operation===af.OPERATIONS_ENUM.UPDATE||t.operation===af.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===af.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(_l.info(i.message),i):i.http_resp_msg?(_l.error(`Error calling operation: ${e.name}`),_l.error(i.http_resp_msg),i):(_l.error(`Error calling operation: ${e.name}`),_l.error(i),i)}}a(cte,"callOperationFunctionAsAwait");Jv.exports={callOperationFunctionAsAwait:cte}});var Xv=m((STe,jv)=>{"use strict";var $g=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}},Vg=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};jv.exports={BulkLoadFileObject:$g,BulkLoadDataObject:Vg}});var eB=m((gTe,Zv)=>{"use strict";var Yg=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};Zv.exports=Yg});var jg=m((yTe,pB)=>{"use strict";var cf=Xt(),lf=xg(),ute=require("needle"),hs=R(),ATe=Me(),qa=F(),{handleHDBError:$e,hdb_errors:uB}=z(),{HTTP_STATUS_CODES:Pt,HDB_ERROR_MSGS:Tt,CHECK_LOGS_WRAPPER:Oo}=uB,Fa=C(),Kg=require("papaparse");qa.promisifyPapaParse();var ms=require("fs-extra"),lte=require("path"),{chain:tB}=require("stream-chain"),rB=require("stream-json/streamers/StreamArray"),sB=require("stream-json/utils/Batch"),nB=require("stream-chain/utils/comp"),{finished:iB}=require("stream"),_te=Y(),lB=kg(),dte=Cg(),{BulkLoadFileObject:Qg,BulkLoadDataObject:Ete}=Xv(),zg=Tg(),{verifyBulkLoadAttributePerms:_B}=VE(),OTe=eB(),NTe=Qe(),bTe=mn(),{databases:fte}=(_e(),re(be)),{coerceType:hte}=(_f(),re(Xg)),oB="No records parsed from csv file.",Ao=`${_te.get("HDB_ROOT")}/tmp`,{schema_regex:mte}=Ds(),aB=1024*1024*2,cB=5e3,pte={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};pB.exports={csvDataLoad:Ste,csvURLLoad:Tte,csvFileLoad:gte,importFromS3:Rte};async function Ste(e,t){let r=lf.dataObject(e);if(r)throw $e(r,r.message,Pt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=fB(e.schema,e.table),i=Kg.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Wg.bind(null,n),dynamicTyping:!1}),o=new zg;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&_B(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw $e(new Error,c,Pt.BAD_REQUEST,void 0,void 0,!0);let u=new Ete(e.action,e.schema,e.table,i.data);return s=await lB.callOperationFunctionAsAwait(hB,u,null),s.message===oB?oB:mB(s.records,s.number_written)}catch(n){throw No(n)}}a(Ste,"csvDataLoad");async function Tte(e){let t=lf.urlObject(e);if(t)throw $e(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Ao}/${r}`;try{await Ate(e,r)}catch(n){throw Fa.error(Tt.DOWNLOAD_FILE_ERR(r)+" - "+n),$e(n,Oo(Tt.DOWNLOAD_FILE_ERR(r)))}try{let n=new Qg(this.job_operation_function.name,e.action,e.schema,e.table,s,hs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Jg(n);return await uf(s),i}catch(n){throw await uf(s),No(n)}}a(Tte,"csvURLLoad");async function gte(e){let t=lf.fileObject(e);if(t)throw $e(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);let r=new Qg(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,hs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Jg(r)}catch(s){throw No(s)}}a(gte,"csvFileLoad");async function Rte(e){let t=lf.s3FileObject(e);if(t)throw $e(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=lte.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Ao}/${n}`;let i=new Qg(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await Ote(n,e);let o=await Jg(i);return await uf(r),o}catch(s){throw await uf(r),No(s)}}a(Rte,"importFromS3");async function Ate(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await ute("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw $e(s,n,s.statusCode,hs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}bte(r,e.csv_url),await Nte(t,r.raw)}a(Ate,"downloadCSVFile");async function Ote(e,t){try{let r=`${Ao}/${e}`;await ms.mkdirp(Ao),await ms.writeFile(`${Ao}/${e}`,"",{flag:"a+"});let s=await ms.createWriteStream(r),n=await dte.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(){Fa.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Fa.error(Tt.S3_DOWNLOAD_ERR+" - "+r),$e(r,Oo(Tt.S3_DOWNLOAD_ERR))}}a(Ote,"downloadFileFromS3");async function Nte(e,t){try{await ms.mkdirp(Ao),await ms.writeFile(`${Ao}/${e}`,t)}catch(r){throw Fa.error(Tt.WRITE_TEMP_FILE_ERR),$e(r,Oo(Tt.DEFAULT_BULK_LOAD_ERR))}}a(Nte,"writeFileToTempFolder");async function uf(e){if(e)try{await ms.access(e),await ms.unlink(e)}catch{Fa.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(uf,"deleteTempFile");function bte(e,t){if(e.statusCode!==uB.HTTP_STATUS_CODES.OK)throw $e(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Pt.BAD_REQUEST);if(!pte[e.headers["content-type"]])throw $e(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Pt.BAD_REQUEST);if(!e.raw)throw $e(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Pt.BAD_REQUEST)}a(bte,"validateURLResponse");async function Jg(e){try{let t;switch(e.file_type){case hs.VALID_S3_FILE_TYPES.CSV:t=await yte(e);break;case hs.VALID_S3_FILE_TYPES.JSON:t=await Ite(e);break;default:throw $e(new Error,Tt.DEFAULT_BULK_LOAD_ERR,Pt.BAD_REQUEST,hs.LOG_LEVELS.ERROR,Tt.INVALID_FILE_EXT_ERR(e))}return mB(t.records,t.number_written)}catch(t){throw No(t)}}a(Jg,"fileLoad");async function dB(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 cf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&_B(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=$e(c);r(u)}}a(dB,"validateChunk");async function EB(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;qa.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!qa.isEmpty(c)&&!qa.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 lB.callOperationFunctionAsAwait(hB,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=$e(c,Oo(Tt.INSERT_CSV_ERR),Pt.INTERNAL_SERVER_ERROR,hs.LOG_LEVELS.ERROR,Tt.INSERT_CSV_ERR+" - "+c);r(u)}}a(EB,"insertChunk");async function yte(e){let t={records:0,number_written:0},r=fB(e.schema,e.table);try{let s=new zg,n=ms.createReadStream(e.file_path,{highWaterMark:aB});n.setEncoding("utf8"),await Kg.parsePromise(n,dB.bind(null,e,s),Wg.bind(null,r));let i=s.getPermsResponse();if(i)throw $e(new Error,i,Pt.BAD_REQUEST);return n=ms.createReadStream(e.file_path,{highWaterMark:aB}),n.setEncoding("utf8"),await Kg.parsePromise(n,EB.bind(null,e,t),Wg.bind(null,r)),n.destroy(),t}catch(s){throw $e(s,Oo(Tt.PAPA_PARSE_ERR),Pt.INTERNAL_SERVER_ERROR,hs.LOG_LEVELS.ERROR,Tt.PAPA_PARSE_ERR+s)}}a(yte,"callPapaParse");function fB(e,t){let r=fte[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>hte(i,n));return s}a(fB,"createTransformMap");function Wg(e,t,r){let s=e.get(r);return s?s(t):qa.autoCast(t)}a(Wg,"typeFunction");async function Ite(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new zg,n=tB([ms.createReadStream(e.file_path,{encoding:"utf-8"}),rB.withParser(),c=>c.value,new sB({batchSize:cB}),nB(async c=>{await dB(e,s,r,c)})]);await new Promise((c,u)=>{iB(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw $e(new Error,i,Pt.BAD_REQUEST);let o=tB([ms.createReadStream(e.file_path,{encoding:"utf-8"}),rB.withParser(),c=>c.value,new sB({batchSize:cB}),nB(async c=>{await EB(e,t,r,c)})]);return await new Promise((c,u)=>{iB(o,l=>{l?u(l):c()}),o.resume()}),t}catch(s){throw $e(s,Oo(Tt.INSERT_JSON_ERR),Pt.INTERNAL_SERVER_ERROR,hs.LOG_LEVELS.ERROR,Tt.INSERT_JSON_ERR+s)}}a(Ite,"insertJson");async function hB(e){let t={};try{e.data&&e.data.length>0&&wte(e.data[0])?t=await Cte(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Fa.info(t.message))}catch(r){throw No(r)}return t}a(hB,"callBulkFileLoad");function wte(e){let t=Object.keys(e);for(let r of t)if(!mte.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(wte,"validateColumnNames");async function Cte(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=cf.insert;break;case"update":i=cf.update;break;case"upsert":i=cf.upsert;break;default:throw $e(new Error,Tt.INVALID_ACTION_PARAM_ERR(s),Pt.BAD_REQUEST,hs.LOG_LEVELS.ERROR,Tt.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=qa.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw No(o)}}a(Cte,"bulkFileLoad");function mB(e,t){return`successfully loaded ${t} of ${e} records`}a(mB,"buildResponseMsg");function No(e){return $e(e,Oo(Tt.DEFAULT_BULK_LOAD_ERR),Pt.INTERNAL_SERVER_ERROR,hs.LOG_LEVELS.ERROR,Tt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(No,"buildTopLevelErrMsg")});var TB=m((wTe,SB)=>{"use strict";var Zg=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};SB.exports=Zg});var AB=m((LTe,RB)=>{"use strict";var Lte=R(),gB=require("moment"),Dte=require("uuid").v4,eR=class{static{a(this,"JobObject")}constructor(){this.id=Dte(),this.type=void 0,this.start_datetime=gB().valueOf(),this.created_datetime=gB().valueOf(),this.end_datetime=void 0,this.status=Lte.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};RB.exports=eR});var tR=m((UTe,wB)=>{"use strict";var Ute=require("uuid").v4,bB=Xt(),yB=jt(),Mte=as(),Pte=ua(),vte=TB(),Ve=R(),Bte=AB(),Hte=kd(),Xr=C(),qte=Vc(),Ga=F(),{promisify:Fte}=require("util"),bo=require("moment"),Gte=KE(),df=xg(),OB=tp(),{deleteTransactionLogsBeforeValidator:xte}=Eg(),{handleHDBError:kte,hdb_errors:$te}=z(),{HTTP_STATUS_CODES:Vte}=$te,NB=yB.searchByValue,Yte=yB.searchByHash,Kte=bB.insert,Wte=Fte(Gte.evaluateSQL),Qte=bB.update;wB.exports={addJob:jte,updateJob:Zte,handleGetJob:zte,handleGetJobsByStartDate:Jte,getJobById:IB};async function zte(e){try{let t=await IB(e.id);return Ga.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw Xr.error("There was an error getting job",t),new Error(r)}}a(zte,"handleGetJob");async function Jte(e){try{let t=await Xte(e);if(Xr.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=bo(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=bo(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Xr.error(r),new Error(r)}}a(Jte,"handleGetJobsByStartDate");async function jte(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ga.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return Xr.info(_),t.error=_,t}if(!Ve.JOB_TYPE_ENUM[e.operation])return Xr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ve.OPERATIONS_ENUM.CSV_FILE_LOAD:s=df.fileObject(e);break;case Ve.OPERATIONS_ENUM.CSV_URL_LOAD:s=df.urlObject(e);break;case Ve.OPERATIONS_ENUM.CSV_DATA_LOAD:s=df.dataObject(e);break;case Ve.OPERATIONS_ENUM.IMPORT_FROM_S3:s=df.s3FileObject(e);break;case Ve.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ve.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=OB(e,"date");break;case Ve.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=OB(e,"timestamp");break;case Ve.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=xte(e);break;default:break}if(s)throw kte(s,s.message,Vte.BAD_REQUEST,void 0,void 0,!0);let n=new Bte;n.type=e.operation===Ve.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ve.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new Mte(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await NB(i))}catch(_){let d=`There was an error inserting a new job: ${_}`;return Xr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=Ute();try{o=await NB(i)}catch(_){let d=`There was an error inserting a new job: ${_}`;return Xr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Xr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new qte(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await Kte(u)}catch(_){return Xr.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,Xr.trace(_)}return t}a(jte,"addJob");async function Xte(e){let t=bo(e.from_date,bo.ISO_8601),r=bo(e.to_date,bo.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 vte(s,e.hdb_user);try{return await Wte(n)}catch(i){throw Xr.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(Xte,"getJobsInDateRange");async function IB(e){if(Ga.isEmptyOrZeroLength(e))return Ga.errorizeMessage("Invalid job ID specified.");let t=new Pte(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Yte(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Xr.error(s),Ga.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(IB,"getJobById");async function Zte(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ga.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ve.JOB_STATUS_ENUM.COMPLETE||e.status===Ve.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=bo().valueOf());let t=new Hte(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Qte(t),r}a(Zte,"updateJob")});var PB=m((PTe,MB)=>{"use strict";var CB=F(),Er=R(),ere=require("moment"),Ef=jg(),ff=C(),LB=tR(),DB=WE(),UB=Zi(),tre=tt(),rre=BE(),rR=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function sre(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(CB.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(CB.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Er.JOB_TYPE_ENUM.csv_file_load:await Pn(e,Ef.csvFileLoad);break;case Er.JOB_TYPE_ENUM.csv_url_load:await Pn(e,Ef.csvURLLoad);break;case Er.JOB_TYPE_ENUM.csv_data_load:await Pn(e,Ef.csvDataLoad);break;case Er.JOB_TYPE_ENUM.import_from_s3:await Pn(e,Ef.importFromS3);break;case Er.JOB_TYPE_ENUM.empty_trash:break;case Er.JOB_TYPE_ENUM.export_local:await Pn(e,DB.export_local);break;case Er.JOB_TYPE_ENUM.export_to_s3:await Pn(e,DB.export_to_s3);break;case Er.JOB_TYPE_ENUM.delete_files_before:case Er.JOB_TYPE_ENUM.delete_records_before:await Pn(e,UB.deleteFilesBefore);break;case Er.JOB_TYPE_ENUM.delete_audit_logs_before:await Pn(e,UB.deleteAuditLogsBefore);break;case Er.JOB_TYPE_ENUM.delete_transaction_logs_before:await Pn(e,rre.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(sre,"parseMessage");async function Pn(e,t){try{e.job.status=Er.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=ere().valueOf(),await LB.updateJob(e.job),await nre(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):ff.error(`There was an error running ${t.name} job with id ${e.job.id}`),ff.error(s),e.job.message=s,e.job.status=Er.JOB_STATUS_ENUM.ERROR;try{await LB.updateJob(e.job)}catch(n){throw ff.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Pn,"runJob");async function nre(e){ff.trace("launching job thread:",e),tre.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Er.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(nre,"launchJobThread");MB.exports={parseMessage:sre,RunnerMessage:rR}});var BB=m((BTe,vB)=>{"use strict";var sR=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};vB.exports=sR});var ZB=m((qTe,cR)=>{"use strict";var Sf=jt(),oR=KE(),hf=jg(),vn=Md(),mf=Zn(),El=Zi(),ire=$S(),dl=er(),pf=qd(),vt=PE(),gt=C(),ore=eT(),are=Du(),cre=MT(),ure=tE(),lre=PT(),_re=vT(),dre=iE(),Ere=aE(),nR=uE(),HB=WE(),fre=VE(),aR=tR(),w=R(),{hdb_errors:hl,handleHDBError:fl}=z(),{HTTP_STATUS_CODES:qB}=hl,iR=_E(),FB=wa(),QB=require("util"),xa=Xt(),hre=$r(),mre=Nn(),GB=PB(),xB=Iu(),kB=(DE(),re(zu)),$B=et(),VB=BE(),YB=GE(),{setServerUtilities:pre}=(_f(),re(Xg)),{CONTEXT:Sre}=(Is(),re(om)),{_assignPackageExport:Tre}=require("../index"),{transformReq:gre}=F(),Rre=kg(),KB=Sf.searchByHash,Are=Sf.searchByValue,Ore=QB.promisify(Sf.search),Nre=QB.promisify(oR.evaluateSQL),bre={[w.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[w.OPERATIONS_ENUM.CREATE_TABLE]:!0,[w.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[w.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[w.OPERATIONS_ENUM.DROP_TABLE]:!0,[w.OPERATIONS_ENUM.DROP_SCHEMA]:!0},q=BB();async function zB(e,t){try{if(e.body.operation!=="read_log"&&(gt.log_level===w.LOG_LEVELS.INFO||gt.log_level===w.LOG_LEVELS.DEBUG||gt.log_level===w.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;gt.info(o)}}catch(s){gt.error(s)}let r=await Rre.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return bre[e.body.operation]&&hre.setSchemaDataToGlobal(s=>{s&>.error(s)}),r}a(zB,"processLocalTransaction");var WB=Ire();cR.exports={chooseOperation:JB,getOperationFunction:jB,operation:XB,processLocalTransaction:zB};pre(cR.exports);function JB(e){let t;try{t=jB(e)}catch(n){throw gt.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=oR.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=oR.checkASTPermissions(e,i);if(o)throw gt.error(`${qB.FORBIDDEN} from operation ${e.operation}`),gt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),fl(new Error,o,hl.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==w.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==w.OPERATIONS_ENUM.LOGIN&&e.operation!==w.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=fre.verifyPerms(i,n);if(o)throw gt.error(`${qB.FORBIDDEN} from operation ${e.operation}`),gt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),fl(new Error,o,hl.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw fl(n,"There was an error when trying to choose an operation path")}return r}a(JB,"chooseOperation");function jB(e){if(gt.trace(`getOperationFunction with operation: ${e.operation}`),WB.has(e.operation))return WB.get(e.operation);throw fl(new Error,hl.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),hl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(jB,"getOperationFunction");Tre("operation",XB);function XB(e,t){e.hdb_user=this[Sre]?.user,e.bypass_auth=!t;let r=JB(e);return zB({body:e},r)}a(XB,"operation");async function yre(e){gt.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[w.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case w.OPERATIONS_ENUM.INSERT:o=await xa.insert(i);break;case w.OPERATIONS_ENUM.UPDATE:o=await xa.update(i);break;case w.OPERATIONS_ENUM.UPSERT:o=await xa.upsert(i);break;case w.OPERATIONS_ENUM.DELETE:o=await El.deleteRecord(i);break;default:gt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){gt.info("Invalid operation in transaction"),gt.error(o)}}a(yre,"catchup");async function Ks(e){gre(e);let t,r;try{r=await aR.addJob(e),t=r.createdJob,gt.info("addJob result",r);let s=new GB.RunnerMessage(t,e);return await GB.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 gt.error(n),fl(s,n)}}a(Ks,"executeJob");function Ire(){let e=new Map;return e.set(w.OPERATIONS_ENUM.INSERT,new q(xa.insert)),e.set(w.OPERATIONS_ENUM.UPDATE,new q(xa.update)),e.set(w.OPERATIONS_ENUM.UPSERT,new q(xa.upsert)),e.set(w.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new q(Sf.searchByConditions)),e.set(w.OPERATIONS_ENUM.SEARCH_BY_HASH,new q(KB)),e.set(w.OPERATIONS_ENUM.SEARCH_BY_ID,new q(KB)),e.set(w.OPERATIONS_ENUM.SEARCH_BY_VALUE,new q(Are)),e.set(w.OPERATIONS_ENUM.SEARCH,new q(Ore)),e.set(w.OPERATIONS_ENUM.SQL,new q(Nre)),e.set(w.OPERATIONS_ENUM.CSV_DATA_LOAD,new q(Ks,hf.csvDataLoad)),e.set(w.OPERATIONS_ENUM.CSV_FILE_LOAD,new q(Ks,hf.csvFileLoad)),e.set(w.OPERATIONS_ENUM.CSV_URL_LOAD,new q(Ks,hf.csvURLLoad)),e.set(w.OPERATIONS_ENUM.IMPORT_FROM_S3,new q(Ks,hf.importFromS3)),e.set(w.OPERATIONS_ENUM.CREATE_SCHEMA,new q(vn.createSchema)),e.set(w.OPERATIONS_ENUM.CREATE_DATABASE,new q(vn.createSchema)),e.set(w.OPERATIONS_ENUM.CREATE_TABLE,new q(vn.createTable)),e.set(w.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new q(vn.createAttribute)),e.set(w.OPERATIONS_ENUM.DROP_SCHEMA,new q(vn.dropSchema)),e.set(w.OPERATIONS_ENUM.DROP_DATABASE,new q(vn.dropSchema)),e.set(w.OPERATIONS_ENUM.DROP_TABLE,new q(vn.dropTable)),e.set(w.OPERATIONS_ENUM.DROP_ATTRIBUTE,new q(vn.dropAttribute)),e.set(w.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new q(mf.describeSchema)),e.set(w.OPERATIONS_ENUM.DESCRIBE_DATABASE,new q(mf.describeSchema)),e.set(w.OPERATIONS_ENUM.DESCRIBE_TABLE,new q(mf.describeTable)),e.set(w.OPERATIONS_ENUM.DESCRIBE_ALL,new q(mf.describeAll)),e.set(w.OPERATIONS_ENUM.DELETE,new q(El.deleteRecord)),e.set(w.OPERATIONS_ENUM.ADD_USER,new q(dl.addUser)),e.set(w.OPERATIONS_ENUM.ALTER_USER,new q(dl.alterUser)),e.set(w.OPERATIONS_ENUM.DROP_USER,new q(dl.dropUser)),e.set(w.OPERATIONS_ENUM.LIST_USERS,new q(dl.listUsersExternal)),e.set(w.OPERATIONS_ENUM.LIST_ROLES,new q(pf.listRoles)),e.set(w.OPERATIONS_ENUM.ADD_ROLE,new q(pf.addRole)),e.set(w.OPERATIONS_ENUM.ALTER_ROLE,new q(pf.alterRole)),e.set(w.OPERATIONS_ENUM.DROP_ROLE,new q(pf.dropRole)),e.set(w.OPERATIONS_ENUM.USER_INFO,new q(dl.userInfo)),e.set(w.OPERATIONS_ENUM.READ_LOG,new q(ore)),e.set(w.OPERATIONS_ENUM.ADD_NODE,new q(are)),e.set(w.OPERATIONS_ENUM.UPDATE_NODE,new q(cre)),e.set(w.OPERATIONS_ENUM.REMOVE_NODE,new q(ure)),e.set(w.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new q(lre)),e.set(w.OPERATIONS_ENUM.PURGE_STREAM,new q(_re)),e.set(w.OPERATIONS_ENUM.SET_CONFIGURATION,new q($B.setConfiguration)),e.set(w.OPERATIONS_ENUM.CLUSTER_STATUS,new q(dre.clusterStatus)),e.set(w.OPERATIONS_ENUM.CLUSTER_NETWORK,new q(Ere)),e.set(w.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new q(nR.setRoutes)),e.set(w.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new q(nR.getRoutes)),e.set(w.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new q(nR.deleteRoutes)),e.set(w.OPERATIONS_ENUM.EXPORT_TO_S3,new q(Ks,HB.export_to_s3)),e.set(w.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new q(Ks,El.deleteFilesBefore)),e.set(w.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new q(Ks,El.deleteFilesBefore)),e.set(w.OPERATIONS_ENUM.EXPORT_LOCAL,new q(Ks,HB.export_local)),e.set(w.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new q(aR.handleGetJobsByStartDate)),e.set(w.OPERATIONS_ENUM.GET_JOB,new q(aR.handleGetJob)),e.set(w.OPERATIONS_ENUM.GET_FINGERPRINT,new q(iR.getFingerprint)),e.set(w.OPERATIONS_ENUM.SET_LICENSE,new q(iR.setLicense)),e.set(w.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new q(iR.getRegistrationInfo)),e.set(w.OPERATIONS_ENUM.RESTART,new q(FB.restart)),e.set(w.OPERATIONS_ENUM.RESTART_SERVICE,new q(FB.restartService)),e.set(w.OPERATIONS_ENUM.CATCHUP,new q(yre)),e.set(w.OPERATIONS_ENUM.SYSTEM_INFORMATION,new q(mre.systemInformation)),e.set(w.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new q(Ks,El.deleteAuditLogsBefore)),e.set(w.OPERATIONS_ENUM.READ_AUDIT_LOG,new q(ire)),e.set(w.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new q(xB.createTokens)),e.set(w.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new q(xB.refreshOperationToken)),e.set(w.OPERATIONS_ENUM.LOGIN,new q(kB.login)),e.set(w.OPERATIONS_ENUM.LOGOUT,new q(kB.logout)),e.set(w.OPERATIONS_ENUM.GET_CONFIGURATION,new q($B.getConfiguration)),e.set(w.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new q(vt.customFunctionsStatus)),e.set(w.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new q(vt.getCustomFunctions)),e.set(w.OPERATIONS_ENUM.GET_COMPONENT_FILE,new q(vt.getComponentFile)),e.set(w.OPERATIONS_ENUM.GET_COMPONENTS,new q(vt.getComponents)),e.set(w.OPERATIONS_ENUM.SET_COMPONENT_FILE,new q(vt.setComponentFile)),e.set(w.OPERATIONS_ENUM.DROP_COMPONENT,new q(vt.dropComponent)),e.set(w.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new q(vt.getCustomFunction)),e.set(w.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new q(vt.setCustomFunction)),e.set(w.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new q(vt.dropCustomFunction)),e.set(w.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new q(vt.addComponent)),e.set(w.OPERATIONS_ENUM.ADD_COMPONENT,new q(vt.addComponent)),e.set(w.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new q(vt.dropCustomFunctionProject)),e.set(w.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new q(vt.packageComponent)),e.set(w.OPERATIONS_ENUM.PACKAGE_COMPONENT,new q(vt.packageComponent)),e.set(w.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new q(vt.deployComponent)),e.set(w.OPERATIONS_ENUM.DEPLOY_COMPONENT,new q(vt.deployComponent)),e.set(w.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new q(VB.readTransactionLog)),e.set(w.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new q(Ks,VB.deleteTransactionLogsBefore)),e.set(w.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new q(YB.installModules)),e.set(w.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new q(YB.auditModules)),e.set(w.OPERATIONS_ENUM.GET_BACKUP,new q(vn.getBackup)),e}a(Ire,"initializeOperationFunctionMap")});var gf=m((GTe,rH)=>{"use strict";var uR=R(),wre=F(),ml=C(),{handleHDBError:lR,hdb_errors:Tf}=z(),{isMainThread:Cre}=require("worker_threads"),{Readable:Lre}=require("stream"),eH=require("os"),Dre=require("util"),Ure=lT(),Mre=Dre.promisify(Ure.authorize),tH=ZB(),{Gzip:Pre}=require("zlib");function vre(e){let t=`Found an uncaught exception with message: ${e.message}. ${eH.EOL}Stack: ${e.stack} ${eH.EOL}Terminating ${Cre?"HDB":"thread"}.`;console.error(t),ml.fatal(t),process.exit(1)}a(vre,"handleServerUncaughtException");function Bre(e,t,r){if(ml[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:Tf.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(Bre,"serverErrorHandler");function Hre(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=lR(new Error,"Invalid JSON.",Tf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(wre.isEmpty(e.body.operation)){let s=lR(new Error,"Request body must include an 'operation' property.",Tf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(Hre,"reqBodyValidationHandler");function qre(e,t,r){let s;e.body.operation!==uR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==uR.OPERATIONS_ENUM.LOGIN&&e.body.operation!==uR.OPERATIONS_ENUM.LOGOUT?Mre(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{ml.warn(n),ml.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(lR(n,i,Tf.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(qre,"authHandler");async function Fre(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=tH.chooseOperation(e.body);let n=await tH.processLocalTransaction(e,s);if(n instanceof Lre&&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 Pre))}return n}catch(n){throw ml.error(n),n}}a(Fre,"handlePostRequest");rH.exports={authHandler:qre,handlePostRequest:Fre,handleServerUncaughtException:vre,serverErrorHandler:Bre,reqBodyValidationHandler:Hre}});var oH=m((kTe,iH)=>{"use strict";var Gre=require("fastify-plugin"),{handlePostRequest:sH,authHandler:xre,reqBodyValidationHandler:kre}=gf();async function $re(e){e.decorate("hdbCore",{preValidation:[kre,xre],request:t=>nH(sH(t,response)),requestWithoutAuthentication:(t,r)=>nH(sH(t,r,!0))})}a($re,"hdbCore");async function nH(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(nH,"convertAsyncIterators");iH.exports=Gre($re)});var cH=m((VTe,aH)=>{"use strict";var _R=require("fs"),ka=Y();ka.initSync();var{CONFIG_PARAMS:pl}=R(),Vre=1024*1024*1024;function Yre(e){let t=ka.get(pl.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=ka.get(pl.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:Vre,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=ka.get(pl.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=ka.get(pl.CUSTOMFUNCTIONS_TLS_CERTIFICATE),o=ka.get(pl.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:_R.readFileSync(`${n}`),cert:_R.readFileSync(i)+(o?`
|
|
24
24
|
|
|
25
|
-
`+
|
|
25
|
+
`+_R.readFileSync(o):"")},s.http2=!0}return s}a(Yre,"getServerOptions");aH.exports=Yre});var _H=m((KTe,lH)=>{"use strict";var dR=Y();dR.initSync();var{CONFIG_PARAMS:uH}=R();function Kre(){let e=dR.get(uH.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=dR.get(uH.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(Kre,"getCORSOptions");lH.exports=Kre});var fH=m((QTe,EH)=>{"use strict";var dH=Y();dH.initSync();var Wre=R();function Qre(){return dH.get(Wre.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(Qre,"getHeaderTimeoutConfig");EH.exports=Qre});var hR={};Ke(hR,{customFunctionsServer:()=>jre,handleFile:()=>Jre,ready:()=>ese});async function Jre(e,t,r,s){if(!Bn){let c=ER.get(fR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);Bn=IH(c),Et.http((await Bn).server)}let n=await Bn,i=(0,mH.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),hH.has(i)||(hH.add(i),n.register(Zre(i,o)))}async function jre(){try{ve.info("In Custom Functions Fastify server"+process.cwd()),ve.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),ve.debug(`Custom Functions server process ${process.pid} starting up.`),await Xre();let e=ER.get(fR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=Bn=await IH(t)}catch(s){throw ve.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw ve.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){ve.error(`Custom Functions ${process.pid} Error: ${e}`),ve.error(e),process.exit(1)}}async function Xre(){try{ve.info("Custom Functions starting configuration."),await AH.setUsersToGlobal(),ve.info("Custom Functions completed configuration.")}catch(e){ve.error(e)}}function Zre(e,t){return async function(r){try{ve.info("Custom Functions starting buildRoutes"),ve.trace("Loading fastify routes folder "+e),(0,pH.existsSync)(e)&&r.register(RH.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:ve.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?ve.error(n.message):n&&ve.error(n),o()})}catch(s){ve.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function IH(e){ve.info("Custom Functions starting buildServer.");let t=(0,OH.default)(e),r=(0,SH.default)(t);r.server.headersTimeout=(0,bH.default)(),r.setErrorHandler(yH.serverErrorHandler);let s=(0,NH.default)();return s&&r.register(TH.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(gH.default),await r.register(zre),await r.after(),Ug(r),ve.info("Custom Functions completed buildServer."),r}function ese(){if(Bn)return Bn.then?Bn.then(e=>e.ready()):Bn.ready()}var mH,pH,SH,TH,gH,RH,ER,fR,ve,zre,AH,OH,NH,bH,yH,Bn,hH,wH=Te(()=>{mH=require("path"),pH=require("fs"),SH=D(require("fastify")),TH=D(require("@fastify/cors")),gH=D(Hg()),RH=D(require("@fastify/autoload")),ER=D(Y()),fR=D(R()),ve=D(C()),zre=D(oH()),AH=D(er()),OH=D(cH()),NH=D(_H()),bH=D(fH()),yH=D(gf());Da();rs();hH=new Set;a(Jre,"handleFile");a(jre,"customFunctionsServer");a(Xre,"setUp");a(Zre,"buildRouteFolder");a(IH,"buildServer");a(ese,"ready")});var mR={};Ke(mR,{start:()=>tse});function tse(e){let t=e.root;return{handleFile(r,s,n){LH||(LH=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=CH.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,DH.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))),CH.set(s,n)}}}var DH,CH,LH,UH=Te(()=>{DH=D(require("send")),CH=new Map;a(tse,"start")});var HH=m(bf=>{"use strict";var{isMainThread:rse,parentPort:Tl,threadId:sse}=require("worker_threads"),{Socket:nse}=require("net"),{createServer:ise,IncomingMessage:ose}=require("http"),{createServer:ase}=require("https"),{readFileSync:$a}=require("fs"),Rf=C(),Ws=Y(),Va=R(),{server:Nf}=(rs(),re(Pc)),{WebSocketServer:cse}=require("ws"),{createServer:use}=require("tls"),{getTicketKeys:lse}=tt(),{Headers:_se}=(yE(),re(TP));process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:ege,CONFIG_PARAMS:tge}=Va;Ws.initSync();var gi={};bf.registerServer=OR;bf.httpServer=NR;bf.deliverSocket=AR;Nf.http=NR;Nf.request=mse;Nf.socket=pse;Nf.ws=Sse;var pR=[],SR=[],dse,Sl={},Af={},Ese=[],TR=[];rse||yf().loadRootComponents(!0).then(()=>{Tl.on("message",e=>{let{port:t,fd:r,data:s}=e;if(r)AR(r,t,s);else if(e.requestId)fse(e);else if(e.type===Va.ITC_EVENT_TYPES.SHUTDOWN)for(let n in gi){let i=gi[n];i.close?.(()=>{setTimeout(()=>{i.cantCleanupProperly||Rf.warn("Had to forcefully exit the thread",sse),process.exit(0)},i.cantCleanupProperly?2500:5e3).unref()}),i.closeIdleConnections?.()}}).ref(),Tl.postMessage({type:Va.ITC_EVENT_TYPES.CHILD_STARTED})});function AR(e,t,r){let s=e?.read?e:new nse({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=gi[t];if(n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=gi[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(Rf.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(AR,"deliverSocket");var MH=new Map;function fse(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=MH.get(n),r){case"connection":i=AR(void 0,t),MH.set(n,i),i.write=(c,u,l)=>(Tl.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),l&&l(),!0),i.end=(c,u,l)=>(Tl.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),l&&l(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Tl.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(fse,"proxyRequest");function OR(e,t){+t||(t=parseInt(Ws.get(Va.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10));let r=gi[t];if(r){let s=r.lastServer||r;s.off("unhandled",PH),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else gi[t]=e;e.on("unhandled",PH)}a(OR,"registerServer");function vH(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[{port:parseInt(Ws.get(Va.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10),secure:Ws.get(Va.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}]),t}a(vH,"getPorts");function NR(e,t){for(let{port:r,secure:s}of vH(t))BH(r,s,t?.isOperationsServer),typeof e=="function"?TR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):OR(e,r),Af[r]=gR(TR,r),dse=gR(Ese,r)}a(NR,"httpServer");function BH(e,t,r){if(!Sl[e]){let s={};if(t){let n=r?"operationsapi":"customfunctions",i=Ws.get(n+"_tls_privatekey"),o=Ws.get(n+"_tls_certificate"),c=Ws.get(n+"_tls_certificateauthority");s={key:$a(i),cert:$a(o)+(c?`
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
`+$a(c):""),ticketKeys:lse()}}Sl[e]=(t?ase:ise)(s,async(n,i)=>{try{let o=new Of(n);r&&(o.isOperationsServer=!0);let c=await Af[e](o);if(c.headers?.set?.("Server","HarperDB"),c.status===-1){for(let l of c.headers||[])i.setHeader(l[0],l[1]);return n.baseRequest=o,i.baseResponse=c,Sl[e].emit("unhandled",n,i)}c.handlesHeaders||i.writeHead(c.status||200,c.headers&&(c.headers[Symbol.iterator]?Array.from(c.headers):c.headers));let u=c.body;u?.pipe?(u.pipe(i),u.destroy&&i.on("close",()=>{u.destroy()})):u?.then?u.then(l=>{i.end(l)},l=>{i.writeHead(l.statusCode||500),i.end(l.toString()),Rf.error(l)}):i.end(u)}catch(o){i.writeHead(o.statusCode||500),i.end(o.toString()),Rf.error(o)}}),OR(Sl[e],e)}return Sl[e]}a(BH,"getHTTPServer");function gR(e,t){let r=hse;for(let s=e.length;s>0;){let{listener:n,port:i}=e[--s];if(i===t||i==="all"){let o=r;r=a(c=>n(c,o),"next_callback")}}return r}a(gR,"makeCallbackChain");function hse(e){return e.user&&(e[Ti].user=e.user),{status:-1,body:"Not found",headers:new _se}}a(hse,"unhandled");function mse(e,t){NR(e,{requestOnly:!0,...t})}a(mse,"onRequest");function pse(e,t){if(t.securePort){let r=Ws.get("customfunctions_tls_privatekey"),s=Ws.get("customfunctions_tls_certificate"),n=Ws.get("customfunctions_tls_certificateauthority"),i=use({key:$a(r),cert:$a(s)+(n?`
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
`)}a(
|
|
29
|
+
`+$a(n):"")},e);gi[t.securePort]=o=>{i.emit("connection",o)}}t.port&&(gi[t.port]=e)}a(pse,"onSocket");Object.defineProperty(ose.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Sse(e,t){for(let{port:r,secure:s}of vH(t)){SR[r]||(SR[r]=new cse({server:BH(r,s)}),SR[r].on("connection",async(i,o)=>{let c=new Of(o);c.isWebSocket=!0;let u=Af[r](c),l=c.headers["sec-websocket-protocol"]||"";for(let _=0;_<pR.length;_++){let d=pR[_];if(d.protocol){if(d.protocol===l){d.listener(i,c,u);break}}else d.listener(i,c,u)}}));let n=t?.subProtocol||"";pR.push({listener:e,protocol:n}),Af[r]=gR(TR,r)}}a(Sse,"onWebSocket");function PH(e,t){t.writeHead(404),t.end(`Not found
|
|
30
|
+
`)}a(PH,"defaultNotFound");var Ti=Symbol("node request"),Of=class{static{a(this,"Request")}[Ti];#e;constructor(t){this.method=t.method;let r=t.url;this[Ti]=t,this.url=r,this.headers=t.headers,this.headers.get=Tse}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this[Ti].socket.encrypted?"https":"http"}get ip(){return this[Ti].socket.remoteAddress}get body(){return this.#e||(this.#e=new RR(this[Ti]))}get host(){return this[Ti].authority||this[Ti].headers.host}get isAborted(){return!1}},RR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}};function Tse(e){return this[e.toLowerCase()]}a(Tse,"get")});var DR={};Ke(DR,{debugMode:()=>kH,startHTTPThreads:()=>Rse,startSocketServer:()=>CR,updateWorkerIdleness:()=>$H});async function Rse(e=2,t){if(t)IR(0,1,!0);else{let{loadRootComponents:r}=yf();if(e===0||kH)return(0,Ri.setMainIsWorker)(!0),bR=HH(),await r(!0),Promise.resolve([]);await r()}for(let r=0;r<e;r++)IR(r,e);return Promise.all(xH)}function IR(e,t=1,r){if(yR++,(0,Ri.startWorker)("server/threads/threadServer.js",{name:Cf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===Cf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});xH.push(n),await n,Ya.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=wf.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Ya.indexOf(s);o>-1&&Ya.splice(o,1)}if(a(i,"removeWorker"),Ka){let o=Ka;Ka=[];for(let c of o)GH[c.localPort](c)}}}),r){let s=setInterval(()=>{wR?wR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Ri.shutdownWorkers)(),yR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function CR(e=0,t){if(typeof e=="string")try{(0,Df.existsSync)(e)&&(0,Df.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Ase:r=Ose(t):r=LR;let s=(0,FH.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},GH[e]=i=>{wR=!0,r(i,(o,c)=>{if(!o){bR?(bR.deliverSocket(i,e,c),i.resume()):yR>0?(Ka.length===0&&setTimeout(()=>{Ka.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(),Ka.push(i)):(console.log("start up a dynamic thread to handle request"),IR(0));return}o.requests++;let u=i._handle.fd;Lf.trace("Socket",u,"from",i.remoteAddress," routed to worker",o.threadId),u>=0?o.postMessage({port:e,fd:u,data:c}):yse(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=ki();return Lf.info(`HarperDB ${n.version} Server running on port ${e}`),s}function LR(e,t){let r,s=0;for(let n of Ya){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=If)return If=i,t(r);s=i}If=0,t(r)}function Ase(e,t){let r=e.remoteAddress,s=Wa.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);LR(e,i=>{Wa.set(r,{worker:i,lastUsed:n}),t(i)})}function Ose(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=Wa.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);LR(s,_=>{Wa.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function $H(){If=0;for(let e of Ya)e.expectedIdle=e.recentELU.idle+Nse,e.requests=1;Ya.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function yse(e,t,r){let s=bse++;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(),wf.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")),wf.delete(s)),n.event=="destroy"&&(e.destroy(),wf.delete(s))})}var Ri,FH,Cf,Lf,Df,gse,Ya,Ka,GH,bR,yR,xH,kH,wR,If,qH,Wa,Nse,wf,bse,Uf=Te(()=>{Ri=D(tt()),FH=require("net"),Cf=D(R()),Lf=D(C()),Df=require("fs"),{isMainThread:gse}=require("worker_threads"),Ya=[],Ka=[],GH=[],yR=0,xH=[];gse&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(Rse,"startHTTPThreads");a(IR,"startHTTPWorker");a(CR,"startSocketServer");If=0;a(LR,"findMostIdleWorker");qH=36e5,Wa=new Map;a(Ase,"findByRemoteAddressAffinity");a(Ose,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Wa)r.lastUsed+qH<e&&Wa.delete(t)},qH).unref();Nse=1e3;a($H,"updateWorkerIdleness");(0,Ri.setMonitorListener)($H);wf=new Map,bse=1;a(yse,"proxySocket")});var QH=m((cge,WH)=>{"use strict";var Ise=require("cluster"),ps=Y();ps.initSync();var YH=R(),ige=require("util"),Hn=C(),UR=require("fs"),wse=require("fastify"),oge=ki(),Cse=require("@fastify/cors"),Lse=require("@fastify/compress"),Dse=require("@fastify/static"),Use=Hg(),Mse=require("path"),{PACKAGE_ROOT:Pse}=R(),vse=$r(),Bse=F(),Hse=er(),qse=jc(),{server:Fse}=(rs(),re(Pc)),{authHandler:Gse,handlePostRequest:xse,serverErrorHandler:kse,reqBodyValidationHandler:$se}=gf(),age=require("net"),{registerContentHandlers:Vse}=(Da(),re(Gv)),Yse=1024*1024*1024,KH="TRUE",{HDB_SETTINGS_NAMES:Io,CONFIG_PARAMS:Kse}=YH,Wse=Io.CORS_ENABLED_KEY,Qse="CORS_ACCESSLIST",zse=Io.SERVER_TIMEOUT_KEY,Jse=Io.SERVER_KEEP_ALIVE_TIMEOUT_KEY,jse=Io.SERVER_HEADERS_TIMEOUT_KEY,Xse=Io.PRIVATE_KEY_KEY,Zse=Io.CERT_KEY,ene=Io.HTTP_SECURE_ENABLED_KEY,yo;WH.exports={hdbServer:VH,start:VH};async function VH(e){try{Hn.info("In Fastify server"+process.cwd()),Hn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Hn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Ise.isMaster,await tne();let t=ps.get(ene),r=t&&(t===!0||t.toUpperCase()===KH);yo=rne(r),await yo.ready(),e||(e={}),e.isOperationsServer=!0,yo.server.cantCleanupProperly=!0;try{Fse.http(yo.server,e),yo.server.closeIdleConnections||await yo.listen({port:0,host:"::"})}catch(s){throw yo.close(),Hn.error(s),Hn.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Hn.fatal(t),process.exit(1)}}a(VH,"operationsServer");async function tne(){Hn.trace("Configuring HarperDB process."),vse.setSchemaDataToGlobal(),await Hse.setUsersToGlobal(),await qse.getLicense()}a(tne,"setUp");function rne(e){Hn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=sne(e),r=wse(t);r.server.headersTimeout=ine(),r.setErrorHandler(kse);let s=nne();s&&r.register(Cse,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(Use),r.register(Lse),r.register(Dse,{root:Mse.join(Pse,"docs")}),Vse(r);let n=ps.get(YH.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Bse.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[$se,Gse],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),xse(i,o)}),r.get("/health",()=>"HarperDB is running."),Hn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(rne,"buildServer");function sne(e){let t=ps.get(zse),r=ps.get(Jse),s={bodyLimit:Yse,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=ps.get(Xse),i=ps.get(Zse),o=ps.get(Kse.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:UR.readFileSync(n),cert:UR.readFileSync(i)+(o?`
|
|
31
31
|
|
|
32
|
-
`+wR.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(Jse,"getServerOptions");function jse(){let e=ms.get(Gse),t=ms.get(xse),r;return e&&(e===!0||e.toUpperCase()===xH)&&(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(jse,"getCORSOpts");function Xse(){return ms.get(Vse)}a(Xse,"getHeaderTimeoutConfig")});var tq=m((tge,eq)=>{"use strict";var{decode:Zse}=require("msgpackr"),{isMainThread:ene,parentPort:tne,threadId:ZTe}=require("worker_threads"),CR=We(),Ka=Me(),rne=g(),pl=D(),VH=$(),WH=g();tt();var sne=hn(),{recordAction:nne,recordActionBinary:ine}=(la(),te(Ad)),{publishToStream:one}=CR,ege={durable:Ka.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Ka.WORK_QUEUE_CONSUMER_NAMES.deliver_group},ane,cne,une,QH,zH;eq.exports={initialize:JH,workQueueListener:ZH,setSubscription:lne,setIgnoreOrigin:dne,getDatabaseSubscriptions:_ne};async function JH(){zH=!0,pl.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await CR.getNATSReferences();ane=e,cne=e.info.server_name,une=t,QH=r}a(JH,"initialize");var Lf=new Map;function lne(e,t,r){let s=Lf.get(e);s||Lf.set(e,s=new Map),s.set(t,r),zH||JH().then(ZH)}a(lne,"setSubscription");function _ne(){return Lf}a(_ne,"getDatabaseSubscriptions");var jH;function dne(e){jH=e}a(dne,"setIgnoreOrigin");var XH=100,YH=new Array(XH),Cf=0;async function ZH(){let t=await(await QH.consumers.get(Ka.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ka.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await YH[Cf],YH[Cf]=Ene(r).catch(s=>{pl.error(s)}),++Cf>=XH&&(Cf=0)}a(ZH,"workQueueListener");ene||tne.on("message",async e=>{let{type:t}=e;t===WH.ITC_EVENT_TYPES.SHUTDOWN&&CR.closeConnection()});async function Ene(e){let t=Zse(e.data);nne(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Ka.MSG_HEADERS.ORIGIN)===VH.get(rne.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!jH;if(ine(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;pl.trace("processing message:",i,o,u,(l?"records: "+l.map(b=>b.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),pl.trace(`messageProcessor nats msg id: ${e.headers.get(Ka.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:S}=d||{},p=Lf.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:KH(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:S});else{let b=l.map((R,P)=>({type:KH(i),value:R,id:_?.[P],table:u}));for(;c;)b.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;p.send({type:"transaction",writes:b,table:u,timestamp:f,onCommit:E,user:h,nodeName:S})}VH.get(WH.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&one(e.subject.split(".").slice(0,-1).join("."),sne.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){pl.error(i)}e.ack()}a(Ene,"messageProcessor");function KH(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(KH,"convertOperation")});var vR={};je(vR,{disableNATS:()=>hne,setNATSReplicator:()=>LR,start:()=>fne});function fne(){Uf.default.get(Mf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&pne()}function hne(e=!0){oq=e}function pne(){if(oq)return;let e=cs(),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];LR(n,r,i)}}BR((r,s)=>{LR(r.tableName,r.databaseName,r),s&&cq(r)}),!rq&&(rq=!0)}function LR(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 Nt{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){if(n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ae]}),s?.invalidate&&(!s.invalidate.reliesOnPrototype||s.prototype.invalidate))return s.invalidate(this[ae],this.getContext())}static defineSchema(o){cq(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 bs;return(0,sq.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<mne}static isNATSReplicator=!0});function n(i){let o=i?.transaction?.nats;return o||(i?.transaction?(i.transaction.push(o=i.transaction.nats=new Df(i.transaction,i)),o.user=i.user):o=aq),o}a(n,"getNATSTransaction")}function cq(e){let t=Uf.default.get(Mf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,UR.publishToStream)(`${MR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,PR.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 UR,MR,PR,sq,nq,Uf,Mf,iq,oq,mne,aq,rq,Df,DR,uq=ge(()=>{_e();ys();UR=U(We()),MR=U(Me()),PR=U(hn());Cc();sq=U(tq()),nq=U(Ht()),Uf=U($()),Mf=U(g()),iq=U(D());a(fne,"start");a(hne,"disableNATS");mne=2;a(pne,"assignReplicationSource");a(LR,"setNATSReplicator");a(cq,"publishSchema");Df=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=Uf.default.get(Mf.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||(iq.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,UR.publishToStream)(`${MR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,PR.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},DR=class extends Df{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,nq.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};aq=new DR});async function _q({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await HR.getResource(e,{});n=new FR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await HR.get(e);i&&i.delete()}n=new vf(e,t)}return n}function qR(){return Pf++,Pf>65500&&(Pf=1),Pf}var lq,Sl,HR,Pf,vf,FR,dq=ge(()=>{_e();Yu();lq=U(Ht()),Sl=U(D());Vi();HR=dt({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(_q,"getSession");Pf=1;a(qR,"getNextMessageId");vf=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(R=>R.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=fi.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 S=h.path,p=h.Resource,b=await Xe(f,async()=>{let R=await p.subscribe(f);if(!R)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let P of R)try{let V;if(P.type&&P.type!=="put"&&P.type!=="delete"&&P.type!=="message"||s&&!s(P))continue;r?(P.topic=n,V=this.needsAcknowledge(P)):V=qR();let O=P.id;Array.isArray(O)&&(O=Ia(O)),O==null&&(O=""),this.listener(S+"/"+O,P.value,V,t)}catch(V){(0,Sl.warn)(V)}})(),R});return b.topic=n,b.qos=t.qos,this.subscriptions.push(b),b}resume(){}needsAcknowledge(t){return qR()}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=fi.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 Xe(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=[]}},FR=class extends vf{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=qR();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,Sl.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,lq.getNextMonotonicTime)()),(0,Sl.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),HR.put(this.sessionRecord)),t.qos}}});var kR={};je(kR,{start:()=>Tne});async function Tne({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:_}=hq(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,Hn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;Sne&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,mq.getSuperUser)());let{onMessage:u,onClose:l}=hq(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,Hn.info)("Socket error",_)})},{port:t,securePort:s})}function hq(e,t,r,s,n){fq||(fq=!0,yS(_=>{_.push({metric:"mqtt-connections",connections:GR})})),GR++;let i,o={protocolVersion:4},c=(0,Bf.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){GR--,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 bt.auth(_.username,_.password.toString()),(0,xR.get)(qn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&Eq.notify({username:s.username,status:qn.AUTH_AUDIT_STATUS.SUCCESS,type:qn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,xR.get)(qn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&Eq.error({username:s.username,status:qn.AUTH_AUDIT_STATUS.FAILURE,type:qn.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=_q({user:s,..._}),i=await i}catch(R){return(0,Hn.error)(R),d({cmd:"connack",reasonCode:R.code||128,returnCode:R.code||128})}d({cmd:"connack",sessionPresent:i.sessionWasPresent,reasonCode:0,returnCode:0}),i.setListener((R,P,V,O)=>{try{let w=R.indexOf("/",1),x=w>0?R.slice(0,w):R;d({cmd:"publish",topic:R,payload:E(P),messageId:V||Math.floor(Math.random()*1e8),qos:O.qos},x)}catch(w){(0,Hn.error)(w),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let R of _.subscriptions){let P;try{P=(await i.addSubscription(R,R.qos>=1)).qos||0}catch(V){(0,Hn.error)(V),P=128}f.push(P)}await i.committed,d({cmd:"suback",granted:f,messageId:_.messageId});break;case"unsubscribe":for(let R of _.unsubscriptions)i.removeSubscription(R);d({cmd:"unsuback",messageId:_.messageId});break;case"pubrel":d({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let h=_.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=Pa(r?.headers["content-type"])),p=_.payload?.length>0?S(_.payload):void 0,b;try{b=await i.publish(_,p)}catch(R){console.warn(R),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:b===!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 S=(0,Bf.generate)(f,o);t(S),ao(S.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?wn(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Bf,mq,xR,qn,Hn,Eq,Sne,fq,GR,pq=ge(()=>{Bf=require("mqtt-packet");dq();mq=U(er());Ca();la();ln();xR=U($()),qn=U(g()),Hn=U(D()),Eq=(0,Hn.loggerWithTag)("auth-event"),Sne=!0;a(Tne,"start");GR=0;a(hq,"onSocket")});var Iq={};je(Iq,{loadComponent:()=>Hf,loadComponentDirectories:()=>yq});function yq(e,t){t&&(VR=t),e&&(YR=e);let r=[];if((0,Ks.existsSync)($R)){let n=(0,Ks.readdirSync)($R,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,jr.join)($R,o);r.push(Hf(c,VR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Hf(s,VR,s)),Promise.all(r).then(()=>{bq=!0})}async function Hf(e,t,r,s,n){if(!Tq.has(e)){Tq.set(e,!0),n&&(YR=n);try{let i,o=(0,jr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Ks.existsSync)(o)?i=(0,gq.parseDocument)((0,Ks.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=One;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,Ks.existsSync)(f=(0,jr.join)(E,"node_modules",u));)if(E=(0,jr.dirname)(E),E.length<(0,Nq.getHdbBasePath)().length){f=null;break}if(f)_=await Hf(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=Ane[u];if(_)try{c.push(_);let E=a(p=>(p.origin=r,dt(p)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,S=!f?.https&&f?.port;if(Tl.isMainThread&&(_=await _.startOnMainThread?.({server:bt,ensureTable:E,port:S,securePort:h,resources:t,...l})||_,s&&f))for(let p of[S,h])try{if(+p&&!Sq.includes(p)){Sq.push(p);let b=KR.get(WR.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);bR(p,b)}}catch(b){console.error("Error listening on socket",p,b,u)}if(t.isWorker&&(_=await _.start?.({server:bt,ensureTable:E,port:S,securePort:h,resources:t,...l})||_),YR.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,Oq.handleHDBError)("Can not reference parent directories");let p=(0,jr.join)(e,l.files);for(let b of await(0,Rq.default)(p,{onlyFiles:!1,objectMode:!0})){let{path:R,dirent:P}=b,V=(0,jr.relative)(e,R),O=(0,jr.basename)(e),w=l.path||"/";w=w.startsWith("/")?w:w.startsWith("./")?"/"+O+w.slice(2):w==="."?"/"+O:"/"+O+"/"+w,w+=(w.endsWith("/")?"":"/")+V;try{if(P.isFile()){let x=await Rne(R);Tl.isMainThread&&await _.setupFile?.(x,w,R,t),t.isWorker&&await _.handleFile?.(x,w,R,t)}else Tl.isMainThread&&await _.setupDirectory?.(w,R,t),t.isWorker&&await _.handleDirectory?.(w,R,t)}catch(x){console.error(`Could not load ${P.isFile()?"file":"directory"} ${R} using ${l.module} for application ${e}`,x),t.set(l.path||"/",new gl(x))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new gl(E),null,!0)}}if(Tl.isMainThread&&!bq&&(0,Aq.watchDir)(e,async()=>yq()),i.extensionModule)return await T_((0,jr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new gl(i))}}}var Ks,jr,Tl,gq,KR,WR,Rq,Aq,Oq,Nq,gne,Rne,$R,YR,bq,VR,Ane,One,Sq,Tq,gl,wq=ge(()=>{Ks=require("fs"),jr=require("path"),Tl=require("worker_threads"),gq=require("yaml"),KR=U($()),WR=U(g());PN();qN();FN();Hv();AH();yH();Rq=U(require("fast-glob")),Aq=U(tt());im();ln();Oq=U(z());ys();_e();wf();Nq=U($()),gne=U($H());wE();uq();pq();({readFile:Rne}=Ks.promises),$R=KR.get(WR.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),YR=new Map;a(yq,"loadComponentDirectories");Ane={REST:Ug,graphqlSchema:nm,jsResource:am,fastifyRoutes:_R,login:um,static:dR,operationsApi:gne,customFunctions:{},clustering:vR,authentication:Ku,mqtt:kR},One={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},Sq=[],Tq=new Map;a(Hf,"loadComponent");gl=class extends Nt{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var Pq=m((Cge,Mq)=>{"use strict";var Gf=require("fs-extra"),QR=require("path"),qf=D(),Cq=F(),Ff=g(),Uq=$(),Nne=et();Mq.exports=bne;async function bne(){let e=yne(),t=Uq.get(Ff.CONFIG_PARAMS.ROOTPATH),r=QR.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Ff.PACKAGE_ROOT}},n=QR.join(t,"node_modules");await Gf.ensureDir(n);let i,o=!0,c=!1;try{i=await Gf.readJson(r)}catch(u){if(Cq.isEmptyOrZeroLength(e))return;if(u.code!==Ff.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!Cq.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await Lq(l);s.dependencies[u]=_+l}if(!o){qf.notify("Installing components"),await Dq(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await Lq(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(qf.notify("Removing component",u),c=!0);c&&(qf.notify("Updating components."),await Dq(r,s))}a(bne,"installComponents");function yne(){let e=Nne.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(yne,"getComponentsConfig");async function Lq(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":QR.extname(e)||await Gf.pathExists(e)?"file:":"github:"}a(Lq,"getPkgPrefix");async function Dq(e,t){qf.trace("npm installing components package.json",t),await Gf.writeFile(e,JSON.stringify(t,null," ")),await HE().installAllRootModules(Uq.get(Ff.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(Dq,"installPackages")});var Of=m((Dge,Bq)=>{var{isMainThread:vq}=require("worker_threads"),{getTables:Ine}=(_e(),te(ye)),{loadComponentDirectories:wne,loadComponent:Cne}=(wq(),te(Iq)),{resetResources:Lne}=(Yu(),te(EP)),Dne=Pq(),Une=et(),{dirname:Mne}=require("path"),{getConnection:Pne}=We(),vne=$(),Bne=g(),zR=new Map;async function Hne(e=!1){!vq&&vne.get(Bne.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Pne(),vq&&await Dne();let t=Lne();Ine(),t.isWorker=e,await Cne(Mne(Une.getConfigFilePath()),t,"hdb",!0,zR),await wne(zR,t);let r=[];for(let[s]of zR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Hne,"loadRootComponents");Bq.exports.loadRootComponents=Hne});var tt=m((Pge,Oi)=>{"use strict";var{Worker:qne,MessageChannel:Fne,parentPort:Ws,isMainThread:eA,threadId:Gne,workerData:Rl}=require("worker_threads"),{PACKAGE_ROOT:xne}=g(),{join:Fq,isAbsolute:kne,extname:kf}=require("path"),{server:$ne}=(ln(),te(S_)),{watch:Vne,readdir:Yne}=require("fs/promises"),{totalmem:Hq}=require("os"),tA=g(),yo=D(),Mge=g(),{randomBytes:Kne}=require("crypto"),Wne=1024*1024,Ai=[],Ri=[],Qne=50,Gq=1e4,zne="restart",xq="request_thread_info",kq="resource_report",$q="thread_info",Vq="added-port",Jne="ack",JR;Oi.exports={startWorker:jR,restartWorkers:rA,shutdownWorkers:eie,workers:Ai,setMonitorListener:cie,onMessageFromWorkers:tie,onMessageByType:rie,broadcast:sie,broadcastWithAcknowledgement:iie,setChildListenerByType:Zne,getWorkerIndex:Kq,getTicketKeys:Wq,setMainIsWorker:jne,restartNumber:Rl?.restartNumber||1};var Yq;function Kq(){return Rl?Rl.workerIndex:Yq?0:void 0}a(Kq,"getWorkerIndex");function jne(e){Yq=e}a(jne,"setMainIsWorker");var xf;function Wq(){return xf||(xf=eA?Kne(48):Rl.ticketKeys,xf)}a(Wq,"getTicketKeys");Object.defineProperty($ne,"workerIndex",{get(){return Kq()}});var Qq={[xq](e,t){oie(t)},[kq](e,t){aie(t,e)}};function jR(e,t={}){let r=process.constrainedMemory?.()||Hq();r=Math.min(r,Hq());let s=Math.max(Math.floor(r/Wne/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Ri){let{port1:u,port2:l}=new Fne;c.postMessage({type:Vq,port:u},[u]),i.push(l)}kf(e)||(e+=".js");let o=new qne(kne(e)?e:Fq(xne,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:Oi.exports.restartNumber,ticketKeys:Wq()},transferList:i},t));return Vf(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{jR(e,t)},o.on("error",c=>{console.error("Worker error:",c),yo.error("Worker error:",c)}),o.on("exit",c=>{Ai.splice(Ai.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<Qne?(t.unexpectedRestarts=o.unexpectedRestarts+1,jR(e,t)):yo.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{Qq[c.type]?.(c,o)}),Ai.push(o),lie(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(jR,"startWorker");var Xne=[tA.THREAD_TYPES.HTTP];async function rA(e=null,t=2,r=!0){if(eA){if(r){let{loadRootComponents:n}=Of();await n()}Oi.exports.restartNumber++,t<1&&(t=t*Ai.length);let s=[];for(let n of Ai.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:Oi.exports.restartNumber,type:tA.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=Xne.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),Gq*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 Ws.postMessage({type:zne,workerType:e})}a(rA,"restartWorkers");function Zne(e,t){Qq[e]=t}a(Zne,"setChildListenerByType");function eie(e){return rA(e,1/0,!1)}a(eie,"shutdownWorkers");var zq=[];function tie(e){zq.push(e)}a(tie,"onMessageFromWorkers");var XR=new Map;function rie(e,t){let r=XR.get(e);r||XR.set(e,r=[]),r.push(t)}a(rie,"onMessageByType");function sie(e){for(let t of Ri)try{t.postMessage(e)}catch(r){yo.error("Unable to send message to worker",r)}}a(sie,"broadcast");var $f=new Map,nie=1;function iie(e){return new Promise(t=>{let r=0;for(let s of Ri)try{let n=nie++,i=a(()=>{$f.delete(n),--r===0&&t(),s!==Ws&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,$f.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of $f)o.port===s&&o()})),s.postMessage(e),r++}catch(n){yo.error("Unable to send message to worker",n)}r===0&&t()})}a(iie,"broadcastWithAcknowledgement");function oie(e){e.postMessage({type:$q,workers:Jq()})}a(oie,"sendThreadInfo");function Jq(){let e=Date.now();return Ai.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(Jq,"getChildWorkerInfo");function aie(e,t){e.resources=t,e.resources.updated=Date.now()}a(aie,"recordResourceReport");var ZR;function cie(e){ZR=e}a(cie,"setMonitorListener");var uie=1e3,qq=!1;function lie(){qq||(qq=!0,setInterval(()=>{for(let e of Ai){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}ZR&&ZR()},uie).unref())}a(lie,"startMonitoring");var _ie=1e3;if(Ws){Vf(Ws);for(let e of Rl.addPorts)Vf(e);setInterval(()=>{let e=process.memoryUsage();Ws.postMessage({type:kq,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},_ie).unref(),JR=a(()=>new Promise((e,t)=>{Ws.on("message",r),Ws.postMessage({type:xq});function r(s){s.type===$q&&(Ws.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else JR=Jq;Oi.exports.getThreadInfo=JR;function Vf(e,t){Ri.push(e),e.on("message",r=>{if(r.type===Vq)Vf(r.port);else if(r.type===Jne){let s=$f.get(r.id);s&&s()}else{for(let n of zq)n(r,e);let s=XR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){yo.error(i)}}}).on("close",()=>{Ri.splice(Ri.indexOf(e),1)}).on("exit",()=>{Ri.splice(Ri.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Vf,"addPort");if(eA){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Yne(s,{withFileTypes:!0}))i.isDirectory()&&r(Fq(s,i.name));for await(let{filename:i}of Vne(s,{persistent:!1}))(kf(i)===".ts"||kf(i)===".js"||kf(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await rA(),yo.info("Reloaded HarperDB components")},100))},"watch_dir");Oi.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Ws.on("message",async e=>{let{type:t}=e;t===tA.ITC_EVENT_TYPES.SHUTDOWN&&(Oi.exports.restartNumber=e.restartNumber,Ws.unref(),setTimeout(()=>{yo.warn("Thread did not voluntarily terminate",Gne),process.exit(0)},Gq).unref())})});function aA(e){let t=e.auditStore=e.openDB(t0.AUDIT_STORE_NAME,Eie);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,s0.getWorkerIndex)()===0&&e.on("aftercommit",()=>{nA||(nA=setTimeout(()=>{if(nA=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-jq,0]})){if((n[0]&15)===oA){let i=s[1];r[i]?.(s[2])}t.remove(s)}},jq/10).unref())}),t}function Wf(e,t,r){let s=o0[r.type],n=3;if(t?t.length>80?(s|=Yf,n=(0,Fn.writeKey)(t,Qs,e?14:6),sA.setUint16(2,n)):(n=(0,Fn.writeKey)(t,Qs,e?11:3),Qs[1]=n):Qs[1]=0,e){s|=i0;let i=s&Yf?6:3;sA.setFloat64(i,e),t||(n=i+8)}return Qs[0]=s,s&Yf?sA.setUint16(4,0):Qs[2]=0,r.value?Buffer.concat([Qs.slice(0,n),r.value]):Qs.subarray(0,n)}function Ni(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Yf,i=n?6:3,o;r&i0&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&iA?t.decoder.decode(e.subarray(c||i)):void 0;return{type:o0[r&7],value:u,lastVersion:o,get user(){return c?(0,Fn.readKey)(e,i,c):void 0}}}var Fn,Kf,t0,r0,s0,n0,Qs,sA,die,Eie,jq,nA,iA,Xq,oA,Zq,e0,Yf,i0,o0,Al=ge(()=>{Fn=require("ordered-binary"),Kf=U($()),t0=U(Ge()),r0=U(g()),s0=U(tt()),n0=U(F());(0,Kf.initSync)();Qs=Buffer.alloc(1024),sA=new DataView(Qs.buffer,Qs.byteOffset,1024),die={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,Fn.writeKey)(e[2],t,r+12)}else return(0,Fn.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,Fn.readKey)(e,t+12,r)]}else return(0,Fn.readKey)(e,t,r)}},Eie={encoding:"binary",keyEncoder:die},jq=(0,n0.convertToMS)((0,Kf.get)(r0.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,nA=null;a(aA,"openAuditStore");iA=16,Xq=1,oA=2,Zq=3,e0=4,Yf=128,i0=64,o0={put:Xq|iA,[Xq]:"put",delete:oA,[oA]:"delete",message:Zq|iA,[Zq]:"message",invalidate:e0,[e0]:"invalidate"};a(Wf,"createAuditEntry");a(Ni,"readAuditEntry")});var cA,Io,fie,Ol,Qf,a0=ge(()=>{cA=U(Ht());Al();Io=Symbol("completion"),fie=100,Ol=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,cA.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[Io]&&(i||(i=[]),i.push(d[Io])),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,Wf(_.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<fie>>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=[]}},Qf=class extends Ol{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,cA.getNextMonotonicTime)())}getReadTxn(){}}});function _0(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Qa||((0,wo.onMessageByType)(u0,d=>{let E=d.auditIds;lA(d.path,E,d.txnId)}),(0,wo.onMessageByType)(l0,d=>{(0,zs.trace)("confirming to proceed with txn",d.txnId)}),Qa=Object.create(null));let c=Qa[i]||(Qa[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=Ia(t);let l=new uA(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 lA(e,t,r,s){if(!Qa)return;let n=Qa[e];if(n){if(Wa&&Wa+1!==r){(0,zs.trace)("Waiting to ensure latest txn id",Wa,"proceeds",r,s);let i=(async()=>{for(let[o,c]of zf)o<r&&((0,zs.trace)("Txn",r,"waiting for txn",o),await c);if(Wa+1!==r){await(0,wo.broadcastWithAcknowledgement)({type:l0,txnId:r});for(let[o,c]of zf)o<r&&((0,zs.trace)("Txn",r,"waiting for txn",o),await c)}zf.delete(r),(0,zs.trace)("Proceeding with txn id",r),Wa=r-1,lA(e,t,r,s)})();return zf.set(r,i),i}(0,zs.trace)("Notifying with txn id",r,s),Wa=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,c0.writeKey)(i,mie,0);let _=i[3];_&&(i.length=3);let d,E=Ia(u),f;do{let h=l.get(E);if(h){for(let p of h)if(!(f&&!p.includeDescendants)){if(p.startTime>=o){(0,zs.info)("omitting",u,p.startTime,o);continue}try{if(p.crossThreads===!1&&!s)continue;if(d===void 0){let b=n.auditStore.get(i);if(!b||(d=Ni(b,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}p.listener(u,d,o)}catch(b){console.error(b),(0,zs.info)(b)}}}if(E==null)break;let S=E.lastIndexOf?.("/",E.length-2);S>-1?E=E.slice(0,S+1):E=null,f=!0}while(!0)}}}function d0(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&hie)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,wo.broadcast)({type:u0,path:n,auditIds:l,txnId:c,start:u}),lA(n,l,c,!0))})}}var zs,wo,c0,u0,l0,hie,Qa,mie,uA,Wa,zf,E0=ge(()=>{zs=U(D()),wo=U(tt()),c0=require("ordered-binary");Cc();Yu();Al();u0="transaction",l0="transaction-await",hie=67108864,mie=Buffer.alloc(4096);a(_0,"addSubscription");uA=class extends bs{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t}end(){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]}}}toJSON(){return{name:"subscription"}}},zf=new Map;a(lA,"notifyFromTransactionData");a(d0,"listenToCommits")});var Qg={};je(Qg,{coerceType:()=>Jf,makeTable:()=>Xf,setServerUtilities:()=>Rie});function Xf(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=[]),d0(i,u);let S=0,p,b,R={},P,V,O,w;for(let j of h)(j.assignCreatedTime||j.name==="__createdtime__")&&(P=j),(j.assignUpdatedTime||j.name==="__updatedtime__")&&(V=j),j.expiresAt&&(O=j),j.isPrimaryKey&&(R=j);let x;E&&_O();class k extends Nt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=h;static expirationTimer;static createdTimeProperty=P;static updatedTimeProperty=V;static dbisDB=_;static schemaDefined=l;static sourcedFrom(T,N){if(N&&(this.sourceOptions=N,N.expiration&&this.setTTLExpiration(N.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(T,this.sourceOptions);else if(T.mergeSource)this.Source=T.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=T;return(async()=>{let M=!1,y=a(async C=>{let H=C.value,L=C.table?xe[c][C.table]:k;if(c===ps.SYSTEM_SCHEMA_NAME&&(C.table===ps.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||C.table===ps.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(M=!0),C.id===void 0&&(C.id=H[L.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));let v=await L.getResource(C.id,C,Nl);switch(C.type){case"put":return v._writeUpdate(H,Nl);case"delete":return v._writeDelete(Nl);case"publish":return v._writePublish(H,Nl);case"invalidate":return v.invalidate(Nl);default:Do.error("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=T.subscribe&&(!T.subscribe.reliesOnPrototype||T.prototype.subscribe);C&&f==null&&(f=!0);let H=T.subscribeOnThisThread?T.subscribeOnThisThread((0,Lo.getWorkerIndex)()):(0,Lo.getWorkerIndex)()===0,L=C&&H&&await T.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(L)for await(let v of L)try{if(!(v.type==="transaction"?v.writes[0]:v)){console.error("Bad subscription event");continue}let X=Xe(v,()=>{if(v.type==="transaction"){let ee=[];for(let W of v.writes){W[be]=v;try{ee.push(y(W))}catch(ne){throw ne.message+=" writing "+JSON.stringify(W)+" of event "+JSON.stringify(v),ne}}return Promise.all(ee)}else if(v.type==="define_schema"){let ee=this.attributes.slice(0),W;for(let ne of v.attributes)ee.find(Be=>Be.name===ne.name)||(ee.push(ne),W=!0);W&&(dt({table:n,database:c,attributes:ee,origin:"cluster"}),Il.signalSchemaChange(new wl.SchemaEventMsg(process.pid,ps.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(v)});v.onCommit&&(X?.then&&M&&Il.signalUserChange(new wl.UserEventMsg(process.pid)),X?.then?X.then(v.onCommit):v.onCommit())}catch(Y){console.error("error in subscription handler",Y)}}catch(C){console.error(C)}})(),this}static getResource(T,N,M){let y=super.getResource(T,N,M);if(T!=null)try{if(y.hasOwnProperty(le))return y;let C=y._txnForRequest();if(typeof T=="object"&&T&&!Array.isArray(T))throw new Error(`Invalid id ${JSON.stringify(T)}`);let H,L,Y={transaction:C?.getReadTxn()},X;return Tt(T,N,Y,(ee,W)=>{W?L(W):(y[le]=ee?.value,y[fr]=ee?.version,X=!0,H?.(y))}),X?y:new Promise((ee,W)=>{H=ee,L=W})}catch(C){throw C.message.includes("Unable to serialize object")&&(C.message+=": "+JSON.stringify(T)),C}return y}static setTTLExpiration(T){(0,Lo.getWorkerIndex)()===0&&(d=T*1e3,this.expirationTimer&&clearInterval(this.expirationTimer),this.expirationTimer=setInterval(()=>{if(this.primaryStore.rootStore.status!=="open")return clearInterval(this.expirationTimer);for(let{key:N,value:M,version:y}of this.primaryStore.getRange({start:!1,versions:!0}))y<Date.now()-d&&y>0&&M?.__invalidated__==null&&k.evict(N,M,y)},d).unref())}static enableAuditing(){E=!0,_O(),k.audit=!0}static coerceId(T){return T===""?null:Jf(T,R)}static async dropTable(){if(delete xe[c][n],c===o){for(let T in r)_.remove(k.tableName+"/"+T),r[T].drop();_.remove(k.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));Il.signalSchemaChange(new wl.SchemaEventMsg(process.pid,ps.OPERATIONS_ENUM.DROP_TABLE,c,n))}static Source;static get(T,N){return T&&typeof T=="object"&&!Array.isArray(T)&&T.url===""?{recordCount:this.getRecordCount(),records:"./",name:n,database:c,attributes:h}:super.get(T,N)}get(T){if(typeof T=="string")return this.getProperty(T);if(this[un])return this.search(T);if(T?.property)return this.getProperty(T.property);if(this.doesExist()||this[be]?.hasOwnProperty("returnNonexistent")&&this[be].returnNonexistent)return this}static allowRead(T,N){if(!T)return!1;let M=T.role.permission;if(M.super_user)return!0;if(M[n]?.read){let y=M[n].attribute_permissions;if(y){N||(N={});let C=N.select;if(C){let H=_A(y,"read");N.select=C.filter(L=>H[L])}else N.select=y.filter(H=>H.read).map(H=>H.attribute_name);return N}else return!0}}allowUpdate(T,N,M){if(!T)return!1;let y=T.role.permission;if(y.super_user)return!0;if(y[n]?.update){let C=y[n].attribute_permissions;if(C){let H=_A(C,"update");for(let L in N)if(!H[L])return!1;if(M)for(let L of C){let v=L.attribute_name;!L.update&&!(v in N)&&(N[v]=this.getProperty(v))}}else return!0}}allowCreate(T,N){return this.allowUpdate(T,{})}static allowCreate(T,N){if(!T)return!1;let M=T.role.permission;if(M.super_user)return!0;if(M[n]?.insert){let y=M[n].attribute_permissions;if(y){let C=_A(y,"insert");for(let H in N)if(!C[H])return!1}else return!0}}static allowDelete(T){if(!T)return!1;let N=T.role.permission;if(N.super_user||N[n]?.delete)return!0}update(T,N){if(!this._txnForRequest())throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;let y;if(typeof T=="object"&&T){if(N)for(let C in this[le])T[C]===void 0&&(T[C]=void 0);y=this[Ot],y&&(T=Object.assign(y,T)),this[Ot]=y=T}return!this[le]&&t&&!(y||(y=this[Ot]))?.[t]&&(y||(y=this[Ot]=Object.create(null)),y[t]=this[ae]),this._writeUpdate(this),this}invalidate(T){this._txnForRequest().addWrite({key:this[ae],store:i,invalidated:!0,lastVersion:this[fr],nodeName:this[be]?.nodeName,commit:(M,y)=>{if(y)return;let C={__invalidated__:M};for(let Y in r)C[Y]=this.getProperty(Y);let H=k.Source,L,v=this[ae];return T?.isNotification||H?.invalidate&&(!H.invalidate.reliesOnPrototype||H.prototype.invalidate)&&(L=H.invalidate(v,this)),i.put(this[ae],C,M),{type:E&&"invalidate",[Io]:L}}})}static evict(T,N,M){let y=this.Source;if(y?.get&&(!y.get.reliesOnPrototype||y.prototype.get)){let C;if(!N){let H=i.getEntry(T);if(!H)return;N=H.value,M=H.version}if(N)for(let H in r)C||(C={__invalidated__:0}),C[H]=N[H];return C?i.put(T,C,M,M):i.remove(T,M)}else return i.remove(T,M)}lock(){throw new Error("Not yet implemented")}static operation(T,N){return T.table||=n,T.schema||=c,R0.operation(T,N)}async put(T){this.update(T,!0)}_writeUpdate(T,N){let M=this._txnForRequest();if(this[ae]===void 0)throw new Error("Can not save record without an id");let y=this[le],C,H,L=this[ae];y||(this[le]={}),M.addWrite({key:L,store:i,lastVersion:this[fr],nodeName:this[be]?.nodeName,validate:()=>{this.validate(T)},commit:(v,Y)=>{let X;if(Y){if(C)return;let W=i.getEntry(L);y=W?.value;let ne=this[be];ne&&W?.version>(ne.lastModified||0)&&(ne.lastModified=W.version)}if(!H){if(H=!0,N?.isNotification)T=Dc(T);else{if(T[m0]&&(C=!l_(T),C))return;t&&T[t]!==L&&(T[t]=L),V&&(T[V.name]=V.type==="Date"?new Date(v):V.type==="String"?new Date(v).toISOString():v),P&&(y?T[P.name]=y[P.name]:T[P.name]=P.type==="Date"?new Date(v):P.type==="String"?new Date(v).toISOString():v),T=Dc(T);let W=k.Source;W?.put&&(!W.put.reliesOnPrototype||W.prototype.put)&&(X=W.put(L,T,this))}if(T[le])throw new Error("Can not assign a record with a record property");this[le]=T}if(Do.trace("Checking timestamp for put",L,this[fr]>v,this[fr],v),this[fr]>v)return E&&{type:"put",value:i.encoder.encode(T)};let ee=i.encoder.encode(T);return i.put(this[ae],(0,za.asBinary)(ee),v),Oe(this[ae],y,T),y===null&&!Y&&qi(-1),{type:E&&"put",value:ee,[Io]:X}}})}async delete(T){return typeof T=="string"?this.deleteProperty(T):this[le]?this._writeDelete(T):!1}_writeDelete(T){let N=this._txnForRequest(),M,y=this[ae],C;return N.addWrite({key:y,store:i,lastVersion:this[fr],nodeName:this[be]?.nodeName,commit:(H,L)=>{let v=this[le];if(L){let Y=i.getEntry(y);v=Y?.value;let X=this[be];X&&Y?.version>(X.lastModified||0)&&(X.lastModified=Y.version)}if(!M&&(M=!0,!T?.isNotification)){let Y=k.Source;Y?.delete&&(!Y.delete.reliesOnPrototype||Y.prototype.delete)&&(C=Y.delete(y,this))}if(!(this[fr]>H))return Oe(this[ae],v),Do.trace("Write delete entry",E||f,H),E||f?(i.put(this[ae],null,H),E||lO(),L||qi(1)):i.remove(this[ae]),{type:E&&"delete",[Io]:C}}}),!0}search(T){let N=this._txnForRequest();if(!T)throw new Error("No query provided");let M=T.reverse===!0,y=T.conditions;y?y.length===void 0&&(y=Array.from(y)):y=Array.isArray(T)?T:T[Symbol.iterator]?Array.from(T):[],this[ae]&&(y=[{attribute:null,comparator:"prefix",value:this[ae]}].concat(y));for(let W of y){let ne=W[0]??W.attribute,Be=ne==null?R:h.find(Kn=>Kn.name==ne);if(Be)Be.type&&(W[1]===void 0?W.value=C(W.value,Be):W[1]=C(W[1],Be));else if(ne!=null)throw(0,Co.handleHDBError)(new Error,`${ne} is not a defined attribute`,404)}function C(W,ne){return Array.isArray(W)?W.map(Be=>Jf(Be,ne)):Jf(W,ne)}a(C,"coerceTypedValues"),y.length>1&&(y=(0,T0.sortBy)(y,W=>{if(W.estimated_count===void 0){let ne=W.comparator||W.search_type;if(ne===bl.SEARCH_TYPES.EQUALS){let Be=W[0]??W.attribute;if(Be==null||Be===t)W.estimated_count=1;else{let Kn=r[Be];W.estimated_count=Kn?Kn.getValuesCount(W[1]??W.value):1/0}}else ne===bl.SEARCH_TYPES.CONTAINS||ne===bl.SEARCH_TYPES.ENDS_WITH||ne==="ne"?W.estimated_count=1/0:ne===bl.SEARCH_TYPES.STARTS_WITH||ne==="prefix"?W.estimated_count=Sie:W.estimated_count=pie}return W.estimated_count}));let H=N.getReadTxn();H.use();let L=T.select,v=y[0],Y;if(!v)Y=i.getRange(M?{end:!1,reverse:!0,transaction:H,lazy:L?.length<4}:{start:!1,transaction:H,lazy:L?.length<4}).map(({value:W})=>W?new Promise(ne=>setImmediate(()=>ne(W))):za.SKIP);else{let W=jh(v,H,M,k,T.allowFullScan);if(!T.operator||T.operator.toLowerCase()==="and"){let ne=y.slice(1).map(Xh);Y=ee(W,ne)}else{for(let Be=1;Be<y.length;Be++){let Kn=y[Be],wh=jh(Kn,H,M,k,T.allowFullScan);W=W.concat(wh)}let ne=new Set;W=W.filter(Be=>ne.has(Be)?!1:(ne.add(Be),!0)),Y=ee(W)}}(T.offset||T.limit!==void 0)&&(Y=Y.slice(T.offset,T.limit!==void 0?(T.offset||0)+T.limit:void 0)),Y.onDone=()=>{H.done()};let X=this[be];function ee(W,ne){let Be=ne?.length,Kn={transaction:H,lazy:Be>0||L?.length<4,alwaysPrefetch:!0};return W.map(wh=>new Promise(Ch=>Tt(wh,X,Kn,vG=>{let Lh=vG?.value;if(!Lh)return Ch(za.SKIP);for(let Dh=0;Dh<Be;Dh++)if(!ne[Dh](Lh))return Ch(za.SKIP);Ch(Lh)})))}return a(ee,"idsToRecords"),Y}async subscribe(T){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||dt({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=_0(k,this[ae]??null,function(H,L,v){try{this.send({id:H,timestamp:v,...L})}catch(Y){console.error(Y)}},T.startTime,this[un]),M=this[ae],y=T.previousCount;y>1e3&&(y=1e3);let C=T.startTime;if(this[un]){if(C){if(y)throw new Co.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:H,value:L}of u.getRange({start:[C,Number.MAX_SAFE_INTEGER]})){let[v,Y,X]=H;if(H.length>3&&(X=H.slice(2)),Y!==s)continue;let ee=Ni(L,i);(M==null||S0(M,X))&&N.send({id:X,timestamp:v,...ee}),N.startTime=v}}else if(y){let H=[];for(let{key:L,value:v}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[Y,X,ee]=L;if(L.length>3&&(ee=L.slice(2)),X!==s)continue;if(M==null||S0(M,ee)){let W=Ni(v,i);if(H.push({id:ee,timestamp:Y,...W}),--y<=0)break}}catch(Y){Do.error("Error getting history entry",L,Y)}for(let L=H.length;L>0;)N.send(H[--L]);H[0]&&(N.startTime=H[0].timestamp)}else if(!T.omitCurrent)for(let{key:H,value:L,version:v}of i.getRange({start:M??!1,end:M==null?void 0:[M,g0.MAXIMUM_KEY],versions:!0}))L&&N.send({id:H,timestamp:v,value:L})}else{y&&!C&&(C=0);let H=this[fr];if(C<H){let L=[],v=H;do{let Y=[v,s,M],X=u.get(Y);if(X){T.omitCurrent=!0;let ee=Ni(X,i);L.push({id:M,timestamp:v,...ee}),v=ee.lastVersion}else break;y&&y--}while(v>C&&y!==0);for(let Y=L.length;Y>0;)N.send(L[--Y]);N.startTime=H}!T.omitCurrent&&this.doesExist()&&N.send({id:M,timestamp:this[fr],value:this})}return T.listener&&N.on("data",T.listener),N}doesExist(){return!!this[le]}async publish(T,N){this._writePublish(T,N)}_writePublish(T,N){let M=this._txnForRequest(),y=this[ae]||null,C,H;M.addWrite({store:i,key:y,lastVersion:this[fr],nodeName:this[be]?.nodeName,validate:()=>{this.validate(T)},commit:(L,v)=>{if(this.validate(T),!H&&(H=!0,!N?.isNotification)){let ee=k.Source;ee?.publish&&(!ee.publish.reliesOnPrototype||ee.prototype.publish)&&(C=ee.publish(y,T,this))}let Y=v>0?i.get(y):this[le];Y===void 0&&!v&&(E||f)&&(E||lO(),qi(1));let X={type:"message",value:i.encoder.encode(T),[Io]:C};return!M.hasWrittenTime&&this[fr]>L&&(L=X.newTxnTime=this[fr]+.001),i.put(y,Y??null,L),X}})}_txnForRequest(){let T=this[be],N=T?.transaction;if(N){let M;return(M=N?.find(y=>y.lmdbDb?.path===i.path))||N.push(M=new Ol(i,T.user,u)),M}else return new Qf(i,T.user,u)}validate(T){let N;for(let M=0,y=h.length;M<y;M++){let C=h[M];if(C.type){let H=T[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?.(L=>typeof L=="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&&T[C.name]==null&&(N||(N=[])).push(`Property ${C.name} is required`)}if(N)throw new Co.ClientError(N.join(". "))}getUpdatedTime(){return this[fr]}static async addAttributes(T){let N=h.slice(0);for(let M of T){if(!M.name)throw new Co.ClientError("Attribute name is required");if(M.name.match(/[`/]/))throw new Co.ClientError("Attribute names cannot include backticks or forward slashes");N.push(M)}return dt({table:n,database:c,schemaDefined:l,attributes:N}),k.indexingOperation}static async removeAttributes(T){let N=h.filter(M=>!T.includes(M.name));return dt({table:n,database:c,schemaDefined:l,attributes:N}),k.indexingOperation}static getRecordCount(){let T=0;for(let{key:N,value:M}of i.getRange({end:!1}))T++,N[0]?.description==="deletions"&&(T+=M||0);return i.getStats().entryCount-T}static updatedAttributes(){d_(this,this)}static async deleteHistory(T=0){let N;for(let{key:M,value:y}of u.getRange({start:[0,0],end:[T,0]})){await new Promise(v=>setImmediate(v));let[C,H,L]=M;M.length>3&&(L=M.slice(2)),H===s&&(N=i.remove(L))}await N}static async*getHistory(T=0,N=1/0){for(let{key:M,value:y}of u.getRange({start:[T,0],end:[N,0]})){await new Promise(Y=>setImmediate(Y));let[C,H,L]=M;if(M.length>3&&(L=M.slice(2)),H!==s)continue;let v=Ni(y,i);v.id=L,v.timestamp=C,yield v}}static async getHistoryOfRecord(T){let N=[],M=i.getEntry(T);if(!M)return N;let y=M.version,C=0;do{await new Promise(v=>setImmediate(v));let H=[y,s,T],L=u.get(H);if(L){let v=Ni(L,i);v.timestamp=y,N.push(v),y=v.lastVersion}else break}while(C<1e3);return N.reverse()}static cleanup(){x?.remove()}}k.updatedAttributes();let J=k.prototype;return J[m0]=!0,d&&k.setTTLExpiration(d/1e3),O&&PG(),k;function Oe(j,T,N){let M;for(let y in r){let C=r[y],H=C.isIndexing,L=N?.[y],v=T?.[y];if(L===v&&!H)continue;M=!0;let Y=(0,yl.getIndexedValues)(v);if(Y){f0&&C.prefetch(Y.map(X=>({key:X,value:j})),p0);for(let X=0,ee=Y.length;X<ee;X++)C.remove(Y[X],j)}if(Y=(0,yl.getIndexedValues)(L),Y){f0&&C.prefetch(Y.map(X=>({key:X,value:j})),p0);for(let X=0,ee=Y.length;X<ee;X++)C.put(Y[X],j)}}return M}a(Oe,"updateIndices");function Tt(j,T,N,M){let y=a(()=>{let C=N.transaction;if(C?.isDone)throw new Error("Invalid read transaction");let H;C&&!C.hasRunLoadRecord&&(H=!0,C.hasRunLoadRecord=!0);let L;try{L=i.getEntry(j,N)}catch(ee){throw ee.message+=". The read txn is "+JSON.stringify(C)+" first loadRecord: "+H,console.error(ee),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),ee}let v,Y,X;if(L?(T&&L?.version>(T.lastModified||0)&&(T.lastModified=L.version),Y=L.version,v=L.value,(Y<0||!v||typeof v.__invalidated__=="number"||d&&Y<Date.now()-d)&&(X=!0)):X=!0,X&&!N?.allowInvalidated){let ee=k.Source;if(ee&&ee.get&&(!ee.get.reliesOnPrototype||ee.prototype.get))return Ec(j,v,Y,T).then(ne=>{if(ne?.value?.[le])throw new Error("Can not assign a record with a record property");M(ne)},ne=>{M(null,ne)})}if(L?.value?.[le])throw new Error("Can not assign a record with a record property");M(L)},"whenPrefetched");if(!N.alwaysPrefetch&&(j==null||i.cache?.get(j)))return y();i.prefetch([j],y)}a(Tt,"loadRecord");function $o(){w=new Set,(0,Lo.onMessageByType)("transaction",j),i.on("aftercommit",j);function j(){for(let T of w)T()}a(j,"onCommit")}a($o,"setupCommitListeners");async function Ec(j,T=null,N,M){if(N<0){let L;return w||$o(),await new Promise(v=>{let Y,X=a(()=>{if(L=i.getEntry(j),!L||L.version>0){if(clearTimeout(Y),w.delete(X),typeof L?.value?.__invalidated__=="number")return v(Ec(j,L.value,L.version,M));v(L)}},"listener");w.add(X),Y=setTimeout(()=>{w.delete(X),v(Ec(j,L?.value,void 0,M))},1e4).unref()})}let y=T?.__invalidated__,C=-(N||1);i.put(j,T,C,N);let H={transaction:M?.transaction};try{let L=await k.Source.get(j,H),v=H.lastModified||N;(!v||d&&v<Date.now()-d)&&(v=(0,yl.getNextMonotonicTime)());let X=Oe(j,T,L)&&N||y>0;return L?(t&&(L[t]=j),typeof L.toJSON=="function"&&(L=L.toJSON()),i.put(j,L,v,C)):i.remove(j,C),X&&E&&u.put([v,s,j],Wf(y,null,L?{type:"put",value:i.encoder.encode(L)}:{type:"delete"})),{version:v,value:L}}catch(L){throw i.put(j,T,N,C),L}}a(Ec,"getFromSource");function qi(j){S||(S=i.get([h0,dA.threadId])||0),S+=j,b||(b=setTimeout(()=>{b=null,i.rootStore.status==="open"&&i.put([h0,dA.threadId],S)},50))}a(qi,"recordDeletion");function lO(){p||(p=setTimeout(()=>{if(p=null,i.rootStore.status==="open"){for(let{key:j,value:T}of i.getRange({start:!0}))if(T===null){let N=i.getEntry(j);N?.value===null&&i.remove(j,N.version),qi(-1)}}},k.getRecordCount()*100+gie).unref())}a(lO,"enqueueDeletionCleanup");function _O(){x=u?.addDeleteRemovalCallback(s,j=>{let T=i.getEntry(j);T?.value===null&&i.remove(j,T.version),qi(-1)})}a(_O,"addDeleteRemoval");function PG(){(0,Lo.getWorkerIndex)()===0&&setInterval(async()=>{try{let j=O.name,T=r[j];if(!T)throw new Error(`expiresAt attribute ${O} must be indexed`);for(let{value:N}of T.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let M=i.getEntry(N);M.value?.[j]<Date.now()&&k.evict(N,M.value,M.version),await new Promise(y=>setImmediate(y))}}catch(j){Do.error("Error in evicting old records",j)}},Tie).unref()}a(PG,"runRecordExpirationEviction")}function _A(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 p0(){}function Rie(e){R0=e}function Jf(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Aie.test(e)&&(e+="Z"),new Date(e)):r?e:(0,jf.autoCast)(e)}function S0(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 ps,za,yl,T0,dA,bl,Cl,Co,Il,wl,Do,g0,Lo,jf,R0,pie,Sie,Tie,f0,h0,fr,m0,rRe,Nl,gie,Aie,cf=ge(()=>{ps=U(g()),za=require("lmdb"),yl=U(Ht()),T0=require("lodash"),dA=require("worker_threads");ys();a0();bl=U(Ge()),Cl=U($());E0();Co=U(z()),Il=U(gn()),wl=U(is());_e();m_();Do=U(D());f_();Vi();g0=require("ordered-binary"),Lo=U(tt());Al();jf=U(F()),pie=1e8,Sie=1e7,Tie=6e4;Cl.initSync();f0=Cl.get(ps.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),h0=Symbol.for("deletions"),fr=Symbol.for("version"),m0=Symbol.for("incremental-update"),rRe=Symbol("source-resource"),Nl={isNotification:!0,allowInvalidated:!0},gie=(0,jf.convertToMS)(Cl.get(ps.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Xf,"makeTable");a(_A,"attributesAsObject");a(p0,"noop");a(Rie,"setServerUtilities");Aie=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Jf,"coerceType");a(S0,"isDescendantId")});var ye={};je(ye,{database:()=>uu,databases:()=>xe,dropDatabase:()=>dS,dropTableMeta:()=>wie,getDatabases:()=>cs,getTables:()=>Oie,onUpdatedTable:()=>BR,readMetaDb:()=>Ll,resetDatabases:()=>Nie,table:()=>dt,tables:()=>Rr});function Oie(){return rh||cs(),Rr||{}}function cs(){if(rh)return xe;rh=!0,Za=new Map;let e=(0,Bt.getHdbBasePath)()&&(0,Fe.join)((0,Bt.getHdbBasePath)(),hr.DATABASES_DIR_NAME),t=(0,Bt.get)(hr.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Bt.get)(hr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Ur.existsSync)(e)?e:(0,Fe.join)((0,Bt.getHdbBasePath)(),hr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Ur.existsSync)(e))for(let r of(0,Ur.readdirSync)(e,{withFileTypes:!0})){let s=(0,Fe.basename)(r.name,".mdb");r.isFile()&&(0,Fe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Ll((0,Fe.join)(e,r.name),null,s)}if((0,Ur.existsSync)((0,Xa.getBaseSchemaPath)())){for(let r of(0,Ur.readdirSync)((0,Xa.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Fe.join)((0,Xa.getBaseSchemaPath)(),r.name),n=(0,Fe.join)((0,Xa.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Ur.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Fe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Fe.join)(n,i.name);Ll((0,Fe.join)(s,i.name),(0,Fe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,Ur.existsSync)(n))for(let o of(0,Ur.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Fe.extname)(o.name).toLowerCase()===".mdb"&&Ll((0,Fe.join)(n,o.name),(0,Fe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Fe.join)(c.path,(0,Fe.basename)(o+".mdb"));(0,Ur.existsSync)(u)&&Ll(u,o,r,null,!0)}}for(let r in xe){let s=Za.get(r);if(s){let n=xe[r];r.includes("delete")&&qe.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(qe.trace(`delete table class ${i}`),delete n[i])}else if(delete xe[r],r==="data"){for(let n in Rr)delete Rr[n];delete Rr[sh]}}return Za=null,xe}}function Nie(){rh=!1;for(let[,e]of bi)e.needsDeletion=!0;cs();for(let[e,t]of bi)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),bi.delete(e));return xe}function Ll(e,t,r=hA,s,n){let i=new EA.default(e,!1);e.includes("delete")&&qe.trace(`reading meta data from ${e}`);try{let o=bi.get(e);o?o.needsDeletion=!1:(o=(0,Zf.open)(i),bi.set(e,o));let c=new Uo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Ja.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,Ur.existsSync)(s)&&(i.path=s,l=(0,Zf.open)(i),l.isLegacy=!0):l=aA(o));let _=b0(r),d=_[sh],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[S,p]=f.toString().split("/");e.includes("delete")&&qe.trace(`read key ${f}`),p===""?p=h.name:p||(p=S,S=t,h.name||(h.name=p,h.indexed=!h.is_hash_attribute)),d?.add(S);let b=E.get(S);b||E.set(S,b={attributes:[]}),(p==null||h.is_hash_attribute)&&(b.primary=h),p!=null&&b.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:S,primary:p}=h;if(!p){for(let J of S)if(J.is_hash_attribute||J.isPrimaryKey){p=J;break}if(!p)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(S)}`)}let b=_[f],R={},P=[],V,O,w=typeof p.audit=="boolean"?p.audit:(0,Bt.get)(hr.CONFIG_PARAMS.LOGGING_AUDITLOG),x=p.trackDeletes,k=p.expiration;if(b)R=b.indices,P=b.attributes,b.schemaVersion++;else{V=p.tableId,V?V>=(u.get(ja)||0)&&u.putSync(ja,V+1):(p.tableId=V=u.get(ja),V||(V=1),u.putSync(ja,V+1),u.putSync(p.key,p));let J=new Uo.default(!p.is_hash_attribute,p.is_hash_attribute);qe.trace(`openDB ${p.key} from ${r}`),O=o.openDB(p.key,J),O.rootStore=o,O.tableId=V}for(let J of S){J.attribute=J.name;try{if(!J.is_hash_attribute&&(J.indexed||J.attribute&&!J.name)){if(!R[J.name]){let Tt=new Uo.default(!J.is_hash_attribute,J.is_hash_attribute);qe.trace(`openDB ${J.key} from ${r}`),R[J.name]=o.openDB(J.key,Tt)}let Oe=P.find(Tt=>Tt.name===J.name);Oe?P.splice(P.indexOf(Oe),1,J):P.push(J)}}catch(Oe){qe.error("Error trying to update attribute",J,P,R,Oe)}}if(!b){qe.trace(`creating table class ${f}`,Object.keys(_)),b=y0(_,f,Xf({primaryStore:O,auditStore:l,audit:w,expirationMS:k&&k*1e3,trackDeletes:x,tableName:f,tableId:V,primaryKey:p.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:R,attributes:S,schemaDefined:p.schemaDefined,dbisDB:u})),b.schemaVersion=1;for(let J of mA)J(b)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function b0(e){let t=xe[e];if(t||(e==="data"?t=xe[e]=Rr:e==="system"?Object.defineProperty(xe,"system",{value:t=Object.create(null),configurable:!0}):t=xe[e]=Object.create(null)),Za&&!Za.has(e)){let r=new Set;t[sh]=r,Za.set(e,r)}return t}function y0(e,t,r){return e[t]=r,r}function uu({database:e,table:t}){e||(e=hA),cs();let r=b0(e),s=(0,Fe.join)((0,Bt.getHdbBasePath)(),hr.DATABASES_DIR_NAME),n=t&&(0,Bt.get)(hr.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,Bt.get)(hr.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,Bt.get)(hr.CONFIG_PARAMS.STORAGE_PATH)||((0,Ur.existsSync)(s)?s:(0,Fe.join)((0,Bt.getHdbBasePath)(),hr.LEGACY_DATABASES_DIR_NAME));let i=(0,Fe.join)(s,(n?t:e)+".mdb"),o=bi.get(i);if(!o){let c=new EA.default(i,!1);o=(0,Zf.open)(c),bi.set(i,o)}return o}async function dS(e){if(!xe[e])throw new Error("Schema does not exist");let t=xe[e];for(let r in t){let n=t[r].primaryStore.rootStore;bi.delete(n.path),n.status==="open"&&(await n.close(),await A0.remove(n.path))}if(e==="data"){for(let r in Rr)delete Rr[r];delete Rr[sh]}delete xe[e]}function dt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=hA);let u=uu({database:t,table:e}),l=xe[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 S=new Uo.default(!1);for(let O of s)O.attribute?(O.name=O.attribute,O.indexed=!0):O.attribute=O.name,O.expiresAt&&(O.indexed=!0);let p,b;if(_){if(qe.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 O=u.auditStore;O||(O=aA(u)),E=s.find(J=>J.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,Bt.get)(hr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),qe.trace(`${e} table loading, opening primary store`);let w=new Uo.default(!1,!0),x=e+"/";qe.trace(`openDB ${x} from ${t}`);let k=u.openDB(x,w);k.rootStore=u,qe.trace(`openDB ${Ja.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(Ja.INTERNAL_DBIS_NAME,S),k.tableId=h.get(ja),k.tableId||(k.tableId=1),h.putSync(ja,k.tableId+1),E.tableId=k.tableId,_=y0(l,e,Xf({primaryStore:k,auditStore:O,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:k.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:o,dbisDB:h})),_.schemaVersion=1,p=!0,V(),h.put(x,E)}qe.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||qe.trace(`openDB ${Ja.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(Ja.INTERNAL_DBIS_NAME,S)),_.dbisDB=h;let R=[];for(let{key:O,value:w}of h.getRange({start:!0})){let[x,k]=O.toString().split("/");if(k===""&&(k=w.name),k){if(x!==e)continue}else k=x;if(!s.find(Oe=>Oe.name===k)?.indexed&&w.indexed&&!w.isPrimaryKey){V(),p=!0,h.remove(O);let Oe=_.indices[x];Oe&&R.push(Oe)}}qe.trace(`${e} table loading, comparing atributes`);let P=[];try{for(let O of s||[]){let w=e+"/"+(O.name||"");Object.defineProperty(O,"key",{value:w,configurable:!0});let x=h.get(w);if(O.isPrimaryKey){if(n===!0&&!_.audit){_.enableAuditing(),x||(w=e+"/",x=h.get(w));let J=Object.assign({},x,{audit:!0});p=!0,V(),h.put(w,J)}continue}x?.attribute&&!x.name&&(x.indexed=!0);let k=!x||x.type!==O.type||x.indexed!==O.indexed||JSON.stringify(x.attributes)!==JSON.stringify(O.attributes)||JSON.stringify(x.elements)!==JSON.stringify(O.elements);if(O.indexed){let J=new Uo.default(!0,!1);qe.trace(`openDB ${w} from ${t}`);let Oe=u.openDB(w,J);(k||x.indexingPID&&x.indexingPID!==process.pid||x.restartNumber<Dl.workerData?.restartNumber)&&(p=!0,V(),x=h.get(w),(k||x.indexingPID&&x.indexingPID!==process.pid||x.restartNumber<Dl.workerData?.restartNumber)&&(p=!0,O.lastIndexedKey=x?.lastIndexedKey||!1,O.indexingPID=process.pid,Oe.isIndexing=!0,Object.defineProperty(O,"dbi",{value:Oe}),P.push(O)),h.put(w,O)),f[O.name]=Oe}else k&&(p=!0,V(),h.put(w,O))}}finally{b&&b()}if(p&&(_.schemaVersion++,_.updatedAttributes()),qe.trace(`${e} table loading, running index`),P.length>0||R.length>0?_.indexingOperation=Iie(_,P,R):p&&eh.signalSchemaChange(new th.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,p)for(let O of mA)O(_,c!=="cluster");return r&&_.setTTLExpiration(+r),qe.trace(`${e} table loaded`),_;function V(){b||u.transactionSync(()=>({then(O){b=O}}))}a(V,"startTxn")}async function Iie(e,t,r){try{let s=e.schemaVersion;await eh.signalSchemaChange(new th.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,S=(0,O0.getIndexedValues)(_[h]);if(S)for(let p=0,b=S.length;p<b;p++)f.dbi.put(S[p],l)}}),n.then(()=>u--,E=>{u--,qe.error(E)}),Dl.workerData&&Dl.workerData.restartNumber!==N0.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>bie?await n:u>yie&&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 eh.signalSchemaChange(new th.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){qe.error("Error in indexing",s)}}function wie({table:e,database:t}){let r=uu({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 BR(e){mA.push(e)}var Bt,Ja,Zf,Fe,Ur,Xa,Uo,EA,hr,A0,fA,O0,eh,th,Dl,qe,N0,hA,sh,Rr,xe,ja,mA,rh,bi,Za,bie,yie,_e=ge(()=>{Bt=U($()),Ja=U(Ge()),Zf=require("lmdb"),Fe=require("path"),Ur=require("fs"),Xa=U(De());cf();Uo=U(R_()),EA=U(O_()),hr=U(g()),A0=U(require("fs-extra")),fA=require("../index"),O0=U(Ht()),eh=U(gn()),th=U(is()),Dl=require("worker_threads"),qe=U(D()),N0=U(tt());Al();hA="data",sh=Symbol("defined-tables");(0,Bt.initSync)();Rr=Object.create(null),xe=Object.create(null);(0,fA._assignPackageExport)("databases",xe);(0,fA._assignPackageExport)("tables",Rr);ja=Symbol.for("next-table-id"),mA=[],bi=new Map;a(Oie,"getTables");a(cs,"getDatabases");a(Nie,"resetDatabases");a(Ll,"readMetaDb");a(b0,"ensureDB");a(y0,"setTable");a(uu,"database");a(dS,"dropDatabase");a(dt,"table");bie=1e3,yie=10;a(Iie,"runIndexing");a(wie,"dropTableMeta");a(BR,"onUpdatedTable")});var F=m((_Re,G0)=>{"use strict";var yi=require("path"),D0=require("fs-extra"),mr=D(),I0=require("fs-extra"),nh=require("os"),Cie=require("net"),Lie=require("recursive-iterator"),Ye=g(),Die=Vh(),w0=require("papaparse"),ih=require("moment"),{inspect:Uie}=require("util"),C0=require("is-number"),lRe=require("lodash"),Mie=require("minimist"),Pie=require("https"),vie=require("http"),{hdb_errors:oh}=z(),Bie=/^((\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)))$/,U0=require("util").promisify(setTimeout),Hie=100,qie=5,Fie="",Gie=4,L0={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};G0.exports={isEmpty:Mr,isEmptyOrZeroLength:Js,arrayHasEmptyValues:$ie,arrayHasEmptyOrZeroLengthValues:Vie,buildFolderPath:Yie,isBoolean:M0,errorizeMessage:xie,stripFileExtension:Wie,autoCast:Qie,autoCastJSON:P0,autoCastJSONDeep:SA,removeDir:zie,compareVersions:Jie,isCompatibleDataVersion:jie,escapeRawValue:Xie,unescapeValue:Zie,stringifyProps:eoe,timeoutPromise:roe,isClusterOperation:noe,getClusterUser:ooe,checkGlobalSchemaTable:ioe,getHomeDir:B0,getPropsFilePath:toe,promisifyPapaParse:aoe,removeBOM:H0,createEventPromise:coe,checkProcessRunning:uoe,checkSchemaTableExist:loe,checkSchemaExists:q0,checkTableExists:F0,getStartOfTomorrowInSeconds:_oe,getLimitKey:doe,isObject:Kie,isNotEmptyAndHasValue:kie,autoCasterIsNumberCheck:v0,backtickASTSchemaItems:Eoe,isPortTaken:soe,createForkArgs:foe,autoCastBoolean:hoe,async_set_timeout:U0,getTableHashAttribute:moe,doesSchemaExist:poe,doesTableExist:Soe,stringifyObj:Toe,ms_to_time:goe,changeExtension:Roe,getEnvCliRootPath:TA,noBootFile:Aoe,httpRequest:Ooe,transformReq:Noe,convertToMS:boe,PACKAGE_ROOT:Ye.PACKAGE_ROOT};function xie(e){return e instanceof Error?e:new Error(e)}a(xie,"errorizeMessage");function Mr(e){return e==null}a(Mr,"isEmpty");function kie(e){return!Mr(e)&&(e||e===0||e===""||M0(e))}a(kie,"isNotEmptyAndHasValue");function Js(e){return Mr(e)||e.length===0||e.size===0}a(Js,"isEmptyOrZeroLength");function $ie(e){if(Mr(e))return!0;for(let t=0;t<e.length;t++)if(Mr(e[t]))return!0;return!1}a($ie,"arrayHasEmptyValues");function Vie(e){if(Js(e))return!0;for(let t=0;t<e.length;t++)if(Js(e[t]))return!0;return!1}a(Vie,"arrayHasEmptyOrZeroLengthValues");function Yie(...e){try{return e.join(yi.sep)}catch{console.error(e)}}a(Yie,"buildFolderPath");function M0(e){return Mr(e)?!1:e===!0||e===!1}a(M0,"isBoolean");function Kie(e){return Mr(e)?!1:typeof e=="object"}a(Kie,"isObject");function Wie(e){return Js(e)?Fie:e.slice(0,-Gie)}a(Wie,"stripFileExtension");function Qie(e){return Mr(e)||e===""||typeof e!="string"?e:L0[e]!==void 0?L0[e]:v0(e)===!0?Number(e):Bie.test(e)?new Date(e):e}a(Qie,"autoCast");function P0(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(P0,"autoCastJSON");function SA(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=SA(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=SA(r);s!==r&&(e[t]=s)}return e}else return P0(e)}a(SA,"autoCastJSONDeep");function v0(e){if(e.startsWith("0.")&&C0(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&C0(e))}a(v0,"autoCasterIsNumberCheck");async function zie(e){if(Js(e))throw new Error(`Directory path: ${e} does not exist`);try{await I0.emptyDir(e),await I0.remove(e)}catch(t){throw mr.error(`Error removing files in ${e} -- ${t}`),t}}a(zie,"removeDir");function Jie(e,t){if(Js(e)){mr.info("Invalid current version sent as parameter.");return}if(Js(t)){mr.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(Jie,"compareVersions");function jie(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(jie,"isCompatibleDataVersion");function Xie(e){if(Mr(e))return e;let t=String(e);return t==="."?Ye.UNICODE_PERIOD:t===".."?Ye.UNICODE_PERIOD+Ye.UNICODE_PERIOD:t.replace(Ye.FORWARD_SLASH_REGEX,Ye.UNICODE_FORWARD_SLASH)}a(Xie,"escapeRawValue");function Zie(e){if(Mr(e))return e;let t=String(e);return t===Ye.UNICODE_PERIOD?".":t===Ye.UNICODE_PERIOD+Ye.UNICODE_PERIOD?"..":String(e).replace(Ye.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Zie,"unescapeValue");function eoe(e,t){if(Mr(e))return mr.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+nh.EOL}!Js(s)&&s[0]===";"?r+=" "+s+n+nh.EOL:Js(s)||(r+=s+"="+n+nh.EOL)}catch{mr.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(eoe,"stringifyProps");function B0(){let e;try{e=nh.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(B0,"getHomeDir");function toe(){let e=yi.join(B0(),Ye.HDB_HOME_DIR_NAME,Ye.BOOT_PROPS_FILE_NAME);return D0.existsSync(e)||(e=yi.join(__dirname,"../","hdb_boot_properties.file")),e}a(toe,"getPropsFilePath");function roe(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(roe,"timeoutPromise");async function soe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=Cie.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(soe,"isPortTaken");function noe(e){try{return Ye.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){mr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(noe,"isClusterOperation");function ioe(e,t){let r=(_e(),te(ye)).getDatabases();if(!r[e])return oh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return oh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(ioe,"checkGlobalSchemaTable");function ooe(e,t){if(Mr(t)){mr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Mr(e)||Js(e)){mr.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){mr.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){mr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(ooe,"getClusterUser");function aoe(){w0.parsePromise=function(e,t,r){return new Promise(function(s,n){w0.parse(e,{header:!0,transformHeader:H0,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(aoe,"promisifyPapaParse");function H0(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(H0,"removeBOM");function coe(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;mr.info(`Got cluster status event response: ${Uie(n)}`);try{i.cancel()}catch{mr.error("Error trying to cancel timeout.")}s(n)})})}a(coe,"createEventPromise");async function uoe(e){let t=!0,r=0;do await U0(Hie*r++),(await Die.findPs(e)).length>0&&(t=!1);while(t&&r<qie);if(t)throw new Error(`process ${e} was not started`)}a(uoe,"checkProcessRunning");function loe(e,t){let r=q0(e);if(r)return r;let s=F0(e,t);if(s)return s}a(loe,"checkSchemaTableExist");function q0(e){let{getDatabases:t}=(_e(),te(ye));if(!t()[e])return oh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(q0,"checkSchemaExists");function F0(e,t){let{getDatabases:r}=(_e(),te(ye));if(!r()[e][t])return oh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(F0,"checkTableExists");function _oe(){let e=ih().utc().add(1,Ye.MOMENT_DAYS_TAG).startOf(Ye.MOMENT_DAYS_TAG).unix(),t=ih().utc().unix();return e-t}a(_oe,"getStartOfTomorrowInSeconds");function doe(){return ih().utc().format("DD-MM-YYYY")}a(doe,"getLimitKey");function Eoe(e){try{let t=new Lie(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){mr.error("Got an error back ticking items."),mr.error(t)}}a(Eoe,"backtickASTSchemaItems");function foe(e){return[e]}a(foe,"createForkArgs");function hoe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(hoe,"autoCastBoolean");function moe(e,t){let{getDatabases:r}=(_e(),te(ye)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(moe,"getTableHashAttribute");function poe(e){let{getDatabases:t}=(_e(),te(ye));return t()[e]!==void 0}a(poe,"doesSchemaExist");function Soe(e,t){let{getDatabases:r}=(_e(),te(ye));return r()[e]?.[t]!==void 0}a(Soe,"doesTableExist");function Toe(e){try{return JSON.stringify(e)}catch{return e}}a(Toe,"stringifyObj");function goe(e){let t=ih.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(goe,"ms_to_time");function Roe(e,t){let r=yi.basename(e,yi.extname(e));return yi.join(yi.dirname(e),r+t)}a(Roe,"changeExtension");function TA(){if(process.env[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Mie(process.argv);if(e[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(TA,"getEnvCliRootPath");var pA;function Aoe(){if(pA)return pA;let e=TA();TA()&&D0.pathExistsSync(yi.join(e,Ye.HDB_CONFIG_FILE))&&(pA=!0)}a(Aoe,"noBootFile");function Ooe(e,t){let r;return e.protocol==="http:"?r=vie:r=Pie,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(Ooe,"httpRequest");function Noe(e){if(!e.schema&&!e.database){e.schema=Ye.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Noe,"transformReq");function boe(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(boe,"convertToMS")});var $=m((ERe,$0)=>{"use strict";var gA=require("fs-extra"),Ss=require("path"),x0=require("os"),yoe=require("properties-reader"),Ul=D(),Mo=F(),se=g(),ah=et(),Ioe="Error initializing environment manager",ch="BOOT_PROPS_FILE_PATH",k0=!1,woe={[se.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[se.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[se.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Gn={};$0.exports={BOOT_PROPS_FILE_PATH:ch,getHdbBasePath:Coe,setHdbBasePath:Loe,get:Doe,initSync:Moe,setProperty:he,initTestEnvironment:Poe};function Coe(){return Gn[se.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(Coe,"getHdbBasePath");function Loe(e){Gn[se.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Loe,"setHdbBasePath");function Doe(e){let t=ah.getConfigValue(e);return t===void 0?Gn[e]:t}a(Doe,"get");function he(e,t){woe[e]&&(Gn[e]=t),ah.updateConfigObject(e,t)}a(he,"setProperty");function Uoe(){let e;try{e=Mo.getPropsFilePath(),gA.accessSync(e,gA.constants.F_OK|gA.constants.R_OK),k0=!0;let t=yoe(e);return Gn[se.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(se.HDB_SETTINGS_NAMES.INSTALL_USER),Gn[se.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(se.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Gn[ch]=e,!0}catch{return Ul.trace(`Environment manager found no properties file at ${e}`),!1}}a(Uoe,"doesPropFileExist");function Moe(e=!1){try{(k0||Uoe()||Mo.noBootFile())&&(ah.initConfig(e),Gn[se.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=ah.getConfigValue(se.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Ul.error(Ioe),Ul.error(t),console.error(t),process.exit(1)}}a(Moe,"initSync");function Poe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Ss.join(__dirname,"../../","unitTests");Gn[ch]=Ss.join(u,"hdb_boot_properties.file"),he(se.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ss.join(u,"settings.test")),he(se.HDB_SETTINGS_NAMES.INSTALL_USER,x0.userInfo()?x0.userInfo().username:void 0),he(se.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Ss.join(u,"envDir","utility","keys","privateKey.pem")),he(se.HDB_SETTINGS_NAMES.CERT_KEY,Ss.join(u,"envDir","utility","keys","certificate.pem")),he(se.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Ss.join(u,"envDir","utility","keys","privateKey.pem")),he(se.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Ss.join(u,"envDir","utility","keys","certificate.pem")),he(se.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),he(se.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ss.join(u,"envDir","log")),he(se.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),he(se.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),he(se.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),he(se.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ss.join(u,"envDir")),he(se.CONFIG_PARAMS.STORAGE_PATH,Ss.join(u,"envDir")),he(se.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Mo.isEmpty(n)?!0:n),he(se.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Mo.isEmpty(n)?!0:n),he(se.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(se.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Mo.isEmpty(i)?!1:i),he(se.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Mo.isEmpty(i)?!1:i),he(se.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),he(se.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),he(se.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),he(se.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),he(se.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ss.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),he(se.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Mo.isEmpty(c)?!1:c),o&&(he("CORS_ACCESSLIST",o),he(se.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(he(se.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),he(se.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(he(se.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),he(se.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(he(se.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),he(se.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${ch}. Please check your boot props and settings files`;Ul.fatal(r),Ul.error(t)}}a(Poe,"initTestEnvironment")});var AA=m((hRe,V0)=>{"use strict";var Ml=$();Ml.initSync();var ec=require("fs-extra"),RA=require("path"),tc=g(),voe=require("crypto"),Boe=require("uuid").v4;V0.exports=Hoe;function Hoe(){if(Ml.getHdbBasePath()!==void 0){let e=RA.join(Ml.getHdbBasePath(),tc.LICENSE_KEY_DIR_NAME,tc.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=RA.join(Ml.getHdbBasePath(),tc.LICENSE_KEY_DIR_NAME,tc.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=RA.join(Ml.getHdbBasePath(),tc.LICENSE_KEY_DIR_NAME,tc.JWT_ENUM.JWT_PASSPHRASE_NAME);try{ec.accessSync(r),ec.accessSync(e),ec.accessSync(t)}catch(s){if(s.code==="ENOENT"){let n=Boe(),i=voe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:n}});ec.writeFileSync(r,n),ec.writeFileSync(e,i.privateKey),ec.writeFileSync(t,i.publicKey)}else throw s}}}a(Hoe,"checkJWTTokenExist")});var K0=m((pRe,Y0)=>{"use strict";var OA=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,s){this.info_id=t,this.data_version_num=r,this.hdb_version_num=s}};Y0.exports={HdbInfoInsertObject:OA}});var z0=m((TRe,Q0)=>{"use strict";var W0=g(),NA=class{static{a(this,"UpgradeObject")}constructor(t,r){this[W0.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[W0.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};Q0.exports={UpgradeObject:NA}});var uh=m((RRe,j0)=>{"use strict";var Xr=require("prompt"),rc=require("chalk"),J0=D(),Ts=require("os"),bA=Fi(),yA=["yes","y"];async function qoe(e){let t=`${Ts.EOL}`+rc.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ts.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ts.EOL}${Ts.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ts.EOL}`;Xr.override=bA(["CONFIRM_UPGRADE"]),Xr.start(),Xr.message=t;let r={properties:{CONFIRM_UPGRADE:{description:rc.magenta(`${Ts.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s;try{s=await Xr.get([r])}catch(n){return J0.error("There was an error when prompting user about an upgrade."),J0.error(n),!1}return yA.includes(s.CONFIRM_UPGRADE)}a(qoe,"forceUpdatePrompt");async function Foe(e){let t=`${Ts.EOL}`+rc.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ts.EOL}`);Xr.override=bA(["CONFIRM_DOWNGRADE"]),Xr.start(),Xr.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:rc.magenta(`${Ts.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s=await Xr.get([r]);return yA.includes(s.CONFIRM_DOWNGRADE)}a(Foe,"forceDowngradePrompt");async function Goe(){let e=`${Ts.EOL}`+rc.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Xr.override=bA(["GENERATE_CERTS"]),Xr.start(),Xr.message=e;let t={properties:{GENERATE_CERTS:{description:rc.magenta(`${Ts.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Xr.get([t]);return yA.includes(r.GENERATE_CERTS)}a(Goe,"upgradeCertsPrompt");j0.exports={forceUpdatePrompt:qoe,forceDowngradePrompt:Foe,upgradeCertsPrompt:Goe}});var wA=m((ORe,X0)=>{"use strict";var IA=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};X0.exports=IA});var eF=m((CRe,Z0)=>{"use strict";var xoe=F(),koe=et(),bRe=D(),yRe=require("path"),IRe=require("fs"),wRe=g();Z0.exports={getOldPropsValue:$oe};function $oe(e,t,r=!1){let s=t.getRaw(e);return xoe.isNotEmptyAndHasValue(s)?s:r?koe.getDefaultConfig(e):""}a($oe,"getOldPropsValue")});var nF=m((DRe,sF)=>{"use strict";var Ii=require("path"),wi=require("fs-extra"),Voe=require("properties-reader"),Yoe=wA(),at=D(),{getOldPropsValue:Le}=eF(),{HDB_SETTINGS_NAMES:Q,CONFIG_PARAMS:Po}=g(),vo=et(),lh=$(),tF=F(),js=g(),CA=new Yoe("3.1.0"),rF=[];function Koe(){let e=Voe(lh.get(Q.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),at.info(t);let r=` ;Settings for the HarperDB process.
|
|
32
|
+
`+UR.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(sne,"getServerOptions");function nne(){let e=ps.get(Wse),t=ps.get(Qse),r;return e&&(e===!0||e.toUpperCase()===KH)&&(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(nne,"getCORSOpts");function ine(){return ps.get(jse)}a(ine,"getHeaderTimeoutConfig")});var oq=m((dge,iq)=>{"use strict";var{decode:one}=require("msgpackr"),{isMainThread:ane,parentPort:cne,threadId:lge}=require("worker_threads"),MR=Qe(),Qa=Me(),une=R(),gl=C(),zH=Y(),XH=R();tt();var lne=mn(),{recordAction:_ne,recordActionBinary:dne}=(co(),re(Nd)),{publishToStream:Ene}=MR,_ge={durable:Qa.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Qa.WORK_QUEUE_CONSUMER_NAMES.deliver_group},fne,hne,mne,ZH,eq;iq.exports={initialize:tq,workQueueListener:nq,setSubscription:pne,setIgnoreOrigin:Tne,getDatabaseSubscriptions:Sne};async function tq(){eq=!0,gl.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await MR.getNATSReferences();fne=e,hne=e.info.server_name,mne=t,ZH=r}a(tq,"initialize");var Pf=new Map;function pne(e,t,r){let s=Pf.get(e);s||Pf.set(e,s=new Map),s.set(t,r),eq||tq().then(nq)}a(pne,"setSubscription");function Sne(){return Pf}a(Sne,"getDatabaseSubscriptions");var rq;function Tne(e){rq=e}a(Tne,"setIgnoreOrigin");var sq=100,JH=new Array(sq),Mf=0;async function nq(){let t=await(await ZH.consumers.get(Qa.WORK_QUEUE_CONSUMER_NAMES.stream_name,Qa.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await JH[Mf],JH[Mf]=gne(r).catch(s=>{gl.error(s)}),++Mf>=sq&&(Mf=0)}a(nq,"workQueueListener");ane||cne.on("message",async e=>{let{type:t}=e;t===XH.ITC_EVENT_TYPES.SHUTDOWN&&MR.closeConnection()});async function gne(e){let t=one(e.data);_ne(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Qa.MSG_HEADERS.ORIGIN)===zH.get(une.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!rq;if(dne(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;gl.trace("processing message:",i,o,u,(l?"records: "+l.map(A=>A.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),gl.trace(`messageProcessor nats msg id: ${e.headers.get(Qa.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:S}=d||{},T=Pf.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:jH(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:S});else{let A=l.map((g,x)=>({type:jH(i),value:g,id:_?.[x],table:u}));for(;c;)A.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;T.send({type:"transaction",writes:A,table:u,timestamp:f,onCommit:E,user:h,nodeName:S})}zH.get(XH.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Ene(e.subject.split(".").slice(0,-1).join("."),lne.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){gl.error(i)}e.ack()}a(gne,"messageProcessor");function jH(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(jH,"convertOperation")});var FR={};Ke(FR,{disableNATS:()=>Ane,setNATSReplicator:()=>PR,start:()=>Rne});function Rne(){Bf.default.get(Hf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Nne()}function Ane(e=!0){_q=e}function Nne(){if(_q)return;let e=us(),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];PR(n,r,i)}}GR((r,s)=>{PR(r.tableName,r.databaseName,r),s&&Eq(r)}),!aq&&(aq=!0)}function PR(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 bt{static{a(this,"NATSReplicator")}put(o){let c;return s?.put&&(!s.put.reliesOnPrototype||s.prototype.put)&&(c=s.put(this[ue],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ue],record:o},c)}delete(){let o;return s?.delete&&(!s.delete.reliesOnPrototype||s.prototype.delete)&&(o=s.delete(this[ue],this.getContext())),n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ue]},o)}publish(o){let c;return s?.publish&&(!s.publish.reliesOnPrototype||s.prototype.publish)&&(c=s.publish(this[ue],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ue],record:o},c)}invalidate(o){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ue]})}static defineSchema(o){Eq(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 ys;return(0,cq.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<One}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 vf(i.transaction,i)),o.user=i.user):o=dq),o}a(n,"getNATSTransaction")}function Eq(e){let t=Bf.default.get(Hf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,BR.publishToStream)(`${HR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,qR.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 BR,HR,qR,cq,uq,Bf,Hf,lq,_q,One,dq,aq,vf,vR,fq=Te(()=>{_e();Is();BR=D(Qe()),HR=D(Me()),qR=D(mn());Dc();cq=D(oq()),uq=D(Ht()),Bf=D(Y()),Hf=D(R()),lq=D(C());a(Rne,"start");a(Ane,"disableNATS");One=2;a(Nne,"assignReplicationSource");a(PR,"setNATSReplicator");a(Eq,"publishSchema");vf=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=Bf.default.get(Hf.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||(lq.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,BR.publishToStream)(`${HR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,qR.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},vR=class extends vf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,uq.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};dq=new vR});async function mq({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await xR.getResource(e,{});n=new $R(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await xR.get(e);i&&i.delete()}n=new Ff(e,t)}return n}function kR(){return qf++,qf>65500&&(qf=1),qf}var hq,Rl,xR,qf,Ff,$R,pq=Te(()=>{_e();Qu();hq=D(Ht()),Rl=D(C());Yi();xR=ft({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(mq,"getSession");qf=1;a(kR,"getNextMessageId");Ff=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(g=>g.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=hi.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 S=h.path,T=h.Resource,A=await Xe(f,async()=>{let g=await T.subscribe(f);if(!g)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!g[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let x of g)try{let V;if(x.type&&x.type!=="put"&&x.type!=="delete"&&x.type!=="message"||s&&!s(x))continue;r?(x.topic=n,V=this.needsAcknowledge(x)):V=kR();let I=x.id;Array.isArray(I)&&(I=Ca(I)),I==null&&(I=""),this.listener(S+"/"+I,x.value,V,t)}catch(V){(0,Rl.warn)(V)}})(),g});return A.topic=n,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){return kR()}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=hi.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 Xe(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=[]}},$R=class extends Ff{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=kR();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,Rl.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,hq.getNextMonotonicTime)()),(0,Rl.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),xR.put(this.sessionRecord)),t.qos}}});var KR={};Ke(KR,{start:()=>yne});async function yne({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:_}=gq(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,qn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;bne&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,Rq.getSuperUser)());let{onMessage:u,onClose:l}=gq(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,qn.info)("Socket error",_)})},{port:t,securePort:s})}function gq(e,t,r,s,n){Tq||(Tq=!0,DS(_=>{_.push({metric:"mqtt-connections",connections:VR})})),VR++;let i,o={protocolVersion:4},c=(0,Gf.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){VR--,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 Et.auth(_.username,_.password.toString()),(0,YR.get)(Fn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&Sq.notify({username:s.username,status:Fn.AUTH_AUDIT_STATUS.SUCCESS,type:Fn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,YR.get)(Fn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&Sq.error({username:s.username,status:Fn.AUTH_AUDIT_STATUS.FAILURE,type:Fn.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=mq({user:s,..._}),i=await i}catch(g){return(0,qn.error)(g),d({cmd:"connack",reasonCode:g.code||128,returnCode:g.code||128})}d({cmd:"connack",sessionPresent:i.sessionWasPresent,reasonCode:0,returnCode:0}),i.setListener((g,x,V,I)=>{try{let b=g.indexOf("/",1),M=b>0?g.slice(0,b):g;d({cmd:"publish",topic:g,payload:E(x),messageId:V||Math.floor(Math.random()*1e8),qos:I.qos},M)}catch(b){(0,qn.error)(b),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let g of _.subscriptions){let x;try{x=(await i.addSubscription(g,g.qos>=1)).qos||0}catch(V){(0,qn.error)(V),x=128}f.push(x)}await i.committed,d({cmd:"suback",granted:f,messageId:_.messageId});break;case"unsubscribe":for(let g of _.unsubscriptions)i.removeSubscription(g);d({cmd:"unsuback",messageId:_.messageId});break;case"pubrel":d({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let h=_.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=Ba(r?.headers["content-type"])),T=_.payload?.length>0?S(_.payload):void 0,A;try{A=await i.publish(_,T)}catch(g){console.warn(g),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:A===!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 S=(0,Gf.generate)(f,o);t(S),qs(S.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?Cn(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Gf,Rq,YR,Fn,qn,Sq,bne,Tq,VR,Aq=Te(()=>{Gf=require("mqtt-packet");pq();Rq=D(er());Da();co();rs();YR=D(Y()),Fn=D(R()),qn=D(C()),Sq=(0,qn.loggerWithTag)("auth-event"),bne=!0;a(yne,"start");VR=0;a(gq,"onSocket")});var Uq={};Ke(Uq,{loadComponent:()=>xf,loadComponentDirectories:()=>Dq});function Dq(e,t){t&&(QR=t),e&&(zR=e);let r=[];if((0,Qs.existsSync)(WR)){let n=(0,Qs.readdirSync)(WR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Zr.join)(WR,o);r.push(xf(c,QR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(xf(s,QR,s)),Promise.all(r).then(()=>{Lq=!0})}async function xf(e,t,r,s,n){if(!Nq.has(e)){Nq.set(e,!0),n&&(zR=n);try{let i,o=(0,Zr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Qs.existsSync)(o)?i=(0,bq.parseDocument)((0,Qs.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=Lne;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,Qs.existsSync)(f=(0,Zr.join)(E,"node_modules",u));)if(E=(0,Zr.dirname)(E),E.length<(0,Cq.getHdbBasePath)().length){f=null;break}if(f)_=await xf(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=Cne[u];if(_)try{c.push(_);let E=a(T=>(T.origin=r,ft(T)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,S=!f?.https&&f?.port;if(Al.isMainThread&&(_=await _.startOnMainThread?.({server:Et,ensureTable:E,port:S,securePort:h,resources:t,...l})||_,s&&f))for(let T of[S,h])try{if(+T&&!Oq.includes(T)){Oq.push(T);let A=JR.get(jR.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);CR(T,A)}}catch(A){console.error("Error listening on socket",T,A,u)}if(t.isWorker&&(_=await _.start?.({server:Et,ensureTable:E,port:S,securePort:h,resources:t,...l})||_),zR.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,wq.handleHDBError)("Can not reference parent directories");let T=(0,Zr.join)(e,l.files);for(let A of await(0,yq.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:g,dirent:x}=A,V=(0,Zr.relative)(e,g),I=(0,Zr.basename)(e),b=l.path||"/";b=b.startsWith("/")?b:b.startsWith("./")?"/"+I+b.slice(2):b==="."?"/"+I:"/"+I+"/"+b,b+=(b.endsWith("/")?"":"/")+V;try{if(x.isFile()){let M=await wne(g);Al.isMainThread&&await _.setupFile?.(M,b,g,t),t.isWorker&&await _.handleFile?.(M,b,g,t)}else Al.isMainThread&&await _.setupDirectory?.(b,g,t),t.isWorker&&await _.handleDirectory?.(b,g,t)}catch(M){console.error(`Could not load ${x.isFile()?"file":"directory"} ${g} using ${l.module} for application ${e}`,M),t.set(l.path||"/",new Ol(M))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new Ol(E),null,!0)}}if(Al.isMainThread&&!Lq&&(0,Iq.watchDir)(e,async()=>Dq()),i.extensionModule)return await A_((0,Zr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new Ol(i))}}}var Qs,Zr,Al,bq,JR,jR,yq,Iq,wq,Cq,Ine,wne,WR,zR,Lq,QR,Cne,Lne,Oq,Nq,Ol,Mq=Te(()=>{Qs=require("fs"),Zr=require("path"),Al=require("worker_threads"),bq=require("yaml"),JR=D(Y()),jR=D(R());qN();kN();$N();$v();wH();UH();yq=D(require("fast-glob")),Iq=D(tt());lm();rs();wq=D(z());Is();_e();Uf();Cq=D(Y()),Ine=D(QH());DE();fq();Aq();({readFile:wne}=Qs.promises),WR=JR.get(jR.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),zR=new Map;a(Dq,"loadComponentDirectories");Cne={REST:Bg,graphqlSchema:um,jsResource:dm,fastifyRoutes:hR,login:fm,static:mR,operationsApi:Ine,customFunctions:{},clustering:FR,authentication:zu,mqtt:KR},Lne={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},Oq=[],Nq=new Map;a(xf,"loadComponent");Ol=class extends bt{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 Fq=m((Gge,qq)=>{"use strict";var Vf=require("fs-extra"),XR=require("path"),kf=C(),Pq=F(),$f=R(),Hq=Y(),Dne=et();qq.exports=Une;async function Une(){let e=Mne(),t=Hq.get($f.CONFIG_PARAMS.ROOTPATH),r=XR.join(t,"package.json"),s={dependencies:{harperdb:"file:"+$f.PACKAGE_ROOT}},n=XR.join(t,"node_modules");await Vf.ensureDir(n);let i,o=!0,c=!1;try{i=await Vf.readJson(r)}catch(u){if(Pq.isEmptyOrZeroLength(e))return;if(u.code!==$f.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!Pq.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await vq(l);s.dependencies[u]=_+l}if(!o){kf.notify("Installing components"),await Bq(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await vq(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(kf.notify("Removing component",u),c=!0);c&&(kf.notify("Updating components."),await Bq(r,s))}a(Une,"installComponents");function Mne(){let e=Dne.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Mne,"getComponentsConfig");async function vq(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":XR.extname(e)||await Vf.pathExists(e)?"file:":"github:"}a(vq,"getPkgPrefix");async function Bq(e,t){kf.trace("npm installing components package.json",t),await Vf.writeFile(e,JSON.stringify(t,null," ")),await GE().installAllRootModules(Hq.get($f.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(Bq,"installPackages")});var yf=m((kge,xq)=>{var{isMainThread:Gq}=require("worker_threads"),{getTables:Pne}=(_e(),re(be)),{loadComponentDirectories:vne,loadComponent:Bne}=(Mq(),re(Uq)),{resetResources:Hne}=(Qu(),re(SP)),qne=Fq(),Fne=et(),{dirname:Gne}=require("path"),{getConnection:xne}=Qe(),kne=Y(),$ne=R(),ZR=new Map;async function Vne(e=!1){!Gq&&kne.get($ne.CONFIG_PARAMS.CLUSTERING_ENABLED)&&xne(),Gq&&await qne();let t=Hne();Pne(),t.isWorker=e,await Bne(Gne(Fne.getConfigFilePath()),t,"hdb",!0,ZR),await vne(ZR,t);let r=[];for(let[s]of ZR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Vne,"loadRootComponents");xq.exports.loadRootComponents=Vne});var tt=m((Yge,Ni)=>{"use strict";var{Worker:Yne,MessageChannel:Kne,parentPort:zs,isMainThread:nA,threadId:Wne,workerData:Nl}=require("worker_threads"),{PACKAGE_ROOT:Qne}=R(),{join:Vq,isAbsolute:zne,extname:Kf}=require("path"),{server:Jne}=(rs(),re(Pc)),{watch:jne,readdir:Xne}=require("fs/promises"),{totalmem:kq}=require("os"),iA=R(),wo=C(),Vge=R(),{randomBytes:Zne}=require("crypto"),eie=1024*1024,Oi=[],Ai=[],tie=50,Yq=1e4,rie="restart",Kq="request_thread_info",Wq="resource_report",Qq="thread_info",zq="added-port",sie="ack",eA;Ni.exports={startWorker:tA,restartWorkers:oA,shutdownWorkers:aie,workers:Oi,setMonitorListener:hie,onMessageFromWorkers:cie,onMessageByType:uie,broadcast:lie,broadcastWithAcknowledgement:die,setChildListenerByType:oie,getWorkerIndex:jq,getTicketKeys:Xq,setMainIsWorker:nie,restartNumber:Nl?.restartNumber||1};var Jq;function jq(){return Nl?Nl.workerIndex:Jq?0:void 0}a(jq,"getWorkerIndex");function nie(e){Jq=e}a(nie,"setMainIsWorker");var Yf;function Xq(){return Yf||(Yf=nA?Zne(48):Nl.ticketKeys,Yf)}a(Xq,"getTicketKeys");Object.defineProperty(Jne,"workerIndex",{get(){return jq()}});var Zq={[Kq](e,t){Eie(t)},[Wq](e,t){fie(t,e)}};function tA(e,t={}){let r=process.constrainedMemory?.()||kq();r=Math.min(r,kq());let s=Math.max(Math.floor(r/eie/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Ai){let{port1:u,port2:l}=new Kne;c.postMessage({type:zq,port:u},[u]),i.push(l)}Kf(e)||(e+=".js");let o=new Yne(zne(e)?e:Vq(Qne,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:Ni.exports.restartNumber,ticketKeys:Xq()},transferList:i},t));return Qf(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{tA(e,t)},o.on("error",c=>{console.error("Worker error:",c),wo.error("Worker error:",c)}),o.on("exit",c=>{Oi.splice(Oi.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<tie?(t.unexpectedRestarts=o.unexpectedRestarts+1,tA(e,t)):wo.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{Zq[c.type]?.(c,o)}),Oi.push(o),pie(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(tA,"startWorker");var iie=[iA.THREAD_TYPES.HTTP];async function oA(e=null,t=2,r=!0){if(nA){if(r){let{loadRootComponents:n}=yf();await n()}Ni.exports.restartNumber++,t<1&&(t=t*Oi.length);let s=[];for(let n of Oi.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:Ni.exports.restartNumber,type:iA.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=iie.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),Yq*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 zs.postMessage({type:rie,workerType:e})}a(oA,"restartWorkers");function oie(e,t){Zq[e]=t}a(oie,"setChildListenerByType");function aie(e){return oA(e,1/0,!1)}a(aie,"shutdownWorkers");var e0=[];function cie(e){e0.push(e)}a(cie,"onMessageFromWorkers");var rA=new Map;function uie(e,t){let r=rA.get(e);r||rA.set(e,r=[]),r.push(t)}a(uie,"onMessageByType");function lie(e){for(let t of Ai)try{t.postMessage(e)}catch(r){wo.error("Unable to send message to worker",r)}}a(lie,"broadcast");var Wf=new Map,_ie=1;function die(e){return new Promise(t=>{let r=0;for(let s of Ai)try{let n=_ie++,i=a(()=>{Wf.delete(n),--r===0&&t(),s!==zs&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Wf.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Wf)o.port===s&&o()})),s.postMessage(e),r++}catch(n){wo.error("Unable to send message to worker",n)}r===0&&t()})}a(die,"broadcastWithAcknowledgement");function Eie(e){e.postMessage({type:Qq,workers:t0()})}a(Eie,"sendThreadInfo");function t0(){let e=Date.now();return Oi.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(t0,"getChildWorkerInfo");function fie(e,t){e.resources=t,e.resources.updated=Date.now()}a(fie,"recordResourceReport");var sA;function hie(e){sA=e}a(hie,"setMonitorListener");var mie=1e3,$q=!1;function pie(){$q||($q=!0,setInterval(()=>{for(let e of Oi){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}sA&&sA()},mie).unref())}a(pie,"startMonitoring");var Sie=1e3;if(zs){Qf(zs);for(let e of Nl.addPorts)Qf(e);setInterval(()=>{let e=process.memoryUsage();zs.postMessage({type:Wq,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Sie).unref(),eA=a(()=>new Promise((e,t)=>{zs.on("message",r),zs.postMessage({type:Kq});function r(s){s.type===Qq&&(zs.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else eA=t0;Ni.exports.getThreadInfo=eA;function Qf(e,t){Ai.push(e),e.on("message",r=>{if(r.type===zq)Qf(r.port);else if(r.type===sie){let s=Wf.get(r.id);s&&s()}else{for(let n of e0)n(r,e);let s=rA.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){wo.error(i)}}}).on("close",()=>{Ai.splice(Ai.indexOf(e),1)}).on("exit",()=>{Ai.splice(Ai.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Qf,"addPort");if(nA){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Xne(s,{withFileTypes:!0}))i.isDirectory()&&r(Vq(s,i.name));for await(let{filename:i}of jne(s,{persistent:!1}))(Kf(i)===".ts"||Kf(i)===".js"||Kf(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await oA(),wo.info("Reloaded HarperDB components")},100))},"watch_dir");Ni.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else zs.on("message",async e=>{let{type:t}=e;t===iA.ITC_EVENT_TYPES.SHUTDOWN&&(Ni.exports.restartNumber=e.restartNumber,zs.unref(),setTimeout(()=>{wo.warn("Thread did not voluntarily terminate",Wne),process.exit(0)},Yq).unref())})});function _A(e){let t=e.auditStore=e.openDB(o0.AUDIT_STORE_NAME,gie);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,c0.getWorkerIndex)()===0&&e.on("aftercommit",()=>{cA||(cA=setTimeout(()=>{if(cA=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-r0,0]})){if((n[0]&15)===lA){let i=s[1];r[i]?.(s[2])}t.remove(s)}},r0/10).unref())}),t}function jf(e,t,r){let s=_0[r.type],n=3;if(t?t.length>80?(s|=zf,n=(0,Gn.writeKey)(t,Js,e?14:6),aA.setUint16(2,n)):(n=(0,Gn.writeKey)(t,Js,e?11:3),Js[1]=n):Js[1]=0,e){s|=l0;let i=s&zf?6:3;aA.setFloat64(i,e),t||(n=i+8)}return Js[0]=s,s&zf?aA.setUint16(4,0):Js[2]=0,r.value?Buffer.concat([Js.slice(0,n),r.value]):Js.subarray(0,n)}function bi(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&zf,i=n?6:3,o;r&l0&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&uA?t.decoder.decode(e.subarray(c||i)):void 0;return{type:_0[r&7],value:u,lastVersion:o,get user(){return c?(0,Gn.readKey)(e,i,c):void 0}}}var Gn,Jf,o0,a0,c0,u0,Js,aA,Tie,gie,r0,cA,uA,s0,lA,n0,i0,zf,l0,_0,bl=Te(()=>{Gn=require("ordered-binary"),Jf=D(Y()),o0=D(Ge()),a0=D(R()),c0=D(tt()),u0=D(F());(0,Jf.initSync)();Js=Buffer.alloc(1024),aA=new DataView(Js.buffer,Js.byteOffset,1024),Tie={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,Gn.writeKey)(e[2],t,r+12)}else return(0,Gn.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,Gn.readKey)(e,t+12,r)]}else return(0,Gn.readKey)(e,t,r)}},gie={encoding:"binary",keyEncoder:Tie},r0=(0,u0.convertToMS)((0,Jf.get)(a0.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,cA=null;a(_A,"openAuditStore");uA=16,s0=1,lA=2,n0=3,i0=4,zf=128,l0=64,_0={put:s0|uA,[s0]:"put",delete:lA,[lA]:"delete",message:n0|uA,[n0]:"message",invalidate:i0,[i0]:"invalidate"};a(jf,"createAuditEntry");a(bi,"readAuditEntry")});var dA,Co,Rie,yl,Xf,d0=Te(()=>{dA=D(Ht());bl();Co=Symbol("completion"),Rie=100,yl=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,dA.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[Co]&&(i||(i=[]),i.push(d[Co])),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,jf(_.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<Rie>>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=[]}},Xf=class extends yl{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,dA.getNextMonotonicTime)())}getReadTxn(){}}});function m0(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Ja||((0,Lo.onMessageByType)(f0,d=>{let E=d.auditIds;fA(d.path,E,d.txnId)}),(0,Lo.onMessageByType)(h0,d=>{(0,js.trace)("confirming to proceed with txn",d.txnId)}),Ja=Object.create(null));let c=Ja[i]||(Ja[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=Ca(t);let l=new EA(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 fA(e,t,r,s){if(!Ja)return;let n=Ja[e];if(n){if(za&&za+1!==r){(0,js.trace)("Waiting to ensure latest txn id",za,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Zf)o<r&&((0,js.trace)("Txn",r,"waiting for txn",o),await c);if(za+1!==r){await(0,Lo.broadcastWithAcknowledgement)({type:h0,txnId:r});for(let[o,c]of Zf)o<r&&((0,js.trace)("Txn",r,"waiting for txn",o),await c)}Zf.delete(r),(0,js.trace)("Proceeding with txn id",r),za=r-1,fA(e,t,r,s)})();return Zf.set(r,i),i}(0,js.trace)("Notifying with txn id",r,s),za=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,E0.writeKey)(i,Oie,0);let _=i[3];_&&(i.length=3);let d,E=Ca(u),f;do{let h=l.get(E);if(h){for(let T of h)if(!(f&&!T.includeDescendants)){if(T.startTime>=o){(0,js.info)("omitting",u,T.startTime,o);continue}try{if(T.crossThreads===!1&&!s)continue;if(d===void 0){let A=n.auditStore.get(i);if(!A||(d=bi(A,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}T.listener(u,d,o)}catch(A){console.error(A),(0,js.info)(A)}}}if(E==null)break;let S=E.lastIndexOf?.("/",E.length-2);S>-1?E=E.slice(0,S+1):E=null,f=!0}while(!0)}}}function p0(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&Aie)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,Lo.broadcast)({type:f0,path:n,auditIds:l,txnId:c,start:u}),fA(n,l,c,!0))})}}var js,Lo,E0,f0,h0,Aie,Ja,Oie,EA,za,Zf,S0=Te(()=>{js=D(C()),Lo=D(tt()),E0=require("ordered-binary");Dc();Qu();bl();f0="transaction",h0="transaction-await",Aie=67108864,Oie=Buffer.alloc(4096);a(m0,"addSubscription");EA=class extends ys{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"}}},Zf=new Map;a(fA,"notifyFromTransactionData");a(p0,"listenToCommits")});var Xg={};Ke(Xg,{coerceType:()=>eh,makeTable:()=>rh,setServerUtilities:()=>wie});function rh(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=[]),p0(i,u);let S=0,T,A,g,x={},V,I,b,M;for(let Z of h)(Z.assignCreatedTime||Z.name==="__createdtime__")&&(V=Z),(Z.assignUpdatedTime||Z.name==="__updatedtime__")&&(I=Z),Z.expiresAt&&(b=Z),Z.isPrimaryKey&&(x=Z);let J;E&&hO();class B extends bt{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=V;static updatedTimeProperty=I;static dbisDB=_;static schemaDefined=l;static sourcedFrom(p,N){if(N&&(this.sourceOptions=N,N.expiration&&this.setTTLExpiration(N.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(p,this.sourceOptions);else if(p.mergeSource)this.Source=p.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=p;return A=p&&p.get&&(!p.get.reliesOnPrototype||p.prototype.get),(async()=>{let U=!1,y=a(async L=>{let H=L.value,k=L.table?xe[c][L.table]:B;if(c===Ss.SYSTEM_SCHEMA_NAME&&(L.table===Ss.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||L.table===Ss.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(U=!0),L.id===void 0&&(L.id=H[k.primaryKey],L.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(L));let P=await k.getResource(L.id,L,Il);switch(L.type){case"put":return P._writeUpdate(H,Il);case"delete":return P._writeDelete(Il);case"publish":return P._writePublish(H,Il);case"invalidate":return P.invalidate(Il);default:Mo.error("Unknown operation",L.type,L.id)}},"writeUpdate");try{let L=p.subscribe&&(!p.subscribe.reliesOnPrototype||p.prototype.subscribe);L&&f==null&&(f=!0);let H=p.subscribeOnThisThread?p.subscribeOnThisThread((0,Uo.getWorkerIndex)()):(0,Uo.getWorkerIndex)()===0,k=L&&H&&await p.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=Xe(P,()=>{if(P.type==="transaction"){let j=[];for(let K of P.writes){K[Ne]=P;try{j.push(y(K))}catch(ee){throw ee.message+=" writing "+JSON.stringify(K)+" of event "+JSON.stringify(P),ee}}return Promise.all(j)}else if(P.type==="define_schema"){let j=this.attributes.slice(0),K;for(let ee of P.attributes)j.find(Be=>Be.name===ee.name)||(j.push(ee),K=!0);K&&(ft({table:n,database:c,attributes:j,origin:"cluster"}),Ll.signalSchemaChange(new Dl.SchemaEventMsg(process.pid,Ss.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(P)});P.onCommit&&(X?.then&&U&&Ll.signalUserChange(new Dl.UserEventMsg(process.pid)),X?.then?X.then(P.onCommit):P.onCommit())}catch($){console.error("error in subscription handler",$)}}catch(L){console.error(L)}})(),this}static getResource(p,N,U){let y=super.getResource(p,N,U);if(p!=null)try{if(y.hasOwnProperty(le))return y;let L=y._txnForRequest();if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let H,k,$={transaction:L?.getReadTxn()},X;return Zl(p,N,$,y,U?.allowInvalidated,(j,K)=>{K?k(K):(y[le]=j?.value,y[fr]=j?.version,X=!0,H?.(y))}),X?y:new Promise((j,K)=>{H=j,k=K})}catch(L){throw L.message.includes("Unable to serialize object")&&(L.message+=": "+JSON.stringify(p)),L}return y}static setTTLExpiration(p){(0,Uo.getWorkerIndex)()===0&&(d=p*1e3,this.expirationTimer&&clearInterval(this.expirationTimer),this.expirationTimer=setInterval(()=>{if(this.primaryStore.rootStore.status!=="open")return clearInterval(this.expirationTimer);for(let{key:N,value:U,version:y}of this.primaryStore.getRange({start:!1,versions:!0}))y<Date.now()-d&&y>0&&U?.__invalidated__==null&&B.evict(N,U,y)},d).unref())}static enableAuditing(){E=!0,hO(),B.audit=!0}static coerceId(p){return p===""?null:eh(p,x)}static async dropTable(){if(delete xe[c][n],c===o){for(let p in r)_.remove(B.tableName+"/"+p),r[p].drop();_.remove(B.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));Ll.signalSchemaChange(new Dl.SchemaEventMsg(process.pid,Ss.OPERATIONS_ENUM.DROP_TABLE,c,n))}static Source;static get(p,N){return p&&typeof p=="object"&&!Array.isArray(p)&&p.url===""?{recordCount:this.getRecordCount(),records:"./",name:n,database:c,attributes:h}:super.get(p,N)}get(p){if(typeof p=="string")return this.getProperty(p);if(this[_n])return this.search(p);if(p?.property)return this.getProperty(p.property);if(this.doesExist()||this[Ne]?.hasOwnProperty("returnNonexistent")&&this[Ne].returnNonexistent)return this}static allowRead(p,N){if(!p)return!1;let U=p.role.permission;if(U.super_user)return!0;if(U[n]?.read){let y=U[n].attribute_permissions;if(y){N||(N={});let L=N.select;if(L){let H=hA(y,"read");N.select=L.filter(k=>H[k])}else N.select=y.filter(H=>H.read).map(H=>H.attribute_name);return N}else return!0}}allowUpdate(p,N,U){if(!p)return!1;let y=p.role.permission;if(y.super_user)return!0;if(y[n]?.update){let L=y[n].attribute_permissions;if(L){let H=hA(L,"update");for(let k in N)if(!H[k])return!1;if(U)for(let k of L){let P=k.attribute_name;!k.update&&!(P in N)&&(N[P]=this.getProperty(P))}}else return!0}}allowCreate(p,N){return this.allowUpdate(p,{})}static allowCreate(p,N){if(!p)return!1;let U=p.role.permission;if(U.super_user)return!0;if(U[n]?.insert){let y=U[n].attribute_permissions;if(y){let L=hA(y,"insert");for(let H in N)if(!L[H])return!1}else return!0}}static allowDelete(p){if(!p)return!1;let N=p.role.permission;if(N.super_user||N[n]?.delete)return!0}update(p,N){if(!this._txnForRequest())throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let y;if(typeof p=="object"&&p){if(N)for(let L in this[le])p[L]===void 0&&(p[L]=void 0);y=this[Nt],y&&(p=Object.assign(y,p)),this[Nt]=y=p}return!this[le]&&t&&!(y||(y=this[Nt]))?.[t]&&(y||(y=this[Nt]=Object.create(null)),y[t]=this[ue]),this._writeUpdate(this),this}invalidate(p){this._txnForRequest().addWrite({key:this[ue],store:i,invalidated:!0,lastVersion:this[fr],nodeName:this[Ne]?.nodeName,commit:(U,y)=>{if(y)return;let L={__invalidated__:U};for(let $ in r)L[$]=this.getProperty($);let H=B.Source,k,P=this[ue];return p?.isNotification||H?.shouldReceiveInvalidations&&(k=H.invalidate(P,this)),i.put(this[ue],L,U),{type:E&&"invalidate",[Co]:k}}})}static evict(p,N,U){let y=this.Source;if(y?.get&&(!y.get.reliesOnPrototype||y.prototype.get)){let L;if(!N){let H=i.getEntry(p);if(!H)return;N=H.value,U=H.version}if(N)for(let H in r)L||(L={__invalidated__:0}),L[H]=N[H];return L?i.put(p,L,U,U):i.remove(p,U)}else return i.remove(p,U)}lock(){throw new Error("Not yet implemented")}static operation(p,N){return p.table||=n,p.schema||=c,I0.operation(p,N)}async put(p){this.update(p,!0)}_writeUpdate(p,N){let U=this._txnForRequest();if(this[ue]===void 0)throw new Error("Can not save record without an id");let y=this[le],L,H,k=this[ue];y||(this[le]={}),U.addWrite({key:k,store:i,lastVersion:this[fr],nodeName:this[Ne]?.nodeName,validate:()=>{this.validate(p)},commit:(P,$)=>{let X;if($){if(L)return;let K=i.getEntry(k);y=K?.value;let ee=this[Ne];ee&&K?.version>(ee.lastModified||0)&&(ee.lastModified=K.version)}if(!H){if(H=!0,N?.isNotification)p=Mc(p);else{if(p[R0]&&(L=!f_(p),L))return;t&&p[t]!==k&&(p[t]=k),I&&(p[I.name]=I.type==="Date"?new Date(P):I.type==="String"?new Date(P).toISOString():P),V&&(y?p[V.name]=y[V.name]:p[V.name]=V.type==="Date"?new Date(P):V.type==="String"?new Date(P).toISOString():P),p=Mc(p);let K=B.Source;K?.put&&(!K.put.reliesOnPrototype||K.prototype.put)&&(X=K.put(k,p,this))}if(p[le])throw new Error("Can not assign a record with a record property");this[le]=p}if(Mo.trace("Checking timestamp for put",k,this[fr]>P,this[fr],P),this[fr]>P)return E&&{type:"put",value:i.encoder.encode(p)};let j=i.encoder.encode(p);return i.put(this[ue],(0,ja.asBinary)(j),P),_t(this[ue],y,p),y===null&&!$&&Fi(-1),{type:E&&"put",value:j,[Co]:X}}})}async delete(p){return typeof p=="string"?this.deleteProperty(p):this[le]?this._writeDelete(p):!1}_writeDelete(p){let N=this._txnForRequest(),U,y=this[ue],L;return N.addWrite({key:y,store:i,lastVersion:this[fr],nodeName:this[Ne]?.nodeName,commit:(H,k)=>{let P=this[le];if(k){let $=i.getEntry(y);P=$?.value;let X=this[Ne];X&&$?.version>(X.lastModified||0)&&(X.lastModified=$.version)}if(!U&&(U=!0,!p?.isNotification)){let $=B.Source;$?.delete&&(!$.delete.reliesOnPrototype||$.prototype.delete)&&(L=$.delete(y,this))}if(!(this[fr]>H))return _t(this[ue],P),Mo.trace("Write delete entry",E||f,H),E||f?(i.put(this[ue],null,H),E||fO(),k||Fi(1)):i.remove(this[ue]),{type:E&&"delete",[Co]:L}}}),!0}search(p){let N=this._txnForRequest();if(!p)throw new Error("No query provided");let U=p.reverse===!0,y=p.conditions;y?y.length===void 0&&(y=Array.from(y)):y=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[ue]&&(y=[{attribute:null,comparator:"prefix",value:this[ue]}].concat(y));for(let K of y){let ee=K[0]??K.attribute,Be=ee==null?x:h.find(Wn=>Wn.name==ee);if(Be)Be.type&&(K[1]===void 0?K.value=L(K.value,Be):K[1]=L(K[1],Be));else if(ee!=null)throw(0,Do.handleHDBError)(new Error,`${ee} is not a defined attribute`,404)}function L(K,ee){return Array.isArray(K)?K.map(Be=>eh(Be,ee)):eh(K,ee)}a(L,"coerceTypedValues"),y.length>1&&(y=(0,b0.sortBy)(y,K=>{if(K.estimated_count===void 0){let ee=K.comparator||K.search_type;if(ee===wl.SEARCH_TYPES.EQUALS){let Be=K[0]??K.attribute;if(Be==null||Be===t)K.estimated_count=1;else{let Wn=r[Be];K.estimated_count=Wn?Wn.getValuesCount(K[1]??K.value):1/0}}else ee===wl.SEARCH_TYPES.CONTAINS||ee===wl.SEARCH_TYPES.ENDS_WITH||ee==="ne"?K.estimated_count=1/0:ee===wl.SEARCH_TYPES.STARTS_WITH||ee==="prefix"?K.estimated_count=bie:K.estimated_count=Nie}return K.estimated_count}));let H=N.getReadTxn();H.use();let k=p.select,P=y[0],$;if(!P)$=i.getRange(U?{end:!1,reverse:!0,transaction:H,lazy:k?.length<4}:{start:!1,transaction:H,lazy:k?.length<4}).map(({value:K})=>K?new Promise(ee=>setImmediate(()=>ee(K))):ja.SKIP);else{let K=rm(P,H,U,B,p.allowFullScan);if(!p.operator||p.operator.toLowerCase()==="and"){let ee=y.slice(1).map(sm);$=j(K,ee)}else{for(let Be=1;Be<y.length;Be++){let Wn=y[Be],Mh=rm(Wn,H,U,B,p.allowFullScan);K=K.concat(Mh)}let ee=new Set;K=K.filter(Be=>ee.has(Be)?!1:(ee.add(Be),!0)),$=j(K)}}(p.offset||p.limit!==void 0)&&($=$.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0)),$.onDone=()=>{H.done()};let X=this[Ne];function j(K,ee){let Be=ee?.length,Wn={transaction:H,lazy:Be>0||k?.length<4,alwaysPrefetch:!0};return K.map(Mh=>new Promise(Ph=>Zl(Mh,X,Wn,null,!1,GG=>{let vh=GG?.value;if(!vh)return Ph(ja.SKIP);for(let Bh=0;Bh<Be;Bh++)if(!ee[Bh](vh))return Ph(ja.SKIP);Ph(vh)})))}return a(j,"idsToRecords"),$}async subscribe(p){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||ft({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=m0(B,this[ue]??null,function(H,k,P){try{this.send({id:H,timestamp:P,...k})}catch($){console.error($)}},p.startTime,this[_n]),U=this[ue],y=p.previousCount;y>1e3&&(y=1e3);let L=p.startTime;if(this[_n]){if(L){if(y)throw new Do.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:H,value:k}of u.getRange({start:[L,Number.MAX_SAFE_INTEGER]})){let[P,$,X]=H;if(H.length>3&&(X=H.slice(2)),$!==s)continue;let j=bi(k,i);(U==null||N0(U,X))&&N.send({id:X,timestamp:P,...j}),N.startTime=P}}else if(y){let H=[];for(let{key:k,value:P}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[$,X,j]=k;if(k.length>3&&(j=k.slice(2)),X!==s)continue;if(U==null||N0(U,j)){let K=bi(P,i);if(H.push({id:j,timestamp:$,...K}),--y<=0)break}}catch($){Mo.error("Error getting history entry",k,$)}for(let k=H.length;k>0;)N.send(H[--k]);H[0]&&(N.startTime=H[0].timestamp)}else if(!p.omitCurrent)for(let{key:H,value:k,version:P}of i.getRange({start:U??!1,end:U==null?void 0:[U,y0.MAXIMUM_KEY],versions:!0}))k&&N.send({id:H,timestamp:P,value:k})}else{y&&!L&&(L=0);let H=this[fr];if(L<H){let k=[],P=H;do{let $=[P,s,U],X=u.get($);if(X){p.omitCurrent=!0;let j=bi(X,i);k.push({id:U,timestamp:P,...j}),P=j.lastVersion}else break;y&&y--}while(P>L&&y!==0);for(let $=k.length;$>0;)N.send(k[--$]);N.startTime=H}!p.omitCurrent&&this.doesExist()&&N.send({id:U,timestamp:this[fr],value:this})}return p.listener&&N.on("data",p.listener),N}doesExist(){return!!this[le]}async publish(p,N){this._writePublish(p,N)}_writePublish(p,N){let U=this._txnForRequest(),y=this[ue]||null,L,H;U.addWrite({store:i,key:y,lastVersion:this[fr],nodeName:this[Ne]?.nodeName,validate:()=>{this.validate(p)},commit:(k,P)=>{if(this.validate(p),!H&&(H=!0,!N?.isNotification)){let j=B.Source;j?.publish&&(!j.publish.reliesOnPrototype||j.prototype.publish)&&(L=j.publish(y,p,this))}let $=P>0?i.get(y):this[le];$===void 0&&!P&&(E||f)&&(E||fO(),Fi(1));let X={type:"message",value:i.encoder.encode(p),[Co]:L};return!U.hasWrittenTime&&this[fr]>k&&(k=X.newTxnTime=this[fr]+.001),i.put(y,$??null,k),X}})}_txnForRequest(){let p=this[Ne],N=p?.transaction;if(N){let U;return(U=N?.find(y=>y.lmdbDb?.path===i.path))||N.push(U=new yl(i,p.user,u)),U}else return new Xf(i,p.user,u)}validate(p){let N;for(let U=0,y=h.length;U<y;U++){let L=h[U];if(L.type){let H=p[L.name];if(H!=null)switch(L.type){case"Int":case"Float":(typeof H!="number"||L.type==="Int"&&H!==Math.floor(H))&&(N||(N=[])).push(`Property ${L.name} must be an ${L.type==="Int"?"integer":"number"}`);break;case"ID":typeof H=="string"||H?.length>0&&H.every?.(k=>typeof k=="string")||(N||(N=[])).push(`Property ${L.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof H!="string"&&(N||(N=[])).push(`Property ${L.name} must be a string`)}}L.required&&p[L.name]==null&&(N||(N=[])).push(`Property ${L.name} is required`)}if(N)throw new Do.ClientError(N.join(". "))}getUpdatedTime(){return this[fr]}wasLoadedFromSource(){return A?!!this[A0]:void 0}static async addAttributes(p){let N=h.slice(0);for(let U of p){if(!U.name)throw new Do.ClientError("Attribute name is required");if(U.name.match(/[`/]/))throw new Do.ClientError("Attribute names cannot include backticks or forward slashes");N.push(U)}return ft({table:n,database:c,schemaDefined:l,attributes:N}),B.indexingOperation}static async removeAttributes(p){let N=h.filter(U=>!p.includes(U.name));return ft({table:n,database:c,schemaDefined:l,attributes:N}),B.indexingOperation}static getRecordCount(){let p=0;for(let{key:N,value:U}of i.getRange({end:!1}))p++,N[0]?.description==="deletions"&&(p+=U||0);return i.getStats().entryCount-p}static updatedAttributes(){m_(this,this)}static async deleteHistory(p=0){let N;for(let{key:U,value:y}of u.getRange({start:[0,0],end:[p,0]})){await new Promise(P=>setImmediate(P));let[L,H,k]=U;U.length>3&&(k=U.slice(2)),H===s&&(N=i.remove(k))}await N}static async*getHistory(p=0,N=1/0){for(let{key:U,value:y}of u.getRange({start:[p,0],end:[N,0]})){await new Promise($=>setImmediate($));let[L,H,k]=U;if(U.length>3&&(k=U.slice(2)),H!==s)continue;let P=bi(y,i);P.id=k,P.timestamp=L,yield P}}static async getHistoryOfRecord(p){let N=[],U=i.getEntry(p);if(!U)return N;let y=U.version,L=0;do{await new Promise(P=>setImmediate(P));let H=[y,s,p],k=u.get(H);if(k){let P=bi(k,i);P.timestamp=y,N.push(P),y=P.lastVersion}else break}while(L<1e3);return N.reverse()}static cleanup(){J?.remove()}}B.updatedAttributes();let Ie=B.prototype;return Ie[R0]=!0,d&&B.setTTLExpiration(d/1e3),b&&FG(),B;function _t(Z,p,N){let U;for(let y in r){let L=r[y],H=L.isIndexing,k=N?.[y],P=p?.[y];if(k===P&&!H)continue;U=!0;let $=(0,Cl.getIndexedValues)(P);if($){T0&&L.prefetch($.map(X=>({key:X,value:Z})),O0);for(let X=0,j=$.length;X<j;X++)L.remove($[X],Z)}if($=(0,Cl.getIndexedValues)(k),$){T0&&L.prefetch($.map(X=>({key:X,value:Z})),O0);for(let X=0,j=$.length;X<j;X++)L.put($[X],Z)}}return U}a(_t,"updateIndices");function Zl(Z,p,N,U,y,L){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 $;try{$=i.getEntry(Z,N)}catch(ee){throw ee.message+=". The read txn is "+JSON.stringify(k)+" first loadRecord: "+P,console.error(ee),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),ee}let X,j,K;if($?(p&&$?.version>(p.lastModified||0)&&(p.lastModified=$.version),j=$.version,X=$.value,(j<0||!X||typeof X.__invalidated__=="number"||d&&j<Date.now()-d)&&(K=!0)):K=!0,A&&da(K,"cache-hit",n),K&&!y&&(U&&(U[A0]=!0),A))return hc(Z,X,j,p).then(ee=>{if(ee?.value?.[le])throw new Error("Can not assign a record with a record property");p&&ee?.version>(p.lastModified||0)&&(p.lastModified=ee.version),L(ee)},ee=>{L(null,ee)});if($?.value?.[le])throw new Error("Can not assign a record with a record property");L($)},"whenPrefetched");if(!N.alwaysPrefetch&&(Z==null||i.cache?.get(Z)))return H();i.prefetch([Z],H)}a(Zl,"loadRecord");function Yo(){M=new Set,(0,Uo.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let p of M)p()}a(Z,"onCommit")}a(Yo,"setupCommitListeners");async function hc(Z,p=null,N,U){if(N<0){let P;return M||Yo(),await new Promise($=>{let X,j=a(()=>{if(P=i.getEntry(Z),!P||P.version>0){if(clearTimeout(X),M.delete(j),typeof P?.value?.__invalidated__=="number")return $(hc(Z,P.value,P.version,U));$(P)}},"listener");M.add(j),X=setTimeout(()=>{M.delete(j),$(hc(Z,P?.value,void 0,U))},1e4).unref()})}let y=p?.__invalidated__,L=-(N||1);i.put(Z,p,L,N);let H={transaction:U?.transaction,replacingRecord:p,replacingVersion:N},k=U?.responseHeaders;k&&(H.responseHeaders=k);try{let P=performance.now(),$=await B.Source.get(Z,H),X=performance.now()-P;qs(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,Cl.getNextMonotonicTime)());let ee=_t(Z,p,$)&&N||y>0;return $?(t&&($[t]=Z),typeof $.toJSON=="function"&&($=$.toJSON()),i.put(Z,$,j,L)):i.remove(Z,L),ee&&E&&u.put([j,s,Z],jf(y,null,$?{type:"put",value:i.encoder.encode($)}:{type:"delete"})),{version:j,value:$}}catch(P){throw i.put(Z,p,N,L),P}}a(hc,"getFromSource");function Fi(Z){S||(S=i.get([g0,mA.threadId])||0),S+=Z,g||(g=setTimeout(()=>{g=null,i.rootStore.status==="open"&&i.put([g0,mA.threadId],S)},50))}a(Fi,"recordDeletion");function fO(){T||(T=setTimeout(()=>{if(T=null,i.rootStore.status==="open"){for(let{key:Z,value:p}of i.getRange({start:!0}))if(p===null){let N=i.getEntry(Z);N?.value===null&&i.remove(Z,N.version),Fi(-1)}}},B.getRecordCount()*100+Iie).unref())}a(fO,"enqueueDeletionCleanup");function hO(){J=u?.addDeleteRemovalCallback(s,Z=>{let p=i.getEntry(Z);p?.value===null&&i.remove(Z,p.version),Fi(-1)})}a(hO,"addDeleteRemoval");function FG(){(0,Uo.getWorkerIndex)()===0&&setInterval(async()=>{try{let Z=b.name,p=r[Z];if(!p)throw new Error(`expiresAt attribute ${b} must be indexed`);for(let{value:N}of p.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let U=i.getEntry(N);U?.value?.[Z]<Date.now()&&B.evict(N,U.value,U.version),await new Promise(y=>setImmediate(y))}}catch(Z){Mo.error("Error in evicting old records",Z)}},yie).unref()}a(FG,"runRecordExpirationEviction")}function hA(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 O0(){}function wie(e){I0=e}function eh(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Cie.test(e)&&(e+="Z"),new Date(e)):r?e:(0,th.autoCast)(e)}function N0(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 Ss,ja,Cl,b0,mA,wl,Ul,Do,Ll,Dl,Mo,y0,Uo,th,I0,Nie,bie,yie,T0,g0,fr,R0,fRe,A0,Il,Iie,Cie,_f=Te(()=>{Ss=D(R()),ja=require("lmdb"),Cl=D(Ht()),b0=require("lodash"),mA=require("worker_threads");Is();d0();wl=D(Ge()),Ul=D(Y());S0();Do=D(z()),Ll=D(Rn()),Dl=D(os());_e();g_();Mo=D(C());S_();Yi();y0=require("ordered-binary"),Uo=D(tt());bl();th=D(F());co();Nie=1e8,bie=1e7,yie=6e4;Ul.initSync();T0=Ul.get(Ss.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),g0=Symbol.for("deletions"),fr=Symbol.for("version"),R0=Symbol.for("incremental-update"),fRe=Symbol("source-resource"),A0=Symbol("load-from-source"),Il={isNotification:!0,allowInvalidated:!0},Iie=(0,th.convertToMS)(Ul.get(Ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(rh,"makeTable");a(hA,"attributesAsObject");a(O0,"noop");a(wie,"setServerUtilities");Cie=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(eh,"coerceType");a(N0,"isDescendantId")});var be={};Ke(be,{database:()=>du,databases:()=>xe,dropDatabase:()=>pS,dropTableMeta:()=>vie,getDatabases:()=>us,getTables:()=>Lie,onUpdatedTable:()=>GR,readMetaDb:()=>Ml,resetDatabases:()=>Die,table:()=>ft,tables:()=>Rr});function Lie(){return oh||us(),Rr||{}}function us(){if(oh)return xe;oh=!0,tc=new Map;let e=(0,Bt.getHdbBasePath)()&&(0,Fe.join)((0,Bt.getHdbBasePath)(),hr.DATABASES_DIR_NAME),t=(0,Bt.get)(hr.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Bt.get)(hr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Ur.existsSync)(e)?e:(0,Fe.join)((0,Bt.getHdbBasePath)(),hr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Ur.existsSync)(e))for(let r of(0,Ur.readdirSync)(e,{withFileTypes:!0})){let s=(0,Fe.basename)(r.name,".mdb");r.isFile()&&(0,Fe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Ml((0,Fe.join)(e,r.name),null,s)}if((0,Ur.existsSync)((0,ec.getBaseSchemaPath)())){for(let r of(0,Ur.readdirSync)((0,ec.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Fe.join)((0,ec.getBaseSchemaPath)(),r.name),n=(0,Fe.join)((0,ec.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Ur.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Fe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Fe.join)(n,i.name);Ml((0,Fe.join)(s,i.name),(0,Fe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,Ur.existsSync)(n))for(let o of(0,Ur.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Fe.extname)(o.name).toLowerCase()===".mdb"&&Ml((0,Fe.join)(n,o.name),(0,Fe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Fe.join)(c.path,(0,Fe.basename)(o+".mdb"));(0,Ur.existsSync)(u)&&Ml(u,o,r,null,!0)}}for(let r in xe){let s=tc.get(r);if(s){let n=xe[r];r.includes("delete")&&qe.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(qe.trace(`delete table class ${i}`),delete n[i])}else if(delete xe[r],r==="data"){for(let n in Rr)delete Rr[n];delete Rr[ah]}}return tc=null,xe}}function Die(){oh=!1;for(let[,e]of yi)e.needsDeletion=!0;us();for(let[e,t]of yi)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),yi.delete(e));return xe}function Ml(e,t,r=TA,s,n){let i=new pA.default(e,!1);e.includes("delete")&&qe.trace(`reading meta data from ${e}`);try{let o=yi.get(e);o?o.needsDeletion=!1:(o=(0,sh.open)(i),yi.set(e,o));let c=new Po.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Xa.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,Ur.existsSync)(s)&&(i.path=s,l=(0,sh.open)(i),l.isLegacy=!0):l=_A(o));let _=D0(r),d=_[ah],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[S,T]=f.toString().split("/");e.includes("delete")&&qe.trace(`read key ${f}`),T===""?T=h.name:T||(T=S,S=t,h.name||(h.name=T,h.indexed=!h.is_hash_attribute)),d?.add(S);let A=E.get(S);A||E.set(S,A={attributes:[]}),(T==null||h.is_hash_attribute)&&(A.primary=h),T!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:S,primary:T}=h;if(!T){for(let B of S)if(B.is_hash_attribute||B.isPrimaryKey){T=B;break}if(!T)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(S)}`)}let A=_[f],g={},x=[],V,I,b=typeof T.audit=="boolean"?T.audit:(0,Bt.get)(hr.CONFIG_PARAMS.LOGGING_AUDITLOG),M=T.trackDeletes,J=T.expiration;if(A)g=A.indices,x=A.attributes,A.schemaVersion++;else{V=T.tableId,V?V>=(u.get(Za)||0)&&u.putSync(Za,V+1):(T.tableId=V=u.get(Za),V||(V=1),u.putSync(Za,V+1),u.putSync(T.key,T));let B=new Po.default(!T.is_hash_attribute,T.is_hash_attribute);qe.trace(`openDB ${T.key} from ${r}`),I=o.openDB(T.key,B),I.rootStore=o,I.tableId=V}for(let B of S){B.attribute=B.name;try{if(!B.is_hash_attribute&&(B.indexed||B.attribute&&!B.name)){if(!g[B.name]){let _t=new Po.default(!B.is_hash_attribute,B.is_hash_attribute);qe.trace(`openDB ${B.key} from ${r}`),g[B.name]=o.openDB(B.key,_t)}let Ie=x.find(_t=>_t.name===B.name);Ie?x.splice(x.indexOf(Ie),1,B):x.push(B)}}catch(Ie){qe.error("Error trying to update attribute",B,x,g,Ie)}}if(!A){qe.trace(`creating table class ${f}`,Object.keys(_)),A=U0(_,f,rh({primaryStore:I,auditStore:l,audit:b,expirationMS:J&&J*1e3,trackDeletes:M,tableName:f,tableId:V,primaryKey:T.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:g,attributes:S,schemaDefined:T.schemaDefined,dbisDB:u})),A.schemaVersion=1;for(let B of gA)B(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function D0(e){let t=xe[e];if(t||(e==="data"?t=xe[e]=Rr:e==="system"?Object.defineProperty(xe,"system",{value:t=Object.create(null),configurable:!0}):t=xe[e]=Object.create(null)),tc&&!tc.has(e)){let r=new Set;t[ah]=r,tc.set(e,r)}return t}function U0(e,t,r){return e[t]=r,r}function du({database:e,table:t}){e||(e=TA),us();let r=D0(e),s=(0,Fe.join)((0,Bt.getHdbBasePath)(),hr.DATABASES_DIR_NAME),n=t&&(0,Bt.get)(hr.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,Bt.get)(hr.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,Bt.get)(hr.CONFIG_PARAMS.STORAGE_PATH)||((0,Ur.existsSync)(s)?s:(0,Fe.join)((0,Bt.getHdbBasePath)(),hr.LEGACY_DATABASES_DIR_NAME));let i=(0,Fe.join)(s,(n?t:e)+".mdb"),o=yi.get(i);if(!o){let c=new pA.default(i,!1);o=(0,sh.open)(c),yi.set(i,o)}return o}async function pS(e){if(!xe[e])throw new Error("Schema does not exist");let t=xe[e];for(let r in t){let n=t[r].primaryStore.rootStore;yi.delete(n.path),n.status==="open"&&(await n.close(),await w0.remove(n.path))}if(e==="data"){for(let r in Rr)delete Rr[r];delete Rr[ah]}delete xe[e]}function ft({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=TA);let u=du({database:t,table:e}),l=xe[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 S=new Po.default(!1);for(let I of s)I.attribute?(I.name=I.attribute,I.indexed=!0):I.attribute=I.name,I.expiresAt&&(I.indexed=!0);let T,A;if(_){if(qe.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 I=u.auditStore;I||(I=_A(u)),E=s.find(B=>B.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,Bt.get)(hr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),qe.trace(`${e} table loading, opening primary store`);let b=new Po.default(!1,!0),M=e+"/";qe.trace(`openDB ${M} from ${t}`);let J=u.openDB(M,b);J.rootStore=u,qe.trace(`openDB ${Xa.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(Xa.INTERNAL_DBIS_NAME,S),J.tableId=h.get(Za),J.tableId||(J.tableId=1),h.putSync(Za,J.tableId+1),E.tableId=J.tableId,_=U0(l,e,rh({primaryStore:J,auditStore:I,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:J.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:o,dbisDB:h})),_.schemaVersion=1,T=!0,V(),h.put(M,E)}qe.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||qe.trace(`openDB ${Xa.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(Xa.INTERNAL_DBIS_NAME,S)),_.dbisDB=h;let g=[];for(let{key:I,value:b}of h.getRange({start:!0})){let[M,J]=I.toString().split("/");if(J===""&&(J=b.name),J){if(M!==e)continue}else J=M;if(!s.find(Ie=>Ie.name===J)?.indexed&&b.indexed&&!b.isPrimaryKey){V(),T=!0,h.remove(I);let Ie=_.indices[M];Ie&&g.push(Ie)}}qe.trace(`${e} table loading, comparing atributes`);let x=[];try{for(let I of s||[]){let b=e+"/"+(I.name||"");Object.defineProperty(I,"key",{value:b,configurable:!0});let M=h.get(b);if(I.isPrimaryKey){if(n===!0&&!_.audit){_.enableAuditing(),M||(b=e+"/",M=h.get(b));let B=Object.assign({},M,{audit:!0});T=!0,V(),h.put(b,B)}continue}M?.attribute&&!M.name&&(M.indexed=!0);let J=!M||M.type!==I.type||M.indexed!==I.indexed||JSON.stringify(M.attributes)!==JSON.stringify(I.attributes)||JSON.stringify(M.elements)!==JSON.stringify(I.elements);if(I.indexed){let B=new Po.default(!0,!1);qe.trace(`openDB ${b} from ${t}`);let Ie=u.openDB(b,B);(J||M.indexingPID&&M.indexingPID!==process.pid||M.restartNumber<Pl.workerData?.restartNumber)&&(T=!0,V(),M=h.get(b),(J||M.indexingPID&&M.indexingPID!==process.pid||M.restartNumber<Pl.workerData?.restartNumber)&&(T=!0,I.lastIndexedKey=M?.lastIndexedKey||!1,I.indexingPID=process.pid,Ie.isIndexing=!0,Object.defineProperty(I,"dbi",{value:Ie}),x.push(I)),h.put(b,I)),f[I.name]=Ie}else J&&(T=!0,V(),h.put(b,I))}}finally{A&&A()}if(T&&(_.schemaVersion++,_.updatedAttributes()),qe.trace(`${e} table loading, running index`),x.length>0||g.length>0?_.indexingOperation=Pie(_,x,g):T&&nh.signalSchemaChange(new ih.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,T)for(let I of gA)I(_,c!=="cluster");return r&&_.setTTLExpiration(+r),qe.trace(`${e} table loaded`),_;function V(){A||u.transactionSync(()=>({then(I){A=I}}))}a(V,"startTxn")}async function Pie(e,t,r){try{let s=e.schemaVersion;await nh.signalSchemaChange(new ih.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,S=(0,C0.getIndexedValues)(_[h]);if(S)for(let T=0,A=S.length;T<A;T++)f.dbi.put(S[T],l)}}),n.then(()=>u--,E=>{u--,qe.error(E)}),Pl.workerData&&Pl.workerData.restartNumber!==L0.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>Uie?await n:u>Mie&&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 nh.signalSchemaChange(new ih.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){qe.error("Error in indexing",s)}}function vie({table:e,database:t}){let r=du({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 GR(e){gA.push(e)}var Bt,Xa,sh,Fe,Ur,ec,Po,pA,hr,w0,SA,C0,nh,ih,Pl,qe,L0,TA,ah,Rr,xe,Za,gA,oh,yi,tc,Uie,Mie,_e=Te(()=>{Bt=D(Y()),Xa=D(Ge()),sh=require("lmdb"),Fe=require("path"),Ur=require("fs"),ec=D(De());_f();Po=D(N_()),pA=D(y_()),hr=D(R()),w0=D(require("fs-extra")),SA=require("../index"),C0=D(Ht()),nh=D(Rn()),ih=D(os()),Pl=require("worker_threads"),qe=D(C()),L0=D(tt());bl();TA="data",ah=Symbol("defined-tables");(0,Bt.initSync)();Rr=Object.create(null),xe=Object.create(null);(0,SA._assignPackageExport)("databases",xe);(0,SA._assignPackageExport)("tables",Rr);Za=Symbol.for("next-table-id"),gA=[],yi=new Map;a(Lie,"getTables");a(us,"getDatabases");a(Die,"resetDatabases");a(Ml,"readMetaDb");a(D0,"ensureDB");a(U0,"setTable");a(du,"database");a(pS,"dropDatabase");a(ft,"table");Uie=1e3,Mie=10;a(Pie,"runIndexing");a(vie,"dropTableMeta");a(GR,"onUpdatedTable")});var F=m((ORe,K0)=>{"use strict";var Ii=require("path"),H0=require("fs-extra"),mr=C(),M0=require("fs-extra"),ch=require("os"),Bie=require("net"),Hie=require("recursive-iterator"),Ye=R(),qie=zh(),P0=require("papaparse"),uh=require("moment"),{inspect:Fie}=require("util"),v0=require("is-number"),ARe=require("lodash"),Gie=require("minimist"),xie=require("https"),kie=require("http"),{hdb_errors:lh}=z(),$ie=/^((\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)))$/,q0=require("util").promisify(setTimeout),Vie=100,Yie=5,Kie="",Wie=4,B0={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};K0.exports={isEmpty:Mr,isEmptyOrZeroLength:Xs,arrayHasEmptyValues:Jie,arrayHasEmptyOrZeroLengthValues:jie,buildFolderPath:Xie,isBoolean:F0,errorizeMessage:Qie,stripFileExtension:eoe,autoCast:toe,autoCastJSON:G0,autoCastJSONDeep:AA,removeDir:roe,compareVersions:soe,isCompatibleDataVersion:noe,escapeRawValue:ioe,unescapeValue:ooe,stringifyProps:aoe,timeoutPromise:uoe,isClusterOperation:_oe,getClusterUser:Eoe,checkGlobalSchemaTable:doe,getHomeDir:k0,getPropsFilePath:coe,promisifyPapaParse:foe,removeBOM:$0,createEventPromise:hoe,checkProcessRunning:moe,checkSchemaTableExist:poe,checkSchemaExists:V0,checkTableExists:Y0,getStartOfTomorrowInSeconds:Soe,getLimitKey:Toe,isObject:Zie,isNotEmptyAndHasValue:zie,autoCasterIsNumberCheck:x0,backtickASTSchemaItems:goe,isPortTaken:loe,createForkArgs:Roe,autoCastBoolean:Aoe,async_set_timeout:q0,getTableHashAttribute:Ooe,doesSchemaExist:Noe,doesTableExist:boe,stringifyObj:yoe,ms_to_time:Ioe,changeExtension:woe,getEnvCliRootPath:OA,noBootFile:Coe,httpRequest:Loe,transformReq:Doe,convertToMS:Uoe,PACKAGE_ROOT:Ye.PACKAGE_ROOT};function Qie(e){return e instanceof Error?e:new Error(e)}a(Qie,"errorizeMessage");function Mr(e){return e==null}a(Mr,"isEmpty");function zie(e){return!Mr(e)&&(e||e===0||e===""||F0(e))}a(zie,"isNotEmptyAndHasValue");function Xs(e){return Mr(e)||e.length===0||e.size===0}a(Xs,"isEmptyOrZeroLength");function Jie(e){if(Mr(e))return!0;for(let t=0;t<e.length;t++)if(Mr(e[t]))return!0;return!1}a(Jie,"arrayHasEmptyValues");function jie(e){if(Xs(e))return!0;for(let t=0;t<e.length;t++)if(Xs(e[t]))return!0;return!1}a(jie,"arrayHasEmptyOrZeroLengthValues");function Xie(...e){try{return e.join(Ii.sep)}catch{console.error(e)}}a(Xie,"buildFolderPath");function F0(e){return Mr(e)?!1:e===!0||e===!1}a(F0,"isBoolean");function Zie(e){return Mr(e)?!1:typeof e=="object"}a(Zie,"isObject");function eoe(e){return Xs(e)?Kie:e.slice(0,-Wie)}a(eoe,"stripFileExtension");function toe(e){return Mr(e)||e===""||typeof e!="string"?e:B0[e]!==void 0?B0[e]:x0(e)===!0?Number(e):$ie.test(e)?new Date(e):e}a(toe,"autoCast");function G0(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(G0,"autoCastJSON");function AA(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=AA(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=AA(r);s!==r&&(e[t]=s)}return e}else return G0(e)}a(AA,"autoCastJSONDeep");function x0(e){if(e.startsWith("0.")&&v0(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&v0(e))}a(x0,"autoCasterIsNumberCheck");async function roe(e){if(Xs(e))throw new Error(`Directory path: ${e} does not exist`);try{await M0.emptyDir(e),await M0.remove(e)}catch(t){throw mr.error(`Error removing files in ${e} -- ${t}`),t}}a(roe,"removeDir");function soe(e,t){if(Xs(e)){mr.info("Invalid current version sent as parameter.");return}if(Xs(t)){mr.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(soe,"compareVersions");function noe(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(noe,"isCompatibleDataVersion");function ioe(e){if(Mr(e))return e;let t=String(e);return t==="."?Ye.UNICODE_PERIOD:t===".."?Ye.UNICODE_PERIOD+Ye.UNICODE_PERIOD:t.replace(Ye.FORWARD_SLASH_REGEX,Ye.UNICODE_FORWARD_SLASH)}a(ioe,"escapeRawValue");function ooe(e){if(Mr(e))return e;let t=String(e);return t===Ye.UNICODE_PERIOD?".":t===Ye.UNICODE_PERIOD+Ye.UNICODE_PERIOD?"..":String(e).replace(Ye.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(ooe,"unescapeValue");function aoe(e,t){if(Mr(e))return mr.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+ch.EOL}!Xs(s)&&s[0]===";"?r+=" "+s+n+ch.EOL:Xs(s)||(r+=s+"="+n+ch.EOL)}catch{mr.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(aoe,"stringifyProps");function k0(){let e;try{e=ch.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(k0,"getHomeDir");function coe(){let e=Ii.join(k0(),Ye.HDB_HOME_DIR_NAME,Ye.BOOT_PROPS_FILE_NAME);return H0.existsSync(e)||(e=Ii.join(__dirname,"../","hdb_boot_properties.file")),e}a(coe,"getPropsFilePath");function uoe(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(uoe,"timeoutPromise");async function loe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=Bie.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(loe,"isPortTaken");function _oe(e){try{return Ye.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){mr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(_oe,"isClusterOperation");function doe(e,t){let r=(_e(),re(be)).getDatabases();if(!r[e])return lh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return lh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(doe,"checkGlobalSchemaTable");function Eoe(e,t){if(Mr(t)){mr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Mr(e)||Xs(e)){mr.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){mr.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){mr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Eoe,"getClusterUser");function foe(){P0.parsePromise=function(e,t,r){return new Promise(function(s,n){P0.parse(e,{header:!0,transformHeader:$0,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(foe,"promisifyPapaParse");function $0(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a($0,"removeBOM");function hoe(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;mr.info(`Got cluster status event response: ${Fie(n)}`);try{i.cancel()}catch{mr.error("Error trying to cancel timeout.")}s(n)})})}a(hoe,"createEventPromise");async function moe(e){let t=!0,r=0;do await q0(Vie*r++),(await qie.findPs(e)).length>0&&(t=!1);while(t&&r<Yie);if(t)throw new Error(`process ${e} was not started`)}a(moe,"checkProcessRunning");function poe(e,t){let r=V0(e);if(r)return r;let s=Y0(e,t);if(s)return s}a(poe,"checkSchemaTableExist");function V0(e){let{getDatabases:t}=(_e(),re(be));if(!t()[e])return lh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(V0,"checkSchemaExists");function Y0(e,t){let{getDatabases:r}=(_e(),re(be));if(!r()[e][t])return lh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Y0,"checkTableExists");function Soe(){let e=uh().utc().add(1,Ye.MOMENT_DAYS_TAG).startOf(Ye.MOMENT_DAYS_TAG).unix(),t=uh().utc().unix();return e-t}a(Soe,"getStartOfTomorrowInSeconds");function Toe(){return uh().utc().format("DD-MM-YYYY")}a(Toe,"getLimitKey");function goe(e){try{let t=new Hie(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){mr.error("Got an error back ticking items."),mr.error(t)}}a(goe,"backtickASTSchemaItems");function Roe(e){return[e]}a(Roe,"createForkArgs");function Aoe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Aoe,"autoCastBoolean");function Ooe(e,t){let{getDatabases:r}=(_e(),re(be)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Ooe,"getTableHashAttribute");function Noe(e){let{getDatabases:t}=(_e(),re(be));return t()[e]!==void 0}a(Noe,"doesSchemaExist");function boe(e,t){let{getDatabases:r}=(_e(),re(be));return r()[e]?.[t]!==void 0}a(boe,"doesTableExist");function yoe(e){try{return JSON.stringify(e)}catch{return e}}a(yoe,"stringifyObj");function Ioe(e){let t=uh.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(Ioe,"ms_to_time");function woe(e,t){let r=Ii.basename(e,Ii.extname(e));return Ii.join(Ii.dirname(e),r+t)}a(woe,"changeExtension");function OA(){if(process.env[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Gie(process.argv);if(e[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(OA,"getEnvCliRootPath");var RA;function Coe(){if(RA)return RA;let e=OA();OA()&&H0.pathExistsSync(Ii.join(e,Ye.HDB_CONFIG_FILE))&&(RA=!0)}a(Coe,"noBootFile");function Loe(e,t){let r;return e.protocol==="http:"?r=kie:r=xie,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(Loe,"httpRequest");function Doe(e){if(!e.schema&&!e.database){e.schema=Ye.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Doe,"transformReq");function Uoe(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(Uoe,"convertToMS")});var Y=m((bRe,z0)=>{"use strict";var NA=require("fs-extra"),Ts=require("path"),W0=require("os"),Moe=require("properties-reader"),vl=C(),vo=F(),ne=R(),_h=et(),Poe="Error initializing environment manager",dh="BOOT_PROPS_FILE_PATH",Q0=!1,voe={[ne.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ne.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ne.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},xn={};z0.exports={BOOT_PROPS_FILE_PATH:dh,getHdbBasePath:Boe,setHdbBasePath:Hoe,get:qoe,initSync:Goe,setProperty:he,initTestEnvironment:xoe};function Boe(){return xn[ne.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(Boe,"getHdbBasePath");function Hoe(e){xn[ne.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Hoe,"setHdbBasePath");function qoe(e){let t=_h.getConfigValue(e);return t===void 0?xn[e]:t}a(qoe,"get");function he(e,t){voe[e]&&(xn[e]=t),_h.updateConfigObject(e,t)}a(he,"setProperty");function Foe(){let e;try{e=vo.getPropsFilePath(),NA.accessSync(e,NA.constants.F_OK|NA.constants.R_OK),Q0=!0;let t=Moe(e);return xn[ne.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ne.HDB_SETTINGS_NAMES.INSTALL_USER),xn[ne.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ne.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),xn[dh]=e,!0}catch{return vl.trace(`Environment manager found no properties file at ${e}`),!1}}a(Foe,"doesPropFileExist");function Goe(e=!1){try{(Q0||Foe()||vo.noBootFile())&&(_h.initConfig(e),xn[ne.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=_h.getConfigValue(ne.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){vl.error(Poe),vl.error(t),console.error(t),process.exit(1)}}a(Goe,"initSync");function xoe(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=Ts.join(__dirname,"../../","unitTests");xn[dh]=Ts.join(u,"hdb_boot_properties.file"),he(ne.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ts.join(u,"settings.test")),he(ne.HDB_SETTINGS_NAMES.INSTALL_USER,W0.userInfo()?W0.userInfo().username:void 0),he(ne.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Ts.join(u,"envDir","utility","keys","privateKey.pem")),he(ne.HDB_SETTINGS_NAMES.CERT_KEY,Ts.join(u,"envDir","utility","keys","certificate.pem")),he(ne.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Ts.join(u,"envDir","utility","keys","privateKey.pem")),he(ne.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Ts.join(u,"envDir","utility","keys","certificate.pem")),he(ne.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),he(ne.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ts.join(u,"envDir","log")),he(ne.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),he(ne.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),he(ne.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),he(ne.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ts.join(u,"envDir")),he(ne.CONFIG_PARAMS.STORAGE_PATH,Ts.join(u,"envDir")),he(ne.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,vo.isEmpty(n)?!0:n),he(ne.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,vo.isEmpty(n)?!0:n),he(ne.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(ne.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,vo.isEmpty(i)?!1:i),he(ne.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,vo.isEmpty(i)?!1:i),he(ne.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),he(ne.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),he(ne.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),he(ne.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),he(ne.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ts.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),he(ne.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,vo.isEmpty(c)?!1:c),o&&(he("CORS_ACCESSLIST",o),he(ne.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(he(ne.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),he(ne.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(he(ne.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),he(ne.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(he(ne.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),he(ne.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${dh}. Please check your boot props and settings files`;vl.fatal(r),vl.error(t)}}a(xoe,"initTestEnvironment")});var yA=m((IRe,J0)=>{"use strict";var Bl=Y();Bl.initSync();var rc=require("fs-extra"),bA=require("path"),sc=R(),koe=require("crypto"),$oe=require("uuid").v4;J0.exports=Voe;function Voe(){if(Bl.getHdbBasePath()!==void 0){let e=bA.join(Bl.getHdbBasePath(),sc.LICENSE_KEY_DIR_NAME,sc.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=bA.join(Bl.getHdbBasePath(),sc.LICENSE_KEY_DIR_NAME,sc.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=bA.join(Bl.getHdbBasePath(),sc.LICENSE_KEY_DIR_NAME,sc.JWT_ENUM.JWT_PASSPHRASE_NAME);try{rc.accessSync(r),rc.accessSync(e),rc.accessSync(t)}catch(s){if(s.code==="ENOENT"){let n=$oe(),i=koe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:n}});rc.writeFileSync(r,n),rc.writeFileSync(e,i.privateKey),rc.writeFileSync(t,i.publicKey)}else throw s}}}a(Voe,"checkJWTTokenExist")});var X0=m((CRe,j0)=>{"use strict";var IA=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,s){this.info_id=t,this.data_version_num=r,this.hdb_version_num=s}};j0.exports={HdbInfoInsertObject:IA}});var tF=m((DRe,eF)=>{"use strict";var Z0=R(),wA=class{static{a(this,"UpgradeObject")}constructor(t,r){this[Z0.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[Z0.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};eF.exports={UpgradeObject:wA}});var Eh=m((MRe,sF)=>{"use strict";var es=require("prompt"),nc=require("chalk"),rF=C(),gs=require("os"),CA=Gi(),LA=["yes","y"];async function Yoe(e){let t=`${gs.EOL}`+nc.bold.green("Your current HarperDB version requires that we complete an update process.")+`${gs.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${gs.EOL}${gs.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${gs.EOL}`;es.override=CA(["CONFIRM_UPGRADE"]),es.start(),es.message=t;let r={properties:{CONFIRM_UPGRADE:{description:nc.magenta(`${gs.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s;try{s=await es.get([r])}catch(n){return rF.error("There was an error when prompting user about an upgrade."),rF.error(n),!1}return LA.includes(s.CONFIRM_UPGRADE)}a(Yoe,"forceUpdatePrompt");async function Koe(e){let t=`${gs.EOL}`+nc.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${gs.EOL}`);es.override=CA(["CONFIRM_DOWNGRADE"]),es.start(),es.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:nc.magenta(`${gs.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s=await es.get([r]);return LA.includes(s.CONFIRM_DOWNGRADE)}a(Koe,"forceDowngradePrompt");async function Woe(){let e=`${gs.EOL}`+nc.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");es.override=CA(["GENERATE_CERTS"]),es.start(),es.message=e;let t={properties:{GENERATE_CERTS:{description:nc.magenta(`${gs.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await es.get([t]);return LA.includes(r.GENERATE_CERTS)}a(Woe,"upgradeCertsPrompt");sF.exports={forceUpdatePrompt:Yoe,forceDowngradePrompt:Koe,upgradeCertsPrompt:Woe}});var UA=m((vRe,nF)=>{"use strict";var DA=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};nF.exports=DA});var oF=m((xRe,iF)=>{"use strict";var Qoe=F(),zoe=et(),HRe=C(),qRe=require("path"),FRe=require("fs"),GRe=R();iF.exports={getOldPropsValue:Joe};function Joe(e,t,r=!1){let s=t.getRaw(e);return Qoe.isNotEmptyAndHasValue(s)?s:r?zoe.getDefaultConfig(e):""}a(Joe,"getOldPropsValue")});var lF=m(($Re,uF)=>{"use strict";var wi=require("path"),Ci=require("fs-extra"),joe=require("properties-reader"),Xoe=UA(),at=C(),{getOldPropsValue:Le}=oF(),{HDB_SETTINGS_NAMES:Q,CONFIG_PARAMS:Bo}=R(),Ho=et(),fh=Y(),aF=F(),Zs=R(),MA=new Xoe("3.1.0"),cF=[];function Zoe(){let e=joe(fh.get(Q.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),at.info(t);let r=` ;Settings for the HarperDB process.
|
|
33
33
|
|
|
34
34
|
;The directory selected during install where the database files reside.
|
|
35
35
|
${Q.HDB_ROOT_KEY} = ${Le(Q.HDB_ROOT_KEY,e)}
|
|
@@ -52,9 +52,9 @@ ${Q.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${Le(Q.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
|
|
|
52
52
|
;Limit the amount of time the parser will wait to receive the complete HTTP headers.. Defaults to 60,000 ms (1 minute).
|
|
53
53
|
${Q.SERVER_HEADERS_TIMEOUT_KEY} = ${Le(Q.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
|
|
54
54
|
;Define whether to log to file or not.
|
|
55
|
-
${Q.LOG_TO_FILE} = ${
|
|
55
|
+
${Q.LOG_TO_FILE} = ${Ho.getDefaultConfig(Bo.LOGGING_FILE)}
|
|
56
56
|
;Define whether to log to stdout/stderr or not. NOTE HarperDB must run in foreground in order to receive the std stream from HarperDB.
|
|
57
|
-
${Q.LOG_TO_STDSTREAMS} = ${
|
|
57
|
+
${Q.LOG_TO_STDSTREAMS} = ${Ho.getDefaultConfig(Bo.LOGGING_STDSTREAMS)}
|
|
58
58
|
;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
|
|
59
59
|
${Q.LOG_LEVEL_KEY} = ${Le(Q.LOG_LEVEL_KEY,e)}
|
|
60
60
|
;The path where log files will be written. If there is no file name included in the path, the log file will be created by default as 'hdb_log.log'
|
|
@@ -87,22 +87,22 @@ ${Q.OPERATION_TOKEN_TIMEOUT_KEY} = ${Le(Q.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
|
|
|
87
87
|
;Defines the length of time a refresh token will be valid until it expires. Example values: https://github.com/vercel/ms
|
|
88
88
|
${Q.REFRESH_TOKEN_TIMEOUT_KEY} = ${Le(Q.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
|
|
89
89
|
;The port the IPC server will run on.
|
|
90
|
-
${Q.IPC_SERVER_PORT} = ${
|
|
90
|
+
${Q.IPC_SERVER_PORT} = ${Ho.getDefaultConfig(Bo.IPC_NETWORK_PORT)}
|
|
91
91
|
;Run HDB in the foreground.
|
|
92
|
-
${Q.RUN_IN_FOREGROUND} = ${
|
|
92
|
+
${Q.RUN_IN_FOREGROUND} = ${Ho.getDefaultConfig(Bo.OPERATIONSAPI_FOREGROUND)}
|
|
93
93
|
;Set to true to enable custom API endpoints. Requires a valid enterprise license.
|
|
94
|
-
${Q.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${
|
|
94
|
+
${Q.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${Ho.getDefaultConfig(Bo.CUSTOMFUNCTIONS_ENABLED)}
|
|
95
95
|
;The port used to access the custom functions server.
|
|
96
|
-
${Q.CUSTOM_FUNCTIONS_PORT_KEY} = ${
|
|
96
|
+
${Q.CUSTOM_FUNCTIONS_PORT_KEY} = ${Ho.getDefaultConfig(Bo.CUSTOMFUNCTIONS_NETWORK_PORT)}
|
|
97
97
|
;The path to the folder containing HarperDB custom function files.
|
|
98
|
-
${Q.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${
|
|
98
|
+
${Q.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${wi.join(Le(Q.HDB_ROOT_KEY,e),"custom_functions")}
|
|
99
99
|
;Set the max number of processes HarperDB will start for the Custom Functions server
|
|
100
|
-
${Q.MAX_CUSTOM_FUNCTION_PROCESSES} = ${
|
|
101
|
-
`,s=
|
|
100
|
+
${Q.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Ho.getDefaultConfig(Bo.HTTP_THREADS)}
|
|
101
|
+
`,s=fh.get("settings_path"),n=wi.dirname(s),i=wi.join(n,"3_1_0_upgrade_settings.bak");try{at.info(`Backing up old settings file to: ${i}`),Ci.copySync(s,i)}catch(c){throw at.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{at.info("New settings file values for 3.1.0 upgrade:",r),at.info(`Creating new/upgraded settings file at '${s}'`),Ci.writeFileSync(s,r),at.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),at.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),at.error(c),Ci.copySync(i,s),c}fh.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),at.info(o),o}a(Zoe,"updateSettingsFile_3_1_0");function eae(){let e=wi.join(aF.getHomeDir(),Zs.HDB_HOME_DIR_NAME,Zs.LICENSE_KEY_DIR_NAME,Zs.LICENSE_FILE_NAME),t=wi.join(aF.getHomeDir(),Zs.HDB_HOME_DIR_NAME,Zs.LICENSE_KEY_DIR_NAME,Zs.REG_KEY_FILE_NAME),r=wi.join(fh.getHdbBasePath(),Zs.LICENSE_KEY_DIR_NAME,Zs.LICENSE_FILE_NAME),s=wi.join(r,Zs.LICENSE_FILE_NAME),n=wi.join(r,Zs.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),at.info(i);let o="Creating .license directory";console.log(o),at.info(o),Ci.mkdirpSync(r);try{Ci.accessSync(e);try{let c="Moving licence file";console.log(c),at.info(c),Ci.moveSync(e,s);let u="License file successfully moved.";console.log(u),at.info(u)}catch{let u="moving license file failed";console.error(u),at.error(u)}}catch{let u=`license file '${e}' does not exist.`;console.warn(u),at.warn(u)}try{Ci.accessSync(t);try{let c="Moving registration file";console.log(c),at.info(c),Ci.moveSync(t,n);let u="Registration file successfully moved.";console.log(u),at.info(u)}catch{let u="moving registration file failed";console.error(u),at.error(u)}}catch{let u=`registration file '${t}' does not exist.`;console.warn(u),at.warn(u)}}a(eae,"moveLicenseFiles");MA.sync_functions.push(Zoe);MA.sync_functions.push(eae);cF.push(MA);uF.exports=cF});var hF=m((YRe,fF)=>{"use strict";var Pr=we(),{insertRecords:tae}=Wi(),rae=Ht(),Li=Ge(),sae=F(),kn=C(),nae=F(),en=require("fs-extra"),$n=require("path"),iae=require("cli-progress"),Hl=require("assert"),oae=require("pino"),aae=Y();fF.exports=cae;var hh,_F,mh,PA,$t,ql=!1;async function cae(e=!0){return hh=aae.getHdbBasePath(),_F=$n.join(hh,"schema"),mh=$n.join(hh,"4_0_0_upgrade_tmp"),PA=$n.join(hh,"transactions"),console.info("Reindexing upgrade started for schemas"),kn.notify("Reindexing upgrade started for schemas"),await dF(_F,!1,e),await en.pathExists(PA)&&(console.info(`
|
|
102
102
|
|
|
103
|
-
Reindexing upgrade started for transaction logs`),xn.notify("Reindexing upgrade started for transaction logs"),await oF(LA,!0,e)),xn.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(vl?", but errors occurred":"")}a(tae,"reindexUpgrade");async function oF(e,t,r){let s=await Xs.readdir(e),n=s.length;for(let i=0;i<n;i++){let o=s[i],c=kn.join(e,o.toString());if(o===".DS_Store")continue;let u=await Xs.readdir(c),l=u.length;for(let _=0;_<l;_++){let d=u[_];if(d!==".DS_Store"&&Xs.statSync(kn.join(c,d)).isDirectory())try{await rae(o,d,t),$t.info(`Reindexing started for ${o}.${d}`),xn.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await nae(o,d,c,t,r),$t.info(`Reindexing completed for ${o}.${d}`),xn.notify(`Reindexing completed for ${o}.${d}`)}catch(E){vl=!0,E.schema_path=c,E.table_name=d,xn.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),xn.error(E),$t.error(E),console.error(E)}}}if(!vl)try{await Xs.rm(dh,{recursive:!0})}catch{}}a(oF,"processTables");async function rae(e,t,r){let n=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=kn.join(dh,n);await Xs.ensureDir(dh),await Xs.writeFile(i,""),$t=Zoe({level:"debug",formatters:{bindings(){}}},i)}a(rae,"initPinoLogger");var sae=20;async function nae(e,t,r,s,n){let i;try{i=await Pr.openEnvironment(r,t,s)}catch(R){if(R.message==="MDB_INVALID: File is not an LMDB file"){xn.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),$t.error(R);return}throw R}let o=aae(i.dbis),c=Pr.openDBI(i,o),u=Object.keys(i.dbis),l=Pr.statDBI(i,o);$t.info(`Old environment stats: ${JSON.stringify(l)}`);let _=new Xoe.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});_.start(l.entryCount,0,{});let d=await Pr.createEnvironment(r,t,!1);Pr.createDBI(d,o,!1,!0);let E=[];try{for(let R of c.getRange({start:!1}))R.value=Object.assign({},R.value),E.push(R),s||e==="system"&&(t==="hdb_schema"&&(R.key=R.key.toString(),R.value.name=R.value.name.toString()),t==="hdb_table"&&(R.key=R.key.toString(),R.value.schema=R.value.schema.toString(),R.value.name=R.value.name.toString()),t==="hdb_attribute"&&(R.key=R.key.toString(),R.value.schema=R.value.schema.toString(),R.value.table=R.value.table.toString(),R.value.attribute=R.value.attribute.toString())),E.length>sae&&await f();await f()}catch(R){throw vl=!0,$t.error(R),R}async function f(){let R,P=E.map(({value:O})=>O);s?R=await Promise.all(P.map(O=>iae(d,O))):R=await Qoe(d,o,u.filter(O=>O!=="__blob__"),P,!1);for(let O=0,w=E.length;O<w;O++){let{key:x,value:k}=E[O];$t.info(`Record hash value: ${x} hash: ${o}`);let J;s?J=R[O]:J=R.written_hashes.indexOf(x)>-1,Pl(J,!0),oae(d,o,k[o],s),$t.info(`Insert success, written hashes: ${R.written_hashes}`),_.increment()}E=[],_.value/_.total*100%10===0&&xn.notify(`${e}.${t} ${_.value}/${_.total} records inserted`),$t.info(`${_.value}/${_.total} records inserted`)}a(f,"finishOutstanding"),_.stop();let h=Pr.statDBI(i,o),S=Pr.statDBI(d,o);if($t.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${S.entryCount}`),Pl.deepStrictEqual(h.entryCount,S.entryCount),await Pr.closeEnvironment(i),await Pr.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],n){let R=kn.join(r,t),P=kn.join(R,"data.mdb"),V=kn.join(R,"lock.mdb");await Xs.unlink(P),await Xs.unlink(V),await Xs.rmdir(R),$t.info(`Deleted old environment files from schema folder: ${P}, ${V}`)}let p=await Pr.openEnvironment(r,t),b=Pr.statDBI(p,o);$t.info(`New stats: ${JSON.stringify(S)}. New stats after move: ${JSON.stringify(b)}`),Pl.deepStrictEqual(b.entryCount,S.entryCount),await Pr.closeEnvironment(p),delete global.lmdb_map[`${e}.${t}`]}a(nae,"processTable");async function iae(e,t){Pr.initializeDBIs(e,Ci.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ci.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Ci.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Ci.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),joe.isEmpty(t.user_name)||e.dbis[Ci.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let s of t.hash_values)e.dbis[Ci.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s,r)})}a(iae,"insertTransaction");function oae(e,t,r,s){let i=e.dbis[t].get(r);Pl.deepStrictEqual(typeof i,"object");let o;if(s){let c={[Ci.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Ci.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,u]of o)if(c!==t&&e.dbis[c]!==void 0&&!Joe.isEmptyOrZeroLength(u))if(s&&c==="hash_value")for(let l=0,_=u.length;l<_;l++){let d=u[l];aF(e,c,d,r)}else aF(e,c,u,r)}a(oae,"validateIndices");function aF(e,t,r,s){try{let n=!1,i=zoe.getIndexedValues(r);if(!i)return;for(let o of i)n=e.dbis[t].doesExist(o,s),n||$t.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${s}`),Pl.deepStrictEqual(n,!0)}catch(n){vl=!0,$t.error(n),console.error(n)}}a(aF,"validateIndex");function aae(e){let t;for(let[r,s]of Object.entries(e))if(s.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(aae,"getHashDBI")});var PA=m((vRe,_F)=>{"use strict";var cae=require("mkcert"),Eh=require("path"),DA=require("fs-extra"),UA=D(),uae=$(),MA=g(),sc=ap(),lae=Fi(),_ae=et();_F.exports={generateKeys:dae,updateConfigCert:lF};async function dae(){let e=uae.getHdbBasePath(),t=Eh.join(e,MA.LICENSE_KEY_DIR_NAME),r=await cae.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:365,caKey:sc.CERTIFICATE_VALUES.key,caCert:sc.CERTIFICATE_VALUES.cert}),s=Eh.join(t,sc.CERTIFICATE_PEM_NAME),n=Eh.join(t,sc.PRIVATEKEY_PEM_NAME),i=Eh.join(t,sc.CA_PEM_NAME);try{await DA.writeFile(s,r.cert)}catch(o){throw UA.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await DA.writeFile(n,r.key)}catch(o){throw UA.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await DA.writeFile(i,sc.CERTIFICATE_VALUES.cert)}catch(o){throw UA.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}lF(s,n,i)}a(dae,"generateKeys");function lF(e,t,r){let s=lae(Object.keys(MA.CONFIG_PARAM_MAP),!0),n=MA.CONFIG_PARAMS,i={[n.CLUSTERING_TLS_CERTIFICATE]:s[n.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?s[n.CLUSTERING_TLS_CERTIFICATE]:e,[n.CLUSTERING_TLS_PRIVATEKEY]:s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CLUSTERING_TLS_CERT_AUTH]:s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE]:s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]:e,[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY]:s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH]:s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]:r,[n.OPERATIONSAPI_TLS_CERTIFICATE]:s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]:e,[n.OPERATIONSAPI_TLS_PRIVATEKEY]:s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]?s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]:t,[n.OPERATIONSAPI_TLS_CERT_AUTH]:s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]:r};_ae.updateConfigValue(void 0,void 0,i,!1,!0)}a(lF,"updateConfigCert")});var mF=m((qRe,hF)=>{"use strict";var fh=require("path"),Li=require("fs-extra"),Eae=wA(),Bo=D(),dF=et(),vA=$(),gs=g(),hh=F(),fae=require("properties-reader"),hae=os(),mae=Gd(),pae=jt(),HRe=require("util"),Sae=pae.searchByValue,Tae=Xt(),gae=aE(),Rae=Me(),Aae=uF(),EF=PA(),Oae=uh(),ql=new Eae("4.0.0"),fF=[],Bl,Hl;async function Nae(){try{if(await Oae.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Bl){let t=hh.changeExtension(Bl,".bak");await Li.move(Bl,t)}if(Hl){let t=hh.changeExtension(Hl,".bak");await Li.move(Hl,t)}await EF.generateKeys()}else console.log("Using existing certificates."),EF.updateConfigCert(Bl,Hl,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(Nae,"generateNewKeys");async function bae(){console.log("Updating HarperDB nodes."),Bo.info("Updating HarperDB nodes.");let e=[];try{let t=new hae(gs.SYSTEM_SCHEMA_NAME,gs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await Sae(t)),s=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!Rae.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let _=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(_),_}let u={host:c.host,port:c.port};e.push(u);let l=[];for(let _=0,d=c.subscriptions.length;_<d;_++){let E=c.subscriptions[_],f=E.channel.split(":");l.push({schema:f[0],table:f[1],publish:E.publish,subscribe:E.subscribe})}s.push({name:c.name,subscriptions:l,system_info:{hdb_version:gs.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(hh.isEmptyOrZeroLength(s))return;let n=new mae(gs.SYSTEM_SCHEMA_NAME,gs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,s);await Tae.update(n)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{gae.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(bae,"updateNodes");async function yae(){let e=vA.get(gs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(fh.join("config","settings.js"))){Bo.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),Bo.info(t);let r=fh.dirname(e),s=vA.get(gs.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),n=fh.join(s,"backup","4_0_0_upgrade_settings.bak"),i=fh.join(s,gs.HDB_CONFIG_FILE);try{Bo.info(`Backing up old settings file to: ${n}`),console.log(`Backing up old settings file to: ${n}`),Li.copySync(e,n)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{Bo.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),Bo.info("Updating env variables with new settings values");let d=dF.initOldConfig(e);Bl=d[gs.CONFIG_PARAMS.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()],Hl=d[gs.CONFIG_PARAMS.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()],dF.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=hh.getPropsFilePath();Li.accessSync(o,Li.constants.F_OK|Li.constants.R_OK);let u=fae(o).get(gs.HDB_SETTINGS_NAMES.INSTALL_USER),l=`settings_path = ${i}
|
|
104
|
-
install_user = ${u}`;try{Li.writeFileSync(o,l)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{vA.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let _="New settings file for 4.0.0 upgrade successfully created.";try{Li.removeSync(r),console.log(_),Bo.info(_)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(yae,"updateSettingsFile_4_0_0");ql.async_functions.push(yae);ql.async_functions.push(Nae);ql.async_functions.push(Aae);ql.async_functions.push(bae);fF.push(ql);hF.exports=fF});var BA=m((GRe,gF)=>{"use strict";var Ho=F(),Iae=g(),pF=D(),{DATA_VERSION:wae,UPGRADE_VERSION:Cae}=Iae.UPGRADE_JSON_FIELD_NAMES_ENUM,SF=nF(),mh=mF(),qo=new Map;SF&&SF.forEach(e=>{qo.set(e.version,e)});mh&&mh.forEach(e=>{qo.set(e.version,e)});mh&&mh.forEach(e=>{qo.set(e.version,e)});function Lae(){return[...qo.keys()].sort(Ho.compareVersions)}a(Lae,"getSortedVersions");function TF(e){let t=e[wae],r=e[Cae];return Ho.isEmptyOrZeroLength(t)||Ho.isEmptyOrZeroLength(r)?(pF.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),pF.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...qo.keys()].sort(Ho.compareVersions).filter(function(s){return Ho.compareVersions(s,t)>0&&Ho.compareVersions(s,r)<=0})}a(TF,"getVersionsForUpgrade");function Dae(e){return TF(e).length>0}a(Dae,"hasUpgradesRequired");function Uae(e){return Ho.isEmptyOrZeroLength(e)?null:qo.has(e)?qo.get(e):null}a(Uae,"getDirectiveByVersion");gF.exports={getSortedVersions:Lae,getDirectiveByVersion:Uae,getVersionsForUpgrade:TF,hasUpgradesRequired:Dae}});var ph=m((kRe,bF)=>{"use strict";var Mae=require("util"),HA=require("chalk"),Pae=require("os"),AF=Xt(),vae=jt(),vr=g(),OF=K0(),FA=tp(),{UpgradeObject:RF}=z0(),{forceDowngradePrompt:Bae}=uh(),Hae=ki(),Fl=D(),nc=F(),GA=xr(),qae=(_e(),te(ye)),Fae=BA(),Gae=Mae.promisify(GA.setSchemaDataToGlobal),xae=vae.searchByValue,kae="info_id",$ae="2.9.9",Vae="3.0.0";async function Yae(e){let t=new OF.HdbInfoInsertObject(1,e,e),r=new FA.InsertObject(vr.OPERATIONS_ENUM.INSERT,vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,vr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return GA.setSchemaDataToGlobal(),AF.insert(r)}a(Yae,"insertHdbInstallInfo");async function qA(e){let t,r=await NF(),s=new Map([[0,{}]]);for(let c of r)s.set(c.info_id,c);let i=Math.max.apply(null,[...s.keys()])+1;t=new OF.HdbInfoInsertObject(i,e,e);let o=new FA.InsertObject(vr.OPERATIONS_ENUM.INSERT,vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,vr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Gae(),AF.insert(o)}a(qA,"insertHdbUpgradeInfo");async function NF(){let e=new FA.NoSQLSeachObject(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,kae,vr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await xae(e))}catch(r){Fl.info(r)}return t}a(NF,"getAllHdbInfoRecords");async function Kae(){let e=await NF();if(e.length===0)return;let t,r=new Map;for(let n of e)r.set(n.info_id,n);let s=Math.max.apply(null,[...r.keys()]);return t=r.get(s),t}a(Kae,"getLatestHdbInfoRecord");async function Wae(){Fl.info("Checking if HDB software has been updated");try{let e=Hae.version(),t=await Kae(),r;if(nc.isEmpty(t))r=$ae;else if(r=t.data_version_num,nc.compareVersions(r.toString(),e.toString())>0){if(!nc.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(HA.yellow(`This instance's data was last run on version ${r}`)),console.error(HA.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${Pae.EOL}${vr.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");nc.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(HA.yellow(`This instance's data was last run on version ${r}`)),await Bae(new RF(r,e))?await qA(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(GA.setSchemaDataToGlobal(),Qae(r),e.toString()===r.toString())return;let s=new RF(r,e);if(Fae.hasUpgradesRequired(s))return s;nc.compareVersions(s.data_version.toString(),s.upgrade_version.toString())<0&&(await qA(s.upgrade_version),Fl.notify(`HarperDB running on upgraded version: ${s.upgrade_version}`))}catch(e){throw Fl.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Fl.fatal(e),e}}a(Wae,"getVersionUpdateInfo");function Qae(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${vr.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in qae.databases.system))throw console.log(t),new Error(t);if(!nc.isEmpty(e)&&e<Vae)throw console.log(t),new Error(t)}a(Qae,"checkIfInstallIsSupported");bF.exports={insertHdbInstallInfo:Yae,insertHdbUpgradeInfo:qA,getVersionUpdateInfo:Wae}});var LF=m((VRe,CF)=>{"use strict";var xA=require("joi"),{boolean:zae,string:yF,number:Jae}=xA.types(),IF=require("fs-extra"),Gl=g(),wF=require("path"),jae=He();CF.exports=Xae;function Xae(e){let t=yF.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=xA.object({[Gl.INSTALL_PROMPTS.ROOTPATH]:xA.custom(Zae),[Gl.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Jae.min(0),[Gl.INSTALL_PROMPTS.TC_AGREEMENT]:yF.valid("yes","YES","Yes"),[Gl.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Gl.INSTALL_PROMPTS.CLUSTERING_ENABLED]:zae});return jae.validateBySchema(e,r)}a(Xae,"installValidator");function Zae(e,t){if(IF.existsSync(wF.join(e,"system/hdb_user/data.mdb"))||IF.existsSync(wF.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(Zae,"validateRootAvailable")});var UF=m((KRe,DF)=>{"use strict";var{mkdirpSync:ece}=require("fs-extra"),Zs=require("path"),ic=g(),$A=D(),tce=kr(),kA=dn(),rce=De();DF.exports=sce;async function sce(e){$A.trace("Mounting HarperDB"),Rs(e),Rs(Zs.join(e,"backup")),Rs(Zs.join(e,"trash")),Rs(Zs.join(e,"keys")),Rs(Zs.join(e,"keys",ic.LICENSE_FILE_NAME)),Rs(Zs.join(e,"log")),Rs(Zs.join(e,"doc")),Rs(Zs.join(e,"database")),Rs(Zs.join(e,ic.TRANSACTIONS_DIR_NAME)),Rs(Zs.join(e,"clustering","leaf")),Rs(Zs.join(e,"components")),await nce()}a(sce,"mountHdb");async function nce(){let e=iu(),t=Object.keys(kA);for(let r=0;r<t.length;r++){let s=t[r],n=kA[s].hash_attribute;try{rce.initSystemSchemaPaths(ic.SYSTEM_SCHEMA_NAME,s);let i=new e(ic.SYSTEM_SCHEMA_NAME,s,n);i.attributes=kA[s].attributes;let o=i.attributes.find(({attribute:c})=>c===n);o.isPrimaryKey=!0,await tce.createTable(s,i)}catch(i){throw $A.error(`issue creating environment for ${ic.SYSTEM_SCHEMA_NAME}.${s}: ${i}`),i}}}a(nce,"createLMDBTables");function Rs(e){ece(e,{mode:ic.HDB_FILE_PERMISSIONS}),$A.info(`Directory ${e} created`)}a(Rs,"makeDirectory")});var Sh=m((zRe,$F)=>{"use strict";var KA=require("os"),BF=require("inquirer"),$n=require("fs-extra"),ice=require("properties-reader"),Fo=require("chalk"),Pi=require("path"),oce=require("human-readable-ids").hri,ace=require("ora"),ct=D(),vi=$(),ac=F(),VA=Fi(),HF=ph(),qF=ki(),Z=g(),cce=LF(),uce=UF(),FF=et(),lce=er(),_ce=Bd(),dce=AA(),Ece=xr(),fce=require("util").promisify,hce=fce(Ece.setSchemaDataToGlobal),mce=PA(),oc=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Vt=a(e=>Fo.magenta.bold(e),"HDB_PROMPT_MSG"),pce="https://harperdb.io/legal/end-user-license-agreement",Bi=KA.EOL,Di="",Sce="yes",MF="Starting HarperDB install...",PF="HarperDB installation was successful.",vF="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Tce="An out of date version of HarperDB is already installed.",YA="It appears that HarperDB is already installed. Exiting install...",gce="Aborting install",Rce=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),Ace=new RegExp(/^[^\s.,*>]+$/),Oce=KA.homedir(),Nce=Pi.join(Oce,Z.HDB_ROOT_DIR_NAME),bce=9925,yce="HDB_ADMIN",Ice="CLUSTER_USER",pr={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},QRe=ac.getEnvCliRootPath(),Mi;$F.exports=GF;GF.createSuperUser=kF;async function GF(){console.log(Vt(Bi+MF+Bi)),ct.notify(MF);let e=Cce(),t=cce(e);if(t)throw t.message;await Lce(),await Dce(e);let r=await wce(e);Mi=r[Z.INSTALL_PROMPTS.ROOTPATH],await $n.pathExists(Pi.join(Mi,Z.HDB_CONFIG_FILE))&&(console.error(YA),process.exit());let s=ace({prefixText:Vt("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),ac.isEmpty(Mi))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");vi.setHdbBasePath(Mi),await uce(Mi),await Uce(),await Mce(r),ct.initLogSettings(!0),await kF(r),await vce(r),await mce.generateKeys(),await Bce(),dce(),s.stop(),console.log(Vt(Bi+PF+Bi)),ct.notify(PF)}a(GF,"install");async function wce(e){ct.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:oc,when:Ui(e[Z.INSTALL_PROMPTS.ROOTPATH],pr.DESTINATION),name:Z.INSTALL_PROMPTS.ROOTPATH,prefix:Di,default:Nce,validate:async n=>en(n)?en(n):await $n.pathExists(Pi.join(n,"system","hdb_user.mdb"))?`'${n}' is already in use. Please enter a different path.`:!0,message:Vt(pr.DESTINATION)},{type:"input",transformer:oc,when:Ui(e[Z.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],pr.HDB_PORT),name:Z.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:Di,default:bce,validate:n=>Rce.test(n)?!0:"Invalid port.",message:Vt(pr.HDB_PORT)},{type:"input",transformer:oc,when:Ui(e[Z.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],pr.HDB_USERNAME),name:Z.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Di,default:yce,validate:n=>en(n)?en(n):(t=n,!0),message:Vt(pr.HDB_USERNAME)},{type:"password",when:Ui(e[Z.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],pr.HDB_PASS),name:Z.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Di,validate:n=>en(n)?en(n):!0,message:Vt(pr.HDB_PASS)}];if(ac.autoCastBoolean(e[Z.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let n=[{type:"input",transformer:oc,when:Ui(e[Z.INSTALL_PROMPTS.CLUSTERING_NODENAME],pr.NODE_NAME),name:Z.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Di,default:oce.random(),validate:i=>Ace.test(i)?!0:"Invalid node name, must not contain ., * or >",message:Vt(pr.NODE_NAME)},{type:"input",transformer:oc,when:Ui(e[Z.INSTALL_PROMPTS.CLUSTERING_USER],pr.CLUSTER_USERNAME),name:Z.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Di,default:Ice,validate:i=>en(i)?en(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:Vt(pr.CLUSTER_USERNAME)},{type:"password",when:Ui(e[Z.INSTALL_PROMPTS.CLUSTERING_PASSWORD],pr.CLUSTER_PASS),name:Z.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Di,validate:i=>en(i)?en(i):!0,message:Vt(pr.CLUSTER_PASS)}];r.push(...n)}let s=await BF.prompt(r);if(Object.keys(s).length===0)return e;for(let n in s)e[n]===void 0&&(e[n]=s[n]);return e}a(wce,"installPrompts");function Ui(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Vt(t)} ${Fo.gray("[hidden]")}`),ct.trace(`${Vt(t)} [hidden]`)):(console.log(`${Vt(t)} ${e}`),ct.trace(`${Vt(t)} ${e}`)),!1):!0}a(Ui,"displayCmdEnvVar");function en(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(en,"checkForEmptyValue");function Cce(){let e=Object.keys(Z.INSTALL_PROMPTS),t=VA(e),r=VA(Object.keys(Z.CONFIG_PARAM_MAP),!0),s={};for(let n of e){let i=Z.CONFIG_PARAM_MAP[n.toLowerCase()];t[n]?i===void 0?s[n]=t[n]:s[i.toUpperCase()]=t[n]:i!==void 0&&r[i.toLowerCase()]&&(s[n]=r[i.toLowerCase()])}return s}a(Cce,"checkForPromptOverride");async function Lce(){ct.trace("Checking for existing install.");let e=ac.getPropsFilePath(),t=await $n.pathExists(e),r;if(t){ct.trace(`Install found an existing boot prop file at:${e}`);let s=ice(e),n=FF.getConfigValue(Z.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||s.get(Z.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await $n.pathExists(n)}if(!t&&ac.noBootFile()&&(r=!0),r){if(ct.trace(`Install found existing HDB config at:${e}`),await HF.getVersionUpdateInfo()){let n=`Please use \`harperdb upgrade\` to update to ${qF.version()}. Exiting install...`;console.log(Bi+Fo.magenta.bold(Tce)),console.log(Fo.magenta.bold(n)),ct.error(n)}else console.log(Bi+Fo.magenta.bold(YA)),ct.error(YA);process.exit(0)}}a(Lce,"checkForExistingInstall");async function Dce(e){ct.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${pce}${Bi}and can be viewed by typing or copying and pasting the URL into your web browser.${Bi}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:Di,transformer:oc,when:Ui(e[Z.INSTALL_PROMPTS.TC_AGREEMENT],t),name:Z.INSTALL_PROMPTS.TC_AGREEMENT,message:Vt(t),validate:n=>n.toLowerCase()==="yes"||n.toLowerCase()==="no"?!0:Fo.yellow("Please enter 'yes' or 'no'")},s=await BF.prompt([r]);s[Z.INSTALL_PROMPTS.TC_AGREEMENT]&&s[Z.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Sce&&(console.log(Fo.yellow(vF)),ct.error(vF),process.exit(0))}a(Dce,"termsAgreement");async function Uce(){let e=Pi.join(Mi,Z.HDB_CONFIG_FILE),t;try{t=KA.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
|
|
105
|
-
install_user = ${t}`,s=ac.getHomeDir(),n=Pi.join(s,Z.HDB_HOME_DIR_NAME),i=Pi.join(n,Z.LICENSE_KEY_DIR_NAME);try{$n.mkdirpSync(n,{mode:Z.HDB_FILE_PERMISSIONS}),$n.mkdirpSync(i,{mode:Z.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${Z.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Pi.join(n,Z.BOOT_PROPS_FILE_NAME);try{await $n.writeFile(o,r)}catch(c){throw ct.error(`There was an error creating the boot file at path: ${o}`),c}vi.setProperty(Z.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),vi.setProperty(Z.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),vi.setProperty(vi.BOOT_PROPS_FILE_PATH,o)}}a(Uce,"createBootPropertiesFile");async function Mce(e){ct.trace("Creating HarperDB config file");let t=VA(Object.keys(Z.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{FF.createConfigFile(t),vi.initSync()}catch(r){Pce(r)}}a(Mce,"createConfigFile");function Pce(e){ct.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(gce);let t=Pi.resolve(vi.get(vi.BOOT_PROPS_FILE_PATH),"../");t&&$n.removeSync(t),Mi&&$n.removeSync(Mi),process.exit(1)}a(Pce,"rollbackInstall");async function xF(e,t){ct.trace("Creating admin user"),await hce();let r;try{r=await _ce.addRole(e)}catch(s){if(s.message.includes("already exists"))t=void 0;else throw s.message+="Error creating role",s}if(t)try{t.role=r.role,await lce.addUser(t)}catch(s){throw s.message=`Error creating user - ${s}`,s}}a(xF,"createAdminUser");async function kF(e){ct.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[Z.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[Z.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await xF(t,r),delete e[Z.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[Z.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(kF,"createSuperUser");async function vce(e){ct.trace("Creating Cluster user.");let t;e[Z.INSTALL_PROMPTS.CLUSTERING_USER]&&e[Z.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[Z.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[Z.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await xF({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[Z.INSTALL_PROMPTS.CLUSTERING_USER],delete e[Z.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(vce,"createClusterUser");async function Bce(){let e=qF.version();if(e)await HF.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Bce,"insertHdbVersionInfo")});var KF=m((jRe,YF)=>{"use strict";var WA=F(),Br=D(),VF=BA();YF.exports={processDirectives:Hce};async function Hce(e){console.log("Starting upgrade process...");let t=VF.getVersionsForUpgrade(e),r=Gce(t),s=[],n=r.length;for(let i=0;i<n;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Br.notify(c),console.log(c);let u=[],l=[];try{u=qce(o.sync_functions)}catch(_){throw Br.error(`Error while running an upgrade script for ${o.version}`),_}try{l=await Fce(o.async_functions)}catch(_){throw Br.error(`Error while running an upgrade script for ${o.version}`),_}s.push(...u,...l)}return s}a(Hce,"processDirectives");function qce(e){if(WA.isEmptyOrZeroLength(e))return Br.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Br.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Br.info(`Running function ${r.name}`),!(r instanceof Function)){Br.info("Variable being processed is not a function");continue}let s=r();Br.info(s),t.push(s)}return t}a(qce,"runSyncFunctions");async function Fce(e){if(WA.isEmptyOrZeroLength(e))return Br.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Br.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let s=0;s<r;s++){let n=e[s];if(Br.info(`Running function ${n.name}`),!(n instanceof Function)){Br.info("Variable being processed is not a function");continue}let i=await n();Br.info(i),t.push(i)}return t}a(Fce,"runAsyncFunctions");function Gce(e){if(WA.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=VF.getDirectiveByVersion(r);s&&t.push(s)}return t}a(Gce,"getUpgradeDirectivesToInstall")});var JA=m((ZRe,XF)=>{"use strict";var Th=$();Th.initSync();var JF=require("chalk"),WF=require("fs-extra"),Yn=D(),Vn=g(),QF=ki(),xce=KF(),QA=F(),jF=ph(),kce=uh(),zF=Vh(),$ce=xr(),Vce=require("util").promisify,Yce=Vce($ce.setSchemaDataToGlobal),zA,{UPGRADE_VERSION:gh}=Vn.UPGRADE_JSON_FIELD_NAMES_ENUM;XF.exports={upgrade:Kce};async function Kce(e){await Yce(),zA===void 0&&(zA=Na()),WF.existsSync(Th.get(Th.BOOT_PROPS_FILE_PATH))||(xl("The hdb_boot_properties file was not found. Please install HDB.",Vn.LOG_LEVELS.ERROR),process.exit(1)),WF.existsSync(Th.get(Vn.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(xl("The hdb settings file was not found. Please make sure HDB is installed.",Vn.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await jF.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),xl(`This version of HarperDB is ${QF.version()}`,Vn.LOG_LEVELS.INFO);let r=t[gh]?t[gh]:QF.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Vn.HDB_SUPPORT_ADDRESS}`),Yn.notify("Missing new version field from upgrade info object"),process.exit(1)),await Wce();let s,n=0;try{s=await kce.forceUpdatePrompt(t)}catch(i){Yn.error("There was an error when prompting user about upgrade."),Yn.error(i),s=!1,n=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(n)),Yn.info(`Starting upgrade to version ${r}`),await Qce(t),xl(`HarperDB was successfully upgraded to version ${t[gh]}`,Vn.LOG_LEVELS.INFO)}a(Kce,"upgrade");async function Wce(){let e=!1,t=await zF.findPs(Vn.HDB_PROC_NAME);if(QA.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await zF.findPs("hdb_express");QA.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await zA.list();QA.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(JF.red(r)),Yn.error(r),process.exit(1)}}a(Wce,"checkIfRunning");async function Qce(e){try{await xce.processDirectives(e)}catch(t){throw xl("There was an error during the data upgrade. Please check the logs.",Vn.LOG_LEVELS.ERROR),t}try{await jF.insertHdbUpgradeInfo(e[gh])}catch(t){Yn.error("Error updating the 'hdb_info' system table."),Yn.error(t)}}a(Qce,"runUpgrade");function xl(e,t=void 0){t||(t=Yn.info),Yn[t](e),console.log(JF.magenta(e))}a(xl,"printToLogAndConsole")});var sG=m((tAe,rG)=>{"use strict";var{promises:XA,createReadStream:zce,createWriteStream:Jce}=require("fs"),{createGzip:jce}=require("zlib"),{promisify:Xce}=require("util"),{pipeline:Zce}=require("stream"),eue=Xce(Zce),tue=require("path"),xo=$();xo.initSync();var Go=D(),{CONFIG_PARAMS:kl,ITC_EVENT_TYPES:rue}=g(),{onMessageFromWorkers:sue}=tt(),nue=6e4,iue="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",oue="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",jA,eG;rG.exports=tG;sue(e=>{e.type===rue.RESTART&&(xo.initSync(!0),clearInterval(eG),xo.get(kl.LOGGING_ROTATION_ENABLED)&&tG())});async function tG(){try{let e=Go.getLogFilePath(),t=xo.get(kl.LOGGING_ROTATION_MAXSIZE),r=xo.get(kl.LOGGING_ROTATION_INTERVAL);if(!t&&!r){Go.error(iue);return}let s=xo.get(kl.LOGGING_ROTATION_PATH);if(!s){Go.error(oue);return}let n;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?n=c*1e9:o==="M"?n=c*1e6:n=c*1e3}let i;if(r){let o=r.slice(-1),c=r.slice(0,-1);o==="D"?i=c*1440:o==="H"?i=c*60:i=c}jA=Date.now()/6e4,Go.trace("Log rotate enabled, maxSize:",t,"interval:",r),eG=setInterval(async()=>{if(n){let o;o=await XA.stat(e),o.size>=n&&await ZF(e,s)}i&&Date.now()/6e4-jA>=i&&(await ZF(e,s),jA=Date.now()/6e4)},nue).unref()}catch(e){Go.error(e)}}a(tG,"logRotator");async function ZF(e,t){let r=xo.get(kl.LOGGING_ROTATION_COMPRESS),s=tue.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await eue(zce(e),jce(),Jce(s)),await XA.unlink(e)):await XA.rename(e,s),Go.closeLogFile(),Go.notify(`hdb.log rotated, old log moved to ${s}`)}a(ZF,"moveLogFile")});var uc=m((_Ae,lG)=>{"use strict";var Os=$();Os.initSync();var sAe=ya(),ut=g(),Yt=D(),ko=require("fs-extra"),cc=require("path"),aue=AA(),cue=Sh(),ZA=require("chalk"),uue=xi(),Zr=F(),nG=et(),iG=Fi(),lue=mE(),_ue=JA(),due=sG(),Eue=require("minimist"),{PACKAGE_ROOT:fue}=g(),{startHTTPThreads:hue,startSocketServer:nAe,mostIdleRouting:iAe,remoteAffinityRouting:oAe}=(wf(),te(IR)),mue=ph(),{isMainThread:pue}=require("worker_threads"),aAe=dn(),cAe=Xn(),uAe=Wp(),lAe=iu(),eO=g(),As,Sue="Upgrade complete. Starting HarperDB.",Tue="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",gue="HarperDB not found, starting install process.",Rue="There was an error during install, check install_log.log for more details. Exiting.",Aue="HarperDB successfully started.";async function oG(e=!1,t=!1){if(console.log(ZA.magenta("Starting HarperDB...")),await uG()===!1){console.log(gue);try{await cue()}catch(n){console.error(Rue,n),Yt.error(n),process.exit(1)}}await ko.writeFile(cc.join(Os.get(eO.CONFIG_PARAMS.ROOTPATH),eO.HDB_PID_FILE),`${process.pid}`),Yt.info("HarperDB PID",process.pid),As===void 0&&(As=Na());let r;try{let n=await mue.getVersionUpdateInfo();n!==void 0&&(r=n[ut.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await _ue.upgrade(n),console.log(Sue))}catch(n){r?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${r}. Exiting HarperDB.`),Yt.error(n)):(console.error(Tue),Yt.error(n)),process.exit(1)}if(!e){let n=iG(Object.keys(ut.CONFIG_PARAM_MAP),!0);!Zr.isEmpty(n)&&!Zr.isEmptyOrZeroLength(Object.keys(n))&&nG.updateConfigValue(void 0,void 0,n,!0,!0)}aue(),Nue(),Zr.autoCastBoolean(Os.get(ut.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&pue&&await lue.generateNatsConfig(t)}a(oG,"initialize");async function aG(e=!1){try{let t=Eue(process.argv);t.ROOTPATH&&nG.updateConfigObject("settings_path",cc.join(t.ROOTPATH,ut.HDB_CONFIG_FILE)),await oG(e,!0);let r=Zr.autoCastBoolean(Os.get(ut.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)),s=process.env.IS_SCRIPTED_SERVICE&&!t.service,n=r,i=Zr.autoCastBoolean(Os.get(ut.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY));if(Zr.isEmpty(t.service))await hue(Os.get(eO.CONFIG_PARAMS.HTTP_THREADS)),n&&(s||await As.startClusteringProcesses(),await As.startClusteringThreads());else{if(typeof t.service!="string"){let c=`Run service argument expected a string but received: ${t.service}`;Yt.error(c),console.log(c),process.exit(1)}let o=t.service.split(",");for(let c of o){let u=c.toLowerCase();if(ut.PROCESS_DESCRIPTORS_VALIDATE[u]===void 0){Yt.error(`Run received unrecognized service command argument: ${u}`);continue}if(u===ut.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase()&&!i){Yt.error(`${u} is not enabled in settings`);continue}if(u.includes("clustering")&&!r){Yt.error(`${u} is not enabled in settings`);continue}u==="clustering"?await As.startClusteringProcesses():await As.startService(ut.PROCESS_DESCRIPTORS_VALIDATE[u]);let l=`${ut.PROCESS_DESCRIPTORS_VALIDATE[u]} successfully started.`;Yt.notify(l),console.log(l)}}Os.get(ut.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await due(),s||cG()}catch(t){console.error(t),Yt.error(t),process.exit(1)}}a(aG,"main");function cG(){Yt.suppressLogging(()=>{console.log(ZA.magenta(""+ko.readFileSync(cc.join(fue,"utility/install/ascii_logo.txt")))),console.log(ZA.magenta(`|------------- HarperDB ${uue.version} successfully started ------------|`))}),Yt.notify(Aue)}a(cG,"started");async function Oue(){if(bue())return aG();try{As===void 0&&(As=Na()),As.enterPM2Mode(),await oG(),Zr.autoCastBoolean(Os.get(ut.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await As.startClusteringProcesses(),await As.startService(ut.PROCESS_DESCRIPTORS.HDB),cG(),process.exit(0)}catch(e){console.error(e),Yt.error(e),process.exit(1)}}a(Oue,"launch");function Nue(){let e=cc.join(Os.getHdbBasePath(),ut.LICENSE_KEY_DIR_NAME,ut.LICENSE_FILE_NAME),t=cc.join(e,ut.LICENSE_FILE_NAME),r=cc.join(e,ut.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=iG(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Zr.isEmpty(s)||Zr.isEmpty(n))return;ko.mkdirpSync(e),ko.writeFileSync(r,s),ko.writeFileSync(t,n)}catch(s){let n=`Failed to write license & fingerprint due to: ${s.message}`;console.error(n),Yt.error(n)}}a(Nue,"writeLicenseFromVars");lG.exports={launch:Oue,main:aG,isHdbInstalled:uG};async function uG(){try{await ko.stat(Zr.getPropsFilePath()),await ko.stat(Os.get(ut.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Zr.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw Yt.error(`Error checking for HDB install - ${e}`),e}return!0}a(uG,"isHdbInstalled");function bue(){return Zr.autoCastBoolean(Os.get(ut.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND))}a(bue,"getRunInForeground")});var dG=m((EAe,_G)=>{var yue=Sh(),Iue=D();_G.exports=wue;async function wue(){try{await yue()}catch(e){console.error("There was an error during the install."),console.error(e),Iue.error(e),process.exit(1)}}a(wue,"install")});var hG=m((hAe,fG)=>{"use strict";var Cue=uE(),Lue=D(),EG="Registration failed.";async function Due(){let e;try{e=await Cue.register()}catch(t){return Lue.error(`Registration error ${t}`),EG}return e||EG}a(Due,"register");fG.exports={register:Due}});var TG=m((pAe,SG)=>{"use strict";var Uue=D(),Mue=g(),Pue=require("util"),vue=require("child_process"),mG=Pue.promisify(vue.exec),Bue=On(),$l=Na(),pG="Stopping HarperDB.";SG.exports=Hue;async function Hue(){if(console.log(pG),Uue.notify(pG),await $l.isServiceRegistered(Mue.HDB_PROC_DESCRIPTOR)){$l.enterPM2Mode();let r=await $l.getUniqueServicesList();for(let s in r)await $l.stop(s)}await $l.kill();let t=await Bue.getHDBProcessInfo();t.clustering.forEach(r=>{mG(`kill ${r.pid}`)}),t.core.forEach(r=>{mG(`kill ${r.pid}`)})}a(Hue,"stop")});var NG=m((TAe,OG)=>{"use strict";var tO=require("fs-extra"),rO=require("path"),que=require("yaml"),Vl=We(),Yl=g(),gG=Me(),RG=D(),Fue=er(),Gue=iE(),xue=sE(),kue=On(),AG=$();AG.initSync();var tn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored"},Sr={LEAF:"leaf server",HUB:"hub server"},Rh;OG.exports=$ue;async function $ue(){Rh=AG.get(Yl.CONFIG_PARAMS.ROOTPATH);let e={harperdb:{status:tn.STOPPED}},t;try{t=Number.parseInt(await tO.readFile(rO.join(Rh,Yl.HDB_PID_FILE),"utf8"))}catch(s){throw s.code===Yl.NODE_ERROR_CODES.ENOENT?new Error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB"):s}let r=await kue.getHDBProcessInfo();for(let s of r.core)if(s.pid===t){e.harperdb.status=tn.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await Vue(r),e.clustering[Sr.HUB].status===tn.RUNNING&&e.clustering[Sr.LEAF].status===tn.RUNNING){let s=[],n=await Gue({});for(let o of n.nodes){let c={};for(let u in o)c[u.replace("_"," ")]=o[u];s.push(c)}e.clustering.network=s;let i=await xue.clusterStatus();e.clustering.replication={"node name":i.node_name,"is enabled":i.is_enabled,connections:[]};for(let o of i.connections){let c={};c["node name"]=o?.node_name,c.status=o?.status,c.ports={clustering:o?.ports?.clustering,"operations api":o?.ports?.operations_api},c["latency ms"]=o?.latency_ms,c.uptime=o?.uptime,c.subscriptions=o?.subscriptions,c["system info"]={"hdb version":o?.system_info?.hdb_version,"node version":o?.system_info?.node_version,platform:o?.system_info?.platform},e.clustering.replication.connections.push(c)}await Vl.closeConnection()}console.log(que.stringify(e)),process.exit()}a($ue,"status");async function Vue(e){let t={[Sr.HUB]:{},[Sr.LEAF]:{}};if(e.clustering.length===0)return t[Sr.HUB].status=tn.STOPPED,t[Sr.LEAF].status=tn.STOPPED,t;let{port:r}=Vl.getServerConfig(Yl.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:s,decrypt_hash:n}=await Fue.getClusterUser();try{(await Vl.createConnection(r,s,n,!1)).close(),t[Sr.HUB].status=tn.RUNNING}catch{t[Sr.HUB].status=tn.ERRORED}let{port:i}=Vl.getServerConfig(Yl.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await Vl.createConnection(i,s,n,!1)).close(),t[Sr.LEAF].status=tn.RUNNING}catch{t[Sr.LEAF].status=tn.ERRORED}try{t[Sr.HUB].pid=Number.parseInt(await tO.readFile(rO.join(Rh,"clustering",gG.PID_FILES.HUB),"utf8"))}catch(o){RG.error(o),t[Sr.HUB].pid=void 0}try{t[Sr.LEAF].pid=Number.parseInt(await tO.readFile(rO.join(Rh,"clustering",gG.PID_FILES.LEAF),"utf8"))}catch(o){RG.error(o),t[Sr.LEAF].pid=void 0}return t}a(Vue,"getHubLeafStatus")});var DG=m(()=>{"use strict";var Yue=require("os"),Nh=require("https"),Hi=require("fs-extra"),Kue=require("yaml"),Wue=require("human-readable-ids").hri,{pipeline:bG}=require("stream/promises"),{createWriteStream:bh,ensureDir:yh}=require("fs-extra"),{join:rn}=require("path"),iO=require("lodash"),Que=$(),zue=On(),CG=D(),Ah=et(),{restart:Jue}=ya(),LG=F(),yG=We(),jue=xr(),{isHdbInstalled:Xue,main:Zue}=uc(),ele=Sh(),oO=g(),{SYSTEM_TABLE_NAMES:IG,SYSTEM_SCHEMA_NAME:tle,CONFIG_PARAMS:Kl,OPERATIONS_ENUM:Hr}=oO,rle=9925,sle="info",nle=1e4,ile="clone-node-config.yaml",aO=[IG.ROLE_TABLE_NAME,IG.USER_TABLE_NAME],Wl=process.env.HDB_LEADER_USERNAME,Ql=process.env.HDB_LEADER_PASSWORD,zl=process.env.HDB_LEADER_URL,sO=process.env.HDB_LEADER_CLUSTERING_HOST,ole=process.env.HDB_LEADER_CLUSTERING_PORT,nO,Ie,lt,Je,cO,lc;async function ale(){if(await Xue())throw new Error("Existing install of HarperDB found on clone node.");if(console.info("Cloning node: "+zl),Ie?.rootPath)lc=Ie.rootPath;else try{lc=process.env.ROOTPATH?process.env.ROOTPATH:rn(Yue.homedir(),oO.HDB_ROOT_DIR_NAME)}catch(t){throw console.error(t),new Error("There was an setting default rootPath. Please set 'rootPath' in clone-node-config.yaml")}let e;try{e=rn(lc,ile),Ie=Kue.parseDocument(Hi.readFileSync(e,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(e+" not found, using default config values.")}cO=Ie?.clustering?.nodeName??Wue.random(),lt=await Ih({operation:Hr.GET_CONFIGURATION}),lt=await JSON.parse(lt.body),global.fetch?(await _le(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await lle(),await ule(),await cle(),await dle(),await Ele(),console.info("Successfully cloned node: "+zl)}a(ale,"cloneNode");async function cle(){console.info("Cloning configuration"),nO=lt?.clustering?.enabled;let e={[Kl.ROOTPATH]:lc};if(nO&&Ie?.clustering?.enabled!==!1){if(sO==null)throw new Error("'HDB_LEADER_CLUSTERING_HOST' must be defined");e[Kl.CLUSTERING_ENABLED]=!0;let s=lt?.clustering?.hubServer?.cluster?.network?.routes,n=parseInt(ole)||lt?.clustering?.hubServer?.cluster?.network?.port;e[Kl.CLUSTERING_USER]=lt?.clustering?.user;let i=Que.get(Kl.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:sO,port:n}):i=[{host:sO,port:n}],Array.isArray(s)&&i.concat(s),e[Kl.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES]=i}let t=Ie?.componentConfig?.exclude;t=t?t.reduce((s,n)=>({...s,[n.name]:!0}),{}):[];for(let s in lt)lt[s]?.package&&!t[s]&&await Ah.addConfig(s,lt[s]);Ie?.databases&&await Ah.addConfig("databases",lt?.schemas);let r=Ah.flattenConfig(Ie);for(let s in r){let n=oO.CONFIG_PARAM_MAP[s.toLowerCase()];n&&(e[n]=r[s])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(e.clustering_nodeName=cO),CG.info("Cloning config:",e),iO.isEmpty(e)||await Ah.updateConfigValue(void 0,void 0,e,!1,!0)}a(cle,"cloneConfig");async function ule(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=lc,!Wl)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=Wl,!Ql)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=Ql,process.env.OPERATIONSAPI_NETWORK_PORT=Ie?.operationsApi?.network?.port??rle,process.env.CLUSTERING_NODENAME=cO,process.env.CLUSTERING_LOGLEVEL=Ie?.clustering?.logLevel??sle,await ele()}a(ule,"installHDB");async function lle(){console.info("Cloning system database");let e=_c("system");await yh(e);let t=rn(e,"system.mdb"),r=bh(t,{overwrite:!0}),s=await wG({operation:Hr.GET_BACKUP,database:"system",tables:aO},r);await Hi.utimes(t,Date.now(),new Date(s.date)),Je=await Ih({operation:Hr.DESCRIBE_ALL}),Je=await JSON.parse(Je.body);let n=Ie?.databaseConfig?.excludeDatabases;if(n=n?n.reduce((o,c)=>({...o,[c.database]:!0}),{}):{},lt.schemas)for(let o in lt.schemas)Object.keys(lt.schemas[o]).includes("tables")&&(n[o]=!0,console.info(`Excluding database '${o}' from clone because leader node has custom pathing configured for one or more of its tables`));let i=Ie?.databaseConfig?.excludeTables;i=i?i.reduce((o,c)=>({...o,[c.database==null?null:c.database+c.table]:!0}),{}):{};for(let o in Je){if(n[o]){Je[o]="excluded";continue}if(iO.isEmpty(Je[o]))continue;let c=[],u=!1;for(let h in Je[o])i[o+h]?(u=!0,Je[o][h]="excluded"):c.push(h);let l;u?(console.info(`Cloning database: ${o} tables: ${c}`),l={operation:Hr.GET_BACKUP,database:o,tables:c}):(console.info(`Cloning database: ${o}`),l={operation:Hr.GET_BACKUP,database:o});let _=_c(o);await yh(_);let d=rn(_,o+".mdb"),E=bh(d,{overwrite:!0}),f=await wG(l,E);await Hi.utimes(d,Date.now(),new Date(f.date))}}a(lle,"cloneTables");async function _le(){console.info("Cloning system database");let e=await Oh({operation:Hr.GET_BACKUP,database:"system",tables:aO},!0),t=_c("system");await yh(t);let r=rn(t,"system.mdb");await bG(e.body,bh(r,{overwrite:!0})),await Hi.utimes(r,Date.now(),new Date(e.headers.get("date"))),Je=await Oh({operation:Hr.DESCRIBE_ALL}),Je=await Je.json();let s=Ie?.databaseConfig?.excludeDatabases;if(s=s?s.reduce((i,o)=>({...i,[o.database]:!0}),{}):{},lt.schemas)for(let i in lt.schemas)Object.keys(lt.schemas[i]).includes("tables")&&(s[i]=!0,console.info(`Excluding database '${i}' from clone because leader node has custom pathing configured for one or more of its tables`));let n=Ie?.databaseConfig?.excludeTables;n=n?n.reduce((i,o)=>({...i,[o.database==null?null:o.database+o.table]:!0}),{}):{};for(let i in Je){if(s[i]){Je[i]="excluded";continue}if(iO.isEmpty(Je[i]))continue;let o=[],c=!1;for(let f in Je[i])n[i+f]?(c=!0,Je[i][f]="excluded"):o.push(f);let u;c?(console.info(`Cloning database: ${i} tables: ${o}`),u=await Oh({operation:Hr.GET_BACKUP,database:i,tables:o},!0)):(console.info(`Cloning database: ${i}`),u=await Oh({operation:Hr.GET_BACKUP,database:i},!0));let l=_c(i);await yh(l);let _=new Date(u.headers.get("date")),d=rn(l,`${_.getTime()}-${i}.mdb`);await bG(u.body,bh(d,{overwrite:!0}));let E=rn(l,i+".mdb");await Hi.rename(d,E),await Hi.utimes(E,Date.now(),_)}}a(_le,"cloneTablesFetch");async function Oh(e,t=!1){let r=Ie?.httpsRejectUnauthorized??!1,s=new Nh.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(Wl+":"+Ql).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(zl,{method:"POST",headers:i,body:JSON.stringify(e),agent:s,compress:!0});if(o.ok)return o;throw console.error(`HTTP Error Response: ${o.status} ${o.statusText}`),new Error(await o.text())}a(Oh,"leaderHttpReqFetch");function _c(e){return Ie?.databases&&Ie?.databases[e]?.path||Ie?.storage&&Ie?.storage?.path||rn(lc,"database")}a(_c,"getDbFileDir");async function dle(){let{deployComponent:e}=DE(),t=await Ih({operation:Hr.GET_COMPONENTS});t=await JSON.parse(t.body);let r=[];if(t.entries.length){for(let n of t.entries){if(!n.entries)continue;let i=!1;if(Ie?.componentConfig?.exclude){for(let o of Ie.componentConfig.exclude)if(o?.name!=null&&o.name===n.name){i=!0;break}}i||r.push(n.name)}let s=Ie?.componentConfig?.skipNodeModules!==!1;for(let n of r){console.info("Cloning component: "+n);let i=await Ih({operation:Hr.PACKAGE_COMPONENT,project:n,skip_node_modules:s}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:n})}}}a(dle,"cloneComponents");async function Ele(){if(!nO)return;let e=await zue.getHDBProcessInfo();e.clustering.length===0||e.core.length===0?await Zue():(console.info(await Jue({operation:Hr.RESTART})),await LG.async_set_timeout(nle)),console.info("Clustering cloned tables");let t=Ie?.clusteringConfig?.subscribeToLeaderNode!==!1,r=Ie?.clusteringConfig?.publishToLeaderNode!==!1;await jue.setSchemaDataToGlobalAsync();let s=wu(),n=[],i=await Hi.stat(rn(_c("system"),"system.mdb"));for(let o of aO)n.push({schema:tle,table:o,subscribe:t,publish:r,start_time:i.mtime.toISOString()});for(let o in Je){if(Je[o]==="excluded")continue;let c=await Hi.stat(rn(_c(o),o+".mdb"));for(let u in Je[o])Je[o][u]!=="excluded"&&n.push({schema:o,table:u,subscribe:t,publish:r,start_time:c.mtime.toISOString()})}await yG.createTableStreams(n),CG.info("Sending add_node request to node:",lt?.clustering?.nodeName,"with subscriptions:",n),await s({operation:Hr.ADD_NODE,node_name:lt?.clustering?.nodeName,subscriptions:n},!0),await yG.closeConnection()}a(Ele,"clusterTables");async function Ih(e){let t=new Nh.Agent({rejectUnauthorized:Ie?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(Wl+":"+Ql).toString("base64"),"Content-Type":"application/json"},n=new URL(zl),i={protocol:n.protocol,host:n.hostname,method:"POST",headers:s};return n.protocol==="https:"&&(i.agent=t),n.port&&(i.port=n.port),await LG.httpRequest(i,e)}a(Ih,"leaderHttpReq");async function wG(e,t){let r=new Nh.Agent({rejectUnauthorized:Ie?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(Wl+":"+Ql).toString("base64"),"Content-Type":"application/json"},i=new URL(zl),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:n};return i.protocol==="https:"&&(o.agent=r),i.port&&(o.port=i.port),new Promise((c,u)=>{let l=Nh.request(o,_=>{_.pipe(t),_.on("end",()=>{t.close(),c(_.headers)})});l.on("error",_=>{u(_)}),l.write(JSON.stringify(e)),l.end()})}a(wG,"leaderHttpStream");ale().then().catch(e=>{console.log(e)})});var dc=D(),fle=ki(),uO=g(),UG=require("fs"),MG=require("path"),NAe=require("os"),{PACKAGE_ROOT:hle}=g(),mle=WO(),bAe=$(),ple=(wf(),te(IR)),{SERVICE_ACTIONS_ENUM:Ns}=uO;Sle();function Sle(){let e=mle();if(e)if(e.error){console.error(e.error),dc.error(e.error);return}else e.warn&&(console.warn(e.warn),dc.warn(e.warn));let t;UG.readdir(MG.join(hle,"bin"),r=>{if(r)return dc.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let s;switch(t){case Ns.DEBUG:require("inspector").open(9229),ple.debugMode=!0;case Ns.RUN:let n=process.argv[3];n&&n[0]!=="-"&&(UG.existsSync(MG.join(n,uO.HDB_CONFIG_FILE))?process.env.ROOTPATH=n:process.env.RUN_HDB_APP=n),uc().main();break;case Ns.START:s=uc().launch();break;case Ns.INSTALL:dG()().then(()=>uc().main(!0)).catch(E=>{console.error(E)});break;case Ns.REGISTER:hG().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case Ns.STOP:TG()().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case Ns.RESTART:ya().restart({}).then().catch(E=>{dc.error(E),console.error(`There was an error restarting harperdb. ${E}`),process.exit(1)});break;case Ns.VERSION:fle.printVersion();break;case Ns.UPGRADE:dc.setLogLevel(uO.LOG_LEVELS.INFO),JA().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(E=>{dc.error(`Got an error during upgrade ${E}`)});break;case Ns.STATUS:NG()().then().catch(E=>{console.error(E)});break;case void 0:process.env.HDB_LEADER_URL?DG():uc().main();break;default:console.warn(`The "${t}" command is not understood.`);case Ns.HELP:console.log(`
|
|
103
|
+
Reindexing upgrade started for transaction logs`),kn.notify("Reindexing upgrade started for transaction logs"),await dF(PA,!0,e)),kn.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(ql?", but errors occurred":"")}a(cae,"reindexUpgrade");async function dF(e,t,r){let s=await en.readdir(e),n=s.length;for(let i=0;i<n;i++){let o=s[i],c=$n.join(e,o.toString());if(o===".DS_Store")continue;let u=await en.readdir(c),l=u.length;for(let _=0;_<l;_++){let d=u[_];if(d!==".DS_Store"&&en.statSync($n.join(c,d)).isDirectory())try{await uae(o,d,t),$t.info(`Reindexing started for ${o}.${d}`),kn.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await _ae(o,d,c,t,r),$t.info(`Reindexing completed for ${o}.${d}`),kn.notify(`Reindexing completed for ${o}.${d}`)}catch(E){ql=!0,E.schema_path=c,E.table_name=d,kn.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),kn.error(E),$t.error(E),console.error(E)}}}if(!ql)try{await en.rm(mh,{recursive:!0})}catch{}}a(dF,"processTables");async function uae(e,t,r){let n=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=$n.join(mh,n);await en.ensureDir(mh),await en.writeFile(i,""),$t=oae({level:"debug",formatters:{bindings(){}}},i)}a(uae,"initPinoLogger");var lae=20;async function _ae(e,t,r,s,n){let i;try{i=await Pr.openEnvironment(r,t,s)}catch(g){if(g.message==="MDB_INVALID: File is not an LMDB file"){kn.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),$t.error(g);return}throw g}let o=fae(i.dbis),c=Pr.openDBI(i,o),u=Object.keys(i.dbis),l=Pr.statDBI(i,o);$t.info(`Old environment stats: ${JSON.stringify(l)}`);let _=new iae.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});_.start(l.entryCount,0,{});let d=await Pr.createEnvironment(r,t,!1);Pr.createDBI(d,o,!1,!0);let E=[];try{for(let g of c.getRange({start:!1}))g.value=Object.assign({},g.value),E.push(g),s||e==="system"&&(t==="hdb_schema"&&(g.key=g.key.toString(),g.value.name=g.value.name.toString()),t==="hdb_table"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.name=g.value.name.toString()),t==="hdb_attribute"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.table=g.value.table.toString(),g.value.attribute=g.value.attribute.toString())),E.length>lae&&await f();await f()}catch(g){throw ql=!0,$t.error(g),g}async function f(){let g,x=E.map(({value:I})=>I);s?g=await Promise.all(x.map(I=>dae(d,I))):g=await tae(d,o,u.filter(I=>I!=="__blob__"),x,!1);for(let I=0,b=E.length;I<b;I++){let{key:M,value:J}=E[I];$t.info(`Record hash value: ${M} hash: ${o}`);let B;s?B=g[I]:B=g.written_hashes.indexOf(M)>-1,Hl(B,!0),Eae(d,o,J[o],s),$t.info(`Insert success, written hashes: ${g.written_hashes}`),_.increment()}E=[],_.value/_.total*100%10===0&&kn.notify(`${e}.${t} ${_.value}/${_.total} records inserted`),$t.info(`${_.value}/${_.total} records inserted`)}a(f,"finishOutstanding"),_.stop();let h=Pr.statDBI(i,o),S=Pr.statDBI(d,o);if($t.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${S.entryCount}`),Hl.deepStrictEqual(h.entryCount,S.entryCount),await Pr.closeEnvironment(i),await Pr.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],n){let g=$n.join(r,t),x=$n.join(g,"data.mdb"),V=$n.join(g,"lock.mdb");await en.unlink(x),await en.unlink(V),await en.rmdir(g),$t.info(`Deleted old environment files from schema folder: ${x}, ${V}`)}let T=await Pr.openEnvironment(r,t),A=Pr.statDBI(T,o);$t.info(`New stats: ${JSON.stringify(S)}. New stats after move: ${JSON.stringify(A)}`),Hl.deepStrictEqual(A.entryCount,S.entryCount),await Pr.closeEnvironment(T),delete global.lmdb_map[`${e}.${t}`]}a(_ae,"processTable");async function dae(e,t){Pr.initializeDBIs(e,Li.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Li.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Li.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Li.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),nae.isEmpty(t.user_name)||e.dbis[Li.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let s of t.hash_values)e.dbis[Li.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s,r)})}a(dae,"insertTransaction");function Eae(e,t,r,s){let i=e.dbis[t].get(r);Hl.deepStrictEqual(typeof i,"object");let o;if(s){let c={[Li.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Li.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,u]of o)if(c!==t&&e.dbis[c]!==void 0&&!sae.isEmptyOrZeroLength(u))if(s&&c==="hash_value")for(let l=0,_=u.length;l<_;l++){let d=u[l];EF(e,c,d,r)}else EF(e,c,u,r)}a(Eae,"validateIndices");function EF(e,t,r,s){try{let n=!1,i=rae.getIndexedValues(r);if(!i)return;for(let o of i)n=e.dbis[t].doesExist(o,s),n||$t.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${s}`),Hl.deepStrictEqual(n,!0)}catch(n){ql=!0,$t.error(n),console.error(n)}}a(EF,"validateIndex");function fae(e){let t;for(let[r,s]of Object.entries(e))if(s.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(fae,"getHashDBI")});var qA=m((WRe,pF)=>{"use strict";var hae=require("mkcert"),ph=require("path"),vA=require("fs-extra"),BA=C(),mae=Y(),HA=R(),ic=dp(),pae=Gi(),Sae=et();pF.exports={generateKeys:Tae,updateConfigCert:mF};async function Tae(){let e=mae.getHdbBasePath(),t=ph.join(e,HA.LICENSE_KEY_DIR_NAME),r=await hae.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:365,caKey:ic.CERTIFICATE_VALUES.key,caCert:ic.CERTIFICATE_VALUES.cert}),s=ph.join(t,ic.CERTIFICATE_PEM_NAME),n=ph.join(t,ic.PRIVATEKEY_PEM_NAME),i=ph.join(t,ic.CA_PEM_NAME);try{await vA.writeFile(s,r.cert)}catch(o){throw BA.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await vA.writeFile(n,r.key)}catch(o){throw BA.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await vA.writeFile(i,ic.CERTIFICATE_VALUES.cert)}catch(o){throw BA.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}mF(s,n,i)}a(Tae,"generateKeys");function mF(e,t,r){let s=pae(Object.keys(HA.CONFIG_PARAM_MAP),!0),n=HA.CONFIG_PARAMS,i={[n.CLUSTERING_TLS_CERTIFICATE]:s[n.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?s[n.CLUSTERING_TLS_CERTIFICATE]:e,[n.CLUSTERING_TLS_PRIVATEKEY]:s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CLUSTERING_TLS_CERT_AUTH]:s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE]:s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]:e,[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY]:s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH]:s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]:r,[n.OPERATIONSAPI_TLS_CERTIFICATE]:s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]:e,[n.OPERATIONSAPI_TLS_PRIVATEKEY]:s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]?s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]:t,[n.OPERATIONSAPI_TLS_CERT_AUTH]:s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]:r};Sae.updateConfigValue(void 0,void 0,i,!1,!0)}a(mF,"updateConfigCert")});var AF=m((JRe,RF)=>{"use strict";var Sh=require("path"),Di=require("fs-extra"),gae=UA(),qo=C(),SF=et(),FA=Y(),Rs=R(),Th=F(),Rae=require("properties-reader"),Aae=as(),Oae=kd(),Nae=jt(),zRe=require("util"),bae=Nae.searchByValue,yae=Xt(),Iae=uE(),wae=Me(),Cae=hF(),TF=qA(),Lae=Eh(),xl=new gae("4.0.0"),gF=[],Fl,Gl;async function Dae(){try{if(await Lae.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Fl){let t=Th.changeExtension(Fl,".bak");await Di.move(Fl,t)}if(Gl){let t=Th.changeExtension(Gl,".bak");await Di.move(Gl,t)}await TF.generateKeys()}else console.log("Using existing certificates."),TF.updateConfigCert(Fl,Gl,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(Dae,"generateNewKeys");async function Uae(){console.log("Updating HarperDB nodes."),qo.info("Updating HarperDB nodes.");let e=[];try{let t=new Aae(Rs.SYSTEM_SCHEMA_NAME,Rs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await bae(t)),s=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!wae.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let _=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(_),_}let u={host:c.host,port:c.port};e.push(u);let l=[];for(let _=0,d=c.subscriptions.length;_<d;_++){let E=c.subscriptions[_],f=E.channel.split(":");l.push({schema:f[0],table:f[1],publish:E.publish,subscribe:E.subscribe})}s.push({name:c.name,subscriptions:l,system_info:{hdb_version:Rs.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(Th.isEmptyOrZeroLength(s))return;let n=new Oae(Rs.SYSTEM_SCHEMA_NAME,Rs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,s);await yae.update(n)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{Iae.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(Uae,"updateNodes");async function Mae(){let e=FA.get(Rs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(Sh.join("config","settings.js"))){qo.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),qo.info(t);let r=Sh.dirname(e),s=FA.get(Rs.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),n=Sh.join(s,"backup","4_0_0_upgrade_settings.bak"),i=Sh.join(s,Rs.HDB_CONFIG_FILE);try{qo.info(`Backing up old settings file to: ${n}`),console.log(`Backing up old settings file to: ${n}`),Di.copySync(e,n)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{qo.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),qo.info("Updating env variables with new settings values");let d=SF.initOldConfig(e);Fl=d[Rs.CONFIG_PARAMS.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()],Gl=d[Rs.CONFIG_PARAMS.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()],SF.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=Th.getPropsFilePath();Di.accessSync(o,Di.constants.F_OK|Di.constants.R_OK);let u=Rae(o).get(Rs.HDB_SETTINGS_NAMES.INSTALL_USER),l=`settings_path = ${i}
|
|
104
|
+
install_user = ${u}`;try{Di.writeFileSync(o,l)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{FA.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let _="New settings file for 4.0.0 upgrade successfully created.";try{Di.removeSync(r),console.log(_),qo.info(_)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(Mae,"updateSettingsFile_4_0_0");xl.async_functions.push(Mae);xl.async_functions.push(Dae);xl.async_functions.push(Cae);xl.async_functions.push(Uae);gF.push(xl);RF.exports=gF});var GA=m((XRe,yF)=>{"use strict";var Fo=F(),Pae=R(),OF=C(),{DATA_VERSION:vae,UPGRADE_VERSION:Bae}=Pae.UPGRADE_JSON_FIELD_NAMES_ENUM,NF=lF(),gh=AF(),Go=new Map;NF&&NF.forEach(e=>{Go.set(e.version,e)});gh&&gh.forEach(e=>{Go.set(e.version,e)});gh&&gh.forEach(e=>{Go.set(e.version,e)});function Hae(){return[...Go.keys()].sort(Fo.compareVersions)}a(Hae,"getSortedVersions");function bF(e){let t=e[vae],r=e[Bae];return Fo.isEmptyOrZeroLength(t)||Fo.isEmptyOrZeroLength(r)?(OF.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),OF.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...Go.keys()].sort(Fo.compareVersions).filter(function(s){return Fo.compareVersions(s,t)>0&&Fo.compareVersions(s,r)<=0})}a(bF,"getVersionsForUpgrade");function qae(e){return bF(e).length>0}a(qae,"hasUpgradesRequired");function Fae(e){return Fo.isEmptyOrZeroLength(e)?null:Go.has(e)?Go.get(e):null}a(Fae,"getDirectiveByVersion");yF.exports={getSortedVersions:Hae,getDirectiveByVersion:Fae,getVersionsForUpgrade:bF,hasUpgradesRequired:qae}});var Rh=m((eAe,DF)=>{"use strict";var Gae=require("util"),xA=require("chalk"),xae=require("os"),wF=Xt(),kae=jt(),vr=R(),CF=X0(),$A=op(),{UpgradeObject:IF}=tF(),{forceDowngradePrompt:$ae}=Eh(),Vae=$i(),kl=C(),oc=F(),VA=$r(),Yae=(_e(),re(be)),Kae=GA(),Wae=Gae.promisify(VA.setSchemaDataToGlobal),Qae=kae.searchByValue,zae="info_id",Jae="2.9.9",jae="3.0.0";async function Xae(e){let t=new CF.HdbInfoInsertObject(1,e,e),r=new $A.InsertObject(vr.OPERATIONS_ENUM.INSERT,vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,vr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return VA.setSchemaDataToGlobal(),wF.insert(r)}a(Xae,"insertHdbInstallInfo");async function kA(e){let t,r=await LF(),s=new Map([[0,{}]]);for(let c of r)s.set(c.info_id,c);let i=Math.max.apply(null,[...s.keys()])+1;t=new CF.HdbInfoInsertObject(i,e,e);let o=new $A.InsertObject(vr.OPERATIONS_ENUM.INSERT,vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,vr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Wae(),wF.insert(o)}a(kA,"insertHdbUpgradeInfo");async function LF(){let e=new $A.NoSQLSeachObject(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,zae,vr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Qae(e))}catch(r){kl.info(r)}return t}a(LF,"getAllHdbInfoRecords");async function Zae(){let e=await LF();if(e.length===0)return;let t,r=new Map;for(let n of e)r.set(n.info_id,n);let s=Math.max.apply(null,[...r.keys()]);return t=r.get(s),t}a(Zae,"getLatestHdbInfoRecord");async function ece(){kl.info("Checking if HDB software has been updated");try{let e=Vae.version(),t=await Zae(),r;if(oc.isEmpty(t))r=Jae;else if(r=t.data_version_num,oc.compareVersions(r.toString(),e.toString())>0){if(!oc.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(xA.yellow(`This instance's data was last run on version ${r}`)),console.error(xA.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${xae.EOL}${vr.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");oc.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(xA.yellow(`This instance's data was last run on version ${r}`)),await $ae(new IF(r,e))?await kA(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(VA.setSchemaDataToGlobal(),tce(r),e.toString()===r.toString())return;let s=new IF(r,e);if(Kae.hasUpgradesRequired(s))return s;oc.compareVersions(s.data_version.toString(),s.upgrade_version.toString())<0&&(await kA(s.upgrade_version),kl.notify(`HarperDB running on upgraded version: ${s.upgrade_version}`))}catch(e){throw kl.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),kl.fatal(e),e}}a(ece,"getVersionUpdateInfo");function tce(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${vr.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Yae.databases.system))throw console.log(t),new Error(t);if(!oc.isEmpty(e)&&e<jae)throw console.log(t),new Error(t)}a(tce,"checkIfInstallIsSupported");DF.exports={insertHdbInstallInfo:Xae,insertHdbUpgradeInfo:kA,getVersionUpdateInfo:ece}});var BF=m((rAe,vF)=>{"use strict";var YA=require("joi"),{boolean:rce,string:UF,number:sce}=YA.types(),MF=require("fs-extra"),$l=R(),PF=require("path"),nce=He();vF.exports=ice;function ice(e){let t=UF.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=YA.object({[$l.INSTALL_PROMPTS.ROOTPATH]:YA.custom(oce),[$l.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:sce.min(0),[$l.INSTALL_PROMPTS.TC_AGREEMENT]:UF.valid("yes","YES","Yes"),[$l.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[$l.INSTALL_PROMPTS.CLUSTERING_ENABLED]:rce});return nce.validateBySchema(e,r)}a(ice,"installValidator");function oce(e,t){if(MF.existsSync(PF.join(e,"system/hdb_user/data.mdb"))||MF.existsSync(PF.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(oce,"validateRootAvailable")});var qF=m((nAe,HF)=>{"use strict";var{mkdirpSync:ace}=require("fs-extra"),tn=require("path"),ac=R(),WA=C(),cce=Vr(),KA=En(),uce=De();HF.exports=lce;async function lce(e){WA.trace("Mounting HarperDB"),As(e),As(tn.join(e,"backup")),As(tn.join(e,"trash")),As(tn.join(e,"keys")),As(tn.join(e,"keys",ac.LICENSE_FILE_NAME)),As(tn.join(e,"log")),As(tn.join(e,"doc")),As(tn.join(e,"database")),As(tn.join(e,ac.TRANSACTIONS_DIR_NAME)),As(tn.join(e,"clustering","leaf")),As(tn.join(e,"components")),await _ce()}a(lce,"mountHdb");async function _ce(){let e=cu(),t=Object.keys(KA);for(let r=0;r<t.length;r++){let s=t[r],n=KA[s].hash_attribute;try{uce.initSystemSchemaPaths(ac.SYSTEM_SCHEMA_NAME,s);let i=new e(ac.SYSTEM_SCHEMA_NAME,s,n);i.attributes=KA[s].attributes;let o=i.attributes.find(({attribute:c})=>c===n);o.isPrimaryKey=!0,await cce.createTable(s,i)}catch(i){throw WA.error(`issue creating environment for ${ac.SYSTEM_SCHEMA_NAME}.${s}: ${i}`),i}}}a(_ce,"createLMDBTables");function As(e){ace(e,{mode:ac.HDB_FILE_PERMISSIONS}),WA.info(`Directory ${e} created`)}a(As,"makeDirectory")});var Ah=m((aAe,zF)=>{"use strict";var JA=require("os"),kF=require("inquirer"),Vn=require("fs-extra"),dce=require("properties-reader"),xo=require("chalk"),vi=require("path"),Ece=require("human-readable-ids").hri,fce=require("ora"),ct=C(),Bi=Y(),uc=F(),QA=Gi(),$F=Rh(),VF=$i(),te=R(),hce=BF(),mce=qF(),YF=et(),pce=er(),Sce=qd(),Tce=yA(),gce=$r(),Rce=require("util").promisify,Ace=Rce(gce.setSchemaDataToGlobal),Oce=qA(),cc=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Vt=a(e=>xo.magenta.bold(e),"HDB_PROMPT_MSG"),Nce="https://harperdb.io/legal/end-user-license-agreement",Hi=JA.EOL,Ui="",bce="yes",FF="Starting HarperDB install...",GF="HarperDB installation was successful.",xF="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",yce="An out of date version of HarperDB is already installed.",zA="It appears that HarperDB is already installed. Exiting install...",Ice="Aborting install",wce=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),Cce=new RegExp(/^[^\s.,*>]+$/),Lce=JA.homedir(),Dce=vi.join(Lce,te.HDB_ROOT_DIR_NAME),Uce=9925,Mce="HDB_ADMIN",Pce="CLUSTER_USER",pr={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},oAe=uc.getEnvCliRootPath(),Pi;zF.exports=KF;KF.createSuperUser=QF;async function KF(){console.log(Vt(Hi+FF+Hi)),ct.notify(FF);let e=Bce(),t=hce(e);if(t)throw t.message;await Hce(),await qce(e);let r=await vce(e);Pi=r[te.INSTALL_PROMPTS.ROOTPATH],await Vn.pathExists(vi.join(Pi,te.HDB_CONFIG_FILE))&&(console.error(zA),process.exit());let s=fce({prefixText:Vt("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),uc.isEmpty(Pi))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Bi.setHdbBasePath(Pi),await mce(Pi),await Fce(),await Gce(r),ct.initLogSettings(!0),await QF(r),await kce(r),await Oce.generateKeys(),await $ce(),Tce(),s.stop(),console.log(Vt(Hi+GF+Hi)),ct.notify(GF)}a(KF,"install");async function vce(e){ct.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:cc,when:Mi(e[te.INSTALL_PROMPTS.ROOTPATH],pr.DESTINATION),name:te.INSTALL_PROMPTS.ROOTPATH,prefix:Ui,default:Dce,validate:async n=>rn(n)?rn(n):await Vn.pathExists(vi.join(n,"system","hdb_user.mdb"))?`'${n}' is already in use. Please enter a different path.`:!0,message:Vt(pr.DESTINATION)},{type:"input",transformer:cc,when:Mi(e[te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],pr.HDB_PORT),name:te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:Ui,default:Uce,validate:n=>wce.test(n)?!0:"Invalid port.",message:Vt(pr.HDB_PORT)},{type:"input",transformer:cc,when:Mi(e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],pr.HDB_USERNAME),name:te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Ui,default:Mce,validate:n=>rn(n)?rn(n):(t=n,!0),message:Vt(pr.HDB_USERNAME)},{type:"password",when:Mi(e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],pr.HDB_PASS),name:te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Ui,validate:n=>rn(n)?rn(n):!0,message:Vt(pr.HDB_PASS)}];if(uc.autoCastBoolean(e[te.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let n=[{type:"input",transformer:cc,when:Mi(e[te.INSTALL_PROMPTS.CLUSTERING_NODENAME],pr.NODE_NAME),name:te.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Ui,default:Ece.random(),validate:i=>Cce.test(i)?!0:"Invalid node name, must not contain ., * or >",message:Vt(pr.NODE_NAME)},{type:"input",transformer:cc,when:Mi(e[te.INSTALL_PROMPTS.CLUSTERING_USER],pr.CLUSTER_USERNAME),name:te.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Ui,default:Pce,validate:i=>rn(i)?rn(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:Vt(pr.CLUSTER_USERNAME)},{type:"password",when:Mi(e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD],pr.CLUSTER_PASS),name:te.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Ui,validate:i=>rn(i)?rn(i):!0,message:Vt(pr.CLUSTER_PASS)}];r.push(...n)}let s=await kF.prompt(r);if(Object.keys(s).length===0)return e;for(let n in s)e[n]===void 0&&(e[n]=s[n]);return e}a(vce,"installPrompts");function Mi(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Vt(t)} ${xo.gray("[hidden]")}`),ct.trace(`${Vt(t)} [hidden]`)):(console.log(`${Vt(t)} ${e}`),ct.trace(`${Vt(t)} ${e}`)),!1):!0}a(Mi,"displayCmdEnvVar");function rn(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(rn,"checkForEmptyValue");function Bce(){let e=Object.keys(te.INSTALL_PROMPTS),t=QA(e),r=QA(Object.keys(te.CONFIG_PARAM_MAP),!0),s={};for(let n of e){let i=te.CONFIG_PARAM_MAP[n.toLowerCase()];t[n]?i===void 0?s[n]=t[n]:s[i.toUpperCase()]=t[n]:i!==void 0&&r[i.toLowerCase()]&&(s[n]=r[i.toLowerCase()])}return s}a(Bce,"checkForPromptOverride");async function Hce(){ct.trace("Checking for existing install.");let e=uc.getPropsFilePath(),t=await Vn.pathExists(e),r;if(t){ct.trace(`Install found an existing boot prop file at:${e}`);let s=dce(e),n=YF.getConfigValue(te.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||s.get(te.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Vn.pathExists(n)}if(!t&&uc.noBootFile()&&(r=!0),r){if(ct.trace(`Install found existing HDB config at:${e}`),await $F.getVersionUpdateInfo()){let n=`Please use \`harperdb upgrade\` to update to ${VF.version()}. Exiting install...`;console.log(Hi+xo.magenta.bold(yce)),console.log(xo.magenta.bold(n)),ct.error(n)}else console.log(Hi+xo.magenta.bold(zA)),ct.error(zA);process.exit(0)}}a(Hce,"checkForExistingInstall");async function qce(e){ct.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Nce}${Hi}and can be viewed by typing or copying and pasting the URL into your web browser.${Hi}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:Ui,transformer:cc,when:Mi(e[te.INSTALL_PROMPTS.TC_AGREEMENT],t),name:te.INSTALL_PROMPTS.TC_AGREEMENT,message:Vt(t),validate:n=>n.toLowerCase()==="yes"||n.toLowerCase()==="no"?!0:xo.yellow("Please enter 'yes' or 'no'")},s=await kF.prompt([r]);s[te.INSTALL_PROMPTS.TC_AGREEMENT]&&s[te.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==bce&&(console.log(xo.yellow(xF)),ct.error(xF),process.exit(0))}a(qce,"termsAgreement");async function Fce(){let e=vi.join(Pi,te.HDB_CONFIG_FILE),t;try{t=JA.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
|
|
105
|
+
install_user = ${t}`,s=uc.getHomeDir(),n=vi.join(s,te.HDB_HOME_DIR_NAME),i=vi.join(n,te.LICENSE_KEY_DIR_NAME);try{Vn.mkdirpSync(n,{mode:te.HDB_FILE_PERMISSIONS}),Vn.mkdirpSync(i,{mode:te.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${te.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=vi.join(n,te.BOOT_PROPS_FILE_NAME);try{await Vn.writeFile(o,r)}catch(c){throw ct.error(`There was an error creating the boot file at path: ${o}`),c}Bi.setProperty(te.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Bi.setProperty(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Bi.setProperty(Bi.BOOT_PROPS_FILE_PATH,o)}}a(Fce,"createBootPropertiesFile");async function Gce(e){ct.trace("Creating HarperDB config file");let t=QA(Object.keys(te.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{YF.createConfigFile(t),Bi.initSync()}catch(r){xce(r)}}a(Gce,"createConfigFile");function xce(e){ct.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Ice);let t=vi.resolve(Bi.get(Bi.BOOT_PROPS_FILE_PATH),"../");t&&Vn.removeSync(t),Pi&&Vn.removeSync(Pi),process.exit(1)}a(xce,"rollbackInstall");async function WF(e,t){ct.trace("Creating admin user"),await Ace();let r;try{r=await Sce.addRole(e)}catch(s){if(s.message.includes("already exists"))t=void 0;else throw s.message+="Error creating role",s}if(t)try{t.role=r.role,await pce.addUser(t)}catch(s){throw s.message=`Error creating user - ${s}`,s}}a(WF,"createAdminUser");async function QF(e){ct.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await WF(t,r),delete e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(QF,"createSuperUser");async function kce(e){ct.trace("Creating Cluster user.");let t;e[te.INSTALL_PROMPTS.CLUSTERING_USER]&&e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[te.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await WF({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[te.INSTALL_PROMPTS.CLUSTERING_USER],delete e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(kce,"createClusterUser");async function $ce(){let e=VF.version();if(e)await $F.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a($ce,"insertHdbVersionInfo")});var XF=m((uAe,jF)=>{"use strict";var jA=F(),Br=C(),JF=GA();jF.exports={processDirectives:Vce};async function Vce(e){console.log("Starting upgrade process...");let t=JF.getVersionsForUpgrade(e),r=Wce(t),s=[],n=r.length;for(let i=0;i<n;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Br.notify(c),console.log(c);let u=[],l=[];try{u=Yce(o.sync_functions)}catch(_){throw Br.error(`Error while running an upgrade script for ${o.version}`),_}try{l=await Kce(o.async_functions)}catch(_){throw Br.error(`Error while running an upgrade script for ${o.version}`),_}s.push(...u,...l)}return s}a(Vce,"processDirectives");function Yce(e){if(jA.isEmptyOrZeroLength(e))return Br.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Br.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Br.info(`Running function ${r.name}`),!(r instanceof Function)){Br.info("Variable being processed is not a function");continue}let s=r();Br.info(s),t.push(s)}return t}a(Yce,"runSyncFunctions");async function Kce(e){if(jA.isEmptyOrZeroLength(e))return Br.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Br.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let s=0;s<r;s++){let n=e[s];if(Br.info(`Running function ${n.name}`),!(n instanceof Function)){Br.info("Variable being processed is not a function");continue}let i=await n();Br.info(i),t.push(i)}return t}a(Kce,"runAsyncFunctions");function Wce(e){if(jA.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=JF.getDirectiveByVersion(r);s&&t.push(s)}return t}a(Wce,"getUpgradeDirectivesToInstall")});var eO=m((_Ae,nG)=>{"use strict";var Oh=Y();Oh.initSync();var rG=require("chalk"),ZF=require("fs-extra"),Kn=C(),Yn=R(),eG=$i(),Qce=XF(),XA=F(),sG=Rh(),zce=Eh(),tG=zh(),Jce=$r(),jce=require("util").promisify,Xce=jce(Jce.setSchemaDataToGlobal),ZA,{UPGRADE_VERSION:Nh}=Yn.UPGRADE_JSON_FIELD_NAMES_ENUM;nG.exports={upgrade:Zce};async function Zce(e){await Xce(),ZA===void 0&&(ZA=ya()),ZF.existsSync(Oh.get(Oh.BOOT_PROPS_FILE_PATH))||(Vl("The hdb_boot_properties file was not found. Please install HDB.",Yn.LOG_LEVELS.ERROR),process.exit(1)),ZF.existsSync(Oh.get(Yn.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Vl("The hdb settings file was not found. Please make sure HDB is installed.",Yn.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await sG.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Vl(`This version of HarperDB is ${eG.version()}`,Yn.LOG_LEVELS.INFO);let r=t[Nh]?t[Nh]:eG.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Yn.HDB_SUPPORT_ADDRESS}`),Kn.notify("Missing new version field from upgrade info object"),process.exit(1)),await eue();let s,n=0;try{s=await zce.forceUpdatePrompt(t)}catch(i){Kn.error("There was an error when prompting user about upgrade."),Kn.error(i),s=!1,n=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(n)),Kn.info(`Starting upgrade to version ${r}`),await tue(t),Vl(`HarperDB was successfully upgraded to version ${t[Nh]}`,Yn.LOG_LEVELS.INFO)}a(Zce,"upgrade");async function eue(){let e=!1,t=await tG.findPs(Yn.HDB_PROC_NAME);if(XA.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await tG.findPs("hdb_express");XA.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await ZA.list();XA.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(rG.red(r)),Kn.error(r),process.exit(1)}}a(eue,"checkIfRunning");async function tue(e){try{await Qce.processDirectives(e)}catch(t){throw Vl("There was an error during the data upgrade. Please check the logs.",Yn.LOG_LEVELS.ERROR),t}try{await sG.insertHdbUpgradeInfo(e[Nh])}catch(t){Kn.error("Error updating the 'hdb_info' system table."),Kn.error(t)}}a(tue,"runUpgrade");function Vl(e,t=void 0){t||(t=Kn.info),Kn[t](e),console.log(rG.magenta(e))}a(Vl,"printToLogAndConsole")});var uG=m((EAe,cG)=>{"use strict";var{promises:rO,createReadStream:rue,createWriteStream:sue}=require("fs"),{createGzip:nue}=require("zlib"),{promisify:iue}=require("util"),{pipeline:oue}=require("stream"),aue=iue(oue),cue=require("path"),$o=Y();$o.initSync();var ko=C(),{CONFIG_PARAMS:Yl,ITC_EVENT_TYPES:uue}=R(),{onMessageFromWorkers:lue}=tt(),_ue=6e4,due="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Eue="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",tO,oG;cG.exports=aG;lue(e=>{e.type===uue.RESTART&&($o.initSync(!0),clearInterval(oG),$o.get(Yl.LOGGING_ROTATION_ENABLED)&&aG())});async function aG(){try{let e=ko.getLogFilePath(),t=$o.get(Yl.LOGGING_ROTATION_MAXSIZE),r=$o.get(Yl.LOGGING_ROTATION_INTERVAL);if(!t&&!r){ko.error(due);return}let s=$o.get(Yl.LOGGING_ROTATION_PATH);if(!s){ko.error(Eue);return}let n;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?n=c*1e9:o==="M"?n=c*1e6:n=c*1e3}let i;if(r){let o=r.slice(-1),c=r.slice(0,-1);o==="D"?i=c*1440:o==="H"?i=c*60:i=c}tO=Date.now()/6e4,ko.trace("Log rotate enabled, maxSize:",t,"interval:",r),oG=setInterval(async()=>{if(n){let o;o=await rO.stat(e),o.size>=n&&await iG(e,s)}i&&Date.now()/6e4-tO>=i&&(await iG(e,s),tO=Date.now()/6e4)},_ue).unref()}catch(e){ko.error(e)}}a(aG,"logRotator");async function iG(e,t){let r=$o.get(Yl.LOGGING_ROTATION_COMPRESS),s=cue.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await aue(rue(e),nue(),sue(s)),await rO.unlink(e)):await rO.rename(e,s),ko.closeLogFile(),ko.notify(`hdb.log rotated, old log moved to ${s}`)}a(iG,"moveLogFile")});var _c=m((OAe,mG)=>{"use strict";var Ns=Y();Ns.initSync();var hAe=wa(),ut=R(),Yt=C(),Vo=require("fs-extra"),lc=require("path"),fue=yA(),hue=Ah(),sO=require("chalk"),mue=ki(),ts=F(),lG=et(),_G=Gi(),pue=SE(),Sue=eO(),Tue=uG(),gue=require("minimist"),{PACKAGE_ROOT:Rue}=R(),{startHTTPThreads:Aue,startSocketServer:mAe,mostIdleRouting:pAe,remoteAffinityRouting:SAe}=(Uf(),re(DR)),Oue=Rh(),{isMainThread:Nue}=require("worker_threads"),TAe=En(),gAe=Zn(),RAe=Xp(),AAe=cu(),nO=R(),Os,bue="Upgrade complete. Starting HarperDB.",yue="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",Iue="HarperDB not found, starting install process.",wue="There was an error during install, check install_log.log for more details. Exiting.",Cue="HarperDB successfully started.";async function dG(e=!1,t=!1){if(console.log(sO.magenta("Starting HarperDB...")),await hG()===!1){console.log(Iue);try{await hue()}catch(n){console.error(wue,n),Yt.error(n),process.exit(1)}}await Vo.writeFile(lc.join(Ns.get(nO.CONFIG_PARAMS.ROOTPATH),nO.HDB_PID_FILE),`${process.pid}`),Yt.info("HarperDB PID",process.pid),Os===void 0&&(Os=ya());let r;try{let n=await Oue.getVersionUpdateInfo();n!==void 0&&(r=n[ut.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await Sue.upgrade(n),console.log(bue))}catch(n){r?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${r}. Exiting HarperDB.`),Yt.error(n)):(console.error(yue),Yt.error(n)),process.exit(1)}if(!e){let n=_G(Object.keys(ut.CONFIG_PARAM_MAP),!0);!ts.isEmpty(n)&&!ts.isEmptyOrZeroLength(Object.keys(n))&&lG.updateConfigValue(void 0,void 0,n,!0,!0)}fue(),Due(),ts.autoCastBoolean(Ns.get(ut.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&Nue&&await pue.generateNatsConfig(t)}a(dG,"initialize");async function EG(e=!1){try{let t=gue(process.argv);t.ROOTPATH&&lG.updateConfigObject("settings_path",lc.join(t.ROOTPATH,ut.HDB_CONFIG_FILE)),await dG(e,!0);let r=ts.autoCastBoolean(Ns.get(ut.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)),s=process.env.IS_SCRIPTED_SERVICE&&!t.service,n=r,i=ts.autoCastBoolean(Ns.get(ut.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY));if(ts.isEmpty(t.service))await Aue(Ns.get(nO.CONFIG_PARAMS.HTTP_THREADS)),n&&(s||await Os.startClusteringProcesses(),await Os.startClusteringThreads());else{if(typeof t.service!="string"){let c=`Run service argument expected a string but received: ${t.service}`;Yt.error(c),console.log(c),process.exit(1)}let o=t.service.split(",");for(let c of o){let u=c.toLowerCase();if(ut.PROCESS_DESCRIPTORS_VALIDATE[u]===void 0){Yt.error(`Run received unrecognized service command argument: ${u}`);continue}if(u===ut.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase()&&!i){Yt.error(`${u} is not enabled in settings`);continue}if(u.includes("clustering")&&!r){Yt.error(`${u} is not enabled in settings`);continue}u==="clustering"?await Os.startClusteringProcesses():await Os.startService(ut.PROCESS_DESCRIPTORS_VALIDATE[u]);let l=`${ut.PROCESS_DESCRIPTORS_VALIDATE[u]} successfully started.`;Yt.notify(l),console.log(l)}}Ns.get(ut.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await Tue(),s||fG()}catch(t){console.error(t),Yt.error(t),process.exit(1)}}a(EG,"main");function fG(){Yt.suppressLogging(()=>{console.log(sO.magenta(""+Vo.readFileSync(lc.join(Rue,"utility/install/ascii_logo.txt")))),console.log(sO.magenta(`|------------- HarperDB ${mue.version} successfully started ------------|`))}),Yt.notify(Cue)}a(fG,"started");async function Lue(){if(Uue())return EG();try{Os===void 0&&(Os=ya()),Os.enterPM2Mode(),await dG(),ts.autoCastBoolean(Ns.get(ut.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Os.startClusteringProcesses(),await Os.startService(ut.PROCESS_DESCRIPTORS.HDB),fG(),process.exit(0)}catch(e){console.error(e),Yt.error(e),process.exit(1)}}a(Lue,"launch");function Due(){let e=lc.join(Ns.getHdbBasePath(),ut.LICENSE_KEY_DIR_NAME,ut.LICENSE_FILE_NAME),t=lc.join(e,ut.LICENSE_FILE_NAME),r=lc.join(e,ut.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=_G(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(ts.isEmpty(s)||ts.isEmpty(n))return;Vo.mkdirpSync(e),Vo.writeFileSync(r,s),Vo.writeFileSync(t,n)}catch(s){let n=`Failed to write license & fingerprint due to: ${s.message}`;console.error(n),Yt.error(n)}}a(Due,"writeLicenseFromVars");mG.exports={launch:Lue,main:EG,isHdbInstalled:hG};async function hG(){try{await Vo.stat(ts.getPropsFilePath()),await Vo.stat(Ns.get(ut.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(ts.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw Yt.error(`Error checking for HDB install - ${e}`),e}return!0}a(hG,"isHdbInstalled");function Uue(){return ts.autoCastBoolean(Ns.get(ut.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND))}a(Uue,"getRunInForeground")});var SG=m((bAe,pG)=>{var Mue=Ah(),Pue=C();pG.exports=vue;async function vue(){try{await Mue()}catch(e){console.error("There was an error during the install."),console.error(e),Pue.error(e),process.exit(1)}}a(vue,"install")});var RG=m((IAe,gG)=>{"use strict";var Bue=_E(),Hue=C(),TG="Registration failed.";async function que(){let e;try{e=await Bue.register()}catch(t){return Hue.error(`Registration error ${t}`),TG}return e||TG}a(que,"register");gG.exports={register:que}});var bG=m((CAe,NG)=>{"use strict";var Fue=C(),Gue=R(),xue=require("util"),kue=require("child_process"),AG=xue.promisify(kue.exec),$ue=Nn(),Kl=ya(),OG="Stopping HarperDB.";NG.exports=Vue;async function Vue(){if(console.log(OG),Fue.notify(OG),await Kl.isServiceRegistered(Gue.HDB_PROC_DESCRIPTOR)){Kl.enterPM2Mode();let r=await Kl.getUniqueServicesList();for(let s in r)await Kl.stop(s)}await Kl.kill();let t=await $ue.getHDBProcessInfo();t.clustering.forEach(r=>{AG(`kill ${r.pid}`)}),t.core.forEach(r=>{AG(`kill ${r.pid}`)})}a(Vue,"stop")});var LG=m((DAe,CG)=>{"use strict";var iO=require("fs-extra"),oO=require("path"),Yue=require("yaml"),Wl=Qe(),Ql=R(),yG=Me(),IG=C(),Kue=er(),Wue=aE(),Que=iE(),zue=Nn(),wG=Y();wG.initSync();var sn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored"},Sr={LEAF:"leaf server",HUB:"hub server"},bh;CG.exports=Jue;async function Jue(){bh=wG.get(Ql.CONFIG_PARAMS.ROOTPATH);let e={harperdb:{status:sn.STOPPED}},t;try{t=Number.parseInt(await iO.readFile(oO.join(bh,Ql.HDB_PID_FILE),"utf8"))}catch(s){throw s.code===Ql.NODE_ERROR_CODES.ENOENT?new Error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB"):s}let r=await zue.getHDBProcessInfo();for(let s of r.core)if(s.pid===t){e.harperdb.status=sn.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await jue(r),e.clustering[Sr.HUB].status===sn.RUNNING&&e.clustering[Sr.LEAF].status===sn.RUNNING){let s=[],n=await Wue({});for(let o of n.nodes){let c={};for(let u in o)c[u.replace("_"," ")]=o[u];s.push(c)}e.clustering.network=s;let i=await Que.clusterStatus();e.clustering.replication={"node name":i.node_name,"is enabled":i.is_enabled,connections:[]};for(let o of i.connections){let c={};c["node name"]=o?.node_name,c.status=o?.status,c.ports={clustering:o?.ports?.clustering,"operations api":o?.ports?.operations_api},c["latency ms"]=o?.latency_ms,c.uptime=o?.uptime,c.subscriptions=o?.subscriptions,c["system info"]={"hdb version":o?.system_info?.hdb_version,"node version":o?.system_info?.node_version,platform:o?.system_info?.platform},e.clustering.replication.connections.push(c)}await Wl.closeConnection()}console.log(Yue.stringify(e)),process.exit()}a(Jue,"status");async function jue(e){let t={[Sr.HUB]:{},[Sr.LEAF]:{}};if(e.clustering.length===0)return t[Sr.HUB].status=sn.STOPPED,t[Sr.LEAF].status=sn.STOPPED,t;let{port:r}=Wl.getServerConfig(Ql.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:s,decrypt_hash:n}=await Kue.getClusterUser();try{(await Wl.createConnection(r,s,n,!1)).close(),t[Sr.HUB].status=sn.RUNNING}catch{t[Sr.HUB].status=sn.ERRORED}let{port:i}=Wl.getServerConfig(Ql.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await Wl.createConnection(i,s,n,!1)).close(),t[Sr.LEAF].status=sn.RUNNING}catch{t[Sr.LEAF].status=sn.ERRORED}try{t[Sr.HUB].pid=Number.parseInt(await iO.readFile(oO.join(bh,"clustering",yG.PID_FILES.HUB),"utf8"))}catch(o){IG.error(o),t[Sr.HUB].pid=void 0}try{t[Sr.LEAF].pid=Number.parseInt(await iO.readFile(oO.join(bh,"clustering",yG.PID_FILES.LEAF),"utf8"))}catch(o){IG.error(o),t[Sr.LEAF].pid=void 0}return t}a(jue,"getHubLeafStatus")});var HG=m(()=>{"use strict";var Xue=require("os"),wh=require("https"),qi=require("fs-extra"),Zue=require("yaml"),ele=require("human-readable-ids").hri,{pipeline:DG}=require("stream/promises"),{createWriteStream:Ch,ensureDir:Lh}=require("fs-extra"),{join:nn}=require("path"),uO=require("lodash"),tle=Y(),rle=Nn(),vG=C(),yh=et(),{restart:sle}=wa(),BG=F(),UG=Qe(),nle=$r(),{isHdbInstalled:ile,main:ole}=_c(),ale=Ah(),lO=R(),{SYSTEM_TABLE_NAMES:MG,SYSTEM_SCHEMA_NAME:cle,CONFIG_PARAMS:zl,OPERATIONS_ENUM:Hr}=lO,ule=9925,lle="info",_le=1e4,dle="clone-node-config.yaml",_O=[MG.ROLE_TABLE_NAME,MG.USER_TABLE_NAME],Jl=process.env.HDB_LEADER_USERNAME,jl=process.env.HDB_LEADER_PASSWORD,Xl=process.env.HDB_LEADER_URL,aO=process.env.HDB_LEADER_CLUSTERING_HOST,Ele=process.env.HDB_LEADER_CLUSTERING_PORT,cO,ye,lt,je,dO,dc;async function fle(){if(await ile())throw new Error("Existing install of HarperDB found on clone node.");if(console.info("Cloning node: "+Xl),ye?.rootPath)dc=ye.rootPath;else try{dc=process.env.ROOTPATH?process.env.ROOTPATH:nn(Xue.homedir(),lO.HDB_ROOT_DIR_NAME)}catch(t){throw console.error(t),new Error("There was an setting default rootPath. Please set 'rootPath' in clone-node-config.yaml")}let e;try{e=nn(dc,dle),ye=Zue.parseDocument(qi.readFileSync(e,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(e+" not found, using default config values.")}dO=ye?.clustering?.nodeName??ele.random(),lt=await Dh({operation:Hr.GET_CONFIGURATION}),lt=await JSON.parse(lt.body),global.fetch?(await Sle(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await ple(),await mle(),await hle(),await Tle(),await gle(),console.info("Successfully cloned node: "+Xl)}a(fle,"cloneNode");async function hle(){console.info("Cloning configuration"),cO=lt?.clustering?.enabled;let e={[zl.ROOTPATH]:dc};if(cO&&ye?.clustering?.enabled!==!1){if(aO==null)throw new Error("'HDB_LEADER_CLUSTERING_HOST' must be defined");e[zl.CLUSTERING_ENABLED]=!0;let s=lt?.clustering?.hubServer?.cluster?.network?.routes,n=parseInt(Ele)||lt?.clustering?.hubServer?.cluster?.network?.port;e[zl.CLUSTERING_USER]=lt?.clustering?.user;let i=tle.get(zl.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:aO,port:n}):i=[{host:aO,port:n}],Array.isArray(s)&&i.concat(s),e[zl.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES]=i}let t=ye?.componentConfig?.exclude;t=t?t.reduce((s,n)=>({...s,[n.name]:!0}),{}):[];for(let s in lt)lt[s]?.package&&!t[s]&&await yh.addConfig(s,lt[s]);ye?.databases&&await yh.addConfig("databases",lt?.schemas);let r=yh.flattenConfig(ye);for(let s in r){let n=lO.CONFIG_PARAM_MAP[s.toLowerCase()];n&&(e[n]=r[s])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(e.clustering_nodeName=dO),vG.info("Cloning config:",e),uO.isEmpty(e)||await yh.updateConfigValue(void 0,void 0,e,!1,!0)}a(hle,"cloneConfig");async function mle(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=dc,!Jl)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=Jl,!jl)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=jl,process.env.OPERATIONSAPI_NETWORK_PORT=ye?.operationsApi?.network?.port??ule,process.env.CLUSTERING_NODENAME=dO,process.env.CLUSTERING_LOGLEVEL=ye?.clustering?.logLevel??lle,await ale()}a(mle,"installHDB");async function ple(){console.info("Cloning system database");let e=Ec("system");await Lh(e);let t=nn(e,"system.mdb"),r=Ch(t,{overwrite:!0}),s=await PG({operation:Hr.GET_BACKUP,database:"system",tables:_O},r);await qi.utimes(t,Date.now(),new Date(s.date)),je=await Dh({operation:Hr.DESCRIBE_ALL}),je=await JSON.parse(je.body);let n=ye?.databaseConfig?.excludeDatabases;if(n=n?n.reduce((o,c)=>({...o,[c.database]:!0}),{}):{},lt.schemas)for(let o in lt.schemas)Object.keys(lt.schemas[o]).includes("tables")&&(n[o]=!0,console.info(`Excluding database '${o}' from clone because leader node has custom pathing configured for one or more of its tables`));let i=ye?.databaseConfig?.excludeTables;i=i?i.reduce((o,c)=>({...o,[c.database==null?null:c.database+c.table]:!0}),{}):{};for(let o in je){if(n[o]){je[o]="excluded";continue}if(uO.isEmpty(je[o]))continue;let c=[],u=!1;for(let h in je[o])i[o+h]?(u=!0,je[o][h]="excluded"):c.push(h);let l;u?(console.info(`Cloning database: ${o} tables: ${c}`),l={operation:Hr.GET_BACKUP,database:o,tables:c}):(console.info(`Cloning database: ${o}`),l={operation:Hr.GET_BACKUP,database:o});let _=Ec(o);await Lh(_);let d=nn(_,o+".mdb"),E=Ch(d,{overwrite:!0}),f=await PG(l,E);await qi.utimes(d,Date.now(),new Date(f.date))}}a(ple,"cloneTables");async function Sle(){console.info("Cloning system database");let e=await Ih({operation:Hr.GET_BACKUP,database:"system",tables:_O},!0),t=Ec("system");await Lh(t);let r=nn(t,"system.mdb");await DG(e.body,Ch(r,{overwrite:!0})),await qi.utimes(r,Date.now(),new Date(e.headers.get("date"))),je=await Ih({operation:Hr.DESCRIBE_ALL}),je=await je.json();let s=ye?.databaseConfig?.excludeDatabases;if(s=s?s.reduce((i,o)=>({...i,[o.database]:!0}),{}):{},lt.schemas)for(let i in lt.schemas)Object.keys(lt.schemas[i]).includes("tables")&&(s[i]=!0,console.info(`Excluding database '${i}' from clone because leader node has custom pathing configured for one or more of its tables`));let n=ye?.databaseConfig?.excludeTables;n=n?n.reduce((i,o)=>({...i,[o.database==null?null:o.database+o.table]:!0}),{}):{};for(let i in je){if(s[i]){je[i]="excluded";continue}if(uO.isEmpty(je[i]))continue;let o=[],c=!1;for(let f in je[i])n[i+f]?(c=!0,je[i][f]="excluded"):o.push(f);let u;c?(console.info(`Cloning database: ${i} tables: ${o}`),u=await Ih({operation:Hr.GET_BACKUP,database:i,tables:o},!0)):(console.info(`Cloning database: ${i}`),u=await Ih({operation:Hr.GET_BACKUP,database:i},!0));let l=Ec(i);await Lh(l);let _=new Date(u.headers.get("date")),d=nn(l,`${_.getTime()}-${i}.mdb`);await DG(u.body,Ch(d,{overwrite:!0}));let E=nn(l,i+".mdb");await qi.rename(d,E),await qi.utimes(E,Date.now(),_)}}a(Sle,"cloneTablesFetch");async function Ih(e,t=!1){let r=ye?.httpsRejectUnauthorized??!1,s=new wh.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(Jl+":"+jl).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(Xl,{method:"POST",headers:i,body:JSON.stringify(e),agent:s,compress:!0});if(o.ok)return o;throw console.error(`HTTP Error Response: ${o.status} ${o.statusText}`),new Error(await o.text())}a(Ih,"leaderHttpReqFetch");function Ec(e){return ye?.databases&&ye?.databases[e]?.path||ye?.storage&&ye?.storage?.path||nn(dc,"database")}a(Ec,"getDbFileDir");async function Tle(){let{deployComponent:e}=PE(),t=await Dh({operation:Hr.GET_COMPONENTS});t=await JSON.parse(t.body);let r=[];if(t.entries.length){for(let n of t.entries){if(!n.entries)continue;let i=!1;if(ye?.componentConfig?.exclude){for(let o of ye.componentConfig.exclude)if(o?.name!=null&&o.name===n.name){i=!0;break}}i||r.push(n.name)}let s=ye?.componentConfig?.skipNodeModules!==!1;for(let n of r){console.info("Cloning component: "+n);let i=await Dh({operation:Hr.PACKAGE_COMPONENT,project:n,skip_node_modules:s}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:n})}}}a(Tle,"cloneComponents");async function gle(){if(!cO)return;let e=await rle.getHDBProcessInfo();e.clustering.length===0||e.core.length===0?await ole():(console.info(await sle({operation:Hr.RESTART})),await BG.async_set_timeout(_le)),console.info("Clustering cloned tables");let t=ye?.clusteringConfig?.subscribeToLeaderNode!==!1,r=ye?.clusteringConfig?.publishToLeaderNode!==!1;await nle.setSchemaDataToGlobalAsync();let s=Du(),n=[],i=await qi.stat(nn(Ec("system"),"system.mdb"));for(let o of _O)n.push({schema:cle,table:o,subscribe:t,publish:r,start_time:i.mtime.toISOString()});for(let o in je){if(je[o]==="excluded")continue;let c=await qi.stat(nn(Ec(o),o+".mdb"));for(let u in je[o])je[o][u]!=="excluded"&&n.push({schema:o,table:u,subscribe:t,publish:r,start_time:c.mtime.toISOString()})}await UG.createTableStreams(n),vG.info("Sending add_node request to node:",lt?.clustering?.nodeName,"with subscriptions:",n),await s({operation:Hr.ADD_NODE,node_name:lt?.clustering?.nodeName,subscriptions:n},!0),await UG.closeConnection()}a(gle,"clusterTables");async function Dh(e){let t=new wh.Agent({rejectUnauthorized:ye?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(Jl+":"+jl).toString("base64"),"Content-Type":"application/json"},n=new URL(Xl),i={protocol:n.protocol,host:n.hostname,method:"POST",headers:s};return n.protocol==="https:"&&(i.agent=t),n.port&&(i.port=n.port),await BG.httpRequest(i,e)}a(Dh,"leaderHttpReq");async function PG(e,t){let r=new wh.Agent({rejectUnauthorized:ye?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(Jl+":"+jl).toString("base64"),"Content-Type":"application/json"},i=new URL(Xl),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:n};return i.protocol==="https:"&&(o.agent=r),i.port&&(o.port=i.port),new Promise((c,u)=>{let l=wh.request(o,_=>{_.pipe(t),_.on("end",()=>{t.close(),c(_.headers)})});l.on("error",_=>{u(_)}),l.write(JSON.stringify(e)),l.end()})}a(PG,"leaderHttpStream");fle().then().catch(e=>{console.log(e)})});var fc=C(),Rle=$i(),EO=R(),Uh=require("fs"),qG=require("path"),BAe=require("os"),{PACKAGE_ROOT:Ale}=R(),Ole=jO(),HAe=Y(),Nle=(Uf(),re(DR)),{SERVICE_ACTIONS_ENUM:bs}=EO;ble();function ble(){let e=Ole();if(e)if(e.error){console.error(e.error),fc.error(e.error);return}else e.warn&&(console.warn(e.warn),fc.warn(e.warn));let t;Uh.readdir(qG.join(Ale,"bin"),r=>{if(r)return fc.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let s;switch(t){case bs.DEBUG:require("inspector").open(9229),Nle.debugMode=!0;case bs.RUN:let n=process.argv[3];n&&n[0]!=="-"&&(Uh.existsSync(n)||(console.error(`The folder ${n} does not exist`),process.exit(1)),Uh.statSync(n).isDirectory()||(console.error(`The path ${n} is not a folder`),process.exit(1)),Uh.existsSync(qG.join(n,EO.HDB_CONFIG_FILE))?process.env.ROOTPATH=n:process.env.RUN_HDB_APP=n),_c().main();break;case bs.START:s=_c().launch();break;case bs.INSTALL:SG()().then(()=>_c().main(!0)).catch(E=>{console.error(E)});break;case bs.REGISTER:RG().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case bs.STOP:bG()().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case bs.RESTART:wa().restart({}).then().catch(E=>{fc.error(E),console.error(`There was an error restarting harperdb. ${E}`),process.exit(1)});break;case bs.VERSION:Rle.printVersion();break;case bs.UPGRADE:fc.setLogLevel(EO.LOG_LEVELS.INFO),eO().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(E=>{fc.error(`Got an error during upgrade ${E}`)});break;case bs.STATUS:LG()().then().catch(E=>{console.error(E)});break;case void 0:process.env.HDB_LEADER_URL?HG():_c().main();break;default:console.warn(`The "${t}" command is not understood.`);case bs.HELP:console.log(`
|
|
106
106
|
Usage: harperdb [command]
|
|
107
107
|
|
|
108
108
|
With no command, harperdb will simply run HarperDB (in the foreground)
|
|
@@ -117,4 +117,4 @@ Commands:
|
|
|
117
117
|
install - Install harperdb
|
|
118
118
|
register - Register harperdb
|
|
119
119
|
upgrade - Upgrade harperdb
|
|
120
|
-
status - Print the status of HarperDB and clustering`)}})}a(
|
|
120
|
+
status - Print the status of HarperDB and clustering`)}})}a(ble,"harperDBService");
|