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
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
"use strict";var fH=Object.create;var Yo=Object.defineProperty;var hH=Object.getOwnPropertyDescriptor;var mH=Object.getOwnPropertyNames;var SH=Object.getPrototypeOf,pH=Object.prototype.hasOwnProperty;var a=(e,t)=>Yo(e,"name",{value:t,configurable:!0});var pe=(e,t)=>()=>(e&&(t=e(e=0)),t);var m=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),et=(e,t)=>{for(var r in t)Yo(e,r,{get:t[r],enumerable:!0})},_R=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of mH(t))!pH.call(e,n)&&n!==r&&Yo(e,n,{get:()=>t[n],enumerable:!(s=hH(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?fH(SH(e)):{},_R(t||!e||!e.__esModule?Yo(r,"default",{value:e,enumerable:!0}):r,e)),re=e=>_R(Yo({},"__esModule",{value:!0}),e);var fR=m((Yre,ER)=>{var TH=require("fast-glob"),{statSync:mE,existsSync:SE,readFileSync:RH,writeFileSync:gH}=require("fs"),{spawnSync:AH,spawn:OH}=require("child_process"),{isMainThread:NH}=require("worker_threads"),{join:Ns,relative:dR}=require("path"),{PACKAGE_ROOT:Sr}=R(),{tmpdir:bH}=require("os");require("source-map-support").install();var yH=["resources","server","dataLayer"],Ko="ts-build",pE,IH=__filename.endsWith("tsBuild.js");if(IH){if(NH){let r;try{mE(Ns(Sr,Ko)),r=!0}catch{}if(r)for(let s of TH.sync(yH.map(n=>n+"/**/*.ts"),{cwd:Sr})){let n=0,i=0;try{n=mE(Ns(Sr,s)).mtimeMs-5e3,i=mE(Ns(Sr,Ko,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),pE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),pE=!0;if(pE){let s=AH(process.argv[0],[Ns(Sr,"node_modules/.bin/tsc")],{cwd:Sr});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let n=Ns(bH(),"harperdb-tsc.pid"),i;if(SE(n))try{process.kill(+RH(n,{encoding:"utf8"}),0),i=!0}catch{}if(!i){console.log("starting tsc background process");let o=OH(process.argv[0],[Ns(Sr,"node_modules/.bin/tsc"),"--watch"],{cwd:Sr,detached:!0,stdio:"ignore"});gH(n,o.pid.toString()),o.unref()}}}}let e=ER.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Sr)&&!s[0].includes("node_modules")){let i=dR(Sr,s[0]),o;i.startsWith(Ko)?o=Ns(Sr,dR(Ko,i)):o=Ns(Sr,Ko,i);let c=Ns(o,r),u=c+".js";if(SE(u))return u;if(c.includes(".")&&SE(c))return c}return t(r,s,n)}}});var R=m((Qre,wR)=>{"use strict";var pr=require("path"),wH=require("fs"),{relative:Kre,join:Wre}=pr,{existsSync:CH}=wH;function UH(){let e=__dirname;for(;!CH(pr.join(e,"package.json"));){let t=pr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(UH,"getHDBPackageRoot");var an=UH(),hR="js",lu=hR,DH="harperdb-config.yaml",LH="defaultConfig.yaml",MH="hdb",mR=`harperdb.${lu}`,SR=`customFunctionsServer.${lu}`,PH=`restartHdb.${lu}`,RE="HarperDB",uu="Custom Functions",_u="Clustering Hub",du="Clustering Leaf",vH="Clustering Ingest Service",BH="Clustering Reply Service",HH="foreground.pid",qH="hdb.pid",FH="data",GH={HDB:RE,CLUSTERING_HUB:_u,CLUSTERING_LEAF:du,CLUSTERING_INGEST_SERVICE:vH,CLUSTERING_REPLY_SERVICE:BH,CUSTOM_FUNCTIONS:uu,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},xH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},kH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},VH={harperdb:RE,"clustering hub":_u,"clustering leaf":du,"custom functions":uu,custom_functions:uu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},$H={CLUSTERING_HUB_PROC_DESCRIPTOR:_u,CLUSTERING_LEAF_PROC_DESCRIPTOR:du},TE={HDB:pr.join(an,"server/harperdb"),CUSTOM_FUNCTIONS:pr.join(an,"server/customFunctions"),CLUSTERING_HUB:pr.join(an,"server/nats"),CLUSTERING_LEAF:pr.join(an,"server/nats")},YH={HDB:pr.join(TE.HDB,mR),CUSTOM_FUNCTIONS:pr.join(TE.CUSTOM_FUNCTIONS,SR)},KH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:pr.join(an,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:pr.join(an,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:pr.join(an,"launchServiceScripts/launchUpdateNodes4-0-0.js")},WH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},pR="support@harperdb.io",QH="customer-success@harperdb.io",TR=1,zH=4141,RR="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",JH="https://www.harperdb.io/product",XH=`For support, please submit a request at ${RR} or contact ${pR}`,gR=`For license support, please contact ${QH}`,ZH="None of the specified records were found.",jH="hash attribute not found",eq=`Your current license only supports ${TR} role. ${gR}`,tq="Your current license only supports 3 connections to a node.",rq="127.0.0.1",sq=1,nq=/^\.$/,iq=/^\.\.$/,oq="U+002E",aq=/\//g,cq="U+002F",uq=/U\+002F/g,lq=/^U\+002E$/,_q=/^U\+002EU\+002E$/,dq="d",Eq=999999,fq="*",hq="--max-old-space-size=",mq="system",Sq="__hdb_hash",pq=".harperdb",Tq=".hdb",Rq="keys",gq="hdb_boot_properties.file",Aq=".updateConfig.json",Oq="SIGTSTP",Nq=24,bq=6e4,yq=448,Iq="blob",wq="trash",Cq="database",Uq="schema",Dq="transactions",Lq=".count",Mq="id",Pq="PROCESS_NAME",AR={SETTINGS_PATH_KEY:"settings_path"},OR=require("lodash"),vq={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"},Bq={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},Hq={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},qq={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},Fq={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:",Gq={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"},xq={ATTR_ATTRIBUTE_KEY:"attribute",ATTR_CREATEDDATE_KEY:"createddate",ATTR_HASH_ATTRIBUTE_KEY:"hash_attribute",ATTR_ID_KEY:"id",ATTR_NAME_KEY:"name",ATTR_PASSWORD_KEY:"password",ATTR_RESIDENCE_KEY:"residence",ATTR_ROLE_KEY:"role",ATTR_SCHEMA_KEY:"schema",ATTR_SCHEMA_TABLE_KEY:"schema_table",ATTR_TABLE_KEY:"table",ATTR_USERNAME_KEY:"username"},kq="060493.ks",Vq=".license",$q={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},$={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"},Yq={CSV:".csv",JSON:".json"},Kq={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Wq={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Wo={};Wo[$.INSERT]=$.INSERT;Wo[$.UPDATE]=$.UPDATE;Wo[$.UPSERT]=$.UPSERT;Wo[$.DELETE]=$.DELETE;var Ae=Object.create(null);Ae[$.DESCRIBE_ALL]=$.DESCRIBE_ALL;Ae[$.DESCRIBE_TABLE]=$.DESCRIBE_TABLE;Ae[$.DESCRIBE_SCHEMA]=$.DESCRIBE_SCHEMA;Ae[$.READ_LOG]=$.READ_LOG;Ae[$.ADD_NODE]=$.ADD_NODE;Ae[$.LIST_USERS]=$.LIST_USERS;Ae[$.LIST_ROLES]=$.LIST_ROLES;Ae[$.USER_INFO]=$.USER_INFO;Ae[$.SQL]=$.SQL;Ae[$.GET_JOB]=$.GET_JOB;Ae[$.SEARCH_JOBS_BY_START_DATE]=$.SEARCH_JOBS_BY_START_DATE;Ae[$.DELETE_FILES_BEFORE]=$.DELETE_FILES_BEFORE;Ae[$.EXPORT_LOCAL]=$.EXPORT_LOCAL;Ae[$.EXPORT_TO_S3]=$.EXPORT_TO_S3;Ae[$.CLUSTER_STATUS]=$.CLUSTER_STATUS;Ae[$.REMOVE_NODE]=$.REMOVE_NODE;Ae[$.RESTART]=$.RESTART;Ae[$.CUSTOM_FUNCTIONS_STATUS]=$.CUSTOM_FUNCTIONS_STATUS;Ae[$.GET_CUSTOM_FUNCTIONS]=$.GET_CUSTOM_FUNCTIONS;Ae[$.GET_CUSTOM_FUNCTION]=$.GET_CUSTOM_FUNCTION;Ae[$.SET_CUSTOM_FUNCTION]=$.SET_CUSTOM_FUNCTION;Ae[$.DROP_CUSTOM_FUNCTION]=$.DROP_CUSTOM_FUNCTION;Ae[$.ADD_CUSTOM_FUNCTION_PROJECT]=$.ADD_CUSTOM_FUNCTION_PROJECT;Ae[$.DROP_CUSTOM_FUNCTION_PROJECT]=$.DROP_CUSTOM_FUNCTION_PROJECT;Ae[$.PACKAGE_CUSTOM_FUNCTION_PROJECT]=$.PACKAGE_CUSTOM_FUNCTION_PROJECT;Ae[$.DEPLOY_CUSTOM_FUNCTION_PROJECT]=$.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Qq={DEBUG:"debug",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},zq={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},NR={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"},Jq=OR.invert(NR),g={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root",HTTP_THREADS:"http_threads",HTTP_SESSION_AFFINITY:"http_sessionAffinity",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT:"operationsApi_authentication_operationTokenTimeout",OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT:"operationsApi_authentication_refreshTokenTimeout",OPERATIONSAPI_FOREGROUND:"operationsApi_foreground",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERT_AUTH:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_NODEENV:"operationsApi_nodeEnv",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",SCHEMAS:"schemas",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication"},bR={settings_path:AR.SETTINGS_PATH_KEY,hdb_root_key:g.ROOTPATH,hdb_root:g.ROOTPATH,server_port_key:g.OPERATIONSAPI_NETWORK_PORT,server_port:g.OPERATIONSAPI_NETWORK_PORT,cert_key:g.OPERATIONSAPI_TLS_CERTIFICATE,certificate:g.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:g.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:g.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:g.OPERATIONSAPI_NETWORK_HTTPS,https_on:g.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:g.OPERATIONSAPI_NETWORK_CORS,cors_on:g.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:g.LOGGING_LEVEL,log_level:g.LOGGING_LEVEL,log_path_key:g.LOGGING_ROOT,log_path:g.LOGGING_ROOT,props_env_key:g.OPERATIONSAPI_NODEENV,node_env:g.OPERATIONSAPI_NODEENV,clustering_node_name_key:g.CLUSTERING_NODENAME,node_name:g.CLUSTERING_NODENAME,clustering_enabled_key:g.CLUSTERING_ENABLED,clustering:g.CLUSTERING_ENABLED,max_http_threads:g.HTTP_THREADS,max_hdb_processes:g.HTTP_THREADS,server_timeout_key:g.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:g.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:g.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:g.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:g.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:g.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:g.LOGGING_AUDITLOG,disable_transaction_log:g.LOGGING_AUDITLOG,operation_token_timeout_key:g.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:g.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:g.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:g.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:g.CUSTOMFUNCTIONS_ENABLED,custom_functions:g.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:g.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:g.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:g.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:g.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:g.HTTP_THREADS,log_to_file:g.LOGGING_FILE,log_to_stdstreams:g.LOGGING_STDSTREAMS,run_in_foreground:g.OPERATIONSAPI_FOREGROUND,local_studio_on:g.LOCALSTUDIO_ENABLED,clustering_port:g.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:g.CLUSTERING_USER,clustering_enabled:g.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:g.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:g.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:g.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:g.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:g.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:g.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:g.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:g.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:g.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:g.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:g.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:g.CLUSTERING_NODENAME,clustering_tls_certificate:g.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:g.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:g.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:g.CLUSTERING_TLS_INSECURE,clustering_tls_verify:g.CLUSTERING_TLS_VERIFY,clustering_loglevel:g.CLUSTERING_LOGLEVEL,clustering_republishmessages:g.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:g.CLUSTERING_DATABASELEVEL,customfunctions_enabled:g.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:g.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:g.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:g.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:g.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:g.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:g.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:g.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:g.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:g.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:g.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:g.CUSTOMFUNCTIONS_NODEENV,http_threads:g.HTTP_THREADS,http_session_affinity:g.HTTP_SESSION_AFFINITY,customfunctions_processes:g.HTTP_THREADS,customfunctions_root:g.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:g.LOCALSTUDIO_ENABLED,logging_file:g.LOGGING_FILE,logging_level:g.LOGGING_LEVEL,logging_root:g.LOGGING_ROOT,logging_rotation_enabled:g.LOGGING_ROTATION_ENABLED,logging_rotation_compress:g.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:g.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:g.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:g.LOGGING_ROTATION_PATH,logging_stdstreams:g.LOGGING_STDSTREAMS,logging_auditlog:g.LOGGING_AUDITLOG,logging_auditretention:g.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:g.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:g.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:g.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:g.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:g.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:g.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:g.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:g.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:g.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:g.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:g.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:g.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:g.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:g.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:g.OPERATIONSAPI_NODEENV,operationsapi_root:g.ROOTPATH,schemas:g.SCHEMAS,storage_path:g.STORAGE_PATH,ignorescripts:g.IGNORE_SCRIPTS,mqtt_network_port:g.MQTT_NETWORK_PORT,mqtt_websocket:g.MQTT_WEBSOCKET,mqtt_network_secureport:g.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:g.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:g.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:g.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:g.AUTHENTICATION_CACHETTL,authentication_enablesessions:g.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:g.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:g.AUTHENTICATION_REFRESHTOKENTIMEOUT};for(let e in g){let t=g[e];bR[t.toLowerCase()]=t}var Xq={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Zq={csv_file_load:"csv_file_load",csv_data_load:$.CSV_DATA_LOAD,csv_url_load:$.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"},jq={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"},e0={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},t0={VERSION_DEFAULT:"2.2.0"},r0={DEVELOPMENT:8192,DEFAULT:512},s0={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"},n0={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"},i0={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},yR={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},o0=Symbol("metadata"),a0="__clustering__",c0=Object.values(yR),u0=15984864e5,IR={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},l0=OR.invert(IR),_0={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},d0=111,E0=`\r
|
|
2
|
-
`,
|
|
3
|
-
`}a(
|
|
4
|
-
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:K0.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(J0,"findPs")});var ke=m((rse,YR)=>{"use strict";var X0="__dbis__",Z0="__txns__",j0="__environment_name__",eF="__dbi_defintion__",tF={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"},rF=["__createdtime__","__updatedtime__"],sF="\uFFFF",$R={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},nF=Object.values($R);YR.exports={AUDIT_STORE_NAME:Z0,INTERNAL_DBIS_NAME:X0,DBI_DEFINITION_NAME:eF,SEARCH_TYPES:tF,TIMESTAMP_NAMES:rF,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:j0,TRANSACTIONS_DBI_NAMES_ENUM:$R,TRANSACTIONS_DBIS:nF,OVERFLOW_MARKER:sF}});var rr=m((sse,eg)=>{"use strict";var KR=R(),WR=ke(),QR={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},zR=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),JR={500:zR("There was an error processing your request."),400:"Invalid request"},iF=JR[QR.INTERNAL_SERVER_ERROR],oF={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.`},aF={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},cF={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"},uF={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 ${WR.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${WR.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"},lF={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${KR.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 ${KR.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"},XR={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."},dF={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`},EF={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"},fF={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},hF={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`},ZR={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.`},jR={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}`},mF={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."},SF={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},pF={...XR,...cF,...oF,..._F,...dF,...EF,...fF,...hF,...lF,...ZR,...jR,...mF,...SF,...aF};eg.exports={CHECK_LOGS_WRAPPER:zR,HDB_ERROR_MSGS:pF,DEFAULT_ERROR_MSGS:JR,DEFAULT_ERROR_RESP:iF,HTTP_STATUS_CODES:QR,LMDB_ERRORS_ENUM:uF,AUTHENTICATION_ERROR_MSGS:XR,VALIDATION_ERROR_MSGS:ZR,ITC_ERRORS:jR}});var Q=m((ise,sg)=>{"use strict";var Bi=rr(),TF=F(),RF=R(),Su=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,tg),this.http_resp_code=s||Bi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Bi.DEFAULT_ERROR_MSGS[s]?Bi.DEFAULT_ERROR_MSGS[s]:Bi.DEFAULT_ERROR_MSGS[Bi.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&&TF[n](i)}},CE=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}},UE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.http_resp_code=r||500}};function tg(e,t,r,s=RF.LOG_LEVELS.ERROR,n=null,i=!1){if(rg(e))return e;let o=new Su(e,t,r,s,n);return i&&delete o.stack,o}a(tg,"handleHDBError");function rg(e){return e.__proto__.constructor.name===Su.name}a(rg,"isHDBError");sg.exports={isHDBError:rg,handleHDBError:tg,ClientError:CE,ServerError:UE,hdb_errors:Bi}});var Ce=m((ase,lg)=>{"use strict";var sa=R(),gF=G(),Pt=W(),na=require("path"),AF=require("minimist"),ng=require("fs-extra"),ig=require("lodash");Pt.initSync();var{CONFIG_PARAMS:cn,SCHEMAS_PARAM_CONFIG:jo,SYSTEM_SCHEMA_NAME:pu}=sa,ea,ta,ra;function og(){if(ea!==void 0)return ea;if(Pt.getHdbBasePath()!==void 0)return ea=Pt.get(cn.STORAGE_PATH)||na.join(Pt.getHdbBasePath(),sa.DATABASES_DIR_NAME),ea}a(og,"getBaseSchemaPath");function ag(){if(ta!==void 0)return ta;if(Pt.getHdbBasePath()!==void 0)return ta=ug(pu),ta}a(ag,"getSystemSchemaPath");function cg(){if(ra!==void 0)return ra;if(Pt.getHdbBasePath()!==void 0)return ra=Pt.get(sa.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||na.join(Pt.getHdbBasePath(),sa.TRANSACTIONS_DIR_NAME),ra}a(cg,"getTransactionAuditStoreBasePath");function OF(e,t){let r=Pt.get(cn.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||na.join(cg(),e.toString())}a(OF,"getTransactionAuditStorePath");function ug(e,t){e=e.toString(),t=t&&t.toString();let r=Pt.get(sa.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||na.join(og(),e)}a(ug,"getSchemaPath");function NF(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,AF(process.argv));let s=r[cn.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!gF.isObject(s))throw o;i=s}for(let o of i){let c=o[pu];if(!c)continue;let u=Pt.get(cn.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[jo.PATH];if(l)return ig.set(u,[pu,jo.TABLES,t,jo.PATH],l),Pt.setProperty(cn.SCHEMAS,u),l;let _=c?.[jo.PATH];if(_)return ig.set(u,[pu,jo.PATH],_),Pt.setProperty(cn.SCHEMAS,u),_}}let n=r[cn.STORAGE_PATH.toUpperCase()];if(n){if(!ng.pathExistsSync(n))throw new Error(n+" does not exist");let i=na.join(n,e);return ng.mkdirsSync(i),Pt.setProperty(cn.STORAGE_PATH,n),i}return ag()}a(NF,"initSystemSchemaPaths");function bF(){ea=void 0,ta=void 0,ra=void 0}a(bF,"resetPaths");lg.exports={getBaseSchemaPath:og,getSystemSchemaPath:ag,getTransactionAuditStorePath:OF,getTransactionAuditStoreBasePath:cg,getSchemaPath:ug,initSystemSchemaPaths:NF,resetPaths:bF}});var vt=m((_se,hg)=>{"use strict";var yF=rr().LMDB_ERRORS_ENUM,use=require("lmdb"),IF=ke(),lse=require("buffer").Buffer,{OVERFLOW_MARKER:_g,MAX_SEARCH_KEY_LENGTH:Tu}=IF,dg=["number","string","symbol","boolean","bigint"];function wF(e){if(e=e?.primaryStore||e,!e)throw new Error(yF.ENV_REQUIRED)}a(wF,"validateEnv");function CF(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(CF,"stringifyData");function UF(e){return e instanceof Date?e.valueOf():e}a(UF,"convertKeyValueToWrite");function DF(e){if(e==null)return;if(dg.includes(typeof e))return e.length>Tu?[e.slice(0,Tu)+_g]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(dg.includes(typeof n))n.length>Tu?t.push(n.slice(0,Tu)+_g):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(DF,"getIndexedValues");var Ru=0,Eg=0;function fg(){Eg=Date.now()-performance.now()}a(fg,"adjustStartTime");fg();var LF=6e4;setInterval(fg,LF).unref();function MF(){let e=performance.now()+Eg;return e>Ru?(Ru=e,e):(Ru+=488e-6,Ru)}a(MF,"getNextMonotonicTime");hg.exports={validateEnv:wF,stringifyData:CF,convertKeyValueToWrite:UF,getNextMonotonicTime:MF,getIndexedValues:DF}});var mg,Xr,DE,ia=pe(()=>{mg=require("events"),Xr=class extends mg.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new DE;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)}},DE=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 oa(e){return e[Et]||(e[Et]=Object.create(null))}function bu(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[Et];if(l&&c in l)return l[c];let _=this[ce]?.[c];if(_&&typeof _=="object"){let d=Sg(_,o);if(d)return l||(l=this[Et]=Object.create(null)),l[c]=d}return _},set(l){oa(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,gu.ClientError)(`${c} must be a string, attempt to assign ${l}`);oa(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,gu.ClientError)(`${c} must be a string, attempt to assign ${l}`);oa(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[Et];return u?.[o]!==void 0?u[o]:this[ce]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new gu.ClientError("Can not add a property to a sealed table schema");oa(this)[o]=c}),i("deleteProperty",function(o){oa(this)[o]=void 0}),i("toJSON",function(){let o=this[Et],c;for(let l in o)c||(c=Object.assign({},this[ce])),c[l]=o[l];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ce])),Object.assign(c,this)),c||this[ce]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function Sg(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[ce]=n}},bu(r,t)),new r(e)):new Au(e);case Array:let s=new Nu(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=Sg(o,t?.elements)),s[n]=o}return s}}function yu(e){let t=e[Et],r;for(let n in t){r||(r=Object.assign({},e[ce]));let i=t[n];i&&typeof i=="object"&&(i=yu(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ce])),Object.assign(r,e)),r||e[ce]}function aa(e){let t;if(e[ce]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=aa(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Et];for(let s in r){t||(t=Object.assign({},e[ce]));let n=r[s];n&&typeof n=="object"&&(n=aa(n)),t[s]=n}return t?Object.freeze(t):e[ce]||Object.freeze(e)}function Ou(e){let t=e[ce];if(!t)return!0;if(e.constructor===Array){if(e[Vn]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[ce]===n){if(Ou(i))return!0}else return!0}}else{let r=e[Et];for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ce]===i){if(Ou(n))return!0}else return!0}else return!0}}return!1}var gu,Et,Au,Vn,Nu,Iu=pe(()=>{Zr();gu=D(Q()),Et=Symbol("own-data");a(oa,"getChanges");a(bu,"assignTrackedAccessors");a(Sg,"trackObject");Au=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};bu(Au,{});a(yu,"collapseData");a(aa,"deepFreeze");a(Ou,"hasChanges");Vn=Symbol.for("has-array-changes"),Nu=class extends Array{static{a(this,"TrackedArray")}[Vn];constructor(t){super(t)}splice(...t){return this[Vn]=!0,super.splice(...t)}push(...t){return this[Vn]=!0,super.push(...t)}pop(){return this[Vn]=!0,super.pop()}unshift(...t){return this[Vn]=!0,super.unshift(...t)}shift(){return this[Vn]=!0,super.shift()}};Nu.prototype.constructor=Array});function We(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 LE;e.timestamp&&(r.timestamp=e.timestamp),r[Oe]=e,e.resourceCache=[];let s;try{if(s=t(r),s?.then)return s.then(n,i)}catch(o){i(o)}return n(s);function n(o){let c=r.commit();return c.then?c.then(()=>(e.transaction=null,o)):(e.transaction=null,o)}function i(o){throw r.abort(),e.transaction=null,o}}var pg,Tg,LE,$n=pe(()=>{pg=D(vt()),Tg=require("../index");Zr();a(We,"transaction");(0,Tg._assignPackageExport)("transaction",We);We.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};We.abort=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()};LE=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,pg.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 vE(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(vF[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]=es.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 lt.SEARCH_TYPES.EQUALS:case void 0:o=_,c=_,u=!0;break;case"ne":case"contains":case"ends_with":E=!0;break}if(r){let S=o;o=c,c=S,S=!l,l=!u,u=S}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new ME.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=BE(e);if(!S)throw new ME.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:N,value:O})=>new Promise(H=>setImmediate(()=>H(S(O)?N:gg.SKIP))))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(p):h.getRange(p).map(({value:S})=>S)}function BE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case lt.SEARCH_TYPES.EQUALS:case void 0:return jr(r,n=>n===s);case lt.SEARCH_TYPES.CONTAINS:return jr(r,n=>n?.toString().includes(s));case lt.SEARCH_TYPES.ENDS_WITH:case lt.SEARCH_TYPES._ENDS_WITH:return jr(r,n=>n?.toString().endsWith(s));case lt.SEARCH_TYPES.STARTS_WITH:case lt.SEARCH_TYPES._STARTS_WITH:return jr(r,n=>typeof n=="string"&&n.startsWith(s));case lt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),jr(r,n=>(0,es.compareKeys)(n,s[0])>=0&&(0,es.compareKeys)(n,s[1])<=0);case"gt":case lt.SEARCH_TYPES.GREATER_THAN:case lt.SEARCH_TYPES._GREATER_THAN:return jr(r,n=>(0,es.compareKeys)(n,s)>0);case"ge":case lt.SEARCH_TYPES.GREATER_THAN_EQUAL:case lt.SEARCH_TYPES._GREATER_THAN_EQUAL:return jr(r,n=>(0,es.compareKeys)(n,s)>=0);case lt.SEARCH_TYPES.LESS_THAN:case"lt":case lt.SEARCH_TYPES._LESS_THAN:return jr(r,n=>(0,es.compareKeys)(n,s)<0);case"le":case lt.SEARCH_TYPES.LESS_THAN_EQUAL:case lt.SEARCH_TYPES._LESS_THAN_EQUAL:return jr(r,n=>(0,es.compareKeys)(n,s)<=0);case"ne":return jr(r,n=>(0,es.compareKeys)(n,s)!==0);default:return}}function jr(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 wu(e){if(!e)return;let t=new PE,r,s,n,i,o;for(;r=Rg.exec(e);){i=Rg.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=PF[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 ME,lt,es,gg,Rg,PF,vF,PE,Cu=pe(()=>{ME=D(Q()),lt=D(ke()),es=require("ordered-binary"),gg=require("lmdb"),Rg=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,PF={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(vE,"idsForCondition");vF={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(BE,"filterByType");a(jr,"attributeComparator");a(wu,"parseQuery");PE=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 FE={};et(FE,{CONTEXT:()=>Oe,ID_PROPERTY:()=>ie,IS_COLLECTION:()=>Cs,RECORD_PROPERTY:()=>ce,Resource:()=>ft,SAVE_UPDATES_PROPERTY:()=>Ig,snake_case:()=>HF});function HF(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Ag(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 qE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Mr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,l;if(r?o?(l=i,o=o[Oe]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Oe]||i):l=i:(l=n,c=l[ie]??l[this.primaryKey]??null):i?o=i[Oe]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let 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 We(o,()=>{let d=this.getResource(c,o,t);return d.then?d.then(_):_(d)});function _(d){if(t.type==="read"&&(d[Ig]=!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 Uu(o.user);return typeof l?.then=="function"?l.then(h=>e(d,u,o,h)):e(d,u,o,l)});if(!E)throw new Uu(o.user)}return typeof l?.then=="function"?l.then(E=>e(d,u,o,E)):e(d,u,o,l)}a(_,"authorizeActionOnResource")}}function Pr(e,t){let r=new yg.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 HE(e){let t=e[ce];if(t){let r=e[Et];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 Og(e){if(typeof e=="string")return t=>HE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=HE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=HE(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 Ng,bg,yg,Oe,ie,Cs,Ig,ce,BF,ft,Uu,qE,Zr=pe(()=>{Ng=require("crypto");ia();bg=require("../index"),yg=D(Q());Iu();$n();Cu();Oe=Symbol.for("context"),ie=Symbol.for("primary-key"),Cs=Symbol("is-collection"),Ig=Symbol("save-updates"),ce=Symbol("stored-record"),BF={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},ft=class{static{a(this,"Resource")}[Oe];[ie];static transactions;constructor(t,r){this[ie]=t;let s=r?.[Oe];this[Oe]=s!==void 0?s:r||null}updateModificationTime(t=Date.now()){t>this[LAST_MODIFICATION_PROPERTY]&&(this[LAST_MODIFICATION_PROPERTY]=t)}static get=Mr(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=Og(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=Mr(function(t,r,s,n){if(Array.isArray(n)&&t[Cs]){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):Pr(t,"put")},{hasContent:!0,type:"update"});static delete=Mr(function(t,r,s,n){return t.delete?t.delete(r):Pr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Ng.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),We(s,()=>{let i=new this(n,s),o=i.put?i.put(r):Pr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static post=Mr(function(t,r,s,n){return t[ie]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Mr(function(t,r,s,n){return t.connect?t.connect(r):Pr(t,"connect")},{type:"read"});static subscribe=Mr(function(t,r,s,n){return t.subscribe?t.subscribe(r):Pr(t,"subscribe")},{type:"read"});static publish=Mr(function(t,r,s,n){return t[ie]!=null&&t.update(),t.publish?t.publish(n,r):Pr(t,"publish")},{hasContent:!0,type:"create"});static search=Mr(function(t,r,s,n){let i=t.search?t.search(s):Pr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=Og(o);return i.map(c)}return i},{type:"read"});static query=Mr(function(t,r,s,n){return t.search?t.search(n,r):Pr(t,"search")},{hasContent:!0,type:"read"});static copy=Mr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):Pr(t,"copy")},{type:"create"});static move=Mr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):Pr(t,"move")},{type:"delete"});post(t){if(this[Cs])return this.constructor.create(this[ie],t,this[Oe]);Pr(this,"post")}static isCollection(t){return t?.[Cs]}static coerceId(t){return t}static parseQuery(t){return wu(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&&BF[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:Ag(t,this)}}return Ag(t,this)}static getResource(t,r,s){let n,i=r[Oe],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let l=u.asMap.get(t);if(n=l?.find(_=>_.constructor===c),n)return n;l||u.asMap.set(t,l=[]),l.push(n=new c(t,i))}else{if(n=u.find(l=>l[ie]===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=_[ie],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[Cs]=!0),n}connect(t){let r=new Xr;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[ie]}getContext(){return this[Oe]}};ft.prototype[Oe]=null;(0,bg._assignPackageExport)("Resource",ft);a(HF,"snake_case");Uu=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(Ag,"pathToId");qE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Mr,"transactional");a(Pr,"missingMethod");a(HE,"selectFromObject");a(Og,"transformForSelect")});var GE={};et(GE,{server:()=>ht});var wg,ht,un=pe(()=>{wg=require("../index"),ht={};(0,wg._assignPackageExport)("server",ht)});var VE={};et(VE,{loadGQLSchema:()=>FF,start:()=>kE,startOnMainThread:()=>qF});function kE({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:l,StringValueNode:_}=await import("graphql"),d=o(new c(r.toString(),n)),E=new Map,f=[],h;for(let p of d.definitions)switch(p.kind){case u.OBJECT_TYPE_DEFINITION:let Y=function(A){if(A.kind==="NonNullType"){let x=Y(A.type);return x.nullable=!0,x}return A.kind==="ListType"?{type:"array",elements:Y(A.type)}:{type:A.name?.value}};a(Y,"getProperty");let S=p.name.value,N=[],O={table:null,database:null,properties:N};E.set(S,O);for(let A of p.directives){if(A.name.value==="table"){for(let w of A.arguments)O[w.name.value]=w.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=S),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,f.push(O)}if(A.name.value==="sealed"&&(O.sealed=!0),A.name.value==="export"){O.export=!0;for(let w of A.arguments)w.name.value==="name"&&(O.export={name:w.value.value})}}let H=!1;for(let A of p.fields){let w=Y(A.type);w.name=A.name.value,N.push(w);for(let x of A.directives)if(x.name.value==="primaryKey")H?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,H=!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 X of x.arguments)X.name.value==="role"&&k.push(X.value.value)}}O.typeName=S,S==="Query"&&(h=O)}for(let[p,S]of E)for(let N of S.properties){let O=E.get(N.type);O&&(N.properties=O.properties)}for(let p of f)p.tableClass=e(p),p.export&&i.set((0,xE.dirname)(s)+"/"+(p.export.name||p.typeName),p.tableClass);if(h)for(let p of h.properties){let S=E.get(p.type);if(!S)throw new Error(`${p.type} was not found as a Query export`);i.set((0,xE.dirname)(s)+"/"+p.name,S.tableClass)}}}var xE,qF,FF,Cg=pe(()=>{xE=require("path");de();a(kE,"start");qF=kE,FF=kE({ensureTable:rt}).handleFile});async function Du(e){return GF?(ca||(ca=xF(VF)),(await(await ca).import(e)).namespace):import(e)}async function xF(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ca=new Compartment({console,Math,Date,fetch:kF,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,Dg.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:ft,tables:sr,databases:Be})}};let s=await(0,Ug.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),ca}function kF(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 VF(){return{Resource:ft,tables:sr}}var Ug,Dg,GF,ca,$E=pe(()=>{Zr();de();Ug=require("fs/promises"),Dg=require("path"),GF=!1;a(Du,"secureImport");a(xF,"getCompartment");a(kF,"secureOnlyFetch");a(VF,"getGlobalVars")});var KE={};et(KE,{handleFile:()=>$F});async function $F(e,t,r,s){let n=new Map,i=(0,Lg.pathToFileURL)(r).toString(),o=await Du(i);u(o.default)&&s.set((0,YE.dirname)(t),o.default),c(o,(0,YE.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 Lg,YE,Mg=pe(()=>{Lg=require("url");$E();YE=require("path");a($F,"handleFile")});var QE={};et(QE,{start:()=>YF});function YF({resources:e}){e.set("login",WE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var WE,Pg=pe(()=>{Zr();a(YF,"start");WE=class extends ft{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 JE=m((Fse,Hg)=>{"use strict";var{Readable:KF}=require("stream"),WF=1e4;Hg.exports={streamAsJSON(e){return new zE({value:e})}};var zE=class extends KF{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),vg)}catch(n){yield vg(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);Bg(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>WF?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 Bg(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 vg(e){return console.error(e),JSON.stringify(e.toString())}a(vg,"handleError");function Bg(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Bg,"when")});var Jg=m((kse,zg)=>{"use strict";var XE=require("recursive-iterator"),QF=require("alasql"),ZE=require("clone"),qg=G(),{handleHDBError:Fg,hdb_errors:zF}=Q(),{HDB_ERROR_MSGS:Gg,HTTP_STATUS_CODES:xg}=zF,{getDatabases:JF}=(de(),re(Ne)),XF=["DISTINCT_ARRAY"],kg=Symbol("validateTables"),jE=Symbol("validateTable"),xse=Symbol("getAllColumns"),Vg=Symbol("validateAllColumns"),Lu=Symbol("findColumn"),$g=Symbol("validateOrderBy"),ua=Symbol("validateSegment"),ef=Symbol("validateColumn"),Yg=Symbol("setColumnsForTable"),Kg=Symbol("checkColumnsForAsterisk"),Wg=Symbol("validateGroupBy"),Qg=Symbol("hasColumns"),tf=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[kg](),this[Kg](),this[Vg]()}[kg](){if(this[Qg]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[jE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[jE](t.table)})}}[Qg](){let t=!1,r=new XE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[jE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=JF();if(!r[t.databaseid])throw Fg(new Error,Gg.SCHEMA_NOT_FOUND(t.databaseid),xg.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Fg(new Error,Gg.TABLE_NOT_FOUND(t.databaseid,t.tableid),xg.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=ZE(n);i.table=ZE(t),this.attributes.push(i)})}[Lu](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)}[Kg](){let t=new XE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Yg](r.tableid)}[Yg](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new QF.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Vg](){this[ua](this.statement.columns,!1),this[ua](this.statement.joins,!1),this[ua](this.statement.where,!1),this[Wg](this.statement.group,!1),this[ua](this.statement.order,!0)}[ua](t,r){if(!t)return;let s=new XE(t),n=[];for(let{node:i,path:o}of s)!qg.isEmpty(i)&&!qg.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[$g](i):n.push(this[ef](i)));return n}[Wg](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&XF.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=ZE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Lu](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[Lu](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`}[$g](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[ef](t)}[ef](t){let r=this[Lu](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]}};zg.exports=tf});var Zg=m(($se,Xg)=>{"use strict";var rf=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")}};Xg.exports=rf});var eA=m((Kse,jg)=>{"use strict";var sf=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};jg.exports=sf});var Mu=m((Qse,tA)=>{"use strict";var of=W(),af=R();of.initSync();var ZF=of.get(af.CONFIG_PARAMS.STORAGE_COMPRESSION),jF=of.get(af.CONFIG_PARAMS.STORAGE_CACHING)!==!1,eG=af.UPDATES_PROPERTY,nf=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=ZF&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=jF&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===eG)}};tA.exports=nf});var vu=m((Jse,sA)=>{"use strict";var Hi=W(),la=R();Hi.initSync();var tG=Hi.get(la.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Hi.get(la.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Hi.get(la.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",rA=Hi.get(la.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),rG=Hi.get(la.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Pu=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=tG,this.noFSAccess=!0,rA!==void 0&&(this.overlappingSync=rA),this.noReadAhead=rG}};sA.exports=Pu;Pu.MAX_DBS=1e4});var Ie=m((Zse,EA)=>{"use strict";var uf=require("lmdb"),vr=require("fs-extra"),nr=require("path"),Bu=vt(),oA=F(),Bt=rr().LMDB_ERRORS_ENUM,Hu=eA(),lf=Mu(),aA=vu(),ln=ke(),nA=R(),{table:sG,resetDatabases:nG}=(de(),re(Ne)),iA=W(),Br=ln.INTERNAL_DBIS_NAME,cA=ln.DBI_DEFINITION_NAME,iG="data.mdb",oG="lock.mdb",_a=".mdb",aG="-lock",cf=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Tr(t,r),this.key_type=this.dbi[ln.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ln.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new uf.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function qu(e,t){if(e===void 0)throw new Error(Bt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Bt.ENV_NAME_REQUIRED)}a(qu,"pathEnvNameValidation");async function _f(e,t,r=!0){try{await vr.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Bt.INVALID_BASE_PATH):s}try{let s=nr.join(e,t+_a);return await vr.access(s,vr.constants.R_OK|vr.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await vr.access(nr.join(e,t,iG),vr.constants.R_OK|vr.constants.F_OK),nr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Bt.INVALID_ENVIRONMENT)}else throw new Error(Bt.INVALID_ENVIRONMENT);throw s}}a(_f,"validateEnvironmentPath");function Fu(e,t){if(Bu.validateEnv(e),t===void 0)throw new Error(Bt.DBI_NAME_REQUIRED)}a(Fu,"validateEnvDBIName");async function cG(e,t,r=!1,s=!1){qu(e,t);let n=nr.basename(e);t=t.toString();let i=iA.get(nA.CONFIG_PARAMS.SCHEMAS);i||iA.setProperty(nA.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await _f(e,t,s),uA(e,t,r)}catch(o){if(o.message===Bt.INVALID_ENVIRONMENT){let c=nr.join(e,t);await vr.mkdirp(s?c:e);let u=new aA(s?c:c+_a,!1),l=uf.open(u);l.dbis=Object.create(null);let _=new lf(!1);l.openDB(Br,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=df(e,t,r);return l[ln.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(cG,"createEnvironment");async function uG(e,t,r,s=!0){qu(e,t),t=t.toString();let n=nr.join(e,t);return sG({table:t,database:nr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(uG,"copyEnvironment");async function uA(e,t,r=!1){qu(e,t),t=t.toString();let s=df(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 _f(e,t),i=nr.join(e,t+_a),o=n!=i,c=new aA(n,o),u=uf.open(c);u.dbis=Object.create(null);let l=_A(u);for(let _=0;_<l.length;_++)Tr(u,l[_]);return u[ln.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(uA,"openEnvironment");async function lG(e,t,r=!1){qu(e,t),t=t.toString();let s=nr.join(e,t+_a),n=await _f(e,t);if(global.lmdb_map!==void 0){let i=df(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await lA(o),delete global.lmdb_map[i]}}await vr.remove(n),await vr.remove(n===s?n+aG:nr.join(nr.dirname(n),oG))}a(lG,"deleteEnvironment");async function lA(e){Bu.validateEnv(e);let t=e[ln.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(lA,"closeEnvironment");function df(e,t,r=!1){let n=`${nr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(df,"getCachedEnvironmentName");function _G(e){Bu.validateEnv(e);let t=Object.create(null),r=Tr(e,Br);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Br)try{t[s]=Object.assign(new Hu,n)}catch{oA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(_G,"listDBIDefinitions");function _A(e){Bu.validateEnv(e);let t=[],r=Tr(e,Br);for(let{key:s}of r.getRange({start:!1}))s!==Br&&t.push(s);return t}a(_A,"listDBIs");function dG(e,t){let s=Tr(e,Br).getEntry(t),n=new Hu;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{oA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(dG,"getDBIDefinition");function dA(e,t,r,s=!r){if(Fu(e,t),t=t.toString(),t===Br)throw new Error(Bt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Tr(e,t)}catch(n){if(n.message===Bt.DBI_DOES_NOT_EXIST){let i=new lf(r,s===!0),o=e.openDB(t,i),c=new Hu(r===!0,s);return o[cA]=c,Tr(e,Br).putSync(t,c),e.dbis[t]=o,o}throw n}}a(dA,"createDBI");function Tr(e,t){if(Fu(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Br?r=dG(e,t):r=new Hu,r===void 0)throw new Error(Bt.DBI_DOES_NOT_EXIST);let s;try{let n=new lf(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(Bt.DBI_DOES_NOT_EXIST):n}return s[cA]=r,e.dbis[t]=s,s}a(Tr,"openDBI");function EG(e,t){Fu(e,t),t=t.toString();let r=Tr(e,t),s=r.getStats();return r[ln.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(EG,"statDBI");async function fG(e,t){try{let r=nr.join(e,t+_a);return(await vr.stat(r)).size}catch{throw new Error(Bt.INVALID_ENVIRONMENT)}}a(fG,"environmentDataSize");function hG(e,t){if(Fu(e,t),t=t.toString(),t===Br)throw new Error(Bt.CANNOT_DROP_INTERNAL_DBIS_NAME);Tr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Tr(e,Br).removeSync(t)}a(hG,"dropDBI");function mG(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Tr(e,i)}catch(o){if(o.message===Bt.DBI_DOES_NOT_EXIST)dA(e,i,i!==t,i===t),s=!0;else throw o}}s&&nG()}a(mG,"initializeDBIs");EA.exports={openDBI:Tr,openEnvironment:uA,createEnvironment:cG,listDBIs:_A,listDBIDefinitions:_G,createDBI:dA,dropDBI:hG,statDBI:EG,deleteEnvironment:lG,initializeDBIs:mG,TransactionCursor:cf,environmentDataSize:fG,copyEnvironment:uG,closeEnvironment:lA}});var hA=m((ene,fA)=>{"use strict";var Ef=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};fA.exports=Ef});var SA=m((rne,mA)=>{"use strict";var ff=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}};mA.exports=ff});var TA=m((nne,pA)=>{"use strict";var hf=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};pA.exports=hf});var qi=m((une,AA)=>{"use strict";var SG=Ie(),pG=hA(),TG=SA(),RG=TA(),ts=vt(),da=rr().LMDB_ERRORS_ENUM,gG=ke(),Us=R(),AG=G(),OG=require("uuid"),one=require("lmdb"),{handleHDBError:NG,hdb_errors:bG}=Q(),{OVERFLOW_MARKER:ane,MAX_SEARCH_KEY_LENGTH:cne}=gG,RA=W();RA.initSync();var Gu=RA.get(Us.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),mf=Us.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Yn=Us.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function yG(e,t,r,s,n=ts.getNextMonotonicTime()){Rf(e,t,r,s),Sf(e,t,r);let i=new pG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];gA(l,!0,n);let _=IG(e,t,r,l),d=l[t];o.push(_),c.push(d)}return pf(o,c,s,i,n)}a(yG,"insertRecords");function IG(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][Us.FUNC_VAL],s[o]=c)}let u=ts.getIndexedValues(c),l=e.dbis[o];if(u){Gu&&l.prefetch(u.map(_=>({key:_,value:n})),xu);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}Gu&&e.dbis[t].prefetch([n],xu),e.dbis[t].put(n,s,s[Yn])})}a(IG,"insertRecord");function wG(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(wG,"removeSkippedRecords");function gA(e,t,r){let s=r>0;(s||!Number.isInteger(e[Yn]))&&(e[Yn]=r||(r=ts.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[mf]))&&(e[mf]=r||ts.getNextMonotonicTime()):delete e[mf]}a(gA,"setTimestamps");function Sf(e,t,r){r.indexOf(Us.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Us.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Us.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Us.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),SG.initializeDBIs(e,t,r)}a(Sf,"initializeTransaction");async function CG(e,t,r,s,n=ts.getNextMonotonicTime()){Rf(e,t,r,s),Sf(e,t,r);let i=new TG,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=Tf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return pf(c,u,s,i,n,o)}a(CG,"updateRecords");async function UG(e,t,r,s,n=ts.getNextMonotonicTime()){try{Rf(e,t,r,s)}catch(u){throw NG(u,u.message,bG.HTTP_STATUS_CODES.BAD_REQUEST)}Sf(e,t,r);let i=new RG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;AG.isEmpty(l[t])?(_=OG.v4(),l[t]=_):_=l[t];let d=Tf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return pf(o,c,s,i,n)}a(UG,"upsertRecords");async function pf(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||ts.getNextMonotonicTime(),wG(r,i),s}a(pf,"finalizeWrite");function Tf(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(gA(r,!_,o),Number.isInteger(r[Yn])&&l[Yn]>r[Yn])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let N=l[h];if(typeof p=="function"){let H=p([[l]]);Array.isArray(H)&&(p=H[0][Us.FUNC_VAL],r[h]=p)}if(p===N)continue;let O=ts.getIndexedValues(N);if(O){Gu&&S.prefetch(O.map(H=>({key:H,value:s})),xu);for(let H=0,Y=O.length;H<Y;H++)S.remove(O[H],s)}if(O=ts.getIndexedValues(p),O){Gu&&S.prefetch(O.map(H=>({key:H,value:s})),xu);for(let H=0,Y=O.length;H<Y;H++)S.put(O[H],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Yn])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:Tf(e,t,r,s,n,i,o))}a(Tf,"updateUpsertRecord");function DG(e,t,r){if(ts.validateEnv(e),t===void 0)throw new Error(da.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(da.WRITE_ATTRIBUTES_REQUIRED):new Error(da.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(DG,"validateBasic");function Rf(e,t,r,s){if(DG(e,t,r),!Array.isArray(s))throw s===void 0?new Error(da.RECORDS_REQUIRED):new Error(da.RECORDS_MUST_BE_ARRAY)}a(Rf,"validateWrite");function xu(){}a(xu,"noop");AA.exports={insertRecords:yG,updateRecords:CG,upsertRecords:UG}});var Kn=m((_ne,LG)=>{LG.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 rs=m((dne,bA)=>{"use strict";var NA=G(),OA=R(),Fi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ds=require("joi"),_n={schema_format:{pattern:Fi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},MG=Ds.alternatives(Ds.string().min(1).max(_n.schema_length.maximum).pattern(Fi).messages({"string.pattern.base":"{:#label} "+_n.schema_format.message}),Ds.number()).required(),PG=Ds.alternatives(Ds.string().min(1).max(_n.schema_length.maximum).pattern(Fi).messages({"string.pattern.base":"{:#label} "+_n.schema_format.message}),Ds.number()),vG=Ds.alternatives(Ds.string().min(1).max(_n.schema_length.maximum).pattern(Fi).messages({"string.pattern.base":"{:#label} "+_n.schema_format.message}),Ds.number()).required();function BG(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>_n.schema_length.maximum?`'${e}' maximum of 250 characters`:Fi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(BG,"checkValidTable");function HG(e,t){return NA.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(HG,"validateSchemaExists");function qG(e,t){let r=t.state.ancestors[0].schema;return NA.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(qG,"validateTableExists");function FG(e,t){return e.toLowerCase()===OA.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${OA.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(FG,"validateSchemaName");bA.exports={common_validators:_n,schema_regex:Fi,hdb_schema_table:MG,validateSchemaExists:HG,validateTableExists:qG,validateSchemaName:FG,checkValidTable:BG,hdb_database:PG,hdb_table:vG}});var Ue=m((fne,yA)=>{"use strict";var Ht=require("validate.js");Ht.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Ht.validators.type.checks[t](e)?null:` must be a '${t}' value`};Ht.validators.type.checks={Object:function(e){return Ht.isObject(e)&&!Ht.isArray(e)},Array:Ht.isArray,Integer:Ht.isInteger,Number:Ht.isNumber,String:Ht.isString,Date:Ht.isDate,Boolean:function(e){return typeof e=="boolean"}};Ht.validators.hasValidFileExt=function(e,t){return Ht.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};yA.exports={validateObject:GG,validateObjectAsync:xG,validateBySchema:kG};function GG(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Ht(e,t,{format:"flat"});return r?new Error(r):null}a(GG,"validateObject");async function xG(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Ht.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(xG,"validateObjectAsync");function kG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(kG,"validateBySchema")});var ku=m((mne,IA)=>{var{common_validators:ss}=rs(),fa=Ue(),Ea="is required",Qe={database:{presence:!1,format:ss.schema_format,length:ss.schema_length},schema:{presence:!1,format:ss.schema_format,length:ss.schema_length},table:{presence:!0,format:ss.schema_format,length:ss.schema_length},attribute:{presence:!0,format:ss.schema_format,length:ss.schema_length},hash_attribute:{presence:!0,format:ss.schema_format,length:ss.schema_length}};function ha(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(ha,"makeAttributesStrings");function VG(e){return e=ha(e),Qe.table.presence=!1,Qe.attribute.presence=!1,Qe.hash_attribute.presence=!1,fa.validateObject(e,Qe)}a(VG,"schema_object");function $G(e){return e=ha(e),Qe.table.presence={message:Ea},Qe.attribute.presence=!1,Qe.hash_attribute.presence=!1,fa.validateObject(e,Qe)}a($G,"table_object");function YG(e){return e=ha(e),Qe.table.presence={message:Ea},Qe.attribute.presence=!1,fa.validateObject(e,Qe)}a(YG,"create_table_object");function KG(e){return e=ha(e),Qe.table.presence={message:Ea},Qe.attribute.presence={message:Ea},Qe.hash_attribute.presence=!1,fa.validateObject(e,Qe)}a(KG,"attribute_object");function WG(e){return e=ha(e),Qe.table.presence={message:Ea},Qe.attribute.presence=!1,Qe.hash_attribute.presence=!1,fa.validateObject(e,Qe)}a(WG,"describe_table");function QG(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(QG,"validateTableResidence");IA.exports={schema_object:VG,create_table_object:YG,table_object:$G,attribute_object:KG,describe_table:WG,validateTableResidence:QG}});var CA=m((pne,wA)=>{"use strict";var zG=require("uuid"),gf=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||zG.v4(),this.schema_table=`${this.schema}.${this.table}`}};wA.exports=gf});var Vu=m((Rne,UA)=>{"use strict";var JG=CA(),Af=class extends JG{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}};UA.exports=Af});var LA=m((Ane,DA)=>{"use strict";DA.exports=ZG;var XG="inserted";function ZG(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===XG?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(ZG,"returnObject")});var $u=m((Nne,HA)=>{"use strict";var jG=R(),Of=Ie(),ex=qi(),{getSystemSchemaPath:tx,getSchemaPath:rx}=Ce(),sx=Kn(),nx=ku(),ix=Vu(),ox=LA(),{handleHDBError:MA,hdb_errors:vA}=Q(),PA=G(),{HTTP_STATUS_CODES:ax}=vA,Nf=sx.hdb_attribute,BA=[];for(let e=0;e<Nf.attributes.length;e++)BA.push(Nf.attributes[e].attribute);var cx="inserted";HA.exports=ux;async function ux(e){let t=nx.attribute_object(e);if(t)throw MA(new Error,t.message,vA.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&PA.checkGlobalSchemaTable(e.schema,e.table);if(r)throw MA(new Error,r,ax.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=PA.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 ix(e.schema,e.table,e.attribute,e.id);try{let i=await Of.openEnvironment(rx(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}`);Of.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Of.openEnvironment(tx(),jG.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await ex.insertRecords(o,Nf.hash_attribute,BA,[n]);return ox(cx,c,{records:[n]},u)}catch(i){throw i}}a(ux,"lmdbCreateAttribute")});var yf=m((yne,FA)=>{var{hdb_table:lx,hdb_database:qA}=rs(),_x=Ue(),bf=require("joi"),dx={undefined:"undefined",null:"null"},Ex=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||dx[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),fx=bf.object({database:qA,schema:qA,table:lx,records:bf.array().items(bf.object().custom(Ex)).required()});FA.exports=function(e){return _x.validateBySchema(e,fx)}});var ma=m((Cne,xA)=>{"use strict";var Ls=G(),GA=F(),wne=yf(),{getDatabases:hx}=(de(),re(Ne)),{ClientError:Wn}=Q();xA.exports=mx;function mx(e){if(Ls.isEmpty(e))throw new Wn("invalid update parameters defined.");if(Ls.isEmptyOrZeroLength(e.schema))throw new Wn("invalid schema specified.");if(Ls.isEmptyOrZeroLength(e.table))throw new Wn("invalid table specified.");if(!Array.isArray(e.records))throw new Wn("records must be an array");let t=hx()[e.schema]?.[e.table];if(Ls.isEmpty(t))throw new Wn(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Ls.isEmptyOrZeroLength(o[r]))throw GA.error("a valid hash attribute must be provided with update record:",o),new Wn("a valid hash attribute must be provided with update record, check log for more info");if(!Ls.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw GA.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Wn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Ls.isEmpty(o[r])&&o[r]!==""&&s.has(Ls.autoCast(o[r]))&&(o.skip=!0),s.add(Ls.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(mx,"insertUpdateValidate")});var Sa=m((Dne,kA)=>{"use strict";var Sx=R().OPERATIONS_ENUM,If=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=Sx.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};kA.exports=If});var ga=m((Pne,VA)=>{"use strict";var Mne=Sa(),Yu=R(),Cf=G(),wf=F(),px=require("uuid"),{handleHDBError:pa,hdb_errors:Tx}=Q(),{HDB_ERROR_MSGS:Ta,HTTP_STATUS_CODES:Ra}=Tx;VA.exports=Rx;function Rx(e,t,r){for(let n=0;n<t.length;n++)gx(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Ax(i,r,e.operation)}}a(Rx,"processRows");function gx(e){if(Buffer.byteLength(String(e))>Yu.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw pa(new Error,Ta.ATTR_NAME_LENGTH_ERR(e),Ra.BAD_REQUEST,void 0,void 0,!0);if(Cf.isEmptyOrZeroLength(e)||Cf.isEmpty(e.trim()))throw pa(new Error,Ta.ATTR_NAME_NULLISH_ERR,Ra.BAD_REQUEST,void 0,void 0,!0)}a(gx,"validateAttribute");function Ax(e,t,r){if(!e.hasOwnProperty(t)||Cf.isEmptyOrZeroLength(e[t])){if(r===Yu.OPERATIONS_ENUM.INSERT||r===Yu.OPERATIONS_ENUM.UPSERT){e[t]=px.v4();return}throw wf.error("Update transaction aborted due to record with no hash value:",e),pa(new Error,Ta.RECORD_MISSING_HASH_ERR,Ra.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Yu.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw wf.error(e),pa(new Error,Ta.HASH_VAL_LENGTH_ERR,Ra.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw wf.error(e),pa(new Error,Ta.INVALID_FORWARD_SLASH_IN_HASH_ERR,Ra.BAD_REQUEST,void 0,void 0,!0)}a(Ax,"validateHash")});var YA=m((Bne,$A)=>{"use strict";var Uf=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};$A.exports=Uf});var QA=m((qne,WA)=>{"use strict";var Df=Ie(),Ox=F(),KA=rr().LMDB_ERRORS_ENUM;WA.exports=Nx;async function Nx(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 Df.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==KA.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Df.closeEnvironment(global.lmdb_map[s]),await Df.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==KA.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){Ox.error(t)}}a(Nx,"cleanLMDBMap")});var Ms=m((Gne,ZA)=>{"use strict";var Aa=require("crypto"),bx=W(),{CONFIG_PARAMS:yx}=R(),JA="aes-256-cbc",Ix=32,wx=16,Lf=64,XA=32,Cx=Lf+XA,zA=new Map;ZA.exports={encrypt:Ux,decrypt:Dx,createNatsTableStreamName:Lx};function Ux(e){let t=Aa.randomBytes(Ix),r=Aa.randomBytes(wx),s=Aa.createCipheriv(JA,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(Ux,"encrypt");function Dx(e){let t=e.substr(0,Lf),r=e.substr(Lf,XA),s=e.substr(Cx,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Aa.createDecipheriv(JA,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Dx,"decrypt");function Lx(e,t){let r=bx.get(yx.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=zA.get(r);return s||(s=Aa.createHash("md5").update(r).digest("hex"),zA.set(r,s)),s}a(Lx,"createNatsTableStreamName")});var dn=m((Vne,eO)=>{"use strict";var kne=Rr(),Ku=F(),jA=ku(),Mx=Ms(),Wu=G(),{handleHDBError:Qu,hdb_errors:Px}=Q(),{HDB_ERROR_MSGS:zu,HTTP_STATUS_CODES:Mf}=Px,vx=W();vx.initSync();var{getDatabases:Pf}=(de(),re(Ne));eO.exports={describeAll:Bx,describeTable:Ju,describeSchema:Hx};async function Bx(e){try{let t=Wu.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Pf(),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 Ju({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 Ju({schema:l,table:d},f)}E&&c.push(E)}catch(E){Ku.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 Ku.error("Got an error in describeAll"),Ku.error(t),Qu(new Error,zu.DESCRIBE_ALL_ERR)}}a(Bx,"describeAll");async function Ju(e,t){Wu.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=jA.describe_table(e);if(i)throw i;let c=Pf()[r];if(!c)throw Qu(new Error,zu.SCHEMA_NOT_FOUND(e.schema),Mf.NOT_FOUND);let u=c[s];if(!u)throw Qu(new Error,zu.TABLE_NOT_FOUND(e.schema,e.table),Mf.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=Mx.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){Ku.warn(`unable to stat table dbi due to ${d}`)}return _}a(Ju,"descTable");async function Hx(e){Wu.transformReq(e);let t=jA.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=Pf()[s];if(!i)throw Qu(new Error,zu.SCHEMA_NOT_FOUND(e.schema),Mf.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Wu.isEmpty(u)||u.describe){let l=await Ju({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(Hx,"describeSchema")});var Ps=m((Wne,iO)=>{var qx=Kn(),{callbackify:rO,promisify:Fx}=require("util"),{getDatabases:sO}=(de(),re(Ne));iO.exports={setSchemaDataToGlobal:tO,getTableSchema:Gx,getSystemSchema:xx,setSchemaDataToGlobalAsync:Fx(tO)};var nO=dn(),Yne=rO(nO.describeAll),Kne=rO(nO.describeTable);function tO(e){global.hdb_schema=sO(),e&&e()}a(tO,"setSchemaDataToGlobal");function Gx(e,t,r){let s=sO()[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(Gx,"getTableSchema");function xx(){return qx}a(xx,"getSystemSchema")});var ir=m((zne,uO)=>{"use strict";var Zu=yf(),mt=G(),kx=require("util"),ju=Hr(),Vx=Ps(),oO=F(),{handleHDBError:Qn,hdb_errors:$x}=Q(),{HTTP_STATUS_CODES:zn}=$x,Yx=kx.promisify(Vx.getTableSchema),Kx="updated",aO="inserted",cO="upserted";uO.exports={insert:Qx,update:zx,upsert:Jx,validation:Wx,flush:Xx};async function Wx(e){if(mt.isEmpty(e))throw new Error("invalid update parameters defined.");if(mt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(mt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Yx(e.schema,e.table),r=Zu(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&&mt.isEmptyOrZeroLength(c[s]))throw oO.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(!mt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw oO.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!mt.isEmpty(c[s])&&c[s]!==""&&n.has(mt.autoCast(c[s]))&&(c.skip=!0),n.add(mt.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(Wx,"validation");async function Qx(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Zu(e);if(t)throw Qn(new Error,t.message,zn.BAD_REQUEST);mt.transformReq(e);let r=mt.checkSchemaTableExist(e.schema,e.table);if(r)throw Qn(new Error,r,zn.BAD_REQUEST);let s=await ju.createRecords(e);return Xu(aO,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(Qx,"insertData");async function zx(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Zu(e);if(t)throw Qn(new Error,t.message,zn.BAD_REQUEST);mt.transformReq(e);let r=mt.checkSchemaTableExist(e.schema,e.table);if(r)throw Qn(new Error,r,zn.BAD_REQUEST);let s=await ju.updateRecords(e);return mt.isEmpty(s.existing_rows)?Xu(Kx,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Xu(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(zx,"updateData");async function Jx(e){if(e.operation!=="upsert")throw Qn(new Error,"invalid operation, must be upsert",zn.INTERNAL_SERVER_ERROR);let t=Zu(e);if(t)throw Qn(new Error,t.message,zn.BAD_REQUEST);mt.transformReq(e);let r=mt.checkSchemaTableExist(e.schema,e.table);if(r)throw Qn(new Error,r,zn.BAD_REQUEST);let s=await ju.upsertRecords(e);return Xu(cO,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(Jx,"upsertData");function Xu(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===aO?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===cO?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Xu,"returnObject");function Xx(e){return mt.transformReq(e),ju.flush(e.schema,e.table)}a(Xx,"flush")});var Bf=m((Xne,dO)=>{var Zx=Ue(),vf=require("joi"),{hdb_table:jx,hdb_database:lO}=rs(),_O={schema:lO,database:lO,table:jx},ek={date:vf.date().iso().required()},tk={timestamp:vf.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};dO.exports=function(e,t){let r=t==="timestamp"?{..._O,...tk}:{..._O,...ek},s=vf.object(r);return Zx.validateBySchema(e,s)}});var hO=m((Zne,fO)=>{var rk=Ue(),Hf=require("joi"),{hdb_table:sk,hdb_database:EO}=rs(),nk=Hf.object({schema:EO,database:EO,table:sk,hash_values:Hf.array().required(),ids:Hf.array()});fO.exports=function(e){return rk.validateBySchema(e,nk)}});var SO=m((jne,mO)=>{"use strict";var qf=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}},Ff=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}},Gf=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};mO.exports={InsertObject:qf,NoSQLSeachObject:Ff,DeleteResponseObject:Gf}});var hn=m((tie,AO)=>{"use strict";var TO=Bf(),ik=hO(),Jn=G(),pO=require("moment"),RO=F(),{promisify:ok,callbackify:ak}=require("util"),Xn=R(),ck=Ps(),xf=ok(ck.getTableSchema),kf=Hr(),{DeleteResponseObject:uk}=SO(),{handleHDBError:En,hdb_errors:lk}=Q(),{HDB_ERROR_MSGS:el,HTTP_STATUS_CODES:fn}=lk,_k="records successfully deleted",dk=ak(gO);AO.exports={delete:dk,deleteRecord:gO,deleteFilesBefore:Ek,deleteAuditLogsBefore:fk};async function Ek(e){let t=TO(e,"date");if(t)throw En(t,t.message,fn.BAD_REQUEST,void 0,void 0,!0);if(Jn.transformReq(e),!pO(e.date,pO.ISO_8601).isValid())throw En(new Error,el.INVALID_DATE,fn.BAD_REQUEST,Xn.LOG_LEVELS.ERROR,el.INVALID_DATE,!0);let s=Jn.checkSchemaTableExist(e.schema,e.table);if(s)throw En(new Error,s,fn.NOT_FOUND,Xn.LOG_LEVELS.ERROR,s,!0);let n=await kf.deleteRecordsBefore(e);if(await xf(e.schema,e.table),RO.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Ek,"deleteFilesBefore");async function fk(e){let t=TO(e,"timestamp");if(t)throw En(t,t.message,fn.BAD_REQUEST,void 0,void 0,!0);if(Jn.transformReq(e),isNaN(e.timestamp))throw En(new Error,el.INVALID_VALUE("Timestamp"),fn.BAD_REQUEST,Xn.LOG_LEVELS.ERROR,el.INVALID_VALUE("Timestamp"),!0);let r=Jn.checkSchemaTableExist(e.schema,e.table);if(r)throw En(new Error,r,fn.NOT_FOUND,Xn.LOG_LEVELS.ERROR,r,!0);let s=await kf.deleteAuditLogsBefore(e);return await xf(e.schema,e.table),RO.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(fk,"deleteAuditLogsBefore");async function gO(e){e.ids&&(e.hash_values=e.ids);let t=ik(e);if(t)throw En(t,t.message,fn.BAD_REQUEST,void 0,void 0,!0);Jn.transformReq(e);let r=Jn.checkSchemaTableExist(e.schema,e.table);if(r)throw En(new Error,r,fn.NOT_FOUND,Xn.LOG_LEVELS.ERROR,r,!0);try{await xf(e.schema,e.table);let s=await kf.deleteRecords(e);return Jn.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${_k}`),s}catch(s){if(s.message===Xn.SEARCH_NOT_FOUND_MESSAGE){let n=new uk;return n.message=Xn.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(gO,"deleteRecord")});var tl=m((sie,bO)=>{var hk=require("crypto"),OO=9;function mk(e){let t=pk(OO),r=NO(e+t);return t+r}a(mk,"createHash");function Sk(e,t){let r=e.substr(0,OO),s=r+NO(t+r);return e===s}a(Sk,"validateHash");function pk(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(pk,"generateSalt");function NO(e){return hk.createHash("md5").update(e).digest("hex")}a(NO,"md5");bO.exports={hash:mk,validate:Sk}});var IO=m((iie,yO)=>{var Vf=Ue(),It={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function Tk(e){return It.password.presence=!0,It.username.presence=!0,It.role.presence=!0,It.active.presence=!0,Vf.validateObject(e,It)}a(Tk,"addUserValidation");function Rk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Vf.validateObject(e,It)}a(Rk,"alterUserValidation");function gk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Vf.validateObject(e,It)}a(gk,"dropUserValidation");yO.exports={addUserValidation:Tk,alterUserValidation:Rk,dropUserValidation:gk}});var be=m((cie,CO)=>{"use strict";var{platform:aie}=require("os"),Ak="nats-server.zip",$f="nats-server",Ok=process.platform==="win32"?`${$f}.exe`:$f,Yf="HDB",Nk=/^[^\s.,*>]+$/,wO="__request__",bk=a(e=>`${e}.${wO}`,"REQUEST_SUBJECT"),yk={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},Ik={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},wk={HUB:"hub.pid",LEAF:"leaf.pid"},Ck={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Uk={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Yf,deliver_subject:"__HDB__.WORKQUEUE"},Dk={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Yf,deliver_subject:"HDB.SCHEMAQUEUE"},Lk={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Yf,deliver_subject:"HDB.USERQUEUE"},Mk={SUCCESS:"success",ERROR:"error"},Pk={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},vk={TXN:"txn",MSGID:"msgid"},Gi={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Bk={[Gi.ERR]:1,[Gi.WRN]:2,[Gi.INF]:3,[Gi.DBG]:4,[Gi.TRC]:5},Hk={debug:"-D",trace:"-DVV"};CO.exports={NATS_SERVER_ZIP:Ak,NATS_SERVER_NAME:$f,NATS_BINARY_NAME:Ok,PID_FILES:wk,NATS_CONFIG_FILES:Ik,SERVER_SUFFIX:Ck,WORK_QUEUE_CONSUMER_NAMES:Uk,SCHEMA_QUEUE_CONSUMER_NAMES:Dk,USER_QUEUE_CONSUMER_NAMES:Lk,NATS_TERM_CONSTRAINTS_RX:Nk,REQUEST_SUFFIX:wO,UPDATE_REMOTE_RESPONSE_STATUSES:Mk,CLUSTER_STATUS_STATUSES:Pk,REQUEST_SUBJECT:bk,SUBJECT_PREFIXES:vk,MSG_HEADERS:yk,LOG_LEVELS:Gi,LOG_LEVEL_FLAGS:Hk,LOG_LEVEL_HIERARCHY:Bk}});var DO=m((lie,UO)=>{"use strict";var qk={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))},Fk="certificate.pem",Gk="privateKey.pem",xk="ca.pem";UO.exports={CERTIFICATE_VALUES:qk,CERTIFICATE_PEM_NAME:Fk,PRIVATEKEY_PEM_NAME:Gk,CA_PEM_NAME:xk}});var Wf=m((die,HO)=>{"use strict";var vO=require("fs-extra"),j=require("joi"),kk=require("os"),{boolean:Se,string:Bs,number:or,array:Kf}=j.types(),{totalmem:LO}=require("os"),xi=require("path"),Vk=F(),sl=G(),_ie=DO(),MO=R(),$k=Ue(),PO="log",Yk="components",Kk="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Wk="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Qk="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",zk="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Jk="rootPath config parameter is undefined",Xk="clustering.enabled config parameter is undefined",vs=or.min(0).required(),nl=Kf.items({host:Bs.required(),port:vs}).empty(null),Hs;HO.exports={configValidator:Zk,routesValidator:nV,route_constraints:nl};function Zk(e){if(Hs=e.rootPath,sl.isEmpty(Hs))throw Jk;let t=Se.required(),r=j.valid("production","development").required(),s=or.min(0).max(1e3).empty(null).default(sV),n=Bs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(rl),i=j.custom(jk).messages({"any.custom":"{:#label} {:#error}"}),o=Bs.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=j.string().empty(null).default(rl),u=j.custom(eV).empty(null).default(rl),l=e.clustering?.enabled;if(sl.isEmpty(l))throw Xk;let _;return l===!0?_=j.object({enabled:t,hubServer:j.object({cluster:j.object({name:j.required().empty(null),network:j.object({port:vs,routes:nl}).required()}).required(),leafNodes:j.object({network:j.object({port:vs}).required()}).required(),network:j.object({port:vs}).required()}).required(),leafServer:j.object({network:j.object({port:vs,routes:nl}).required(),streams:j.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:j.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:Se.optional(),databaseLevel:Se.optional(),tls:j.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Se.required(),verify:Se.optional()}),user:Bs.optional().empty(null)}).required():_=j.object({enabled:t,tls:j.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Se.required()})}).required(),j.object({authentication:j.object({authorizeLocal:Se,cacheTTL:or.required(),enableSessions:Se,operationTokenTimeout:j.required(),refreshTokenTimeout:j.required()}),analytics:j.object({aggregatePeriod:or}),clustering:_,customFunctions:j.object({enabled:t,network:j.object({cors:Se.required(),corsAccessList:Kf.required(),headersTimeout:or.min(1).required(),https:Se.required(),keepAliveTimeout:or.min(1).required(),port:vs,timeout:or.min(1).required()}),nodeEnv:r,root:n,tls:j.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:j.object({enabled:t}).required(),logging:j.object({auditAuthEvents:j.object({logFailed:Se,logSuccessful:Se}),file:Se.required(),level:j.valid("notify","fatal","error","warn","info","debug","trace"),rotation:j.object({enabled:Se.optional(),compress:Se.optional(),interval:Bs.custom(rV).optional().empty(null),maxSize:Bs.custom(tV).optional().empty(null),path:Bs.optional().empty(null).default(rl)}).required(),root:n,stdStreams:Se.required(),auditLog:Se.required()}).required(),operationsApi:j.object({foreground:Se.required(),network:j.object({cors:Se.required(),corsAccessList:Kf.required(),headersTimeout:or.min(1).required(),https:Se.required(),keepAliveTimeout:or.min(1).required(),port:vs,timeout:or.min(1).required()}).required(),nodeEnv:r,tls:j.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Bs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:j.object({network:j.object({port:vs,securePort:vs}).required(),webSocket:Se.optional(),requireAuthentication:Se.optional()}),http:j.object({threads:s}).required(),storage:j.object({writeAsync:Se.required(),overlappingSync:Se.optional(),caching:Se.optional(),compression:Se.optional(),noReadAhead:Se.optional(),path:u,prefetchWrites:Se.optional()}).required(),ignoreScripts:Se.optional()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(Zk,"configValidator");function BO(e){return vO.existsSync(e)?null:`Specified path ${e} does not exist.`}a(BO,"doesPathExist");function jk(e,t){if(e===null)return;let r=BO(e);return r?t.message(r):e}a(jk,"validatePemFile");function eV(e,t){j.assert(e,Bs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=BO(e);if(r)return t.message(r)}a(eV,"validatePath");function tV(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Kk);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(Qk):e}a(tV,"validateRotationMaxSize");function rV(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Wk);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(zk):e}a(rV,"validateRotationInterval");function sV(e,t){let r=t.state.path.join("."),s=kk.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||LO();return i=Math.round(Math.min(i,LO())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),Vk.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(sV,"setDefaultThreads");function rl(e,t){if(!sl.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(sl.isEmpty(Hs))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return xi.join(Hs,Yk);case"logging.root":return xi.join(Hs,PO);case"clustering.leafServer.streams.path":return xi.join(Hs,"clustering","leaf");case"storage.path":let s=xi.join(Hs,MO.LEGACY_DATABASES_DIR_NAME);return vO.existsSync(s)?s:xi.join(Hs,MO.DATABASES_DIR_NAME);case"logging.rotation.path":return xi.join(Hs,PO);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(rl,"setDefaultRoot");function nV(e){let t=j.object({routes:nl});return $k.validateBySchema({routes:e},t)}a(nV,"routesValidator")});var Ar=m((hie,WO)=>{"use strict";var gr=R(),_t=G(),st=F(),{configValidator:iV,routesValidator:qO}=Wf(),qt=require("fs-extra"),oV=require("yaml"),qr=require("path"),aV=require("is-number"),GO=require("properties-reader"),cV=require("lodash"),{handleHDBError:uV}=Q(),{HTTP_STATUS_CODES:lV,HDB_ERROR_MSGS:il}=rr(),fie=require("minimist"),{SCHEMAS_PARAM_CONFIG:Oa,CONFIG_PARAMS:mn,CONFIG_PARAM_MAP:qs}=gr,_V="Unable to get config value because config is uninitialized",dV="Config successfully initialized",EV="Error backing up config file",fV="Empty parameter sent to getConfigValue",xO=qr.join(gr.PACKAGE_ROOT,"config","yaml",gr.HDB_DEFAULT_CONFIG_FILE),hV="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",FO={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"},ol,St;WO.exports={createConfigFile:mV,getDefaultConfig:SV,getConfigValue:VO,initConfig:$O,flattenConfig:jn,updateConfigValue:YO,updateConfigObject:TV,getConfiguration:AV,setConfiguration:OV,readConfigFile:Jf,getClusteringRoutes:NV,initOldConfig:KO,getConfigFromFile:bV,getConfigFilePath:Zn,addConfig:yV,deleteConfigFromFile:IV};function mV(e){let t=Sn(xO);ol=jn(t.toJSON());let r;for(let o in e){let c=qs[o.toLowerCase()];if(c===mn.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=Qf(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){st.error(_)}}}r&&kO(t,r),zf(t);let s=t.toJSON();St=jn(s);let n=t.getIn(["rootPath"]),i=qr.join(n,gr.HDB_CONFIG_FILE);qt.createFileSync(i),qt.writeFileSync(i,String(t)),st.trace(`Config file written to ${i}`)}a(mV,"createConfigFile");function kO(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!_t.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Oa.TABLES))for(let i in s[n][Oa.TABLES])for(let o in s[n][Oa.TABLES][i]){let c=s[n][Oa.TABLES][i][o],u=[mn.SCHEMAS,n,Oa.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[mn.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){st.error("Error parsing schemas CLI/env config arguments",s)}}a(kO,"setSchemasConfig");function SV(e){if(ol===void 0){let r=Sn(xO);ol=jn(r.toJSON())}let t=qs[e.toLowerCase()];if(t!==void 0)return ol[t.toLowerCase()]}a(SV,"getDefaultConfig");function VO(e){if(e==null){st.error(fV);return}if(St===void 0){st.trace(_V);return}let t=qs[e.toLowerCase()];if(t!==void 0)return St[t.toLowerCase()]}a(VO,"getConfigValue");function Zn(e=_t.getPropsFilePath()){let t=_t.getEnvCliRootPath();return t?qr.join(t,gr.HDB_CONFIG_FILE):GO(e).get(gr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Zn,"getConfigFilePath");function $O(e=!1){if(St===void 0||e){let t;if(!_t.noBootFile()){t=_t.getPropsFilePath();try{qt.accessSync(t,qt.constants.F_OK|qt.constants.R_OK)}catch(i){throw st.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Zn(t),s;if(r.includes("config/settings.js"))try{KO(r);return}catch(i){if(i.code!==gr.NODE_ERROR_CODES.ENOENT)throw i}try{s=Sn(r)}catch(i){if(i.code===gr.NODE_ERROR_CODES.ENOENT){st.trace(`HarperDB config file not found at ${r}.
|
|
5
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw st.error(i),new Error(`Error reading HarperDB config file at ${r}`)}pV(s,r),zf(s);let n=s.toJSON();if(St=jn(n),St.logging_rotation_rotate)for(let i in FO)St[i]&&st.error(`Config ${FO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);st.trace(dV)}}a($O,"initConfig");function pV(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],qr.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],qr.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],qr.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(st.trace("Updating config file with missing config params"),qt.writeFileSync(t,String(e)))}a(pV,"checkForUpdatedConfig");function zf(e){let t=e.toJSON(),r=iV(t);if(r.error)throw il.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(zf,"validateConfig");function TV(e,t){St===void 0&&(St={});let r=qs[e.toLowerCase()];if(r===void 0){st.trace(`Unable to update config object because config param '${e}' does not exist`);return}St[r.toLowerCase()]=t}a(TV,"updateConfigObject");function YO(e,t,r=void 0,s=!1,n=!1,i=!1){St===void 0&&$O();let o=VO(qs.hdb_root),c=qr.join(o,gr.HDB_CONFIG_FILE),u=Sn(c),l;if(r===void 0&&e.toLowerCase()===mn.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=qs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=Qf(E,t);u.setIn([...f],h)}else for(let E in r){let f=qs[E.toLowerCase()];if(f===mn.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),p=Qf(f,r[E]);f==="rootPath"&&p?.endsWith("/")&&(p=p.slice(0,-1));try{u.setIn([...h],p)}catch(S){st.error(S)}}}l&&kO(u,l),zf(u);let _=u.getIn(["rootPath"]),d=qr.join(_,gr.HDB_CONFIG_FILE);s===!0&&RV(c,_),qt.writeFileSync(d,String(u)),n&&(St=jn(u.toJSON())),st.trace(`Config parameter: ${e} updated with value: ${t}`)}a(YO,"updateConfigValue");function RV(e,t){try{let r=qr.join(t,"backup",`${gr.HDB_CONFIG_FILE}.bak`);qt.copySync(e,r),st.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){st.error(EV),st.error(r)}}a(RV,"backupConfigFile");var gV=["schemas"];function jn(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!gV.includes(r)){let s=jn(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(jn,"flattenConfig");function Qf(e,t){if(e===mn.CLUSTERING_NODENAME||e===mn.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(aV(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||_t.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 _t.autoCast(t)}a(Qf,"castConfigValue");function AV(){let e=_t.getPropsFilePath(),t=Zn(e);return Sn(t).toJSON()}a(AV,"getConfiguration");async function OV(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return YO(void 0,void 0,n,!0),hV}catch(i){throw typeof i=="string"||i instanceof String?uV(i,i,lV.BAD_REQUEST,void 0,void 0,!0):i}}a(OV,"setConfiguration");function Jf(){let e=_t.getPropsFilePath();try{qt.accessSync(e,qt.constants.F_OK|qt.constants.R_OK)}catch(s){if(!_t.noBootFile())throw st.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Zn(e);return Sn(t).toJSON()}a(Jf,"readConfigFile");function Sn(e){return oV.parseDocument(qt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Sn,"parseYamlDoc");function NV(){let e=Jf(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=_t.isEmptyOrZeroLength(t)?[]:t;let r=qO(t);if(r)throw il.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=_t.isEmptyOrZeroLength(s)?[]:s;let n=qO(s);if(n)throw il.CONFIG_VALIDATION(n.message);if(!_t.isEmptyOrZeroLength(s)&&!_t.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!_t.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw il.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(NV,"getClusteringRoutes");function KO(e){let t=GO(e);St={};for(let r in qs){let s=t.get(r.toUpperCase());if(_t.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=qs[r].toLowerCase();n===mn.LOGGING_ROOT?St[n]=qr.dirname(s):St[n]=s}return St}a(KO,"initOldConfig");function bV(e){let t=Jf();return cV.get(t,e.replaceAll("_","."))}a(bV,"getConfigFromFile");async function yV(e,t){let r=Sn(Zn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await qt.writeFile(Zn(),String(r))}a(yV,"addConfig");function IV(e){let t=Zn(_t.getPropsFilePath()),r=Sn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=qr.join(s,gr.HDB_CONFIG_FILE);qt.writeFileSync(n,String(r))}a(IV,"deleteConfigFromFile")});var zO=m((Sie,QO)=>{"use strict";var al=R(),cl=class{static{a(this,"BaseLicense")}constructor(t=0,r=al.RAM_ALLOCATION_ENUM.DEFAULT,s=al.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Xf=class extends cl{static{a(this,"ExtendedLicense")}constructor(t=0,r=al.RAM_ALLOCATION_ENUM.DEFAULT,s=al.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};QO.exports={BaseLicense:cl,ExtendedLicense:Xf}});var Na=m((Tie,tN)=>{"use strict";var Vi=require("fs-extra"),JO=tl(),XO=require("crypto"),wV=require("moment"),CV=require("uuid").v4,wt=F(),jf=require("path"),UV=G(),pn=R(),DV=zO().ExtendedLicense,ki="invalid license key format",LV="061183",MV="mofi25",PV="aes-256-cbc",vV=16,BV=32,ZO=W();ZO.initSync();var Zf;tN.exports={validateLicense:jO,generateFingerPrint:qV,licenseSearch:eN,getLicense:xV};function eh(){return jf.join(ZO.getHdbBasePath(),pn.LICENSE_KEY_DIR_NAME,pn.LICENSE_FILE_NAME)}a(eh,"getLicenseDirPath");function HV(){let e=eh();return jf.join(e,pn.LICENSE_FILE_NAME)}a(HV,"getLicenseFilePath");function th(){let e=eh();return jf.join(e,pn.REG_KEY_FILE_NAME)}a(th,"getFingerPrintFilePath");async function qV(){let e=th();try{return await Vi.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await FV();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(qV,"generateFingerPrint");async function FV(){let e=CV(),t=JO.hash(e),r=th();try{await Vi.mkdirp(eh()),await Vi.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw wt.error(`Error writing fingerprint file to ${r}`),wt.error(s),new Error("There was an error generating the fingerprint")}return t}a(FV,"writeFingerprint");function jO(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:pn.RAM_ALLOCATION_ENUM.DEFAULT,version:pn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return wt.error("empty license key passed to validate."),r;let s=th(),n=!1;try{n=Vi.statSync(s)}catch(i){wt.error(i)}if(n){let i;try{i=Vi.readFileSync(s,"utf8")}catch{wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(MV),c=o[1];c=Buffer.concat([Buffer.from(c)],vV);let u=Buffer.concat([Buffer.from(i)],BV),l=XO.createDecipheriv(PV,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=GV(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ki),wt.error(ki),new Error(ki)}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(ki),wt.error(ki),new Error(ki)}else r.exp_date=_;r.exp_date<wV().valueOf()&&(r.valid_date=!1),JO.validate(o[1],`${LV}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||wt.error("Invalid licence"),r}a(jO,"validateLicense");function GV(e,t){try{let r=XO.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{wt.warn("Check old license failed")}}a(GV,"checkOldLicense");function eN(){let e=new DV,t=[];try{t=Vi.readFileSync(HV(),"utf-8").split(pn.NEW_LINE)}catch(r){r.code==="ENOENT"?wt.info("no license file found"):wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(UV.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=jO(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){wt.error("There was an error parsing the license string."),wt.error(n),e.ram_allocation=pn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Zf=e,e}a(eN,"licenseSearch");async function xV(){return Zf||await eN(),Zf}a(xV,"getLicense")});var Or=m((Nie,SN)=>{"use strict";var oN="username is required",aN="nothing to update, must supply active, role or password to update",cN="password cannot be an empty string",uN="If role is specified, it cannot be empty.",lN="active must be true or false";SN.exports={addUser:JV,alterUser:XV,dropUser:jV,getSuperUser:s$,userInfo:e$,listUsers:ll,listUsersExternal:t$,setUsersToGlobal:Yi,findAndValidateUser:mN,getClusterUser:n$,USERNAME_REQUIRED:oN,ALTERUSER_NOTHING_TO_UPDATE:aN,EMPTY_PASSWORD:cN,EMPTY_ROLE:uN,ACTIVE_BOOLEAN:lN};var _N=ir(),kV=hn(),sh=tl(),dN=IO(),EN=Rr(),nh=Fs(),ar=G(),fN=require("validate.js"),ue=F(),{promisify:VV}=require("util"),ih=Ms(),rN=R(),sN=be(),$V=Ar(),gie=W(),Aie=Na(),YV=Kn(),{table:Oie}=(de(),re(Ne)),{handleHDBError:ns,hdb_errors:KV}=Q(),{HTTP_STATUS_CODES:is,AUTHENTICATION_ERROR_MSGS:rh,HDB_ERROR_MSGS:$i}=KV,{UserEventMsg:oh}=Fr(),nN=require("lodash"),{_assignPackageExport:WV}=require("../index");WV("getUser",mN);var hN={username:!0,active:!0,role:!0,password:!0},iN=new Map,ul=EN.searchByValue,QV=EN.searchByHash,zV=VV(kV.delete);async function JV(e){let t=fN.cleanAttributes(e,hN),r=dN.addUserValidation(t);if(r)throw ns(new Error,r.message,is.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 ul(s),n=n&&Array.from(n)}catch(u){throw ue.error("There was an error searching for a role in add user"),ue.error(u),u}if(!n||n.length<1)throw ns(new Error,$i.ROLE_NAME_NOT_FOUND(t.role),is.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw ns(new Error,$i.DUP_ROLES_FOUND(t.role),is.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=ih.encrypt(t.password)),t.password=sh.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await _N.insert(i)}catch(u){throw ue.error("There was an error searching for a user."),ue.error(u),u}ue.debug(o);try{await Yi()}catch(u){throw ue.error("Got an error setting users to global"),ue.error(u),u}if(o.skipped_hashes.length===1)throw ns(new Error,$i.USER_ALREADY_EXISTS(t.username),is.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],nh.signalUserChange(new oh(process.pid)),`${c.username} successfully added`}a(JV,"addUser");async function XV(e){let t=fN.cleanAttributes(e,hN);if(ar.isEmptyOrZeroLength(t.username))throw new Error(oN);if(ar.isEmptyOrZeroLength(t.password)&&ar.isEmptyOrZeroLength(t.role)&&ar.isEmptyOrZeroLength(t.active))throw new Error(aN);if(!ar.isEmpty(t.password)&&ar.isEmptyOrZeroLength(t.password.trim()))throw new Error(cN);if(!ar.isEmpty(t.active)&&!ar.isBoolean(t.active))throw new Error(lN);let r=ZV(t.username);if(!ar.isEmpty(t.password)&&!ar.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=ih.encrypt(t.password)),t.password=sh.hash(t.password)),t.role==="")throw new Error(uN);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 ul(i)||[])}catch(c){throw ue.error("Got an error searching for a role."),ue.error(c),c}if(!o||o.length===0){let c=$i.ALTER_USER_ROLE_NOT_FOUND(t.role);throw ue.error(c),ns(new Error,c,is.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=$i.ALTER_USER_DUP_ROLES(t.role);throw ue.error(c),ns(new Error,c,is.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 _N.update(s)}catch(i){throw ue.error("Error during update."),ue.error(i),i}try{await Yi()}catch(i){throw ue.error("Got an error setting users to global"),ue.error(i),i}return nh.signalUserChange(new oh(process.pid)),n}a(XV,"alterUser");function ZV(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(ZV,"isClusterUser");async function jV(e){try{let t=dN.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(ar.isEmpty(global.hdb_users.get(e.username)))throw ns(new Error,$i.USER_NOT_EXIST(e.username),is.NOT_FOUND,void 0,void 0,!0);let s;try{s=await zV(r)}catch(n){throw ue.error("Got an error deleting a user."),ue.error(n),n}ue.debug(s);try{await Yi()}catch(n){throw ue.error("Got an error setting users to global."),ue.error(n),n}return nh.signalUserChange(new oh(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(jV,"dropUser");async function e$(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 QV(r)}catch(n){throw ue.error("Got an error searching for a role."),ue.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw ue.error(r),r}return t}a(e$,"userInfo");async function t$(){let e;try{e=await ll()}catch(t){throw ue.error("Got an error listing users."),ue.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(t$,"listUsersExternal");async function ll(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await ul(e)}catch(o){throw ue.error("Got an error searching for roles."),ue.error(o),o}let r={};for(let o of t)r[o.id]=nN.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 ul(s)}catch(o){throw ue.error("Got an error searching for users."),ue.error(o),o}let i=new Map;for(let o of n)o=nN.cloneDeep(o),o.role=r[o.role],r$(o.role),i.set(o.username,o);return i}catch(e){throw ue.error("got an error listing users"),ue.error(e),ar.errorizeMessage(e)}return null}a(ll,"listUsers");function r$(e){try{if(!e){ue.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(YV)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){ue.error("Got an error trying to set system permissions."),ue.error(t)}}a(r$,"appendSystemTablesToRole");async function Yi(){try{let e=await ll();global.hdb_users=e}catch(e){throw ue.error(e),e}}a(Yi,"setUsersToGlobal");async function mN(e,t,r=!0){global.hdb_users||await Yi();let s=global.hdb_users.get(e);if(!s)throw ns(new Error,rh.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw ns(new Error,rh.USER_INACTIVE,is.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(iN.get(t)===s.password)return n;if(sh.validate(s.password,t))iN.set(t,s.password);else throw ns(new Error,rh.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0)}return n}a(mN,"findAndValidateUser");async function s$(){global.hdb_users||await Yi();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(s$,"getSuperUser");async function n$(){let e=await ll(),t=$V.getConfigFromFile(rN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!ar.isEmpty(r)&&r?.role?.role===rN.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=ih.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+sN.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+sN.SERVER_SUFFIX.ADMIN,r}a(n$,"getClusterUser")});var ya=m((wie,gN)=>{"use strict";var ei=F(),cr=R(),i$=QA(),yie=Ps(),Iie=dn(),o$=Or(),{validateEvent:pN}=Fr(),ba=Hr(),a$=require("process"),{resetDatabases:c$}=(de(),re(Ne)),u$={[cr.ITC_EVENT_TYPES.SCHEMA]:l$,[cr.ITC_EVENT_TYPES.USER]:RN};async function l$(e){let t=pN(e);if(t){ei.error(t);return}ei.trace("ITC schemaHandler received schema event:",e),await i$(e.message),await _$(e.message)}a(l$,"schemaHandler");async function _$(e){try{ba.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ba.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ba.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=c$();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ei.error(t)}}a(_$,"syncSchemaMetadata");var TN=[];async function RN(e){try{try{ba.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ba.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ei.warn(r)}let t=pN(e);if(t){ei.error(t);return}ei.trace(`ITC userHandler ${cr.HDB_ITC_CLIENT_PREFIX}${a$.pid} received user event:`,e),await o$.setUsersToGlobal();for(let r of TN)r()}catch(t){ei.error(t)}}a(RN,"userHandler");RN.addListener=function(e){TN.push(e)};gN.exports=u$});var Fr=m((Pie,ON)=>{"use strict";var Uie=F(),ah=G(),d$=R(),{ITC_ERRORS:Ia}=rr(),{parentPort:Die,threadId:E$,isMainThread:f$,workerData:Lie}=require("worker_threads"),{onMessageFromWorkers:h$,broadcast:Mie,broadcastWithAcknowledgement:m$}=Ve();ON.exports={sendItcEvent:S$,validateEvent:AN,SchemaEventMsg:p$,UserEventMsg:T$};var _l;h$(async(e,t)=>{_l=_l||ya(),AN(e),_l[e.type]&&await _l[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function S$(e){return!f$&&e.message&&(e.message.originator=E$),m$(e)}a(S$,"sendItcEvent");function AN(e){if(typeof e!="object")return Ia.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||ah.isEmpty(e.type))return Ia.MISSING_TYPE;if(!e.hasOwnProperty("message")||ah.isEmpty(e.message))return Ia.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||ah.isEmpty(e.message.originator))return Ia.MISSING_ORIGIN;if(d$.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Ia.INVALID_EVENT(e.type)}a(AN,"validateEvent");function p$(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(p$,"SchemaEventMsg");function T$(e){this.originator=e}a(T$,"UserEventMsg")});var Fs=m((Hie,IN)=>{"use strict";var NN=R(),Bie=G(),dl=F(),bN=YA(),Ki,{sendItcEvent:yN}=Fr();function R$(e){try{dl.trace("signalSchemaChange called with message:",e),Ki=Ki||ya();let t=new bN(NN.ITC_EVENT_TYPES.SCHEMA,e);return Ki.schema(t),yN(t)}catch(t){dl.error(t)}}a(R$,"signalSchemaChange");function g$(e){try{dl.trace("signalUserChange called with message:",e),Ki=Ki||ya();let t=new bN(NN.ITC_EVENT_TYPES.USER,e);return Ki.user(t),yN(t)}catch(t){dl.error(t)}}a(g$,"signalUserChange");IN.exports={signalSchemaChange:R$,signalUserChange:g$}});var El=m((Fie,CN)=>{"use strict";var wN=G(),A$=R(),O$=F(),N$=$u(),b$=Vu(),y$=Fs(),{SchemaEventMsg:I$}=Fr(),w$="already exists in";CN.exports=C$;async function C$(e,t,r){if(wN.isEmptyOrZeroLength(r))return r;let s=[];wN.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 U$(e,t.schema,t.name,i)})),n}a(C$,"lmdbCheckForNewAttributes");async function U$(e,t,r,s){let n=new b$(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await D$(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(w$))O$.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(U$,"createNewAttribute");async function D$(e){let t;return t=await N$(e),y$.signalSchemaChange(new I$(process.pid,A$.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(D$,"createAttribute")});var Wi=m((xie,UN)=>{"use strict";var ch=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}};UN.exports=ch});var LN=m((Vie,DN)=>{"use strict";var L$=Wi(),M$=R().OPERATIONS_ENUM,uh=class extends L${static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(M$.INSERT,r,s,n,i),this.records=t}};DN.exports=uh});var PN=m((Yie,MN)=>{"use strict";var P$=Wi(),v$=R().OPERATIONS_ENUM,lh=class extends P${static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(v$.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};MN.exports=lh});var BN=m((Wie,vN)=>{"use strict";var B$=Wi(),H$=R().OPERATIONS_ENUM,_h=class extends B${static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(H$.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};vN.exports=_h});var qN=m((zie,HN)=>{"use strict";var q$=Wi(),F$=R().OPERATIONS_ENUM,dh=class extends q${static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(F$.DELETE,s,n,t,i),this.original_records=r}};HN.exports=dh});var wa=m((Zie,kN)=>{"use strict";var Xie=require("path"),FN=Ie(),G$=LN(),x$=PN(),k$=BN(),V$=qN(),Qi=ke(),GN=G(),{CONFIG_PARAMS:$$}=R(),xN=W();xN.initSync();var fl=R().OPERATIONS_ENUM,{getTransactionAuditStorePath:Y$}=Ce();kN.exports=K$;async function K$(e,t){if(xN.get($$.LOGGING_AUDITLOG)===!1)return;let r=Y$(e.schema,e.table),s=await FN.openEnvironment(r,e.table,!0),n=W$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){FN.initializeDBIs(s,Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Qi.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),GN.isEmpty(n.user_name)||s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(K$,"writeTransaction");function W$(e,t){let r=GN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===fl.INSERT)return new G$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fl.UPDATE)return new x$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fl.UPSERT)return new k$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fl.DELETE)return new V$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(W$,"createTransactionObject")});var Eh=m((toe,VN)=>{"use strict";var Q$=ma(),eoe=Sa(),Ca=R(),z$=ga(),J$=qi().insertRecords,X$=Ie(),Z$=F(),j$=El(),{getSchemaPath:eY}=Ce(),tY=wa();VN.exports=rY;async function rY(e){try{let{schema_table:t,attributes:r}=Q$(e);z$(e,r,t.hash_attribute),e.schema!==Ca.SYSTEM_SCHEMA_NAME&&(r.includes(Ca.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ca.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ca.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ca.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await j$(e.hdb_auth_header,t,r),n=eY(e.schema,e.table),i=await X$.openEnvironment(n,e.table),o=await J$(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await tY(e,o)}catch(c){Z$.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(rY,"lmdbCreateRecords")});var KN=m((soe,YN)=>{"use strict";var $N=R(),sY=Eh(),nY=Sa(),iY=require("fs-extra"),{getSchemaPath:oY}=Ce();YN.exports=aY;async function aY(e){let t=[{name:e.schema,createddate:Date.now()}],r=new nY($N.SYSTEM_SCHEMA_NAME,$N.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await sY(r),await iY.mkdirp(oY(e.schema))}a(aY,"lmdbCreateSchema")});var QN=m((ioe,WN)=>{"use strict";var fh=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}};WN.exports=fh});var ZN=m((loe,XN)=>{"use strict";var zN=Ie(),hh=vt(),mh=rr().LMDB_ERRORS_ENUM,cY=ke(),JN=F(),aoe=G(),uY=require("lmdb"),lY=QN(),_Y=R(),{OVERFLOW_MARKER:coe,MAX_SEARCH_KEY_LENGTH:uoe}=cY,dY=_Y.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function EY(e,t,r,s){if(hh.validateEnv(e),t===void 0)throw new Error(mh.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(mh.IDS_REQUIRED):new Error(mh.IDS_MUST_BE_ITERABLE);try{let n=zN.listDBIs(e);zN.initializeDBIs(e,t,n);let i=new lY,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[dY]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,uY.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let N=n[S];if(!h.hasOwnProperty(N)||N===t)continue;let O=e.dbis[N],H=h[N];if(H!=null)try{let Y=hh.getIndexedValues(H);if(Y)for(let A=0,w=Y.length;A<w;A++)O.remove(Y[A],o)}catch{JN.warn(`cannot delete from attribute: ${N}, ${H}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){JN.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=hh.getNextMonotonicTime(),i}catch(n){throw n}}a(EY,"deleteRecords");XN.exports={deleteRecords:EY}});var Ua=m((doe,eb)=>{"use strict";var zi=G(),fY=ZN(),hY=Ie(),{getSchemaPath:mY}=Ce(),SY=wa(),pY=F();eb.exports=TY;async function TY(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(zi.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(zi.isEmptyOrZeroLength(e.hash_values)&&!zi.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];zi.isEmpty(u)||e.hash_values.push(u)}}if(zi.isEmptyOrZeroLength(e.hash_values))return jN([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(zi.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=mY(e.schema,e.table),i=await hY.openEnvironment(n,e.table),o=await fY.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await SY(e,o)}catch(c){pY.error(`unable to write transaction due to ${c.message}`)}return jN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(TY,"lmdbDeleteRecords");function jN(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(jN,"createDeleteResponse")});var ph=m((hoe,tb)=>{"use strict";var RY=R(),foe=vt();function Sh(e,t){let r=Object.create(null);if(t.length===1&&RY.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(Sh,"parseRow");function gY(e,t,r,s){let n=Sh(r,e);s.push(n)}a(gY,"searchAll");function AY(e,t,r,s){let n=Sh(r,e);s[t]=n}a(AY,"searchAllToMap");function OY(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(OY,"iterateDBI");function ti(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(ti,"pushResults");function NY(e,t,r,s,n,i){t.toString().endsWith(e)&&ti(t,r,s,n,i)}a(NY,"endsWith");function bY(e,t,r,s,n,i){t.toString().includes(e)&&ti(t,r,s,n,i)}a(bY,"contains");function yY(e,t,r,s,n,i){t>e&&ti(t,r,s,n,i)}a(yY,"greaterThanCompare");function IY(e,t,r,s,n,i){t>=e&&ti(t,r,s,n,i)}a(IY,"greaterThanEqualCompare");function wY(e,t,r,s,n,i){t<e&&ti(t,r,s,n,i)}a(wY,"lessThanCompare");function CY(e,t,r,s,n,i){t<=e&&ti(t,r,s,n,i)}a(CY,"lessThanEqualCompare");tb.exports={parseRow:Sh,searchAll:gY,searchAllToMap:AY,iterateDBI:OY,endsWith:NY,contains:bY,greaterThanCompare:yY,greaterThanEqualCompare:IY,lessThanCompare:wY,lessThanEqualCompare:CY,pushResults:ti}});var Ji=m((Roe,cb)=>{"use strict";var Tn=Ie(),Soe=F(),ur=vt(),hl=ke(),$e=rr().LMDB_ERRORS_ENUM,poe=G(),UY=R(),ml=ph(),{parseRow:DY}=ml,Toe=require("lmdb"),{OVERFLOW_MARKER:rb,MAX_SEARCH_KEY_LENGTH:LY}=hl;function sb(e,t,r,s=!1,n=void 0,i=void 0){return ri(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(sb,"iterateFullIndex");function Da(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return ri(e,t,r,(_,d,E,f)=>{let O={transaction:_,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!l,exclusiveStart:i===!0?l:u};return f===r?(O.values=!1,d.getRange(O).map(H=>({value:H}))):d.getRange(O)})}a(Da,"iterateRangeBetween");function ri(e,t,r,s){let n=e.database||e,i=Tn.openDBI(n,r);i[hl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Tn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(ri,"setupTransaction");function nb(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(rb)){if(!n)if(r)n=Tn.openDBI(e,r);else{let u=Tn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=Tn.openDBI(e,u[l]),!n[hl.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(nb,"getOverflowCheck");function MY(e,t,r,s=!1,n=void 0,i=void 0){if(ur.validateEnv(e),t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);return ri(e,t,t,(o,c,u)=>(Sl(r),r=La(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>DY(l.value,r))))}a(MY,"searchAll");function PY(e,t,r,s=!1,n=void 0,i=void 0){if(ur.validateEnv(e),t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);Sl(r),r=La(e.database||e,r);let o=new Map;for(let{key:c,value:u}of sb(e,t,t,s,n,i))o.set(c,ml.parseRow(u,r));return o}a(PY,"searchAllToMap");function vY(e,t,r=!1,s=void 0,n=void 0){if(ur.validateEnv(e),t===void 0)throw new Error($e.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=sb(e,void 0,t,r,s,n),c=o.transaction,u=nb(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(vY,"iterateDBI");function BY(e,t){if(ur.validateEnv(e),t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);return Tn.statDBI(e,t).entryCount}a(BY,"countAll");function HY(e,t,r,s,n=!1,i=void 0,o=void 0){return Rn(e,r,s),ri(e,t,r,(c,u,l,_)=>(s=ur.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(HY,"equals");function qY(e,t,r){return Rn(e,t,r),Tn.openDBI(e,t).getValuesCount(r)}a(qY,"count");function FY(e,t,r,s,n=!1,i=void 0,o=void 0){return Rn(e,r,s),ri(e,null,r,(c,u)=>{s=ur.convertKeyValueToWrite(s);let l=!0;typeof s=="number"&&(l=!1);let _;if(n===!0){let d;for(let E of u.getKeys({transaction:c,start:s}))if(!E.startsWith(s)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),_=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(s))return E;if(l===!0)return _.DONE}}),_.filter(E=>E)}else return _=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(l===!0)return _.DONE}),l?_:_.filter(d=>d)})}a(FY,"startsWith");function GY(e,t,r,s,n=!1,i=void 0,o=void 0){return ib(e,t,r,s,n,i,o,!0)}a(GY,"endsWith");function ib(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Rn(e,r,s),ri(e,null,r,(u,l,_,d)=>{let E=nb(_,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(rb)?l.getValues(f,{transaction:u}).map(p=>{let S=E(f,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?l[hl.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(p=>({key:f,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(ib,"contains");function xY(e,t,r,s,n=!1,i=void 0,o=void 0){Rn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Da(e,t,r,s,u,n,i,o,!0,!1)}a(xY,"greaterThan");function kY(e,t,r,s,n=!1,i=void 0,o=void 0){Rn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Da(e,t,r,s,u,n,i,o,!1,!1)}a(kY,"greaterThanEqual");function VY(e,t,r,s,n=!1,i=void 0,o=void 0){Rn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Da(e,t,r,u,s,n,i,o,!1,!0)}a(VY,"lessThan");function $Y(e,t,r,s,n=!1,i=void 0,o=void 0){Rn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Da(e,t,r,u,s,n,i,o,!1,!1)}a($Y,"lessThanEqual");function YY(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(ur.validateEnv(e),r===void 0)throw new Error($e.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error($e.START_VALUE_REQUIRED);if(n===void 0)throw new Error($e.END_VALUE_REQUIRED);if(s=ur.convertKeyValueToWrite(s),n=ur.convertKeyValueToWrite(n),s>n)throw new Error($e.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Da(e,t,r,s,n,i,o,c)}a(YY,"between");function KY(e,t,r,s){ur.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);if(Sl(r),r=La(n,r),s===void 0)throw new Error($e.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=ml.parseRow(c,r)),o}a(KY,"searchByHash");function WY(e,t,r){ur.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error($e.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(WY,"checkHashExists");function QY(e,t,r,s,n=[]){return ab(e,t,r,s,n),ob(e,t,r,s,n).map(i=>i[1])}a(QY,"batchSearchByHash");function zY(e,t,r,s,n=[]){ab(e,t,r,s,n);let i=new Map;for(let[o,c]of ob(e,t,r,s,n))i.set(o,c);return i}a(zY,"batchSearchByHashToMap");function ob(e,t,r,s,n=[]){return ri(e,t,t,(i,o,c)=>{r=La(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,ml.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(ob,"batchHashSearch");function ab(e,t,r,s,n){if(ur.validateEnv(e),t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);if(Sl(r),s==null)throw new Error($e.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error($e.IDS_MUST_BE_ITERABLE)}a(ab,"initializeBatchSearchByHash");function Sl(e){if(!Array.isArray(e))throw e===void 0?new Error($e.FETCH_ATTRIBUTES_REQUIRED):new Error($e.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Sl,"validateFetchAttributes");function Rn(e,t,r){if(ur.validateEnv(e),t===void 0)throw new Error($e.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error($e.SEARCH_VALUE_REQUIRED);if(r?.length>LY)throw new Error($e.SEARCH_VALUE_TOO_LARGE)}a(Rn,"validateComparisonFunctions");function La(e,t){return t.length===1&&UY.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Tn.listDBIs(e)),t}a(La,"setGetWholeRowAttributes");cb.exports={searchAll:MY,searchAllToMap:PY,count:qY,countAll:BY,equals:HY,startsWith:FY,endsWith:GY,contains:ib,searchByHash:KY,setGetWholeRowAttributes:La,batchSearchByHash:QY,batchSearchByHashToMap:zY,checkHashExists:WY,iterateDBI:vY,greaterThan:xY,greaterThanEqual:kY,lessThan:VY,lessThanEqual:$Y,between:YY}});var Xi=m((Aoe,Eb)=>{var ub=require("lodash"),lb=Ue(),De=require("joi"),JY=G(),{hdb_schema_table:pl,checkValidTable:_b,hdb_table:db,hdb_database:Tl}=rs(),{handleHDBError:XY,hdb_errors:ZY}=Q(),{getDatabases:jY}=(de(),re(Ne)),{HTTP_STATUS_CODES:eK}=ZY,tK=De.object({database:Tl,schema:Tl,table:db,search_attribute:pl,search_value:De.any().required(),get_attributes:De.array().min(1).items(pl).optional(),desc:De.bool(),limit:De.number().integer().min(1),offset:De.number().integer().min(0)}),rK=De.object({database:Tl,schema:Tl,table:db,operator:De.string().valid("and","or").default("and").lowercase(),offset:De.number().integer().min(0),limit:De.number().integer().min(1),get_attributes:De.array().min(1).items(pl).optional(),conditions:De.array().min(1).items(De.object({search_attribute:pl,search_type:De.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:De.when("search_type",{switch:[{is:"equals",then:De.any()},{is:"between",then:De.array().items(De.alternatives([De.string(),De.number()])).length(2)}],otherwise:De.alternatives(De.string(),De.number())}).required()})).required()});Eb.exports=function(e,t){let r=null;switch(t){case"value":r=lb.validateBySchema(e,tK);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(_b("database",e.schema)),i(_b("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=lb.validateBySchema(e,rK);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=JY.checkGlobalSchemaTable(e.schema,e.table);if(n)return XY(new Error,n,eK.NOT_FOUND);let o=jY()[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=ub.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!ub.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 Th=m((Noe,fb)=>{"use strict";var sK=Ie(),nK=Xi(),{getSchemaPath:iK}=Ce();fb.exports=oK;function oK(e){let t=nK(e,"hashes");if(t)throw t;let r=iK(e.schema,e.table);return sK.openEnvironment(r,e.table)}a(oK,"initialize")});var Rh=m((yoe,hb)=>{"use strict";var aK=Ji(),cK=Th();hb.exports=uK;async function uK(e){let t=await cK(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return aK.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(uK,"lmdbGetDataByHash")});var Zi=m((woe,mb)=>{"use strict";var gh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};mb.exports=gh});var pb=m((Doe,Sb)=>{"use strict";var Uoe=Zi(),lK=Ji(),_K=Th();Sb.exports=dK;async function dK(e){let t=await _K(e),r=global.hdb_schema[e.schema][e.table];return lK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(dK,"lmdbSearchByHash")});var os=m((Moe,Tb)=>{"use strict";var Ah=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=_}};Tb.exports=Ah});var Rl=m((voe,bb)=>{"use strict";var Ct=Ji(),EK=Ie(),fK=G(),oe=ke(),si=R(),hK=Kn(),Rb=rr().LMDB_ERRORS_ENUM,{getSchemaPath:mK}=Ce(),Gs=si.SEARCH_WILDCARDS;async function SK(e,t,r){let s;e.schema===si.SYSTEM_SCHEMA_NAME?s=hK[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Nb(e,s.hash_attribute,r,t);return Ab(e,n,s.hash_attribute,r)}a(SK,"prepSearch");async function Ab(e,t,r,s){let n=mK(e.schema,e.table),i=await EK.openEnvironment(n,e.table),o=Ob(i,e,t,r),c=o.transaction||i;if([oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,oe.SEARCH_TYPES.SEARCH_ALL,oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(pK(e,r)===!1){let _=e.search_attribute;if(_===r)return s?gb(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?gb(o,d):o.map(d)}let l=e.search_attribute===r?o.map(_=>_.key):o.map(_=>_.value);return s===!0?Ct.batchSearchByHashToMap(c,r,e.get_attributes,l):Ct.batchSearchByHash(c,r,e.get_attributes,l)}a(Ab,"executeSearch");function Ob(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case oe.SEARCH_TYPES.EQUALS:n=Ct.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.CONTAINS:n=Ct.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.ENDS_WITH:case oe.SEARCH_TYPES._ENDS_WITH:n=Ct.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.STARTS_WITH:case oe.SEARCH_TYPES._STARTS_WITH:n=Ct.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ct.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ct.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.SEARCH_ALL:return Ct.searchAll(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ct.searchAllToMap(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.BETWEEN:n=Ct.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case oe.SEARCH_TYPES.GREATER_THAN:case oe.SEARCH_TYPES._GREATER_THAN:n=Ct.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.GREATER_THAN_EQUAL:case oe.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ct.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.LESS_THAN:case oe.SEARCH_TYPES._LESS_THAN:n=Ct.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.LESS_THAN_EQUAL:case oe.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ct.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Ob,"searchByType");function gb(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(gb,"createMapFromIterable");function pK(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(pK,"checkToFetchMore");function Nb(e,t,r,s){if(fK.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Gs.indexOf(n)>-1)return r===!0?oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:oe.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Gs[0])<0&&n.indexOf(Gs[1])<0)return c===!0?r===!0?oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:oe.SEARCH_TYPES.EQUALS;if(Gs.indexOf(i)>=0&&Gs.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),oe.SEARCH_TYPES.CONTAINS;if(Gs.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),oe.SEARCH_TYPES.ENDS_WITH;if(Gs.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),oe.SEARCH_TYPES.STARTS_WITH;if(n.includes(Gs[0])||n.includes(Gs[1]))return oe.SEARCH_TYPES.EQUALS;throw new Error(Rb.UNKNOWN_SEARCH_TYPE)}else switch(s){case si.VALUE_SEARCH_COMPARATORS.BETWEEN:return oe.SEARCH_TYPES.BETWEEN;case si.VALUE_SEARCH_COMPARATORS.GREATER:return oe.SEARCH_TYPES.GREATER_THAN;case si.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return oe.SEARCH_TYPES.GREATER_THAN_EQUAL;case si.VALUE_SEARCH_COMPARATORS.LESS:return oe.SEARCH_TYPES.LESS_THAN;case si.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return oe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Rb.UNKNOWN_SEARCH_TYPE)}}a(Nb,"createSearchTypeFromSearchObject");bb.exports={executeSearch:Ab,createSearchTypeFromSearchObject:Nb,prepSearch:SK,searchByType:Ob}});var Ib=m((qoe,yb)=>{"use strict";var Hoe=os(),TK=Xi(),RK=G(),gK=R(),AK=Rl();yb.exports=OK;function OK(e,t){if(!RK.isEmpty(t)&&gK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=TK(e,"value");if(s)throw s;let n=!0;return AK.prepSearch(e,t,n)}a(OK,"lmdbGetDataByValue")});var Ma=m((xoe,wb)=>{"use strict";var Goe=os(),NK=Xi(),bK=G(),yK=R(),IK=Rl();wb.exports=wK;async function wK(e,t){if(!bK.isEmpty(t)&&yK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=NK(e,"value");if(s)throw s;return IK.prepSearch(e,t,!1)}a(wK,"lmdbSearchByValue")});var Ub=m(($oe,Cb)=>{"use strict";var Voe=ke(),Oh=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}},Nh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},bh=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Cb.exports={SearchByConditionsObject:Oh,SearchCondition:Nh,SortAttribute:bh}});var vb=m((Qoe,Pb)=>{"use strict";var Koe=Ub().SearchByConditionsObject,CK=os(),UK=Xi(),yh=Ji(),gl=ke(),{Resource:Woe}=(Zr(),re(FE)),Mb=Rl(),DK=ph(),LK=require("lodash"),{getSchemaPath:MK}=Ce(),Db=Ie(),{handleHDBError:PK,hdb_errors:vK}=Q(),{HTTP_STATUS_CODES:BK}=vK,HK=1e8;Pb.exports=qK;async function qK(e){let t=UK(e,"conditions");if(t)throw PK(t,t.message,BK.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=MK(e.schema,e.table),s=await Db.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)Db.openDBI(s,l.search_attribute);let i=LK.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===gl.SEARCH_TYPES.EQUALS?l.estimated_count=yh.count(s,l.search_attribute,l.search_value):_===gl.SEARCH_TYPES.CONTAINS||_===gl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=HK}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Lb(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(Mb.filterByType),d=_.length,E=yh.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=>DK.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await Lb(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=yh.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(qK,"lmdbSearchByConditions");async function Lb(e,t,r,s){let n=new CK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===gl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Mb.searchByType(e,n,i,s).map(o=>o.value)}a(Lb,"executeConditionSearch")});var ji=m((Joe,Bb)=>{"use strict";var FK=R().OPERATIONS_ENUM,Ih=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=FK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Bb.exports=Ih});var wh=m((Zoe,$b)=>{"use strict";var Gb=os(),xb=ji(),kb=Ma(),Vb=Ua(),Ft=R(),Hb=G(),qb=Ie(),{getTransactionAuditStorePath:GK,getSchemaPath:xK}=Ce(),Fb=F();$b.exports=kK;async function kK(e){try{if(Hb.isEmpty(global.hdb_schema[e.schema])||Hb.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await VK(e),await $K(e);let t=xK(e.schema,e.table);try{await qb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Fb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=GK(e.schema,e.table);await qb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Fb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(kK,"lmdbDropTable");async function VK(e){let t=new Gb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await kb(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 xb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Vb(n)}a(VK,"deleteAttributesFromSystem");async function $K(e){let t=new Gb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await kb(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 xb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Vb(n)}catch(i){throw i}}a($K,"dropTableFromSystem")});var Kb=m((eae,Yb)=>{"use strict";var YK=require("fs-extra"),KK=os(),WK=Zi(),QK=ji(),zK=wh(),JK=Ua(),XK=Rh(),ZK=Ma(),xs=R(),{getSchemaPath:jK}=Ce(),{handleHDBError:e1,hdb_errors:t1}=Q(),{HDB_ERROR_MSGS:r1,HTTP_STATUS_CODES:s1}=t1;Yb.exports=n1;async function n1(e){let t;try{t=await i1(e.schema);let r=new KK(xs.SYSTEM_SCHEMA_NAME,xs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,xs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[xs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await ZK(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await zK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new QK(xs.SYSTEM_SCHEMA_NAME,xs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await JK(n);let i=jK(t);await YK.remove(i)}catch(r){throw r}}a(n1,"lmdbDropSchema");async function i1(e){let t=new WK(xs.SYSTEM_SCHEMA_NAME,xs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[xs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await XK(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw e1(new Error,r1.SCHEMA_NOT_FOUND(e),s1.NOT_FOUND,void 0,void 0,!0);return s}a(i1,"validateDropSchema")});var Al=m((rae,Wb)=>{"use strict";var Ch=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Wb.exports=Ch});var zb=m((iae,Qb)=>{"use strict";var o1=require("fs-extra"),Ol=Ie(),{getTransactionAuditStorePath:a1}=Ce(),Uh=ke(),nae=Al();Qb.exports=c1;async function c1(e){let t;try{let r=a1(e.schema,e.table);await o1.mkdirp(r),t=await Ol.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{Ol.createDBI(t,Uh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Ol.createDBI(t,Uh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Ol.createDBI(t,Uh.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(c1,"createTransactionsAuditEnvironment")});var jb=m((aae,Zb)=>{"use strict";var Dh=R(),Jb=Ie(),u1=qi(),{getSystemSchemaPath:l1,getSchemaPath:_1}=Ce(),d1=Kn(),E1=$u(),Lh=Vu(),f1=F(),h1=zb(),Ph=d1.hdb_table,Xb=[];for(let e=0;e<Ph.attributes.length;e++)Xb.push(Ph.attributes[e].attribute);Zb.exports=m1;async function m1(e,t){let r=_1(t.schema,t.table),s=new Lh(t.schema,t.table,Dh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Lh(t.schema,t.table,Dh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Lh(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Jb.createEnvironment(r,t.table),e!==void 0){let o=await Jb.openEnvironment(l1(),Dh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await u1.insertRecords(o,Ph.hash_attribute,Xb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Mh(s),await Mh(n),await Mh(i)}await h1(t)}catch(o){throw o}}a(m1,"lmdbCreateTable");async function Mh(e){try{await E1(e)}catch(t){f1.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Mh,"createAttribute")});var ty=m((uae,ey)=>{"use strict";var S1=ma(),p1=ga(),T1=El(),Pa=R(),R1=qi().updateRecords,g1=Ie(),{getSchemaPath:A1}=Ce(),O1=wa(),N1=F();ey.exports=b1;async function b1(e){try{let{schema_table:t,attributes:r}=S1(e);p1(e,r,t.hash_attribute),e.schema!==Pa.SYSTEM_SCHEMA_NAME&&(r.includes(Pa.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Pa.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Pa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Pa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await T1(e.hdb_auth_header,t,r),n=A1(e.schema,e.table),i=await g1.openEnvironment(n,e.table),o=await R1(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await O1(e,o)}catch(c){N1.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(b1,"lmdbUpdateRecords")});var sy=m((_ae,ry)=>{"use strict";var y1=R().OPERATIONS_ENUM,vh=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=y1.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};ry.exports=vh});var iy=m((fae,ny)=>{"use strict";var Eae=sy(),I1=ma(),w1=ga(),C1=El(),va=R(),U1=qi().upsertRecords,D1=Ie(),{getSchemaPath:L1}=Ce(),M1=wa(),P1=F(),{handleHDBError:v1,hdb_errors:B1}=Q();ny.exports=H1;async function H1(e){let t;try{t=I1(e)}catch(u){throw v1(u,u.message,B1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;w1(e,s,r.hash_attribute),e.schema!==va.SYSTEM_SCHEMA_NAME&&(s.includes(va.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(va.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(va.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(va.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await C1(e.hdb_auth_header,r,s),i=L1(e.schema,e.table),o=await D1.openEnvironment(i,e.table),c=await U1(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await M1(e,c)}catch(u){P1.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(H1,"lmdbUpsertRecords")});var ay=m((mae,oy)=>{"use strict";var Bh=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};oy.exports=Bh});var uy=m((pae,cy)=>{"use strict";var Hh=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}};cy.exports=Hh});var dy=m((gae,_y)=>{"use strict";var qh=Ie(),{getTransactionAuditStorePath:q1}=Ce(),Rae=ay(),Ba=ke(),F1=G(),ly=uy(),G1=require("util").promisify,x1=G1(setTimeout),k1=1e4,V1=100;_y.exports=$1;async function $1(e){let t=q1(e.schema,e.table),r=await qh.openEnvironment(t,e.table,!0),s=qh.listDBIs(r);qh.initializeDBIs(r,Ba.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new ly;do n=await Y1(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 x1(V1);while(n.transactions_deleted>0);return i}a($1,"deleteAuditLogsBefore");async function Y1(e,t){let r=new ly;try{let s=e.dbis[Ba.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[Ba.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];F1.isEmpty(c)||(n=e.dbis[Ba.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Ba.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>k1)break}return await n,r}catch(s){throw s}}a(Y1,"deleteTransactions")});var fy=m((Oae,Ey)=>{"use strict";var Fh=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};Ey.exports=Fh});var my=m((yae,hy)=>{"use strict";var K1=os(),W1=ji(),bae=fy(),as=R(),Q1=G(),Gh=Ie(),z1=Kn(),J1=Ma(),X1=Ua(),{getSchemaPath:Z1}=Ce();hy.exports=j1;async function j1(e,t=!0){let r;e.schema===as.SYSTEM_SCHEMA_NAME?r=z1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await tW(e),n=Z1(e.schema,e.table),i=await Gh.openEnvironment(n,e.table);return t===!0&&await eW(e,i,r.hash_attribute),Gh.dropDBI(i,e.attribute),s}a(j1,"lmdbDropAttribute");async function eW(e,t,r){let s=Gh.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(eW,"removeAttributeFromAllObjects");async function tW(e){let t=new K1(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await J1(t)).filter(o=>o[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Q1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new W1(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return X1(i)}a(tW,"dropAttributeFromSystem")});var Ay=m((Cae,gy)=>{"use strict";var xh=Ie(),eo=ke(),wae=vt(),kh=R(),Sy=G(),{getTransactionAuditStorePath:rW}=Ce(),sW=Ji(),Nl=Wi(),nW=F();gy.exports=iW;async function iW(e){let t=rW(e.schema,e.table),r=await xh.openEnvironment(t,e.table,!0),s=xh.listDBIs(r);xh.initializeDBIs(r,eo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case kh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return py(r,e.search_values);case kh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,aW(r,e.search_values,n);case kh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return oW(r,e.search_values);default:return py(r)}}a(iW,"readAuditLog");function py(e,t=[0,Date.now()]){Sy.isEmpty(t[0])&&(t[0]=0),Sy.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[eo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new Nl,n))}a(py,"searchTransactionsByTimestamp");function oW(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[eo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,Ry(e,i))}return Object.fromEntries(r)}a(oW,"searchTransactionsByUsername");function aW(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=sW.equals(e,eo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,eo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,l);for(let{value:d}of _){let E=Number(d);s.has(E)?s.get(E).push(l.toString()):s.set(E,[l.toString()])}}let n=Array.from(s.keys()),i=Ry(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);Ty(u,"records",r,_,o),Ty(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(aW,"searchTransactionsByHashValues");function Ty(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 Nl(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new Nl(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(Ty,"loopRecords");function Ry(e,t){let r=[];try{let s=e.dbis[eo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new Nl,i);r.push(o)}}catch(i){nW.warn(i)}return r}catch(s){throw s}}a(Ry,"batchSearchTransactions")});var Ny=m((Mae,Oy)=>{"use strict";var{getSchemaPath:Dae}=Ce(),Lae=Ie(),{database:cW}=(de(),re(Ne));Oy.exports={writeTransaction:uW};async function uW(e,t,r){return cW({database:e,table:t}).transaction(r)}a(uW,"writeTransaction")});var wy=m((vae,Iy)=>{"use strict";var{getSchemaPath:by}=Ce(),yy=Ie();Iy.exports={flush:lW,resetReadTxn:_W};async function lW(e,t){return(await yy.openEnvironment(by(e,t),t.toString())).flushed}a(lW,"flush");async function _W(e,t){try{(await yy.openEnvironment(by(e,t),t.toString())).resetReadTxn()}catch{}}a(_W,"resetReadTxn")});var Ly=m((Hae,Dy)=>{"use strict";var{Readable:dW}=require("stream"),{getDatabases:EW}=(de(),re(Ne)),{readSync:fW,openSync:hW,createReadStream:Cy}=require("fs"),{open:mW}=require("lmdb"),Uy=Mu(),SW=vu(),{INTERNAL_DBIS_NAME:pW}=ke();Dy.exports=RW;var Vh=32768,TW=100;async function RW(e){let t=e.database||e.schema||"data",r=EW()[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=mW({noSync:!0,maxDbs:SW.MAX_DBS}),E,f=d.openDB(pW,new Uy(!1)),h=_.useReadTransaction(),p=0;for(let{key:N,value:O}of _.getRange({transaction:h,start:!1}))if(n.some(H=>N.startsWith?.(H+"/"))){f.put(N,O);let[,H]=N.split("/"),Y=!H,A=new Uy(!Y,Y);A.encoding="binary";let w=d.openDB(N,A),x=_.openDB(N,A);for(let{key:k,version:X,value:ge}of x.getRange({transaction:h,versions:Y}))E=w.put(k,ge,X),p++%TW===0&&await new Promise(ut=>setTimeout(ut,20))}await E;let S=Cy(d.path);return S.headers=u(),S.on("close",()=>{h.done(),d.close()}),S}let o=r[Object.keys(r)[0]].primaryStore,c=hW(o.path);return o.transaction(()=>{let l=Buffer.alloc(Vh);fW(c,l,0,Vh);let _=o.useReadTransaction(),d=Cy(null,{fd:c,start:Vh}),E=new dW.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(RW,"getBackup")});var vy=m((Fae,Py)=>{"use strict";var gW=F(),{handleHDBError:AW}=Q(),OW=Zg(),NW=$u(),bW=Eh(),yW=KN(),IW=Ua(),wW=Rh(),CW=pb(),UW=Ib(),DW=Ma(),LW=vb(),MW=Kb(),PW=jb(),vW=ty(),BW=iy(),HW=dy(),qW=wh(),FW=my(),GW=Ay(),xW=Ny(),My=wy(),kW=Ly(),$h=class extends OW{static{a(this,"LMDBBridge")}async searchByConditions(t){return LW(t)}async getDataByHash(t){return await wW(t)}async searchByHash(t){return await CW(t)}async getDataByValue(t,r){return await UW(t,r)}async searchByValue(t){return await DW(t)}async createSchema(t){return await yW(t)}async dropSchema(t){return await MW(t)}async createTable(t,r){return await PW(t,r)}async dropTable(t){return await qW(t)}async createAttribute(t){return await NW(t)}async createRecords(t){return await bW(t)}async updateRecords(t){return await vW(t)}async upsertRecords(t){try{return await BW(t)}catch(r){throw AW(r,null,null,gW.ERR,r)}}async deleteRecords(t){return await IW(t)}async dropAttribute(t){return await FW(t)}async deleteAuditLogsBefore(t){return await HW(t)}async readAuditLog(t){return await GW(t)}writeTransaction(t,r,s){return xW.writeTransaction(t,r,s)}flush(t,r){return My.flush(t,r)}resetReadTxn(t,r){return My.resetReadTxn(t,r)}getBackup(t){return kW(t)}};Py.exports=$h});var $y={};et($y,{ResourceBridge:()=>Wh});function Qh({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 Hy(e,t){let r=cs(e),s=Qh(e,r);if(!r)throw new Gr.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user};return We(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&&yu(u),t?yield{key:c,value:u}:yield u}})}function cs(e){let t=e.database||e.schema||$W,r=xr()[t];if(!r)throw(0,Gr.handleHDBError)(new Error,VW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function qy(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*Fy(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 Gy,bl,Gr,xy,ky,kr,Yh,Kh,Vy,VW,$W,YW,KW,By,Wh,Yy=pe(()=>{"use strict";Gy=D(vy()),bl=D(Xi()),Gr=D(Q());de();xy=D(ma()),ky=D(ga()),kr=D(R()),Yh=D(Fs()),Kh=D(Fr()),Vy=D(G());$n();Iu();({HDB_ERROR_MSGS:VW}=Gr.hdb_errors),$W="data",YW=1e4,KW=10,Wh=class extends Gy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),By=this}async searchByConditions(t){let r=(0,bl.default)(t,"conditions");if(r)throw(0,Gr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=cs(t);if(!s)throw new Gr.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Qh(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Gr.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}rt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await cs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=cs(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){cs(t).dropTable()}createSchema(t){return Ha({database:t.schema,table:null}),Yh.signalSchemaChange(new Kh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await zh(t.schema),Yh.signalSchemaChange(new Kh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,By.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,xy.default)(t);(0,ky.default)(t,s,r.primaryKey);let n,i=xr()[t.schema][t.table],o={user:t.hdb_user};return We(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=yu(d));for(let E in _)if(Object.prototype.hasOwnProperty.call(_,E)){let f=_[E];if(typeof f=="function")try{let h=f([[d]]);Array.isArray(h)&&(f=h[0].func_val,_[E]=f)}catch(h){throw h.message+="Trying to set key "+E+" on object"+JSON.stringify(_),h}}if(d)for(let E in d)Object.prototype.hasOwnProperty.call(_,E)||(_[E]=d[E]);await i.put(_,o),u.push(_[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:l}})}async deleteRecords(t){let r=xr()[t.schema][t.table],s={user:t.hdb_user};return We(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 qy(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=xr()[t.schema][t.table];if(!r.createdTimeProperty)throw new Gr.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:kr.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],l=a(async()=>{let _=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(..._.deleted_hashes),o.push(..._.skipped_hashes),await(0,Vy.async_set_timeout)(KW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%YW===0&&await l();return u.length>0&&await l(),n?qy(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,bl.default)(t,"hashes");if(r)throw r;return Hy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of Hy(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&kr.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,bl.default)(t,"value");if(s)throw s;let n=cs(t);if(!n)throw new Gr.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===kr.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Qh(t,n)})}async getDataByValue(t,r){let s=new Map,n=cs(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){cs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return cs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=cs(t),s={};switch(t.search_type){case kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of Fy(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return Fy(r,t.search_values?.[0],t.search_values?.[1])}}};a(Qh,"getSelect");a(Hy,"getRecords");a(cs,"getTable");a(qy,"createDeleteResponse");a(Fy,"groupRecordsInHistory")});var Hr=m((Yae,Ky)=>{"use strict";var{ResourceBridge:WW}=(Yy(),re($y)),QW=W();QW.initSync();var yl;function zW(){return yl||(yl=new WW,yl)}a(zW,"getBridge");Ky.exports=zW()});var Jy=m((Wae,zy)=>{"use strict";var Wy=require("lodash"),qa=require("mathjs"),JW=require("jsonata"),Qy=G();zy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Wy.uniqWith(e,Wy.isEqual):e,searchJSON:XW,mad:Fa.bind(null,qa.mad),mean:Fa.bind(null,qa.mean),mode:Fa.bind(null,qa.mode),prod:Fa.bind(null,qa.prod),median:Fa.bind(null,qa.median)};function Fa(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(Fa,"aggregateFunction");function XW(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(Qy.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Qy.isEmpty(this.__ala__.res[r])){let s=JW(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(XW,"searchJSON")});var Zy=m((zae,Xy)=>{"use strict";var ze=require("moment"),Jh="YYYY-MM-DDTHH:mm:ss.SSSZZ";ze.suppressDeprecationWarnings=!0;Xy.exports={current_date:()=>ze().utc().format("YYYY-MM-DD"),current_time:()=>ze().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return ze(e).utc().format("YYYY");case"month":return ze(e).utc().format("MM");case"day":return ze(e).utc().format("DD");case"hour":return ze(e).utc().format("HH");case"minute":return ze(e).utc().format("mm");case"second":return ze(e).utc().format("ss");case"millisecond":return ze(e).utc().format("SSS");default:break}},date:e=>ze(e).utc().format(Jh),date_format:(e,t)=>ze(e).utc().format(t),date_add:(e,t,r)=>ze(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>ze(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=ze(e).utc(),n=ze(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>ze().utc().valueOf(),get_server_time:()=>ze().format(Jh),offset_utc:(e,t)=>ze(e).utc().utcOffset(t).format(Jh)}});var rI=m((Jae,tI)=>{"use strict";var ZW=require("@turf/area"),jW=require("@turf/length"),eQ=require("@turf/circle"),tQ=require("@turf/difference"),rQ=require("@turf/distance"),sQ=require("@turf/boolean-contains"),nQ=require("@turf/boolean-equal"),iQ=require("@turf/boolean-disjoint"),oQ=require("@turf/helpers"),jy=R(),le=G();tI.exports={geoArea:aQ,geoLength:cQ,geoCircle:uQ,geoDifference:lQ,geoDistance:eI,geoNear:_Q,geoContains:dQ,geoEqual:EQ,geoCrosses:fQ,geoConvert:hQ};var Xh="geo1 is required",Zh="geo2 is required";function aQ(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),ZW.default(e)}a(aQ,"geoArea");function cQ(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),jW.default(e,{units:t||"kilometers"})}a(cQ,"geoLength");function uQ(e,t,r){if(le.isEmpty(e))throw new Error("point is required");if(le.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),eQ.default(e,t,{units:r||"kilometers"})}a(uQ,"geoCircle");function lQ(e,t){if(le.isEmpty(e))throw new Error("poly1 is required");if(le.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),tQ(e,t)}a(lQ,"geoDifference");function eI(e,t,r){if(le.isEmpty(e))throw new Error("point1 is required");if(le.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),rQ.default(e,t,{units:r||"kilometers"})}a(eI,"geoDistance");function _Q(e,t,r,s){if(le.isEmpty(e))throw new Error("point1 is required");if(le.isEmpty(t))throw new Error("point2 is required");if(le.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return eI(e,t,s)<=r}a(_Q,"geoNear");function dQ(e,t){if(le.isEmpty(e))throw new Error(Xh);if(le.isEmpty(e))throw new Error(Zh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),sQ.default(e,t)}a(dQ,"geoContains");function EQ(e,t){if(le.isEmpty(e))throw new Error(Xh);if(le.isEmpty(e))throw new Error(Zh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),nQ.default(e,t)}a(EQ,"geoEqual");function fQ(e,t){if(le.isEmpty(e))throw new Error(Xh);if(le.isEmpty(e))throw new Error(Zh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!iQ.default(e,t)}a(fQ,"geoCrosses");function hQ(e,t,r){if(le.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(le.isEmpty(t))throw new Error("geo_type is required");if(le.isEmpty(jy.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(jy.GEO_CONVERSION_ENUM).join(",")}`);return oQ[t](e,r)}a(hQ,"geoConvert")});var Il=m((Zae,sI)=>{var ni=Jy(),lr=Zy(),us=rI();sI.exports=e=>{e.aggr.mad=e.aggr.MAD=ni.mad,e.aggr.mean=e.aggr.MEAN=ni.mean,e.aggr.mode=e.aggr.MODE=ni.mode,e.aggr.prod=e.aggr.PROD=ni.prod,e.aggr.median=e.aggr.MEDIAN=ni.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ni.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ni.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=lr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=lr.current_time,e.fn.extract=e.fn.EXTRACT=lr.extract,e.fn.date=e.fn.DATE=lr.date,e.fn.date_format=e.fn.DATE_FORMAT=lr.date_format,e.fn.date_add=e.fn.DATE_ADD=lr.date_add,e.fn.date_sub=e.fn.DATE_SUB=lr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=lr.date_diff,e.fn.now=e.fn.NOW=lr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=lr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=lr.get_server_time,e.fn.getdate=e.fn.GETDATE=lr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=lr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=us.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=us.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=us.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=us.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=us.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=us.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=us.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=us.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=us.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=us.geoNear}});var aI=m((jae,oI)=>{"use strict";var Ga=require("lodash"),pt=require("alasql");pt.options.cache=!1;var mQ=Il(),nI=require("clone"),wl=require("recursive-iterator"),se=F(),ne=G(),to=Hr(),SQ=R(),{hdb_errors:pQ}=Q(),{getDatabases:iI}=(de(),re(Ne)),TQ="IS NULL",Vr="There was a problem performing this search. Please check the logs and try again.";mQ(pt);var jh=class{static{a(this,"SQLSearch")}constructor(t,r){if(ne.isEmpty(t))throw se.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),ne.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ne.isEmptyOrZeroLength(s))return se.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw se.error("Error thrown from checkEmptySQL in SQLSearch class method search."),se.error(s),new Error(Vr)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw se.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),se.error(s),new Error(Vr)}if(Object.keys(this.data).length===0)return se.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw se.error("Error thrown from processJoins in SQLSearch class method search."),se.error(s),new Error(Vr)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw se.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),se.error(s),new Error(Vr)}try{return t=await this._finalSQL(),t}catch(s){throw se.error("Error thrown from finalSQL in SQLSearch class method search."),se.error(s),new Error(Vr)}}_getColumns(){let t=new wl(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(nI(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ga.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=iI()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ne.isEmpty(this.statement.where)){se.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new wl(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ne.isEmpty(r)&&r.right)if(ne.isNotEmptyAndHasValue(r.right.value)){let s=ne.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new pt.yy.LogicValue({value:s}):r.right instanceof pt.yy.StringValue&&!ne.isEmpty(s)&&ne.autoCasterIsNumberCheck(s.toString())&&(r.right=new pt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ne.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new pt.yy.LogicValue({value:i}):s instanceof pt.yy.StringValue&&ne.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new pt.yy.NumValue({value:i}))});if(t){se.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new wl(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!ne.isEmpty(SQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ne.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ne.isEmptyOrZeroLength(r.left.columnid)||ne.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(ne.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!ne.isEmpty(r.right.value)||!ne.isEmpty(r.left.value)?s.add(ne.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let l=0;l<u.length;l++)if(u[l].value)s.add(u[l].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from)&&ne.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Ga.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(ne.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ne.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&!ne.isEmptyOrZeroLength(this.columns.columns))return t;if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pt.promise(r)}catch(r){throw se.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),se.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(nI(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(ne.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(TQ)>-1&&this.tables.forEach(n=>{let i={columnid:iI()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Ga.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,l=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ne.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await to.getDataByHash(c);for(let d of c.hash_values)_.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(_){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(Vr)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[l].values).map(async _=>{let d=Object.assign({},c);d.search_value=_;let E=await to.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]):(this.data[i].__merged_data[f]=[...s[i]],this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(f)))}))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(Vr)}else if(!ne.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.comparator_search_values[l].comparators))try{let _=this.comparator_search_values[l].comparators;for(let d=0,E=_.length;d<E;d++){let f=_[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await to.getDataByValue(c,f.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(p)));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(p)))}}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),se.error(_),new Error(Vr)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await to.getDataByValue(c);if(u)for(let[d]of _)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(d)));else for(let[d,E]of _)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(d)))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),se.error(_),new Error(Vr)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof pt.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new pt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new pt.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new pt.yy.FuncValue:new pt.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,p=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${p}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${p}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",l="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(l="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let _="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(_=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${l} ${_} ${d}`,h=this._convertColumnsToIndexes(f,n);E=await pt.promise(h,t),t=null}catch(f){throw se.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),se.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let p=E[f];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),p=Ga.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,N=p.length;S<N;S++){let O=p[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[O]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new wl(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=Ga.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw se.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),se.error(i),new Error(Vr)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let _ in i)o.push(i[_][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await to.getDataByHash(c),l=n.columns.length;for(let _=0,d=o.length;_<d;_++){let E=o[_],f=u.get(E);for(let h=0;h<l;h++){let p=n.columns[h],S=f[p]===void 0?null:f[p];this.data[s].__merged_data[E].push(S)}}}}catch(r){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getData."),se.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();se.trace(`Final SQL: ${n}`),s=await pt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),se.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw se.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),se.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return se.error(pQ.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),se.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],l=new RegExp(`${u}.\`${o}\``,"g"),_=`${u}.[${c}]`;s=s.replace(l,_)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),l=`[${c}]`;s=s.replace(u,l)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await to.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw se.error("There was an error when processing this SQL operation. Check your logs"),se.error(o),new Error(Vr)}}return Object.values(Object.values(this.data)[0].__merged_data)}};oI.exports=jh});var Rr=m((tce,cI)=>{"use strict";var RQ=Jg();cI.exports={searchByConditions:AQ,searchByHash:OQ,searchByValue:NQ,search:bQ};var em=Hr(),{transformReq:tm}=G(),gQ=aI();async function AQ(e){return tm(e),em.searchByConditions(e)}a(AQ,"searchByConditions");async function OQ(e){tm(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of em.searchByHash(e))r&&t.push(r);return t}a(OQ,"searchByHash");async function NQ(e){tm(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of em.searchByValue(e))t.push(r);return t}a(NQ,"searchByValue");function bQ(e,t){try{let r=new RQ(e);r.validate(),new gQ(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(bQ,"search")});var Cl=m((sce,uI)=>{"use strict";var yQ=Hr();uI.exports={writeTransaction:IQ};function IQ(e,t,r){return yQ.writeTransaction(e,t,r)}a(IQ,"writeTransaction")});var EI=m((oce,dI)=>{"use strict";var wQ=Rr(),CQ=Ps(),lI=F(),UQ=ir(),ice=Cl(),DQ=require("clone"),sm=require("alasql"),LQ=Il(),_I=require("util"),MQ=_I.promisify(CQ.getTableSchema),PQ=_I.promisify(wQ.search),vQ=R(),rm=G();LQ(sm);dI.exports={update:HQ};var BQ="There was a problem performing this update. Please check the logs and try again.";async function HQ({statement:e,hdb_user:t}){let r=await MQ(e.table.databaseid,e.table.tableid),s=qQ(e.columns);rm.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=DQ(n),c=rm.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=sm.parse(u).statements[0],_=await PQ(l),d=FQ(s,_);return GQ(o,d,t)}a(HQ,"update");function qQ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=sm.compile(`SELECT ${r.expression.toString()} AS [${vQ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw lI.error(t),new Error(BQ)}}a(qQ,"createUpdateRecord");function FQ(e,t){return rm.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(FQ,"buildUpdateRecords");async function GQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await UQ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){lI.error(`Error delete new_attributes from update response: ${i}`)}return n}a(GQ,"updateRecords")});var hI=m((lce,fI)=>{var xQ=require("alasql"),kQ=Rr(),VQ=F(),$Q=Hr(),im=require("util"),nm=G(),YQ=R(),KQ=Ps(),cce=Cl(),uce=ir(),WQ="record",QQ="successfully deleted",zQ=im.callbackify(jQ),JQ=im.promisify(kQ.search),XQ=im.promisify(KQ.getTableSchema);fI.exports={convertDelete:zQ};function ZQ(e){return`${e.deleted_hashes.length} ${WQ}${e.deleted_hashes.length===1?"":"s"} ${QQ}`}a(ZQ,"generateReturnMessage");async function jQ({statement:e,hdb_user:t}){let r=await XQ(e.table.databaseid,e.table.tableid);nm.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=nm.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=xQ.parse(o).statements[0],u={operation:YQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await JQ(c);let l=await $Q.deleteRecords(u);return nm.isEmptyOrZeroLength(l.message)&&(l.message=ZQ(l)),delete l.txn_time,l}catch(l){throw VQ.error(l),l.hdb_code?l.message:l}}a(jQ,"convertDelete")});var RI=m((dce,TI)=>{"use strict";var ez=dn(),{hdb_errors:mI}=Q(),{getDatabases:SI}=(de(),re(Ne));TI.exports={checkSchemaExists:pI,checkSchemaTableExists:tz,schema_describe:ez};async function pI(e){if(!SI()[e])return mI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(pI,"checkSchemaExists");async function tz(e,t){let r=await pI(e);if(r)return r;if(!SI()[e][t])return mI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(tz,"checkSchemaTableExists")});var xa=m((fce,rz)=>{rz.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 vl={};et(vl,{addAnalyticsListener:()=>um,recordAction:()=>oi,recordActionBinary:()=>Pl,setAnalyticsEnabled:()=>sz});function sz(e){UI=e}function oi(e,t,r,s,n){if(!UI)return;let i=t+"-"+r;s&&(i+="-"+s);let o=Ll.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Ll.set(i,o)),Dl||nz()}function Pl(e,t,r,s,n){oi(e?1:0,t,r,s,n)}function um(e){LI.push(e)}function nz(){Dl=performance.now(),setTimeout(()=>{let e=performance.now()-Dl;Dl=0;let t=[],r={time:Date.now(),period:e,threadId:ii.threadId,metrics:t};for(let[n,i]of Ll)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:ii.threadId,...s});for(let n of LI)n(t);Ll=new Map,ii.parentPort?ii.parentPort.postMessage({type:DI,report:r}):PI({report:r})},cm).unref()}async function iz(e,t=6e4){let r=lm(),s;for(let _ of r.primaryStore.getRange({start:Ul+"z",end:Ul,reverse:!0}))if(_.value?.time){s=_.value.time;break}if(Date.now()-t<s)return;let n,i=new Map,o;for(let{key:_,value:d}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!d)continue;if(n){if(_>n+t)break}else n=_;o=_;let{metrics:E}=d;for(let f of E||[]){let{path:h,method:p,type:S,metric:N,count:O,threadId:H,...Y}=f;O||(O=1);let A=N+(h?"-"+h:"");p&&(A+="-"+p);let w=i.get(A);if(w)for(let x in Y){let k=Y[x];if(typeof k=="number"){let X=w.count||1;w[x]=(w[x]*X+k*O)/(w.count=X+O)}}else w=Object.assign({period:t},f),i.set(A,w)}await oz()}for(let[_,d]of i)d.id=Ul+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:Ul+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-gI,active:l-AI,time:c}),gI=u,AI=l}async function az(e,t){let r=lm(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function lm(){return OI||(OI=rt({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function uz(){MI=!0,setInterval(async()=>{await iz(cm,am),await az(cz,cm)},am/2).unref()}function PI(e,t){let r=e.report;r.threadId=t?.threadId||ii.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(NI+=s.mean*s.count);r.totalBytesProcessed=NI,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(bI.get(t))}),bI.set(t,t.performance.eventLoopUtilization())),r.id=(0,wI.getNextMonotonicTime)(),lm().put(r),MI||uz(),lz&&(vI=dz(r))}async function dz(e){if(await vI,!gn){let r=(0,ka.dirname)((0,II.getLogFilePath)());try{gn=await(0,om.open)((0,ka.join)(r,"analytics.log"),"r+")}catch{gn=await(0,om.open)((0,ka.join)(r,"analytics.log"),"w+")}}let t=(await gn.stat()).size;if(t>_z){let r=Buffer.alloc(t);await gn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await gn.write(r,{position:0}),await gn.truncate(r.length),t=r.length}await gn.write(JSON.stringify(e)+`
|
|
6
|
-
`,t)}var
|
|
1
|
+
"use strict";var pH=Object.create;var Wo=Object.defineProperty;var TH=Object.getOwnPropertyDescriptor;var RH=Object.getOwnPropertyNames;var gH=Object.getPrototypeOf,AH=Object.prototype.hasOwnProperty;var a=(e,t)=>Wo(e,"name",{value:t,configurable:!0});var Se=(e,t)=>()=>(e&&(t=e(e=0)),t);var m=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),tt=(e,t)=>{for(var r in t)Wo(e,r,{get:t[r],enumerable:!0})},fR=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of RH(t))!AH.call(e,n)&&n!==r&&Wo(e,n,{get:()=>t[n],enumerable:!(s=TH(t,n))||s.enumerable});return e};var C=(e,t,r)=>(r=e!=null?pH(gH(e)):{},fR(t||!e||!e.__esModule?Wo(r,"default",{value:e,enumerable:!0}):r,e)),re=e=>fR(Wo({},"__esModule",{value:!0}),e);var SR=m((Jre,mR)=>{var OH=require("fast-glob"),{statSync:RE,existsSync:gE,readFileSync:NH,writeFileSync:bH}=require("fs"),{spawnSync:yH,spawn:IH}=require("child_process"),{isMainThread:wH}=require("worker_threads"),{join:ys,relative:hR}=require("path"),{PACKAGE_ROOT:Sr}=g(),{tmpdir:CH}=require("os");require("source-map-support").install();var UH=["resources","server","dataLayer"],Qo="ts-build",AE,DH=__filename.endsWith("tsBuild.js");if(DH){if(wH){let r;try{RE(ys(Sr,Qo)),r=!0}catch{}if(r)for(let s of OH.sync(UH.map(n=>n+"/**/*.ts"),{cwd:Sr})){let n=0,i=0;try{n=RE(ys(Sr,s)).mtimeMs-5e3,i=RE(ys(Sr,Qo,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."),AE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),AE=!0;if(AE){let s=yH(process.argv[0],[ys(Sr,"node_modules/.bin/tsc")],{cwd:Sr});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let n=ys(CH(),"harperdb-tsc.pid"),i;if(gE(n))try{process.kill(+NH(n,{encoding:"utf8"}),0),i=!0}catch{}if(!i){console.log("starting tsc background process");let o=IH(process.argv[0],[ys(Sr,"node_modules/.bin/tsc"),"--watch"],{cwd:Sr,detached:!0,stdio:"ignore"});bH(n,o.pid.toString()),o.unref()}}}}let e=mR.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Sr)&&!s[0].includes("node_modules")){let i=hR(Sr,s[0]),o;i.startsWith(Qo)?o=ys(Sr,hR(Qo,i)):o=ys(Sr,Qo,i);let c=ys(o,r),u=c+".js";if(gE(u))return u;if(c.includes(".")&&gE(c))return c}return t(r,s,n)}}});var g=m((jre,DR)=>{"use strict";var pr=require("path"),LH=require("fs"),{relative:Xre,join:Zre}=pr,{existsSync:MH}=LH;function PH(){let e=__dirname;for(;!MH(pr.join(e,"package.json"));){let t=pr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(PH,"getHDBPackageRoot");var un=PH(),pR="js",Eu=pR,vH="harperdb-config.yaml",BH="defaultConfig.yaml",HH="hdb",TR=`harperdb.${Eu}`,RR=`customFunctionsServer.${Eu}`,qH=`restartHdb.${Eu}`,NE="HarperDB",du="Custom Functions",fu="Clustering Hub",hu="Clustering Leaf",FH="Clustering Ingest Service",GH="Clustering Reply Service",xH="foreground.pid",kH="hdb.pid",VH="data",$H={HDB:NE,CLUSTERING_HUB:fu,CLUSTERING_LEAF:hu,CLUSTERING_INGEST_SERVICE:FH,CLUSTERING_REPLY_SERVICE:GH,CUSTOM_FUNCTIONS:du,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"},YH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},KH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},WH={harperdb:NE,"clustering hub":fu,"clustering leaf":hu,"custom functions":du,custom_functions:du,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},QH={CLUSTERING_HUB_PROC_DESCRIPTOR:fu,CLUSTERING_LEAF_PROC_DESCRIPTOR:hu},OE={HDB:pr.join(un,"server/harperdb"),CUSTOM_FUNCTIONS:pr.join(un,"server/customFunctions"),CLUSTERING_HUB:pr.join(un,"server/nats"),CLUSTERING_LEAF:pr.join(un,"server/nats")},zH={HDB:pr.join(OE.HDB,TR),CUSTOM_FUNCTIONS:pr.join(OE.CUSTOM_FUNCTIONS,RR)},JH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:pr.join(un,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:pr.join(un,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:pr.join(un,"launchServiceScripts/launchUpdateNodes4-0-0.js")},XH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},gR="support@harperdb.io",ZH="customer-success@harperdb.io",AR=1,jH=4141,OR="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",e0="https://www.harperdb.io/product",t0=`For support, please submit a request at ${OR} or contact ${gR}`,NR=`For license support, please contact ${ZH}`,r0="None of the specified records were found.",s0="hash attribute not found",n0=`Your current license only supports ${AR} role. ${NR}`,i0="Your current license only supports 3 connections to a node.",o0="127.0.0.1",a0=1,c0=/^\.$/,u0=/^\.\.$/,l0="U+002E",_0=/\//g,d0="U+002F",E0=/U\+002F/g,f0=/^U\+002E$/,h0=/^U\+002EU\+002E$/,m0="d",S0=999999,p0="*",T0="--max-old-space-size=",R0="system",g0="__hdb_hash",A0=".harperdb",O0=".hdb",N0="keys",b0="hdb_boot_properties.file",y0=".updateConfig.json",I0="SIGTSTP",w0=24,C0=6e4,U0=448,D0="blob",L0="trash",M0="database",P0="schema",v0="transactions",B0=".count",H0="id",q0="PROCESS_NAME",bR={SETTINGS_PATH_KEY:"settings_path"},yR=require("lodash"),F0={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"},G0={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},x0={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},k0={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"},V0={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:",$0={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"},Y0={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"},K0="060493.ks",W0=".license",Q0={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"},z0={CSV:".csv",JSON:".json"},J0={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},X0={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},zo={};zo[K.INSERT]=K.INSERT;zo[K.UPDATE]=K.UPDATE;zo[K.UPSERT]=K.UPSERT;zo[K.DELETE]=K.DELETE;var ge=Object.create(null);ge[K.DESCRIBE_ALL]=K.DESCRIBE_ALL;ge[K.DESCRIBE_TABLE]=K.DESCRIBE_TABLE;ge[K.DESCRIBE_SCHEMA]=K.DESCRIBE_SCHEMA;ge[K.READ_LOG]=K.READ_LOG;ge[K.ADD_NODE]=K.ADD_NODE;ge[K.LIST_USERS]=K.LIST_USERS;ge[K.LIST_ROLES]=K.LIST_ROLES;ge[K.USER_INFO]=K.USER_INFO;ge[K.SQL]=K.SQL;ge[K.GET_JOB]=K.GET_JOB;ge[K.SEARCH_JOBS_BY_START_DATE]=K.SEARCH_JOBS_BY_START_DATE;ge[K.DELETE_FILES_BEFORE]=K.DELETE_FILES_BEFORE;ge[K.EXPORT_LOCAL]=K.EXPORT_LOCAL;ge[K.EXPORT_TO_S3]=K.EXPORT_TO_S3;ge[K.CLUSTER_STATUS]=K.CLUSTER_STATUS;ge[K.REMOVE_NODE]=K.REMOVE_NODE;ge[K.RESTART]=K.RESTART;ge[K.CUSTOM_FUNCTIONS_STATUS]=K.CUSTOM_FUNCTIONS_STATUS;ge[K.GET_CUSTOM_FUNCTIONS]=K.GET_CUSTOM_FUNCTIONS;ge[K.GET_CUSTOM_FUNCTION]=K.GET_CUSTOM_FUNCTION;ge[K.SET_CUSTOM_FUNCTION]=K.SET_CUSTOM_FUNCTION;ge[K.DROP_CUSTOM_FUNCTION]=K.DROP_CUSTOM_FUNCTION;ge[K.ADD_CUSTOM_FUNCTION_PROJECT]=K.ADD_CUSTOM_FUNCTION_PROJECT;ge[K.DROP_CUSTOM_FUNCTION_PROJECT]=K.DROP_CUSTOM_FUNCTION_PROJECT;ge[K.PACKAGE_CUSTOM_FUNCTION_PROJECT]=K.PACKAGE_CUSTOM_FUNCTION_PROJECT;ge[K.DEPLOY_CUSTOM_FUNCTION_PROJECT]=K.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Z0={DEBUG:"debug",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},j0={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},IR={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"},eq=yR.invert(IR),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"},wR={settings_path:bR.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];wR[t.toLowerCase()]=t}var tq={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},rq={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"},sq={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"},nq={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},iq={VERSION_DEFAULT:"2.2.0"},oq={DEVELOPMENT:8192,DEFAULT:512},aq={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"},cq={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"},uq={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},CR={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},lq=Symbol("metadata"),_q="__clustering__",dq=Object.values(CR),Eq=15984864e5,UR={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},fq=yR.invert(UR),hq={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"},mq=111,Sq=`\r
|
|
2
|
+
`,pq={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Tq=["*","%"],Rq="unauthorized_access",gq="func_val",Aq={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Oq={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Nq={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"},bq={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},yq={HTTP:"http"},Iq={STOPPED:"stopped",ONLINE:"online"},wq="3.x.x",Cq={SUCCESS:"success",FAILURE:"failure"},Uq={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};DR.exports={LOCAL_HARPERDB_OPERATIONS:ge,HDB_SUPPORT_ADDRESS:gR,HDB_SUPPORT_URL:OR,HDB_PRICING_URL:e0,SUPPORT_HELP_MSG:t0,LICENSE_HELP_MSG:NR,HDB_PROC_NAME:TR,HDB_PROC_DESCRIPTOR:NE,CLUSTERING_LEAF_PROC_DESCRIPTOR:hu,CLUSTERING_HUB_PROC_DESCRIPTOR:fu,SYSTEM_SCHEMA_NAME:R0,HASH_FOLDER_NAME:g0,HDB_HOME_DIR_NAME:A0,UPDATE_FILE_NAME:y0,LICENSE_KEY_DIR_NAME:N0,BOOT_PROPS_FILE_NAME:b0,JOB_TYPE_ENUM:rq,JOB_STATUS_ENUM:Q0,SYSTEM_TABLE_NAMES:k0,SYSTEM_TABLE_HASH_ATTRIBUTES:V0,OPERATIONS_ENUM:K,VALID_S3_FILE_TYPES:z0,S3_BUCKET_AUTH_KEYS:J0,VALID_SQL_OPS_ENUM:X0,GEO_CONVERSION_ENUM:j0,HDB_SETTINGS_NAMES:IR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:eq,SERVICE_ACTIONS_ENUM:Z0,CLUSTER_MESSAGE_TYPE_ENUM:sq,CLUSTER_CONNECTION_DIRECTION_ENUM:nq,CLUSTER_EVENTS_DEFS_ENUM:aq,PERIOD_REGEX:c0,DOUBLE_PERIOD_REGEX:u0,UNICODE_PERIOD:l0,FORWARD_SLASH_REGEX:_0,UNICODE_FORWARD_SLASH:d0,ESCAPED_FORWARD_SLASH_REGEX:E0,ESCAPED_PERIOD_REGEX:f0,ESCAPED_DOUBLE_PERIOD_REGEX:h0,REG_KEY_FILE_NAME:K0,RESTART_TIMEOUT_MS:C0,HDB_FILE_PERMISSIONS:U0,DATABASES_DIR_NAME:M0,LEGACY_DATABASES_DIR_NAME:P0,TRANSACTIONS_DIR_NAME:v0,LIMIT_COUNT_NAME:B0,ID_ATTRIBUTE_STRING:H0,INSERT_MODULE_ENUM:G0,UPGRADE_JSON_FIELD_NAMES_ENUM:x0,RESTART_CODE:I0,RESTART_CODE_NUM:w0,CLUSTER_OPERATIONS:zo,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:Y0,HDB_INTERNAL_SC_CHANNEL_PREFIX:tr,INTERNAL_SC_CHANNELS:$0,CLUSTERING_MESSAGE_TYPES:hq,HDB_FILE_SUFFIX:O0,BLOB_FOLDER_NAME:D0,HDB_TRASH_DIR:L0,ORIGINATOR_SET_VALUE:mq,LICENSE_VALUES:iq,RAM_ALLOCATION_ENUM:oq,TIME_STAMP_NAMES_ENUM:CR,TIME_STAMP_NAMES:dq,PERMS_UPDATE_RELEASE_TIMESTAMP:Eq,SEARCH_NOT_FOUND_MESSAGE:r0,SEARCH_ATTRIBUTE_NOT_FOUND:s0,LICENSE_ROLE_DENIED_RESPONSE:n0,LICENSE_MAX_CONNS_REACHED:i0,BASIC_LICENSE_MAX_NON_CU_ROLES:AR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:jH,VALUE_SEARCH_COMPARATORS:UR,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:fq,LICENSE_FILE_NAME:W0,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:cq,NEW_LINE:Sq,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:a0,MOMENT_DAYS_TAG:m0,API_TURNOVER_SEC:S0,LOOPBACK:o0,CODE_EXTENSION:Eu,WILDCARD_SEARCH_VALUE:p0,NODE_ERROR_CODES:uq,JAVASCRIPT_EXTENSION:pR,PERMS_CRUD_ENUM:pq,UNAUTHORIZED_PERMISSION_NAME:Rq,SEARCH_WILDCARDS:Tq,FUNC_VAL:gq,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:Aq,JWT_ENUM:Oq,CLUSTERING_FLAG:_q,ITC_EVENT_TYPES:Nq,CUSTOM_FUNCTION_PROC_NAME:RR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:du,SERVICES:bq,THREAD_TYPES:yq,MEM_SETTING_KEY:T0,HDB_RESTART_SCRIPT:qH,PROCESS_DESCRIPTORS:$H,SERVICE_SERVERS:zH,SERVICE_SERVERS_CWD:OE,PROCESS_DESCRIPTORS_VALIDATE:WH,LAUNCH_SERVICE_SCRIPTS:JH,LOG_LEVELS:KH,PROCESS_NAME_ENV_PROP:q0,LOG_NAMES:YH,PM2_PROCESS_STATUSES:Iq,CONFIG_PARAM_MAP:wR,CONFIG_PARAMS:A,HDB_CONFIG_FILE:vH,HDB_DEFAULT_CONFIG_FILE:BH,ROLE_TYPES_ENUM:XH,BOOT_PROP_PARAMS:bR,INSTALL_PROMPTS:F0,HDB_ROOT_DIR_NAME:HH,CLUSTERING_PROCESSES:QH,FOREGROUND_PID_FILE:xH,PACKAGE_ROOT:un,PRE_4_0_0_VERSION:wq,SCHEMAS_PARAM_CONFIG:tq,METADATA_PROPERTY:lq,AUTH_AUDIT_STATUS:Cq,AUTH_AUDIT_TYPES:Uq,HDB_PID_FILE:kH,DEFAULT_DATABASE_NAME:VH};SR()});var bE=m((tse,PR)=>{"use strict";var LR=require("minimist");PR.exports=Dq;function Dq(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=MR(process.env),s=MR(LR(process.argv))):(r=process.env,s=LR(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(Dq,"assignCMDENVVariables");function MR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(MR,"objKeysToLowerCase")});var F=m((sse,LE)=>{"use strict";var Vn=require("fs-extra"),{workerData:Lq,threadId:Mq}=require("worker_threads"),Cs=require("path"),HR=require("yaml"),qR=require("properties-reader"),rt=g(),vR=bE(),Pq=require("os"),{PACKAGE_ROOT:IE}=g(),{_assignPackageExport:vq}=require("../index"),Xo={};for(let e in console)Xo[e]||(Xo[e]=console[e]);var Mt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},FR={STDOUT:"stdOut",STDERR:"stdErr"},Bq=Cs.join(IE,"logs"),Hq=Cs.join(IE,"config/yaml/",rt.HDB_DEFAULT_CONFIG_FILE),qq=1e4,Is,ws,Lt,mu,Su,Zo,Bi,Jo;Jo===void 0&&GR();LE.exports={notify:VR,fatal:$R,error:jo,warn:DE,info:pu,debug:UE,trace:CE,setLogLevel:Yq,log_level:Lt,loggerWithTag:Fq,suppressLogging:Gq,initLogSettings:GR,setupConsoleLogging:xR,logCustomLevel:Vq,closeLogFile:wE,getLogFilePath:()=>Zo,OUTPUTS:FR,AuthAuditLog:Qq};vq("logger",LE.exports);function GR(e=!1){try{if(Jo===void 0||e){wE();let t=$q(),r=vR(["ROOTPATH"]);try{Jo=qR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Vn.pathExistsSync(Cs.join(r.ROOTPATH,rt.HDB_CONFIG_FILE)))throw s}({level:Lt,config_log_path:Su,to_file:Is,to_stream:ws}=Kq(r.ROOTPATH?Cs.join(r.ROOTPATH,rt.HDB_CONFIG_FILE):Jo.get("settings_path"))),mu=rt.LOG_NAMES.HDB,Zo=Cs.join(Su,mu)}}catch(t){if(Jo=void 0,t.code===rt.NODE_ERROR_CODES.ENOENT){let r=vR(Object.keys(rt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=rt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===rt.CONFIG_PARAMS.LOGGING_LEVEL){Lt=u;continue}if(c===rt.CONFIG_PARAMS.LOGGING_STDSTREAMS){ws=u;continue}c===rt.CONFIG_PARAMS.LOGGING_FILE&&(Is=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=Wq();Is=Is===void 0?n:Is,Is=BR(Is),ws=ws===void 0?i:ws,ws=BR(ws),Lt=Lt===void 0?s:Lt,Su=Bq,mu=rt.LOG_NAMES.INSTALL,Zo=Cs.join(Su,mu);return}throw jo("Error initializing log settings"),jo(t),t}xR()}a(GR,"initLogSettings");var yE=!0;function xR(){vi("error",jo),vi("warn",DE),vi("log",pu),vi("info",pu),vi("debug",UE),vi("trace",CE)}a(xR,"setupConsoleLogging");function vi(e,t){console[e]=function(...r){if(yE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Xo[e](...r)}}a(vi,"logConsole");function Fq(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(VR),fatal:r($R),error:r(jo),warn:r(DE),info:r(pu),debug:r(UE),trace:r(CE)};function r(s){return function(...n){return s(t,...n)}}}a(Fq,"loggerWithTag");function Gq(e){try{yE=!1,e()}finally{yE=!0}}a(Gq,"suppressLogging");var xq=Lq?.name?.replace(/ /g,"-")||"main";function Us(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||xq+"/"+Mq);c<n;c++){let l=t[c];l instanceof Error&&l.stack?s+=l.stack:typeof l=="object"?s+=JSON.stringify(l):s+=l,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
|
|
3
|
+
`}a(Us,"createLogRecord");function ea(e){Is&&kR(e),ws&&process.stdout.write(e)}a(ea,"logStdOut");function Tu(e){Is&&kR(e),ws&&process.stderr.write(e)}a(Tu,"logStdErr");function kR(e){kq(),Bi?Vn.appendFileSync(Bi,e):Xo.log(e)}a(kR,"logToFile");function wE(){try{Vn.closeSync(Bi)}catch{}Bi=null}a(wE,"closeLogFile");function kq(){if(!Bi){try{if(!Zo)debugger;Bi=Vn.openSync(Zo,"a")}catch(e){Xo.error(e)}setTimeout(()=>{wE()},qq).unref()}}a(kq,"openLogFile");function pu(...e){Mt[Lt]<=Mt.info&&ea(Us("info",e))}a(pu,"info");function CE(...e){Mt[Lt]<=Mt.trace&&ea(Us("trace",e))}a(CE,"trace");function jo(...e){Mt[Lt]<=Mt.error&&Tu(Us("error",e))}a(jo,"error");function UE(...e){Mt[Lt]<=Mt.debug&&ea(Us("debug",e))}a(UE,"debug");function VR(...e){Mt[Lt]<=Mt.notify&&ea(Us("notify",e))}a(VR,"notify");function $R(...e){Mt[Lt]<=Mt.fatal&&Tu(Us("fatal",e))}a($R,"fatal");function DE(...e){Mt[Lt]<=Mt.warn&&Tu(Us("warn",e))}a(DE,"warn");function Vq(e,t,...r){t===FR.STDERR?Tu(Us(e,r)):ea(Us(e,r))}a(Vq,"logCustomLevel");function $q(){let e;try{e=Pq.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Cs.join(e,rt.HDB_HOME_DIR_NAME,rt.BOOT_PROPS_FILE_NAME);return Vn.existsSync(t)||(t=Cs.join(IE,"utility/hdb_boot_properties.file")),t}a($q,"getPropsFilePath");function Yq(e){Lt=e}a(Yq,"setLogLevel");function BR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(BR,"autoCastBoolean");function Kq(e){try{if(e.includes("config/settings.js")){let o=qR(e);return{level:o.get(rt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Cs.dirname(o.get(rt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(rt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(rt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=HR.parseDocument(Vn.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===rt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Kq,"getLogConfig");function Wq(){try{let e=HR.parseDocument(Vn.readFileSync(Hq,"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(Wq,"getDefaultConfig");function Qq(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(Qq,"AuthAuditLog")});var KR=m((ise,YR)=>{"use strict";var zq=require("util"),Jq=require("path"),Xq=require("child_process"),Zq=zq.promisify(Xq.execFile),jq=1e3*1e3*10;YR.exports={findPs:eF};async function eF(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await Zq("ps",["wwxo",`pid,${r}`],{maxBuffer:jq});for(let n of s.trim().split(`
|
|
4
|
+
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:Jq.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(eF,"findPs")});var ke=m((ase,QR)=>{"use strict";var tF="__dbis__",rF="__txns__",sF="__environment_name__",nF="__dbi_defintion__",iF={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"},oF=["__createdtime__","__updatedtime__"],aF="\uFFFF",WR={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},cF=Object.values(WR);QR.exports={AUDIT_STORE_NAME:rF,INTERNAL_DBIS_NAME:tF,DBI_DEFINITION_NAME:nF,SEARCH_TYPES:iF,TIMESTAMP_NAMES:oF,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:sF,TRANSACTIONS_DBI_NAMES_ENUM:WR,TRANSACTIONS_DBIS:cF,OVERFLOW_MARKER:aF}});var rr=m((cse,sg)=>{"use strict";var zR=g(),JR=ke(),XR={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},ZR=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),jR={500:ZR("There was an error processing your request."),400:"Invalid request"},uF=jR[XR.INTERNAL_SERVER_ERROR],lF={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.`},_F={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},dF={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"},EF={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 ${JR.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${JR.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"},fF={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${zR.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 ${zR.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"},eg={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"},hF={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."},mF={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`},SF={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"},pF={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},TF={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`},tg={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.`},rg={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}`},RF={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."},gF={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},AF={...eg,...dF,...lF,...hF,...mF,...SF,...pF,...TF,...fF,...tg,...rg,...RF,...gF,..._F};sg.exports={CHECK_LOGS_WRAPPER:ZR,HDB_ERROR_MSGS:AF,DEFAULT_ERROR_MSGS:jR,DEFAULT_ERROR_RESP:uF,HTTP_STATUS_CODES:XR,LMDB_ERRORS_ENUM:EF,AUTHENTICATION_ERROR_MSGS:eg,VALIDATION_ERROR_MSGS:tg,ITC_ERRORS:rg}});var Q=m((lse,og)=>{"use strict";var Hi=rr(),OF=F(),NF=g(),Ru=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,ng),this.statusCode=s||Hi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Hi.DEFAULT_ERROR_MSGS[s]?Hi.DEFAULT_ERROR_MSGS[s]:Hi.DEFAULT_ERROR_MSGS[Hi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&OF[n](i)}},ME=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}},PE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function ng(e,t,r,s=NF.LOG_LEVELS.ERROR,n=null,i=!1){if(ig(e))return e;let o=new Ru(e,t,r,s,n);return i&&delete o.stack,o}a(ng,"handleHDBError");function ig(e){return e.__proto__.constructor.name===Ru.name}a(ig,"isHDBError");og.exports={isHDBError:ig,handleHDBError:ng,ClientError:ME,ServerError:PE,hdb_errors:Hi}});var Ce=m((dse,Eg)=>{"use strict";var ia=g(),bF=k(),Pt=W(),oa=require("path"),yF=require("minimist"),ag=require("fs-extra"),cg=require("lodash");Pt.initSync();var{CONFIG_PARAMS:ln,SCHEMAS_PARAM_CONFIG:ta,SYSTEM_SCHEMA_NAME:gu}=ia,ra,sa,na;function ug(){if(ra!==void 0)return ra;if(Pt.getHdbBasePath()!==void 0)return ra=Pt.get(ln.STORAGE_PATH)||oa.join(Pt.getHdbBasePath(),ia.DATABASES_DIR_NAME),ra}a(ug,"getBaseSchemaPath");function lg(){if(sa!==void 0)return sa;if(Pt.getHdbBasePath()!==void 0)return sa=dg(gu),sa}a(lg,"getSystemSchemaPath");function _g(){if(na!==void 0)return na;if(Pt.getHdbBasePath()!==void 0)return na=Pt.get(ia.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||oa.join(Pt.getHdbBasePath(),ia.TRANSACTIONS_DIR_NAME),na}a(_g,"getTransactionAuditStoreBasePath");function IF(e,t){let r=Pt.get(ln.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||oa.join(_g(),e.toString())}a(IF,"getTransactionAuditStorePath");function dg(e,t){e=e.toString(),t=t&&t.toString();let r=Pt.get(ia.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||oa.join(ug(),e)}a(dg,"getSchemaPath");function wF(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,yF(process.argv));let s=r[ln.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!bF.isObject(s))throw o;i=s}for(let o of i){let c=o[gu];if(!c)continue;let u=Pt.get(ln.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[ta.PATH];if(l)return cg.set(u,[gu,ta.TABLES,t,ta.PATH],l),Pt.setProperty(ln.SCHEMAS,u),l;let _=c?.[ta.PATH];if(_)return cg.set(u,[gu,ta.PATH],_),Pt.setProperty(ln.SCHEMAS,u),_}}let n=r[ln.STORAGE_PATH.toUpperCase()];if(n){if(!ag.pathExistsSync(n))throw new Error(n+" does not exist");let i=oa.join(n,e);return ag.mkdirsSync(i),Pt.setProperty(ln.STORAGE_PATH,n),i}return lg()}a(wF,"initSystemSchemaPaths");function CF(){ra=void 0,sa=void 0,na=void 0}a(CF,"resetPaths");Eg.exports={getBaseSchemaPath:ug,getSystemSchemaPath:lg,getTransactionAuditStorePath:IF,getTransactionAuditStoreBasePath:_g,getSchemaPath:dg,initSystemSchemaPaths:wF,resetPaths:CF}});var vt=m((mse,pg)=>{"use strict";var UF=rr().LMDB_ERRORS_ENUM,fse=require("lmdb"),DF=ke(),hse=require("buffer").Buffer,{OVERFLOW_MARKER:fg,MAX_SEARCH_KEY_LENGTH:Au}=DF,hg=["number","string","symbol","boolean","bigint"];function LF(e){if(e=e?.primaryStore||e,!e)throw new Error(UF.ENV_REQUIRED)}a(LF,"validateEnv");function MF(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(MF,"stringifyData");function PF(e){return e instanceof Date?e.valueOf():e}a(PF,"convertKeyValueToWrite");function vF(e){if(e==null)return;if(hg.includes(typeof e))return e.length>Au?[e.slice(0,Au)+fg]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(hg.includes(typeof n))n.length>Au?t.push(n.slice(0,Au)+fg):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(vF,"getIndexedValues");var Ou=0,mg=0;function Sg(){mg=Date.now()-performance.now()}a(Sg,"adjustStartTime");Sg();var BF=6e4;setInterval(Sg,BF).unref();function HF(){let e=performance.now()+mg;return e>Ou?(Ou=e,e):(Ou+=488e-6,Ou)}a(HF,"getNextMonotonicTime");pg.exports={validateEnv:LF,stringifyData:MF,convertKeyValueToWrite:PF,getNextMonotonicTime:HF,getIndexedValues:vF}});var Tg,Xr,vE,aa=Se(()=>{Tg=require("events"),Xr=class extends Tg.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new vE;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)}},vE=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function ca(e){return e[ft]||(e[ft]=Object.create(null))}function wu(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[ft];if(l&&c in l)return l[c];let _=this[ce]?.[c];if(_&&typeof _=="object"){let d=Rg(_,o);if(d)return l||(l=this[ft]=Object.create(null)),l[c]=d}return _},set(l){ca(this)[c]=l},enumerable:!0,configurable:!0};switch(u.get.isAttribute=!0,o.type){case"String":u.set=function(l){if(typeof l!="string")throw(0,Nu.ClientError)(`${c} must be a string, attempt to assign ${l}`);ca(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,Nu.ClientError)(`${c} must be a string, attempt to assign ${l}`);ca(this)[c]=l};break}s[c]=u,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,u)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[ft];return u?.[o]!==void 0?u[o]:this[ce]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new Nu.ClientError("Can not add a property to a sealed table schema");ca(this)[o]=c}),i("deleteProperty",function(o){ca(this)[o]=void 0}),i("toJSON",function(){let o=this[ft],c;for(let l in o)c||(c=Object.assign({},this[ce])),c[l]=o[l];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ce])),Object.assign(c,this)),c||this[ce]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function Rg(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[ce]=n}},wu(r,t)),new r(e)):new bu(e);case Array:let s=new Iu(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=Rg(o,t?.elements)),s[n]=o}return s}}function Cu(e){let t=e[ft],r;for(let n in t){r||(r=Object.assign({},e[ce]));let i=t[n];i&&typeof i=="object"&&(i=Cu(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ce])),Object.assign(r,e)),r||e[ce]}function ua(e){let t;if(e[ce]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=ua(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[ft];for(let s in r){t||(t=Object.assign({},e[ce]));let n=r[s];n&&typeof n=="object"&&(n=ua(n)),t[s]=n}return t?Object.freeze(t):e[ce]||Object.freeze(e)}function yu(e){let t=e[ce];if(!t)return!0;if(e.constructor===Array){if(e[$n]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[ce]===n){if(yu(i))return!0}else return!0}}else{let r=e[ft];for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ce]===i){if(yu(n))return!0}else return!0}else return!0}}return!1}var Nu,ft,bu,$n,Iu,Uu=Se(()=>{Zr();Nu=C(Q()),ft=Symbol("own-data");a(ca,"getChanges");a(wu,"assignTrackedAccessors");a(Rg,"trackObject");bu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};wu(bu,{});a(Cu,"collapseData");a(ua,"deepFreeze");a(yu,"hasChanges");$n=Symbol.for("has-array-changes"),Iu=class extends Array{static{a(this,"TrackedArray")}[$n];constructor(t){super(t)}splice(...t){return this[$n]=!0,super.splice(...t)}push(...t){return this[$n]=!0,super.push(...t)}pop(){return this[$n]=!0,super.pop()}unshift(...t){return this[$n]=!0,super.unshift(...t)}shift(){return this[$n]=!0,super.shift()}};Iu.prototype.constructor=Array});function We(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 BE;e.timestamp&&(r.timestamp=e.timestamp),r[Ae]=e,e.resourceCache=[];let s;try{if(s=t(r),s?.then)return s.then(n,i)}catch(o){i(o)}return n(s);function n(o){let c=r.commit();return c.then?c.then(()=>(e.transaction=null,o)):(e.transaction=null,o)}function i(o){throw r.abort(),e.transaction=null,o}}var gg,Ag,BE,Yn=Se(()=>{gg=C(vt()),Ag=require("../index");Zr();a(We,"transaction");(0,Ag._assignPackageExport)("transaction",We);We.commit=function(e){let t=(e[Ae]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};We.abort=function(e){let t=(e[Ae]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()};BE=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,gg.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 FE(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(FF[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]=es.MAXIMUM_KEY;break;case"starts_with":o=_.toString(),c=_+String.fromCharCode(65535);break;case"between":o=_[0],o instanceof Date&&(o=o.getTime()),c=_[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case _t.SEARCH_TYPES.EQUALS:case void 0:o=_,c=_,u=!0;break;case"ne":case"contains":case"ends_with":E=!0;break}if(r){let T=o;o=c,c=T,T=!l,l=!u,u=T}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new HE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let T=GE(e);if(!T)throw new HE.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:R,value:O})=>new Promise(V=>setImmediate(()=>V(T(O)?R:Ng.SKIP))))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(p):h.getRange(p).map(({value:T})=>T)}function GE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case _t.SEARCH_TYPES.EQUALS:case void 0:return jr(r,n=>n===s);case _t.SEARCH_TYPES.CONTAINS:return jr(r,n=>n?.toString().includes(s));case _t.SEARCH_TYPES.ENDS_WITH:case _t.SEARCH_TYPES._ENDS_WITH:return jr(r,n=>n?.toString().endsWith(s));case _t.SEARCH_TYPES.STARTS_WITH:case _t.SEARCH_TYPES._STARTS_WITH:return jr(r,n=>typeof n=="string"&&n.startsWith(s));case _t.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),jr(r,n=>(0,es.compareKeys)(n,s[0])>=0&&(0,es.compareKeys)(n,s[1])<=0);case"gt":case _t.SEARCH_TYPES.GREATER_THAN:case _t.SEARCH_TYPES._GREATER_THAN:return jr(r,n=>(0,es.compareKeys)(n,s)>0);case"ge":case _t.SEARCH_TYPES.GREATER_THAN_EQUAL:case _t.SEARCH_TYPES._GREATER_THAN_EQUAL:return jr(r,n=>(0,es.compareKeys)(n,s)>=0);case _t.SEARCH_TYPES.LESS_THAN:case"lt":case _t.SEARCH_TYPES._LESS_THAN:return jr(r,n=>(0,es.compareKeys)(n,s)<0);case"le":case _t.SEARCH_TYPES.LESS_THAN_EQUAL:case _t.SEARCH_TYPES._LESS_THAN_EQUAL:return jr(r,n=>(0,es.compareKeys)(n,s)<=0);case"ne":return jr(r,n=>(0,es.compareKeys)(n,s)!==0);default:return}}function jr(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 Du(e){if(!e)return;let t=new qE,r,s,n,i,o;for(;r=Og.exec(e);){i=Og.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=qF[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 HE,_t,es,Ng,Og,qF,FF,qE,Lu=Se(()=>{HE=C(Q()),_t=C(ke()),es=require("ordered-binary"),Ng=require("lmdb"),Og=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,qF={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(FE,"idsForCondition");FF={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(GE,"filterByType");a(jr,"attributeComparator");a(Du,"parseQuery");qE=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 VE={};tt(VE,{CONTEXT:()=>Ae,ID_PROPERTY:()=>ae,IS_COLLECTION:()=>Ds,RECORD_PROPERTY:()=>ce,Resource:()=>ht,SAVE_UPDATES_PROPERTY:()=>Ug,snake_case:()=>xF});function xF(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function bg(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 kE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Tr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,l;if(r?o?(l=i,o=o[Ae]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Ae]||i):l=i:(l=n,c=l[ae]??l[this.primaryKey]??null):i?o=i[Ae]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let E of n){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let E=c.indexOf("?");if(E>-1){let h=this.parseQuery(c.slice(E+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,E)}let f=this.parsePath(c,o,u);f?.query?(u=f.query,c=f.id):c=f}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let _;if(u?.allowInvalidated?(_=Object.assign({},t),_.allowInvalidated=!0):_=t,o.transaction){let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)}else return We(o,()=>{let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)});function d(E){if(t.type==="read"&&(E[Ug]=!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 Mu(o.user);return typeof l?.then=="function"?l.then(p=>e(E,u,o,p)):e(E,u,o,l)});if(!f)throw new Mu(o.user)}return typeof l?.then=="function"?l.then(f=>e(E,u,o,f)):e(E,u,o,l)}a(d,"authorizeActionOnResource")}}function Rr(e,t){let r=new Cg.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 xE(e){let t=e[ce];if(t){let r=e[ft];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 yg(e){if(typeof e=="string")return t=>xE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=xE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=xE(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 Ig,wg,Cg,Ae,ae,Ds,Ug,ce,GF,ht,Mu,kE,Zr=Se(()=>{Ig=require("crypto");aa();wg=require("../index"),Cg=C(Q());Uu();Yn();Lu();Ae=Symbol.for("context"),ae=Symbol.for("primary-key"),Ds=Symbol("is-collection"),Ug=Symbol("save-updates"),ce=Symbol("stored-record"),GF={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},ht=class{static{a(this,"Resource")}[Ae];[ae];static transactions;constructor(t,r){this[ae]=t;let s=r?.[Ae];this[Ae]=s!==void 0?s:r||null}updateModificationTime(t=Date.now()){t>this[LAST_MODIFICATION_PROPERTY]&&(this[LAST_MODIFICATION_PROPERTY]=t)}static get=Tr(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=yg(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=Tr(function(t,r,s,n){if(Array.isArray(n)&&t[Ds]){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):Rr(t,"put")},{hasContent:!0,type:"update"});static delete=Tr(function(t,r,s,n){return t.delete?t.delete(r):Rr(t,"delete")},{hasContent:!1,type:"delete",allowInvalidated:!0});static getNewId(){return(0,Ig.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),We(s,()=>{let i=new this(n,s),o=i.put?i.put(r):Rr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Tr(function(t,r,s,n){return t.invalidate?t.invalidate(r):Rr(t,"delete")},{hasContent:!1,type:"update",allowInvalidated:!0});static post=Tr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Tr(function(t,r,s,n){return t.connect?t.connect(r):Rr(t,"connect")},{type:"read"});static subscribe=Tr(function(t,r,s,n){return t.subscribe?t.subscribe(r):Rr(t,"subscribe")},{type:"read"});static publish=Tr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.publish?t.publish(n,r):Rr(t,"publish")},{hasContent:!0,type:"create"});static search=Tr(function(t,r,s,n){let i=t.search?t.search(s):Rr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=yg(o);return i.map(c)}return i},{type:"read"});static query=Tr(function(t,r,s,n){return t.search?t.search(n,r):Rr(t,"search")},{hasContent:!0,type:"read"});static copy=Tr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):Rr(t,"copy")},{type:"create"});static move=Tr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):Rr(t,"move")},{type:"delete"});post(t){if(this[Ds])return this.constructor.create(this[ae],t,this[Ae]);Rr(this,"post")}static isCollection(t){return t?.[Ds]}static coerceId(t){return t}static parseQuery(t){return Du(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&&GF[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:bg(t,this)}}return bg(t,this)}static getResource(t,r,s){let n,i=r[Ae],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let l=u.asMap.get(t);if(n=l?.find(_=>_.constructor===c),n)return n;l||u.asMap.set(t,l=[]),l.push(n=new c(t,i))}else{if(n=u.find(l=>l[ae]===t&&l.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let l=new Map;for(let _ of u){let d=_[ae],E=l.get(d);E?E.push(_):l.set(d,[_])}i.resourceCache.length=0,i.resourceCache.asMap=l}}}else n=new c(t,i);return o&&(n[Ds]=!0),n}connect(t){let r=new Xr;if(t?.subscribe!==!1){let s={listener:i=>{r.send(i)}},n=this.subscribe?.(s);r.on("close",()=>n?.end())}return r}update(t){throw new Error("Not implemented")}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[ae]}getContext(){return this[Ae]}};ht.prototype[Ae]=null;(0,wg._assignPackageExport)("Resource",ht);a(xF,"snake_case");Mu=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(bg,"pathToId");kE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Tr,"transactional");a(Rr,"missingMethod");a(xE,"selectFromObject");a(yg,"transformForSelect")});var Pu={};tt(Pu,{server:()=>st});var Dg,st,ts=Se(()=>{Dg=require("../index"),st={};(0,Dg._assignPackageExport)("server",st)});var KE={};tt(KE,{loadGQLSchema:()=>VF,start:()=>YE,startOnMainThread:()=>kF});function YE({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:l,StringValueNode:_}=await import("graphql"),d=o(new c(r.toString(),n)),E=new Map,f=[],h;for(let p of d.definitions)switch(p.kind){case u.OBJECT_TYPE_DEFINITION:let $=function(U){if(U.kind==="NonNullType"){let P=$(U.type);return P.nullable=!0,P}return U.kind==="ListType"?{type:"array",elements:$(U.type)}:{type:U.name?.value}};a($,"getProperty");let T=p.name.value,R=[],O={table:null,database:null,properties:R};E.set(T,O);for(let U of p.directives){if(U.name.value==="table"){for(let b of U.arguments)O[b.name.value]=b.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=T),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,f.push(O)}if(U.name.value==="sealed"&&(O.sealed=!0),U.name.value==="export"){O.export=!0;for(let b of U.arguments)b.name.value==="name"&&(O.export={name:b.value.value})}}let V=!1;for(let U of p.fields){let b=$(U.type);b.name=U.name.value,R.push(b);for(let P of U.directives)if(P.name.value==="primaryKey")V?console.warn("Can not define two attributes as a primary key"):(b.isPrimaryKey=!0,V=!0);else if(P.name.value==="indexed")b.indexed=!0;else if(P.name.value==="createdTime")b.assignCreatedTime=!0;else if(P.name.value==="updatedTime")b.assignUpdatedTime=!0;else if(P.name.value==="expiresAt")b.expiresAt=!0;else if(P.name.value==="allow"){let z=b.authorizedRoles=[];for(let q of P.arguments)q.name.value==="role"&&z.push(q.value.value)}}O.typeName=T,T==="Query"&&(h=O)}for(let[p,T]of E)for(let R of T.properties){let O=E.get(R.type);O&&(R.properties=O.properties)}for(let p of f)p.tableClass=e(p),p.export&&i.set((0,$E.dirname)(s)+"/"+(p.export.name||p.typeName),p.tableClass);if(h)for(let p of h.properties){let T=E.get(p.type);if(!T)throw new Error(`${p.type} was not found as a Query export`);i.set((0,$E.dirname)(s)+"/"+p.name,T.tableClass)}}}var $E,kF,VF,Lg=Se(()=>{$E=require("path");de();a(YE,"start");kF=YE,VF=YE({ensureTable:nt}).handleFile});async function vu(e){return $F?(la||(la=YF(WF)),(await(await la).import(e)).namespace):import(e)}async function YF(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),la=new Compartment({console,Math,Date,fetch:KF,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,Pg.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:ht,tables:sr,databases:Be})}};let s=await(0,Mg.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),la}function KF(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 WF(){return{Resource:ht,tables:sr}}var Mg,Pg,$F,la,WE=Se(()=>{Zr();de();Mg=require("fs/promises"),Pg=require("path"),$F=!1;a(vu,"secureImport");a(YF,"getCompartment");a(KF,"secureOnlyFetch");a(WF,"getGlobalVars")});var zE={};tt(zE,{handleFile:()=>QF});async function QF(e,t,r,s){let n=new Map,i=(0,vg.pathToFileURL)(r).toString(),o=await vu(i);u(o.default)&&s.set((0,QE.dirname)(t),o.default),c(o,(0,QE.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 vg,QE,Bg=Se(()=>{vg=require("url");WE();QE=require("path");a(QF,"handleFile")});var XE={};tt(XE,{start:()=>zF});function zF({resources:e}){e.set("login",JE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var JE,Hg=Se(()=>{Zr();a(zF,"start");JE=class extends ht{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 jE=m(($se,Gg)=>{"use strict";var{Readable:JF}=require("stream"),XF=1e4;Gg.exports={streamAsJSON(e){return new ZE({value:e})}};var ZE=class extends JF{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),qg)}catch(n){yield qg(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);Fg(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>XF?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 Fg(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 qg(e){return console.error(e),JSON.stringify(e.toString())}a(qg,"handleError");function Fg(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Fg,"when")});var jg=m((Wse,Zg)=>{"use strict";var ef=require("recursive-iterator"),ZF=require("alasql"),tf=require("clone"),xg=k(),{handleHDBError:kg,hdb_errors:jF}=Q(),{HDB_ERROR_MSGS:Vg,HTTP_STATUS_CODES:$g}=jF,{getDatabases:eG}=(de(),re(Ne)),tG=["DISTINCT_ARRAY"],Yg=Symbol("validateTables"),rf=Symbol("validateTable"),Kse=Symbol("getAllColumns"),Kg=Symbol("validateAllColumns"),Bu=Symbol("findColumn"),Wg=Symbol("validateOrderBy"),_a=Symbol("validateSegment"),sf=Symbol("validateColumn"),Qg=Symbol("setColumnsForTable"),zg=Symbol("checkColumnsForAsterisk"),Jg=Symbol("validateGroupBy"),Xg=Symbol("hasColumns"),nf=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Yg](),this[zg](),this[Kg]()}[Yg](){if(this[Xg]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[rf](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[rf](t.table)})}}[Xg](){let t=!1,r=new ef(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[rf](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=eG();if(!r[t.databaseid])throw kg(new Error,Vg.SCHEMA_NOT_FOUND(t.databaseid),$g.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw kg(new Error,Vg.TABLE_NOT_FOUND(t.databaseid,t.tableid),$g.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=tf(n);i.table=tf(t),this.attributes.push(i)})}[Bu](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)}[zg](){let t=new ef(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Qg](r.tableid)}[Qg](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new ZF.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Kg](){this[_a](this.statement.columns,!1),this[_a](this.statement.joins,!1),this[_a](this.statement.where,!1),this[Jg](this.statement.group,!1),this[_a](this.statement.order,!0)}[_a](t,r){if(!t)return;let s=new ef(t),n=[];for(let{node:i,path:o}of s)!xg.isEmpty(i)&&!xg.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Wg](i):n.push(this[sf](i)));return n}[Jg](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&tG.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=tf(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Bu](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[Bu](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`}[Wg](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[sf](t)}[sf](t){let r=this[Bu](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]}};Zg.exports=nf});var tA=m((zse,eA)=>{"use strict";var of=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")}};eA.exports=of});var sA=m((Xse,rA)=>{"use strict";var af=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};rA.exports=af});var Hu=m((jse,nA)=>{"use strict";var uf=W(),lf=g();uf.initSync();var rG=uf.get(lf.CONFIG_PARAMS.STORAGE_COMPRESSION),sG=uf.get(lf.CONFIG_PARAMS.STORAGE_CACHING)!==!1,nG=lf.UPDATES_PROPERTY,cf=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=rG&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=sG&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===nG)}};nA.exports=cf});var Fu=m((tne,oA)=>{"use strict";var qi=W(),da=g();qi.initSync();var iG=qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",iA=qi.get(da.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),oG=qi.get(da.CONFIG_PARAMS.STORAGE_NOREADAHEAD),qu=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=iG,this.noFSAccess=!0,iA!==void 0&&(this.overlappingSync=iA),this.noReadAhead=oG}};oA.exports=qu;qu.MAX_DBS=1e4});var Ie=m((sne,mA)=>{"use strict";var df=require("lmdb"),vr=require("fs-extra"),nr=require("path"),Gu=vt(),uA=F(),Bt=rr().LMDB_ERRORS_ENUM,xu=sA(),Ef=Hu(),lA=Fu(),_n=ke(),aA=g(),{table:aG,resetDatabases:cG}=(de(),re(Ne)),cA=W(),Br=_n.INTERNAL_DBIS_NAME,_A=_n.DBI_DEFINITION_NAME,uG="data.mdb",lG="lock.mdb",Ea=".mdb",_G="-lock",_f=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=gr(t,r),this.key_type=this.dbi[_n.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[_n.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new df.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function ku(e,t){if(e===void 0)throw new Error(Bt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Bt.ENV_NAME_REQUIRED)}a(ku,"pathEnvNameValidation");async function ff(e,t,r=!0){try{await vr.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Bt.INVALID_BASE_PATH):s}try{let s=nr.join(e,t+Ea);return await vr.access(s,vr.constants.R_OK|vr.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await vr.access(nr.join(e,t,uG),vr.constants.R_OK|vr.constants.F_OK),nr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Bt.INVALID_ENVIRONMENT)}else throw new Error(Bt.INVALID_ENVIRONMENT);throw s}}a(ff,"validateEnvironmentPath");function Vu(e,t){if(Gu.validateEnv(e),t===void 0)throw new Error(Bt.DBI_NAME_REQUIRED)}a(Vu,"validateEnvDBIName");async function dG(e,t,r=!1,s=!1){ku(e,t);let n=nr.basename(e);t=t.toString();let i=cA.get(aA.CONFIG_PARAMS.SCHEMAS);i||cA.setProperty(aA.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await ff(e,t,s),dA(e,t,r)}catch(o){if(o.message===Bt.INVALID_ENVIRONMENT){let c=nr.join(e,t);await vr.mkdirp(s?c:e);let u=new lA(s?c:c+Ea,!1),l=df.open(u);l.dbis=Object.create(null);let _=new Ef(!1);l.openDB(Br,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=hf(e,t,r);return l[_n.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(dG,"createEnvironment");async function EG(e,t,r,s=!0){ku(e,t),t=t.toString();let n=nr.join(e,t);return aG({table:t,database:nr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(EG,"copyEnvironment");async function dA(e,t,r=!1){ku(e,t),t=t.toString();let s=hf(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 ff(e,t),i=nr.join(e,t+Ea),o=n!=i,c=new lA(n,o),u=df.open(c);u.dbis=Object.create(null);let l=fA(u);for(let _=0;_<l.length;_++)gr(u,l[_]);return u[_n.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(dA,"openEnvironment");async function fG(e,t,r=!1){ku(e,t),t=t.toString();let s=nr.join(e,t+Ea),n=await ff(e,t);if(global.lmdb_map!==void 0){let i=hf(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await EA(o),delete global.lmdb_map[i]}}await vr.remove(n),await vr.remove(n===s?n+_G:nr.join(nr.dirname(n),lG))}a(fG,"deleteEnvironment");async function EA(e){Gu.validateEnv(e);let t=e[_n.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(EA,"closeEnvironment");function hf(e,t,r=!1){let n=`${nr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(hf,"getCachedEnvironmentName");function hG(e){Gu.validateEnv(e);let t=Object.create(null),r=gr(e,Br);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Br)try{t[s]=Object.assign(new xu,n)}catch{uA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(hG,"listDBIDefinitions");function fA(e){Gu.validateEnv(e);let t=[],r=gr(e,Br);for(let{key:s}of r.getRange({start:!1}))s!==Br&&t.push(s);return t}a(fA,"listDBIs");function mG(e,t){let s=gr(e,Br).getEntry(t),n=new xu;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{uA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(mG,"getDBIDefinition");function hA(e,t,r,s=!r){if(Vu(e,t),t=t.toString(),t===Br)throw new Error(Bt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return gr(e,t)}catch(n){if(n.message===Bt.DBI_DOES_NOT_EXIST){let i=new Ef(r,s===!0),o=e.openDB(t,i),c=new xu(r===!0,s);return o[_A]=c,gr(e,Br).putSync(t,c),e.dbis[t]=o,o}throw n}}a(hA,"createDBI");function gr(e,t){if(Vu(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Br?r=mG(e,t):r=new xu,r===void 0)throw new Error(Bt.DBI_DOES_NOT_EXIST);let s;try{let n=new Ef(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(Bt.DBI_DOES_NOT_EXIST):n}return s[_A]=r,e.dbis[t]=s,s}a(gr,"openDBI");function SG(e,t){Vu(e,t),t=t.toString();let r=gr(e,t),s=r.getStats();return r[_n.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(SG,"statDBI");async function pG(e,t){try{let r=nr.join(e,t+Ea);return(await vr.stat(r)).size}catch{throw new Error(Bt.INVALID_ENVIRONMENT)}}a(pG,"environmentDataSize");function TG(e,t){if(Vu(e,t),t=t.toString(),t===Br)throw new Error(Bt.CANNOT_DROP_INTERNAL_DBIS_NAME);gr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],gr(e,Br).removeSync(t)}a(TG,"dropDBI");function RG(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===Bt.DBI_DOES_NOT_EXIST)hA(e,i,i!==t,i===t),s=!0;else throw o}}s&&cG()}a(RG,"initializeDBIs");mA.exports={openDBI:gr,openEnvironment:dA,createEnvironment:dG,listDBIs:fA,listDBIDefinitions:hG,createDBI:hA,dropDBI:TG,statDBI:SG,deleteEnvironment:fG,initializeDBIs:RG,TransactionCursor:_f,environmentDataSize:pG,copyEnvironment:EG,closeEnvironment:EA}});var pA=m((ine,SA)=>{"use strict";var mf=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};SA.exports=mf});var RA=m((ane,TA)=>{"use strict";var Sf=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}};TA.exports=Sf});var AA=m((une,gA)=>{"use strict";var pf=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};gA.exports=pf});var Fi=m((fne,bA)=>{"use strict";var gG=Ie(),AG=pA(),OG=RA(),NG=AA(),rs=vt(),fa=rr().LMDB_ERRORS_ENUM,bG=ke(),Ls=g(),yG=k(),IG=require("uuid"),_ne=require("lmdb"),{handleHDBError:wG,hdb_errors:CG}=Q(),{OVERFLOW_MARKER:dne,MAX_SEARCH_KEY_LENGTH:Ene}=bG,OA=W();OA.initSync();var $u=OA.get(Ls.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Tf=Ls.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Kn=Ls.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function UG(e,t,r,s,n=rs.getNextMonotonicTime()){Of(e,t,r,s),Rf(e,t,r);let i=new AG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];NA(l,!0,n);let _=DG(e,t,r,l),d=l[t];o.push(_),c.push(d)}return gf(o,c,s,i,n)}a(UG,"insertRecords");function DG(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][Ls.FUNC_VAL],s[o]=c)}let u=rs.getIndexedValues(c),l=e.dbis[o];if(u){$u&&l.prefetch(u.map(_=>({key:_,value:n})),Yu);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}$u&&e.dbis[t].prefetch([n],Yu),e.dbis[t].put(n,s,s[Kn])})}a(DG,"insertRecord");function LG(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(LG,"removeSkippedRecords");function NA(e,t,r){let s=r>0;(s||!Number.isInteger(e[Kn]))&&(e[Kn]=r||(r=rs.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Tf]))&&(e[Tf]=r||rs.getNextMonotonicTime()):delete e[Tf]}a(NA,"setTimestamps");function Rf(e,t,r){r.indexOf(Ls.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Ls.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Ls.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Ls.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),gG.initializeDBIs(e,t,r)}a(Rf,"initializeTransaction");async function MG(e,t,r,s,n=rs.getNextMonotonicTime()){Of(e,t,r,s),Rf(e,t,r);let i=new OG,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=Af(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return gf(c,u,s,i,n,o)}a(MG,"updateRecords");async function PG(e,t,r,s,n=rs.getNextMonotonicTime()){try{Of(e,t,r,s)}catch(u){throw wG(u,u.message,CG.HTTP_STATUS_CODES.BAD_REQUEST)}Rf(e,t,r);let i=new NG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;yG.isEmpty(l[t])?(_=IG.v4(),l[t]=_):_=l[t];let d=Af(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return gf(o,c,s,i,n)}a(PG,"upsertRecords");async function gf(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||rs.getNextMonotonicTime(),LG(r,i),s}a(gf,"finalizeWrite");function Af(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(NA(r,!_,o),Number.isInteger(r[Kn])&&l[Kn]>r[Kn])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],T=e.dbis[h];if(T===void 0)continue;let R=l[h];if(typeof p=="function"){let V=p([[l]]);Array.isArray(V)&&(p=V[0][Ls.FUNC_VAL],r[h]=p)}if(p===R)continue;let O=rs.getIndexedValues(R);if(O){$u&&T.prefetch(O.map(V=>({key:V,value:s})),Yu);for(let V=0,$=O.length;V<$;V++)T.remove(O[V],s)}if(O=rs.getIndexedValues(p),O){$u&&T.prefetch(O.map(V=>({key:V,value:s})),Yu);for(let V=0,$=O.length;V<$;V++)T.put(O[V],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Kn])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:Af(e,t,r,s,n,i,o))}a(Af,"updateUpsertRecord");function vG(e,t,r){if(rs.validateEnv(e),t===void 0)throw new Error(fa.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(fa.WRITE_ATTRIBUTES_REQUIRED):new Error(fa.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(vG,"validateBasic");function Of(e,t,r,s){if(vG(e,t,r),!Array.isArray(s))throw s===void 0?new Error(fa.RECORDS_REQUIRED):new Error(fa.RECORDS_MUST_BE_ARRAY)}a(Of,"validateWrite");function Yu(){}a(Yu,"noop");bA.exports={insertRecords:UG,updateRecords:MG,upsertRecords:PG}});var Wn=m((mne,BG)=>{BG.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var ss=m((Sne,wA)=>{"use strict";var IA=k(),yA=g(),Gi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ms=require("joi"),dn={schema_format:{pattern:Gi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},HG=Ms.alternatives(Ms.string().min(1).max(dn.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+dn.schema_format.message}),Ms.number()).required(),qG=Ms.alternatives(Ms.string().min(1).max(dn.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+dn.schema_format.message}),Ms.number()),FG=Ms.alternatives(Ms.string().min(1).max(dn.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+dn.schema_format.message}),Ms.number()).required();function GG(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>dn.schema_length.maximum?`'${e}' maximum of 250 characters`:Gi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(GG,"checkValidTable");function xG(e,t){return IA.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(xG,"validateSchemaExists");function kG(e,t){let r=t.state.ancestors[0].schema;return IA.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(kG,"validateTableExists");function VG(e,t){return e.toLowerCase()===yA.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${yA.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(VG,"validateSchemaName");wA.exports={common_validators:dn,schema_regex:Gi,hdb_schema_table:HG,validateSchemaExists:xG,validateTableExists:kG,validateSchemaName:VG,checkValidTable:GG,hdb_database:qG,hdb_table:FG}});var Ue=m((Tne,CA)=>{"use strict";var Ht=require("validate.js");Ht.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Ht.validators.type.checks[t](e)?null:` must be a '${t}' value`};Ht.validators.type.checks={Object:function(e){return Ht.isObject(e)&&!Ht.isArray(e)},Array:Ht.isArray,Integer:Ht.isInteger,Number:Ht.isNumber,String:Ht.isString,Date:Ht.isDate,Boolean:function(e){return typeof e=="boolean"}};Ht.validators.hasValidFileExt=function(e,t){return Ht.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};CA.exports={validateObject:$G,validateObjectAsync:YG,validateBySchema:KG};function $G(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Ht(e,t,{format:"flat"});return r?new Error(r):null}a($G,"validateObject");async function YG(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Ht.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(YG,"validateObjectAsync");function KG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(KG,"validateBySchema")});var Ku=m((gne,UA)=>{var{common_validators:ns}=ss(),ma=Ue(),ha="is required",Qe={database:{presence:!1,format:ns.schema_format,length:ns.schema_length},schema:{presence:!1,format:ns.schema_format,length:ns.schema_length},table:{presence:!0,format:ns.schema_format,length:ns.schema_length},attribute:{presence:!0,format:ns.schema_format,length:ns.schema_length},hash_attribute:{presence:!0,format:ns.schema_format,length:ns.schema_length}};function Sa(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(Sa,"makeAttributesStrings");function WG(e){return e=Sa(e),Qe.table.presence=!1,Qe.attribute.presence=!1,Qe.hash_attribute.presence=!1,ma.validateObject(e,Qe)}a(WG,"schema_object");function QG(e){return e=Sa(e),Qe.table.presence={message:ha},Qe.attribute.presence=!1,Qe.hash_attribute.presence=!1,ma.validateObject(e,Qe)}a(QG,"table_object");function zG(e){return e=Sa(e),Qe.table.presence={message:ha},Qe.attribute.presence=!1,ma.validateObject(e,Qe)}a(zG,"create_table_object");function JG(e){return e=Sa(e),Qe.table.presence={message:ha},Qe.attribute.presence={message:ha},Qe.hash_attribute.presence=!1,ma.validateObject(e,Qe)}a(JG,"attribute_object");function XG(e){return e=Sa(e),Qe.table.presence={message:ha},Qe.attribute.presence=!1,Qe.hash_attribute.presence=!1,ma.validateObject(e,Qe)}a(XG,"describe_table");function ZG(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(ZG,"validateTableResidence");UA.exports={schema_object:WG,create_table_object:zG,table_object:QG,attribute_object:JG,describe_table:XG,validateTableResidence:ZG}});var LA=m((One,DA)=>{"use strict";var jG=require("uuid"),Nf=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||jG.v4(),this.schema_table=`${this.schema}.${this.table}`}};DA.exports=Nf});var Wu=m((bne,MA)=>{"use strict";var ex=LA(),bf=class extends ex{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};MA.exports=bf});var vA=m((Ine,PA)=>{"use strict";PA.exports=rx;var tx="inserted";function rx(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===tx?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(rx,"returnObject")});var Qu=m((Cne,GA)=>{"use strict";var sx=g(),yf=Ie(),nx=Fi(),{getSystemSchemaPath:ix,getSchemaPath:ox}=Ce(),ax=Wn(),cx=Ku(),ux=Wu(),lx=vA(),{handleHDBError:BA,hdb_errors:qA}=Q(),HA=k(),{HTTP_STATUS_CODES:_x}=qA,If=ax.hdb_attribute,FA=[];for(let e=0;e<If.attributes.length;e++)FA.push(If.attributes[e].attribute);var dx="inserted";GA.exports=Ex;async function Ex(e){let t=cx.attribute_object(e);if(t)throw BA(new Error,t.message,qA.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&HA.checkGlobalSchemaTable(e.schema,e.table);if(r)throw BA(new Error,r,_x.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=HA.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 ux(e.schema,e.table,e.attribute,e.id);try{let i=await yf.openEnvironment(ox(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}`);yf.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await yf.openEnvironment(ix(),sx.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await nx.insertRecords(o,If.hash_attribute,FA,[n]);return lx(dx,c,{records:[n]},u)}catch(i){throw i}}a(Ex,"lmdbCreateAttribute")});var Cf=m((Dne,kA)=>{var{hdb_table:fx,hdb_database:xA}=ss(),hx=Ue(),wf=require("joi"),mx={undefined:"undefined",null:"null"},Sx=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||mx[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"),px=wf.object({database:xA,schema:xA,table:fx,records:wf.array().items(wf.object().custom(Sx)).required()});kA.exports=function(e){return hx.validateBySchema(e,px)}});var pa=m((Pne,$A)=>{"use strict";var Ps=k(),VA=F(),Mne=Cf(),{getDatabases:Tx}=(de(),re(Ne)),{ClientError:Qn}=Q();$A.exports=Rx;function Rx(e){if(Ps.isEmpty(e))throw new Qn("invalid update parameters defined.");if(Ps.isEmptyOrZeroLength(e.schema))throw new Qn("invalid schema specified.");if(Ps.isEmptyOrZeroLength(e.table))throw new Qn("invalid table specified.");if(!Array.isArray(e.records))throw new Qn("records must be an array");let t=Tx()[e.schema]?.[e.table];if(Ps.isEmpty(t))throw new Qn(`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&&Ps.isEmptyOrZeroLength(o[r]))throw VA.error("a valid hash attribute must be provided with update record:",o),new Qn("a valid hash attribute must be provided with update record, check log for more info");if(!Ps.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw VA.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Qn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Ps.isEmpty(o[r])&&o[r]!==""&&s.has(Ps.autoCast(o[r]))&&(o.skip=!0),s.add(Ps.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(Rx,"insertUpdateValidate")});var Ta=m((Bne,YA)=>{"use strict";var gx=g().OPERATIONS_ENUM,Uf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=gx.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};YA.exports=Uf});var Oa=m((Fne,KA)=>{"use strict";var qne=Ta(),zu=g(),Lf=k(),Df=F(),Ax=require("uuid"),{handleHDBError:Ra,hdb_errors:Ox}=Q(),{HDB_ERROR_MSGS:ga,HTTP_STATUS_CODES:Aa}=Ox;KA.exports=Nx;function Nx(e,t,r){for(let n=0;n<t.length;n++)bx(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];yx(i,r,e.operation)}}a(Nx,"processRows");function bx(e){if(Buffer.byteLength(String(e))>zu.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ra(new Error,ga.ATTR_NAME_LENGTH_ERR(e),Aa.BAD_REQUEST,void 0,void 0,!0);if(Lf.isEmptyOrZeroLength(e)||Lf.isEmpty(e.trim()))throw Ra(new Error,ga.ATTR_NAME_NULLISH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}a(bx,"validateAttribute");function yx(e,t,r){if(!e.hasOwnProperty(t)||Lf.isEmptyOrZeroLength(e[t])){if(r===zu.OPERATIONS_ENUM.INSERT||r===zu.OPERATIONS_ENUM.UPSERT){e[t]=Ax.v4();return}throw Df.error("Update transaction aborted due to record with no hash value:",e),Ra(new Error,ga.RECORD_MISSING_HASH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>zu.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Df.error(e),Ra(new Error,ga.HASH_VAL_LENGTH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Df.error(e),Ra(new Error,ga.INVALID_FORWARD_SLASH_IN_HASH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}a(yx,"validateHash")});var QA=m((xne,WA)=>{"use strict";var Mf=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};WA.exports=Mf});var XA=m((Vne,JA)=>{"use strict";var Pf=Ie(),Ix=F(),zA=rr().LMDB_ERRORS_ENUM;JA.exports=wx;async function wx(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 Pf.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==zA.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Pf.closeEnvironment(global.lmdb_map[s]),await Pf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==zA.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){Ix.error(t)}}a(wx,"cleanLMDBMap")});var vs=m((Yne,tO)=>{"use strict";var Na=require("crypto"),Cx=W(),{CONFIG_PARAMS:Ux}=g(),jA="aes-256-cbc",Dx=32,Lx=16,vf=64,eO=32,Mx=vf+eO,ZA=new Map;tO.exports={encrypt:Px,decrypt:vx,createNatsTableStreamName:Bx};function Px(e){let t=Na.randomBytes(Dx),r=Na.randomBytes(Lx),s=Na.createCipheriv(jA,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(Px,"encrypt");function vx(e){let t=e.substr(0,vf),r=e.substr(vf,eO),s=e.substr(Mx,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Na.createDecipheriv(jA,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(vx,"decrypt");function Bx(e,t){let r=Cx.get(Ux.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=ZA.get(r);return s||(s=Na.createHash("md5").update(r).digest("hex"),ZA.set(r,s)),s}a(Bx,"createNatsTableStreamName")});var En=m((Qne,sO)=>{"use strict";var Wne=Ar(),Ju=F(),rO=Ku(),Hx=vs(),Xu=k(),{handleHDBError:Zu,hdb_errors:qx}=Q(),{HDB_ERROR_MSGS:ju,HTTP_STATUS_CODES:Bf}=qx,Fx=W();Fx.initSync();var{getDatabases:Hf}=(de(),re(Ne));sO.exports={describeAll:Gx,describeTable:el,describeSchema:xx};async function Gx(e){try{let t=Xu.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Hf(),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 el({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 el({schema:l,table:d},f)}E&&c.push(E)}catch(E){Ju.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 Ju.error("Got an error in describeAll"),Ju.error(t),Zu(new Error,ju.DESCRIBE_ALL_ERR)}}a(Gx,"describeAll");async function el(e,t){Xu.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=rO.describe_table(e);if(i)throw i;let c=Hf()[r];if(!c)throw Zu(new Error,ju.SCHEMA_NOT_FOUND(e.schema),Bf.NOT_FOUND);let u=c[s];if(!u)throw Zu(new Error,ju.TABLE_NOT_FOUND(e.schema,e.table),Bf.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=Hx.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){Ju.warn(`unable to stat table dbi due to ${d}`)}return _}a(el,"descTable");async function xx(e){Xu.transformReq(e);let t=rO.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=Hf()[s];if(!i)throw Zu(new Error,ju.SCHEMA_NOT_FOUND(e.schema),Bf.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Xu.isEmpty(u)||u.describe){let l=await el({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(xx,"describeSchema")});var Bs=m((Zne,cO)=>{var kx=Wn(),{callbackify:iO,promisify:Vx}=require("util"),{getDatabases:oO}=(de(),re(Ne));cO.exports={setSchemaDataToGlobal:nO,getTableSchema:$x,getSystemSchema:Yx,setSchemaDataToGlobalAsync:Vx(nO)};var aO=En(),Jne=iO(aO.describeAll),Xne=iO(aO.describeTable);function nO(e){global.hdb_schema=oO(),e&&e()}a(nO,"setSchemaDataToGlobal");function $x(e,t,r){let s=oO()[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($x,"getTableSchema");function Yx(){return kx}a(Yx,"getSystemSchema")});var ir=m((eie,dO)=>{"use strict";var rl=Cf(),mt=k(),Kx=require("util"),sl=Hr(),Wx=Bs(),uO=F(),{handleHDBError:zn,hdb_errors:Qx}=Q(),{HTTP_STATUS_CODES:Jn}=Qx,zx=Kx.promisify(Wx.getTableSchema),Jx="updated",lO="inserted",_O="upserted";dO.exports={insert:Zx,update:jx,upsert:ek,validation:Xx,flush:tk};async function Xx(e){if(mt.isEmpty(e))throw new Error("invalid update parameters defined.");if(mt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(mt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await zx(e.schema,e.table),r=rl(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&&mt.isEmptyOrZeroLength(c[s]))throw uO.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(!mt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw uO.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!mt.isEmpty(c[s])&&c[s]!==""&&n.has(mt.autoCast(c[s]))&&(c.skip=!0),n.add(mt.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(Xx,"validation");async function Zx(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=rl(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);mt.transformReq(e);let r=mt.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await sl.createRecords(e);return tl(lO,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(Zx,"insertData");async function jx(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=rl(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);mt.transformReq(e);let r=mt.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await sl.updateRecords(e);return mt.isEmpty(s.existing_rows)?tl(Jx,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):tl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(jx,"updateData");async function ek(e){if(e.operation!=="upsert")throw zn(new Error,"invalid operation, must be upsert",Jn.INTERNAL_SERVER_ERROR);let t=rl(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);mt.transformReq(e);let r=mt.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await sl.upsertRecords(e);return tl(_O,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(ek,"upsertData");function tl(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===lO?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===_O?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(tl,"returnObject");function tk(e){return mt.transformReq(e),sl.flush(e.schema,e.table)}a(tk,"flush")});var Ff=m((rie,hO)=>{var rk=Ue(),qf=require("joi"),{hdb_table:sk,hdb_database:EO}=ss(),fO={schema:EO,database:EO,table:sk},nk={date:qf.date().iso().required()},ik={timestamp:qf.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};hO.exports=function(e,t){let r=t==="timestamp"?{...fO,...ik}:{...fO,...nk},s=qf.object(r);return rk.validateBySchema(e,s)}});var pO=m((sie,SO)=>{var ok=Ue(),Gf=require("joi"),{hdb_table:ak,hdb_database:mO}=ss(),ck=Gf.object({schema:mO,database:mO,table:ak,hash_values:Gf.array().required(),ids:Gf.array()});SO.exports=function(e){return ok.validateBySchema(e,ck)}});var RO=m((nie,TO)=>{"use strict";var xf=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}},kf=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}},Vf=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};TO.exports={InsertObject:xf,NoSQLSeachObject:kf,DeleteResponseObject:Vf}});var mn=m((oie,bO)=>{"use strict";var AO=Ff(),uk=pO(),Xn=k(),gO=require("moment"),OO=F(),{promisify:lk,callbackify:_k}=require("util"),Zn=g(),dk=Bs(),$f=lk(dk.getTableSchema),Yf=Hr(),{DeleteResponseObject:Ek}=RO(),{handleHDBError:fn,hdb_errors:fk}=Q(),{HDB_ERROR_MSGS:nl,HTTP_STATUS_CODES:hn}=fk,hk="records successfully deleted",mk=_k(NO);bO.exports={delete:mk,deleteRecord:NO,deleteFilesBefore:Sk,deleteAuditLogsBefore:pk};async function Sk(e){let t=AO(e,"date");if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);if(Xn.transformReq(e),!gO(e.date,gO.ISO_8601).isValid())throw fn(new Error,nl.INVALID_DATE,hn.BAD_REQUEST,Zn.LOG_LEVELS.ERROR,nl.INVALID_DATE,!0);let s=Xn.checkSchemaTableExist(e.schema,e.table);if(s)throw fn(new Error,s,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,s,!0);let n=await Yf.deleteRecordsBefore(e);if(await $f(e.schema,e.table),OO.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Sk,"deleteFilesBefore");async function pk(e){let t=AO(e,"timestamp");if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);if(Xn.transformReq(e),isNaN(e.timestamp))throw fn(new Error,nl.INVALID_VALUE("Timestamp"),hn.BAD_REQUEST,Zn.LOG_LEVELS.ERROR,nl.INVALID_VALUE("Timestamp"),!0);let r=Xn.checkSchemaTableExist(e.schema,e.table);if(r)throw fn(new Error,r,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,r,!0);let s=await Yf.deleteAuditLogsBefore(e);return await $f(e.schema,e.table),OO.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(pk,"deleteAuditLogsBefore");async function NO(e){e.ids&&(e.hash_values=e.ids);let t=uk(e);if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);Xn.transformReq(e);let r=Xn.checkSchemaTableExist(e.schema,e.table);if(r)throw fn(new Error,r,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,r,!0);try{await $f(e.schema,e.table);let s=await Yf.deleteRecords(e);return Xn.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${hk}`),s}catch(s){if(s.message===Zn.SEARCH_NOT_FOUND_MESSAGE){let n=new Ek;return n.message=Zn.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(NO,"deleteRecord")});var il=m((cie,wO)=>{var Tk=require("crypto"),yO=9;function Rk(e){let t=Ak(yO),r=IO(e+t);return t+r}a(Rk,"createHash");function gk(e,t){let r=e.substr(0,yO),s=r+IO(t+r);return e===s}a(gk,"validateHash");function Ak(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(Ak,"generateSalt");function IO(e){return Tk.createHash("md5").update(e).digest("hex")}a(IO,"md5");wO.exports={hash:Rk,validate:gk}});var UO=m((lie,CO)=>{var Kf=Ue(),It={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function Ok(e){return It.password.presence=!0,It.username.presence=!0,It.role.presence=!0,It.active.presence=!0,Kf.validateObject(e,It)}a(Ok,"addUserValidation");function Nk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Kf.validateObject(e,It)}a(Nk,"alterUserValidation");function bk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Kf.validateObject(e,It)}a(bk,"dropUserValidation");CO.exports={addUserValidation:Ok,alterUserValidation:Nk,dropUserValidation:bk}});var be=m((Eie,LO)=>{"use strict";var{platform:die}=require("os"),yk="nats-server.zip",Wf="nats-server",Ik=process.platform==="win32"?`${Wf}.exe`:Wf,Qf="HDB",wk=/^[^\s.,*>]+$/,DO="__request__",Ck=a(e=>`${e}.${DO}`,"REQUEST_SUBJECT"),Uk={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},Dk={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Lk={HUB:"hub.pid",LEAF:"leaf.pid"},Mk={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Pk={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Qf,deliver_subject:"__HDB__.WORKQUEUE"},vk={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Qf,deliver_subject:"HDB.SCHEMAQUEUE"},Bk={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Qf,deliver_subject:"HDB.USERQUEUE"},Hk={SUCCESS:"success",ERROR:"error"},qk={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Fk={TXN:"txn",MSGID:"msgid"},xi={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Gk={[xi.ERR]:1,[xi.WRN]:2,[xi.INF]:3,[xi.DBG]:4,[xi.TRC]:5},xk={debug:"-D",trace:"-DVV"};LO.exports={NATS_SERVER_ZIP:yk,NATS_SERVER_NAME:Wf,NATS_BINARY_NAME:Ik,PID_FILES:Lk,NATS_CONFIG_FILES:Dk,SERVER_SUFFIX:Mk,WORK_QUEUE_CONSUMER_NAMES:Pk,SCHEMA_QUEUE_CONSUMER_NAMES:vk,USER_QUEUE_CONSUMER_NAMES:Bk,NATS_TERM_CONSTRAINTS_RX:wk,REQUEST_SUFFIX:DO,UPDATE_REMOTE_RESPONSE_STATUSES:Hk,CLUSTER_STATUS_STATUSES:qk,REQUEST_SUBJECT:Ck,SUBJECT_PREFIXES:Fk,MSG_HEADERS:Uk,LOG_LEVELS:xi,LOG_LEVEL_FLAGS:xk,LOG_LEVEL_HIERARCHY:Gk}});var PO=m((hie,MO)=>{"use strict";var kk={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))},Vk="certificate.pem",$k="privateKey.pem",Yk="ca.pem";MO.exports={CERTIFICATE_VALUES:kk,CERTIFICATE_PEM_NAME:Vk,PRIVATEKEY_PEM_NAME:$k,CA_PEM_NAME:Yk}});var Jf=m((Sie,GO)=>{"use strict";var qO=require("fs-extra"),ee=require("joi"),Kk=require("os"),{boolean:pe,string:qs,number:or,array:zf}=ee.types(),{totalmem:vO}=require("os"),ki=require("path"),Wk=F(),al=k(),mie=PO(),BO=g(),Qk=Ue(),HO="log",zk="components",Jk="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Xk="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Zk="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",jk="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",eV="rootPath config parameter is undefined",tV="clustering.enabled config parameter is undefined",Hs=or.min(0).required(),cl=zf.items({host:qs.required(),port:Hs}).empty(null),Fs;GO.exports={configValidator:rV,routesValidator:cV,route_constraints:cl};function rV(e){if(Fs=e.rootPath,al.isEmpty(Fs))throw eV;let t=pe.required(),r=ee.valid("production","development").required(),s=or.min(0).max(1e3).empty(null).default(aV),n=qs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(ol),i=ee.custom(sV).messages({"any.custom":"{:#label} {:#error}"}),o=qs.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ee.string().empty(null).default(ol),u=ee.custom(nV).empty(null).default(ol),l=e.clustering?.enabled;if(al.isEmpty(l))throw tV;let _;return l===!0?_=ee.object({enabled:t,hubServer:ee.object({cluster:ee.object({name:ee.required().empty(null),network:ee.object({port:Hs,routes:cl}).required()}).required(),leafNodes:ee.object({network:ee.object({port:Hs}).required()}).required(),network:ee.object({port:Hs}).required()}).required(),leafServer:ee.object({network:ee.object({port:Hs,routes:cl}).required(),streams:ee.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:ee.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:pe.optional(),databaseLevel:pe.optional(),tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:pe.required(),verify:pe.optional()}),user:qs.optional().empty(null)}).required():_=ee.object({enabled:t,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:pe.required()})}).required(),ee.object({authentication:ee.object({authorizeLocal:pe,cacheTTL:or.required(),enableSessions:pe,operationTokenTimeout:ee.required(),refreshTokenTimeout:ee.required()}),analytics:ee.object({aggregatePeriod:or}),clustering:_,customFunctions:ee.object({enabled:t,network:ee.object({cors:pe.required(),corsAccessList:zf.required(),headersTimeout:or.min(1).required(),https:pe.required(),keepAliveTimeout:or.min(1).required(),port:Hs,timeout:or.min(1).required()}),nodeEnv:r,root:n,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:ee.object({enabled:t}).required(),logging:ee.object({auditAuthEvents:ee.object({logFailed:pe,logSuccessful:pe}),file:pe.required(),level:ee.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ee.object({enabled:pe.optional(),compress:pe.optional(),interval:qs.custom(oV).optional().empty(null),maxSize:qs.custom(iV).optional().empty(null),path:qs.optional().empty(null).default(ol)}).required(),root:n,stdStreams:pe.required(),auditLog:pe.required()}).required(),operationsApi:ee.object({foreground:pe.required(),network:ee.object({cors:pe.required(),corsAccessList:zf.required(),headersTimeout:or.min(1).required(),https:pe.required(),keepAliveTimeout:or.min(1).required(),port:Hs,timeout:or.min(1).required()}).required(),nodeEnv:r,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:qs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ee.object({network:ee.object({port:Hs,securePort:Hs}).required(),webSocket:pe.optional(),requireAuthentication:pe.optional()}),http:ee.object({threads:s}).required(),storage:ee.object({writeAsync:pe.required(),overlappingSync:pe.optional(),caching:pe.optional(),compression:pe.optional(),noReadAhead:pe.optional(),path:u,prefetchWrites:pe.optional()}).required(),ignoreScripts:pe.optional()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(rV,"configValidator");function FO(e){return qO.existsSync(e)?null:`Specified path ${e} does not exist.`}a(FO,"doesPathExist");function sV(e,t){if(e===null)return;let r=FO(e);return r?t.message(r):e}a(sV,"validatePemFile");function nV(e,t){ee.assert(e,qs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=FO(e);if(r)return t.message(r)}a(nV,"validatePath");function iV(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Jk);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(Zk):e}a(iV,"validateRotationMaxSize");function oV(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Xk);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(jk):e}a(oV,"validateRotationInterval");function aV(e,t){let r=t.state.path.join("."),s=Kk.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||vO();return i=Math.round(Math.min(i,vO())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),Wk.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(aV,"setDefaultThreads");function ol(e,t){if(!al.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(al.isEmpty(Fs))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return ki.join(Fs,zk);case"logging.root":return ki.join(Fs,HO);case"clustering.leafServer.streams.path":return ki.join(Fs,"clustering","leaf");case"storage.path":let s=ki.join(Fs,BO.LEGACY_DATABASES_DIR_NAME);return qO.existsSync(s)?s:ki.join(Fs,BO.DATABASES_DIR_NAME);case"logging.rotation.path":return ki.join(Fs,HO);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(ol,"setDefaultRoot");function cV(e){let t=ee.object({routes:cl});return Qk.validateBySchema({routes:e},t)}a(cV,"routesValidator")});var Nr=m((Rie,JO)=>{"use strict";var Or=g(),dt=k(),it=F(),{configValidator:uV,routesValidator:xO}=Jf(),qt=require("fs-extra"),lV=require("yaml"),qr=require("path"),_V=require("is-number"),VO=require("properties-reader"),dV=require("lodash"),{handleHDBError:EV}=Q(),{HTTP_STATUS_CODES:fV,HDB_ERROR_MSGS:ul}=rr(),Tie=require("minimist"),{server:hV}=(ts(),re(Pu)),{SCHEMAS_PARAM_CONFIG:ba,CONFIG_PARAMS:Sn,CONFIG_PARAM_MAP:Gs}=Or,mV="Unable to get config value because config is uninitialized",SV="Config successfully initialized",pV="Error backing up config file",TV="Empty parameter sent to getConfigValue",$O=qr.join(Or.PACKAGE_ROOT,"config","yaml",Or.HDB_DEFAULT_CONFIG_FILE),RV="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",kO={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"},ll,St;JO.exports={createConfigFile:gV,getDefaultConfig:AV,getConfigValue:KO,initConfig:WO,flattenConfig:ei,updateConfigValue:QO,updateConfigObject:NV,getConfiguration:IV,setConfiguration:wV,readConfigFile:jf,getClusteringRoutes:CV,initOldConfig:zO,getConfigFromFile:UV,getConfigFilePath:jn,addConfig:DV,deleteConfigFromFile:LV};function gV(e){let t=pn($O);ll=ei(t.toJSON());let r;for(let o in e){let c=Gs[o.toLowerCase()];if(c===Sn.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=Xf(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){it.error(_)}}}r&&YO(t,r),Zf(t);let s=t.toJSON();St=ei(s);let n=t.getIn(["rootPath"]),i=qr.join(n,Or.HDB_CONFIG_FILE);qt.createFileSync(i),qt.writeFileSync(i,String(t)),it.trace(`Config file written to ${i}`)}a(gV,"createConfigFile");function YO(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!dt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(ba.TABLES))for(let i in s[n][ba.TABLES])for(let o in s[n][ba.TABLES][i]){let c=s[n][ba.TABLES][i][o],u=[Sn.SCHEMAS,n,ba.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=[Sn.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){it.error("Error parsing schemas CLI/env config arguments",s)}}a(YO,"setSchemasConfig");function AV(e){if(ll===void 0){let r=pn($O);ll=ei(r.toJSON())}let t=Gs[e.toLowerCase()];if(t!==void 0)return ll[t.toLowerCase()]}a(AV,"getDefaultConfig");function KO(e){if(e==null){it.error(TV);return}if(St===void 0){it.trace(mV);return}let t=Gs[e.toLowerCase()];if(t!==void 0)return St[t.toLowerCase()]}a(KO,"getConfigValue");function jn(e=dt.getPropsFilePath()){let t=dt.getEnvCliRootPath();return t?qr.join(t,Or.HDB_CONFIG_FILE):VO(e).get(Or.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(jn,"getConfigFilePath");function WO(e=!1){if(St===void 0||e){let t;if(!dt.noBootFile()){t=dt.getPropsFilePath();try{qt.accessSync(t,qt.constants.F_OK|qt.constants.R_OK)}catch(i){throw it.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=jn(t),s;if(r.includes("config/settings.js"))try{zO(r);return}catch(i){if(i.code!==Or.NODE_ERROR_CODES.ENOENT)throw i}try{s=pn(r)}catch(i){if(i.code===Or.NODE_ERROR_CODES.ENOENT){it.trace(`HarperDB config file not found at ${r}.
|
|
5
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw it.error(i),new Error(`Error reading HarperDB config file at ${r}`)}OV(s,r),Zf(s);let n=s.toJSON();if(hV.config=n,St=ei(n),St.logging_rotation_rotate)for(let i in kO)St[i]&&it.error(`Config ${kO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);it.trace(SV)}}a(WO,"initConfig");function OV(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],qr.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],qr.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],qr.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(it.trace("Updating config file with missing config params"),qt.writeFileSync(t,String(e)))}a(OV,"checkForUpdatedConfig");function Zf(e){let t=e.toJSON(),r=uV(t);if(r.error)throw ul.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(Zf,"validateConfig");function NV(e,t){St===void 0&&(St={});let r=Gs[e.toLowerCase()];if(r===void 0){it.trace(`Unable to update config object because config param '${e}' does not exist`);return}St[r.toLowerCase()]=t}a(NV,"updateConfigObject");function QO(e,t,r=void 0,s=!1,n=!1,i=!1){St===void 0&&WO();let o=KO(Gs.hdb_root),c=qr.join(o,Or.HDB_CONFIG_FILE),u=pn(c),l;if(r===void 0&&e.toLowerCase()===Sn.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Gs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=Xf(E,t);u.setIn([...f],h)}else for(let E in r){let f=Gs[E.toLowerCase()];if(f===Sn.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),p=Xf(f,r[E]);f==="rootPath"&&p?.endsWith("/")&&(p=p.slice(0,-1));try{u.setIn([...h],p)}catch(T){it.error(T)}}}l&&YO(u,l),Zf(u);let _=u.getIn(["rootPath"]),d=qr.join(_,Or.HDB_CONFIG_FILE);s===!0&&bV(c,_),qt.writeFileSync(d,String(u)),n&&(St=ei(u.toJSON())),it.trace(`Config parameter: ${e} updated with value: ${t}`)}a(QO,"updateConfigValue");function bV(e,t){try{let r=qr.join(t,"backup",`${Or.HDB_CONFIG_FILE}.bak`);qt.copySync(e,r),it.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){it.error(pV),it.error(r)}}a(bV,"backupConfigFile");var yV=["schemas"];function ei(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!yV.includes(r)){let s=ei(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(ei,"flattenConfig");function Xf(e,t){if(e===Sn.CLUSTERING_NODENAME||e===Sn.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(_V(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||dt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return dt.autoCast(t)}a(Xf,"castConfigValue");function IV(){let e=dt.getPropsFilePath(),t=jn(e);return pn(t).toJSON()}a(IV,"getConfiguration");async function wV(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return QO(void 0,void 0,n,!0),RV}catch(i){throw typeof i=="string"||i instanceof String?EV(i,i,fV.BAD_REQUEST,void 0,void 0,!0):i}}a(wV,"setConfiguration");function jf(){let e=dt.getPropsFilePath();try{qt.accessSync(e,qt.constants.F_OK|qt.constants.R_OK)}catch(s){if(!dt.noBootFile())throw it.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=jn(e);return pn(t).toJSON()}a(jf,"readConfigFile");function pn(e){return lV.parseDocument(qt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(pn,"parseYamlDoc");function CV(){let e=jf(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=dt.isEmptyOrZeroLength(t)?[]:t;let r=xO(t);if(r)throw ul.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=dt.isEmptyOrZeroLength(s)?[]:s;let n=xO(s);if(n)throw ul.CONFIG_VALIDATION(n.message);if(!dt.isEmptyOrZeroLength(s)&&!dt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!dt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw ul.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(CV,"getClusteringRoutes");function zO(e){let t=VO(e);St={};for(let r in Gs){let s=t.get(r.toUpperCase());if(dt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Gs[r].toLowerCase();n===Sn.LOGGING_ROOT?St[n]=qr.dirname(s):St[n]=s}return St}a(zO,"initOldConfig");function UV(e){let t=jf();return dV.get(t,e.replaceAll("_","."))}a(UV,"getConfigFromFile");async function DV(e,t){let r=pn(jn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await qt.writeFile(jn(),String(r))}a(DV,"addConfig");function LV(e){let t=jn(dt.getPropsFilePath()),r=pn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=qr.join(s,Or.HDB_CONFIG_FILE);qt.writeFileSync(n,String(r))}a(LV,"deleteConfigFromFile")});var ZO=m((Aie,XO)=>{"use strict";var _l=g(),dl=class{static{a(this,"BaseLicense")}constructor(t=0,r=_l.RAM_ALLOCATION_ENUM.DEFAULT,s=_l.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},eh=class extends dl{static{a(this,"ExtendedLicense")}constructor(t=0,r=_l.RAM_ALLOCATION_ENUM.DEFAULT,s=_l.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};XO.exports={BaseLicense:dl,ExtendedLicense:eh}});var ya=m((Nie,nN)=>{"use strict";var $i=require("fs-extra"),jO=il(),eN=require("crypto"),MV=require("moment"),PV=require("uuid").v4,wt=F(),rh=require("path"),vV=k(),Tn=g(),BV=ZO().ExtendedLicense,Vi="invalid license key format",HV="061183",qV="mofi25",FV="aes-256-cbc",GV=16,xV=32,tN=W();tN.initSync();var th;nN.exports={validateLicense:rN,generateFingerPrint:VV,licenseSearch:sN,getLicense:KV};function sh(){return rh.join(tN.getHdbBasePath(),Tn.LICENSE_KEY_DIR_NAME,Tn.LICENSE_FILE_NAME)}a(sh,"getLicenseDirPath");function kV(){let e=sh();return rh.join(e,Tn.LICENSE_FILE_NAME)}a(kV,"getLicenseFilePath");function nh(){let e=sh();return rh.join(e,Tn.REG_KEY_FILE_NAME)}a(nh,"getFingerPrintFilePath");async function VV(){let e=nh();try{return await $i.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await $V();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(VV,"generateFingerPrint");async function $V(){let e=PV(),t=jO.hash(e),r=nh();try{await $i.mkdirp(sh()),await $i.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw wt.error(`Error writing fingerprint file to ${r}`),wt.error(s),new Error("There was an error generating the fingerprint")}return t}a($V,"writeFingerprint");function rN(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Tn.RAM_ALLOCATION_ENUM.DEFAULT,version:Tn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return wt.error("empty license key passed to validate."),r;let s=nh(),n=!1;try{n=$i.statSync(s)}catch(i){wt.error(i)}if(n){let i;try{i=$i.readFileSync(s,"utf8")}catch{wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(qV),c=o[1];c=Buffer.concat([Buffer.from(c)],GV);let u=Buffer.concat([Buffer.from(i)],xV),l=eN.createDecipheriv(FV,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=YV(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Vi),wt.error(Vi),new Error(Vi)}let d;if(isNaN(_))try{d=JSON.parse(_),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Vi),wt.error(Vi),new Error(Vi)}else r.exp_date=_;r.exp_date<MV().valueOf()&&(r.valid_date=!1),jO.validate(o[1],`${HV}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||wt.error("Invalid licence"),r}a(rN,"validateLicense");function YV(e,t){try{let r=eN.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{wt.warn("Check old license failed")}}a(YV,"checkOldLicense");function sN(){let e=new BV,t=[];try{t=$i.readFileSync(kV(),"utf-8").split(Tn.NEW_LINE)}catch(r){r.code==="ENOENT"?wt.info("no license file found"):wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(vV.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=rN(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){wt.error("There was an error parsing the license string."),wt.error(n),e.ram_allocation=Tn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return th=e,e}a(sN,"licenseSearch");async function KV(){return th||await sN(),th}a(KV,"getLicense")});var br=m((Cie,RN)=>{"use strict";var uN="username is required",lN="nothing to update, must supply active, role or password to update",_N="password cannot be an empty string",dN="If role is specified, it cannot be empty.",EN="active must be true or false";RN.exports={addUser:t$,alterUser:r$,dropUser:n$,getSuperUser:c$,userInfo:i$,listUsers:fl,listUsersExternal:o$,setUsersToGlobal:Ki,findAndValidateUser:TN,getClusterUser:u$,USERNAME_REQUIRED:uN,ALTERUSER_NOTHING_TO_UPDATE:lN,EMPTY_PASSWORD:_N,EMPTY_ROLE:dN,ACTIVE_BOOLEAN:EN};var fN=ir(),WV=mn(),oh=il(),hN=UO(),mN=Ar(),ah=xs(),ar=k(),SN=require("validate.js"),ue=F(),{promisify:QV}=require("util"),ch=vs(),iN=g(),oN=be(),zV=Nr(),yie=W(),Iie=ya(),JV=Wn(),{table:wie}=(de(),re(Ne)),{handleHDBError:is,hdb_errors:XV}=Q(),{HTTP_STATUS_CODES:os,AUTHENTICATION_ERROR_MSGS:ih,HDB_ERROR_MSGS:Yi}=XV,{UserEventMsg:uh}=Fr(),aN=require("lodash"),{_assignPackageExport:ZV}=require("../index");ZV("getUser",TN);var pN={username:!0,active:!0,role:!0,password:!0},cN=new Map,El=mN.searchByValue,jV=mN.searchByHash,e$=QV(WV.delete);async function t$(e){let t=SN.cleanAttributes(e,pN),r=hN.addUserValidation(t);if(r)throw is(new Error,r.message,os.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await El(s),n=n&&Array.from(n)}catch(u){throw ue.error("There was an error searching for a role in add user"),ue.error(u),u}if(!n||n.length<1)throw is(new Error,Yi.ROLE_NAME_NOT_FOUND(t.role),os.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw is(new Error,Yi.DUP_ROLES_FOUND(t.role),os.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=ch.encrypt(t.password)),t.password=oh.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await fN.insert(i)}catch(u){throw ue.error("There was an error searching for a user."),ue.error(u),u}ue.debug(o);try{await Ki()}catch(u){throw ue.error("Got an error setting users to global"),ue.error(u),u}if(o.skipped_hashes.length===1)throw is(new Error,Yi.USER_ALREADY_EXISTS(t.username),os.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],ah.signalUserChange(new uh(process.pid)),`${c.username} successfully added`}a(t$,"addUser");async function r$(e){let t=SN.cleanAttributes(e,pN);if(ar.isEmptyOrZeroLength(t.username))throw new Error(uN);if(ar.isEmptyOrZeroLength(t.password)&&ar.isEmptyOrZeroLength(t.role)&&ar.isEmptyOrZeroLength(t.active))throw new Error(lN);if(!ar.isEmpty(t.password)&&ar.isEmptyOrZeroLength(t.password.trim()))throw new Error(_N);if(!ar.isEmpty(t.active)&&!ar.isBoolean(t.active))throw new Error(EN);let r=s$(t.username);if(!ar.isEmpty(t.password)&&!ar.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=ch.encrypt(t.password)),t.password=oh.hash(t.password)),t.role==="")throw new Error(dN);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 El(i)||[])}catch(c){throw ue.error("Got an error searching for a role."),ue.error(c),c}if(!o||o.length===0){let c=Yi.ALTER_USER_ROLE_NOT_FOUND(t.role);throw ue.error(c),is(new Error,c,os.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Yi.ALTER_USER_DUP_ROLES(t.role);throw ue.error(c),is(new Error,c,os.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await fN.update(s)}catch(i){throw ue.error("Error during update."),ue.error(i),i}try{await Ki()}catch(i){throw ue.error("Got an error setting users to global"),ue.error(i),i}return ah.signalUserChange(new uh(process.pid)),n}a(r$,"alterUser");function s$(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(s$,"isClusterUser");async function n$(e){try{let t=hN.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(ar.isEmpty(global.hdb_users.get(e.username)))throw is(new Error,Yi.USER_NOT_EXIST(e.username),os.NOT_FOUND,void 0,void 0,!0);let s;try{s=await e$(r)}catch(n){throw ue.error("Got an error deleting a user."),ue.error(n),n}ue.debug(s);try{await Ki()}catch(n){throw ue.error("Got an error setting users to global."),ue.error(n),n}return ah.signalUserChange(new uh(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(n$,"dropUser");async function i$(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 jV(r)}catch(n){throw ue.error("Got an error searching for a role."),ue.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw ue.error(r),r}return t}a(i$,"userInfo");async function o$(){let e;try{e=await fl()}catch(t){throw ue.error("Got an error listing users."),ue.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(o$,"listUsersExternal");async function fl(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await El(e)}catch(o){throw ue.error("Got an error searching for roles."),ue.error(o),o}let r={};for(let o of t)r[o.id]=aN.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 El(s)}catch(o){throw ue.error("Got an error searching for users."),ue.error(o),o}let i=new Map;for(let o of n)o=aN.cloneDeep(o),o.role=r[o.role],a$(o.role),i.set(o.username,o);return i}catch(e){throw ue.error("got an error listing users"),ue.error(e),ar.errorizeMessage(e)}return null}a(fl,"listUsers");function a$(e){try{if(!e){ue.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(JV)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){ue.error("Got an error trying to set system permissions."),ue.error(t)}}a(a$,"appendSystemTablesToRole");async function Ki(){try{let e=await fl();global.hdb_users=e}catch(e){throw ue.error(e),e}}a(Ki,"setUsersToGlobal");async function TN(e,t,r=!0){global.hdb_users||await Ki();let s=global.hdb_users.get(e);if(!s)throw is(new Error,ih.GENERIC_AUTH_FAIL,os.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw is(new Error,ih.USER_INACTIVE,os.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(cN.get(t)===s.password)return n;if(oh.validate(s.password,t))cN.set(t,s.password);else throw is(new Error,ih.GENERIC_AUTH_FAIL,os.UNAUTHORIZED,void 0,void 0,!0)}return n}a(TN,"findAndValidateUser");async function c$(){global.hdb_users||await Ki();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(c$,"getSuperUser");async function u$(){let e=await fl(),t=zV.getConfigFromFile(iN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!ar.isEmpty(r)&&r?.role?.role===iN.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=ch.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+oN.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+oN.SERVER_SUFFIX.ADMIN,r}a(u$,"getClusterUser")});var wa=m((Mie,NN)=>{"use strict";var ti=F(),cr=g(),l$=XA(),Die=Bs(),Lie=En(),_$=br(),{validateEvent:gN}=Fr(),Ia=Hr(),d$=require("process"),{resetDatabases:E$}=(de(),re(Ne)),f$={[cr.ITC_EVENT_TYPES.SCHEMA]:h$,[cr.ITC_EVENT_TYPES.USER]:ON};async function h$(e){let t=gN(e);if(t){ti.error(t);return}ti.trace("ITC schemaHandler received schema event:",e),await l$(e.message),await m$(e.message)}a(h$,"schemaHandler");async function m$(e){try{Ia.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ia.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ia.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=E$();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ti.error(t)}}a(m$,"syncSchemaMetadata");var AN=[];async function ON(e){try{try{Ia.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ia.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ti.warn(r)}let t=gN(e);if(t){ti.error(t);return}ti.trace(`ITC userHandler ${cr.HDB_ITC_CLIENT_PREFIX}${d$.pid} received user event:`,e),await _$.setUsersToGlobal();for(let r of AN)r()}catch(t){ti.error(t)}}a(ON,"userHandler");ON.addListener=function(e){AN.push(e)};NN.exports=f$});var Fr=m((Fie,yN)=>{"use strict";var vie=F(),lh=k(),S$=g(),{ITC_ERRORS:Ca}=rr(),{parentPort:Bie,threadId:p$,isMainThread:T$,workerData:Hie}=require("worker_threads"),{onMessageFromWorkers:R$,broadcast:qie,broadcastWithAcknowledgement:g$}=Ve();yN.exports={sendItcEvent:A$,validateEvent:bN,SchemaEventMsg:O$,UserEventMsg:N$};var hl;R$(async(e,t)=>{hl=hl||wa(),bN(e),hl[e.type]&&await hl[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function A$(e){return!T$&&e.message&&(e.message.originator=p$),g$(e)}a(A$,"sendItcEvent");function bN(e){if(typeof e!="object")return Ca.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||lh.isEmpty(e.type))return Ca.MISSING_TYPE;if(!e.hasOwnProperty("message")||lh.isEmpty(e.message))return Ca.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||lh.isEmpty(e.message.originator))return Ca.MISSING_ORIGIN;if(S$.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Ca.INVALID_EVENT(e.type)}a(bN,"validateEvent");function O$(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(O$,"SchemaEventMsg");function N$(e){this.originator=e}a(N$,"UserEventMsg")});var xs=m((kie,UN)=>{"use strict";var IN=g(),xie=k(),ml=F(),wN=QA(),Wi,{sendItcEvent:CN}=Fr();function b$(e){try{ml.trace("signalSchemaChange called with message:",e),Wi=Wi||wa();let t=new wN(IN.ITC_EVENT_TYPES.SCHEMA,e);return Wi.schema(t),CN(t)}catch(t){ml.error(t)}}a(b$,"signalSchemaChange");function y$(e){try{ml.trace("signalUserChange called with message:",e),Wi=Wi||wa();let t=new wN(IN.ITC_EVENT_TYPES.USER,e);return Wi.user(t),CN(t)}catch(t){ml.error(t)}}a(y$,"signalUserChange");UN.exports={signalSchemaChange:b$,signalUserChange:y$}});var Sl=m(($ie,LN)=>{"use strict";var DN=k(),I$=g(),w$=F(),C$=Qu(),U$=Wu(),D$=xs(),{SchemaEventMsg:L$}=Fr(),M$="already exists in";LN.exports=P$;async function P$(e,t,r){if(DN.isEmptyOrZeroLength(r))return r;let s=[];DN.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 v$(e,t.schema,t.name,i)})),n}a(P$,"lmdbCheckForNewAttributes");async function v$(e,t,r,s){let n=new U$(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await B$(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(M$))w$.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(v$,"createNewAttribute");async function B$(e){let t;return t=await C$(e),D$.signalSchemaChange(new L$(process.pid,I$.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(B$,"createAttribute")});var Qi=m((Kie,MN)=>{"use strict";var _h=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}};MN.exports=_h});var vN=m((Qie,PN)=>{"use strict";var H$=Qi(),q$=g().OPERATIONS_ENUM,dh=class extends H${static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(q$.INSERT,r,s,n,i),this.records=t}};PN.exports=dh});var HN=m((Jie,BN)=>{"use strict";var F$=Qi(),G$=g().OPERATIONS_ENUM,Eh=class extends F${static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(G$.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};BN.exports=Eh});var FN=m((Zie,qN)=>{"use strict";var x$=Qi(),k$=g().OPERATIONS_ENUM,fh=class extends x${static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(k$.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};qN.exports=fh});var xN=m((eoe,GN)=>{"use strict";var V$=Qi(),$$=g().OPERATIONS_ENUM,hh=class extends V${static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super($$.DELETE,s,n,t,i),this.original_records=r}};GN.exports=hh});var Ua=m((soe,YN)=>{"use strict";var roe=require("path"),kN=Ie(),Y$=vN(),K$=HN(),W$=FN(),Q$=xN(),zi=ke(),VN=k(),{CONFIG_PARAMS:z$}=g(),$N=W();$N.initSync();var pl=g().OPERATIONS_ENUM,{getTransactionAuditStorePath:J$}=Ce();YN.exports=X$;async function X$(e,t){if($N.get(z$.LOGGING_AUDITLOG)===!1)return;let r=J$(e.schema,e.table),s=await kN.openEnvironment(r,e.table,!0),n=Z$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){kN.initializeDBIs(s,zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zi.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),VN.isEmpty(n.user_name)||s.dbis[zi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[zi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(X$,"writeTransaction");function Z$(e,t){let r=VN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===pl.INSERT)return new Y$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===pl.UPDATE)return new K$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===pl.UPSERT)return new W$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===pl.DELETE)return new Q$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Z$,"createTransactionObject")});var mh=m((ooe,KN)=>{"use strict";var j$=pa(),ioe=Ta(),Da=g(),eY=Oa(),tY=Fi().insertRecords,rY=Ie(),sY=F(),nY=Sl(),{getSchemaPath:iY}=Ce(),oY=Ua();KN.exports=aY;async function aY(e){try{let{schema_table:t,attributes:r}=j$(e);eY(e,r,t.hash_attribute),e.schema!==Da.SYSTEM_SCHEMA_NAME&&(r.includes(Da.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Da.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Da.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Da.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await nY(e.hdb_auth_header,t,r),n=iY(e.schema,e.table),i=await rY.openEnvironment(n,e.table),o=await tY(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await oY(e,o)}catch(c){sY.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(aY,"lmdbCreateRecords")});var zN=m((coe,QN)=>{"use strict";var WN=g(),cY=mh(),uY=Ta(),lY=require("fs-extra"),{getSchemaPath:_Y}=Ce();QN.exports=dY;async function dY(e){let t=[{name:e.schema,createddate:Date.now()}],r=new uY(WN.SYSTEM_SCHEMA_NAME,WN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await cY(r),await lY.mkdirp(_Y(e.schema))}a(dY,"lmdbCreateSchema")});var XN=m((loe,JN)=>{"use strict";var Sh=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}};JN.exports=Sh});var tb=m((hoe,eb)=>{"use strict";var ZN=Ie(),ph=vt(),Th=rr().LMDB_ERRORS_ENUM,EY=ke(),jN=F(),doe=k(),fY=require("lmdb"),hY=XN(),mY=g(),{OVERFLOW_MARKER:Eoe,MAX_SEARCH_KEY_LENGTH:foe}=EY,SY=mY.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function pY(e,t,r,s){if(ph.validateEnv(e),t===void 0)throw new Error(Th.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Th.IDS_REQUIRED):new Error(Th.IDS_MUST_BE_ITERABLE);try{let n=ZN.listDBIs(e);ZN.initializeDBIs(e,t,n);let i=new hY,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[SY]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,fY.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let T=0;T<n.length;T++){let R=n[T];if(!h.hasOwnProperty(R)||R===t)continue;let O=e.dbis[R],V=h[R];if(V!=null)try{let $=ph.getIndexedValues(V);if($)for(let U=0,b=$.length;U<b;U++)O.remove($[U],o)}catch{jN.warn(`cannot delete from attribute: ${R}, ${V}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){jN.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=ph.getNextMonotonicTime(),i}catch(n){throw n}}a(pY,"deleteRecords");eb.exports={deleteRecords:pY}});var La=m((Soe,sb)=>{"use strict";var Ji=k(),TY=tb(),RY=Ie(),{getSchemaPath:gY}=Ce(),AY=Ua(),OY=F();sb.exports=NY;async function NY(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ji.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ji.isEmptyOrZeroLength(e.hash_values)&&!Ji.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Ji.isEmpty(u)||e.hash_values.push(u)}}if(Ji.isEmptyOrZeroLength(e.hash_values))return rb([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ji.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=gY(e.schema,e.table),i=await RY.openEnvironment(n,e.table),o=await TY.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await AY(e,o)}catch(c){OY.error(`unable to write transaction due to ${c.message}`)}return rb(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(NY,"lmdbDeleteRecords");function rb(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(rb,"createDeleteResponse")});var gh=m((Roe,nb)=>{"use strict";var bY=g(),Toe=vt();function Rh(e,t){let r=Object.create(null);if(t.length===1&&bY.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(Rh,"parseRow");function yY(e,t,r,s){let n=Rh(r,e);s.push(n)}a(yY,"searchAll");function IY(e,t,r,s){let n=Rh(r,e);s[t]=n}a(IY,"searchAllToMap");function wY(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(wY,"iterateDBI");function ri(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(ri,"pushResults");function CY(e,t,r,s,n,i){t.toString().endsWith(e)&&ri(t,r,s,n,i)}a(CY,"endsWith");function UY(e,t,r,s,n,i){t.toString().includes(e)&&ri(t,r,s,n,i)}a(UY,"contains");function DY(e,t,r,s,n,i){t>e&&ri(t,r,s,n,i)}a(DY,"greaterThanCompare");function LY(e,t,r,s,n,i){t>=e&&ri(t,r,s,n,i)}a(LY,"greaterThanEqualCompare");function MY(e,t,r,s,n,i){t<e&&ri(t,r,s,n,i)}a(MY,"lessThanCompare");function PY(e,t,r,s,n,i){t<=e&&ri(t,r,s,n,i)}a(PY,"lessThanEqualCompare");nb.exports={parseRow:Rh,searchAll:yY,searchAllToMap:IY,iterateDBI:wY,endsWith:CY,contains:UY,greaterThanCompare:DY,greaterThanEqualCompare:LY,lessThanCompare:MY,lessThanEqualCompare:PY,pushResults:ri}});var Xi=m((boe,_b)=>{"use strict";var Rn=Ie(),Aoe=F(),ur=vt(),Tl=ke(),$e=rr().LMDB_ERRORS_ENUM,Ooe=k(),vY=g(),Rl=gh(),{parseRow:BY}=Rl,Noe=require("lmdb"),{OVERFLOW_MARKER:ib,MAX_SEARCH_KEY_LENGTH:HY}=Tl;function ob(e,t,r,s=!1,n=void 0,i=void 0){return si(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(ob,"iterateFullIndex");function Ma(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return si(e,t,r,(_,d,E,f)=>{let O={transaction:_,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!l,exclusiveStart:i===!0?l:u};return f===r?(O.values=!1,d.getRange(O).map(V=>({value:V}))):d.getRange(O)})}a(Ma,"iterateRangeBetween");function si(e,t,r,s){let n=e.database||e,i=Rn.openDBI(n,r);i[Tl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Rn.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(si,"setupTransaction");function ab(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(ib)){if(!n)if(r)n=Rn.openDBI(e,r);else{let u=Rn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=Rn.openDBI(e,u[l]),!n[Tl.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(ab,"getOverflowCheck");function qY(e,t,r,s=!1,n=void 0,i=void 0){if(ur.validateEnv(e),t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);return si(e,t,t,(o,c,u)=>(gl(r),r=Pa(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>BY(l.value,r))))}a(qY,"searchAll");function FY(e,t,r,s=!1,n=void 0,i=void 0){if(ur.validateEnv(e),t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);gl(r),r=Pa(e.database||e,r);let o=new Map;for(let{key:c,value:u}of ob(e,t,t,s,n,i))o.set(c,Rl.parseRow(u,r));return o}a(FY,"searchAllToMap");function GY(e,t,r=!1,s=void 0,n=void 0){if(ur.validateEnv(e),t===void 0)throw new Error($e.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=ob(e,void 0,t,r,s,n),c=o.transaction,u=ab(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(GY,"iterateDBI");function xY(e,t){if(ur.validateEnv(e),t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);return Rn.statDBI(e,t).entryCount}a(xY,"countAll");function kY(e,t,r,s,n=!1,i=void 0,o=void 0){return gn(e,r,s),si(e,t,r,(c,u,l,_)=>(s=ur.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(kY,"equals");function VY(e,t,r){return gn(e,t,r),Rn.openDBI(e,t).getValuesCount(r)}a(VY,"count");function $Y(e,t,r,s,n=!1,i=void 0,o=void 0){return gn(e,r,s),si(e,null,r,(c,u)=>{s=ur.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($Y,"startsWith");function YY(e,t,r,s,n=!1,i=void 0,o=void 0){return cb(e,t,r,s,n,i,o,!0)}a(YY,"endsWith");function cb(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return gn(e,r,s),si(e,null,r,(u,l,_,d)=>{let E=ab(_,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(ib)?l.getValues(f,{transaction:u}).map(p=>{let T=E(f,p);if(c?T.endsWith(s):T.includes(s))return{key:T,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?l[Tl.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(p=>({key:f,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(cb,"contains");function KY(e,t,r,s,n=!1,i=void 0,o=void 0){gn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Ma(e,t,r,s,u,n,i,o,!0,!1)}a(KY,"greaterThan");function WY(e,t,r,s,n=!1,i=void 0,o=void 0){gn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Ma(e,t,r,s,u,n,i,o,!1,!1)}a(WY,"greaterThanEqual");function QY(e,t,r,s,n=!1,i=void 0,o=void 0){gn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Ma(e,t,r,u,s,n,i,o,!1,!0)}a(QY,"lessThan");function zY(e,t,r,s,n=!1,i=void 0,o=void 0){gn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Ma(e,t,r,u,s,n,i,o,!1,!1)}a(zY,"lessThanEqual");function JY(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(ur.validateEnv(e),r===void 0)throw new Error($e.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error($e.START_VALUE_REQUIRED);if(n===void 0)throw new Error($e.END_VALUE_REQUIRED);if(s=ur.convertKeyValueToWrite(s),n=ur.convertKeyValueToWrite(n),s>n)throw new Error($e.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ma(e,t,r,s,n,i,o,c)}a(JY,"between");function XY(e,t,r,s){ur.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);if(gl(r),r=Pa(n,r),s===void 0)throw new Error($e.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Rl.parseRow(c,r)),o}a(XY,"searchByHash");function ZY(e,t,r){ur.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error($e.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(ZY,"checkHashExists");function jY(e,t,r,s,n=[]){return lb(e,t,r,s,n),ub(e,t,r,s,n).map(i=>i[1])}a(jY,"batchSearchByHash");function eK(e,t,r,s,n=[]){lb(e,t,r,s,n);let i=new Map;for(let[o,c]of ub(e,t,r,s,n))i.set(o,c);return i}a(eK,"batchSearchByHashToMap");function ub(e,t,r,s,n=[]){return si(e,t,t,(i,o,c)=>{r=Pa(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,Rl.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(ub,"batchHashSearch");function lb(e,t,r,s,n){if(ur.validateEnv(e),t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);if(gl(r),s==null)throw new Error($e.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error($e.IDS_MUST_BE_ITERABLE)}a(lb,"initializeBatchSearchByHash");function gl(e){if(!Array.isArray(e))throw e===void 0?new Error($e.FETCH_ATTRIBUTES_REQUIRED):new Error($e.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(gl,"validateFetchAttributes");function gn(e,t,r){if(ur.validateEnv(e),t===void 0)throw new Error($e.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error($e.SEARCH_VALUE_REQUIRED);if(r?.length>HY)throw new Error($e.SEARCH_VALUE_TOO_LARGE)}a(gn,"validateComparisonFunctions");function Pa(e,t){return t.length===1&&vY.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Rn.listDBIs(e)),t}a(Pa,"setGetWholeRowAttributes");_b.exports={searchAll:qY,searchAllToMap:FY,count:VY,countAll:xY,equals:kY,startsWith:$Y,endsWith:YY,contains:cb,searchByHash:XY,setGetWholeRowAttributes:Pa,batchSearchByHash:jY,batchSearchByHashToMap:eK,checkHashExists:ZY,iterateDBI:GY,greaterThan:KY,greaterThanEqual:WY,lessThan:QY,lessThanEqual:zY,between:JY}});var Zi=m((Ioe,mb)=>{var db=require("lodash"),Eb=Ue(),De=require("joi"),tK=k(),{hdb_schema_table:Al,checkValidTable:fb,hdb_table:hb,hdb_database:Ol}=ss(),{handleHDBError:rK,hdb_errors:sK}=Q(),{getDatabases:nK}=(de(),re(Ne)),{HTTP_STATUS_CODES:iK}=sK,oK=De.object({database:Ol,schema:Ol,table:hb,search_attribute:Al,search_value:De.any().required(),get_attributes:De.array().min(1).items(Al).optional(),desc:De.bool(),limit:De.number().integer().min(1),offset:De.number().integer().min(0)}),aK=De.object({database:Ol,schema:Ol,table:hb,operator:De.string().valid("and","or").default("and").lowercase(),offset:De.number().integer().min(0),limit:De.number().integer().min(1),get_attributes:De.array().min(1).items(Al).optional(),conditions:De.array().min(1).items(De.object({search_attribute:Al,search_type:De.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:De.when("search_type",{switch:[{is:"equals",then:De.any()},{is:"between",then:De.array().items(De.alternatives([De.string(),De.number()])).length(2)}],otherwise:De.alternatives(De.string(),De.number())}).required()})).required()});mb.exports=function(e,t){let r=null;switch(t){case"value":r=Eb.validateBySchema(e,oK);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(fb("database",e.schema)),i(fb("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=Eb.validateBySchema(e,aK);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=tK.checkGlobalSchemaTable(e.schema,e.table);if(n)return rK(new Error,n,iK.NOT_FOUND);let o=nK()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let l=0,_=e.conditions.length;l<_;l++){let d=e.conditions[l];c.push(d.search_attribute)}let u=db.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!db.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 Ah=m((Coe,Sb)=>{"use strict";var cK=Ie(),uK=Zi(),{getSchemaPath:lK}=Ce();Sb.exports=_K;function _K(e){let t=uK(e,"hashes");if(t)throw t;let r=lK(e.schema,e.table);return cK.openEnvironment(r,e.table)}a(_K,"initialize")});var Oh=m((Doe,pb)=>{"use strict";var dK=Xi(),EK=Ah();pb.exports=fK;async function fK(e){let t=await EK(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return dK.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(fK,"lmdbGetDataByHash")});var ji=m((Moe,Tb)=>{"use strict";var Nh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};Tb.exports=Nh});var gb=m((Boe,Rb)=>{"use strict";var voe=ji(),hK=Xi(),mK=Ah();Rb.exports=SK;async function SK(e){let t=await mK(e),r=global.hdb_schema[e.schema][e.table];return hK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(SK,"lmdbSearchByHash")});var as=m((qoe,Ab)=>{"use strict";var bh=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=_}};Ab.exports=bh});var Nl=m((Goe,wb)=>{"use strict";var Ct=Xi(),pK=Ie(),TK=k(),ie=ke(),ni=g(),RK=Wn(),Ob=rr().LMDB_ERRORS_ENUM,{getSchemaPath:gK}=Ce(),ks=ni.SEARCH_WILDCARDS;async function AK(e,t,r){let s;e.schema===ni.SYSTEM_SCHEMA_NAME?s=RK[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Ib(e,s.hash_attribute,r,t);return bb(e,n,s.hash_attribute,r)}a(AK,"prepSearch");async function bb(e,t,r,s){let n=gK(e.schema,e.table),i=await pK.openEnvironment(n,e.table),o=yb(i,e,t,r),c=o.transaction||i;if([ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ie.SEARCH_TYPES.SEARCH_ALL,ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(OK(e,r)===!1){let _=e.search_attribute;if(_===r)return s?Nb(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?Nb(o,d):o.map(d)}let l=e.search_attribute===r?o.map(_=>_.key):o.map(_=>_.value);return s===!0?Ct.batchSearchByHashToMap(c,r,e.get_attributes,l):Ct.batchSearchByHash(c,r,e.get_attributes,l)}a(bb,"executeSearch");function yb(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case ie.SEARCH_TYPES.EQUALS:n=Ct.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.CONTAINS:n=Ct.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.ENDS_WITH:case ie.SEARCH_TYPES._ENDS_WITH:n=Ct.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.STARTS_WITH:case ie.SEARCH_TYPES._STARTS_WITH:n=Ct.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ct.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ct.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ie.SEARCH_TYPES.SEARCH_ALL:return Ct.searchAll(e,s,t.get_attributes,o,c,u);case ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ct.searchAllToMap(e,s,t.get_attributes,o,c,u);case ie.SEARCH_TYPES.BETWEEN:n=Ct.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ie.SEARCH_TYPES.GREATER_THAN:case ie.SEARCH_TYPES._GREATER_THAN:n=Ct.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.GREATER_THAN_EQUAL:case ie.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ct.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.LESS_THAN:case ie.SEARCH_TYPES._LESS_THAN:n=Ct.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.LESS_THAN_EQUAL:case ie.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ct.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(yb,"searchByType");function Nb(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Nb,"createMapFromIterable");function OK(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(OK,"checkToFetchMore");function Ib(e,t,r,s){if(TK.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),ks.indexOf(n)>-1)return r===!0?ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ie.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(ks[0])<0&&n.indexOf(ks[1])<0)return c===!0?r===!0?ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ie.SEARCH_TYPES.EQUALS;if(ks.indexOf(i)>=0&&ks.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ie.SEARCH_TYPES.CONTAINS;if(ks.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ie.SEARCH_TYPES.ENDS_WITH;if(ks.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ie.SEARCH_TYPES.STARTS_WITH;if(n.includes(ks[0])||n.includes(ks[1]))return ie.SEARCH_TYPES.EQUALS;throw new Error(Ob.UNKNOWN_SEARCH_TYPE)}else switch(s){case ni.VALUE_SEARCH_COMPARATORS.BETWEEN:return ie.SEARCH_TYPES.BETWEEN;case ni.VALUE_SEARCH_COMPARATORS.GREATER:return ie.SEARCH_TYPES.GREATER_THAN;case ni.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ie.SEARCH_TYPES.GREATER_THAN_EQUAL;case ni.VALUE_SEARCH_COMPARATORS.LESS:return ie.SEARCH_TYPES.LESS_THAN;case ni.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ie.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Ob.UNKNOWN_SEARCH_TYPE)}}a(Ib,"createSearchTypeFromSearchObject");wb.exports={executeSearch:bb,createSearchTypeFromSearchObject:Ib,prepSearch:AK,searchByType:yb}});var Ub=m((Voe,Cb)=>{"use strict";var koe=as(),NK=Zi(),bK=k(),yK=g(),IK=Nl();Cb.exports=wK;function wK(e,t){if(!bK.isEmpty(t)&&yK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=NK(e,"value");if(s)throw s;let n=!0;return IK.prepSearch(e,t,n)}a(wK,"lmdbGetDataByValue")});var va=m((Koe,Db)=>{"use strict";var Yoe=as(),CK=Zi(),UK=k(),DK=g(),LK=Nl();Db.exports=MK;async function MK(e,t){if(!UK.isEmpty(t)&&DK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=CK(e,"value");if(s)throw s;return LK.prepSearch(e,t,!1)}a(MK,"lmdbSearchByValue")});var Mb=m((zoe,Lb)=>{"use strict";var Qoe=ke(),yh=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}},Ih=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},wh=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Lb.exports={SearchByConditionsObject:yh,SearchCondition:Ih,SortAttribute:wh}});var qb=m((joe,Hb)=>{"use strict";var Xoe=Mb().SearchByConditionsObject,PK=as(),vK=Zi(),Ch=Xi(),bl=ke(),{Resource:Zoe}=(Zr(),re(VE)),Bb=Nl(),BK=gh(),HK=require("lodash"),{getSchemaPath:qK}=Ce(),Pb=Ie(),{handleHDBError:FK,hdb_errors:GK}=Q(),{HTTP_STATUS_CODES:xK}=GK,kK=1e8;Hb.exports=VK;async function VK(e){let t=vK(e,"conditions");if(t)throw FK(t,t.message,xK.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=qK(e.schema,e.table),s=await Pb.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)Pb.openDBI(s,l.search_attribute);let i=HK.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===bl.SEARCH_TYPES.EQUALS?l.estimated_count=Ch.count(s,l.search_attribute,l.search_value):_===bl.SEARCH_TYPES.CONTAINS||_===bl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=kK}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await vb(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(Bb.filterByType),d=_.length,E=Ch.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=>BK.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await vb(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=Ch.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(VK,"lmdbSearchByConditions");async function vb(e,t,r,s){let n=new PK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===bl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Bb.searchByType(e,n,i,s).map(o=>o.value)}a(vb,"executeConditionSearch")});var eo=m((tae,Fb)=>{"use strict";var $K=g().OPERATIONS_ENUM,Uh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=$K.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Fb.exports=Uh});var Dh=m((sae,Wb)=>{"use strict";var Vb=as(),$b=eo(),Yb=va(),Kb=La(),Ft=g(),Gb=k(),xb=Ie(),{getTransactionAuditStorePath:YK,getSchemaPath:KK}=Ce(),kb=F();Wb.exports=WK;async function WK(e){try{if(Gb.isEmpty(global.hdb_schema[e.schema])||Gb.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await QK(e),await zK(e);let t=KK(e.schema,e.table);try{await xb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")kb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=YK(e.schema,e.table);await xb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")kb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(WK,"lmdbDropTable");async function QK(e){let t=new Vb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Yb(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 $b(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Kb(n)}a(QK,"deleteAttributesFromSystem");async function zK(e){let t=new Vb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Yb(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 $b(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Kb(n)}catch(i){throw i}}a(zK,"dropTableFromSystem")});var zb=m((iae,Qb)=>{"use strict";var JK=require("fs-extra"),XK=as(),ZK=ji(),jK=eo(),e1=Dh(),t1=La(),r1=Oh(),s1=va(),Vs=g(),{getSchemaPath:n1}=Ce(),{handleHDBError:i1,hdb_errors:o1}=Q(),{HDB_ERROR_MSGS:a1,HTTP_STATUS_CODES:c1}=o1;Qb.exports=u1;async function u1(e){let t;try{t=await l1(e.schema);let r=new XK(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await s1(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await e1(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new jK(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await t1(n);let i=n1(t);await JK.remove(i)}catch(r){throw r}}a(u1,"lmdbDropSchema");async function l1(e){let t=new ZK(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await r1(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw i1(new Error,a1.SCHEMA_NOT_FOUND(e),c1.NOT_FOUND,void 0,void 0,!0);return s}a(l1,"validateDropSchema")});var yl=m((aae,Jb)=>{"use strict";var Lh=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Jb.exports=Lh});var Zb=m((lae,Xb)=>{"use strict";var _1=require("fs-extra"),Il=Ie(),{getTransactionAuditStorePath:d1}=Ce(),Mh=ke(),uae=yl();Xb.exports=E1;async function E1(e){let t;try{let r=d1(e.schema,e.table);await _1.mkdirp(r),t=await Il.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{Il.createDBI(t,Mh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Il.createDBI(t,Mh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Il.createDBI(t,Mh.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(E1,"createTransactionsAuditEnvironment")});var ry=m((dae,ty)=>{"use strict";var Ph=g(),jb=Ie(),f1=Fi(),{getSystemSchemaPath:h1,getSchemaPath:m1}=Ce(),S1=Wn(),p1=Qu(),vh=Wu(),T1=F(),R1=Zb(),Hh=S1.hdb_table,ey=[];for(let e=0;e<Hh.attributes.length;e++)ey.push(Hh.attributes[e].attribute);ty.exports=g1;async function g1(e,t){let r=m1(t.schema,t.table),s=new vh(t.schema,t.table,Ph.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new vh(t.schema,t.table,Ph.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new vh(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await jb.createEnvironment(r,t.table),e!==void 0){let o=await jb.openEnvironment(h1(),Ph.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await f1.insertRecords(o,Hh.hash_attribute,ey,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Bh(s),await Bh(n),await Bh(i)}await R1(t)}catch(o){throw o}}a(g1,"lmdbCreateTable");async function Bh(e){try{await p1(e)}catch(t){T1.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Bh,"createAttribute")});var ny=m((fae,sy)=>{"use strict";var A1=pa(),O1=Oa(),N1=Sl(),Ba=g(),b1=Fi().updateRecords,y1=Ie(),{getSchemaPath:I1}=Ce(),w1=Ua(),C1=F();sy.exports=U1;async function U1(e){try{let{schema_table:t,attributes:r}=A1(e);O1(e,r,t.hash_attribute),e.schema!==Ba.SYSTEM_SCHEMA_NAME&&(r.includes(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await N1(e.hdb_auth_header,t,r),n=I1(e.schema,e.table),i=await y1.openEnvironment(n,e.table),o=await b1(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await w1(e,o)}catch(c){C1.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(U1,"lmdbUpdateRecords")});var oy=m((mae,iy)=>{"use strict";var D1=g().OPERATIONS_ENUM,qh=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=D1.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};iy.exports=qh});var cy=m((Tae,ay)=>{"use strict";var pae=oy(),L1=pa(),M1=Oa(),P1=Sl(),Ha=g(),v1=Fi().upsertRecords,B1=Ie(),{getSchemaPath:H1}=Ce(),q1=Ua(),F1=F(),{handleHDBError:G1,hdb_errors:x1}=Q();ay.exports=k1;async function k1(e){let t;try{t=L1(e)}catch(u){throw G1(u,u.message,x1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;M1(e,s,r.hash_attribute),e.schema!==Ha.SYSTEM_SCHEMA_NAME&&(s.includes(Ha.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ha.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ha.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ha.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await P1(e.hdb_auth_header,r,s),i=H1(e.schema,e.table),o=await B1.openEnvironment(i,e.table),c=await v1(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await q1(e,c)}catch(u){F1.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(k1,"lmdbUpsertRecords")});var ly=m((gae,uy)=>{"use strict";var Fh=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};uy.exports=Fh});var dy=m((Oae,_y)=>{"use strict";var Gh=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}};_y.exports=Gh});var hy=m((yae,fy)=>{"use strict";var xh=Ie(),{getTransactionAuditStorePath:V1}=Ce(),bae=ly(),qa=ke(),$1=k(),Ey=dy(),Y1=require("util").promisify,K1=Y1(setTimeout),W1=1e4,Q1=100;fy.exports=z1;async function z1(e){let t=V1(e.schema,e.table),r=await xh.openEnvironment(t,e.table,!0),s=xh.listDBIs(r);xh.initializeDBIs(r,qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Ey;do n=await J1(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 K1(Q1);while(n.transactions_deleted>0);return i}a(z1,"deleteAuditLogsBefore");async function J1(e,t){let r=new Ey;try{let s=e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[qa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];$1.isEmpty(c)||(n=e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>W1)break}return await n,r}catch(s){throw s}}a(J1,"deleteTransactions")});var Sy=m((wae,my)=>{"use strict";var kh=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};my.exports=kh});var Ty=m((Dae,py)=>{"use strict";var X1=as(),Z1=eo(),Uae=Sy(),cs=g(),j1=k(),Vh=Ie(),eW=Wn(),tW=va(),rW=La(),{getSchemaPath:sW}=Ce();py.exports=nW;async function nW(e,t=!0){let r;e.schema===cs.SYSTEM_SCHEMA_NAME?r=eW[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await oW(e),n=sW(e.schema,e.table),i=await Vh.openEnvironment(n,e.table);return t===!0&&await iW(e,i,r.hash_attribute),Vh.dropDBI(i,e.attribute),s}a(nW,"lmdbDropAttribute");async function iW(e,t,r){let s=Vh.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(iW,"removeAttributeFromAllObjects");async function oW(e){let t=new X1(cs.SYSTEM_SCHEMA_NAME,cs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await tW(t)).filter(o=>o[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(j1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Z1(cs.SYSTEM_SCHEMA_NAME,cs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return rW(i)}a(oW,"dropAttributeFromSystem")});var by=m((Pae,Ny)=>{"use strict";var $h=Ie(),to=ke(),Mae=vt(),Yh=g(),Ry=k(),{getTransactionAuditStorePath:aW}=Ce(),cW=Xi(),wl=Qi(),uW=F();Ny.exports=lW;async function lW(e){let t=aW(e.schema,e.table),r=await $h.openEnvironment(t,e.table,!0),s=$h.listDBIs(r);$h.initializeDBIs(r,to.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Yh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return gy(r,e.search_values);case Yh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,dW(r,e.search_values,n);case Yh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return _W(r,e.search_values);default:return gy(r)}}a(lW,"readAuditLog");function gy(e,t=[0,Date.now()]){Ry.isEmpty(t[0])&&(t[0]=0),Ry.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[to.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 wl,n))}a(gy,"searchTransactionsByTimestamp");function _W(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[to.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,Oy(e,i))}return Object.fromEntries(r)}a(_W,"searchTransactionsByUsername");function dW(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=cW.equals(e,to.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,to.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=Oy(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);Ay(u,"records",r,_,o),Ay(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(dW,"searchTransactionsByHashValues");function Ay(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 wl(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new wl(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(Ay,"loopRecords");function Oy(e,t){let r=[];try{let s=e.dbis[to.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 wl,i);r.push(o)}}catch(i){uW.warn(i)}return r}catch(s){throw s}}a(Oy,"batchSearchTransactions")});var Iy=m((qae,yy)=>{"use strict";var{getSchemaPath:Bae}=Ce(),Hae=Ie(),{database:EW}=(de(),re(Ne));yy.exports={writeTransaction:fW};async function fW(e,t,r){return EW({database:e,table:t}).transaction(r)}a(fW,"writeTransaction")});var Dy=m((Gae,Uy)=>{"use strict";var{getSchemaPath:wy}=Ce(),Cy=Ie();Uy.exports={flush:hW,resetReadTxn:mW};async function hW(e,t){return(await Cy.openEnvironment(wy(e,t),t.toString())).flushed}a(hW,"flush");async function mW(e,t){try{(await Cy.openEnvironment(wy(e,t),t.toString())).resetReadTxn()}catch{}}a(mW,"resetReadTxn")});var vy=m((kae,Py)=>{"use strict";var{Readable:SW}=require("stream"),{getDatabases:pW}=(de(),re(Ne)),{readSync:TW,openSync:RW,createReadStream:Ly}=require("fs"),{open:gW}=require("lmdb"),My=Hu(),AW=Fu(),{INTERNAL_DBIS_NAME:OW}=ke();Py.exports=bW;var Kh=32768,NW=100;async function bW(e){let t=e.database||e.schema||"data",r=pW()[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=gW({noSync:!0,maxDbs:AW.MAX_DBS}),E,f=d.openDB(OW,new My(!1)),h=_.useReadTransaction(),p=0;for(let{key:R,value:O}of _.getRange({transaction:h,start:!1}))if(n.some(V=>R.startsWith?.(V+"/"))){f.put(R,O);let[,V]=R.split("/"),$=!V,U=new My(!$,$);U.encoding="binary";let b=d.openDB(R,U),P=_.openDB(R,U);for(let{key:z,version:q,value:Oe}of P.getRange({transaction:h,versions:$}))E=b.put(z,Oe,q),p++%NW===0&&await new Promise(et=>setTimeout(et,20))}await E;let T=Ly(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=RW(o.path);return o.transaction(()=>{let l=Buffer.alloc(Kh);TW(c,l,0,Kh);let _=o.useReadTransaction(),d=Ly(null,{fd:c,start:Kh}),E=new SW.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(bW,"getBackup")});var qy=m(($ae,Hy)=>{"use strict";var yW=F(),{handleHDBError:IW}=Q(),wW=tA(),CW=Qu(),UW=mh(),DW=zN(),LW=La(),MW=Oh(),PW=gb(),vW=Ub(),BW=va(),HW=qb(),qW=zb(),FW=ry(),GW=ny(),xW=cy(),kW=hy(),VW=Dh(),$W=Ty(),YW=by(),KW=Iy(),By=Dy(),WW=vy(),Wh=class extends wW{static{a(this,"LMDBBridge")}async searchByConditions(t){return HW(t)}async getDataByHash(t){return await MW(t)}async searchByHash(t){return await PW(t)}async getDataByValue(t,r){return await vW(t,r)}async searchByValue(t){return await BW(t)}async createSchema(t){return await DW(t)}async dropSchema(t){return await qW(t)}async createTable(t,r){return await FW(t,r)}async dropTable(t){return await VW(t)}async createAttribute(t){return await CW(t)}async createRecords(t){return await UW(t)}async updateRecords(t){return await GW(t)}async upsertRecords(t){try{return await xW(t)}catch(r){throw IW(r,null,null,yW.ERR,r)}}async deleteRecords(t){return await LW(t)}async dropAttribute(t){return await $W(t)}async deleteAuditLogsBefore(t){return await kW(t)}async readAuditLog(t){return await YW(t)}writeTransaction(t,r,s){return KW.writeTransaction(t,r,s)}flush(t,r){return By.flush(t,r)}resetReadTxn(t,r){return By.resetReadTxn(t,r)}getBackup(t){return WW(t)}};Hy.exports=Wh});var Wy={};tt(Wy,{ResourceBridge:()=>Jh});function Xh({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 Gy(e,t){let r=us(e),s=Xh(e,r);if(!r)throw new Gr.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user};return We(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&&Cu(u),t?yield{key:c,value:u}:yield u}})}function us(e){let t=e.database||e.schema||zW,r=xr()[t];if(!r)throw(0,Gr.handleHDBError)(new Error,QW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function xy(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*ky(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 Vy,Cl,Gr,$y,Yy,kr,Qh,zh,Ky,QW,zW,JW,XW,Fy,Jh,Qy=Se(()=>{"use strict";Vy=C(qy()),Cl=C(Zi()),Gr=C(Q());de();$y=C(pa()),Yy=C(Oa()),kr=C(g()),Qh=C(xs()),zh=C(Fr()),Ky=C(k());Yn();Uu();({HDB_ERROR_MSGS:QW}=Gr.hdb_errors),zW="data",JW=1e4,XW=10,Jh=class extends Vy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Fy=this}async searchByConditions(t){let r=(0,Cl.default)(t,"conditions");if(r)throw(0,Gr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=us(t);if(!s)throw new Gr.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Xh(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Gr.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}nt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await us(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=us(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(l=>{if(!l){let{value:_,version:d}=r.primaryStore.getEntry(o);return i(o,_,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(l=>setImmediate(l));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){us(t).dropTable()}createSchema(t){return Fa({database:t.schema,table:null}),Qh.signalSchemaChange(new zh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Zh(t.schema),Qh.signalSchemaChange(new zh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,Fy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,$y.default)(t);(0,Yy.default)(t,s,r.primaryKey);let n,i=xr()[t.schema][t.table],o={user:t.hdb_user};return We(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=Cu(d));for(let E in _)if(Object.prototype.hasOwnProperty.call(_,E)){let f=_[E];if(typeof f=="function")try{let h=f([[d]]);Array.isArray(h)&&(f=h[0].func_val,_[E]=f)}catch(h){throw h.message+="Trying to set key "+E+" on object"+JSON.stringify(_),h}}if(d)for(let E in d)Object.prototype.hasOwnProperty.call(_,E)||(_[E]=d[E]);await i.put(_,o),u.push(_[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:l}})}async deleteRecords(t){let r=xr()[t.schema][t.table],s={user:t.hdb_user};return We(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 xy(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=xr()[t.schema][t.table];if(!r.createdTimeProperty)throw new Gr.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:kr.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],l=a(async()=>{let _=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(..._.deleted_hashes),o.push(..._.skipped_hashes),await(0,Ky.async_set_timeout)(XW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%JW===0&&await l();return u.length>0&&await l(),n?xy(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Cl.default)(t,"hashes");if(r)throw r;return Gy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of Gy(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&kr.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,Cl.default)(t,"value");if(s)throw s;let n=us(t);if(!n)throw new Gr.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===kr.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Xh(t,n)})}async getDataByValue(t,r){let s=new Map,n=us(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){us({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return us(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=us(t),s={};switch(t.search_type){case kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of ky(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return ky(r,t.search_values?.[0],t.search_values?.[1])}}};a(Xh,"getSelect");a(Gy,"getRecords");a(us,"getTable");a(xy,"createDeleteResponse");a(ky,"groupRecordsInHistory")});var Hr=m((Jae,zy)=>{"use strict";var{ResourceBridge:ZW}=(Qy(),re(Wy)),jW=W();jW.initSync();var Ul;function eQ(){return Ul||(Ul=new ZW,Ul)}a(eQ,"getBridge");zy.exports=eQ()});var jy=m((Zae,Zy)=>{"use strict";var Jy=require("lodash"),Ga=require("mathjs"),tQ=require("jsonata"),Xy=k();Zy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Jy.uniqWith(e,Jy.isEqual):e,searchJSON:rQ,mad:xa.bind(null,Ga.mad),mean:xa.bind(null,Ga.mean),mode:xa.bind(null,Ga.mode),prod:xa.bind(null,Ga.prod),median:xa.bind(null,Ga.median)};function xa(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(xa,"aggregateFunction");function rQ(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(Xy.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Xy.isEmpty(this.__ala__.res[r])){let s=tQ(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(rQ,"searchJSON")});var tI=m((ece,eI)=>{"use strict";var ze=require("moment"),jh="YYYY-MM-DDTHH:mm:ss.SSSZZ";ze.suppressDeprecationWarnings=!0;eI.exports={current_date:()=>ze().utc().format("YYYY-MM-DD"),current_time:()=>ze().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return ze(e).utc().format("YYYY");case"month":return ze(e).utc().format("MM");case"day":return ze(e).utc().format("DD");case"hour":return ze(e).utc().format("HH");case"minute":return ze(e).utc().format("mm");case"second":return ze(e).utc().format("ss");case"millisecond":return ze(e).utc().format("SSS");default:break}},date:e=>ze(e).utc().format(jh),date_format:(e,t)=>ze(e).utc().format(t),date_add:(e,t,r)=>ze(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>ze(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=ze(e).utc(),n=ze(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>ze().utc().valueOf(),get_server_time:()=>ze().format(jh),offset_utc:(e,t)=>ze(e).utc().utcOffset(t).format(jh)}});var iI=m((tce,nI)=>{"use strict";var sQ=require("@turf/area"),nQ=require("@turf/length"),iQ=require("@turf/circle"),oQ=require("@turf/difference"),aQ=require("@turf/distance"),cQ=require("@turf/boolean-contains"),uQ=require("@turf/boolean-equal"),lQ=require("@turf/boolean-disjoint"),_Q=require("@turf/helpers"),rI=g(),le=k();nI.exports={geoArea:dQ,geoLength:EQ,geoCircle:fQ,geoDifference:hQ,geoDistance:sI,geoNear:mQ,geoContains:SQ,geoEqual:pQ,geoCrosses:TQ,geoConvert:RQ};var em="geo1 is required",tm="geo2 is required";function dQ(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),sQ.default(e)}a(dQ,"geoArea");function EQ(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),nQ.default(e,{units:t||"kilometers"})}a(EQ,"geoLength");function fQ(e,t,r){if(le.isEmpty(e))throw new Error("point is required");if(le.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),iQ.default(e,t,{units:r||"kilometers"})}a(fQ,"geoCircle");function hQ(e,t){if(le.isEmpty(e))throw new Error("poly1 is required");if(le.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),oQ(e,t)}a(hQ,"geoDifference");function sI(e,t,r){if(le.isEmpty(e))throw new Error("point1 is required");if(le.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),aQ.default(e,t,{units:r||"kilometers"})}a(sI,"geoDistance");function mQ(e,t,r,s){if(le.isEmpty(e))throw new Error("point1 is required");if(le.isEmpty(t))throw new Error("point2 is required");if(le.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return sI(e,t,s)<=r}a(mQ,"geoNear");function SQ(e,t){if(le.isEmpty(e))throw new Error(em);if(le.isEmpty(e))throw new Error(tm);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),cQ.default(e,t)}a(SQ,"geoContains");function pQ(e,t){if(le.isEmpty(e))throw new Error(em);if(le.isEmpty(e))throw new Error(tm);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),uQ.default(e,t)}a(pQ,"geoEqual");function TQ(e,t){if(le.isEmpty(e))throw new Error(em);if(le.isEmpty(e))throw new Error(tm);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!lQ.default(e,t)}a(TQ,"geoCrosses");function RQ(e,t,r){if(le.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(le.isEmpty(t))throw new Error("geo_type is required");if(le.isEmpty(rI.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(rI.GEO_CONVERSION_ENUM).join(",")}`);return _Q[t](e,r)}a(RQ,"geoConvert")});var Dl=m((sce,oI)=>{var ii=jy(),lr=tI(),ls=iI();oI.exports=e=>{e.aggr.mad=e.aggr.MAD=ii.mad,e.aggr.mean=e.aggr.MEAN=ii.mean,e.aggr.mode=e.aggr.MODE=ii.mode,e.aggr.prod=e.aggr.PROD=ii.prod,e.aggr.median=e.aggr.MEDIAN=ii.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ii.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ii.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=lr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=lr.current_time,e.fn.extract=e.fn.EXTRACT=lr.extract,e.fn.date=e.fn.DATE=lr.date,e.fn.date_format=e.fn.DATE_FORMAT=lr.date_format,e.fn.date_add=e.fn.DATE_ADD=lr.date_add,e.fn.date_sub=e.fn.DATE_SUB=lr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=lr.date_diff,e.fn.now=e.fn.NOW=lr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=lr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=lr.get_server_time,e.fn.getdate=e.fn.GETDATE=lr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=lr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=ls.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ls.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ls.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ls.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ls.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ls.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ls.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ls.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ls.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ls.geoNear}});var lI=m((nce,uI)=>{"use strict";var ka=require("lodash"),pt=require("alasql");pt.options.cache=!1;var gQ=Dl(),aI=require("clone"),Ll=require("recursive-iterator"),se=F(),ne=k(),ro=Hr(),AQ=g(),{hdb_errors:OQ}=Q(),{getDatabases:cI}=(de(),re(Ne)),NQ="IS NULL",Vr="There was a problem performing this search. Please check the logs and try again.";gQ(pt);var rm=class{static{a(this,"SQLSearch")}constructor(t,r){if(ne.isEmpty(t))throw se.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),ne.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ne.isEmptyOrZeroLength(s))return se.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw se.error("Error thrown from checkEmptySQL in SQLSearch class method search."),se.error(s),new Error(Vr)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw se.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),se.error(s),new Error(Vr)}if(Object.keys(this.data).length===0)return se.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw se.error("Error thrown from processJoins in SQLSearch class method search."),se.error(s),new Error(Vr)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw se.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),se.error(s),new Error(Vr)}try{return t=await this._finalSQL(),t}catch(s){throw se.error("Error thrown from finalSQL in SQLSearch class method search."),se.error(s),new Error(Vr)}}_getColumns(){let t=new Ll(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(aI(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=ka.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=cI()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ne.isEmpty(this.statement.where)){se.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Ll(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ne.isEmpty(r)&&r.right)if(ne.isNotEmptyAndHasValue(r.right.value)){let s=ne.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new pt.yy.LogicValue({value:s}):r.right instanceof pt.yy.StringValue&&!ne.isEmpty(s)&&ne.autoCasterIsNumberCheck(s.toString())&&(r.right=new pt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ne.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new pt.yy.LogicValue({value:i}):s instanceof pt.yy.StringValue&&ne.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new pt.yy.NumValue({value:i}))});if(t){se.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Ll(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!ne.isEmpty(AQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ne.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ne.isEmptyOrZeroLength(r.left.columnid)||ne.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(ne.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!ne.isEmpty(r.right.value)||!ne.isEmpty(r.left.value)?s.add(ne.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let l=0;l<u.length;l++)if(u[l].value)s.add(u[l].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from)&&ne.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&ka.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(ne.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ne.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&!ne.isEmptyOrZeroLength(this.columns.columns))return t;if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pt.promise(r)}catch(r){throw se.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),se.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(aI(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(ne.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(NQ)>-1&&this.tables.forEach(n=>{let i={columnid:cI()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=ka.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,l=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ne.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await ro.getDataByHash(c);for(let d of c.hash_values)_.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(_){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(Vr)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[l].values).map(async _=>{let d=Object.assign({},c);d.search_value=_;let E=await ro.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]):(this.data[i].__merged_data[f]=[...s[i]],this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(f)))}))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(Vr)}else if(!ne.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.comparator_search_values[l].comparators))try{let _=this.comparator_search_values[l].comparators;for(let d=0,E=_.length;d<E;d++){let f=_[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await ro.getDataByValue(c,f.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(p)));else for(let[p,T]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,T[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,T[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(p)))}}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),se.error(_),new Error(Vr)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await ro.getDataByValue(c);if(u)for(let[d]of _)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(d)));else for(let[d,E]of _)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(d)))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),se.error(_),new Error(Vr)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof pt.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new pt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new pt.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new pt.yy.FuncValue:new pt.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,p=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${p}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${p}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",l="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(l="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let _="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(_=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${l} ${_} ${d}`,h=this._convertColumnsToIndexes(f,n);E=await pt.promise(h,t),t=null}catch(f){throw se.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),se.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let p=E[f];o.forEach(T=>{p[T.key]!==null&&p[T.key]!==void 0&&T.keys.add(p[T.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),p=ka.difference(h,[...f.keys].map(T=>T.toString()));for(let T=0,R=p.length;T<R;T++){let O=p[T];delete this.data[`${f.schema}_${f.table}`].__merged_data[O]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Ll(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=ka.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw se.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),se.error(i),new Error(Vr)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let _ in i)o.push(i[_][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await ro.getDataByHash(c),l=n.columns.length;for(let _=0,d=o.length;_<d;_++){let E=o[_],f=u.get(E);for(let h=0;h<l;h++){let p=n.columns[h],T=f[p]===void 0?null:f[p];this.data[s].__merged_data[E].push(T)}}}}catch(r){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getData."),se.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();se.trace(`Final SQL: ${n}`),s=await pt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),se.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw se.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),se.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return se.error(OQ.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),se.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],l=new RegExp(`${u}.\`${o}\``,"g"),_=`${u}.[${c}]`;s=s.replace(l,_)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),l=`[${c}]`;s=s.replace(u,l)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await ro.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw se.error("There was an error when processing this SQL operation. Check your logs"),se.error(o),new Error(Vr)}}return Object.values(Object.values(this.data)[0].__merged_data)}};uI.exports=rm});var Ar=m((oce,_I)=>{"use strict";var bQ=jg();_I.exports={searchByConditions:IQ,searchByHash:wQ,searchByValue:CQ,search:UQ};var sm=Hr(),{transformReq:nm}=k(),yQ=lI();async function IQ(e){return nm(e),sm.searchByConditions(e)}a(IQ,"searchByConditions");async function wQ(e){nm(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of sm.searchByHash(e))r&&t.push(r);return t}a(wQ,"searchByHash");async function CQ(e){nm(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of sm.searchByValue(e))t.push(r);return t}a(CQ,"searchByValue");function UQ(e,t){try{let r=new bQ(e);r.validate(),new yQ(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(UQ,"search")});var Ml=m((cce,dI)=>{"use strict";var DQ=Hr();dI.exports={writeTransaction:LQ};function LQ(e,t,r){return DQ.writeTransaction(e,t,r)}a(LQ,"writeTransaction")});var mI=m((_ce,hI)=>{"use strict";var MQ=Ar(),PQ=Bs(),EI=F(),vQ=ir(),lce=Ml(),BQ=require("clone"),om=require("alasql"),HQ=Dl(),fI=require("util"),qQ=fI.promisify(PQ.getTableSchema),FQ=fI.promisify(MQ.search),GQ=g(),im=k();HQ(om);hI.exports={update:kQ};var xQ="There was a problem performing this update. Please check the logs and try again.";async function kQ({statement:e,hdb_user:t}){let r=await qQ(e.table.databaseid,e.table.tableid),s=VQ(e.columns);im.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=BQ(n),c=im.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=om.parse(u).statements[0],_=await FQ(l),d=$Q(s,_);return YQ(o,d,t)}a(kQ,"update");function VQ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=om.compile(`SELECT ${r.expression.toString()} AS [${GQ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw EI.error(t),new Error(xQ)}}a(VQ,"createUpdateRecord");function $Q(e,t){return im.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a($Q,"buildUpdateRecords");async function YQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await vQ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){EI.error(`Error delete new_attributes from update response: ${i}`)}return n}a(YQ,"updateRecords")});var pI=m((hce,SI)=>{var KQ=require("alasql"),WQ=Ar(),QQ=F(),zQ=Hr(),cm=require("util"),am=k(),JQ=g(),XQ=Bs(),Ece=Ml(),fce=ir(),ZQ="record",jQ="successfully deleted",ez=cm.callbackify(nz),tz=cm.promisify(WQ.search),rz=cm.promisify(XQ.getTableSchema);SI.exports={convertDelete:ez};function sz(e){return`${e.deleted_hashes.length} ${ZQ}${e.deleted_hashes.length===1?"":"s"} ${jQ}`}a(sz,"generateReturnMessage");async function nz({statement:e,hdb_user:t}){let r=await rz(e.table.databaseid,e.table.tableid);am.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=am.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=KQ.parse(o).statements[0],u={operation:JQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await tz(c);let l=await zQ.deleteRecords(u);return am.isEmptyOrZeroLength(l.message)&&(l.message=sz(l)),delete l.txn_time,l}catch(l){throw QQ.error(l),l.hdb_code?l.message:l}}a(nz,"convertDelete")});var OI=m((Sce,AI)=>{"use strict";var iz=En(),{hdb_errors:TI}=Q(),{getDatabases:RI}=(de(),re(Ne));AI.exports={checkSchemaExists:gI,checkSchemaTableExists:oz,schema_describe:iz};async function gI(e){if(!RI()[e])return TI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(gI,"checkSchemaExists");async function oz(e,t){let r=await gI(e);if(r)return r;if(!RI()[e][t])return TI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(oz,"checkSchemaTableExists")});var Va=m((Tce,az)=>{az.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 ql={};tt(ql,{addAnalyticsListener:()=>dm,recordAction:()=>_s,recordActionBinary:()=>so,setAnalyticsEnabled:()=>cz});function cz(e){MI=e}function _s(e,t,r,s,n){if(!MI)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Bl.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Bl.set(i,o)),vl||uz()}function so(e,t,r,s,n){_s(e?1:0,t,r,s,n)}function dm(e){vI.push(e)}function uz(){vl=performance.now(),setTimeout(()=>{let e=performance.now()-vl;vl=0;let t=[],r={time:Date.now(),period:e,threadId:oi.threadId,metrics:t};for(let[n,i]of Bl)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:oi.threadId,...s});for(let n of vI)n(t);Bl=new Map,oi.parentPort?oi.parentPort.postMessage({type:PI,report:r}):HI({report:r})},_m).unref()}async function lz(e,t=6e4){let r=Em(),s;for(let _ of r.primaryStore.getRange({start:Pl+"z",end:Pl,reverse:!0}))if(_.value?.time){s=_.value.time;break}if(Date.now()-t<s)return;let n,i=new Map,o;for(let{key:_,value:d}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!d)continue;if(n){if(_>n+t)break}else n=_;o=_;let{metrics:E}=d;for(let f of E||[]){let{path:h,method:p,type:T,metric:R,count:O,threadId:V,...$}=f;O||(O=1);let U=R+(h?"-"+h:"");p&&(U+="-"+p);let b=i.get(U);if(b)for(let P in $){let z=$[P];if(typeof z=="number"){let q=b.count||1;b[P]=(b[P]*q+z*O)/(b.count=q+O)}}else b=Object.assign({period:t},f),i.set(U,b)}await _z()}for(let[_,d]of i)d.id=Pl+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:Pl+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-NI,active:l-bI,time:c}),NI=u,bI=l}async function dz(e,t){let r=Em(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function Em(){return yI||(yI=nt({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function fz(){BI=!0,setInterval(async()=>{await lz(_m,lm),await dz(Ez,_m)},lm/2).unref()}function HI(e,t){let r=e.report;r.threadId=t?.threadId||oi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(II+=s.mean*s.count);r.totalBytesProcessed=II,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(wI.get(t))}),wI.set(t,t.performance.eventLoopUtilization())),r.id=(0,DI.getNextMonotonicTime)(),Em().put(r),BI||fz(),hz&&(qI=Sz(r))}async function Sz(e){if(await qI,!An){let r=(0,$a.dirname)((0,UI.getLogFilePath)());try{An=await(0,um.open)((0,$a.join)(r,"analytics.log"),"r+")}catch{An=await(0,um.open)((0,$a.join)(r,"analytics.log"),"w+")}}let t=(await An.stat()).size;if(t>mz){let r=Buffer.alloc(t);await An.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await An.write(r,{position:0}),await An.truncate(r.length),t=r.length}await An.write(JSON.stringify(e)+`
|
|
6
|
+
`,t)}var oi,CI,UI,$a,um,DI,Hl,LI,Bl,lm,MI,vl,_m,PI,vI,Pl,NI,bI,_z,Ez,yI,BI,II,wI,hz,qI,An,mz,ai=Se(()=>{oi=require("worker_threads"),CI=C(Ve());de();UI=C(F()),$a=require("path"),um=require("fs/promises"),DI=C(vt()),Hl=C(W()),LI=C(g());ts();(0,Hl.initSync)();Bl=new Map,lm=(0,Hl.get)(LI.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3,MI=lm>0;a(cz,"setAnalyticsEnabled");a(_s,"recordAction");st.recordAnalytics=_s;a(so,"recordActionBinary");vl=0,_m=1e3,PI="analytics-report",vI=[];a(dm,"addAnalyticsListener");a(uz,"sendAnalytics");Pl="sum-";a(lz,"aggregation");NI=0,bI=0,_z=a(()=>new Promise(setImmediate),"rest");a(dz,"cleanup");Ez=36e5;a(Em,"getAnalyticsTable");(0,CI.setChildListenerByType)(PI,HI);a(fz,"startScheduledTasks");II=0,wI=new Map,hz=!1;a(HI,"recordAnalytics");mz=1e6;a(Sz,"logAnalytics")});var He=m((Mce,sw)=>{"use strict";var Tt=W();Tt.initSync();var pz=require("fs-extra"),Tz=require("semver"),Qa=require("path"),{monotonicFactory:Rz}=require("ulidx"),Sm=Rz(),gz=require("util"),GI=require("child_process"),Az=gz.promisify(GI.exec),Oz=GI.spawn,_e=be(),Te=g(),Fl=k(),yr=F(),Gl=vs(),Nz=Ml(),Ya=Nr(),{Encoder:bz,decode:pm}=require("msgpackr"),xI=new bz,{isEmpty:ci}=Fl,kI=br(),VI=12e10,yz=48*36e11,Iz=5e9,{connect:wz,StorageType:$I,RetentionPolicy:YI,AckPolicy:xl,DeliverPolicy:kl,DiscardPolicy:Cz,NatsConnection:Cce,JetStreamManager:Uce,JetStreamClient:Dce,StringCodec:Lce,JSONCodec:Uz,createInbox:Tm,headers:Dz,ErrorCode:FI}=require("nats"),{PACKAGE_ROOT:Lz}=g(),Mz=Va(),{recordAction:Pz}=(ai(),re(ql)),KI=Uz(),vz="clustering",Bz=Mz.engines[_e.NATS_SERVER_NAME],Hz=Qa.join(Lz,"dependencies"),mm=Qa.join(Hz,`${process.platform}-${process.arch}`,_e.NATS_BINARY_NAME),fm,hm,Ka,no,io;sw.exports={runCommand:WI,checkNATSServerInstalled:qz,createConnection:Rm,getConnection:Vl,getJetStreamManager:za,getJetStream:QI,getNATSReferences:Gt,getServerList:Gz,createLocalStream:gm,listStreams:zI,deleteLocalStream:xz,getServerConfig:Ja,listRemoteStreams:kz,viewStream:Vz,viewStreamIterator:$z,publishToStream:Yz,createWorkQueueStream:Kz,addSourceToWorkStream:XI,request:Qz,removeSourceFromWorkStream:jI,reloadNATS:Am,reloadNATSHub:zz,reloadNATSLeaf:Jz,extractServerName:ZI,requestErrorHandler:Xz,updateWorkStream:Zz,createLocalTableStream:tw,createTableStreams:jz,purgeTableStream:rw,purgeSchemaTableStreams:eJ,getStreamInfo:tJ,updateLocalStreams:sJ,closeConnection:Fz,getJsmServerName:Xa,addNatsMsgHeader:JI,updateIngestStreamConsumer:Wz};async function WI(e,t=void 0){let{stdout:r,stderr:s}=await Az(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
7
7
|
`,""));return r.replace(`
|
|
8
|
-
`,"")}a($I,"runCommand");async function Mz(){try{await Ez.access(Em)}catch{return!1}let e=await $I(`${Em} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return fz.eq(t,Dz)}a(Mz,"checkNATSServerInstalled");async function Sm(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await FI.getClusterUser();if(ai(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Nr.trace("create nats connection called");let i=await Oz({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return Nr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(Sm,"createConnection");async function Pz(){ls&&(await ls.drain(),ls=void 0,so=void 0,no=void 0,Ya=void 0)}a(Pz,"closeConnection");var ls,Ya;async function Gl(){return Ya||(Ya=Sm(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ls=await Ya),ls||Ya}a(Gl,"getConnection");async function Wa(){if(so)return so;ai(ls)&&await Gl();let{domain:e}=Qa(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ai(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return so=await ls.jetstreamManager({domain:e}),so}a(Wa,"getJetStreamManager");async function YI(){if(no)return no;ai(ls)&&await Gl();let{domain:e}=Qa(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ai(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return no=ls.jetstream({domain:e}),no}a(YI,"getJetStream");async function Gt(){let e=ls||await Gl(),t=so||await Wa(),r=no||await YI();return{connection:e,jsm:t,js:r}}a(Gt,"getNATSReferences");async function vz(e){let t=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await FI.getClusterUser(),n=await Sm(t,r,s),i=mm(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=VI.decode(_.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Bl.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(vz,"getServerList");async function pm(e,t){let{jsm:r}=await Gt(),s=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:xI.File,retention:kI.Limits,subjects:t,discard:Nz.Old,duplicate_window:GI,max_msgs:n,max_bytes:i,max_age:s})}a(pm,"createLocalStream");async function KI(){let{jsm:e}=await Gt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(KI,"listStreams");async function Bz(e){let{jsm:t}=await Gt();await t.streams.delete(e)}a(Bz,"deleteLocalStream");async function Hz(e){let{connection:t}=await Gt(),r=[],s=mm(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(VI.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(Hz,"listRemoteStreams");async function qz(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=fm(),o={durable_name:i,ack_policy:ql.Explicit};t&&(o.deliver_policy=Fl.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let l=[];for await(let _ of u){let d=hm(_.data),E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};if(_.headers&&(E.origin=_.headers.get(_e.MSG_HEADERS.ORIGIN),E.nats_msg_id=_.headers.get(_e.MSG_HEADERS.NATS_MSG_ID)),l.push(E),_.ack(),_.info.pending===0)break}return await c.delete(),l}a(qz,"viewStream");async function*Fz(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=fm(),o={durable_name:i,ack_policy:ql.Explicit};t&&(o.deliver_policy=Fl.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let l of u){let _=hm(l.data);_[0]||(_=[_]);for(let d of _){let E={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(E.origin=l.headers.get(_e.MSG_HEADERS.ORIGIN),E.nats_msg_id=l.headers.get(_e.MSG_HEADERS.NATS_MSG_ID)),yield E}if(l.ack(),l.info.pending===0)break}await c.delete()}a(Fz,"viewStreamIterator");async function Gz(e,t,r,s){Nr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=WI(s,r);let{js:n}=await Gt(),i=await za(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:qI.encode(s);try{Nr.trace(`publishToStream publishing to subject: ${o}`),Cz(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return XI(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Nr.trace(`publishToStream creating stream: ${t}`);let _=o.split(".");_[2]="*",await pm(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(Gz,"publishToStream");function WI(e,t){t===void 0&&(t=yz());let r=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(_e.MSG_HEADERS.NATS_MSG_ID)){let s=Bl.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${fm()}`;t.append(_e.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(_e.MSG_HEADERS.ORIGIN)||t.append(_e.MSG_HEADERS.ORIGIN,r),t}a(WI,"addNatsMsgHeader");function Qa(e){e=e.toLowerCase();let t=Ka.join(Tt.get(Te.CONFIG_PARAMS.ROOTPATH),Uz);if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ai(dm)&&(dm={port:Va.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Va.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.HUB,config_file:_e.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ka.join(t,_e.PID_FILES.HUB),hdb_nats_path:t}),dm;if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ai(_m)&&(_m={port:Va.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Va.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,config_file:_e.NATS_CONFIG_FILES.LEAF_SERVER,domain:Va.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,pid_file_path:Ka.join(t,_e.PID_FILES.LEAF),hdb_nats_path:t}),_m;Nr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Qa,"getServerConfig");async function xz(e){let{jsm:t}=await Gt(),r=await za();try{await t.streams.add({name:e.stream_name,storage:xI.File,retention:kI.Limits,duplicate_window:GI,max_age:gz,max_bytes:Az,subjects:[`${_e.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:ql.Explicit,durable_name:e.durable_name,deliver_policy:Fl.All,max_ack_pending:1e4});else throw s}}a(xz,"createWorkQueueStream");async function kz(){let{jsm:e}=await Gt();(await e.consumers.info(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Nr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name),Nr.info("Adding pull consumer to ingest stream"),await e.consumers.add(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:ql.Explicit,durable_name:_e.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Fl.All,max_ack_pending:1e4}))}a(kz,"updateIngestStreamConsumer");async function QI(e,t,r){let{jsm:s}=await Gt(),n=await s.streams.info(t),i=zI(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=Hl.createNatsTableStreamName(c,u),_=i===e,d,E,f=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,S=n.config.sources.length;p<S;p++)if(d=n.config.sources[p],E=p,_&&d.name===l||!_&&d.name===l&&d.external&&d.external.api===`$JS.${e}.API`){f=!0;break}if(f===!0){if(d.opt_start_time===o)return;n.config.sources.splice(E,1),await s.streams.update(t,n.config)}let h={name:l,opt_start_time:o,filter_subject:`${_e.SUBJECT_PREFIXES.TXN}.>`};_||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(QI,"addSourceToWorkStream");function zI(e){return e.split(".")[1]}a(zI,"extractServerName");async function JI(e,t,r){let{schema:s,table:n}=r,i=Hl.createNatsTableStreamName(s,n),{jsm:o}=await Gt(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let u=c.config.sources.length,l;for(;u--;)if(l=c.config.sources[u],l.name===i&&l.external.api===`$JS.${e}.API`){c.config.sources.splice(u,1);break}await o.streams.update(t,c.config)}a(JI,"removeSourceFromWorkStream");async function Vz(e,t,r=2e4,s=mm()){if(!Bl.isObject(t))throw new Error("data param must be an object");let n=qI.encode(t),{connection:i}=await Gt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return hm(c.data)}a(Vz,"request");function Tm(e){return new Promise(async(t,r)=>{let s=pz(Em,["--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(Tm,"reloadNATS");async function $z(){let{pid_file_path:e}=Qa(Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Tm(e)}a($z,"reloadNATSHub");async function Yz(){let{pid_file_path:e}=Qa(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Tm(e)}a(Yz,"reloadNATSLeaf");function Kz(e,t,r){let s;switch(e.code){case BI.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case BI.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(Kz,"requestErrorHandler");async function Wz(e,t){let r=t+_e.SERVER_SUFFIX.LEAF;await XI(async()=>{e.subscribe===!0?await QI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await JI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(Wz,"updateWorkStream");function XI(e){return Tz.writeTransaction(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(XI,"exclusiveLock");async function ZI(e,t){let r=Hl.createNatsTableStreamName(e,t),s=await za(),n=Xz(e,t,s);await pm(r,[n])}a(ZI,"createLocalTableStream");async function Qz(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await ZI(s,n)}}a(Qz,"createTableStreams");async function jI(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Hl.createNatsTableStreamName(e,t),{jsm:s}=await Gt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Nr.warn(r);else throw r}}a(jI,"purgeTableStream");async function zz(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await jI(e,t[r])}a(zz,"purgeSchemaTableStreams");async function Jz(e){return(await Wa()).streams.info(e)}a(Jz,"getStreamInfo");function Xz(e,t,r){return`${_e.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Xz,"createSubjectName");async function za(){if($a)return $a;if($a=(await Wa())?.nc?.info?.server_name,$a===void 0)throw new Error("Unable to get jetstream manager server name");return $a}a(za,"getJsmServerName");async function Zz(){let e=await Wa(),t=await za(),r=await KI();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=jz(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Nr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else if(n.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Nr.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(".");Nr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}a(Zz,"updateLocalStreams");function jz(e){let{config:t}=e,r=!1;if(t.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(jz,"updateStreamLimits")});var Ja=m((Uce,nw)=>{"use strict";var io=ku(),oo=RI(),eJ=F(),tJ=require("uuid").v4,Cce=require("clone"),kl=Fs(),ao=R(),rJ=require("util"),An=Hr(),{handleHDBError:xt,hdb_errors:sJ}=Q(),{HDB_ERROR_MSGS:xl,HTTP_STATUS_CODES:kt}=sJ,{SchemaEventMsg:Vl}=Fr(),tw=He(),{getDatabases:nJ}=(de(),re(Ne)),{transformReq:co}=G();nw.exports={createSchema:iJ,createSchemaStructure:rw,createTable:oJ,createTableStructure:sw,createAttribute:_J,dropSchema:aJ,dropTable:cJ,dropAttribute:uJ,getBackup:dJ};async function iJ(e){let t=await rw(e);return kl.signalSchemaChange(new Vl(process.pid,e.operation,e.schema)),t}a(iJ,"createSchema");async function rw(e){let t=io.schema_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(co(e),!await oo.checkSchemaExists(e.schema))throw xt(new Error,xl.SCHEMA_EXISTS_ERR(e.schema),kt.BAD_REQUEST,ao.LOG_LEVELS.ERROR,xl.SCHEMA_EXISTS_ERR(e.schema),!0);return await An.createSchema(e),`database '${e.schema}' successfully created`}a(rw,"createSchemaStructure");async function oJ(e){return co(e),await sw(e)}a(oJ,"createTable");async function sw(e){let t=io.create_table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(io.validateTableResidence(e.residence),!await oo.checkSchemaTableExists(e.schema,e.table))throw xt(new Error,xl.TABLE_EXISTS_ERR(e.schema,e.table),kt.BAD_REQUEST,ao.LOG_LEVELS.ERROR,xl.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:tJ(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await An.createTable(s,e);else throw xt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",kt.BAD_REQUEST);else await An.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(sw,"createTableStructure");async function aJ(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=io.schema_object(e),s=t??r;if(s)throw xt(s,s.message,kt.BAD_REQUEST,void 0,void 0,!0);co(e);let n=await oo.checkSchemaExists(e.schema);if(n)throw xt(new Error,n,kt.NOT_FOUND,ao.LOG_LEVELS.ERROR,n,!0);let i=await oo.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await An.dropSchema(e),kl.signalSchemaChange(new Vl(process.pid,e.operation,e.schema)),await tw.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(aJ,"dropSchema");async function cJ(e){let t=io.table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);co(e);let r=await oo.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,ao.LOG_LEVELS.ERROR,r,!0);return await An.dropTable(e),await tw.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(cJ,"dropTable");async function uJ(e){let t=io.attribute_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);co(e);let r=await oo.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,ao.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw xt(new Error,"You cannot drop a hash attribute",kt.BAD_REQUEST,void 0,void 0,!0);if(ao.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw xt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,kt.BAD_REQUEST,void 0,void 0,!0);try{return await An.dropAttribute(e),lJ(e),kl.signalSchemaChange(new Vl(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw eJ.error(`Got an error deleting attribute ${rJ.inspect(e)}.`),s}}a(uJ,"dropAttribute");function lJ(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(lJ,"dropAttributeFromGlobal");async function _J(e){co(e);let t=nJ()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw xt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,kt.BAD_REQUEST,void 0,void 0,!0);return await An.createAttribute(e),kl.signalSchemaChange(new Vl(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(_J,"createAttribute");function dJ(e){return An.getBackup(e)}a(dJ,"getBackup")});var ow=m((Lce,iw)=>{"use strict";var{OPERATIONS_ENUM:EJ}=R(),Rm=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=EJ.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};iw.exports=Rm});var gm=m((vce,_w)=>{"use strict";var fJ=Hr(),Pce=ow(),$l=G(),Yl=R(),hJ=W(),{handleHDBError:aw,hdb_errors:mJ}=Q(),{HDB_ERROR_MSGS:cw,HTTP_STATUS_CODES:uw}=mJ,SJ=Object.values(Yl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),lw="To use this operation audit log must be enabled in harperdb-config.yaml";_w.exports=pJ;async function pJ(e){if($l.isEmpty(e.schema))throw new Error(cw.SCHEMA_REQUIRED_ERR);if($l.isEmpty(e.table))throw new Error(cw.TABLE_REQUIRED_ERR);if(!hJ.get(Yl.CONFIG_PARAMS.LOGGING_AUDITLOG))throw aw(new Error,lw,uw.BAD_REQUEST,Yl.LOG_LEVELS.ERROR,lw,!0);let t=$l.checkSchemaTableExist(e.schema,e.table);if(t)throw aw(new Error,t,uw.NOT_FOUND,Yl.LOG_LEVELS.ERROR,t,!0);if(!$l.isEmpty(e.search_type)&&SJ.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await fJ.readAuditLog(e)}a(pJ,"readAuditLog")});var Ew=m((Hce,dw)=>{"use strict";var{OPERATIONS_ENUM:TJ}=R(),Am=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=TJ.GET_BACKUP,this.schema=t,this.table=r}};dw.exports=Am});var mw=m((xce,hw)=>{"use strict";var RJ=Hr(),Fce=Ew(),Om=G(),gJ=R(),Gce=W(),{handleHDBError:AJ,hdb_errors:OJ}=Q(),{HDB_ERROR_MSGS:fw,HTTP_STATUS_CODES:NJ}=OJ;hw.exports=bJ;async function bJ(e){if(Om.isEmpty(e.schema))throw new Error(fw.SCHEMA_REQUIRED_ERR);if(Om.isEmpty(e.table))throw new Error(fw.TABLE_REQUIRED_ERR);let t=Om.checkSchemaTableExist(e.schema,e.table);if(t)throw AJ(new Error,t,NJ.NOT_FOUND,gJ.LOG_LEVELS.ERROR,t,!0);return await RJ.getBackup(read_audit_log_object)}a(bJ,"getBackup")});var Aw=m((Vce,gw)=>{var On=require("validate.js"),pw=Ue(),uo=R(),{handleHDBError:yJ,hdb_errors:IJ}=Q(),{HDB_ERROR_MSGS:Ye,HTTP_STATUS_CODES:wJ}=IJ,Nm=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),CJ={STRUCTURE_USER:"structure_user"},Sw=Object.values(uo.ROLE_TYPES_ENUM),UJ="attribute_permissions",DJ="attribute_name",{PERMS_CRUD_ENUM:lo}=uo,LJ=[UJ,...Object.values(lo)],Tw=[lo.READ,lo.INSERT,lo.UPDATE],MJ=[DJ,...Tw];function PJ(e){let t=Nm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Rw(e,t)}a(PJ,"addRoleValidation");function vJ(e){let t=Nm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Rw(e,t)}a(vJ,"alterRoleValidation");function BJ(e){let t=Nm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,pw.validateObject(e,t)}a(BJ,"dropRoleValidation");var HJ=["operation","role","id","permission","hdb_user","hdb_auth_header"];function Rw(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)HJ.includes(s[o])||n.push(s[o]);n.length>0&&Je(Ye.INVALID_ROLE_JSON_KEYS(n),r);let i=pw.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Je(o,r)}),e.permission){let o=qJ(e);o&&Je(o,r),Sw.forEach(c=>{e.permission[c]&&!On.isBoolean(e.permission[c])&&Je(Ye.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Sw.indexOf(o)<0){if(o===CJ.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]||Je(Ye.SCHEMA_NOT_FOUND(d),r)}continue}Je(Ye.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Je(Ye.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]){Je(Ye.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{LJ.includes(_)||Je(Ye.INVALID_PERM_KEY(_),r,o,u)}),Object.values(lo).forEach(_=>{On.isDefined(l[_])?On.isBoolean(l[_])||Je(Ye.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):Je(Ye.TABLE_PERM_MISSING(_),r,o,u)}),On.isDefined(l.attribute_permissions)){if(!On.isArray(l.attribute_permissions)){Je(Ye.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{Je(Ye.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(l.attribute_permissions){let _=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in l.attribute_permissions){let f=l.attribute_permissions[E];if(Object.keys(f).forEach(p=>{!MJ.includes(p)&&p!==lo.DELETE&&Je(Ye.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!On.isDefined(f.attribute_name)){Je(Ye.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){Je(Ye.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}Tw.forEach(p=>{On.isDefined(f[p])?On.isBoolean(f[p])||Je(Ye.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):Je(Ye.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(l.read===!1&&d.read===!0||l.insert===!1&&d.insert===!0||l.update===!1&&d.update===!0){let E=`${o}.${u}`;Je(Ye.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return FJ(r)}a(Rw,"customValidate");gw.exports={addRoleValidation:PJ,alterRoleValidation:vJ,dropRoleValidation:BJ};function qJ(e){let{operation:t,permission:r}=e;if(t===uo.OPERATIONS_ENUM.ADD_ROLE||t===uo.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return Ye.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?uo.ROLE_TYPES_ENUM.SUPER_USER:uo.ROLE_TYPES_ENUM.CLUSTER_USER;return Ye.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(qJ,"validateNoSUPerms");function FJ(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Ye.ROLE_PERMS_ERROR,...e};return yJ(new Error,s,wJ.BAD_REQUEST)}else return null}a(FJ,"generateRolePermResponse");function Je(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(Je,"addPermError")});var Um=m((Yce,yw)=>{"use strict";var Ow=ir(),Nw=Rr(),GJ=hn(),ym=Aw(),Im=Fs(),xJ=require("uuid").v4,kJ=require("util"),Kl=R(),VJ=G(),wm=Nw.searchByValue,$J=Nw.searchByHash,YJ=kJ.promisify(GJ.delete),KJ=os(),WJ=Zi(),{hdb_errors:QJ,handleHDBError:_o}=Q(),{HDB_ERROR_MSGS:bw,HTTP_STATUS_CODES:Wl}=QJ,{UserEventMsg:Cm}=Fr();yw.exports={addRole:zJ,alterRole:JJ,dropRole:XJ,listRoles:ZJ};function bm(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(bm,"scrubRoleDetails");async function zJ(e){let t=ym.addRoleValidation(e);if(t)throw t;e=bm(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 wm(r)||[])}catch(i){throw _o(i)}if(s&&s.length>0)throw _o(new Error,bw.ROLE_ALREADY_EXISTS(e.role),Wl.CONFLICT,void 0,void 0,!0);e.id||(e.id=xJ());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Ow.insert(n),Im.signalUserChange(new Cm(process.pid)),e=bm(e),e}a(zJ,"addRole");async function JJ(e){let t=ym.alterRoleValidation(e);if(t)throw t;e=bm(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await Ow.update(r)}catch(n){throw _o(n)}if(s&&s?.message==="updated 0 of 1 records")throw _o(new Error,"Invalid role id",Wl.BAD_REQUEST,void 0,void 0,!0);return await Im.signalUserChange(new Cm(process.pid)),e}a(JJ,"alterRole");async function XJ(e){let t=ym.dropRoleValidation(e);if(t)throw _o(new Error,t,Wl.BAD_REQUEST,void 0,void 0,!0);let r=new WJ(Kl.SYSTEM_SCHEMA_NAME,Kl.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await $J(r));if(s.length===0)throw _o(new Error,bw.ROLE_NOT_FOUND,Wl.NOT_FOUND,void 0,void 0,!0);let n=new KJ(Kl.SYSTEM_SCHEMA_NAME,Kl.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await wm(n)),o=!1;if(VJ.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 YJ(c),Im.signalUserChange(new Cm(process.pid)),`${s[0].role} successfully deleted`}a(XJ,"dropRole");async function ZJ(){return wm({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(ZJ,"listRoles")});var Uw=m((Wce,Cw)=>{"use strict";var jJ=W(),Nn=require("joi"),e2=Ue(),Iw=require("moment"),t2=require("fs-extra"),Dm=require("path"),r2=require("lodash"),Xa=R(),{LOG_LEVELS:ci}=R(),s2="YYYY-MM-DD hh:mm:ss",n2=Dm.resolve(__dirname,"../logs");Cw.exports=function(e){return e2.validateBySchema(e,i2)};var i2=Nn.object({from:Nn.custom(ww),until:Nn.custom(ww),level:Nn.valid(ci.NOTIFY,ci.FATAL,ci.ERROR,ci.WARN,ci.INFO,ci.DEBUG,ci.TRACE),order:Nn.valid("asc","desc"),limit:Nn.number().min(1),start:Nn.number().min(0),log_name:Nn.custom(o2)});function ww(e,t){if(Iw(e,Iw.ISO_8601).format(s2)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(ww,"validateDatetime");function o2(e,t){if(r2.invert(Xa.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=jJ.get(Xa.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Xa.LOG_NAMES.HDB:e,i=n===Xa.LOG_NAMES.INSTALL?Dm.join(n2,Xa.LOG_NAMES.INSTALL):Dm.join(s,n);return t2.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(o2,"validateReadLogPath")});var Mm=m((zce,Dw)=>{"use strict";var Ql=R(),a2=F(),c2=W(),u2=Uw(),Lm=require("path"),l2=require("fs-extra"),{once:_2}=require("events"),{handleHDBError:d2,hdb_errors:E2}=Q(),{PACKAGE_ROOT:f2}=R(),h2=Lm.join(f2,"logs"),m2=1e3;Dw.exports=S2;async function S2(e){let t=u2(e);if(t)throw d2(t,t.message,E2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=c2.get(Ql.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Ql.LOG_NAMES.HDB:e.log_name,n=s===Ql.LOG_NAMES.INSTALL?Lm.join(h2,Ql.LOG_NAMES.INSTALL):Lm.join(r,s),i=l2.createReadStream(n);i.on("error",A=>{a2.error(A)});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?m2:e.limit,f=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,p=h+E,S=0,N=[],O="",H;i.on("data",A=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;A=O+A;let x=0,k;for(;(k=w.exec(A))&&!i.destroyed;){H&&(H.message=A.slice(x,k.index),Y(H));let[X,ge,ut]=k,Mi=ut.split("] ["),$o=Mi[0],xn=Mi[1];Mi.splice(0,2),H={timestamp:ge,thread:$o,level:xn,tags:Mi,message:""},x=k.index+X.length}O=A.slice(x)}),i.on("end",A=>{i.destroyed||H&&(H.message=O.trim(),Y(H))}),i.resume();function Y(A){let w,x,k;switch(!0){case(o&&u&&_):w=new Date(A.timestamp),x=new Date(l),k=new Date(d),A.level===c&&w>=x&&w<=k&&S<h?S++:A.level===c&&w>=x&&w<=k&&(bn(A,f,N),S++,S===p&&i.destroy());break;case(o&&u):w=new Date(A.timestamp),x=new Date(l),A.level===c&&w>=x&&S<h?S++:A.level===c&&w>=x&&(bn(A,f,N),S++,S===p&&i.destroy());break;case(o&&_):w=new Date(A.timestamp),k=new Date(d),A.level===c&&w<=k&&S<h?S++:A.level===c&&w<=k&&(bn(A,f,N),S++,S===p&&i.destroy());break;case(u&&_):w=new Date(A.timestamp),x=new Date(l),k=new Date(d),w>=x&&w<=k&&S<h?S++:w>=x&&w<=k&&(bn(A,f,N),S++,S===p&&i.destroy());break;case o:A.level===c&&S<h?S++:A.level===c&&(bn(A,f,N),S++,S===p&&i.destroy());break;case u:w=new Date(A.timestamp),x=new Date(l),w>=x&&S<h?S++:w>=x&&S>=h&&(bn(A,f,N),S++,S===p&&i.destroy());break;case _:w=new Date(A.timestamp),k=new Date(d),w<=k&&S<h?S++:w<=k&&S>=h&&(bn(A,f,N),S++,S===p&&i.destroy());break;default:S<h?S++:(bn(A,f,N),S++,S===p&&i.destroy())}}return a(Y,"onLogMessage"),await _2(i,"close"),N}a(S2,"readLog");function bn(e,t,r){t==="desc"?p2(e,r):t==="asc"?T2(e,r):r.push(e)}a(bn,"pushLineToResult");function p2(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(p2,"insertDescending");function T2(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(T2,"insertAscending")});var Jl=m((eue,vw)=>{"use strict";var Pm=require("joi"),{string:zl,boolean:Lw,date:R2}=Pm.types(),g2=Ue(),{validateSchemaExists:Xce,validateTableExists:Zce,validateSchemaName:jce}=rs(),A2=R(),O2=be(),Mw=W();Mw.initSync();var N2=zl.invalid(Mw.get(A2.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(O2.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(),Pw={operation:zl.valid("add_node","update_node"),node_name:N2,subscriptions:Pm.array().items({table:zl.optional(),schema:zl.required(),subscribe:Lw.required(),publish:Lw.required().custom(y2),start_time:R2.iso()}).min(1).required()};function b2(e){return g2.validateBySchema(e,Pm.object(Pw))}a(b2,"addUpdateNodeValidator");function y2(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(y2,"checkForFalsy");vw.exports={addUpdateNodeValidator:b2,validation_schema:Pw}});var Hw=m((rue,Bw)=>{var I2=Ue(),w2={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Bw.exports=function(e){return I2.validateObject(e,w2)}});var Xl=m((sue,qw)=>{"use strict";var C2=R().OPERATIONS_ENUM,vm=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=C2.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};qw.exports=vm});var Gw=m((iue,Fw)=>{"use strict";var U2={OPERATION:"operation",REFRESH:"refresh"},Bm=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Hm=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};Fw.exports={JWTTokens:Bm,TOKEN_TYPE_ENUM:U2,JWTRSAKeys:Hm}});var ec=m((aue,$w)=>{"use strict";var ja=require("jsonwebtoken"),qm=require("fs-extra"),Fm=G(),br=R(),{handleHDBError:Vt,hdb_errors:D2}=Q(),{HTTP_STATUS_CODES:$t,AUTHENTICATION_ERROR_MSGS:Yt}=D2,Za=F(),xw=tl(),km=Or(),L2=ir().update,M2=Xl(),P2=Fs(),{UserEventMsg:v2}=Fr(),yn=W();yn.initSync();var Gm=require("path"),{JWTTokens:B2,JWTRSAKeys:H2,TOKEN_TYPE_ENUM:Zl}=Gw(),q2=yn.get(br.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?yn.get(br.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",F2=yn.get(br.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?yn.get(br.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",jl="RS256",xm;$w.exports={createTokens:G2,validateOperationToken:k2,refreshOperationToken:x2,validateRefreshToken:Vw};async function G2(e){if(Fm.isEmpty(e)||typeof e!="object")throw Vt(new Error,Yt.INVALID_AUTH_OBJECT,$t.BAD_REQUEST,void 0,void 0,!0);if(Fm.isEmpty(e.username))throw Vt(new Error,Yt.USERNAME_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);if(Fm.isEmpty(e.password))throw Vt(new Error,Yt.PASSWORD_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await km.findAndValidateUser(e.username,e.password),!t)throw Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw Za.error(E),Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}let r=await e_(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await kw(i,r.private_key,r.passphrase),c=await ja.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:F2,algorithm:jl,subject:Zl.REFRESH}),u=xw.hash(c),l=new M2(br.SYSTEM_SCHEMA_NAME,br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await L2(l)}catch(E){Za.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw Vt(new Error,Yt.REFRESH_TOKEN_SAVE_FAILED,$t.INTERNAL_SERVER_ERROR);return P2.signalUserChange(new v2(process.pid)),new B2(o,c)}a(G2,"createTokens");async function kw(e,t,r){return await ja.sign(e,{key:t,passphrase:r},{expiresIn:q2,algorithm:jl,subject:Zl.OPERATION})}a(kw,"signOperationToken");async function e_(){if(xm===void 0)try{let e=Gm.join(yn.getHdbBasePath(),br.LICENSE_KEY_DIR_NAME,br.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Gm.join(yn.getHdbBasePath(),br.LICENSE_KEY_DIR_NAME,br.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Gm.join(yn.getHdbBasePath(),br.LICENSE_KEY_DIR_NAME,br.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await qm.readFile(e)).toString(),n=(await qm.readFile(t)).toString(),i=(await qm.readFile(r)).toString();xm=new H2(i,n,s)}catch(e){throw Za.error(e),Vt(new Error,Yt.NO_ENCRYPTION_KEYS,$t.INTERNAL_SERVER_ERROR)}return xm}a(e_,"getJWTRSAKeys");async function x2(e){if(!e)throw Vt(new Error,Yt.INVALID_BODY,$t.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Vt(new Error,Yt.REFRESH_TOKEN_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);await Vw(e.refresh_token);let t=await e_(),r=await ja.decode(e.refresh_token);return{operation_token:await kw({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(x2,"refreshOperationToken");async function k2(e){try{let t=await e_(),r=await ja.verify(e,t.public_key,{algorithms:jl,subject:Zl.OPERATION});return await km.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Za.warn(t),t.name&&t.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}}a(k2,"validateOperationToken");async function Vw(e){let t;try{let r=await e_(),s=await ja.verify(e,r.public_key,{algorithms:jl,subject:Zl.REFRESH});t=await km.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Za.warn(r),r.name&&r.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}if(!xw.validate(t.refresh_token,e))throw Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED);return t}a(Vw,"validateRefreshToken")});var Vm=m((lue,Ww)=>{"use strict";var V2=Hw(),Eo=require("passport"),$2=require("passport-local").Strategy,Y2=require("passport-http").BasicStrategy,K2=require("util"),W2=Or(),Kw=K2.callbackify(W2.findAndValidateUser),uue=rr(),Q2=R(),Yw=ec();Eo.use(new $2(function(e,t,r){Kw(e,t,r)}));Eo.use(new Y2(function(e,t,r){Kw(e,t,r)}));Eo.serializeUser(function(e,t){t(null,e)});Eo.deserializeUser(function(e,t){t(null,e)});function z2(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":Eo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Q2.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Yw.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):Yw.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Eo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(z2,"authorize");function J2(e,t){let r=V2(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(J2,"checkPermissions");Ww.exports={authorize:z2,checkPermissions:J2}});var In=m((due,Qw)=>{"use strict";var $m=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Ym=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};Qw.exports={Node:$m,NodeSubscription:Ym}});var Jw=m((fue,zw)=>{"use strict";var X2=R().OPERATIONS_ENUM,Km=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=X2.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};zw.exports=Km});var tc=m((mue,Xw)=>{"use strict";var Wm=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},Qm=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}};Xw.exports={RemotePayloadObject:Wm,RemotePayloadSubscription:Qm}});var jw=m((pue,Zw)=>{"use strict";var zm=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}};Zw.exports=zm});var rC=m((Oue,tC)=>{"use strict";var Z2=jw(),Rue=ke(),eC=Ie(),j2=F(),{getSchemaPath:gue,getTransactionAuditStorePath:Aue}=Ce(),{getDatabases:e3}=(de(),re(Ne));tC.exports=t3;async function t3(e){let t=new Z2;try{let r=e3()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await eC.environmentDataSize(schema_path,e.name),o=await eC.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){j2.warn(`unable to stat table dbi due to ${r}`)}return t}a(t3,"lmdbGetTableSize")});var nC=m((bue,sC)=>{"use strict";var Jm=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}};sC.exports=Jm});var fo=m((Cue,cC)=>{"use strict";var r3=require("fs-extra"),s3=require("path"),Ut=require("systeminformation"),wn=F(),n3=He(),Xm=be(),r_=R(),i3=rC(),aC=dn(),{getThreadInfo:iC}=Ve(),aS=W();aS.initSync();var o3=nC(),{openEnvironment:Iue}=Ie(),{getSchemaPath:wue}=Ce(),{database:a3}=(de(),re(Ne)),t_;cC.exports={getHDBProcessInfo:tS,getNetworkInfo:sS,getDiskInfo:rS,getMemoryInfo:eS,getCPUInfo:jm,getTimeInfo:Zm,getSystemInformation:nS,systemInformation:c3,getTableSize:iS,getMetrics:oS};function Zm(){return Ut.time()}a(Zm,"getTimeInfo");async function jm(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:l,..._}=await Ut.cpu();_.cpu_speed=await Ut.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:N,...O}=await Ut.currentLoad();return O.cpus=[],N.forEach(H=>{let{raw_load:Y,raw_load_idle:A,raw_load_irq:w,raw_load_nice:x,raw_load_system:k,raw_load_user:X,...ge}=H;O.cpus.push(ge)}),_.current_load=O,_}catch(e){return wn.error(`error in getCPUInfo: ${e}`),{}}}a(jm,"getCPUInfo");async function eS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return wn.error(`error in getMemoryInfo: ${e}`),{}}}a(eS,"getMemoryInfo");async function tS(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await r3.readFile(s3.join(aS.get(r_.CONFIG_PARAMS.ROOTPATH),r_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===r_.NODE_ERROR_CODES.ENOENT)wn.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return wn.error(`error in getHDBProcessInfo: ${t}`),e}}a(tS,"getHDBProcessInfo");async function rS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Ut.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,...l}=await Ut.fsStats();return e.read_write=l,e.size=await Ut.fsSize(),e}catch(t){return wn.error(`error in getDiskInfo: ${t}`),e}}a(rS,"getDiskInfo");async function sS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Ut.networkInterfaceDefault(),e.latency=await Ut.inetChecksite("google.com"),(await Ut.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:l,ieee8021xState:_,carrier_changes:d,...E}=s;e.interfaces.push(E)}),(await Ut.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return wn.error(`error in getNetworkInfo: ${t}`),e}}a(sS,"getNetworkInfo");async function nS(){if(t_!==void 0)return t_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Ut.osInfo();e=c;let u=await Ut.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,t_=e,t_}catch(t){return wn.error(`error in getSystemInformation: ${t}`),e}}a(nS,"getSystemInformation");async function iS(){let e=[],t=await aC.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await i3(s));return e}a(iS,"getTableSize");async function oS(){let e=await aC.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=a3({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){wn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(oS,"getMetrics");async function oC(){if(aS.get(r_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await n3.getNATSReferences(),r=await t.streams.info(Xm.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Xm.WORK_QUEUE_CONSUMER_NAMES.stream_name,Xm.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(oC,"getNatsStreamInfo");async function c3(e){let t=new o3;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await nS(),t.time=Zm(),t.cpu=await jm(),t.memory=await eS(),t.disk=await rS(),t.network=await sS(),t.harperdb_processes=await tS(),t.table_size=await iS(),t.metrics=await oS(),t.threads=await iC(),t.replication=await oC(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await nS();break;case"time":t.time=Zm();break;case"cpu":t.cpu=await jm();break;case"memory":t.memory=await eS();break;case"disk":t.disk=await rS();break;case"network":t.network=await sS();break;case"harperdb_processes":t.harperdb_processes=await tS();break;case"table_size":t.table_size=await iS();break;case"database_metrics":case"metrics":t.metrics=await oS();break;case"threads":t.threads=await iC();break;case"replication":t.replication=await oC();break;default:break}return t}a(c3,"systemInformation")});var cS=m((Mue,uC)=>{"use strict";var Due=require("fs-extra"),Lue=F();uC.exports={version:u3,printVersion:_3,nodeVersion:l3};var Cn=xa();function u3(){if(Cn)return Cn.version}a(u3,"version");function l3(){if(Cn&&Cn.engines&&Cn.engines["preferred-node"])return Cn.engines["preferred-node"]}a(l3,"nodeVersion");function _3(){Cn&&console.log(`HarperDB Version ${Cn.version}`)}a(_3,"printVersion")});var yr=m((Hue,EC)=>{"use strict";var d3=ir(),uS=G(),E3=require("util"),ui=R(),lC=W();lC.initSync();var f3=Vm(),_C=Rr(),{Node:vue,NodeSubscription:Bue}=In(),h3=Zi(),m3=Jw(),{RemotePayloadObject:S3,RemotePayloadSubscription:p3}=tc(),{handleHDBError:T3,hdb_errors:R3}=Q(),{HTTP_STATUS_CODES:g3,HDB_ERROR_MSGS:A3}=R3,O3=os(),N3=fo(),b3=cS(),{getDatabases:y3}=(de(),re(Ne)),I3=E3.promisify(f3.authorize),w3=_C.searchByHash,C3=_C.searchByValue;EC.exports={authHeaderToUser:U3,isEmpty:D3,getNodeRecord:L3,upsertNodeRecord:M3,buildNodePayloads:P3,checkClusteringEnabled:v3,getAllNodeRecords:B3,getSystemInfo:H3,reverseSubscription:dC};async function U3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await I3(t,null),e}a(U3,"authHeaderToUser");function D3(e){return e==null}a(D3,"isEmpty");async function L3(e){let t=new h3(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return w3(t)}a(L3,"getNodeRecord");async function M3(e){let t=new m3(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return d3.upsert(t)}a(M3,"upsertNodeRecord");function dC(e){if(uS.isEmpty(e.subscribe)||uS.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(dC,"reverseSubscription");function P3(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,_=uS.getTableHashAttribute(u,l),{subscribe:d,publish:E}=dC(c),f=y3()[u]?.[l],h=new p3(u,l,_,E,d,c.start_time,f.schemaDefined&&f.attributes);n.push(h)}return new S3(r,t,n,s)}a(P3,"buildNodePayloads");function v3(){if(!lC.get(ui.CONFIG_PARAMS.CLUSTERING_ENABLED))throw T3(new Error,A3.CLUSTERING_NOT_ENABLED,g3.BAD_REQUEST,void 0,void 0,!0)}a(v3,"checkClusteringEnabled");async function B3(){let e=new O3(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await C3(e))}a(B3,"getAllNodeRecords");async function H3(){let e=await N3.getSystemInformation();return{hdb_version:b3.version(),node_version:e.node_version,platform:e.platform}}a(H3,"getSystemInfo")});var lS=m((Fue,gC)=>{"use strict";var s_=He(),fC=G(),hC=be(),mC=R(),n_=F(),SC=Ja(),q3=Al(),{RemotePayloadObject:F3}=tc(),{handleHDBError:pC,hdb_errors:G3}=Q(),{HTTP_STATUS_CODES:TC}=G3,{NodeSubscription:RC}=In();gC.exports=x3;async function x3(e,t){let r;try{r=await s_.request(`${t}.${hC.REQUEST_SUFFIX}`,new F3(mC.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),n_.trace("Response from remote describe all request:",r)}catch(o){n_.error(`addNode received error from describe all request to remote node: ${o}`);let c=s_.requestErrorHandler(o,"add_node",t);throw pC(new Error,c,TC.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===hC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw pC(new Error,o,TC.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===mC.SYSTEM_SCHEMA_NAME){await s_.createLocalTableStream(c,u);let h=new RC(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=fC.doesSchemaExist(c),_=s[c]!==void 0,d=u?fC.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(n_.trace(`addNode creating schema: ${c}`),await SC.createSchema({operation:"create_schema",schema:c})),!d&&E){n_.trace(`addNode creating table: ${u} in schema: ${c}`);let h=new q3(c,u,s[c][u].hash_attribute);h.attributes=s[c][u].attributes,await SC.createTable(h)}await s_.createLocalTableStream(c,u);let f=new RC(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(x3,"reviewSubscriptions")});var a_=m((xue,NC)=>{"use strict";var{handleHDBError:i_,hdb_errors:k3}=Q(),{HTTP_STATUS_CODES:o_}=k3,{addUpdateNodeValidator:V3}=Jl(),rc=F(),OC=R(),AC=be(),$3=G(),_S=He(),sc=yr(),Y3=W(),K3=lS(),{Node:W3,NodeSubscription:Q3}=In(),{broadcast:z3}=Ve(),J3="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",X3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Z3=Y3.get(OC.CONFIG_PARAMS.CLUSTERING_NODENAME);NC.exports=j3;async function j3(e,t=!1){rc.trace("addNode called with:",e),sc.checkClusteringEnabled();let r=V3(e);if(r)throw i_(r,r.message,o_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await sc.getNodeRecord(s);if(!$3.isEmptyOrZeroLength(d))throw i_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,o_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await K3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=J3,o;let c=sc.buildNodePayloads(n,Z3,OC.OPERATIONS_ENUM.ADD_NODE,await sc.getSystemInfo());rc.trace("addNode sending remote payload:",c);let u;try{u=await _S.request(`${s}.${AC.REQUEST_SUFFIX}`,c)}catch(d){rc.error(`addNode received error from request: ${d}`);let E=_S.requestErrorHandler(d,"add_node",s);throw i_(new Error,E,o_.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===AC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw i_(new Error,d,o_.INTERNAL_SERVER_ERROR,"error",d)}rc.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];rc.trace("Add node updating work stream for node:",s,"subscriptions:",f),await _S.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new Q3(f.schema,f.table,f.publish,f.subscribe))}let _=new W3(s,l,u.system_info);return await sc.upsertNodeRecord(_),z3({type:"nats_update"}),i.length>0?o.message=X3:o.message=`Successfully added '${s}' to manifest`,o}a(j3,"addNode")});var ES=m((Vue,IC)=>{"use strict";var{handleHDBError:c_,hdb_errors:eX}=Q(),{HTTP_STATUS_CODES:u_}=eX,{addUpdateNodeValidator:tX}=Jl(),nc=F(),yC=R(),bC=be(),rX=G(),dS=He(),ic=yr(),sX=W(),{cloneDeep:nX}=require("lodash"),iX=lS(),{NodeSubscription:oX}=In(),{broadcast:aX}=Ve(),cX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",uX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",lX=sX.get(yC.CONFIG_PARAMS.CLUSTERING_NODENAME);IC.exports=_X;async function _X(e){nc.trace("updateNode called with:",e),ic.checkClusteringEnabled();let t=tX(e);if(t)throw c_(t,t.message,u_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=nX(await ic.getNodeRecord(r));if(rX.isEmptyOrZeroLength(s))throw c_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,u_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await iX(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=cX,o;let c=ic.buildNodePayloads(n,lX,yC.OPERATIONS_ENUM.UPDATE_NODE,await ic.getSystemInfo());nc.trace("updateNode sending remote payload:",c);let u;try{u=await dS.request(`${r}.${bC.REQUEST_SUFFIX}`,c)}catch(l){nc.error(`updateNode received error from request: ${l}`);let _=dS.requestErrorHandler(l,"update_node",r);throw c_(new Error,_,u_.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===bC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw c_(new Error,l,u_.INTERNAL_SERVER_ERROR,"error",l)}nc.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];nc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await dS.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await dX(s[0],n,u.system_info),i.length>0?o.message=uX:o.message=`Successfully updated '${r}'`,o}a(_X,"updateNode");async function dX(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 oX(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await ic.upsertNodeRecord(s),aX({type:"nats_update"})}a(dX,"updateNodeTable")});var LC=m((Yue,DC)=>{"use strict";var UC=require("joi"),{string:wC}=UC.types(),EX=Ue(),CC=R(),fX=W(),hX=be();DC.exports=mX;function mX(e){let t=wC.invalid(fX.get(CC.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(hX.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=UC.object({operation:wC.valid(CC.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return EX.validateBySchema(e,r)}a(mX,"removeNodeValidator")});var __=m((Wue,qC)=>{"use strict";var{handleHDBError:MC,hdb_errors:SX}=Q(),{HTTP_STATUS_CODES:PC}=SX,pX=LC(),oc=F(),vC=yr(),TX=G(),l_=R(),BC=be(),HC=He(),RX=W(),{RemotePayloadObject:gX}=tc(),{NodeSubscription:AX}=In(),OX=ji(),NX=hn(),{broadcast:bX}=Ve(),yX=RX.get(l_.CONFIG_PARAMS.CLUSTERING_NODENAME);qC.exports=IX;async function IX(e){oc.trace("removeNode called with:",e),vC.checkClusteringEnabled();let t=pX(e);if(t)throw MC(t,t.message,PC.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await vC.getNodeRecord(r);if(TX.isEmptyOrZeroLength(s))throw MC(new Error,`Node '${r}' was not found.`,PC.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new gX(l_.OPERATIONS_ENUM.REMOVE_NODE,yX,[]),i,o=!1;try{i=await HC.request(`${r}.${BC.REQUEST_SUFFIX}`,n),oc.trace("Remove node reply from remote node:",r,i)}catch(u){oc.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];oc.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new AX(_.schema,_.table,!1,!1);await HC.updateWorkStream(d,r)}let c=new OX(l_.SYSTEM_SCHEMA_NAME,l_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await NX.deleteRecord(c),bX({type:"nats_update"}),i?.status===BC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(oc.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(IX,"removeNode")});var xC=m((zue,GC)=>{"use strict";var FC=require("joi"),{string:wX,array:CX}=FC.types(),UX=Ue(),DX=Jl();GC.exports=LX;function LX(e){let t=FC.object({operation:wX.valid("configure_cluster").required(),connections:CX.items(DX.validation_schema).required()});return UX.validateBySchema(e,t)}a(LX,"configureClusterValidator")});var fS=m((Xue,KC)=>{"use strict";var MX=R(),d_=F(),PX=G(),vX=__(),BX=a_(),kC=yr(),HX=xC(),{handleHDBError:VC,hdb_errors:qX}=Q(),{HTTP_STATUS_CODES:$C}=qX,FX="Configure cluster complete.",GX="Failed to configure the cluster. Check the logs for more details.",xX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";KC.exports=kX;async function kX(e){d_.trace("configure cluster called with:",e),kC.checkClusteringEnabled();let t=HX(e);if(t)throw VC(t,t.message,$C.BAD_REQUEST,void 0,void 0,!0);let r=await kC.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(YC(vX,{operation:MX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);d_.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(YC(BX,f,f.node_name))}let c=await Promise.allSettled(i);d_.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"&&(d_.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(PX.isEmptyOrZeroLength(u))return{message:FX,connections:l};if(_)return{message:xX,failed_nodes:u,connections:l};throw VC(new Error,GX,$C.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(kX,"configureCluster");async function YC(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(YC,"functionWrapper")});var QC=m((jue,WC)=>{"use strict";var E_=require("joi"),VX=Ue(),{validateSchemaExists:$X,validateTableExists:YX,validateSchemaName:KX}=rs(),WX=E_.object({operation:E_.string().valid("purge_stream"),schema:E_.string().custom($X).custom(KX).required(),table:E_.string().custom(YX).required()});function QX(e){return VX.validateBySchema(e,WX)}a(QX,"purgeStreamValidator");WC.exports=QX});var hS=m((tle,zC)=>{"use strict";var{handleHDBError:zX,hdb_errors:JX}=Q(),{HTTP_STATUS_CODES:XX}=JX,ZX=QC(),jX=He(),e4=yr();zC.exports=t4;async function t4(e){let t=ZX(e);if(t)throw zX(t,t.message,XX.BAD_REQUEST,void 0,void 0,!0);e4.checkClusteringEnabled();let{schema:r,table:s}=e;return await jX.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(t4,"purgeStream")});var pS=m((sle,tU)=>{"use strict";var SS=yr(),r4=He(),ZC=W(),f_=R(),li=be(),s4=G(),mS=F(),{RemotePayloadObject:n4}=tc(),{ErrorCode:JC}=require("nats"),XC=ZC.get(f_.CONFIG_PARAMS.CLUSTERING_ENABLED),jC=ZC.get(f_.CONFIG_PARAMS.CLUSTERING_NODENAME);tU.exports={clusterStatus:i4,buildNodeStatus:eU};async function i4(){let e={node_name:jC,is_enabled:XC,connections:[]};if(!XC)return e;let t=await SS.getAllNodeRecords();if(s4.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(eU(t[s],e.connections));return await Promise.allSettled(r),e}a(i4,"clusterStatus");async function eU(e,t){let r=e.name,s=new n4(f_.OPERATIONS_ENUM.CLUSTER_STATUS,jC,void 0,await SS.getSystemInfo()),n,i,o=li.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await r4.request(li.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===li.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=li.CLUSTER_STATUS_STATUSES.CLOSED,mS.error(`Error getting node status from ${r} `,n))}catch(u){mS.warn(`Error getting node status from ${r}`,u),u.code===JC.NoResponders?o=li.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===JC.Timeout?o=li.CLUSTER_STATUS_STATUSES.TIMEOUT:o=li.CLUSTER_STATUS_STATUSES.CLOSED}let c=new o4(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!==f_.PRE_4_0_0_VERSION&&await SS.upsertNodeRecord(u)}catch(u){mS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(eU,"buildNodeStatus");function o4(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(o4,"NodeStatusObject")});var RS=m((ile,rU)=>{"use strict";var{handleHDBError:a4,hdb_errors:c4}=Q(),{HTTP_STATUS_CODES:u4}=c4,l4=He(),_4=yr(),TS=G(),h_=require("joi"),d4=Ue(),E4=2e3,f4=h_.object({timeout:h_.number().min(1),connected_nodes:h_.boolean(),routes:h_.boolean()});rU.exports=h4;async function h4(e){_4.checkClusteringEnabled();let t=d4.validateBySchema(e,f4);if(t)throw a4(t,t.message,u4.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||TS.autoCastBoolean(s),o=n===void 0||TS.autoCastBoolean(n),c={nodes:[]},u=await l4.getServerList(r??E4),l={};if(i)for(let _=0,d=u.length;_<d;_++){let E=u[_].statsz;E&&(l[u[_].server.name]=E.routes)}for(let _=0,d=u.length;_<d;_++){if(u[_].statsz)continue;let E=u[_].server,f=u[_].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[_].response_time};i&&(h.connected_nodes=l[E.name]?l[E.name].map(p=>p.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(p=>({host:p.split(":")[0],port:TS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(h4,"clusterNetwork")});var oU=m((ale,iU)=>{"use strict";var gS=require("joi"),sU=Ue(),{route_constraints:nU}=Wf();iU.exports={setRoutesValidator:m4,deleteRoutesValidator:S4};function m4(e){let t=gS.object({server:gS.valid("hub","leaf").required(),routes:nU.required()});return sU.validateBySchema(e,t)}a(m4,"setRoutesValidator");function S4(e){let t=gS.object({routes:nU.required()});return sU.validateBySchema(e,t)}a(S4,"deleteRoutesValidator")});var OS=m((ule,lU)=>{"use strict";var _i=Ar(),AS=G(),m_=R(),aU=oU(),{handleHDBError:cU,hdb_errors:p4}=Q(),{HTTP_STATUS_CODES:uU}=p4,T4="cluster routes successfully set",R4="cluster routes successfully deleted";lU.exports={setRoutes:g4,getRoutes:A4,deleteRoutes:O4};function g4(e){let t=aU.setRoutesValidator(e);if(t)throw cU(t,t.message,uU.BAD_REQUEST,void 0,void 0,!0);let r=_i.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let l=e.routes[c];l.port=AS.autoCast(l.port);let _=s.some(E=>E.host===l.host&&E.port===l.port),d=n.some(E=>E.host===l.host&&E.port===l.port);_||d?i.push(l):(s.push(l),o.push(l))}return e.server==="hub"?_i.updateConfigValue(m_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):_i.updateConfigValue(m_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:T4,set:o,skipped:i}}a(g4,"setRoutes");function A4(){let e=_i.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(A4,"getRoutes");function O4(e){let t=aU.deleteRoutesValidator(e);if(t)throw cU(t,t.message,uU.BAD_REQUEST,void 0,void 0,!0);let r=_i.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let l=0,_=e.routes.length;l<_;l++){let d=e.routes[l],E=!1;for(let f=0,h=s.length;f<h;f++){let p=s[f];if(d.host===p.host&&d.port===p.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=AS.isEmptyOrZeroLength(s)?null:s,_i.updateConfigValue(m_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=AS.isEmptyOrZeroLength(n)?null:n,_i.updateConfigValue(m_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:R4,deleted:i,skipped:o}}a(O4,"deleteRoutes")});var dU=m((_le,_U)=>{"use strict";var ac=require("alasql"),di=require("recursive-iterator"),$r=F(),N4=G(),cc=R(),NS=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,y4(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=>cc.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=>!cc.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][cc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=b4(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=>!cc.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new ac.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 b4(e){return e.filter(t=>t[cc.PERMS_CRUD_ENUM.READ])}a(b4,"filterReadRestrictedAttrs");function y4(e,t,r,s,n){I4(e,t,r,s,n)}a(y4,"interpretAST");function uc(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(uc,"addSchemaTableToMap");function I4(e,t,r,s,n){if(!e){$r.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof ac.yy.Insert?D4(e,t,r):e instanceof ac.yy.Select?w4(e,t,r,s,n):e instanceof ac.yy.Update?C4(e,t,r):e instanceof ac.yy.Delete?U4(e,t,r):$r.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(I4,"getRecordAttributesAST");function w4(e,t,r,s,n){if(!e){$r.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(N4.isEmptyOrZeroLength(i)){$r.error("No schema specified");return}e.from.forEach(c=>{uc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),uc(c.table,t,r,s,n)});let o=new di(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{$r.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(c.columnid)<0&&t.get(l).get(u).push(c.columnid)}if(e.where){let c=new di(e.where),u=e.from[0].tableid;for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid?l.tableid:u;if(!t.get(i).has(_))if(r.has(_))_=r.get(_);else{$r.info(`table specified as ${_} not found.`);continue}t.get(i).get(_).indexOf(l.columnid)<0&&t.get(i).get(_).push(l.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new di(c.on);for(let{node:l}of u)if(l&&l.columnid){let _=l.tableid,d=n.get(_);if(!t.get(d).has(_))if(r.has(_))_=r.get(_);else{$r.info(`table specified as ${_} not found.`);continue}t.get(d).get(_).indexOf(l.columnid)<0&&t.get(d).get(_).push(l.columnid)}}),e.order){let c=new di(e.order);for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid,_=s.has(l)?s.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{$r.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(w4,"getSelectAttributes");function C4(e,t,r){if(!e){$r.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new di(e.columns),n=e.table.databaseid;uc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&bS(e.table.tableid,n,i.columnid,t,r)}a(C4,"getUpdateAttributes");function U4(e,t,r){if(!e){$r.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new di(e.where),n=e.table.databaseid;uc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&bS(e.table.tableid,n,i.columnid,t,r)}a(U4,"getDeleteAttributes");function D4(e,t,r){if(!e){$r.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new di(e.columns),n=e.into.databaseid;uc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&bS(e.into.tableid,n,i.columnid,t,r)}a(D4,"getInsertAttributes");function bS(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(bS,"pushAttribute");_U.exports=NS});var wS=m((Ele,mU)=>{var S_=Na(),EU=require("chalk"),_r=F(),fU=require("prompt"),{promisify:L4}=require("util"),yS=R(),M4=require("fs-extra"),P4=require("path"),v4=G(),B4=cS(),hU=W();hU.initSync();var H4=require("moment"),q4=L4(fU.get),F4=P4.join(hU.getHdbBasePath(),yS.LICENSE_KEY_DIR_NAME,yS.LICENSE_FILE_NAME,yS.LICENSE_FILE_NAME);mU.exports={getFingerprint:x4,setLicense:G4,parseLicense:IS,register:k4,getRegistrationInfo:$4};async function G4(e){if(e&&e.key&&e.company){try{_r.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await IS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw _r.error(r),_r.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(G4,"setLicense");async function x4(){let e={};try{e=await S_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw _r.error(r),_r.error(t),new Error(r)}return e}a(x4,"getFingerprint");async function IS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");_r.info("Validating license input...");let r=S_.validateLicense(e,t);if(_r.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(_r.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(_r.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{_r.info("writing license to disk"),await M4.writeFile(F4,JSON.stringify({license_key:e,company:t}))}catch(s){throw _r.error("Failed to write License"),s}return"Registration successful."}a(IS,"parseLicense");async function k4(){let e=await V4();return IS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(k4,"register");async function V4(){let e=await S_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:EU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:EU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{fU.start()}catch(s){_r.error(s)}let r;try{r=await q4(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(V4,"promptForRegistration");async function $4(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await S_.getLicense()}catch(r){throw _r.error(`There was an error when searching licenses due to: ${r.message}`),r}if(v4.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=B4.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=H4.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a($4,"getRegistrationInfo")});var pU=m((hle,SU)=>{"use strict";var Y4=be(),CS=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+Y4.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"}};SU.exports=CS});var gU=m((Sle,RU)=>{"use strict";var TU=be(),US=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+TU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+TU.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"}};RU.exports=US});var OU=m((Tle,AU)=>{"use strict";var DS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};AU.exports=DS});var bU=m((gle,NU)=>{"use strict";var K4=be(),LS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+K4.SERVER_SUFFIX.ADMIN,this.password=r}};NU.exports=LS});var vS=m((Ole,wU)=>{"use strict";var lc=require("path"),g_=require("fs-extra"),W4=pU(),Q4=gU(),z4=OU(),J4=bU(),MS=Or(),ho=G(),Kt=Ar(),R_=R(),p_=be(),{CONFIG_PARAMS:Xe}=R_,dc=F(),A_=W(),yU=Ms(),PS=He(),_c="clustering",X4=1e4,IU=5;wU.exports={generateNatsConfig:Z4,removeNatsConfig:j4};async function Z4(e=!1,t=void 0){A_.initSync();let r=A_.get(Xe.ROOTPATH),s=lc.join(r,_c,p_.PID_FILES.HUB),n=lc.join(r,_c,p_.PID_FILES.LEAF),i=Kt.getConfigFromFile(Xe.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=lc.join(r,_c,p_.NATS_CONFIG_FILES.HUB_SERVER),c=lc.join(r,_c,p_.NATS_CONFIG_FILES.LEAF_SERVER),u=Kt.getConfigFromFile(Xe.CLUSTERING_TLS_CERTIFICATE),l=Kt.getConfigFromFile(Xe.CLUSTERING_TLS_PRIVATEKEY),_=Kt.getConfigFromFile(Xe.CLUSTERING_TLS_CERT_AUTH),d=Kt.getConfigFromFile(Xe.CLUSTERING_TLS_INSECURE),E=Kt.getConfigFromFile(Xe.CLUSTERING_TLS_VERIFY),f=Kt.getConfigFromFile(Xe.CLUSTERING_NODENAME),h=Kt.getConfigFromFile(Xe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await PS.checkNATSServerInstalled()||O_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await MS.listUsers(),S=Kt.getConfigFromFile(Xe.CLUSTERING_USER),N=await MS.getClusterUser();(ho.isEmpty(N)||N.active!==!0)&&O_(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await T_(Xe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await T_(Xe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await T_(Xe.CLUSTERING_HUBSERVER_NETWORK_PORT),await T_(Xe.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],H=[];for(let[ge,ut]of p.entries())ut.role.role===R_.ROLE_TYPES_ENUM.CLUSTER_USER&&ut.active&&(O.push(new J4(ut.username,yU.decrypt(ut.hash))),H.push(new z4(ut.username,yU.decrypt(ut.hash))));let Y=[],{hub_routes:A}=Kt.getClusteringRoutes();if(!ho.isEmptyOrZeroLength(A))for(let ge of A)Y.push(`tls://${N.sys_name_encoded}:${N.uri_encoded_d_hash}@${ge.host}:${ge.port}`);let w=new W4(Kt.getConfigFromFile(Xe.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,Kt.getConfigFromFile(Xe.CLUSTERING_HUBSERVER_CLUSTER_NAME),Kt.getConfigFromFile(Xe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,O,H);_==null&&(delete w.tls.ca_file,delete w.leafnodes.tls.ca_file),t=ho.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===R_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await g_.writeJson(o,w),dc.trace(`Hub server config written to ${o}`));let x=`tls://${N.sys_name_encoded}:${N.uri_encoded_d_hash}@0.0.0.0:${h}`,k=`tls://${N.uri_encoded_name}:${N.uri_encoded_d_hash}@0.0.0.0:${h}`,X=new Q4(Kt.getConfigFromFile(Xe.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[x],[k],O,H,u,l,_,d);_==null&&delete X.tls.ca_file,(t===void 0||t===R_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await g_.writeJson(c,X),dc.trace(`Leaf server config written to ${c}`))}a(Z4,"generateNatsConfig");async function T_(e){let t=A_.get(e);return ho.isEmpty(t)&&O_(`port undefined for '${e}'`),await ho.isPortTaken(t)&&O_(`'${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(T_,"isPortAvailable");function O_(e){let t=`Error generating clustering config: ${e}`;dc.error(t),console.error(t),process.exit(1)}a(O_,"generateNatsConfigError");async function j4(e){let{port:t,config_file:r}=PS.getServerConfig(e),{username:s,decrypt_hash:n}=await MS.getClusterUser(),i=0,o=500;for(;i<IU;){try{let l=await PS.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){dc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=IU)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 ho.async_set_timeout(o*i)}let c="0".repeat(X4),u=lc.join(A_.get(Xe.ROOTPATH),_c,r);await g_.writeFile(u,c),await g_.remove(u),dc.notify(e,"started.")}a(j4,"removeNatsConfig")});var PU=m((ble,MU)=>{"use strict";var dr=W(),eZ=Na(),ae=R(),Ec=be(),ks=require("path"),{PACKAGE_ROOT:b_}=R(),CU=W(),N_=G(),mo="/dev/null",tZ=ks.join(b_,"launchServiceScripts"),UU=ks.join(b_,"utility/scripts"),rZ=ks.join(UU,ae.HDB_RESTART_SCRIPT),DU=ks.resolve(b_,"dependencies",`${process.platform}-${process.arch}`,Ec.NATS_BINARY_NAME);function LU(){let t=eZ.licenseSearch().ram_allocation||ae.RAM_ALLOCATION_ENUM.DEFAULT,r=ae.MEM_SETTING_KEY+t,s={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return N_.noBootFile()&&(s[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=N_.getEnvCliRootPath()),{name:ae.PROCESS_DESCRIPTORS.HDB,script:ae.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:b_}}a(LU,"generateMainServerConfig");var sZ=9930;function nZ(){dr.initSync(!0);let e=dr.get(ae.CONFIG_PARAMS.ROOTPATH),t=ks.join(e,"clustering",Ec.NATS_CONFIG_FILES.HUB_SERVER),r=ks.join(dr.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=CU.get(ae.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Ec.LOG_LEVEL_FLAGS[dr.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==sZ?"-"+s:""),script:DU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return dr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=mo,i.error_file=mo),i}a(nZ,"generateNatsHubServerConfig");var iZ=9940;function oZ(){dr.initSync(!0);let e=dr.get(ae.CONFIG_PARAMS.ROOTPATH),t=ks.join(e,"clustering",Ec.NATS_CONFIG_FILES.LEAF_SERVER),r=ks.join(dr.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=CU.get(ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Ec.LOG_LEVEL_FLAGS[dr.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==iZ?"-"+s:""),script:DU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return dr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=mo,i.error_file=mo),i}a(oZ,"generateNatsLeafServerConfig");function aZ(){dr.initSync();let e=ks.join(dr.get(ae.CONFIG_PARAMS.LOGGING_ROOT),ae.LOG_NAMES.HDB),t={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:tZ,autorestart:!1};return dr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=mo,t.error_file=mo),t}a(aZ,"generateClusteringUpgradeV4ServiceConfig");function cZ(){let e={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.RESTART_HDB};return N_.noBootFile()&&(e[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=N_.getEnvCliRootPath()),{...{name:ae.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:UU},script:rZ}}a(cZ,"generateRestart");function uZ(){return{apps:[LU()]}}a(uZ,"generateAllServiceConfigs");MU.exports={generateAllServiceConfigs:uZ,generateMainServerConfig:LU,generateRestart:cZ,generateNatsHubServerConfig:nZ,generateNatsLeafServerConfig:oZ,generateClusteringUpgradeV4ServiceConfig:aZ}});var zU=m((Lle,QU)=>{"use strict";var Re=R(),lZ=G(),fc=vS(),hc=He(),_s=be(),Un=PU(),y_=W(),Vs=F(),_Z=yr(),{startWorker:vU,onMessageFromWorkers:dZ}=Ve(),EZ=fo(),fZ=require("util"),HU=require("child_process"),{execFile:hZ}=HU,Ile=fZ.promisify(HU.exec),wle=require("systeminformation"),fe;QU.exports={enterPM2Mode:mZ,start:Ei,stop:BS,reload:qU,restart:FU,list:HS,describe:xU,connect:$s,kill:gZ,startAllServices:AZ,startService:qS,getUniqueServicesList:kU,restartAllServices:OZ,isServiceRegistered:VU,reloadStopStart:$U,restartHdb:GU,deleteProcess:TZ,startClusteringProcesses:KU,startClusteringThreads:WU,isHdbRestartRunning:RZ,isClusteringRunning:bZ,stopClustering:NZ,reloadClustering:yZ};var{PACKAGE_ROOT:Cle}=R(),Ule=R(),{loggerWithTag:Dle}=Vs,mc=!1;dZ(e=>{e.type==="restart"&&y_.initSync(!0)});function mZ(){mc=!0}a(mZ,"enterPM2Mode");function $s(){return fe||(fe=require("pm2")),new Promise((e,t)=>{fe.connect((r,s)=>{Vs.setupConsoleLogging(),r&&t(r),e(s)})})}a($s,"connect");var Wt,SZ=10,BU;function Ei(e){if(mc)return pZ(e);let t=hZ(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Wt.indexOf(t);i>-1&&Wt.splice(i,1),!BU&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<SZ&&Ei(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=y_.get(Re.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&_s.LOG_LEVEL_HIERARCHY[i]>=_s.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===_s.LOG_LEVELS.ERR||l===_s.LOG_LEVELS.WRN?Vs.OUTPUTS.STDERR:Vs.OUTPUTS.STDOUT;Vs.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=_s.LOG_LEVELS[d]}if(_s.LOG_LEVEL_HIERARCHY[i]>=_s.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===_s.LOG_LEVELS.ERR||l===_s.LOG_LEVELS.WRN?Vs.OUTPUTS.STDERR:Vs.OUTPUTS.STDOUT;Vs.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Wt){Wt=[];let n=a(()=>{BU=!0,Wt&&(Wt.map(i=>i.kill()),process.exit(0))},"kill_children");process.on("exit",n),process.on("SIGINT",n),process.on("SIGQUIT",n),process.on("SIGTERM",n)}Wt.push(t)}a(Ei,"start");function pZ(e){return new Promise(async(t,r)=>{try{await $s()}catch(s){r(s)}fe.start(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(pZ,"startWithPM2");function BS(e){if(!mc){for(let t of Wt||[])t.name===e&&(Wt.splice(Wt.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await $s()}catch(s){r(s)}fe.stop(e,async(s,n)=>{s&&(fe.disconnect(),r(s)),fe.delete(e,(i,o)=>{i&&(fe.disconnect(),r(s)),fe.disconnect(),t(o)})})})}a(BS,"stop");function qU(e){return new Promise(async(t,r)=>{try{await $s()}catch(s){r(s)}fe.reload(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(qU,"reload");function FU(e){if(!mc)for(let t of Wt||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await $s()}catch(s){r(s)}fe.restart(e,(s,n)=>{fe.disconnect(),t(n)})})}a(FU,"restart");function TZ(e){return new Promise(async(t,r)=>{try{await $s()}catch(s){r(s)}fe.delete(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(TZ,"deleteProcess");async function GU(){await Ei(Un.generateRestart())}a(GU,"restartHdb");async function RZ(){let e=await HS();for(let t in e)if(e[t].name===Re.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(RZ,"isHdbRestartRunning");function HS(){return new Promise(async(e,t)=>{try{await $s()}catch(r){t(r)}fe.list((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(HS,"list");function xU(e){return new Promise(async(t,r)=>{try{await $s()}catch(s){r(s)}fe.describe(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(xU,"describe");function gZ(){if(!mc){for(let e of Wt||[])e.kill();Wt=[];return}return new Promise(async(e,t)=>{try{await $s()}catch(r){t(r)}fe.killDaemon((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(gZ,"kill");async function AZ(){try{await KU(),await WU(),await Ei(Un.generateAllServiceConfigs())}catch(e){throw fe.disconnect(),e}}a(AZ,"startAllServices");async function qS(e){try{let t;switch(e=e.toLowerCase(),e){case Re.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Un.generateMainServerConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Un.generateNatsIngestServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Un.generateNatsReplyServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Un.generateNatsHubServerConfig(),await Ei(t),await fc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Un.generateNatsLeafServerConfig(),await Ei(t),await fc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Un.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ei(t)}catch(t){throw fe.disconnect(),t}}a(qS,"startService");async function kU(){try{let e=await HS(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw fe.disconnect(),e}}a(kU,"getUniqueServicesList");async function OZ(e=[]){try{let t=!1,r=await kU();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Re.PROCESS_DESCRIPTORS.HDB?t=!0:await FU(o))}t&&await $U(Re.PROCESS_DESCRIPTORS.HDB)}catch(t){throw fe.disconnect(),t}}a(OZ,"restartAllServices");async function VU(e){if(Wt?.find(r=>r.name===e))return!0;let t=await EZ.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(VU,"isServiceRegistered");async function $U(e){let t=e===Re.PROCESS_DESCRIPTORS.HDB?y_.get(Re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):y_.get(Re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await xU(e),s=lZ.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await BS(e),await qS(e)):e===Re.PROCESS_DESCRIPTORS.HDB?await GU():await qU(e)}a($U,"reloadStopStart");var YU;async function KU(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];await qS(t)}}a(KU,"startClusteringProcesses");async function WU(){YU=vU(Re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await hc.createWorkQueueStream(_s.WORK_QUEUE_CONSUMER_NAMES),await hc.updateIngestStreamConsumer(),await hc.updateLocalStreams();let e=await _Z.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Re.PRE_4_0_0_VERSION){Vs.info("Starting clustering upgrade 4.0.0 process"),vU(Re.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(WU,"startClusteringThreads");async function NZ(){for(let e in Re.CLUSTERING_PROCESSES)if(e!==Re.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Re.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await YU.terminate();else{let t=Re.CLUSTERING_PROCESSES[e];await BS(t)}}a(NZ,"stopClustering");async function bZ(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];if(await VU(t)===!1)return!1}return!0}a(bZ,"isClusteringRunning");async function yZ(){await fc.generateNatsConfig(!0),await hc.reloadNATSHub(),await hc.reloadNATSLeaf(),await fc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await fc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(yZ,"reloadClustering")});var YS=m((Ple,tD)=>{"use strict";var IZ=require("minimist"),{isMainThread:xS,parentPort:ZU}=require("worker_threads"),qe=R(),{PROCESS_DESCRIPTORS_VALIDATE:Sc}=qe,ds=F(),kS=G(),I_=vS(),So=He(),FS=be(),jU=Ar(),Es=zU(),JU=fo(),wZ=gE(),{restartWorkers:w_,onMessageByType:CZ}=Ve(),{handleHDBError:UZ,hdb_errors:DZ}=Q(),{HTTP_STATUS_CODES:LZ}=DZ,C_=W();C_.initSync();var pc=`Restarting HarperDB. This may take up to ${qe.RESTART_TIMEOUT_MS/1e3} seconds.`,MZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",XU="Clustering is not enabled so cannot be restarted",PZ="Invalid service",fi,Yr;tD.exports={restart:eD,restartService:VS};xS&&CZ(qe.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?VS({service:e.workerType}):eD({operation:"restart"})});async function eD(e){Yr=Object.keys(e).length===0,fi=await Es.isServiceRegistered(qe.HDB_PROC_DESCRIPTOR);let t=IZ(process.argv);if(t.service){await VS(t);return}if(Yr&&!fi){console.error(MZ);return}if(Yr&&console.log(pc),fi){Es.enterPM2Mode(),ds.notify(pc);let r=wZ(Object.keys(qe.CONFIG_PARAM_MAP),!0);return kS.isEmptyOrZeroLength(Object.keys(r))||jU.updateConfigValue(void 0,void 0,r,!0,!0),BZ(),pc}return xS?(ds.notify(pc),await $S(),setTimeout(()=>{w_()},50)):ZU.postMessage({type:qe.ITC_EVENT_TYPES.RESTART}),pc}a(eD,"restart");async function VS(e){let{service:t}=e;if(qe.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw UZ(new Error,PZ,LZ.BAD_REQUEST,void 0,void 0,!0);if(fi=await Es.isServiceRegistered(qe.HDB_PROC_DESCRIPTOR),!xS)return ZU.postMessage({type:qe.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Sc.clustering:if(!C_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=XU;break}Yr&&console.log("Restarting clustering"),ds.notify("Restarting clustering"),await $S();break;case Sc.clustering_config:case Sc["clustering config"]:if(!C_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=XU;break}Yr&&console.log("Restarting clustering_config"),ds.notify("Restarting clustering_config"),await Es.reloadClustering();break;case"custom_functions":case"custom functions":case Sc.harperdb:case Sc.http_workers:if(Yr&&!fi){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Yr&&console.log("Restarting http_workers"),ds.notify("Restarting http_workers"),fi?await Es.restart(qe.HDB_PROC_DESCRIPTOR):setTimeout(()=>{w_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ds.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(VS,"restartService");async function vZ(){await So.publishToStream(`${FS.SUBJECT_PREFIXES.TXN}.${FS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,FS.WORK_QUEUE_CONSUMER_NAMES.stream_name,So.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(vZ,"postDummyNatsMsg");async function BZ(){await $S(),await Es.restart(qe.HDB_PROC_DESCRIPTOR),await kS.async_set_timeout(2e3),C_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await GS(),Yr&&(await So.closeConnection(),process.exit(0))}a(BZ,"restartPM2Mode");async function $S(){if(!jU.getConfigFromFile(qe.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await JU.getHDBProcessInfo()).clustering.length===0)ds.trace("Clustering not running, restart will start clustering services"),await I_.generateNatsConfig(!0),await Es.startClusteringProcesses(),await Es.startClusteringThreads(),await GS(),Yr&&await So.closeConnection();else{await vZ(),await I_.generateNatsConfig(!0),fi?(ds.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Es.restart(qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Es.restart(qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await JU.getHDBProcessInfo()).clustering.forEach(n=>{ds.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await kS.async_set_timeout(3e3),await GS(),await So.updateLocalStreams(),Yr&&await So.closeConnection(),ds.trace("Restart clustering restarting ingest and reply service threads");let t=w_(qe.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=w_(qe.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a($S,"restartClustering");async function GS(){await I_.removeNatsConfig(qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await I_.removeNatsConfig(qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(GS,"removeNatsConfig")});var dD=m((Hle,_D)=>{"use strict";var Ble=require("lodash"),Qt=R(),{handleHDBError:rD,hdb_errors:HZ}=Q(),{HDB_ERROR_MSGS:qZ,HTTP_STATUS_CODES:FZ}=HZ,KS=F();_D.exports={getRolePermissions:xZ};var hi=Object.create(null),GZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),oD=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),aD=a((e=!1,t=!1,r=!1,s=!1)=>({[Qt.PERMS_CRUD_ENUM.READ]:e,[Qt.PERMS_CRUD_ENUM.INSERT]:t,[Qt.PERMS_CRUD_ENUM.UPDATE]:r,[Qt.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),WS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...aD(t,r,s,n)}),"table_perms_template"),sD=a((e,t=aD())=>({attribute_name:e,describe:lD(t),[Tc]:t[Tc],[QS]:t[QS],[zS]:t[zS]}),"attr_perms_template"),nD=a((e,t=!1)=>({attribute_name:e,describe:t,[Tc]:t}),"timestamp_attr_perms_template"),{READ:Tc,INSERT:QS,UPDATE:zS}=Qt.PERMS_CRUD_ENUM,cD=Object.values(Qt.PERMS_CRUD_ENUM),uD=[Tc,QS,zS];function xZ(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Qt.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(hi[t]&&hi[t].key===s)return hi[t].perms;let n=kZ(e,r);return hi[t]?hi[t].key=s:hi[t]=GZ(s),hi[t].perms=n,n}catch(r){if(!e[Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Qt.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw KS.error(s),KS.debug(r),rD(new Error,qZ.OUTDATED_PERMS_TRANSLATION_ERROR,FZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
9
|
-
${r.stack}`;throw KS.error(s),rD(new Error)}}}a(xZ,"getRolePermissions");function kZ(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Qt.SYSTEM_SCHEMA_NAME]=s[Qt.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=VZ(t[i]);return}r[i]=oD(),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=$Z(c,u);r[i].describe||cD.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=WS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=WS()})}),r}a(kZ,"translateRolePermissions");function VZ(e){let t=oD(!0);return Object.keys(e).forEach(r=>{t.tables[r]=WS(!0,!0,!0,!0,!0)}),t}a(VZ,"createStructureUserPermissions");function $Z(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((l,_)=>{let{attribute_name:d}=_,E=_;return Qt.TIME_STAMP_NAMES.includes(d)&&(E=nD(d,_[Tc])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=sD(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=lD(_),n.attribute_permissions.push(_),c||YZ(_,u)}else if(l!==o){let _;Qt.TIME_STAMP_NAMES.includes(l)?_=nD(l):_=sD(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=iD(n),n}else return e.describe=iD(e),e}a($Z,"getTableAttrPerms");function iD(e){return cD.filter(t=>e[t]).length>0}a(iD,"getSchemaTableDescribePerm");function lD(e){return uD.filter(t=>e[t]).length>0}a(lD,"getAttributeDescribePerm");function YZ(e,t){uD.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(YZ,"checkForHashPerms")});var ED={};et(ED,{Resources:()=>U_,keyArrayToString:()=>po,resetResources:()=>KZ,resources:()=>Dn});function KZ(){return Dn=new U_}function po(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var U_,Dn,Rc=pe(()=>{$n();U_=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 We(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(KZ,"resetResources");a(po,"keyArrayToString")});var gc={};et(gc,{authentication:()=>TD,login:()=>tj,logout:()=>rj,start:()=>ej});async function TD(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?JZ?zZ:[]:QZ?WZ:[];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 D_&&(h["Access-Control-Allow-Credentials"]="true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),D_&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(D_){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let p=n.indexOf(";",h),S=n.indexOf("=",h);c=n.slice(S+1,p===-1?n.length:p),u=await hD.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,p)=>{let S=new P_.AuthAuditLog(f,h,Rt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,c&&(S.session_id=c),e.headers.referer&&(S.referer=e.headers.referer),e.headers.origin&&(S.origin=e.headers.origin),h===Rt.AUTH_AUDIT_STATUS.SUCCESS?fD.notify(S):fD.error(S)},"authAuditLog"),_;if(s){if(_=To.get(s),!_){let[f,h]=s.split(" "),p,S;try{switch(f){case"Basic":[p,S]=atob(h).split(":"),_=p||S?await ht.auth(p,S):null;break;case"Bearer":try{_=await(0,M_.validateOperationToken)(h)}catch(N){if(N.message==="invalid token")try{return await(0,M_.validateRefreshToken)(h),{status:-1}}catch{throw N}}break}}catch(N){return jZ&&(To.get(h)||(To.set(h,h),l(p,Rt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:Ys({error:N.message},e)}}To.set(s,_),ZZ&&l(_.username,Rt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await ht.auth(u.user,null,!1):XZ&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,L_.getSuperUser)());D_&&(e.session.update=function(f){if(!c){c=(0,SD.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${c}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("set-cookie",p):d?.headers?.set&&d.headers.set("set-cookie",p)}return f.id=c,hD.put(f)},e.login=async function(f,h){e.user=await ht.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")&&Dn.loginPath?(d.status=302,d.headers.Location=Dn.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 p=o[h++];f[p]=o[h++]}}return o=null,d}function ej({server:e,port:t}){e.request(TD,{port:t||"all"}),mD||(mD=!0,setInterval(()=>{To=new Map},Ir.get(Rt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),pD.user.addListener(()=>{To=new Map}))}async function tj(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 rj(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var L_,M_,SD,Ir,Rt,P_,pD,fD,WZ,QZ,zZ,JZ,hD,D_,XZ,ZZ,jZ,To,mD,v_=pe(()=>{L_=D(Or());un();Rc();M_=D(ec());de();SD=require("uuid"),Ir=D(W()),Rt=D(R()),P_=D(F());Ro();pD=D(ya()),fD=(0,P_.loggerWithTag)("auth-event");Ir.initSync();WZ=Ir.get(Rt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),QZ=Ir.get(Rt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),zZ=Ir.get(Rt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),JZ=Ir.get(Rt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);ht.auth=L_.findAndValidateUser;hD=rt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),D_=Ir.get(Rt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,XZ=Ir.get(Rt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,ZZ=Ir.get(Rt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,jZ=Ir.get(Rt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,To=new Map;a(TD,"authentication");a(ej,"start");a(tj,"login");a(rj,"logout")});var yD=m((Kle,bD)=>{"use strict";var he=require("joi"),RD=require("fs-extra"),gD=require("path"),Ws=Ue(),AD=W(),OD=R(),ND=F(),{hdb_errors:sj}=Q(),{HDB_ERROR_MSGS:Dt}=sj,Ks=/^[a-zA-Z0-9-_]+$/;bD.exports={getDropCustomFunctionValidator:ij,setCustomFunctionValidator:oj,addComponentValidator:lj,dropCustomFunctionProjectValidator:_j,packageComponentValidator:dj,deployComponentValidator:Ej,setComponentFileValidator:aj,getComponentFileValidator:uj,dropComponentFileValidator:cj};function B_(e,t,r){try{let s=AD.get(OD.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=gD.join(s,t);return RD.existsSync(n)?e?t:r.message(Dt.PROJECT_EXISTS):e?r.message(Dt.NO_PROJECT):t}catch(s){return ND.error(s),r.message(Dt.VALIDATION_ERR)}}a(B_,"checkProjectExists");function Ac(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Ac,"checkFilePath");function nj(e,t,r,s){try{let n=AD.get(OD.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=gD.join(n,e,t,r+".js");return RD.existsSync(i)?r:s.message(Dt.NO_FILE)}catch(n){return ND.error(n),s.message(Dt.VALIDATION_ERR)}}a(nj,"checkFileExists");function ij(e){let t=he.object({project:he.string().pattern(Ks).custom(B_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(Ks).custom(nj.bind(null,e.project,e.type)).custom(Ac).required().messages({"string.pattern.base":Dt.BAD_FILE_NAME})});return Ws.validateBySchema(e,t)}a(ij,"getDropCustomFunctionValidator");function oj(e){let t=he.object({project:he.string().pattern(Ks).custom(B_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().custom(Ac).required(),function_content:he.string().required()});return Ws.validateBySchema(e,t)}a(oj,"setCustomFunctionValidator");function aj(e){let t=he.object({project:he.string().pattern(Ks).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(Ac).required(),payload:he.string().optional(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ws.validateBySchema(e,t)}a(aj,"setComponentFileValidator");function cj(e){let t=he.object({project:he.string().pattern(Ks).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(Ac).optional()});return Ws.validateBySchema(e,t)}a(cj,"dropComponentFileValidator");function uj(e){let t=he.object({project:he.string().required(),file:he.string().custom(Ac).required(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ws.validateBySchema(e,t)}a(uj,"getComponentFileValidator");function lj(e){let t=he.object({project:he.string().pattern(Ks).custom(B_.bind(null,!1)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Ws.validateBySchema(e,t)}a(lj,"addComponentValidator");function _j(e){let t=he.object({project:he.string().pattern(Ks).custom(B_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Ws.validateBySchema(e,t)}a(_j,"dropCustomFunctionProjectValidator");function dj(e){let t=he.object({project:he.string().pattern(Ks).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),skip_node_modules:he.boolean()});return Ws.validateBySchema(e,t)}a(dj,"packageComponentValidator");function Ej(e){let t=he.object({project:he.string().pattern(Ks).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),payload:he.string().optional().messages({"string.pattern.base":Dt.BAD_PACKAGE}),package:he.string().optional()});return Ws.validateBySchema(e,t)}a(Ej,"deployComponentValidator")});var jS=m((Qle,CD)=>{"use strict";var ye=require("fs-extra"),JS=require("fast-glob"),me=require("path"),ID=require("tar-fs"),fj=require("uuid").v4,XS=require("normalize-path"),hs=yD(),gt=F(),we=R(),Ke=W(),H_=Ar(),hj=G(),{PACKAGE_ROOT:mj}=R(),{handleHDBError:nt,hdb_errors:Sj}=Q(),{HDB_ERROR_MSGS:Ln,HTTP_STATUS_CODES:it}=Sj,pj=me.join(mj,"application-template"),ZS=me.join(Ke.get(we.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function wD(){let e=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw nt(new Error,Ln.NOT_ENABLED,it.BAD_REQUEST,void 0,void 0,!0)}a(wD,"isCFEnabled");function Tj(){gt.trace("getting custom api status");let e={};try{e={is_enabled:Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw nt(new Error,Ln.FUNCTION_STATUS,it.INTERNAL_SERVER_ERROR,gt.ERR,t)}return e}a(Tj,"customFunctionsStatus");function Rj(){gt.trace("getting custom api endpoints");let e={},t=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{JS.sync(XS(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:JS.sync(XS(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:JS.sync(XS(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw nt(new Error,Ln.GET_FUNCTIONS,it.INTERNAL_SERVER_ERROR,gt.ERR,r)}return e}a(Rj,"getCustomFunctions");function gj(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=hs.getDropCustomFunctionValidator(e);if(t)throw nt(t,t.message,it.BAD_REQUEST);gt.trace("getting custom api endpoint file content");let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=me.join(r,s,n,i+".js");try{return ye.readFileSync(o,{encoding:"utf8"})}catch(c){throw nt(new Error,Ln.GET_FUNCTION,it.INTERNAL_SERVER_ERROR,gt.ERR,c)}}a(gj,"getCustomFunction");function Aj(e){wD(),e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=hs.setCustomFunctionValidator(e);if(t)throw nt(t,t.message,it.BAD_REQUEST);gt.trace("setting custom function file content");let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return ye.outputFileSync(me.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw nt(new Error,Ln.SET_FUNCTION,it.INTERNAL_SERVER_ERROR,gt.ERR,c)}}a(Aj,"setCustomFunction");function Oj(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=hs.getDropCustomFunctionValidator(e);if(t)throw nt(t,t.message,it.BAD_REQUEST);gt.trace("dropping custom function file");let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return ye.unlinkSync(me.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw nt(new Error,Ln.DROP_FUNCTION,it.INTERNAL_SERVER_ERROR,gt.ERR,o)}}a(Oj,"dropCustomFunction");function Nj(e){wD(),e.project&&(e.project=me.parse(e.project).name);let t=hs.addComponentValidator(e);if(t)throw nt(t,t.message,it.BAD_REQUEST);gt.trace("adding component");let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=me.join(r,s);return ye.mkdirSync(n,{recursive:!0}),ye.copySync(pj,n),`Successfully added project: ${s}`}catch(n){throw nt(new Error,Ln.ADD_FUNCTION,it.INTERNAL_SERVER_ERROR,gt.ERR,n)}}a(Nj,"addComponent");function bj(e){e.project&&(e.project=me.parse(e.project).name);let t=hs.dropCustomFunctionProjectValidator(e);if(t)throw nt(t,t.message,it.BAD_REQUEST);gt.trace("dropping custom function project");let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=Ke.get(we.CONFIG_PARAMS.APPS);if(!hj.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 H_.updateConfigValue(we.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=me.join(r,s);return ye.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw nt(new Error,Ln.DROP_FUNCTION_PROJECT,it.INTERNAL_SERVER_ERROR,gt.ERR,i)}}a(bj,"dropCustomFunctionProject");async function yj(e){e.project&&(e.project=me.parse(e.project).name);let t=hs.packageComponentValidator(e);if(t)throw nt(t,t.message,it.BAD_REQUEST);let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;gt.trace("packaging component",s);let n;try{n=await ye.realpath(me.join(r,s))}catch(u){if(u.code!==we.NODE_ERROR_CODES.ENOENT)throw u;try{n=await ye.realpath(me.join(Ke.get(we.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(l){if(l.code===we.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await ye.ensureDir(ZS);let i=me.join(ZS,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(me.join(n,"node_modules"))}),ID.pack(n,o).pipe(ye.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=ye.readFileSync(i,{encoding:"base64"});return await ye.remove(i),{project:s,payload:c}}a(yj,"packageComponent");async function Ij(e){e.project&&(e.project=me.parse(e.project).name);let t=hs.deployComponentValidator(e);if(t)throw nt(t,t.message,it.BAD_REQUEST);let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,package:i}=e;if(gt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");if(n){let o=me.join(r,s);i="file:"+o,await ye.ensureDir(o);let c,u;do c=me.join(ZS,fj()+".tar"),u=await ye.pathExists(c);while(u);await ye.outputFile(c,n,{encoding:"base64"});let l=ye.createReadStream(c);l.pipe(ID.extract(o)),await new Promise(_=>l.on("end",_)),await ye.unlink(c)}return H_.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a(Ij,"deployComponent");async function wj(){let e=H_.getConfiguration(),t=[];for(let s in e)if(e[s]?.package){if(e[s].package.startsWith("file:"))continue;t.push(Object.assign(e[s],{name:s}))}let r=a(async(s,n)=>{let i=await ye.readdir(s,{withFileTypes:!0});for(let o of i){let c=o.name;if(c.startsWith(".")||c==="node_modules")continue;let u=me.join(s,c);if(await o.isDirectory()){let l={name:c,entries:[]};n.entries.push(l),await r(u,l)}else{let l=await ye.stat(u),_={name:me.basename(c),mtime:l.mtime,size:l.size};n.entries.push(_)}}return n},"walk_dir");return r(Ke.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:Ke.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(me.sep).slice(-1).pop(),entries:t})}a(wj,"getComponents");async function Cj(e){let t=hs.getComponentFileValidator(e);if(t)throw nt(t,t.message,it.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await ye.readFile(me.join(Ke.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file),r)}catch(s){throw s.code===we.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${me.join(e.project,e.file)}'`):s}}a(Cj,"getComponentFile");async function Uj(e){let t=hs.setComponentFileValidator(e);if(t)throw nt(t,t.message,it.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=me.join(Ke.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file);return e.payload!==void 0?(await ye.ensureFile(s),await ye.outputFile(s,e.payload,r)):await ye.ensureDir(s),"Successfully set component: "+e.file}a(Uj,"setComponentFile");async function Dj(e){let t=hs.dropComponentFileValidator(e);if(t)throw nt(t,t.message,it.BAD_REQUEST);let r=e.file?me.join(e.project,e.file):e.project,s=me.join(Ke.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await ye.pathExists(s)&&await ye.remove(s),H_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(Dj,"dropComponent");CD.exports={customFunctionsStatus:Tj,getCustomFunctions:Rj,getCustomFunction:gj,setCustomFunction:Aj,dropCustomFunction:Oj,addComponent:Nj,dropCustomFunctionProject:bj,packageComponent:yj,deployComponent:Ij,getComponents:wj,getComponentFile:Cj,setComponentFile:Uj,dropComponent:Dj}});var ep=m((Jle,DD)=>{"use strict";var ms=require("joi"),UD=Ue();DD.exports={readTransactionLogValidator:Lj,deleteTransactionLogsBeforeValidator:Mj};function Lj(e){let t=ms.object({schema:ms.string().required(),table:ms.string().required(),from:ms.date().timestamp(),to:ms.date().timestamp(),limit:ms.number().min(1)});return UD.validateBySchema(e,t)}a(Lj,"readTransactionLogValidator");function Mj(e){let t=ms.object({schema:ms.string().required(),table:ms.string().required(),timestamp:ms.date().timestamp().required()});return UD.validateBySchema(e,t)}a(Mj,"deleteTransactionLogsBeforeValidator")});var F_=m((Zle,BD)=>{"use strict";var tp=R(),q_=He(),LD=G(),MD=W(),PD=Ms(),{handleHDBError:go,hdb_errors:Pj}=Q(),{HTTP_STATUS_CODES:Ao}=Pj,{readTransactionLogValidator:vj,deleteTransactionLogsBeforeValidator:Bj}=ep(),vD="This operation relies on clustering and cannot run with it disable.",Hj="Logs successfully deleted from transaction log.",qj="All logs successfully deleted from transaction log.";BD.exports={readTransactionLog:Fj,deleteTransactionLogsBefore:Gj};async function*Fj(e){let t=vj(e);if(t)throw go(t,t.message,Ao.BAD_REQUEST,void 0,void 0,!0);if(!MD.get(tp.CONFIG_PARAMS.CLUSTERING_ENABLED))throw go(new Error,vD,Ao.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=LD.checkSchemaTableExist(r,s);if(n)throw go(new Error,n,Ao.NOT_FOUND,void 0,void 0,!0);let i=PD.createNatsTableStreamName(r,s),o=await q_.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===tp.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}a(Fj,"readTransactionLog");async function Gj(e){let t=Bj(e);if(t)throw go(t,t.message,Ao.BAD_REQUEST,void 0,void 0,!0);if(!MD.get(tp.CONFIG_PARAMS.CLUSTERING_ENABLED))throw go(new Error,vD,Ao.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=LD.checkSchemaTableExist(r,s);if(i)throw go(new Error,i,Ao.NOT_FOUND,void 0,void 0,!0);let o=PD.createNatsTableStreamName(r,s),{jsm:c}=await q_.getNATSReferences(),u=await q_.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=Hj,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=qj):d=(await q_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(Gj,"deleteTransactionLogsBefore")});var V_=m((e_e,VD)=>{"use strict";var G_=require("joi"),x_=require("path"),HD=require("fs-extra"),{exec:xj}=require("child_process"),kj=require("util"),qD=kj.promisify(xj),Oc=R(),{handleHDBError:Oo,hdb_errors:Vj}=Q(),{HTTP_STATUS_CODES:No}=Vj,bc=W(),$j=Ue(),Nc=F();bc.initSync();var rp=bc.get(Oc.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),FD="npm install --omit=dev --json",Yj=`${FD} --dry-run`;VD.exports={installModules:zj,auditModules:Jj,installAllRootModules:Kj,uninstallRootModule:Wj,linkHarperdb:Qj};async function Kj(e=!1){await k_(),await yc(e?"npm install --ignore-scripts":"npm install",bc.get(Oc.CONFIG_PARAMS.ROOTPATH))}a(Kj,"installAllRootModules");async function Wj(e){await yc(`npm uninstall ${e}`,bc.get(Oc.CONFIG_PARAMS.ROOTPATH))}a(Wj,"uninstallRootModule");async function Qj(){await k_(),await yc(`npm link ${Oc.PACKAGE_ROOT}`,bc.get(Oc.CONFIG_PARAMS.ROOTPATH))}a(Qj,"linkHarperdb");async function yc(e,t=void 0){let{stdout:r,stderr:s}=await qD(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
|
|
10
|
-
`,""));return
|
|
11
|
-
`,"")}a(
|
|
8
|
+
`,"")}a(WI,"runCommand");async function qz(){try{await pz.access(mm)}catch{return!1}let e=await WI(`${mm} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Tz.eq(t,Bz)}a(qz,"checkNATSServerInstalled");async function Rm(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await kI.getClusterUser();if(ci(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}yr.trace("create nats connection called");let i=await wz({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return yr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(Rm,"createConnection");async function Fz(){ds&&(await ds.drain(),ds=void 0,no=void 0,io=void 0,Wa=void 0)}a(Fz,"closeConnection");var ds,Wa;async function Vl(){return Wa||(Wa=Rm(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ds=await Wa),ds||Wa}a(Vl,"getConnection");async function za(){if(no)return no;ci(ds)&&await Vl();let{domain:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return no=await ds.jetstreamManager({domain:e}),no}a(za,"getJetStreamManager");async function QI(){if(io)return io;ci(ds)&&await Vl();let{domain:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return io=ds.jetstream({domain:e}),io}a(QI,"getJetStream");async function Gt(){let e=ds||await Vl(),t=no||await za(),r=io||await QI();return{connection:e,jsm:t,js:r}}a(Gt,"getNATSReferences");async function Gz(e){let t=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await kI.getClusterUser(),n=await Rm(t,r,s),i=Tm(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=KI.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 Fl.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(Gz,"getServerList");async function gm(e,t){let{jsm:r}=await Gt(),s=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:$I.File,retention:YI.Limits,subjects:t,discard:Cz.Old,duplicate_window:VI,max_msgs:n,max_bytes:i,max_age:s})}a(gm,"createLocalStream");async function zI(){let{jsm:e}=await Gt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(zI,"listStreams");async function xz(e){let{jsm:t}=await Gt();await t.streams.delete(e)}a(xz,"deleteLocalStream");async function kz(e){let{connection:t}=await Gt(),r=[],s=Tm(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(KI.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(kz,"listRemoteStreams");async function Vz(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=Sm(),o={durable_name:i,ack_policy:xl.Explicit};t&&(o.deliver_policy=kl.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=pm(_.data),E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};if(_.headers&&(E.origin=_.headers.get(_e.MSG_HEADERS.ORIGIN),E.nats_msg_id=_.headers.get(_e.MSG_HEADERS.NATS_MSG_ID)),l.push(E),_.ack(),_.info.pending===0)break}return await c.delete(),l}a(Vz,"viewStream");async function*$z(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=Sm(),o={durable_name:i,ack_policy:xl.Explicit};t&&(o.deliver_policy=kl.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 _=pm(l.data);_[0]||(_=[_]);for(let d of _){let E={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(E.origin=l.headers.get(_e.MSG_HEADERS.ORIGIN),E.nats_msg_id=l.headers.get(_e.MSG_HEADERS.NATS_MSG_ID)),yield E}if(l.ack(),l.info.pending===0)break}await c.delete()}a($z,"viewStreamIterator");async function Yz(e,t,r,s){yr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=JI(s,r);let{js:n}=await Gt(),i=await Xa(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:xI.encode(s);try{yr.trace(`publishToStream publishing to subject: ${o}`),Pz(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 ew(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){yr.trace(`publishToStream creating stream: ${t}`);let _=o.split(".");_[2]="*",await gm(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(Yz,"publishToStream");function JI(e,t){t===void 0&&(t=Dz());let r=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(_e.MSG_HEADERS.NATS_MSG_ID)){let s=Fl.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${Sm()}`;t.append(_e.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(_e.MSG_HEADERS.ORIGIN)||t.append(_e.MSG_HEADERS.ORIGIN,r),t}a(JI,"addNatsMsgHeader");function Ja(e){e=e.toLowerCase();let t=Qa.join(Tt.get(Te.CONFIG_PARAMS.ROOTPATH),vz);if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ci(hm)&&(hm={port:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.HUB,config_file:_e.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Qa.join(t,_e.PID_FILES.HUB),hdb_nats_path:t}),hm;if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ci(fm)&&(fm={port:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,config_file:_e.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,pid_file_path:Qa.join(t,_e.PID_FILES.LEAF),hdb_nats_path:t}),fm;yr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ja,"getServerConfig");async function Kz(e){let{jsm:t}=await Gt(),r=await Xa();try{await t.streams.add({name:e.stream_name,storage:$I.File,retention:YI.Limits,duplicate_window:VI,max_age:yz,max_bytes:Iz,subjects:[`${_e.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:xl.Explicit,durable_name:e.durable_name,deliver_policy:kl.All,max_ack_pending:1e4});else throw s}}a(Kz,"createWorkQueueStream");async function Wz(){let{jsm:e}=await Gt();(await e.consumers.info(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(yr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name),yr.info("Adding pull consumer to ingest stream"),await e.consumers.add(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:xl.Explicit,durable_name:_e.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:kl.All,max_ack_pending:1e4}))}a(Wz,"updateIngestStreamConsumer");async function XI(e,t,r){let{jsm:s}=await Gt(),n=await s.streams.info(t),i=ZI(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=Gl.createNatsTableStreamName(c,u),_=i===e,d,E,f=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,T=n.config.sources.length;p<T;p++)if(d=n.config.sources[p],E=p,_&&d.name===l||!_&&d.name===l&&d.external&&d.external.api===`$JS.${e}.API`){f=!0;break}if(f===!0){if(d.opt_start_time===o)return;n.config.sources.splice(E,1),await s.streams.update(t,n.config)}let h={name:l,opt_start_time:o,filter_subject:`${_e.SUBJECT_PREFIXES.TXN}.>`};_||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(XI,"addSourceToWorkStream");function ZI(e){return e.split(".")[1]}a(ZI,"extractServerName");async function jI(e,t,r){let{schema:s,table:n}=r,i=Gl.createNatsTableStreamName(s,n),{jsm:o}=await Gt(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let u=c.config.sources.length,l;for(;u--;)if(l=c.config.sources[u],l.name===i&&l.external.api===`$JS.${e}.API`){c.config.sources.splice(u,1);break}await o.streams.update(t,c.config)}a(jI,"removeSourceFromWorkStream");async function Qz(e,t,r=2e4,s=Tm()){if(!Fl.isObject(t))throw new Error("data param must be an object");let n=xI.encode(t),{connection:i}=await Gt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return pm(c.data)}a(Qz,"request");function Am(e){return new Promise(async(t,r)=>{let s=Oz(mm,["--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(Am,"reloadNATS");async function zz(){let{pid_file_path:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Am(e)}a(zz,"reloadNATSHub");async function Jz(){let{pid_file_path:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Am(e)}a(Jz,"reloadNATSLeaf");function Xz(e,t,r){let s;switch(e.code){case FI.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case FI.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(Xz,"requestErrorHandler");async function Zz(e,t){let r=t+_e.SERVER_SUFFIX.LEAF;await ew(async()=>{e.subscribe===!0?await XI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await jI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(Zz,"updateWorkStream");function ew(e){return Nz.writeTransaction(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(ew,"exclusiveLock");async function tw(e,t){let r=Gl.createNatsTableStreamName(e,t),s=await Xa(),n=rJ(e,t,s);await gm(r,[n])}a(tw,"createLocalTableStream");async function jz(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await tw(s,n)}}a(jz,"createTableStreams");async function rw(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Gl.createNatsTableStreamName(e,t),{jsm:s}=await Gt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")yr.warn(r);else throw r}}a(rw,"purgeTableStream");async function eJ(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await rw(e,t[r])}a(eJ,"purgeSchemaTableStreams");async function tJ(e){return(await za()).streams.info(e)}a(tJ,"getStreamInfo");function rJ(e,t,r){return`${_e.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(rJ,"createSubjectName");async function Xa(){if(Ka)return Ka;if(Ka=(await za())?.nc?.info?.server_name,Ka===void 0)throw new Error("Unable to get jetstream manager server name");return Ka}a(Xa,"getJsmServerName");async function sJ(){let e=await za(),t=await Xa(),r=await zI();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=nJ(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;yr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else if(n.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;yr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else{let l=i.split(".");l[l.length-1]=t;let _=l.join(".");yr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}a(sJ,"updateLocalStreams");function nJ(e){let{config:t}=e,r=!1;if(t.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(nJ,"updateStreamLimits")});var Za=m((Bce,aw)=>{"use strict";var oo=Ku(),ao=OI(),iJ=F(),oJ=require("uuid").v4,vce=require("clone"),Yl=xs(),co=g(),aJ=require("util"),On=Hr(),{handleHDBError:xt,hdb_errors:cJ}=Q(),{HDB_ERROR_MSGS:$l,HTTP_STATUS_CODES:kt}=cJ,{SchemaEventMsg:Kl}=Fr(),nw=He(),{getDatabases:uJ}=(de(),re(Ne)),{transformReq:uo}=k();aw.exports={createSchema:lJ,createSchemaStructure:iw,createTable:_J,createTableStructure:ow,createAttribute:mJ,dropSchema:dJ,dropTable:EJ,dropAttribute:fJ,getBackup:SJ};async function lJ(e){let t=await iw(e);return Yl.signalSchemaChange(new Kl(process.pid,e.operation,e.schema)),t}a(lJ,"createSchema");async function iw(e){let t=oo.schema_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(uo(e),!await ao.checkSchemaExists(e.schema))throw xt(new Error,$l.SCHEMA_EXISTS_ERR(e.schema),kt.BAD_REQUEST,co.LOG_LEVELS.ERROR,$l.SCHEMA_EXISTS_ERR(e.schema),!0);return await On.createSchema(e),`database '${e.schema}' successfully created`}a(iw,"createSchemaStructure");async function _J(e){return uo(e),await ow(e)}a(_J,"createTable");async function ow(e){let t=oo.create_table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(oo.validateTableResidence(e.residence),!await ao.checkSchemaTableExists(e.schema,e.table))throw xt(new Error,$l.TABLE_EXISTS_ERR(e.schema,e.table),kt.BAD_REQUEST,co.LOG_LEVELS.ERROR,$l.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:oJ(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await On.createTable(s,e);else throw xt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",kt.BAD_REQUEST);else await On.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(ow,"createTableStructure");async function dJ(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=oo.schema_object(e),s=t??r;if(s)throw xt(s,s.message,kt.BAD_REQUEST,void 0,void 0,!0);uo(e);let n=await ao.checkSchemaExists(e.schema);if(n)throw xt(new Error,n,kt.NOT_FOUND,co.LOG_LEVELS.ERROR,n,!0);let i=await ao.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await On.dropSchema(e),Yl.signalSchemaChange(new Kl(process.pid,e.operation,e.schema)),await nw.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(dJ,"dropSchema");async function EJ(e){let t=oo.table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);uo(e);let r=await ao.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,co.LOG_LEVELS.ERROR,r,!0);return await On.dropTable(e),await nw.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(EJ,"dropTable");async function fJ(e){let t=oo.attribute_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);uo(e);let r=await ao.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,co.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw xt(new Error,"You cannot drop a hash attribute",kt.BAD_REQUEST,void 0,void 0,!0);if(co.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw xt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,kt.BAD_REQUEST,void 0,void 0,!0);try{return await On.dropAttribute(e),hJ(e),Yl.signalSchemaChange(new Kl(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw iJ.error(`Got an error deleting attribute ${aJ.inspect(e)}.`),s}}a(fJ,"dropAttribute");function hJ(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(hJ,"dropAttributeFromGlobal");async function mJ(e){uo(e);let t=uJ()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw xt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,kt.BAD_REQUEST,void 0,void 0,!0);return await On.createAttribute(e),Yl.signalSchemaChange(new Kl(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(mJ,"createAttribute");function SJ(e){return On.getBackup(e)}a(SJ,"getBackup")});var uw=m((qce,cw)=>{"use strict";var{OPERATIONS_ENUM:pJ}=g(),Om=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=pJ.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};cw.exports=Om});var Nm=m((xce,fw)=>{"use strict";var TJ=Hr(),Gce=uw(),Wl=k(),Ql=g(),RJ=W(),{handleHDBError:lw,hdb_errors:gJ}=Q(),{HDB_ERROR_MSGS:_w,HTTP_STATUS_CODES:dw}=gJ,AJ=Object.values(Ql.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),Ew="To use this operation audit log must be enabled in harperdb-config.yaml";fw.exports=OJ;async function OJ(e){if(Wl.isEmpty(e.schema))throw new Error(_w.SCHEMA_REQUIRED_ERR);if(Wl.isEmpty(e.table))throw new Error(_w.TABLE_REQUIRED_ERR);if(!RJ.get(Ql.CONFIG_PARAMS.LOGGING_AUDITLOG))throw lw(new Error,Ew,dw.BAD_REQUEST,Ql.LOG_LEVELS.ERROR,Ew,!0);let t=Wl.checkSchemaTableExist(e.schema,e.table);if(t)throw lw(new Error,t,dw.NOT_FOUND,Ql.LOG_LEVELS.ERROR,t,!0);if(!Wl.isEmpty(e.search_type)&&AJ.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await TJ.readAuditLog(e)}a(OJ,"readAuditLog")});var mw=m((Vce,hw)=>{"use strict";var{OPERATIONS_ENUM:NJ}=g(),bm=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=NJ.GET_BACKUP,this.schema=t,this.table=r}};hw.exports=bm});var Tw=m((Wce,pw)=>{"use strict";var bJ=Hr(),Yce=mw(),ym=k(),yJ=g(),Kce=W(),{handleHDBError:IJ,hdb_errors:wJ}=Q(),{HDB_ERROR_MSGS:Sw,HTTP_STATUS_CODES:CJ}=wJ;pw.exports=UJ;async function UJ(e){if(ym.isEmpty(e.schema))throw new Error(Sw.SCHEMA_REQUIRED_ERR);if(ym.isEmpty(e.table))throw new Error(Sw.TABLE_REQUIRED_ERR);let t=ym.checkSchemaTableExist(e.schema,e.table);if(t)throw IJ(new Error,t,CJ.NOT_FOUND,yJ.LOG_LEVELS.ERROR,t,!0);return await bJ.getBackup(read_audit_log_object)}a(UJ,"getBackup")});var bw=m((zce,Nw)=>{var Nn=require("validate.js"),gw=Ue(),lo=g(),{handleHDBError:DJ,hdb_errors:LJ}=Q(),{HDB_ERROR_MSGS:Ye,HTTP_STATUS_CODES:MJ}=LJ,Im=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),PJ={STRUCTURE_USER:"structure_user"},Rw=Object.values(lo.ROLE_TYPES_ENUM),vJ="attribute_permissions",BJ="attribute_name",{PERMS_CRUD_ENUM:_o}=lo,HJ=[vJ,...Object.values(_o)],Aw=[_o.READ,_o.INSERT,_o.UPDATE],qJ=[BJ,...Aw];function FJ(e){let t=Im();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Ow(e,t)}a(FJ,"addRoleValidation");function GJ(e){let t=Im();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Ow(e,t)}a(GJ,"alterRoleValidation");function xJ(e){let t=Im();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,gw.validateObject(e,t)}a(xJ,"dropRoleValidation");var kJ=["operation","role","id","permission","hdb_user","hdb_auth_header"];function Ow(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)kJ.includes(s[o])||n.push(s[o]);n.length>0&&Je(Ye.INVALID_ROLE_JSON_KEYS(n),r);let i=gw.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Je(o,r)}),e.permission){let o=VJ(e);o&&Je(o,r),Rw.forEach(c=>{e.permission[c]&&!Nn.isBoolean(e.permission[c])&&Je(Ye.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Rw.indexOf(o)<0){if(o===PJ.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]||Je(Ye.SCHEMA_NOT_FOUND(d),r)}continue}Je(Ye.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Je(Ye.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]){Je(Ye.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{HJ.includes(_)||Je(Ye.INVALID_PERM_KEY(_),r,o,u)}),Object.values(_o).forEach(_=>{Nn.isDefined(l[_])?Nn.isBoolean(l[_])||Je(Ye.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):Je(Ye.TABLE_PERM_MISSING(_),r,o,u)}),Nn.isDefined(l.attribute_permissions)){if(!Nn.isArray(l.attribute_permissions)){Je(Ye.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{Je(Ye.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(l.attribute_permissions){let _=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in l.attribute_permissions){let f=l.attribute_permissions[E];if(Object.keys(f).forEach(p=>{!qJ.includes(p)&&p!==_o.DELETE&&Je(Ye.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!Nn.isDefined(f.attribute_name)){Je(Ye.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){Je(Ye.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}Aw.forEach(p=>{Nn.isDefined(f[p])?Nn.isBoolean(f[p])||Je(Ye.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):Je(Ye.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(l.read===!1&&d.read===!0||l.insert===!1&&d.insert===!0||l.update===!1&&d.update===!0){let E=`${o}.${u}`;Je(Ye.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return $J(r)}a(Ow,"customValidate");Nw.exports={addRoleValidation:FJ,alterRoleValidation:GJ,dropRoleValidation:xJ};function VJ(e){let{operation:t,permission:r}=e;if(t===lo.OPERATIONS_ENUM.ADD_ROLE||t===lo.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 Ye.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?lo.ROLE_TYPES_ENUM.SUPER_USER:lo.ROLE_TYPES_ENUM.CLUSTER_USER;return Ye.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(VJ,"validateNoSUPerms");function $J(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Ye.ROLE_PERMS_ERROR,...e};return DJ(new Error,s,MJ.BAD_REQUEST)}else return null}a($J,"generateRolePermResponse");function Je(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(Je,"addPermError")});var Mm=m((Xce,Cw)=>{"use strict";var yw=ir(),Iw=Ar(),YJ=mn(),Cm=bw(),Um=xs(),KJ=require("uuid").v4,WJ=require("util"),zl=g(),QJ=k(),Dm=Iw.searchByValue,zJ=Iw.searchByHash,JJ=WJ.promisify(YJ.delete),XJ=as(),ZJ=ji(),{hdb_errors:jJ,handleHDBError:Eo}=Q(),{HDB_ERROR_MSGS:ww,HTTP_STATUS_CODES:Jl}=jJ,{UserEventMsg:Lm}=Fr();Cw.exports={addRole:e2,alterRole:t2,dropRole:r2,listRoles:s2};function wm(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(wm,"scrubRoleDetails");async function e2(e){let t=Cm.addRoleValidation(e);if(t)throw t;e=wm(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 Dm(r)||[])}catch(i){throw Eo(i)}if(s&&s.length>0)throw Eo(new Error,ww.ROLE_ALREADY_EXISTS(e.role),Jl.CONFLICT,void 0,void 0,!0);e.id||(e.id=KJ());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await yw.insert(n),Um.signalUserChange(new Lm(process.pid)),e=wm(e),e}a(e2,"addRole");async function t2(e){let t=Cm.alterRoleValidation(e);if(t)throw t;e=wm(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await yw.update(r)}catch(n){throw Eo(n)}if(s&&s?.message==="updated 0 of 1 records")throw Eo(new Error,"Invalid role id",Jl.BAD_REQUEST,void 0,void 0,!0);return await Um.signalUserChange(new Lm(process.pid)),e}a(t2,"alterRole");async function r2(e){let t=Cm.dropRoleValidation(e);if(t)throw Eo(new Error,t,Jl.BAD_REQUEST,void 0,void 0,!0);let r=new ZJ(zl.SYSTEM_SCHEMA_NAME,zl.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await zJ(r));if(s.length===0)throw Eo(new Error,ww.ROLE_NOT_FOUND,Jl.NOT_FOUND,void 0,void 0,!0);let n=new XJ(zl.SYSTEM_SCHEMA_NAME,zl.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Dm(n)),o=!1;if(QJ.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 JJ(c),Um.signalUserChange(new Lm(process.pid)),`${s[0].role} successfully deleted`}a(r2,"dropRole");async function s2(){return Dm({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(s2,"listRoles")});var Mw=m((jce,Lw)=>{"use strict";var n2=W(),bn=require("joi"),i2=Ue(),Uw=require("moment"),o2=require("fs-extra"),Pm=require("path"),a2=require("lodash"),ja=g(),{LOG_LEVELS:ui}=g(),c2="YYYY-MM-DD hh:mm:ss",u2=Pm.resolve(__dirname,"../logs");Lw.exports=function(e){return i2.validateBySchema(e,l2)};var l2=bn.object({from:bn.custom(Dw),until:bn.custom(Dw),level:bn.valid(ui.NOTIFY,ui.FATAL,ui.ERROR,ui.WARN,ui.INFO,ui.DEBUG,ui.TRACE),order:bn.valid("asc","desc"),limit:bn.number().min(1),start:bn.number().min(0),log_name:bn.custom(_2)});function Dw(e,t){if(Uw(e,Uw.ISO_8601).format(c2)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Dw,"validateDatetime");function _2(e,t){if(a2.invert(ja.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=n2.get(ja.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?ja.LOG_NAMES.HDB:e,i=n===ja.LOG_NAMES.INSTALL?Pm.join(u2,ja.LOG_NAMES.INSTALL):Pm.join(s,n);return o2.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(_2,"validateReadLogPath")});var Bm=m((tue,vw)=>{"use strict";var Xl=g(),d2=F(),E2=W(),f2=Mw(),vm=require("path"),Pw=require("fs-extra"),{once:h2}=require("events"),{handleHDBError:m2,hdb_errors:S2}=Q(),{PACKAGE_ROOT:p2}=g(),T2=vm.join(p2,"logs"),R2=1e3,g2=200;vw.exports=A2;async function A2(e){let t=f2(e);if(t)throw m2(t,t.message,S2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=E2.get(Xl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Xl.LOG_NAMES.HDB:e.log_name,n=s===Xl.LOG_NAMES.INSTALL?vm.join(T2,Xl.LOG_NAMES.INSTALL):vm.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?R2:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,p=0;E==="desc"&&!u&&!_&&(p=Math.max(Pw.statSync(n).size-(h+5)*g2,0));let T=Pw.createReadStream(n,{start:p});T.on("error",b=>{d2.error(b)});let R=0,O=[],V="",$;T.on("data",b=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;b=V+b;let z=0,q;for(;(q=P.exec(b))&&!T.destroyed;){$&&($.message=b.slice(z,q.index),U($));let[Oe,et,_u]=q,Pi=_u.split("] ["),Ko=Pi[0],kn=Pi[1];Pi.splice(0,2),$={timestamp:et,thread:Ko,level:kn,tags:Pi,message:""},z=q.index+Oe.length}V=b.slice(z)}),T.on("end",b=>{T.destroyed||$&&($.message=V.trim(),U($))}),T.resume();function U(b){let P,z,q;switch(!0){case(i&&c&&l):P=new Date(b.timestamp),z=new Date(u),q=new Date(_),b.level===o&&P>=z&&P<=q&&R<f?R++:b.level===o&&P>=z&&P<=q&&(yn(b,E,O),R++,R===h&&T.destroy());break;case(i&&c):P=new Date(b.timestamp),z=new Date(u),b.level===o&&P>=z&&R<f?R++:b.level===o&&P>=z&&(yn(b,E,O),R++,R===h&&T.destroy());break;case(i&&l):P=new Date(b.timestamp),q=new Date(_),b.level===o&&P<=q&&R<f?R++:b.level===o&&P<=q&&(yn(b,E,O),R++,R===h&&T.destroy());break;case(c&&l):P=new Date(b.timestamp),z=new Date(u),q=new Date(_),P>=z&&P<=q&&R<f?R++:P>=z&&P<=q&&(yn(b,E,O),R++,R===h&&T.destroy());break;case i:b.level===o&&R<f?R++:b.level===o&&(yn(b,E,O),R++,R===h&&T.destroy());break;case c:P=new Date(b.timestamp),z=new Date(u),P>=z&&R<f?R++:P>=z&&R>=f&&(yn(b,E,O),R++,R===h&&T.destroy());break;case l:P=new Date(b.timestamp),q=new Date(_),P<=q&&R<f?R++:P<=q&&R>=f&&(yn(b,E,O),R++,R===h&&T.destroy());break;default:R<f?R++:(yn(b,E,O),R++,R===h&&T.destroy())}}return a(U,"onLogMessage"),await h2(T,"close"),O}a(A2,"readLog");function yn(e,t,r){t==="desc"?O2(e,r):t==="asc"?N2(e,r):r.push(e)}a(yn,"pushLineToResult");function O2(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(O2,"insertDescending");function N2(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(N2,"insertAscending")});var jl=m((oue,Fw)=>{"use strict";var Hm=require("joi"),{string:Zl,boolean:Bw,date:b2}=Hm.types(),y2=Ue(),{validateSchemaExists:sue,validateTableExists:nue,validateSchemaName:iue}=ss(),I2=g(),w2=be(),Hw=W();Hw.initSync();var C2=Zl.invalid(Hw.get(I2.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(w2.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(),qw={operation:Zl.valid("add_node","update_node"),node_name:C2,subscriptions:Hm.array().items({table:Zl.optional(),schema:Zl.required(),subscribe:Bw.required(),publish:Bw.required().custom(D2),start_time:b2.iso()}).min(1).required()};function U2(e){return y2.validateBySchema(e,Hm.object(qw))}a(U2,"addUpdateNodeValidator");function D2(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(D2,"checkForFalsy");Fw.exports={addUpdateNodeValidator:U2,validation_schema:qw}});var xw=m((cue,Gw)=>{var L2=Ue(),M2={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Gw.exports=function(e){return L2.validateObject(e,M2)}});var e_=m((uue,kw)=>{"use strict";var P2=g().OPERATIONS_ENUM,qm=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=P2.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};kw.exports=qm});var $w=m((_ue,Vw)=>{"use strict";var v2={OPERATION:"operation",REFRESH:"refresh"},Fm=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Gm=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};Vw.exports={JWTTokens:Fm,TOKEN_TYPE_ENUM:v2,JWTRSAKeys:Gm}});var rc=m((Eue,Qw)=>{"use strict";var tc=require("jsonwebtoken"),xm=require("fs-extra"),km=k(),Ir=g(),{handleHDBError:Vt,hdb_errors:B2}=Q(),{HTTP_STATUS_CODES:$t,AUTHENTICATION_ERROR_MSGS:Yt}=B2,ec=F(),Yw=il(),Ym=br(),H2=ir().update,q2=e_(),F2=xs(),{UserEventMsg:G2}=Fr(),In=W();In.initSync();var Vm=require("path"),{JWTTokens:x2,JWTRSAKeys:k2,TOKEN_TYPE_ENUM:t_}=$w(),V2=In.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?In.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",$2=In.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?In.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",r_="RS256",$m;Qw.exports={createTokens:Y2,validateOperationToken:W2,refreshOperationToken:K2,validateRefreshToken:Ww};async function Y2(e){if(km.isEmpty(e)||typeof e!="object")throw Vt(new Error,Yt.INVALID_AUTH_OBJECT,$t.BAD_REQUEST,void 0,void 0,!0);if(km.isEmpty(e.username))throw Vt(new Error,Yt.USERNAME_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);if(km.isEmpty(e.password))throw Vt(new Error,Yt.PASSWORD_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Ym.findAndValidateUser(e.username,e.password),!t)throw Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw ec.error(E),Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}let r=await s_(),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 Kw(i,r.private_key,r.passphrase),c=await tc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:$2,algorithm:r_,subject:t_.REFRESH}),u=Yw.hash(c),l=new q2(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await H2(l)}catch(E){ec.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw Vt(new Error,Yt.REFRESH_TOKEN_SAVE_FAILED,$t.INTERNAL_SERVER_ERROR);return F2.signalUserChange(new G2(process.pid)),new x2(o,c)}a(Y2,"createTokens");async function Kw(e,t,r){return await tc.sign(e,{key:t,passphrase:r},{expiresIn:V2,algorithm:r_,subject:t_.OPERATION})}a(Kw,"signOperationToken");async function s_(){if($m===void 0)try{let e=Vm.join(In.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Vm.join(In.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Vm.join(In.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await xm.readFile(e)).toString(),n=(await xm.readFile(t)).toString(),i=(await xm.readFile(r)).toString();$m=new k2(i,n,s)}catch(e){throw ec.error(e),Vt(new Error,Yt.NO_ENCRYPTION_KEYS,$t.INTERNAL_SERVER_ERROR)}return $m}a(s_,"getJWTRSAKeys");async function K2(e){if(!e)throw Vt(new Error,Yt.INVALID_BODY,$t.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Vt(new Error,Yt.REFRESH_TOKEN_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);await Ww(e.refresh_token);let t=await s_(),r=await tc.decode(e.refresh_token);return{operation_token:await Kw({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(K2,"refreshOperationToken");async function W2(e){try{let t=await s_(),r=await tc.verify(e,t.public_key,{algorithms:r_,subject:t_.OPERATION});return await Ym.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ec.warn(t),t.name&&t.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}}a(W2,"validateOperationToken");async function Ww(e){let t;try{let r=await s_(),s=await tc.verify(e,r.public_key,{algorithms:r_,subject:t_.REFRESH});t=await Ym.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ec.warn(r),r.name&&r.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}if(!Yw.validate(t.refresh_token,e))throw Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED);return t}a(Ww,"validateRefreshToken")});var Km=m((mue,Xw)=>{"use strict";var Q2=xw(),fo=require("passport"),z2=require("passport-local").Strategy,J2=require("passport-http").BasicStrategy,X2=require("util"),Z2=br(),Jw=X2.callbackify(Z2.findAndValidateUser),hue=rr(),j2=g(),zw=rc();fo.use(new z2(function(e,t,r){Jw(e,t,r)}));fo.use(new J2(function(e,t,r){Jw(e,t,r)}));fo.serializeUser(function(e,t){t(null,e)});fo.deserializeUser(function(e,t){t(null,e)});function e3(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":fo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===j2.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?zw.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):zw.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:fo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(e3,"authorize");function t3(e,t){let r=Q2(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(t3,"checkPermissions");Xw.exports={authorize:e3,checkPermissions:t3}});var wn=m((pue,Zw)=>{"use strict";var Wm=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Qm=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};Zw.exports={Node:Wm,NodeSubscription:Qm}});var eC=m((Rue,jw)=>{"use strict";var r3=g().OPERATIONS_ENUM,zm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=r3.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};jw.exports=zm});var sc=m((Aue,tC)=>{"use strict";var Jm=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},Xm=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)}};tC.exports={RemotePayloadObject:Jm,RemotePayloadSubscription:Xm}});var sC=m((Nue,rC)=>{"use strict";var Zm=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}};rC.exports=Zm});var oC=m((Cue,iC)=>{"use strict";var s3=sC(),yue=ke(),nC=Ie(),n3=F(),{getSchemaPath:Iue,getTransactionAuditStorePath:wue}=Ce(),{getDatabases:i3}=(de(),re(Ne));iC.exports=o3;async function o3(e){let t=new s3;try{let r=i3()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await nC.environmentDataSize(schema_path,e.name),o=await nC.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){n3.warn(`unable to stat table dbi due to ${r}`)}return t}a(o3,"lmdbGetTableSize")});var cC=m((Due,aC)=>{"use strict";var jm=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}};aC.exports=jm});var ho=m((vue,dC)=>{"use strict";var a3=require("fs-extra"),c3=require("path"),Ut=require("systeminformation"),Cn=F(),u3=He(),eS=be(),i_=g(),l3=oC(),_C=En(),{getThreadInfo:uC}=Ve(),lS=W();lS.initSync();var _3=cC(),{openEnvironment:Mue}=Ie(),{getSchemaPath:Pue}=Ce(),{database:d3}=(de(),re(Ne)),n_;dC.exports={getHDBProcessInfo:nS,getNetworkInfo:oS,getDiskInfo:iS,getMemoryInfo:sS,getCPUInfo:rS,getTimeInfo:tS,getSystemInformation:aS,systemInformation:E3,getTableSize:cS,getMetrics:uS};function tS(){return Ut.time()}a(tS,"getTimeInfo");async function rS(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:l,..._}=await Ut.cpu();_.cpu_speed=await Ut.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:T,cpus:R,...O}=await Ut.currentLoad();return O.cpus=[],R.forEach(V=>{let{raw_load:$,raw_load_idle:U,raw_load_irq:b,raw_load_nice:P,raw_load_system:z,raw_load_user:q,...Oe}=V;O.cpus.push(Oe)}),_.current_load=O,_}catch(e){return Cn.error(`error in getCPUInfo: ${e}`),{}}}a(rS,"getCPUInfo");async function sS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Cn.error(`error in getMemoryInfo: ${e}`),{}}}a(sS,"getMemoryInfo");async function nS(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await a3.readFile(c3.join(lS.get(i_.CONFIG_PARAMS.ROOTPATH),i_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===i_.NODE_ERROR_CODES.ENOENT)Cn.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Cn.error(`error in getHDBProcessInfo: ${t}`),e}}a(nS,"getHDBProcessInfo");async function iS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Ut.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,...l}=await Ut.fsStats();return e.read_write=l,e.size=await Ut.fsSize(),e}catch(t){return Cn.error(`error in getDiskInfo: ${t}`),e}}a(iS,"getDiskInfo");async function oS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Ut.networkInterfaceDefault(),e.latency=await Ut.inetChecksite("google.com"),(await Ut.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:l,ieee8021xState:_,carrier_changes:d,...E}=s;e.interfaces.push(E)}),(await Ut.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Cn.error(`error in getNetworkInfo: ${t}`),e}}a(oS,"getNetworkInfo");async function aS(){if(n_!==void 0)return n_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Ut.osInfo();e=c;let u=await Ut.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,n_=e,n_}catch(t){return Cn.error(`error in getSystemInformation: ${t}`),e}}a(aS,"getSystemInformation");async function cS(){let e=[],t=await _C.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await l3(s));return e}a(cS,"getTableSize");async function uS(){let e=await _C.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=d3({database:r,table:n}).getStats();s[n]={puts:o.puts,deletes:o.deletes,txns:o.txns,pageFlushes:o.pageFlushes,writes:o.writes,pagesWritten:o.pagesWritten,timeDuringTxns:o.timeDuringTxns,timeStartTxns:o.timeStartTxns,timePageFlushes:o.timePageFlushes,timeSync:o.timeSync}}catch(i){Cn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(uS,"getMetrics");async function lC(){if(lS.get(i_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await u3.getNATSReferences(),r=await t.streams.info(eS.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(eS.WORK_QUEUE_CONSUMER_NAMES.stream_name,eS.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(lC,"getNatsStreamInfo");async function E3(e){let t=new _3;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await aS(),t.time=tS(),t.cpu=await rS(),t.memory=await sS(),t.disk=await iS(),t.network=await oS(),t.harperdb_processes=await nS(),t.table_size=await cS(),t.metrics=await uS(),t.threads=await uC(),t.replication=await lC(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await aS();break;case"time":t.time=tS();break;case"cpu":t.cpu=await rS();break;case"memory":t.memory=await sS();break;case"disk":t.disk=await iS();break;case"network":t.network=await oS();break;case"harperdb_processes":t.harperdb_processes=await nS();break;case"table_size":t.table_size=await cS();break;case"database_metrics":case"metrics":t.metrics=await uS();break;case"threads":t.threads=await uC();break;case"replication":t.replication=await lC();break;default:break}return t}a(E3,"systemInformation")});var _S=m((Fue,EC)=>{"use strict";var Hue=require("fs-extra"),que=F();EC.exports={version:f3,printVersion:m3,nodeVersion:h3};var Un=Va();function f3(){if(Un)return Un.version}a(f3,"version");function h3(){if(Un&&Un.engines&&Un.engines["preferred-node"])return Un.engines["preferred-node"]}a(h3,"nodeVersion");function m3(){Un&&console.log(`HarperDB Version ${Un.version}`)}a(m3,"printVersion")});var wr=m((Vue,SC)=>{"use strict";var S3=ir(),dS=k(),p3=require("util"),li=g(),fC=W();fC.initSync();var T3=Km(),hC=Ar(),{Node:xue,NodeSubscription:kue}=wn(),R3=ji(),g3=eC(),{RemotePayloadObject:A3,RemotePayloadSubscription:O3}=sc(),{handleHDBError:N3,hdb_errors:b3}=Q(),{HTTP_STATUS_CODES:y3,HDB_ERROR_MSGS:I3}=b3,w3=as(),C3=ho(),U3=_S(),{getDatabases:D3}=(de(),re(Ne)),L3=p3.promisify(T3.authorize),M3=hC.searchByHash,P3=hC.searchByValue;SC.exports={authHeaderToUser:v3,isEmpty:B3,getNodeRecord:H3,upsertNodeRecord:q3,buildNodePayloads:F3,checkClusteringEnabled:G3,getAllNodeRecords:x3,getSystemInfo:k3,reverseSubscription:mC};async function v3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await L3(t,null),e}a(v3,"authHeaderToUser");function B3(e){return e==null}a(B3,"isEmpty");async function H3(e){let t=new R3(li.SYSTEM_SCHEMA_NAME,li.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return M3(t)}a(H3,"getNodeRecord");async function q3(e){let t=new g3(li.SYSTEM_SCHEMA_NAME,li.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return S3.upsert(t)}a(q3,"upsertNodeRecord");function mC(e){if(dS.isEmpty(e.subscribe)||dS.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(mC,"reverseSubscription");function F3(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:l}=c,_=dS.getTableHashAttribute(u,l),{subscribe:d,publish:E}=mC(c),f=D3()[u]?.[l],h=new O3(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new A3(r,t,n,s)}a(F3,"buildNodePayloads");function G3(){if(!fC.get(li.CONFIG_PARAMS.CLUSTERING_ENABLED))throw N3(new Error,I3.CLUSTERING_NOT_ENABLED,y3.BAD_REQUEST,void 0,void 0,!0)}a(G3,"checkClusteringEnabled");async function x3(){let e=new w3(li.SYSTEM_SCHEMA_NAME,li.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await P3(e))}a(x3,"getAllNodeRecords");async function k3(){let e=await C3.getSystemInformation();return{hdb_version:U3.version(),node_version:e.node_version,platform:e.platform}}a(k3,"getSystemInfo")});var ES=m((Yue,bC)=>{"use strict";var o_=He(),pC=k(),TC=be(),RC=g(),a_=F(),gC=Za(),V3=yl(),{RemotePayloadObject:$3}=sc(),{handleHDBError:AC,hdb_errors:Y3}=Q(),{HTTP_STATUS_CODES:OC}=Y3,{NodeSubscription:NC}=wn();bC.exports=K3;async function K3(e,t){let r;try{r=await o_.request(`${t}.${TC.REQUEST_SUFFIX}`,new $3(RC.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),a_.trace("Response from remote describe all request:",r)}catch(o){a_.error(`addNode received error from describe all request to remote node: ${o}`);let c=o_.requestErrorHandler(o,"add_node",t);throw AC(new Error,c,OC.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===TC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw AC(new Error,o,OC.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===RC.SYSTEM_SCHEMA_NAME){await o_.createLocalTableStream(c,u);let h=new NC(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=pC.doesSchemaExist(c),_=s[c]!==void 0,d=u?pC.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(a_.trace(`addNode creating schema: ${c}`),await gC.createSchema({operation:"create_schema",schema:c})),!d&&E){a_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new V3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await gC.createTable(h)}await o_.createLocalTableStream(c,u);let f=new NC(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(K3,"reviewSubscriptions")});var l_=m((Wue,wC)=>{"use strict";var{handleHDBError:c_,hdb_errors:W3}=Q(),{HTTP_STATUS_CODES:u_}=W3,{addUpdateNodeValidator:Q3}=jl(),nc=F(),IC=g(),yC=be(),z3=k(),fS=He(),ic=wr(),J3=W(),X3=ES(),{Node:Z3,NodeSubscription:j3}=wn(),{broadcast:eX}=Ve(),tX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",rX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",sX=J3.get(IC.CONFIG_PARAMS.CLUSTERING_NODENAME);wC.exports=nX;async function nX(e,t=!1){nc.trace("addNode called with:",e),ic.checkClusteringEnabled();let r=Q3(e);if(r)throw c_(r,r.message,u_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await ic.getNodeRecord(s);if(!z3.isEmptyOrZeroLength(d))throw c_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,u_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await X3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=tX,o;let c=ic.buildNodePayloads(n,sX,IC.OPERATIONS_ENUM.ADD_NODE,await ic.getSystemInfo());nc.trace("addNode sending remote payload:",c);let u;try{u=await fS.request(`${s}.${yC.REQUEST_SUFFIX}`,c)}catch(d){nc.error(`addNode received error from request: ${d}`);let E=fS.requestErrorHandler(d,"add_node",s);throw c_(new Error,E,u_.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===yC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw c_(new Error,d,u_.INTERNAL_SERVER_ERROR,"error",d)}nc.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];nc.trace("Add node updating work stream for node:",s,"subscriptions:",f),await fS.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new j3(f.schema,f.table,f.publish,f.subscribe))}let _=new Z3(s,l,u.system_info);return await ic.upsertNodeRecord(_),eX({type:"nats_update"}),i.length>0?o.message=rX:o.message=`Successfully added '${s}' to manifest`,o}a(nX,"addNode")});var mS=m((zue,DC)=>{"use strict";var{handleHDBError:__,hdb_errors:iX}=Q(),{HTTP_STATUS_CODES:d_}=iX,{addUpdateNodeValidator:oX}=jl(),oc=F(),UC=g(),CC=be(),aX=k(),hS=He(),ac=wr(),cX=W(),{cloneDeep:uX}=require("lodash"),lX=ES(),{NodeSubscription:_X}=wn(),{broadcast:dX}=Ve(),EX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",fX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",hX=cX.get(UC.CONFIG_PARAMS.CLUSTERING_NODENAME);DC.exports=mX;async function mX(e){oc.trace("updateNode called with:",e),ac.checkClusteringEnabled();let t=oX(e);if(t)throw __(t,t.message,d_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=uX(await ac.getNodeRecord(r));if(aX.isEmptyOrZeroLength(s))throw __(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,d_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await lX(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=EX,o;let c=ac.buildNodePayloads(n,hX,UC.OPERATIONS_ENUM.UPDATE_NODE,await ac.getSystemInfo());oc.trace("updateNode sending remote payload:",c);let u;try{u=await hS.request(`${r}.${CC.REQUEST_SUFFIX}`,c)}catch(l){oc.error(`updateNode received error from request: ${l}`);let _=hS.requestErrorHandler(l,"update_node",r);throw __(new Error,_,d_.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===CC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw __(new Error,l,d_.INTERNAL_SERVER_ERROR,"error",l)}oc.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];oc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await hS.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await SX(s[0],n,u.system_info),i.length>0?o.message=fX:o.message=`Successfully updated '${r}'`,o}a(mX,"updateNode");async function SX(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 _X(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await ac.upsertNodeRecord(s),dX({type:"nats_update"})}a(SX,"updateNodeTable")});var BC=m((Xue,vC)=>{"use strict";var PC=require("joi"),{string:LC}=PC.types(),pX=Ue(),MC=g(),TX=W(),RX=be();vC.exports=gX;function gX(e){let t=LC.invalid(TX.get(MC.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(RX.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=PC.object({operation:LC.valid(MC.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return pX.validateBySchema(e,r)}a(gX,"removeNodeValidator")});var f_=m((jue,kC)=>{"use strict";var{handleHDBError:HC,hdb_errors:AX}=Q(),{HTTP_STATUS_CODES:qC}=AX,OX=BC(),cc=F(),FC=wr(),NX=k(),E_=g(),GC=be(),xC=He(),bX=W(),{RemotePayloadObject:yX}=sc(),{NodeSubscription:IX}=wn(),wX=eo(),CX=mn(),{broadcast:UX}=Ve(),DX=bX.get(E_.CONFIG_PARAMS.CLUSTERING_NODENAME);kC.exports=LX;async function LX(e){cc.trace("removeNode called with:",e),FC.checkClusteringEnabled();let t=OX(e);if(t)throw HC(t,t.message,qC.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await FC.getNodeRecord(r);if(NX.isEmptyOrZeroLength(s))throw HC(new Error,`Node '${r}' was not found.`,qC.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new yX(E_.OPERATIONS_ENUM.REMOVE_NODE,DX,[]),i,o=!1;try{i=await xC.request(`${r}.${GC.REQUEST_SUFFIX}`,n),cc.trace("Remove node reply from remote node:",r,i)}catch(u){cc.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];cc.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new IX(_.schema,_.table,!1,!1);await xC.updateWorkStream(d,r)}let c=new wX(E_.SYSTEM_SCHEMA_NAME,E_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await CX.deleteRecord(c),UX({type:"nats_update"}),i?.status===GC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(cc.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(LX,"removeNode")});var YC=m((tle,$C)=>{"use strict";var VC=require("joi"),{string:MX,array:PX}=VC.types(),vX=Ue(),BX=jl();$C.exports=HX;function HX(e){let t=VC.object({operation:MX.valid("configure_cluster").required(),connections:PX.items(BX.validation_schema).required()});return vX.validateBySchema(e,t)}a(HX,"configureClusterValidator")});var SS=m((sle,JC)=>{"use strict";var qX=g(),h_=F(),FX=k(),GX=f_(),xX=l_(),KC=wr(),kX=YC(),{handleHDBError:WC,hdb_errors:VX}=Q(),{HTTP_STATUS_CODES:QC}=VX,$X="Configure cluster complete.",YX="Failed to configure the cluster. Check the logs for more details.",KX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";JC.exports=WX;async function WX(e){h_.trace("configure cluster called with:",e),KC.checkClusteringEnabled();let t=kX(e);if(t)throw WC(t,t.message,QC.BAD_REQUEST,void 0,void 0,!0);let r=await KC.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(zC(GX,{operation:qX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);h_.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(zC(xX,f,f.node_name))}let c=await Promise.allSettled(i);h_.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"&&(h_.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(FX.isEmptyOrZeroLength(u))return{message:$X,connections:l};if(_)return{message:KX,failed_nodes:u,connections:l};throw WC(new Error,YX,QC.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(WX,"configureCluster");async function zC(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(zC,"functionWrapper")});var ZC=m((ile,XC)=>{"use strict";var m_=require("joi"),QX=Ue(),{validateSchemaExists:zX,validateTableExists:JX,validateSchemaName:XX}=ss(),ZX=m_.object({operation:m_.string().valid("purge_stream"),schema:m_.string().custom(zX).custom(XX).required(),table:m_.string().custom(JX).required()});function jX(e){return QX.validateBySchema(e,ZX)}a(jX,"purgeStreamValidator");XC.exports=jX});var pS=m((ale,jC)=>{"use strict";var{handleHDBError:e4,hdb_errors:t4}=Q(),{HTTP_STATUS_CODES:r4}=t4,s4=ZC(),n4=He(),i4=wr();jC.exports=o4;async function o4(e){let t=s4(e);if(t)throw e4(t,t.message,r4.BAD_REQUEST,void 0,void 0,!0);i4.checkClusteringEnabled();let{schema:r,table:s}=e;return await n4.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(o4,"purgeStream")});var gS=m((ule,iU)=>{"use strict";var RS=wr(),a4=He(),rU=W(),S_=g(),_i=be(),c4=k(),TS=F(),{RemotePayloadObject:u4}=sc(),{ErrorCode:eU}=require("nats"),tU=rU.get(S_.CONFIG_PARAMS.CLUSTERING_ENABLED),sU=rU.get(S_.CONFIG_PARAMS.CLUSTERING_NODENAME);iU.exports={clusterStatus:l4,buildNodeStatus:nU};async function l4(){let e={node_name:sU,is_enabled:tU,connections:[]};if(!tU)return e;let t=await RS.getAllNodeRecords();if(c4.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(nU(t[s],e.connections));return await Promise.allSettled(r),e}a(l4,"clusterStatus");async function nU(e,t){let r=e.name,s=new u4(S_.OPERATIONS_ENUM.CLUSTER_STATUS,sU,void 0,await RS.getSystemInfo()),n,i,o=_i.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await a4.request(_i.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===_i.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=_i.CLUSTER_STATUS_STATUSES.CLOSED,TS.error(`Error getting node status from ${r} `,n))}catch(u){TS.warn(`Error getting node status from ${r}`,u),u.code===eU.NoResponders?o=_i.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===eU.Timeout?o=_i.CLUSTER_STATUS_STATUSES.TIMEOUT:o=_i.CLUSTER_STATUS_STATUSES.CLOSED}let c=new _4(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!==S_.PRE_4_0_0_VERSION&&await RS.upsertNodeRecord(u)}catch(u){TS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(nU,"buildNodeStatus");function _4(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(_4,"NodeStatusObject")});var OS=m((_le,oU)=>{"use strict";var{handleHDBError:d4,hdb_errors:E4}=Q(),{HTTP_STATUS_CODES:f4}=E4,h4=He(),m4=wr(),AS=k(),p_=require("joi"),S4=Ue(),p4=2e3,T4=p_.object({timeout:p_.number().min(1),connected_nodes:p_.boolean(),routes:p_.boolean()});oU.exports=R4;async function R4(e){m4.checkClusteringEnabled();let t=S4.validateBySchema(e,T4);if(t)throw d4(t,t.message,f4.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||AS.autoCastBoolean(s),o=n===void 0||AS.autoCastBoolean(n),c={nodes:[]},u=await h4.getServerList(r??p4),l={};if(i)for(let _=0,d=u.length;_<d;_++){let E=u[_].statsz;E&&(l[u[_].server.name]=E.routes)}for(let _=0,d=u.length;_<d;_++){if(u[_].statsz)continue;let E=u[_].server,f=u[_].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[_].response_time};i&&(h.connected_nodes=l[E.name]?l[E.name].map(p=>p.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(p=>({host:p.split(":")[0],port:AS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(R4,"clusterNetwork")});var lU=m((Ele,uU)=>{"use strict";var NS=require("joi"),aU=Ue(),{route_constraints:cU}=Jf();uU.exports={setRoutesValidator:g4,deleteRoutesValidator:A4};function g4(e){let t=NS.object({server:NS.valid("hub","leaf").required(),routes:cU.required()});return aU.validateBySchema(e,t)}a(g4,"setRoutesValidator");function A4(e){let t=NS.object({routes:cU.required()});return aU.validateBySchema(e,t)}a(A4,"deleteRoutesValidator")});var yS=m((hle,fU)=>{"use strict";var di=Nr(),bS=k(),T_=g(),_U=lU(),{handleHDBError:dU,hdb_errors:O4}=Q(),{HTTP_STATUS_CODES:EU}=O4,N4="cluster routes successfully set",b4="cluster routes successfully deleted";fU.exports={setRoutes:y4,getRoutes:I4,deleteRoutes:w4};function y4(e){let t=_U.setRoutesValidator(e);if(t)throw dU(t,t.message,EU.BAD_REQUEST,void 0,void 0,!0);let r=di.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=bS.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"?di.updateConfigValue(T_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):di.updateConfigValue(T_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:N4,set:o,skipped:i}}a(y4,"setRoutes");function I4(){let e=di.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(I4,"getRoutes");function w4(e){let t=_U.deleteRoutesValidator(e);if(t)throw dU(t,t.message,EU.BAD_REQUEST,void 0,void 0,!0);let r=di.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let l=0,_=e.routes.length;l<_;l++){let d=e.routes[l],E=!1;for(let f=0,h=s.length;f<h;f++){let p=s[f];if(d.host===p.host&&d.port===p.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,p=n.length;h<p;h++){let T=n[h];if(d.host===T.host&&d.port===T.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=bS.isEmptyOrZeroLength(s)?null:s,di.updateConfigValue(T_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=bS.isEmptyOrZeroLength(n)?null:n,di.updateConfigValue(T_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:b4,deleted:i,skipped:o}}a(w4,"deleteRoutes")});var mU=m((Sle,hU)=>{"use strict";var uc=require("alasql"),Ei=require("recursive-iterator"),$r=F(),C4=k(),lc=g(),IS=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,D4(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=>lc.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=>!lc.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][lc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=U4(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=>!lc.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new uc.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 U4(e){return e.filter(t=>t[lc.PERMS_CRUD_ENUM.READ])}a(U4,"filterReadRestrictedAttrs");function D4(e,t,r,s,n){L4(e,t,r,s,n)}a(D4,"interpretAST");function _c(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(_c,"addSchemaTableToMap");function L4(e,t,r,s,n){if(!e){$r.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof uc.yy.Insert?B4(e,t,r):e instanceof uc.yy.Select?M4(e,t,r,s,n):e instanceof uc.yy.Update?P4(e,t,r):e instanceof uc.yy.Delete?v4(e,t,r):$r.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(L4,"getRecordAttributesAST");function M4(e,t,r,s,n){if(!e){$r.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(C4.isEmptyOrZeroLength(i)){$r.error("No schema specified");return}e.from.forEach(c=>{_c(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),_c(c.table,t,r,s,n)});let o=new Ei(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{$r.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(c.columnid)<0&&t.get(l).get(u).push(c.columnid)}if(e.where){let c=new Ei(e.where),u=e.from[0].tableid;for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid?l.tableid:u;if(!t.get(i).has(_))if(r.has(_))_=r.get(_);else{$r.info(`table specified as ${_} not found.`);continue}t.get(i).get(_).indexOf(l.columnid)<0&&t.get(i).get(_).push(l.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new Ei(c.on);for(let{node:l}of u)if(l&&l.columnid){let _=l.tableid,d=n.get(_);if(!t.get(d).has(_))if(r.has(_))_=r.get(_);else{$r.info(`table specified as ${_} not found.`);continue}t.get(d).get(_).indexOf(l.columnid)<0&&t.get(d).get(_).push(l.columnid)}}),e.order){let c=new Ei(e.order);for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid,_=s.has(l)?s.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{$r.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(M4,"getSelectAttributes");function P4(e,t,r){if(!e){$r.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Ei(e.columns),n=e.table.databaseid;_c(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&wS(e.table.tableid,n,i.columnid,t,r)}a(P4,"getUpdateAttributes");function v4(e,t,r){if(!e){$r.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Ei(e.where),n=e.table.databaseid;_c(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&wS(e.table.tableid,n,i.columnid,t,r)}a(v4,"getDeleteAttributes");function B4(e,t,r){if(!e){$r.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Ei(e.columns),n=e.into.databaseid;_c(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&wS(e.into.tableid,n,i.columnid,t,r)}a(B4,"getInsertAttributes");function wS(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(wS,"pushAttribute");hU.exports=IS});var DS=m((Tle,RU)=>{var R_=ya(),SU=require("chalk"),_r=F(),pU=require("prompt"),{promisify:H4}=require("util"),CS=g(),q4=require("fs-extra"),F4=require("path"),G4=k(),x4=_S(),TU=W();TU.initSync();var k4=require("moment"),V4=H4(pU.get),$4=F4.join(TU.getHdbBasePath(),CS.LICENSE_KEY_DIR_NAME,CS.LICENSE_FILE_NAME,CS.LICENSE_FILE_NAME);RU.exports={getFingerprint:K4,setLicense:Y4,parseLicense:US,register:W4,getRegistrationInfo:z4};async function Y4(e){if(e&&e.key&&e.company){try{_r.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await US(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw _r.error(r),_r.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Y4,"setLicense");async function K4(){let e={};try{e=await R_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw _r.error(r),_r.error(t),new Error(r)}return e}a(K4,"getFingerprint");async function US(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");_r.info("Validating license input...");let r=R_.validateLicense(e,t);if(_r.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(_r.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(_r.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{_r.info("writing license to disk"),await q4.writeFile($4,JSON.stringify({license_key:e,company:t}))}catch(s){throw _r.error("Failed to write License"),s}return"Registration successful."}a(US,"parseLicense");async function W4(){let e=await Q4();return US(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(W4,"register");async function Q4(){let e=await R_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:SU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:SU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{pU.start()}catch(s){_r.error(s)}let r;try{r=await V4(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(Q4,"promptForRegistration");async function z4(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await R_.getLicense()}catch(r){throw _r.error(`There was an error when searching licenses due to: ${r.message}`),r}if(G4.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=x4.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=k4.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(z4,"getRegistrationInfo")});var AU=m((gle,gU)=>{"use strict";var J4=be(),LS=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+J4.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"}};gU.exports=LS});var bU=m((Ole,NU)=>{"use strict";var OU=be(),MS=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+OU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+OU.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"}};NU.exports=MS});var IU=m((ble,yU)=>{"use strict";var PS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};yU.exports=PS});var CU=m((Ile,wU)=>{"use strict";var X4=be(),vS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+X4.SERVER_SUFFIX.ADMIN,this.password=r}};wU.exports=vS});var qS=m((Cle,LU)=>{"use strict";var dc=require("path"),N_=require("fs-extra"),Z4=AU(),j4=bU(),eZ=IU(),tZ=CU(),BS=br(),mo=k(),Kt=Nr(),O_=g(),g_=be(),{CONFIG_PARAMS:Xe}=O_,fc=F(),b_=W(),UU=vs(),HS=He(),Ec="clustering",rZ=1e4,DU=5;LU.exports={generateNatsConfig:sZ,removeNatsConfig:nZ};async function sZ(e=!1,t=void 0){b_.initSync();let r=b_.get(Xe.ROOTPATH),s=dc.join(r,Ec,g_.PID_FILES.HUB),n=dc.join(r,Ec,g_.PID_FILES.LEAF),i=Kt.getConfigFromFile(Xe.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=dc.join(r,Ec,g_.NATS_CONFIG_FILES.HUB_SERVER),c=dc.join(r,Ec,g_.NATS_CONFIG_FILES.LEAF_SERVER),u=Kt.getConfigFromFile(Xe.CLUSTERING_TLS_CERTIFICATE),l=Kt.getConfigFromFile(Xe.CLUSTERING_TLS_PRIVATEKEY),_=Kt.getConfigFromFile(Xe.CLUSTERING_TLS_CERT_AUTH),d=Kt.getConfigFromFile(Xe.CLUSTERING_TLS_INSECURE),E=Kt.getConfigFromFile(Xe.CLUSTERING_TLS_VERIFY),f=Kt.getConfigFromFile(Xe.CLUSTERING_NODENAME),h=Kt.getConfigFromFile(Xe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await HS.checkNATSServerInstalled()||y_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await BS.listUsers(),T=Kt.getConfigFromFile(Xe.CLUSTERING_USER),R=await BS.getClusterUser();(mo.isEmpty(R)||R.active!==!0)&&y_(`Invalid cluster user '${T}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await A_(Xe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await A_(Xe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await A_(Xe.CLUSTERING_HUBSERVER_NETWORK_PORT),await A_(Xe.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],V=[];for(let[Oe,et]of p.entries())et.role.role===O_.ROLE_TYPES_ENUM.CLUSTER_USER&&et.active&&(O.push(new tZ(et.username,UU.decrypt(et.hash))),V.push(new eZ(et.username,UU.decrypt(et.hash))));let $=[],{hub_routes:U}=Kt.getClusteringRoutes();if(!mo.isEmptyOrZeroLength(U))for(let Oe of U)$.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${Oe.host}:${Oe.port}`);let b=new Z4(Kt.getConfigFromFile(Xe.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,Kt.getConfigFromFile(Xe.CLUSTERING_HUBSERVER_CLUSTER_NAME),Kt.getConfigFromFile(Xe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),$,O,V);_==null&&(delete b.tls.ca_file,delete b.leafnodes.tls.ca_file),t=mo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===O_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await N_.writeJson(o,b),fc.trace(`Hub server config written to ${o}`));let P=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,z=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,q=new j4(Kt.getConfigFromFile(Xe.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[P],[z],O,V,u,l,_,d);_==null&&delete q.tls.ca_file,(t===void 0||t===O_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await N_.writeJson(c,q),fc.trace(`Leaf server config written to ${c}`))}a(sZ,"generateNatsConfig");async function A_(e){let t=b_.get(e);return mo.isEmpty(t)&&y_(`port undefined for '${e}'`),await mo.isPortTaken(t)&&y_(`'${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(A_,"isPortAvailable");function y_(e){let t=`Error generating clustering config: ${e}`;fc.error(t),console.error(t),process.exit(1)}a(y_,"generateNatsConfigError");async function nZ(e){let{port:t,config_file:r}=HS.getServerConfig(e),{username:s,decrypt_hash:n}=await BS.getClusterUser(),i=0,o=500;for(;i<DU;){try{let l=await HS.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){fc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=DU)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check the ${e} log for further details.`);await mo.async_set_timeout(o*i)}let c="0".repeat(rZ),u=dc.join(b_.get(Xe.ROOTPATH),Ec,r);await N_.writeFile(u,c),await N_.remove(u),fc.notify(e,"started.")}a(nZ,"removeNatsConfig")});var qU=m((Dle,HU)=>{"use strict";var dr=W(),iZ=ya(),oe=g(),hc=be(),$s=require("path"),{PACKAGE_ROOT:w_}=g(),MU=W(),I_=k(),So="/dev/null",oZ=$s.join(w_,"launchServiceScripts"),PU=$s.join(w_,"utility/scripts"),aZ=$s.join(PU,oe.HDB_RESTART_SCRIPT),vU=$s.resolve(w_,"dependencies",`${process.platform}-${process.arch}`,hc.NATS_BINARY_NAME);function BU(){let t=iZ.licenseSearch().ram_allocation||oe.RAM_ALLOCATION_ENUM.DEFAULT,r=oe.MEM_SETTING_KEY+t,s={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return I_.noBootFile()&&(s[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=I_.getEnvCliRootPath()),{name:oe.PROCESS_DESCRIPTORS.HDB,script:oe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:w_}}a(BU,"generateMainServerConfig");var cZ=9930;function uZ(){dr.initSync(!0);let e=dr.get(oe.CONFIG_PARAMS.ROOTPATH),t=$s.join(e,"clustering",hc.NATS_CONFIG_FILES.HUB_SERVER),r=$s.join(dr.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=MU.get(oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=hc.LOG_LEVEL_FLAGS[dr.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==cZ?"-"+s:""),script:vU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return dr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=So,i.error_file=So),i}a(uZ,"generateNatsHubServerConfig");var lZ=9940;function _Z(){dr.initSync(!0);let e=dr.get(oe.CONFIG_PARAMS.ROOTPATH),t=$s.join(e,"clustering",hc.NATS_CONFIG_FILES.LEAF_SERVER),r=$s.join(dr.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=MU.get(oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=hc.LOG_LEVEL_FLAGS[dr.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==lZ?"-"+s:""),script:vU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return dr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=So,i.error_file=So),i}a(_Z,"generateNatsLeafServerConfig");function dZ(){dr.initSync();let e=$s.join(dr.get(oe.CONFIG_PARAMS.LOGGING_ROOT),oe.LOG_NAMES.HDB),t={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:oe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:oZ,autorestart:!1};return dr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=So,t.error_file=So),t}a(dZ,"generateClusteringUpgradeV4ServiceConfig");function EZ(){let e={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.RESTART_HDB};return I_.noBootFile()&&(e[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=I_.getEnvCliRootPath()),{...{name:oe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:PU},script:aZ}}a(EZ,"generateRestart");function fZ(){return{apps:[BU()]}}a(fZ,"generateAllServiceConfigs");HU.exports={generateAllServiceConfigs:fZ,generateMainServerConfig:BU,generateRestart:EZ,generateNatsHubServerConfig:uZ,generateNatsLeafServerConfig:_Z,generateClusteringUpgradeV4ServiceConfig:dZ}});var jU=m((qle,ZU)=>{"use strict";var Re=g(),hZ=k(),mc=qS(),Sc=He(),Es=be(),Dn=qU(),C_=W(),Ys=F(),mZ=wr(),{startWorker:FU,onMessageFromWorkers:SZ}=Ve(),pZ=ho(),TZ=require("util"),xU=require("child_process"),{execFile:RZ}=xU,Mle=TZ.promisify(xU.exec),Ple=require("systeminformation"),fe;ZU.exports={enterPM2Mode:gZ,start:fi,stop:FS,reload:kU,restart:VU,list:GS,describe:YU,connect:Ks,kill:yZ,startAllServices:IZ,startService:xS,getUniqueServicesList:KU,restartAllServices:wZ,isServiceRegistered:WU,reloadStopStart:QU,restartHdb:$U,deleteProcess:NZ,startClusteringProcesses:JU,startClusteringThreads:XU,isHdbRestartRunning:bZ,isClusteringRunning:UZ,stopClustering:CZ,reloadClustering:DZ};var{PACKAGE_ROOT:vle}=g(),Ble=g(),{loggerWithTag:Hle}=Ys,pc=!1;SZ(e=>{e.type==="restart"&&C_.initSync(!0)});function gZ(){pc=!0}a(gZ,"enterPM2Mode");function Ks(){return fe||(fe=require("pm2")),new Promise((e,t)=>{fe.connect((r,s)=>{Ys.setupConsoleLogging(),r&&t(r),e(s)})})}a(Ks,"connect");var Wt,AZ=10,GU;function fi(e){if(pc)return OZ(e);let t=RZ(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Wt.indexOf(t);i>-1&&Wt.splice(i,1),!GU&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<AZ&&fi(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=C_.get(Re.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&Es.LOG_LEVEL_HIERARCHY[i]>=Es.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Es.LOG_LEVELS.ERR||l===Es.LOG_LEVELS.WRN?Ys.OUTPUTS.STDERR:Ys.OUTPUTS.STDOUT;Ys.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=Es.LOG_LEVELS[d]}if(Es.LOG_LEVEL_HIERARCHY[i]>=Es.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===Es.LOG_LEVELS.ERR||l===Es.LOG_LEVELS.WRN?Ys.OUTPUTS.STDERR:Ys.OUTPUTS.STDOUT;Ys.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Wt){Wt=[];let n=a(()=>{GU=!0,Wt&&(Wt.map(i=>i.kill()),process.exit(0))},"kill_children");process.on("exit",n),process.on("SIGINT",n),process.on("SIGQUIT",n),process.on("SIGTERM",n)}Wt.push(t)}a(fi,"start");function OZ(e){return new Promise(async(t,r)=>{try{await Ks()}catch(s){r(s)}fe.start(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(OZ,"startWithPM2");function FS(e){if(!pc){for(let t of Wt||[])t.name===e&&(Wt.splice(Wt.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Ks()}catch(s){r(s)}fe.stop(e,async(s,n)=>{s&&(fe.disconnect(),r(s)),fe.delete(e,(i,o)=>{i&&(fe.disconnect(),r(s)),fe.disconnect(),t(o)})})})}a(FS,"stop");function kU(e){return new Promise(async(t,r)=>{try{await Ks()}catch(s){r(s)}fe.reload(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(kU,"reload");function VU(e){if(!pc)for(let t of Wt||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Ks()}catch(s){r(s)}fe.restart(e,(s,n)=>{fe.disconnect(),t(n)})})}a(VU,"restart");function NZ(e){return new Promise(async(t,r)=>{try{await Ks()}catch(s){r(s)}fe.delete(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(NZ,"deleteProcess");async function $U(){await fi(Dn.generateRestart())}a($U,"restartHdb");async function bZ(){let e=await GS();for(let t in e)if(e[t].name===Re.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(bZ,"isHdbRestartRunning");function GS(){return new Promise(async(e,t)=>{try{await Ks()}catch(r){t(r)}fe.list((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(GS,"list");function YU(e){return new Promise(async(t,r)=>{try{await Ks()}catch(s){r(s)}fe.describe(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(YU,"describe");function yZ(){if(!pc){for(let e of Wt||[])e.kill();Wt=[];return}return new Promise(async(e,t)=>{try{await Ks()}catch(r){t(r)}fe.killDaemon((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(yZ,"kill");async function IZ(){try{await JU(),await XU(),await fi(Dn.generateAllServiceConfigs())}catch(e){throw fe.disconnect(),e}}a(IZ,"startAllServices");async function xS(e){try{let t;switch(e=e.toLowerCase(),e){case Re.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Dn.generateMainServerConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Dn.generateNatsIngestServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Dn.generateNatsReplyServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Dn.generateNatsHubServerConfig(),await fi(t),await mc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Dn.generateNatsLeafServerConfig(),await fi(t),await mc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Dn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await fi(t)}catch(t){throw fe.disconnect(),t}}a(xS,"startService");async function KU(){try{let e=await GS(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw fe.disconnect(),e}}a(KU,"getUniqueServicesList");async function wZ(e=[]){try{let t=!1,r=await KU();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Re.PROCESS_DESCRIPTORS.HDB?t=!0:await VU(o))}t&&await QU(Re.PROCESS_DESCRIPTORS.HDB)}catch(t){throw fe.disconnect(),t}}a(wZ,"restartAllServices");async function WU(e){if(Wt?.find(r=>r.name===e))return!0;let t=await pZ.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(WU,"isServiceRegistered");async function QU(e){let t=e===Re.PROCESS_DESCRIPTORS.HDB?C_.get(Re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):C_.get(Re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await YU(e),s=hZ.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await FS(e),await xS(e)):e===Re.PROCESS_DESCRIPTORS.HDB?await $U():await kU(e)}a(QU,"reloadStopStart");var zU;async function JU(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];await xS(t)}}a(JU,"startClusteringProcesses");async function XU(){zU=FU(Re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Sc.createWorkQueueStream(Es.WORK_QUEUE_CONSUMER_NAMES),await Sc.updateIngestStreamConsumer(),await Sc.updateLocalStreams();let e=await mZ.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Re.PRE_4_0_0_VERSION){Ys.info("Starting clustering upgrade 4.0.0 process"),FU(Re.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(XU,"startClusteringThreads");async function CZ(){for(let e in Re.CLUSTERING_PROCESSES)if(e!==Re.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Re.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await zU.terminate();else{let t=Re.CLUSTERING_PROCESSES[e];await FS(t)}}a(CZ,"stopClustering");async function UZ(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];if(await WU(t)===!1)return!1}return!0}a(UZ,"isClusteringRunning");async function DZ(){await mc.generateNatsConfig(!0),await Sc.reloadNATSHub(),await Sc.reloadNATSLeaf(),await mc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await mc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(DZ,"reloadClustering")});var QS=m((Gle,iD)=>{"use strict";var LZ=require("minimist"),{isMainThread:$S,parentPort:rD}=require("worker_threads"),qe=g(),{PROCESS_DESCRIPTORS_VALIDATE:Tc}=qe,hs=F(),YS=k(),U_=qS(),po=He(),kS=be(),sD=Nr(),ms=jU(),eD=ho(),MZ=bE(),{restartWorkers:D_,onMessageByType:PZ}=Ve(),{handleHDBError:vZ,hdb_errors:BZ}=Q(),{HTTP_STATUS_CODES:HZ}=BZ,L_=W();L_.initSync();var Rc=`Restarting HarperDB. This may take up to ${qe.RESTART_TIMEOUT_MS/1e3} seconds.`,qZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",tD="Clustering is not enabled so cannot be restarted",FZ="Invalid service",hi,Yr;iD.exports={restart:nD,restartService:KS};$S&&PZ(qe.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?KS({service:e.workerType}):nD({operation:"restart"})});async function nD(e){Yr=Object.keys(e).length===0,hi=await ms.isServiceRegistered(qe.HDB_PROC_DESCRIPTOR);let t=LZ(process.argv);if(t.service){await KS(t);return}if(Yr&&!hi){console.error(qZ);return}if(Yr&&console.log(Rc),hi){ms.enterPM2Mode(),hs.notify(Rc);let r=MZ(Object.keys(qe.CONFIG_PARAM_MAP),!0);return YS.isEmptyOrZeroLength(Object.keys(r))||sD.updateConfigValue(void 0,void 0,r,!0,!0),xZ(),Rc}return $S?(hs.notify(Rc),await WS(),setTimeout(()=>{D_()},50)):rD.postMessage({type:qe.ITC_EVENT_TYPES.RESTART}),Rc}a(nD,"restart");async function KS(e){let{service:t}=e;if(qe.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw vZ(new Error,FZ,HZ.BAD_REQUEST,void 0,void 0,!0);if(hi=await ms.isServiceRegistered(qe.HDB_PROC_DESCRIPTOR),!$S)return rD.postMessage({type:qe.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Tc.clustering:if(!L_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=tD;break}Yr&&console.log("Restarting clustering"),hs.notify("Restarting clustering"),await WS();break;case Tc.clustering_config:case Tc["clustering config"]:if(!L_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=tD;break}Yr&&console.log("Restarting clustering_config"),hs.notify("Restarting clustering_config"),await ms.reloadClustering();break;case"custom_functions":case"custom functions":case Tc.harperdb:case Tc.http_workers:if(Yr&&!hi){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Yr&&console.log("Restarting http_workers"),hs.notify("Restarting http_workers"),hi?await ms.restart(qe.HDB_PROC_DESCRIPTOR):setTimeout(()=>{D_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(hs.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(KS,"restartService");async function GZ(){await po.publishToStream(`${kS.SUBJECT_PREFIXES.TXN}.${kS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,kS.WORK_QUEUE_CONSUMER_NAMES.stream_name,po.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(GZ,"postDummyNatsMsg");async function xZ(){await WS(),await ms.restart(qe.HDB_PROC_DESCRIPTOR),await YS.async_set_timeout(2e3),L_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await VS(),Yr&&(await po.closeConnection(),process.exit(0))}a(xZ,"restartPM2Mode");async function WS(){if(!sD.getConfigFromFile(qe.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await eD.getHDBProcessInfo()).clustering.length===0)hs.trace("Clustering not running, restart will start clustering services"),await U_.generateNatsConfig(!0),await ms.startClusteringProcesses(),await ms.startClusteringThreads(),await VS(),Yr&&await po.closeConnection();else{await GZ(),await U_.generateNatsConfig(!0),hi?(hs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ms.restart(qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ms.restart(qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await eD.getHDBProcessInfo()).clustering.forEach(n=>{hs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await YS.async_set_timeout(3e3),await VS(),await po.updateLocalStreams(),Yr&&await po.closeConnection(),hs.trace("Restart clustering restarting ingest and reply service threads");let t=D_(qe.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=D_(qe.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(WS,"restartClustering");async function VS(){await U_.removeNatsConfig(qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await U_.removeNatsConfig(qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(VS,"removeNatsConfig")});var mD=m((Vle,hD)=>{"use strict";var kle=require("lodash"),Qt=g(),{handleHDBError:oD,hdb_errors:kZ}=Q(),{HDB_ERROR_MSGS:VZ,HTTP_STATUS_CODES:$Z}=kZ,zS=F();hD.exports={getRolePermissions:KZ};var mi=Object.create(null),YZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),lD=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),_D=a((e=!1,t=!1,r=!1,s=!1)=>({[Qt.PERMS_CRUD_ENUM.READ]:e,[Qt.PERMS_CRUD_ENUM.INSERT]:t,[Qt.PERMS_CRUD_ENUM.UPDATE]:r,[Qt.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),JS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,..._D(t,r,s,n)}),"table_perms_template"),aD=a((e,t=_D())=>({attribute_name:e,describe:fD(t),[gc]:t[gc],[XS]:t[XS],[ZS]:t[ZS]}),"attr_perms_template"),cD=a((e,t=!1)=>({attribute_name:e,describe:t,[gc]:t}),"timestamp_attr_perms_template"),{READ:gc,INSERT:XS,UPDATE:ZS}=Qt.PERMS_CRUD_ENUM,dD=Object.values(Qt.PERMS_CRUD_ENUM),ED=[gc,XS,ZS];function KZ(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Qt.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(mi[t]&&mi[t].key===s)return mi[t].perms;let n=WZ(e,r);return mi[t]?mi[t].key=s:mi[t]=YZ(s),mi[t].perms=n,n}catch(r){if(!e[Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Qt.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw zS.error(s),zS.debug(r),oD(new Error,VZ.OUTDATED_PERMS_TRANSLATION_ERROR,$Z.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
9
|
+
${r.stack}`;throw zS.error(s),oD(new Error)}}}a(KZ,"getRolePermissions");function WZ(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Qt.SYSTEM_SCHEMA_NAME]=s[Qt.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=QZ(t[i]);return}r[i]=lD(),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=zZ(c,u);r[i].describe||dD.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=JS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=JS()})}),r}a(WZ,"translateRolePermissions");function QZ(e){let t=lD(!0);return Object.keys(e).forEach(r=>{t.tables[r]=JS(!0,!0,!0,!0,!0)}),t}a(QZ,"createStructureUserPermissions");function zZ(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((l,_)=>{let{attribute_name:d}=_,E=_;return Qt.TIME_STAMP_NAMES.includes(d)&&(E=cD(d,_[gc])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=aD(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=fD(_),n.attribute_permissions.push(_),c||JZ(_,u)}else if(l!==o){let _;Qt.TIME_STAMP_NAMES.includes(l)?_=cD(l):_=aD(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=uD(n),n}else return e.describe=uD(e),e}a(zZ,"getTableAttrPerms");function uD(e){return dD.filter(t=>e[t]).length>0}a(uD,"getSchemaTableDescribePerm");function fD(e){return ED.filter(t=>e[t]).length>0}a(fD,"getAttributeDescribePerm");function JZ(e,t){ED.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(JZ,"checkForHashPerms")});var SD={};tt(SD,{Resources:()=>M_,keyArrayToString:()=>To,resetResources:()=>XZ,resources:()=>Ln});function XZ(){return Ln=new M_}function To(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var M_,Ln,Ac=Se(()=>{Yn();M_=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 We(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(XZ,"resetResources");a(To,"keyArrayToString")});var Ro,jS=Se(()=>{Ro=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 Oc={};tt(Oc,{authentication:()=>OD,login:()=>oj,logout:()=>aj,start:()=>ij});async function OD(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?tj?ej:[]:jZ?ZZ:[];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 P_&&(h["Access-Control-Allow-Credentials"]="true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),P_&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(P_){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let p=n.indexOf(";",h),T=n.indexOf("=",h);c=n.slice(T+1,p===-1?n.length:p),u=await TD.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,p)=>{let T=new H_.AuthAuditLog(f,h,Rt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);T.auth_strategy=p,c&&(T.session_id=c),e.headers.referer&&(T.referer=e.headers.referer),e.headers.origin&&(T.origin=e.headers.origin),h===Rt.AUTH_AUDIT_STATUS.SUCCESS?pD.notify(T):pD.error(T)},"authAuditLog"),_;if(s){if(_=go.get(s),!_){let[f,h]=s.split(" "),p,T;try{switch(f){case"Basic":[p,T]=atob(h).split(":"),_=p||T?await st.auth(p,T):null;break;case"Bearer":try{_=await(0,B_.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,B_.validateRefreshToken)(h),{status:-1}}catch{throw R}}break}}catch(R){return nj&&(go.get(h)||(go.set(h,h),l(p,Rt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:Ws({error:R.message},e)}}go.set(s,_),sj&&l(_.username,Rt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await st.auth(u.user,null,!1):rj&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,v_.getSuperUser)());P_&&(e.session.update=function(f){if(!c){c=(0,gD.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${c}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):d?.headers?.set&&d.headers.set("Set-Cookie",p)}return f.id=c,TD.put(f)},e.login=async function(f,h){e.user=await st.auth(f,h),e.session.update({user:e.user.username})},(_&&!u||u?.user?.username!==_?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let d=await t(e);if(!d)return d;d.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Ln.loginPath?(d.status=302,d.headers.set("Location",Ln.loginPath(e))):d.headers.set("WWW-Authenticate","Basic"));let E=o.length;if(E>0){let f=d.headers;f||(d.headers=f=new Ro);for(let h=0;h<E;){let p=o[h++];f.set(p,o[h++])}}return o=null,d}function ij({server:e,port:t}){e.request(OD,{port:t||"all"}),RD||(RD=!0,setInterval(()=>{go=new Map},Cr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),AD.user.addListener(()=>{go=new Map}))}async function oj(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 aj(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var v_,B_,gD,Cr,Rt,H_,AD,pD,ZZ,jZ,ej,tj,TD,P_,rj,sj,nj,go,RD,q_=Se(()=>{v_=C(br());ts();Ac();B_=C(rc());de();gD=require("uuid"),Cr=C(W()),Rt=C(g()),H_=C(F());Ao();AD=C(wa());jS();pD=(0,H_.loggerWithTag)("auth-event");Cr.initSync();ZZ=Cr.get(Rt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),jZ=Cr.get(Rt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),ej=Cr.get(Rt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),tj=Cr.get(Rt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);st.auth=v_.findAndValidateUser;TD=nt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),P_=Cr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,rj=Cr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,sj=Cr.get(Rt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,nj=Cr.get(Rt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,go=new Map;a(OD,"authentication");a(ij,"start");a(oj,"login");a(aj,"logout")});var UD=m((t_e,CD)=>{"use strict";var he=require("joi"),ND=require("fs-extra"),bD=require("path"),zs=Ue(),yD=W(),ID=g(),wD=F(),{hdb_errors:cj}=Q(),{HDB_ERROR_MSGS:Dt}=cj,Qs=/^[a-zA-Z0-9-_]+$/;CD.exports={getDropCustomFunctionValidator:lj,setCustomFunctionValidator:_j,addComponentValidator:hj,dropCustomFunctionProjectValidator:mj,packageComponentValidator:Sj,deployComponentValidator:pj,setComponentFileValidator:dj,getComponentFileValidator:fj,dropComponentFileValidator:Ej};function F_(e,t,r){try{let s=yD.get(ID.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=bD.join(s,t);return ND.existsSync(n)?e?t:r.message(Dt.PROJECT_EXISTS):e?r.message(Dt.NO_PROJECT):t}catch(s){return wD.error(s),r.message(Dt.VALIDATION_ERR)}}a(F_,"checkProjectExists");function Nc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Nc,"checkFilePath");function uj(e,t,r,s){try{let n=yD.get(ID.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=bD.join(n,e,t,r+".js");return ND.existsSync(i)?r:s.message(Dt.NO_FILE)}catch(n){return wD.error(n),s.message(Dt.VALIDATION_ERR)}}a(uj,"checkFileExists");function lj(e){let t=he.object({project:he.string().pattern(Qs).custom(F_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(Qs).custom(uj.bind(null,e.project,e.type)).custom(Nc).required().messages({"string.pattern.base":Dt.BAD_FILE_NAME})});return zs.validateBySchema(e,t)}a(lj,"getDropCustomFunctionValidator");function _j(e){let t=he.object({project:he.string().pattern(Qs).custom(F_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().custom(Nc).required(),function_content:he.string().required()});return zs.validateBySchema(e,t)}a(_j,"setCustomFunctionValidator");function dj(e){let t=he.object({project:he.string().pattern(Qs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(Nc).required(),payload:he.string().optional(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return zs.validateBySchema(e,t)}a(dj,"setComponentFileValidator");function Ej(e){let t=he.object({project:he.string().pattern(Qs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(Nc).optional()});return zs.validateBySchema(e,t)}a(Ej,"dropComponentFileValidator");function fj(e){let t=he.object({project:he.string().required(),file:he.string().custom(Nc).required(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return zs.validateBySchema(e,t)}a(fj,"getComponentFileValidator");function hj(e){let t=he.object({project:he.string().pattern(Qs).custom(F_.bind(null,!1)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return zs.validateBySchema(e,t)}a(hj,"addComponentValidator");function mj(e){let t=he.object({project:he.string().pattern(Qs).custom(F_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return zs.validateBySchema(e,t)}a(mj,"dropCustomFunctionProjectValidator");function Sj(e){let t=he.object({project:he.string().pattern(Qs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),skip_node_modules:he.boolean()});return zs.validateBySchema(e,t)}a(Sj,"packageComponentValidator");function pj(e){let t=he.object({project:he.string().pattern(Qs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),payload:he.string().optional().messages({"string.pattern.base":Dt.BAD_PACKAGE}),package:he.string().optional()});return zs.validateBySchema(e,t)}a(pj,"deployComponentValidator")});var sp=m((s_e,MD)=>{"use strict";var ye=require("fs-extra"),ep=require("fast-glob"),me=require("path"),DD=require("tar-fs"),Tj=require("uuid").v4,tp=require("normalize-path"),Ss=UD(),gt=F(),we=g(),Ke=W(),G_=Nr(),Rj=k(),{PACKAGE_ROOT:gj}=g(),{handleHDBError:ot,hdb_errors:Aj}=Q(),{HDB_ERROR_MSGS:Mn,HTTP_STATUS_CODES:at}=Aj,Oj=me.join(gj,"application-template"),rp=me.join(Ke.get(we.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function LD(){let e=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw ot(new Error,Mn.NOT_ENABLED,at.BAD_REQUEST,void 0,void 0,!0)}a(LD,"isCFEnabled");function Nj(){gt.trace("getting custom api status");let e={};try{e={is_enabled:Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw ot(new Error,Mn.FUNCTION_STATUS,at.INTERNAL_SERVER_ERROR,gt.ERR,t)}return e}a(Nj,"customFunctionsStatus");function bj(){gt.trace("getting custom api endpoints");let e={},t=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{ep.sync(tp(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:ep.sync(tp(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:ep.sync(tp(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw ot(new Error,Mn.GET_FUNCTIONS,at.INTERNAL_SERVER_ERROR,gt.ERR,r)}return e}a(bj,"getCustomFunctions");function yj(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Ss.getDropCustomFunctionValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);gt.trace("getting custom api endpoint file content");let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=me.join(r,s,n,i+".js");try{return ye.readFileSync(o,{encoding:"utf8"})}catch(c){throw ot(new Error,Mn.GET_FUNCTION,at.INTERNAL_SERVER_ERROR,gt.ERR,c)}}a(yj,"getCustomFunction");function Ij(e){LD(),e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Ss.setCustomFunctionValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);gt.trace("setting custom function file content");let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return ye.outputFileSync(me.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw ot(new Error,Mn.SET_FUNCTION,at.INTERNAL_SERVER_ERROR,gt.ERR,c)}}a(Ij,"setCustomFunction");function wj(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Ss.getDropCustomFunctionValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);gt.trace("dropping custom function file");let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return ye.unlinkSync(me.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw ot(new Error,Mn.DROP_FUNCTION,at.INTERNAL_SERVER_ERROR,gt.ERR,o)}}a(wj,"dropCustomFunction");function Cj(e){LD(),e.project&&(e.project=me.parse(e.project).name);let t=Ss.addComponentValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);gt.trace("adding component");let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=me.join(r,s);return ye.mkdirSync(n,{recursive:!0}),ye.copySync(Oj,n),`Successfully added project: ${s}`}catch(n){throw ot(new Error,Mn.ADD_FUNCTION,at.INTERNAL_SERVER_ERROR,gt.ERR,n)}}a(Cj,"addComponent");function Uj(e){e.project&&(e.project=me.parse(e.project).name);let t=Ss.dropCustomFunctionProjectValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);gt.trace("dropping custom function project");let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=Ke.get(we.CONFIG_PARAMS.APPS);if(!Rj.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 G_.updateConfigValue(we.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=me.join(r,s);return ye.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw ot(new Error,Mn.DROP_FUNCTION_PROJECT,at.INTERNAL_SERVER_ERROR,gt.ERR,i)}}a(Uj,"dropCustomFunctionProject");async function Dj(e){e.project&&(e.project=me.parse(e.project).name);let t=Ss.packageComponentValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;gt.trace("packaging component",s);let n;try{n=await ye.realpath(me.join(r,s))}catch(u){if(u.code!==we.NODE_ERROR_CODES.ENOENT)throw u;try{n=await ye.realpath(me.join(Ke.get(we.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(l){if(l.code===we.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await ye.ensureDir(rp);let i=me.join(rp,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(me.join(n,"node_modules"))}),DD.pack(n,o).pipe(ye.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=ye.readFileSync(i,{encoding:"base64"});return await ye.remove(i),{project:s,payload:c}}a(Dj,"packageComponent");async function Lj(e){e.project&&(e.project=me.parse(e.project).name);let t=Ss.deployComponentValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,package:i}=e;if(gt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");if(n){let o=me.join(r,s);i="file:"+o,await ye.ensureDir(o);let c,u;do c=me.join(rp,Tj()+".tar"),u=await ye.pathExists(c);while(u);await ye.outputFile(c,n,{encoding:"base64"});let l=ye.createReadStream(c);l.pipe(DD.extract(o)),await new Promise(_=>l.on("end",_)),await ye.unlink(c)}return G_.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a(Lj,"deployComponent");async function Mj(){let e=G_.getConfiguration(),t=[];for(let s in e)if(e[s]?.package){if(e[s].package.startsWith("file:"))continue;t.push(Object.assign(e[s],{name:s}))}let r=a(async(s,n)=>{let i=await ye.readdir(s,{withFileTypes:!0});for(let o of i){let c=o.name;if(c.startsWith(".")||c==="node_modules")continue;let u=me.join(s,c);if(await o.isDirectory()){let l={name:c,entries:[]};n.entries.push(l),await r(u,l)}else{let l=await ye.stat(u),_={name:me.basename(c),mtime:l.mtime,size:l.size};n.entries.push(_)}}return n},"walk_dir");return r(Ke.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:Ke.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(me.sep).slice(-1).pop(),entries:t})}a(Mj,"getComponents");async function Pj(e){let t=Ss.getComponentFileValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await ye.readFile(me.join(Ke.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file),r)}catch(s){throw s.code===we.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${me.join(e.project,e.file)}'`):s}}a(Pj,"getComponentFile");async function vj(e){let t=Ss.setComponentFileValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=me.join(Ke.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file);return e.payload!==void 0?(await ye.ensureFile(s),await ye.outputFile(s,e.payload,r)):await ye.ensureDir(s),"Successfully set component: "+e.file}a(vj,"setComponentFile");async function Bj(e){let t=Ss.dropComponentFileValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=e.file?me.join(e.project,e.file):e.project,s=me.join(Ke.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await ye.pathExists(s)&&await ye.remove(s),G_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(Bj,"dropComponent");MD.exports={customFunctionsStatus:Nj,getCustomFunctions:bj,getCustomFunction:yj,setCustomFunction:Ij,dropCustomFunction:wj,addComponent:Cj,dropCustomFunctionProject:Uj,packageComponent:Dj,deployComponent:Lj,getComponents:Mj,getComponentFile:Pj,setComponentFile:vj,dropComponent:Bj}});var np=m((i_e,vD)=>{"use strict";var ps=require("joi"),PD=Ue();vD.exports={readTransactionLogValidator:Hj,deleteTransactionLogsBeforeValidator:qj};function Hj(e){let t=ps.object({schema:ps.string().required(),table:ps.string().required(),from:ps.date().timestamp(),to:ps.date().timestamp(),limit:ps.number().min(1)});return PD.validateBySchema(e,t)}a(Hj,"readTransactionLogValidator");function qj(e){let t=ps.object({schema:ps.string().required(),table:ps.string().required(),timestamp:ps.date().timestamp().required()});return PD.validateBySchema(e,t)}a(qj,"deleteTransactionLogsBeforeValidator")});var k_=m((a_e,GD)=>{"use strict";var ip=g(),x_=He(),BD=k(),HD=W(),qD=vs(),{handleHDBError:Oo,hdb_errors:Fj}=Q(),{HTTP_STATUS_CODES:No}=Fj,{readTransactionLogValidator:Gj,deleteTransactionLogsBeforeValidator:xj}=np(),FD="This operation relies on clustering and cannot run with it disable.",kj="Logs successfully deleted from transaction log.",Vj="All logs successfully deleted from transaction log.";GD.exports={readTransactionLog:$j,deleteTransactionLogsBefore:Yj};async function*$j(e){let t=Gj(e);if(t)throw Oo(t,t.message,No.BAD_REQUEST,void 0,void 0,!0);if(!HD.get(ip.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Oo(new Error,FD,No.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=BD.checkSchemaTableExist(r,s);if(n)throw Oo(new Error,n,No.NOT_FOUND,void 0,void 0,!0);let i=qD.createNatsTableStreamName(r,s),o=await x_.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===ip.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}a($j,"readTransactionLog");async function Yj(e){let t=xj(e);if(t)throw Oo(t,t.message,No.BAD_REQUEST,void 0,void 0,!0);if(!HD.get(ip.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Oo(new Error,FD,No.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=BD.checkSchemaTableExist(r,s);if(i)throw Oo(new Error,i,No.NOT_FOUND,void 0,void 0,!0);let o=qD.createNatsTableStreamName(r,s),{jsm:c}=await x_.getNATSReferences(),u=await x_.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=kj,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=Vj):d=(await x_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(Yj,"deleteTransactionLogsBefore")});var K_=m((u_e,WD)=>{"use strict";var V_=require("joi"),$_=require("path"),xD=require("fs-extra"),{exec:Kj}=require("child_process"),Wj=require("util"),kD=Wj.promisify(Kj),bc=g(),{handleHDBError:bo,hdb_errors:Qj}=Q(),{HTTP_STATUS_CODES:yo}=Qj,Ic=W(),zj=Ue(),yc=F();Ic.initSync();var op=Ic.get(bc.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),VD="npm install --omit=dev --json",Jj=`${VD} --dry-run`;WD.exports={installModules:e5,auditModules:t5,installAllRootModules:Xj,uninstallRootModule:Zj,linkHarperdb:jj};async function Xj(e=!1){await Y_(),await wc(e?"npm install --ignore-scripts":"npm install",Ic.get(bc.CONFIG_PARAMS.ROOTPATH))}a(Xj,"installAllRootModules");async function Zj(e){await wc(`npm uninstall ${e}`,Ic.get(bc.CONFIG_PARAMS.ROOTPATH))}a(Zj,"uninstallRootModule");async function jj(){await Y_(),await wc(`npm link ${bc.PACKAGE_ROOT}`,Ic.get(bc.CONFIG_PARAMS.ROOTPATH))}a(jj,"linkHarperdb");async function wc(e,t=void 0){let{stdout:r,stderr:s}=await kD(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
|
|
10
|
+
`,""));return yc.trace(r,s),r.replace(`
|
|
11
|
+
`,"")}a(wc,"runCommand");async function e5(e){yc.info(`starting installModules for request: ${e}`);let t=KD(e);if(t)throw bo(t,t.message,yo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?Jj:VD;await Y_(),await YD(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=$_.join(op,u),_,d=null;try{let{stdout:E,stderr:f}=await kD(n,{cwd:l});_=E?E.replace(`
|
|
12
12
|
`,""):null,d=f?f.replace(`
|
|
13
|
-
`,""):null}catch(E){E.stderr?i[u].npm_error
|
|
14
|
-
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(GD,"parseNPMStdErr");async function Jj(e){Nc.info(`starting auditModules for request: ${e}`);let t=kD(e);if(t)throw Oo(t,t.message,No.BAD_REQUEST);let{projects:r}=e;await k_(),await xD(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=x_.join(rp,o);s[o]={npm_output:null,npm_error:null};try{let u=await yc("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=GD(u.stderr)}}return Nc.info(`finished auditModules with response ${s}`),s}a(Jj,"auditModules");async function k_(){try{return await yc("npm -v"),!0}catch{throw Oo(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",No.BAD_REQUEST,void 0,void 0,!0)}}a(k_,"checkNPMInstalled");async function xD(e){if(!Array.isArray(e)||e.length===0)throw Oo(new Error,"projects argument must be an array with at least 1 element",No.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=x_.join(rp,i.toString());if(!await HD.pathExists(o)){t.push(i);continue}let u=x_.join(o,"package.json");await HD.pathExists(u)||r.push(i)}if(t.length>0)throw Oo(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,No.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Oo(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,No.BAD_REQUEST,void 0,void 0,!0)}a(xD,"checkProjectPaths");function kD(e){let t=G_.object({projects:G_.array().min(1).items(G_.string()).required(),dry_run:G_.boolean().default(!1)});return $j.validateBySchema(e,t)}a(kD,"modulesValidator")});var YD=m((r_e,$D)=>{"use strict";var sp=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}};$D.exports=sp});var WD=m((n_e,KD)=>{"use strict";var np=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};KD.exports=np});var op=m((o_e,zD)=>{"use strict";var QD=YD(),Xj=WD(),{HDB_ERROR_MSGS:Zj}=rr(),ip=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Zj.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new QD(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new Xj(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new QD(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};zD.exports=ip});var W_=m((c_e,_L)=>{"use strict";var ap=ir(),$_=Rr(),Cr=Ja(),Cc=dn(),cp=hn(),jj=gm(),e5=mw(),Uc=Or(),Y_=Um(),ot=F(),t5=Mm(),r5=a_(),s5=ES(),n5=__(),i5=fS(),o5=hS(),a5=pS(),c5=RS(),up=OS(),Qs=G(),u5=dU(),lp=wS(),ZD=YS(),wr=R(),jD=dD(),l5=fo(),eL=ec(),tL=(v_(),re(gc)),rL=Ar(),Er=jS(),_5=require("alasql"),sL=F_(),nL=V_(),iL=op(),{handleHDBError:zt,hdb_errors:oL}=Q(),{HDB_ERROR_MSGS:At,HTTP_STATUS_CODES:Ic}=oL,P=new Map,aL="delete",Mn="insert",zs="read",mi="update",wc="describe",JD=Cc.describeSchema.name,XD=Cc.describeTable.name,cL={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},d5="catchup",E5="handleGetJob",f5="handleGetJobsByStartDate",K_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},h5=[Cr.createTable.name,Cr.createAttribute.name,Cr.dropTable.name,Cr.dropAttribute.name],uL={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},q=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};P.set(ap.insert.name,new q(!1,[Mn]));P.set(ap.update.name,new q(!1,[mi]));P.set(ap.upsert.name,new q(!1,[Mn,mi]));P.set($_.searchByConditions.name,new q(!1,[zs]));P.set($_.searchByHash.name,new q(!1,[zs]));P.set($_.searchByValue.name,new q(!1,[zs]));P.set($_.search.name,new q(!1,[zs]));P.set(Cr.createSchema.name,new q(!0,[]));P.set(Cr.createTable.name,new q(!0,[]));P.set(Cr.createAttribute.name,new q(!1,[Mn]));P.set(Cr.dropSchema.name,new q(!0,[]));P.set(Cr.dropTable.name,new q(!0,[]));P.set(Cr.dropAttribute.name,new q(!0,[]));P.set(Cc.describeSchema.name,new q(!1,[zs]));P.set(Cc.describeTable.name,new q(!1,[zs]));P.set(cp.deleteRecord.name,new q(!1,[aL]));P.set(Uc.addUser.name,new q(!0,[]));P.set(Uc.alterUser.name,new q(!0,[]));P.set(Uc.dropUser.name,new q(!0,[]));P.set(Uc.listUsersExternal.name,new q(!0,[]));P.set(Y_.listRoles.name,new q(!0,[]));P.set(Y_.addRole.name,new q(!0,[]));P.set(Y_.alterRole.name,new q(!0,[]));P.set(Y_.dropRole.name,new q(!0,[]));P.set(t5.name,new q(!0,[]));P.set(r5.name,new q(!0,[]));P.set(s5.name,new q(!0,[]));P.set(n5.name,new q(!0,[]));P.set(i5.name,new q(!0,[]));P.set(o5.name,new q(!0,[]));P.set(up.setRoutes.name,new q(!0,[]));P.set(up.getRoutes.name,new q(!0,[]));P.set(up.deleteRoutes.name,new q(!0,[]));P.set(rL.setConfiguration.name,new q(!0,[]));P.set(a5.clusterStatus.name,new q(!0,[]));P.set(c5.name,new q(!0,[]));P.set(lp.getFingerprint.name,new q(!0,[]));P.set(lp.setLicense.name,new q(!0,[]));P.set(cp.deleteFilesBefore.name,new q(!0,[]));P.set(cp.deleteAuditLogsBefore.name,new q(!0,[]));P.set(ZD.restart.name,new q(!0,[]));P.set(ZD.restartService.name,new q(!0,[]));P.set(jj.name,new q(!0,[]));P.set(e5.name,new q(!0,[zs]));P.set(l5.systemInformation.name,new q(!0,[]));P.set(rL.getConfiguration.name,new q(!0,[]));P.set(sL.readTransactionLog.name,new q(!0,[]));P.set(sL.deleteTransactionLogsBefore.name,new q(!0,[]));P.set(nL.installModules.name,new q(!0,[]));P.set(nL.auditModules.name,new q(!0,[]));P.set(eL.createTokens.name,new q(!1,[]));P.set(eL.refreshOperationToken.name,new q(!1,[]));P.set(tL.login.name,new q(!1,[]));P.set(tL.logout.name,new q(!1,[]));P.set(Er.customFunctionsStatus.name,new q(!0,[]));P.set(Er.getCustomFunctions.name,new q(!0,[]));P.set(Er.getComponents.name,new q(!0,[]));P.set(Er.getComponentFile.name,new q(!0,[]));P.set(Er.setComponentFile.name,new q(!0,[]));P.set(Er.dropComponent.name,new q(!0,[]));P.set(Er.getCustomFunction.name,new q(!0,[]));P.set(Er.setCustomFunction.name,new q(!0,[]));P.set(Er.dropCustomFunction.name,new q(!0,[]));P.set(Er.addComponent.name,new q(!0,[]));P.set(Er.dropCustomFunctionProject.name,new q(!0,[]));P.set(Er.packageComponent.name,new q(!0,[]));P.set(Er.deployComponent.name,new q(!0,[]));P.set(lp.getRegistrationInfo.name,new q(!1,[]));P.set(Uc.userInfo.name,new q(!1,[]));P.set(Cc.describeAll.name,new q(!1,[]));P.set(E5,new q(!1,[]));P.set(f5,new q(!0,[]));P.set(d5,new q(!0,[]));P.set(K_.CSV_DATA_LOAD,new q(!1,[Mn,mi]));P.set(K_.CSV_URL_LOAD,new q(!1,[Mn,mi]));P.set(K_.CSV_FILE_LOAD,new q(!1,[Mn,mi]));P.set(K_.IMPORT_FROM_S3,new q(!1,[Mn,mi]));P.set(uL.EXPORT_TO_S3,new q(!0,[]));P.set(uL.EXPORT_LOCAL,new q(!0,[]));P.set(wr.VALID_SQL_OPS_ENUM.DELETE,new q(!1,[aL]));P.set(wr.VALID_SQL_OPS_ENUM.SELECT,new q(!1,[zs]));P.set(wr.VALID_SQL_OPS_ENUM.INSERT,new q(!1,[Mn]));P.set(wr.VALID_SQL_OPS_ENUM.UPDATE,new q(!1,[mi]));_L.exports={verifyPerms:S5,verifyPermsAst:m5,verifyBulkLoadAttributePerms:T5};function m5(e,t,r){if(Qs.isEmptyOrZeroLength(e))throw ot.info("verify_perms_ast has an empty user parameter"),zt(new Error);if(Qs.isEmptyOrZeroLength(t))throw ot.info("verify_perms_ast has an empty user parameter"),zt(new Error);if(Qs.isEmptyOrZeroLength(r))throw ot.info("verify_perms_ast has a null operation parameter"),zt(new Error);try{let s=new iL,n=new u5(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw ot.info("No schemas defined in verifyPermsAst(), will not continue."),zt(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&cL[r])throw zt(new Error,At.DROP_SYSTEM,Ic.FORBIDDEN);if(c&&!u)return null;let l=jD.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof _5.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 _=lL(t,r,o,s);return _||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=n.getAttributesBySchemaTableName(E,d[f]),p=dp(t.role.permission,E,d[f]);_p(h,p,r,d[f],E,s)}}),s.getPermsResponse())}catch(s){throw zt(s)}}a(m5,"verifyPermsAst");function S5(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw ot.info("null required parameter in verifyPerms"),zt(new Error,At.DEFAULT_INVALID_REQUEST,Ic.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 iL;if(Qs.isEmptyOrZeroLength(e.hdb_user.role)||Qs.isEmptyOrZeroLength(e.hdb_user.role.permission))return ot.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(At.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,l=e.hdb_user.role.permission.structure_user,_=o.has(wr.SYSTEM_SCHEMA_NAME)||n===wr.SYSTEM_SCHEMA_NAME;if(_&&cL[r])throw zt(new Error,At.DROP_SYSTEM,Ic.FORBIDDEN);if(u&&!_||l===!0&&(r===Cr.createSchema.name||r===Cr.dropSchema.name))return null;if(h5.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=jD.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===JD||r===XD){if(n===wr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(At.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===JD&&(!d[n]||!d[n][wc]))return c.handleInvalidItem(At.SCHEMA_NOT_FOUND(n));if(r===XD&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][wc]))return c.handleInvalidItem(At.TABLE_NOT_FOUND(n,i))}}let E=lL(e.hdb_user,r,o,c,s);if(E)return E;if(P.get(r)&&P.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&wr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[wr.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(O=>O[wr.PERMS_CRUD_ENUM.READ]).forEach(O=>{p.push(O.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(N=>N.attribute),e.get_attributes=p)}let f=p5(e),h=dp(e.hdb_user.role.permission,n,i);return _p(f,h,r,i,n,c,s),c.getPermsResponse()}a(S5,"verifyPerms");function lL(e,t,r,s,n){if(Qs.arrayHasEmptyValues([e,t,r]))throw ot.info("hasPermissions has an invalid parameter"),zt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||P.get(t).requires_su))return null;if(!P.get(t))throw ot.info(`operation ${t} not found.`),zt(new Error,At.OP_NOT_FOUND(t),Ic.BAD_REQUEST);if(P.get(t)&&P.get(t).requires_su)return ot.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(At.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][wc]===!1){s.addInvalidItem(At.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(At.SCHEMA_NOT_FOUND(u));continue}let l=r.get(u);for(let _ of l){let d=o[u].tables[_];if(!d||d[wc]===!1)s.addInvalidItem(At.TABLE_NOT_FOUND(u,_));else try{let E=[],f=P.get(t).perms;!Qs.isEmpty(n)&&f.includes(n)&&(f=[n]);for(let h=0;h<f.length;h++){let p=f[h],S=d[p];(S==null||S===!1)&&(ot.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),E.push(p))}E.length>0&&s.addUnauthorizedTable(u,_,E)}catch(E){let f=At.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw ot.error(f),ot.error(E),zt(oL.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?s.getPermsResponse():null}a(lL,"hasPermissions");function _p(e,t,r,s,n,i,o){if(!e||!t)throw ot.info("no attributes specified in checkAttributePerms."),zt(new Error);let c=P.get(r).perms;if(!c||c==="")throw ot.info(`no permissions found for ${r} in checkAttributePerms().`),zt(new Error);if(Qs.isEmptyOrZeroLength(t))return ot.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[wc]===!1){i.addInvalidItem(At.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!==zs)throw zt(new Error,At.SYSTEM_TIMESTAMP_PERMS_ERR,Ic.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(At.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}a(_p,"checkAttributePerms");function p5(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){ot.info(r)}return t}a(p5,"getRecordAttributes");function dp(e,t,r){let s=new Map;if(Qs.isEmpty(e))return ot.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{ot.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(dp,"getAttributePermissions");function T5(e,t,r,s,n,i,o){let c=new Set(i),u=dp(e,s,n);_p(c,u,t,n,s,o,r)}a(T5,"verifyBulkLoadAttributePerms")});var z_=m((l_e,mL)=>{"use strict";mL.exports={evaluateSQL:L5,processAST:hL,convertSQLToAST:fL,checkASTPermissions:EL};var R5=ir(),dL=require("util"),g5=dL.callbackify(R5.insert),A5=Rr().search,O5=EI().update,N5=dL.callbackify(O5),b5=hI().convertDelete,Pn=require("alasql"),y5=W_(),Q_=F(),I5=Il(),w5=G(),Dc=R(),{hdb_errors:C5,handleHDBError:Ep}=Q(),{HTTP_STATUS_CODES:fp}=C5;I5(Pn);var U5=403,D5="There was a problem performing this insert. Please check the logs and try again.",hp=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function L5(e,t){let r=e.parsed_sql_object;if(!r){r=fL(e.sql);let s,n=r.ast.statements[0];if(n instanceof Pn.yy.Insert?s=n.into.databaseid:n instanceof Pn.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Pn.yy.Update||n instanceof Pn.yy.Delete?s=n.table.databaseid:Q_.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Pn.yy.Select)&&w5.isEmptyOrZeroLength(s))return t("No schema specified",null)}hL(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(L5,"evaluateSQL");function EL(e,t){let r;try{r=y5.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(EL,"checkASTPermissions");function fL(e){let t=new hp;if(!e)throw Ep(new Error,"The 'sql' parameter is missing from the request body",fp.BAD_REQUEST);try{let r=e.trim(),s=Pn.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
15
|
-
`);throw s[1]?Ep(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,fp.BAD_REQUEST):Ep(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",fp.BAD_REQUEST)}return t}a(fL,"convertSQLToAST");function hL(e,t,r){try{let s=M5;if(!e.bypass_auth&&!t.permissions_checked){let i=EL(e,t);if(i&&i.length>0)return r(U5,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Dc.VALID_SQL_OPS_ENUM.SELECT:s=A5,n=t.ast.statements[0];break;case Dc.VALID_SQL_OPS_ENUM.INSERT:s=P5;break;case Dc.VALID_SQL_OPS_ENUM.UPDATE:s=N5;break;case Dc.VALID_SQL_OPS_ENUM.DELETE:s=b5;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(hL,"processAST");function M5(e,t){Q_.info(e),t("unknown sql statement")}a(M5,"nullFunction");function P5({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=v5(i,e.values)}catch(o){return r(o)}g5(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Q_.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(P5,"convertInsert");function v5(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]]=Pn.compile(`SELECT ${n.toString()} AS [${Dc.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Q_.error(r),new Error(D5)}}a(v5,"createDataObjects")});var mp=m((d_e,pL)=>{"use strict";var{S3:B5,GetObjectCommand:H5}=require("@aws-sdk/client-s3");pL.exports={getFileStreamFromS3:q5,getS3AuthObj:SL};async function q5(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await SL(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new H5(r))).Body}a(q5,"getFileStreamFromS3");function SL(e,t,r){return new B5({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(SL,"getS3AuthObj")});var J_=m((f_e,wL)=>{"use strict";var gL=Rr(),F5=z_(),G5=mp(),{AsyncParser:x5,Transform:k5}=require("json2csv"),Mc=require("stream"),fr=G(),Sp=require("fs-extra"),V5=require("path"),Ur=F(),{promisify:AL}=require("util"),Lc=G(),{handleHDBError:Ze,hdb_errors:$5}=Q(),{HDB_ERROR_MSGS:Jt,HTTP_STATUS_CODES:je}=$5,{streamAsJSON:Y5}=JE(),{Upload:K5}=require("@aws-sdk/lib-storage"),TL=["search_by_value","search_by_hash","sql"],RL=["json","csv"],OL="json",NL="csv",W5="Successfully exported JSON locally.",Q5="Successfully exported CSV locally.",z5=1e3,J5=gL.searchByHash,X5=gL.searchByValue,Z5=AL(F5.evaluateSQL),j5=AL(Mc.finished);wL.exports={export_to_s3:s8,export_local:e8,toCsvStream:bL};async function e8(e){Ur.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=yL(e);if(!fr.isEmpty(t))throw Ur.error(t),Ze(new Error,t,je.BAD_REQUEST,void 0,void 0,!0);if(fr.isEmpty(e.path))throw Ur.error(Jt.MISSING_VALUE("path")),Ze(new Error,Jt.MISSING_VALUE("path"),je.BAD_REQUEST,void 0,void 0,!0);let r=(fr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(V5.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=fr.buildFolderPath(e.path,r);await t8(e.path);let n=await IL(e);return await r8(s,e.format,n)}a(e8,"export_local");async function t8(e){if(Ur.trace("in confirmPath"),fr.isEmptyOrZeroLength(e))throw Ze(new Error,`Invalid path: ${e}`,je.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await Sp.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,Ur.error(s),Ze(new Error,s,je.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 Ur.error(r),Ze(new Error,r,je.BAD_REQUEST,void 0,void 0,!0)}return!0}a(t8,"confirmPath");async function r8(e,t,r){if(Ur.trace("in saveToLocal"),Lc.isEmptyOrZeroLength(e))throw Ze(new Error,Jt.INVALID_VALUE("file_path"),je.BAD_REQUEST,void 0,void 0,!0);if(Lc.isEmptyOrZeroLength(t))throw Ze(new Error,Jt.INVALID_VALUE("Source format"),je.BAD_REQUEST,void 0,void 0,!0);if(Lc.isEmpty(r))throw Ze(new Error,Jt.NOT_FOUND("Data"),je.BAD_REQUEST,void 0,void 0,!0);if(t===OL){let s=Sp.createWriteStream(e);return Y5(r).pipe(s),await j5(s),{message:W5,path:e}}else if(t===NL){let s=Sp.createWriteStream(e),n=Mc.Readable.from(r),i={},o={objectMode:!0};return await new x5(i,o).fromInput(n).toOutput(s).promise(!1),{message:Q5,path:e}}throw Ze(new Error,Jt.INVALID_VALUE("format"),je.BAD_REQUEST)}a(r8,"saveToLocal");async function s8(e){if(!e.s3||Object.keys(e.s3).length===0)throw Ze(new Error,Jt.MISSING_VALUE("S3 object"),je.BAD_REQUEST);if(fr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Ze(new Error,Jt.MISSING_VALUE("aws_access_key_id"),je.BAD_REQUEST);if(fr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Ze(new Error,Jt.MISSING_VALUE("aws_secret_access_key"),je.BAD_REQUEST);if(fr.isEmptyOrZeroLength(e.s3.bucket))throw Ze(new Error,Jt.MISSING_VALUE("bucket"),je.BAD_REQUEST);if(fr.isEmptyOrZeroLength(e.s3.key))throw Ze(new Error,Jt.MISSING_VALUE("key"),je.BAD_REQUEST);if(fr.isEmptyOrZeroLength(e.s3.region))throw Ze(new Error,Jt.MISSING_VALUE("region"),je.BAD_REQUEST);let t=yL(e);if(!fr.isEmpty(t))throw Ze(new Error,t,je.BAD_REQUEST);Ur.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await IL(e)}catch(u){throw Ur.error(u),u}let s,n=await G5.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Mc.PassThrough;if(e.format===NL){i=e.s3.key+".csv";let u=bL(r);u.on("error",l=>{throw l}),u.pipe(o)}else if(e.format===OL){i=e.s3.key+".json";let u=new Mc.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%z5===0&&(u.push(_),_="")}_.length!==0&&u.push(_),u.push("]"),u.push(null)}else throw Ze(new Error,Jt.INVALID_VALUE("format"),je.BAD_REQUEST);return new K5({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(s8,"export_to_s3");function bL(e){let t=Mc.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new k5(r,s);return t.pipe(n)}a(bL,"toCsvStream");function yL(e){if(Ur.trace("in exportCoreValidation"),fr.isEmpty(e.format))return"format missing";if(RL.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${RL.join(", ")}`;let t=e.search_operation.operation;if(fr.isEmpty(t))return"search_operation.operation missing";if(TL.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${TL.join(", ")}`}a(yL,"exportCoreValidation");async function IL(e){Ur.trace("in getRecords");let t,r;if(Lc.isEmpty(e.search_operation)||Lc.isEmptyOrZeroLength(e.search_operation.operation))throw Ze(new Error,Jt.INVALID_VALUE("Search operation"),je.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=X5;break;case"search_by_hash":t=J5;break;case"sql":t=Z5;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Ur.error(r),Ze(new Error,r,je.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(IL,"getRecords")});var PL={};et(PL,{contentTypes:()=>LL,findBestSerializer:()=>ed,getDeserializer:()=>bo,registerContentHandlers:()=>Tp,serialize:()=>Rp,serializeMessage:()=>Ys});function n8(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function Tp(e){e.register(o8,{serializers:[{regex:/^application\/json$/,serializer:X_.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Si.EncoderStream(Pc).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?j_.Readable.from((0,Ss.encodeIter)(t,Pc)):(0,Ss.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,pp.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Ss.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Si.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function ed(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=dt.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(dt.keys()).join(", "))}};r=dt.get("application/json"),n="application/json"}return{serializer:r,type:n,parameters:i}}function Rp(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=ed(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,Z_.createBrotliCompress)({}))),o}n=i.serializer.serialize(e)}return s?(r.headers["Content-Encoding"]="br",new Promise((i,o)=>(0,Z_.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Ys(e,t){if(e?.contentType!=null&&e.data!=null)return e;let r=t.serialize;if(r)return r(e);let s=ed(t);return r=t.serialize=s.serializer.serialize,r(e)}function a8(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 bo(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=dt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=dt.get(e)?.deserialize||UL(e,s);return o=>a8(o).then(i)}return dt.get(e)?.deserialize||UL(e,s)}function UL(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 c8(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 X_,pp,Ss,Si,Z_,j_,DL,Pc,dt,LL,CL,ML,i8,o8,Ro=pe(()=>{X_=D(JE()),pp=D(J_()),Ss=require("msgpackr"),Si=require("cbor-x"),Z_=require("zlib"),j_=require("stream");un();DL=require("../index"),Pc={useRecords:!1,useToJSON:!0};ht.contentType=function(e,t){dt.set(e,t)};dt=new Map,LL=dt;(0,DL._assignPackageExport)("contentTypes",LL);dt.set("application/json",{serializeStream:X_.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});CL=new Si.Encoder(Pc);dt.set("application/cbor",{serializeStream(e){return new Si.EncoderStream(Pc).end(e)},serialize:CL.encode,deserialize:CL.decode,q:1});dt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?j_.Readable.from((0,Ss.encodeIter)(e,Pc)):(0,Ss.pack)(e)},serialize:Ss.pack,deserialize:Ss.unpack,q:.9});dt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,pp.toCsvStream)(e)},q:.1});dt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});dt.set("text/event-stream",{serializeStream:function(e){return j_.Readable.from(c8(e,this.serialize))},serialize:function(e){if(e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
13
|
+
`,""):null}catch(E){E.stderr?i[u].npm_error=$D(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 yc.info(`finished installModules with response ${i}`),i}a(e5,"installModules");function $D(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
|
|
14
|
+
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a($D,"parseNPMStdErr");async function t5(e){yc.info(`starting auditModules for request: ${e}`);let t=KD(e);if(t)throw bo(t,t.message,yo.BAD_REQUEST);let{projects:r}=e;await Y_(),await YD(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=$_.join(op,o);s[o]={npm_output:null,npm_error:null};try{let u=await wc("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=$D(u.stderr)}}return yc.info(`finished auditModules with response ${s}`),s}a(t5,"auditModules");async function Y_(){try{return await wc("npm -v"),!0}catch{throw bo(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",yo.BAD_REQUEST,void 0,void 0,!0)}}a(Y_,"checkNPMInstalled");async function YD(e){if(!Array.isArray(e)||e.length===0)throw bo(new Error,"projects argument must be an array with at least 1 element",yo.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=$_.join(op,i.toString());if(!await xD.pathExists(o)){t.push(i);continue}let u=$_.join(o,"package.json");await xD.pathExists(u)||r.push(i)}if(t.length>0)throw bo(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,yo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw bo(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,yo.BAD_REQUEST,void 0,void 0,!0)}a(YD,"checkProjectPaths");function KD(e){let t=V_.object({projects:V_.array().min(1).items(V_.string()).required(),dry_run:V_.boolean().default(!1)});return zj.validateBySchema(e,t)}a(KD,"modulesValidator")});var zD=m((__e,QD)=>{"use strict";var ap=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}};QD.exports=ap});var XD=m((E_e,JD)=>{"use strict";var cp=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};JD.exports=cp});var lp=m((h_e,jD)=>{"use strict";var ZD=zD(),r5=XD(),{HDB_ERROR_MSGS:s5}=rr(),up=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=s5.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 ZD(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new r5(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 ZD(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}};jD.exports=up});var J_=m((S_e,hL)=>{"use strict";var _p=ir(),W_=Ar(),Dr=Za(),Dc=En(),dp=mn(),n5=Nm(),i5=Tw(),Lc=br(),Q_=Mm(),ct=F(),o5=Bm(),a5=l_(),c5=mS(),u5=f_(),l5=SS(),_5=pS(),d5=gS(),E5=OS(),Ep=yS(),Js=k(),f5=mU(),fp=DS(),rL=QS(),Ur=g(),sL=mD(),h5=ho(),nL=rc(),iL=(q_(),re(Oc)),oL=Nr(),Er=sp(),m5=require("alasql"),aL=k_(),cL=K_(),uL=lp(),{handleHDBError:zt,hdb_errors:lL}=Q(),{HDB_ERROR_MSGS:At,HTTP_STATUS_CODES:Cc}=lL,M=new Map,_L="delete",Pn="insert",Xs="read",Si="update",Uc="describe",eL=Dc.describeSchema.name,tL=Dc.describeTable.name,dL={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},S5="catchup",p5="handleGetJob",T5="handleGetJobsByStartDate",z_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},R5=[Dr.createTable.name,Dr.createAttribute.name,Dr.dropTable.name,Dr.dropAttribute.name],EL={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},H=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};M.set(_p.insert.name,new H(!1,[Pn]));M.set(_p.update.name,new H(!1,[Si]));M.set(_p.upsert.name,new H(!1,[Pn,Si]));M.set(W_.searchByConditions.name,new H(!1,[Xs]));M.set(W_.searchByHash.name,new H(!1,[Xs]));M.set(W_.searchByValue.name,new H(!1,[Xs]));M.set(W_.search.name,new H(!1,[Xs]));M.set(Dr.createSchema.name,new H(!0,[]));M.set(Dr.createTable.name,new H(!0,[]));M.set(Dr.createAttribute.name,new H(!1,[Pn]));M.set(Dr.dropSchema.name,new H(!0,[]));M.set(Dr.dropTable.name,new H(!0,[]));M.set(Dr.dropAttribute.name,new H(!0,[]));M.set(Dc.describeSchema.name,new H(!1,[Xs]));M.set(Dc.describeTable.name,new H(!1,[Xs]));M.set(dp.deleteRecord.name,new H(!1,[_L]));M.set(Lc.addUser.name,new H(!0,[]));M.set(Lc.alterUser.name,new H(!0,[]));M.set(Lc.dropUser.name,new H(!0,[]));M.set(Lc.listUsersExternal.name,new H(!0,[]));M.set(Q_.listRoles.name,new H(!0,[]));M.set(Q_.addRole.name,new H(!0,[]));M.set(Q_.alterRole.name,new H(!0,[]));M.set(Q_.dropRole.name,new H(!0,[]));M.set(o5.name,new H(!0,[]));M.set(a5.name,new H(!0,[]));M.set(c5.name,new H(!0,[]));M.set(u5.name,new H(!0,[]));M.set(l5.name,new H(!0,[]));M.set(_5.name,new H(!0,[]));M.set(Ep.setRoutes.name,new H(!0,[]));M.set(Ep.getRoutes.name,new H(!0,[]));M.set(Ep.deleteRoutes.name,new H(!0,[]));M.set(oL.setConfiguration.name,new H(!0,[]));M.set(d5.clusterStatus.name,new H(!0,[]));M.set(E5.name,new H(!0,[]));M.set(fp.getFingerprint.name,new H(!0,[]));M.set(fp.setLicense.name,new H(!0,[]));M.set(dp.deleteFilesBefore.name,new H(!0,[]));M.set(dp.deleteAuditLogsBefore.name,new H(!0,[]));M.set(rL.restart.name,new H(!0,[]));M.set(rL.restartService.name,new H(!0,[]));M.set(n5.name,new H(!0,[]));M.set(i5.name,new H(!0,[Xs]));M.set(h5.systemInformation.name,new H(!0,[]));M.set(oL.getConfiguration.name,new H(!0,[]));M.set(aL.readTransactionLog.name,new H(!0,[]));M.set(aL.deleteTransactionLogsBefore.name,new H(!0,[]));M.set(cL.installModules.name,new H(!0,[]));M.set(cL.auditModules.name,new H(!0,[]));M.set(nL.createTokens.name,new H(!1,[]));M.set(nL.refreshOperationToken.name,new H(!1,[]));M.set(iL.login.name,new H(!1,[]));M.set(iL.logout.name,new H(!1,[]));M.set(Er.customFunctionsStatus.name,new H(!0,[]));M.set(Er.getCustomFunctions.name,new H(!0,[]));M.set(Er.getComponents.name,new H(!0,[]));M.set(Er.getComponentFile.name,new H(!0,[]));M.set(Er.setComponentFile.name,new H(!0,[]));M.set(Er.dropComponent.name,new H(!0,[]));M.set(Er.getCustomFunction.name,new H(!0,[]));M.set(Er.setCustomFunction.name,new H(!0,[]));M.set(Er.dropCustomFunction.name,new H(!0,[]));M.set(Er.addComponent.name,new H(!0,[]));M.set(Er.dropCustomFunctionProject.name,new H(!0,[]));M.set(Er.packageComponent.name,new H(!0,[]));M.set(Er.deployComponent.name,new H(!0,[]));M.set(fp.getRegistrationInfo.name,new H(!1,[]));M.set(Lc.userInfo.name,new H(!1,[]));M.set(Dc.describeAll.name,new H(!1,[]));M.set(p5,new H(!1,[]));M.set(T5,new H(!0,[]));M.set(S5,new H(!0,[]));M.set(z_.CSV_DATA_LOAD,new H(!1,[Pn,Si]));M.set(z_.CSV_URL_LOAD,new H(!1,[Pn,Si]));M.set(z_.CSV_FILE_LOAD,new H(!1,[Pn,Si]));M.set(z_.IMPORT_FROM_S3,new H(!1,[Pn,Si]));M.set(EL.EXPORT_TO_S3,new H(!0,[]));M.set(EL.EXPORT_LOCAL,new H(!0,[]));M.set(Ur.VALID_SQL_OPS_ENUM.DELETE,new H(!1,[_L]));M.set(Ur.VALID_SQL_OPS_ENUM.SELECT,new H(!1,[Xs]));M.set(Ur.VALID_SQL_OPS_ENUM.INSERT,new H(!1,[Pn]));M.set(Ur.VALID_SQL_OPS_ENUM.UPDATE,new H(!1,[Si]));hL.exports={verifyPerms:A5,verifyPermsAst:g5,verifyBulkLoadAttributePerms:N5};function g5(e,t,r){if(Js.isEmptyOrZeroLength(e))throw ct.info("verify_perms_ast has an empty user parameter"),zt(new Error);if(Js.isEmptyOrZeroLength(t))throw ct.info("verify_perms_ast has an empty user parameter"),zt(new Error);if(Js.isEmptyOrZeroLength(r))throw ct.info("verify_perms_ast has a null operation parameter"),zt(new Error);try{let s=new uL,n=new f5(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw ct.info("No schemas defined in verifyPermsAst(), will not continue."),zt(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&dL[r])throw zt(new Error,At.DROP_SYSTEM,Cc.FORBIDDEN);if(c&&!u)return null;let l=sL.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof m5.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 _=fL(t,r,o,s);return _||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=n.getAttributesBySchemaTableName(E,d[f]),p=mp(t.role.permission,E,d[f]);hp(h,p,r,d[f],E,s)}}),s.getPermsResponse())}catch(s){throw zt(s)}}a(g5,"verifyPermsAst");function A5(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw ct.info("null required parameter in verifyPerms"),zt(new Error,At.DEFAULT_INVALID_REQUEST,Cc.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 uL;if(Js.isEmptyOrZeroLength(e.hdb_user.role)||Js.isEmptyOrZeroLength(e.hdb_user.role.permission))return ct.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(At.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,l=e.hdb_user.role.permission.structure_user,_=o.has(Ur.SYSTEM_SCHEMA_NAME)||n===Ur.SYSTEM_SCHEMA_NAME;if(_&&dL[r])throw zt(new Error,At.DROP_SYSTEM,Cc.FORBIDDEN);if(u&&!_||l===!0&&(r===Dr.createSchema.name||r===Dr.dropSchema.name))return null;if(R5.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=sL.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===eL||r===tL){if(n===Ur.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(At.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===eL&&(!d[n]||!d[n][Uc]))return c.handleInvalidItem(At.SCHEMA_NOT_FOUND(n));if(r===tL&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Uc]))return c.handleInvalidItem(At.TABLE_NOT_FOUND(n,i))}}let E=fL(e.hdb_user,r,o,c,s);if(E)return E;if(M.get(r)&&M.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Ur.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],T=d[n].tables[i];T[Ur.PERMS_CRUD_ENUM.READ]&&(T.attribute_permissions.length>0?T.attribute_permissions.filter(O=>O[Ur.PERMS_CRUD_ENUM.READ]).forEach(O=>{p.push(O.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(R=>R.attribute),e.get_attributes=p)}let f=O5(e),h=mp(e.hdb_user.role.permission,n,i);return hp(f,h,r,i,n,c,s),c.getPermsResponse()}a(A5,"verifyPerms");function fL(e,t,r,s,n){if(Js.arrayHasEmptyValues([e,t,r]))throw ct.info("hasPermissions has an invalid parameter"),zt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||M.get(t).requires_su))return null;if(!M.get(t))throw ct.info(`operation ${t} not found.`),zt(new Error,At.OP_NOT_FOUND(t),Cc.BAD_REQUEST);if(M.get(t)&&M.get(t).requires_su)return ct.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(At.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Uc]===!1){s.addInvalidItem(At.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(At.SCHEMA_NOT_FOUND(u));continue}let l=r.get(u);for(let _ of l){let d=o[u].tables[_];if(!d||d[Uc]===!1)s.addInvalidItem(At.TABLE_NOT_FOUND(u,_));else try{let E=[],f=M.get(t).perms;!Js.isEmpty(n)&&f.includes(n)&&(f=[n]);for(let h=0;h<f.length;h++){let p=f[h],T=d[p];(T==null||T===!1)&&(ct.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),E.push(p))}E.length>0&&s.addUnauthorizedTable(u,_,E)}catch(E){let f=At.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw ct.error(f),ct.error(E),zt(lL.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?s.getPermsResponse():null}a(fL,"hasPermissions");function hp(e,t,r,s,n,i,o){if(!e||!t)throw ct.info("no attributes specified in checkAttributePerms."),zt(new Error);let c=M.get(r).perms;if(!c||c==="")throw ct.info(`no permissions found for ${r} in checkAttributePerms().`),zt(new Error);if(Js.isEmptyOrZeroLength(t))return ct.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[Uc]===!1){i.addInvalidItem(At.ATTR_NOT_FOUND(n,s,_),n,s);continue}if(c)for(let E of c){if(Ur.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==Xs)throw zt(new Error,At.SYSTEM_TIMESTAMP_PERMS_ERR,Cc.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(At.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}a(hp,"checkAttributePerms");function O5(e){let t=new Set;try{if(e.action)return t;if(e.operation===Ur.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){ct.info(r)}return t}a(O5,"getRecordAttributes");function mp(e,t,r){let s=new Map;if(Js.isEmpty(e))return ct.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{ct.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(mp,"getAttributePermissions");function N5(e,t,r,s,n,i,o){let c=new Set(i),u=mp(e,s,n);hp(c,u,t,n,s,o,r)}a(N5,"verifyBulkLoadAttributePerms")});var Z_=m((T_e,RL)=>{"use strict";RL.exports={evaluateSQL:H5,processAST:TL,convertSQLToAST:pL,checkASTPermissions:SL};var b5=ir(),mL=require("util"),y5=mL.callbackify(b5.insert),I5=Ar().search,w5=mI().update,C5=mL.callbackify(w5),U5=pI().convertDelete,vn=require("alasql"),D5=J_(),X_=F(),L5=Dl(),M5=k(),Mc=g(),{hdb_errors:P5,handleHDBError:Sp}=Q(),{HTTP_STATUS_CODES:pp}=P5;L5(vn);var v5=403,B5="There was a problem performing this insert. Please check the logs and try again.",Tp=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function H5(e,t){let r=e.parsed_sql_object;if(!r){r=pL(e.sql);let s,n=r.ast.statements[0];if(n instanceof vn.yy.Insert?s=n.into.databaseid:n instanceof vn.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof vn.yy.Update||n instanceof vn.yy.Delete?s=n.table.databaseid:X_.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof vn.yy.Select)&&M5.isEmptyOrZeroLength(s))return t("No schema specified",null)}TL(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(H5,"evaluateSQL");function SL(e,t){let r;try{r=D5.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(SL,"checkASTPermissions");function pL(e){let t=new Tp;if(!e)throw Sp(new Error,"The 'sql' parameter is missing from the request body",pp.BAD_REQUEST);try{let r=e.trim(),s=vn.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
15
|
+
`);throw s[1]?Sp(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,pp.BAD_REQUEST):Sp(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",pp.BAD_REQUEST)}return t}a(pL,"convertSQLToAST");function TL(e,t,r){try{let s=q5;if(!e.bypass_auth&&!t.permissions_checked){let i=SL(e,t);if(i&&i.length>0)return r(v5,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Mc.VALID_SQL_OPS_ENUM.SELECT:s=I5,n=t.ast.statements[0];break;case Mc.VALID_SQL_OPS_ENUM.INSERT:s=F5;break;case Mc.VALID_SQL_OPS_ENUM.UPDATE:s=C5;break;case Mc.VALID_SQL_OPS_ENUM.DELETE:s=U5;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(TL,"processAST");function q5(e,t){X_.info(e),t("unknown sql statement")}a(q5,"nullFunction");function F5({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=G5(i,e.values)}catch(o){return r(o)}y5(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){X_.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(F5,"convertInsert");function G5(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=vn.compile(`SELECT ${n.toString()} AS [${Mc.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw X_.error(r),new Error(B5)}}a(G5,"createDataObjects")});var Rp=m((g_e,AL)=>{"use strict";var{S3:x5,GetObjectCommand:k5}=require("@aws-sdk/client-s3");AL.exports={getFileStreamFromS3:V5,getS3AuthObj:gL};async function V5(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await gL(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new k5(r))).Body}a(V5,"getFileStreamFromS3");function gL(e,t,r){return new x5({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(gL,"getS3AuthObj")});var j_=m((O_e,LL)=>{"use strict";var bL=Ar(),$5=Z_(),Y5=Rp(),{AsyncParser:K5,Transform:W5}=require("json2csv"),vc=require("stream"),fr=k(),gp=require("fs-extra"),Q5=require("path"),Lr=F(),{promisify:yL}=require("util"),Pc=k(),{handleHDBError:Ze,hdb_errors:z5}=Q(),{HDB_ERROR_MSGS:Jt,HTTP_STATUS_CODES:je}=z5,{streamAsJSON:J5}=jE(),{Upload:X5}=require("@aws-sdk/lib-storage"),OL=["search_by_value","search_by_hash","sql"],NL=["json","csv"],IL="json",wL="csv",Z5="Successfully exported JSON locally.",j5="Successfully exported CSV locally.",e8=1e3,t8=bL.searchByHash,r8=bL.searchByValue,s8=yL($5.evaluateSQL),n8=yL(vc.finished);LL.exports={export_to_s3:c8,export_local:i8,toCsvStream:CL};async function i8(e){Lr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=UL(e);if(!fr.isEmpty(t))throw Lr.error(t),Ze(new Error,t,je.BAD_REQUEST,void 0,void 0,!0);if(fr.isEmpty(e.path))throw Lr.error(Jt.MISSING_VALUE("path")),Ze(new Error,Jt.MISSING_VALUE("path"),je.BAD_REQUEST,void 0,void 0,!0);let r=(fr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Q5.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=fr.buildFolderPath(e.path,r);await o8(e.path);let n=await DL(e);return await a8(s,e.format,n)}a(i8,"export_local");async function o8(e){if(Lr.trace("in confirmPath"),fr.isEmptyOrZeroLength(e))throw Ze(new Error,`Invalid path: ${e}`,je.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await gp.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,Lr.error(s),Ze(new Error,s,je.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 Lr.error(r),Ze(new Error,r,je.BAD_REQUEST,void 0,void 0,!0)}return!0}a(o8,"confirmPath");async function a8(e,t,r){if(Lr.trace("in saveToLocal"),Pc.isEmptyOrZeroLength(e))throw Ze(new Error,Jt.INVALID_VALUE("file_path"),je.BAD_REQUEST,void 0,void 0,!0);if(Pc.isEmptyOrZeroLength(t))throw Ze(new Error,Jt.INVALID_VALUE("Source format"),je.BAD_REQUEST,void 0,void 0,!0);if(Pc.isEmpty(r))throw Ze(new Error,Jt.NOT_FOUND("Data"),je.BAD_REQUEST,void 0,void 0,!0);if(t===IL){let s=gp.createWriteStream(e);return J5(r).pipe(s),await n8(s),{message:Z5,path:e}}else if(t===wL){let s=gp.createWriteStream(e),n=vc.Readable.from(r),i={},o={objectMode:!0};return await new K5(i,o).fromInput(n).toOutput(s).promise(!1),{message:j5,path:e}}throw Ze(new Error,Jt.INVALID_VALUE("format"),je.BAD_REQUEST)}a(a8,"saveToLocal");async function c8(e){if(!e.s3||Object.keys(e.s3).length===0)throw Ze(new Error,Jt.MISSING_VALUE("S3 object"),je.BAD_REQUEST);if(fr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Ze(new Error,Jt.MISSING_VALUE("aws_access_key_id"),je.BAD_REQUEST);if(fr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Ze(new Error,Jt.MISSING_VALUE("aws_secret_access_key"),je.BAD_REQUEST);if(fr.isEmptyOrZeroLength(e.s3.bucket))throw Ze(new Error,Jt.MISSING_VALUE("bucket"),je.BAD_REQUEST);if(fr.isEmptyOrZeroLength(e.s3.key))throw Ze(new Error,Jt.MISSING_VALUE("key"),je.BAD_REQUEST);if(fr.isEmptyOrZeroLength(e.s3.region))throw Ze(new Error,Jt.MISSING_VALUE("region"),je.BAD_REQUEST);let t=UL(e);if(!fr.isEmpty(t))throw Ze(new Error,t,je.BAD_REQUEST);Lr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await DL(e)}catch(u){throw Lr.error(u),u}let s,n=await Y5.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new vc.PassThrough;if(e.format===wL){i=e.s3.key+".csv";let u=CL(r);u.on("error",l=>{throw l}),u.pipe(o)}else if(e.format===IL){i=e.s3.key+".json";let u=new vc.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%e8===0&&(u.push(_),_="")}_.length!==0&&u.push(_),u.push("]"),u.push(null)}else throw Ze(new Error,Jt.INVALID_VALUE("format"),je.BAD_REQUEST);return new X5({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(c8,"export_to_s3");function CL(e){let t=vc.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new W5(r,s);return t.pipe(n)}a(CL,"toCsvStream");function UL(e){if(Lr.trace("in exportCoreValidation"),fr.isEmpty(e.format))return"format missing";if(NL.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${NL.join(", ")}`;let t=e.search_operation.operation;if(fr.isEmpty(t))return"search_operation.operation missing";if(OL.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${OL.join(", ")}`}a(UL,"exportCoreValidation");async function DL(e){Lr.trace("in getRecords");let t,r;if(Pc.isEmpty(e.search_operation)||Pc.isEmptyOrZeroLength(e.search_operation.operation))throw Ze(new Error,Jt.INVALID_VALUE("Search operation"),je.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=r8;break;case"search_by_hash":t=t8;break;case"sql":t=s8;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Lr.error(r),Ze(new Error,r,je.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(DL,"getRecords")});var qL={};tt(qL,{contentTypes:()=>BL,findBestSerializer:()=>sd,getDeserializer:()=>Io,registerContentHandlers:()=>Op,serialize:()=>Np,serializeMessage:()=>Ws});function u8(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function Op(e){e.register(_8,{serializers:[{regex:/^application\/json$/,serializer:ed.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new pi.EncoderStream(Bc).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?rd.Readable.from((0,Ts.encodeIter)(t,Bc)):(0,Ts.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Ap.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Ts.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,pi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function sd(e){let t=e.headers.accept,r,s=0,n,i,o=t?t.toLowerCase().split(/\s*,\s*/):[];for(let c of o){let[u,...l]=c.split(/\s*;\s*/),_=1,d={q:1};for(let f of l){let h=f.indexOf("=");d[f.substring(0,h)]=f.substring(h+1)}_=+d.q;let E=Et.get(u);if(E){let f=(E.q||1)*_;f>s&&(r=E,n=E.type||u,s=f,i=d)}}if(!r){if(t)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Et.keys()).join(", "))}};r=Et.get("application/json"),n="application/json"}return{serializer:r,type:n,parameters:i}}function Np(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=sd(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,td.createBrotliCompress)({}))),o}n=i.serializer.serialize(e)}return s?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,td.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Ws(e,t){if(e?.contentType!=null&&e.data!=null)return e;let r=t.serialize;if(r)return r(e);let s=sd(t);return r=t.serialize=s.serializer.serialize,r(e)}function d8(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 Io(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Et.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Et.get(e)?.deserialize||PL(e,s);return o=>d8(o).then(i)}return Et.get(e)?.deserialize||PL(e,s)}function PL(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 E8(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 ed,Ap,Ts,pi,td,rd,vL,Bc,Et,BL,ML,HL,l8,_8,Ao=Se(()=>{ed=C(jE()),Ap=C(j_()),Ts=require("msgpackr"),pi=require("cbor-x"),td=require("zlib"),rd=require("stream");ts();vL=require("../index"),Bc={useRecords:!1,useToJSON:!0};st.contentType=function(e,t){Et.set(e,t)};Et=new Map,BL=Et;(0,vL._assignPackageExport)("contentTypes",BL);Et.set("application/json",{serializeStream:ed.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});ML=new pi.Encoder(Bc);Et.set("application/cbor",{serializeStream(e){return new pi.EncoderStream(Bc).end(e)},serialize:ML.encode,deserialize:ML.decode,q:1});Et.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?rd.Readable.from((0,Ts.encodeIter)(e,Bc)):(0,Ts.pack)(e)},serialize:Ts.pack,deserialize:Ts.unpack,q:.9});Et.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Ap.toCsvStream)(e)},q:.1});Et.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Et.set("text/event-stream",{serializeStream:function(e){return rd.Readable.from(E8(e,this.serialize))},serialize:function(e){if(e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
16
16
|
`),e.data){let r=e.data;typeof r=="object"&&(r=JSON.stringify(r)),t+="data: "+r+`
|
|
17
17
|
`}return e.id&&(t+="id: "+e.id+`
|
|
18
18
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
19
19
|
`),t+`
|
|
20
20
|
`}else return"data: "+e+`
|
|
21
21
|
|
|
22
|
-
`},q:.8});dt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});ML={type:"application/json",serializeStream:X_.streamAsJSON,serialize:JSON.stringify,deserialize:n8,q:.8};dt.set("*/*",ML);dt.set("",ML);a(n8,"tryJSONParse");a(Tp,"registerContentHandlers");i8=require("fastify-plugin"),o8=i8(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=ed(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(ed,"findBestSerializer");a(Rp,"serialize");a(Ys,"serializeMessage");a(a8,"streamToBuffer");a(bo,"getDeserializer");a(UL,"deserializerUnknownType");a(c8,"transformIterable")});var Np={};et(Np,{start:()=>_8});async function l8(e,t){let r=e.headers.accept==="text/event-stream"?"CONNECT":e.method;e.search&&wu(e);let s=performance.now(),n;try{let i=new Op;e.responseHeaders=i;let o=e.url.slice(1),c=Ap.getMatch(o);if(!c)return t(e);let u={url:c.relativeURL},l=c.Resource,_=await We(e,()=>{if(r==="POST"||r==="PUT"||r==="PATCH"||r==="QUERY")try{e.data=bo(e.headers["content-type"],!0)(e.body)}catch(p){throw new vc.ClientError(p,400)}switch(e.authorize=!0,r){case"GET":case"HEAD":return l.get(u,e);case"POST":return l.post(u,e.data,e);case"PUT":return l.put(u,e.data,e);case"DELETE":return l.delete(u,e);case"PATCH":return l.patch(u,e.data,e);case"OPTIONS":i.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 vc.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new vc.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){u8[0]=f;let p=String.fromCharCode(34,(Ot[0]&63)+62,(Ot[0]>>6)+(Ot[1]<<2&63)+62,(Ot[1]>>4)+(Ot[2]<<4&63)+62,(Ot[2]>>2)+62,(Ot[3]&63)+62,(Ot[3]>>6)+(Ot[4]<<2&63)+62,(Ot[4]>>4)+(Ot[5]<<4&63)+62,(Ot[5]>>2)+62,(Ot[6]&63)+62,(Ot[6]>>6)+(Ot[7]<<2&63)+62,34),S=e.headers["if-none-match"];S&&p==S?(_?.onDone&&_.onDone(),E=304,_=void 0):i.ETag=p}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)}`,oi(d,"TTFB",n,r),Pl(E<400,"success",n,r),_!==void 0&&(h.body=Rp(_,e,h),r==="HEAD"&&(h.body=void 0)),h}catch(i){let o=performance.now()-s;oi(o,"TTFB",n,r),Pl(!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:Ys(i.toString(),e)}}}function _8(e){if(vL)return;vL=!0,Ap=e.resources,e.server.http(async(r,s)=>{if(!r.isWebSocket)return l8(r,s)}),e.server.ws(async(r,s,n)=>{BL++,gp||(setTimeout(()=>{console.log("connection count",BL,"mem",Math.round(process.memoryUsage().heapUsed/1e6)),gp=!1},1e3),gp=!0),t(s);let i=new Xr;r.on("error",console.error);let o;r.on("message",a(function(d){o||(o=bo(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 Ap.call(s.pathname.slice(1),s,(_,d)=>(u=!0,_.connect(i)));if(!u)r.send(Ys(`No resource was found to handle ${s.pathname}`,s));else{c=l[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;)r.send(Ys(_.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 vc,Ot,u8,vL,Ap,BL,gp,Op,HL=pe(()=>{Ro();ro();vc=D(Q());Cu();ia();$n();Ot=new Uint8Array(8),u8=new Float64Array(Ot.buffer,0,1);a(l8,"http");BL=0;a(_8,"start");Op=class{static{a(this,"Headers")}set(t,r){this[t]=r}}});var bp=m((b_e,qL)=>{var{recordAction:td,recordActionBinary:d8}=(ro(),re(vl)),E8=require("fastify-plugin"),f8=200;qL.exports=E8(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),td(o,"TTFB",l,d,_),d8(n.raw.statusCode<400,"success",l,d,_);let E=f8;i?.pipe?(i.on("data",h=>{E+=h.length}),i.on("end",()=>{td(performance.now()-c,"transfer",l,d,_),td(E,"bytes-sent",l,d,_)})):(E+=i?.length||0,td(E,"bytes-sent",l,d,_));let f=o.toFixed(3);n.header("Server-Timing",`db;dur=${f}`)}),r()},{name:"hdb-request-time"})});var Cp=m((y_e,VL)=>{var od=require("clone"),ad=Ue(),h8=G(),nd=R(),m8=F(),rd=require("fs"),yp=require("joi"),{string:id}=yp.types(),{hdb_errors:S8,handleHDBError:Bc}=Q(),{HDB_ERROR_MSGS:p8,HTTP_STATUS_CODES:sd}=S8,{common_validators:yo}=rs(),FL=1e9,GL=" is required",T8=["insert","update","upsert"],Ip={database:{presence:!1,format:yo.schema_format,length:yo.schema_length},schema:{presence:!1,format:yo.schema_format,length:yo.schema_length},table:{presence:!0,format:yo.schema_format,length:yo.schema_length},action:{inclusion:{within:T8,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},R8={schema:id.required(),table:id.required(),action:id.valid("insert","update","upsert")},{AWS_ACCESS_KEY:g8,AWS_SECRET:A8,AWS_BUCKET:O8,AWS_FILE_KEY:N8,REGION:b8}=nd.S3_BUCKET_AUTH_KEYS,y8={s3:{presence:!0},[`s3.${g8}`]:{presence:!0,type:"String"},[`s3.${A8}`]:{presence:!0,type:"String"},[`s3.${O8}`]:{presence:!0,type:"String"},[`s3.${N8}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${b8}`]:{presence:!0,type:"String"}},xL=od(Ip);xL.data.presence={message:GL};var kL=od(Ip);kL.file_path.presence={message:GL};var I8=Object.assign(od(Ip),y8),wp=od(R8);wp.csv_url=id.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();wp.passthrough_headers=yp.object();function w8(e){let t=ad.validateObject(e,xL);return cd(e,t)}a(w8,"dataObject");function C8(e){let t=ad.validateBySchema(e,yp.object(wp));return cd(e,t)}a(C8,"urlObject");function U8(e){let t=ad.validateObject(e,kL);return cd(e,t)}a(U8,"fileObject");function D8(e){let t=ad.validateObject(e,I8);return cd(e,t)}a(D8,"s3FileObject");function cd(e,t){if(!t){let r=h8.checkGlobalSchemaTable(e.schema,e.table);if(r)return Bc(new Error,r,sd.BAD_REQUEST);if(e.operation===nd.OPERATIONS_ENUM.CSV_FILE_LOAD){try{rd.accessSync(e.file_path,rd.constants.R_OK|rd.constants.F_OK)}catch(s){return s.code===nd.NODE_ERROR_CODES.ENOENT?Bc(s,`No such file or directory ${s.path}`,sd.BAD_REQUEST):s.code===nd.NODE_ERROR_CODES.EACCES?Bc(s,`Permission denied ${s.path}`,sd.BAD_REQUEST):Bc(s)}try{let s=rd.statSync(e.file_path).size;if(s>FL)return Bc(new Error,p8.MAX_FILE_SIZE_ERR(s,FL),sd.BAD_REQUEST)}catch(s){m8.error(s),console.error(s)}}}return t}a(cd,"postValidateChecks");VL.exports={dataObject:w8,urlObject:C8,fileObject:U8,s3FileObject:D8}});var Up=m((w_e,$L)=>{"use strict";var Hc=F(),ud=R();async function L8(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===ud.OPERATIONS_ENUM.INSERT||t.operation===ud.OPERATIONS_ENUM.UPDATE||t.operation===ud.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===ud.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Hc.info(i.message),i):i.http_resp_msg?(Hc.error(`Error calling operation: ${e.name}`),Hc.error(i.http_resp_msg),i):(Hc.error(`Error calling operation: ${e.name}`),Hc.error(i),i)}}a(L8,"callOperationFunctionAsAwait");$L.exports={callOperationFunctionAsAwait:L8}});var KL=m((U_e,YL)=>{"use strict";var Dp=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}},Lp=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};YL.exports={BulkLoadFileObject:Dp,BulkLoadDataObject:Lp}});var QL=m((L_e,WL)=>{"use strict";var Mp=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};WL.exports=Mp});var Fp=m((q_e,_M)=>{"use strict";var ld=ir(),dd=Cp(),M8=require("needle"),Kr=R(),P_e=be(),Io=G(),{handleHDBError:Fe,hdb_errors:sM}=Q(),{HTTP_STATUS_CODES:Nt,HDB_ERROR_MSGS:at,CHECK_LOGS_WRAPPER:Ti}=sM,wo=F(),Pp=require("papaparse");Io.promisifyPapaParse();var Wr=require("fs-extra"),P8=require("path"),{chain:zL}=require("stream-chain"),JL=require("stream-json/streamers/StreamArray"),XL=require("stream-json/utils/Batch"),ZL=require("stream-chain/utils/comp"),{finished:jL}=require("stream"),v8=W(),nM=Up(),B8=mp(),{BulkLoadFileObject:Bp,BulkLoadDataObject:H8}=KL(),Hp=op(),{verifyBulkLoadAttributePerms:iM}=W_(),v_e=QL(),B_e=He(),H_e=Ms(),{databases:q8}=(de(),re(Ne)),{coerceType:F8}=(Ed(),re(Gp)),eM="No records parsed from csv file.",pi=`${v8.get("HDB_ROOT")}/tmp`,{schema_regex:G8}=rs(),tM=1024*1024*2,rM=5e3,x8={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};_M.exports={csvDataLoad:k8,csvURLLoad:V8,csvFileLoad:$8,importFromS3:Y8};async function k8(e,t){let r=dd.dataObject(e);if(r)throw Fe(r,r.message,Nt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=cM(e.schema,e.table),i=Pp.parse(e.data,{header:!0,skipEmptyLines:!0,transform:vp.bind(null,n),dynamicTyping:!1}),o=new Hp;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&iM(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw Fe(new Error,c,Nt.BAD_REQUEST,void 0,void 0,!0);let u=new H8(e.action,e.schema,e.table,i.data);return s=await nM.callOperationFunctionAsAwait(uM,u,null),s.message===eM?eM:lM(s.records,s.number_written)}catch(n){throw Ri(n)}}a(k8,"csvDataLoad");async function V8(e){let t=dd.urlObject(e);if(t)throw Fe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${pi}/${r}`;try{await K8(e,r)}catch(n){throw wo.error(at.DOWNLOAD_FILE_ERR(r)+" - "+n),Fe(n,Ti(at.DOWNLOAD_FILE_ERR(r)))}try{let n=new Bp(this.job_operation_function.name,e.action,e.schema,e.table,s,Kr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await qp(n);return await _d(s),i}catch(n){throw await _d(s),Ri(n)}}a(V8,"csvURLLoad");async function $8(e){let t=dd.fileObject(e);if(t)throw Fe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r=new Bp(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Kr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await qp(r)}catch(s){throw Ri(s)}}a($8,"csvFileLoad");async function Y8(e){let t=dd.s3FileObject(e);if(t)throw Fe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=P8.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${pi}/${n}`;let i=new Bp(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await W8(n,e);let o=await qp(i);return await _d(r),o}catch(s){throw await _d(r),Ri(s)}}a(Y8,"importFromS3");async function K8(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await M8("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw Fe(s,n,s.statusCode,Kr.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}z8(r,e.csv_url),await Q8(t,r.raw)}a(K8,"downloadCSVFile");async function W8(e,t){try{let r=`${pi}/${e}`;await Wr.mkdirp(pi),await Wr.writeFile(`${pi}/${e}`,"",{flag:"a+"});let s=await Wr.createWriteStream(r),n=await B8.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(){wo.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw wo.error(at.S3_DOWNLOAD_ERR+" - "+r),Fe(r,Ti(at.S3_DOWNLOAD_ERR))}}a(W8,"downloadFileFromS3");async function Q8(e,t){try{await Wr.mkdirp(pi),await Wr.writeFile(`${pi}/${e}`,t)}catch(r){throw wo.error(at.WRITE_TEMP_FILE_ERR),Fe(r,Ti(at.DEFAULT_BULK_LOAD_ERR))}}a(Q8,"writeFileToTempFolder");async function _d(e){if(e)try{await Wr.access(e),await Wr.unlink(e)}catch{wo.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(_d,"deleteTempFile");function z8(e,t){if(e.statusCode!==sM.HTTP_STATUS_CODES.OK)throw Fe(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Nt.BAD_REQUEST);if(!x8[e.headers["content-type"]])throw Fe(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Nt.BAD_REQUEST);if(!e.raw)throw Fe(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Nt.BAD_REQUEST)}a(z8,"validateURLResponse");async function qp(e){try{let t;switch(e.file_type){case Kr.VALID_S3_FILE_TYPES.CSV:t=await J8(e);break;case Kr.VALID_S3_FILE_TYPES.JSON:t=await X8(e);break;default:throw Fe(new Error,at.DEFAULT_BULK_LOAD_ERR,Nt.BAD_REQUEST,Kr.LOG_LEVELS.ERROR,at.INVALID_FILE_EXT_ERR(e))}return lM(t.records,t.number_written)}catch(t){throw Ri(t)}}a(qp,"fileLoad");async function oM(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 ld.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&iM(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=Fe(c);r(u)}}a(oM,"validateChunk");async function aM(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Io.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Io.isEmpty(c)&&!Io.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 nM.callOperationFunctionAsAwait(uM,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Fe(c,Ti(at.INSERT_CSV_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,at.INSERT_CSV_ERR+" - "+c);r(u)}}a(aM,"insertChunk");async function J8(e){let t={records:0,number_written:0},r=cM(e.schema,e.table);try{let s=new Hp,n=Wr.createReadStream(e.file_path,{highWaterMark:tM});n.setEncoding("utf8"),await Pp.parsePromise(n,oM.bind(null,e,s),vp.bind(null,r));let i=s.getPermsResponse();if(i)throw Fe(new Error,i,Nt.BAD_REQUEST);return n=Wr.createReadStream(e.file_path,{highWaterMark:tM}),n.setEncoding("utf8"),await Pp.parsePromise(n,aM.bind(null,e,t),vp.bind(null,r)),n.destroy(),t}catch(s){throw Fe(s,Ti(at.PAPA_PARSE_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,at.PAPA_PARSE_ERR+s)}}a(J8,"callPapaParse");function cM(e,t){let r=q8[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>F8(i,n));return s}a(cM,"createTransformMap");function vp(e,t,r){let s=e.get(r);return s?s(t):Io.autoCast(t)}a(vp,"typeFunction");async function X8(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new Hp,n=zL([Wr.createReadStream(e.file_path,{encoding:"utf-8"}),JL.withParser(),c=>c.value,new XL({batchSize:rM}),ZL(async c=>{await oM(e,s,r,c)})]);await new Promise((c,u)=>{jL(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Fe(new Error,i,Nt.BAD_REQUEST);let o=zL([Wr.createReadStream(e.file_path,{encoding:"utf-8"}),JL.withParser(),c=>c.value,new XL({batchSize:rM}),ZL(async c=>{await aM(e,t,r,c)})]);return await new Promise((c,u)=>{jL(o,l=>{l?u(l):c()}),o.resume()}),t}catch(s){throw Fe(s,Ti(at.INSERT_JSON_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,at.INSERT_JSON_ERR+s)}}a(X8,"insertJson");async function uM(e){let t={};try{e.data&&e.data.length>0&&Z8(e.data[0])?t=await j8(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",wo.info(t.message))}catch(r){throw Ri(r)}return t}a(uM,"callBulkFileLoad");function Z8(e){let t=Object.keys(e);for(let r of t)if(!G8.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Z8,"validateColumnNames");async function j8(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=ld.insert;break;case"update":i=ld.update;break;case"upsert":i=ld.upsert;break;default:throw Fe(new Error,at.INVALID_ACTION_PARAM_ERR(s),Nt.BAD_REQUEST,Kr.LOG_LEVELS.ERROR,at.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=Io.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Ri(o)}}a(j8,"bulkFileLoad");function lM(e,t){return`successfully loaded ${t} of ${e} records`}a(lM,"buildResponseMsg");function Ri(e){return Fe(e,Ti(at.DEFAULT_BULK_LOAD_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,at.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ri,"buildTopLevelErrMsg")});var EM=m((G_e,dM)=>{"use strict";var xp=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};dM.exports=xp});var mM=m((k_e,hM)=>{"use strict";var e6=R(),fM=require("moment"),t6=require("uuid").v4,kp=class{static{a(this,"JobObject")}constructor(){this.id=t6(),this.type=void 0,this.start_datetime=fM().valueOf(),this.created_datetime=fM().valueOf(),this.end_datetime=void 0,this.status=e6.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};hM.exports=kp});var Vp=m(($_e,AM)=>{"use strict";var r6=require("uuid").v4,TM=ir(),RM=Rr(),s6=os(),n6=Zi(),i6=EM(),Ge=R(),o6=mM(),a6=Xl(),Dr=F(),c6=Sa(),Co=G(),{promisify:u6}=require("util"),gi=require("moment"),l6=z_(),fd=Cp(),SM=Bf(),{deleteTransactionLogsBeforeValidator:_6}=ep(),{handleHDBError:d6,hdb_errors:E6}=Q(),{HTTP_STATUS_CODES:f6}=E6,pM=RM.searchByValue,h6=RM.searchByHash,m6=TM.insert,S6=u6(l6.evaluateSQL),p6=TM.update;AM.exports={addJob:g6,updateJob:O6,handleGetJob:T6,handleGetJobsByStartDate:R6,getJobById:gM};async function T6(e){try{let t=await gM(e.id);return Co.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 Dr.error("There was an error getting job",t),new Error(r)}}a(T6,"handleGetJob");async function R6(e){try{let t=await A6(e);if(Dr.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=gi(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=gi(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Dr.error(r),new Error(r)}}a(R6,"handleGetJobsByStartDate");async function g6(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Co.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return Dr.info(_),t.error=_,t}if(!Ge.JOB_TYPE_ENUM[e.operation])return Dr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ge.OPERATIONS_ENUM.CSV_FILE_LOAD:s=fd.fileObject(e);break;case Ge.OPERATIONS_ENUM.CSV_URL_LOAD:s=fd.urlObject(e);break;case Ge.OPERATIONS_ENUM.CSV_DATA_LOAD:s=fd.dataObject(e);break;case Ge.OPERATIONS_ENUM.IMPORT_FROM_S3:s=fd.s3FileObject(e);break;case Ge.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ge.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=SM(e,"date");break;case Ge.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=SM(e,"timestamp");break;case Ge.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=_6(e);break;default:break}if(s)throw d6(s,s.message,f6.BAD_REQUEST,void 0,void 0,!0);let n=new o6;n.type=e.operation===Ge.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ge.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new s6(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await pM(i))}catch(_){let d=`There was an error inserting a new job: ${_}`;return Dr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=r6();try{o=await pM(i)}catch(_){let d=`There was an error inserting a new job: ${_}`;return Dr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Dr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new c6(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await m6(u)}catch(_){return Dr.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,Dr.trace(_)}return t}a(g6,"addJob");async function A6(e){let t=gi(e.from_date,gi.ISO_8601),r=gi(e.to_date,gi.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new i6(s,e.hdb_user);try{return await S6(n)}catch(i){throw Dr.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(A6,"getJobsInDateRange");async function gM(e){if(Co.isEmptyOrZeroLength(e))return Co.errorizeMessage("Invalid job ID specified.");let t=new n6(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await h6(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Dr.error(s),Co.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(gM,"getJobById");async function O6(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Co.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ge.JOB_STATUS_ENUM.COMPLETE||e.status===Ge.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=gi().valueOf());let t=new a6(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await p6(t),r}a(O6,"updateJob")});var wM=m((K_e,IM)=>{"use strict";var OM=G(),Xt=R(),N6=require("moment"),hd=Fp(),md=F(),NM=Vp(),bM=J_(),yM=hn(),b6=Ve(),y6=F_(),$p=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function I6(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(OM.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(OM.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Xt.JOB_TYPE_ENUM.csv_file_load:await Js(e,hd.csvFileLoad);break;case Xt.JOB_TYPE_ENUM.csv_url_load:await Js(e,hd.csvURLLoad);break;case Xt.JOB_TYPE_ENUM.csv_data_load:await Js(e,hd.csvDataLoad);break;case Xt.JOB_TYPE_ENUM.import_from_s3:await Js(e,hd.importFromS3);break;case Xt.JOB_TYPE_ENUM.empty_trash:break;case Xt.JOB_TYPE_ENUM.export_local:await Js(e,bM.export_local);break;case Xt.JOB_TYPE_ENUM.export_to_s3:await Js(e,bM.export_to_s3);break;case Xt.JOB_TYPE_ENUM.delete_files_before:case Xt.JOB_TYPE_ENUM.delete_records_before:await Js(e,yM.deleteFilesBefore);break;case Xt.JOB_TYPE_ENUM.delete_audit_logs_before:await Js(e,yM.deleteAuditLogsBefore);break;case Xt.JOB_TYPE_ENUM.delete_transaction_logs_before:await Js(e,y6.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(I6,"parseMessage");async function Js(e,t){try{e.job.status=Xt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=N6().valueOf(),await NM.updateJob(e.job),await w6(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):md.error(`There was an error running ${t.name} job with id ${e.job.id}`),md.error(s),e.job.message=s,e.job.status=Xt.JOB_STATUS_ENUM.ERROR;try{await NM.updateJob(e.job)}catch(n){throw md.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Js,"runJob");async function w6(e){md.trace("launching job thread:",e),b6.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Xt.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(w6,"launchJobThread");IM.exports={parseMessage:I6,RunnerMessage:$p}});var UM=m((Q_e,CM)=>{"use strict";var Yp=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};CM.exports=Yp});var WM=m((J_e,Jp)=>{"use strict";var Rd=Rr(),Qp=z_(),Sd=Fp(),Xs=Ja(),pd=dn(),Fc=hn(),C6=gm(),qc=Or(),Td=Um(),bt=jS(),ct=F(),U6=Mm(),D6=a_(),L6=ES(),M6=__(),P6=fS(),v6=hS(),B6=pS(),H6=RS(),Kp=OS(),DM=J_(),q6=W_(),zp=Vp(),I=R(),{hdb_errors:xc,handleHDBError:Gc}=Q(),{HTTP_STATUS_CODES:LM}=xc,Wp=wS(),MM=YS(),kM=require("util"),Uo=ir(),F6=Ps(),G6=fo(),PM=wM(),vM=ec(),BM=(v_(),re(gc)),HM=Ar(),qM=F_(),FM=V_(),{setServerUtilities:x6}=(Ed(),re(Gp)),{CONTEXT:k6}=(Zr(),re(FE)),{_assignPackageExport:V6}=require("../index"),{transformReq:$6}=G(),Y6=Up(),GM=Rd.searchByHash,K6=Rd.searchByValue,W6=kM.promisify(Rd.search),Q6=kM.promisify(Qp.evaluateSQL),z6={[I.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[I.OPERATIONS_ENUM.CREATE_TABLE]:!0,[I.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[I.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[I.OPERATIONS_ENUM.DROP_TABLE]:!0,[I.OPERATIONS_ENUM.DROP_SCHEMA]:!0},B=UM();async function VM(e,t){try{if(e.body.operation!=="read_log"&&(ct.log_level===I.LOG_LEVELS.INFO||ct.log_level===I.LOG_LEVELS.DEBUG||ct.log_level===I.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;ct.info(o)}}catch(s){ct.error(s)}let r=await Y6.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return z6[e.body.operation]&&F6.setSchemaDataToGlobal(s=>{s&&ct.error(s)}),r}a(VM,"processLocalTransaction");var xM=X6();Jp.exports={chooseOperation:$M,getOperationFunction:YM,operation:KM,processLocalTransaction:VM};x6(Jp.exports);function $M(e){let t;try{t=YM(e)}catch(n){throw ct.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=Qp.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Qp.checkASTPermissions(e,i);if(o)throw ct.error(`${LM.FORBIDDEN} from operation ${e.operation}`),ct.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Gc(new Error,o,xc.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=q6.verifyPerms(i,n);if(o)throw ct.error(`${LM.FORBIDDEN} from operation ${e.operation}`),ct.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Gc(new Error,o,xc.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw Gc(n,"There was an error when trying to choose an operation path")}return r}a($M,"chooseOperation");function YM(e){if(ct.trace(`getOperationFunction with operation: ${e.operation}`),xM.has(e.operation))return xM.get(e.operation);throw Gc(new Error,xc.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),xc.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(YM,"getOperationFunction");V6("operation",KM);function KM(e,t){e.hdb_user=this[k6]?.user,e.bypass_auth=!t;let r=$M(e);return VM({body:e},r)}a(KM,"operation");async function J6(e){ct.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 Uo.insert(i);break;case I.OPERATIONS_ENUM.UPDATE:o=await Uo.update(i);break;case I.OPERATIONS_ENUM.UPSERT:o=await Uo.upsert(i);break;case I.OPERATIONS_ENUM.DELETE:o=await Fc.deleteRecord(i);break;default:ct.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){ct.info("Invalid operation in transaction"),ct.error(o)}}a(J6,"catchup");async function ps(e){$6(e);let t,r;try{r=await zp.addJob(e),t=r.createdJob,ct.info("addJob result",r);let s=new PM.RunnerMessage(t,e);return await PM.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 ct.error(n),Gc(s,n)}}a(ps,"executeJob");function X6(){let e=new Map;return e.set(I.OPERATIONS_ENUM.INSERT,new B(Uo.insert)),e.set(I.OPERATIONS_ENUM.UPDATE,new B(Uo.update)),e.set(I.OPERATIONS_ENUM.UPSERT,new B(Uo.upsert)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new B(Rd.searchByConditions)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_HASH,new B(GM)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_ID,new B(GM)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_VALUE,new B(K6)),e.set(I.OPERATIONS_ENUM.SEARCH,new B(W6)),e.set(I.OPERATIONS_ENUM.SQL,new B(Q6)),e.set(I.OPERATIONS_ENUM.CSV_DATA_LOAD,new B(ps,Sd.csvDataLoad)),e.set(I.OPERATIONS_ENUM.CSV_FILE_LOAD,new B(ps,Sd.csvFileLoad)),e.set(I.OPERATIONS_ENUM.CSV_URL_LOAD,new B(ps,Sd.csvURLLoad)),e.set(I.OPERATIONS_ENUM.IMPORT_FROM_S3,new B(ps,Sd.importFromS3)),e.set(I.OPERATIONS_ENUM.CREATE_SCHEMA,new B(Xs.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_DATABASE,new B(Xs.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_TABLE,new B(Xs.createTable)),e.set(I.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new B(Xs.createAttribute)),e.set(I.OPERATIONS_ENUM.DROP_SCHEMA,new B(Xs.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_DATABASE,new B(Xs.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_TABLE,new B(Xs.dropTable)),e.set(I.OPERATIONS_ENUM.DROP_ATTRIBUTE,new B(Xs.dropAttribute)),e.set(I.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new B(pd.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_DATABASE,new B(pd.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_TABLE,new B(pd.describeTable)),e.set(I.OPERATIONS_ENUM.DESCRIBE_ALL,new B(pd.describeAll)),e.set(I.OPERATIONS_ENUM.DELETE,new B(Fc.deleteRecord)),e.set(I.OPERATIONS_ENUM.ADD_USER,new B(qc.addUser)),e.set(I.OPERATIONS_ENUM.ALTER_USER,new B(qc.alterUser)),e.set(I.OPERATIONS_ENUM.DROP_USER,new B(qc.dropUser)),e.set(I.OPERATIONS_ENUM.LIST_USERS,new B(qc.listUsersExternal)),e.set(I.OPERATIONS_ENUM.LIST_ROLES,new B(Td.listRoles)),e.set(I.OPERATIONS_ENUM.ADD_ROLE,new B(Td.addRole)),e.set(I.OPERATIONS_ENUM.ALTER_ROLE,new B(Td.alterRole)),e.set(I.OPERATIONS_ENUM.DROP_ROLE,new B(Td.dropRole)),e.set(I.OPERATIONS_ENUM.USER_INFO,new B(qc.userInfo)),e.set(I.OPERATIONS_ENUM.READ_LOG,new B(U6)),e.set(I.OPERATIONS_ENUM.ADD_NODE,new B(D6)),e.set(I.OPERATIONS_ENUM.UPDATE_NODE,new B(L6)),e.set(I.OPERATIONS_ENUM.REMOVE_NODE,new B(M6)),e.set(I.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new B(P6)),e.set(I.OPERATIONS_ENUM.PURGE_STREAM,new B(v6)),e.set(I.OPERATIONS_ENUM.SET_CONFIGURATION,new B(HM.setConfiguration)),e.set(I.OPERATIONS_ENUM.CLUSTER_STATUS,new B(B6.clusterStatus)),e.set(I.OPERATIONS_ENUM.CLUSTER_NETWORK,new B(H6)),e.set(I.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new B(Kp.setRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new B(Kp.getRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new B(Kp.deleteRoutes)),e.set(I.OPERATIONS_ENUM.EXPORT_TO_S3,new B(ps,DM.export_to_s3)),e.set(I.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new B(ps,Fc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new B(ps,Fc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.EXPORT_LOCAL,new B(ps,DM.export_local)),e.set(I.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new B(zp.handleGetJobsByStartDate)),e.set(I.OPERATIONS_ENUM.GET_JOB,new B(zp.handleGetJob)),e.set(I.OPERATIONS_ENUM.GET_FINGERPRINT,new B(Wp.getFingerprint)),e.set(I.OPERATIONS_ENUM.SET_LICENSE,new B(Wp.setLicense)),e.set(I.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new B(Wp.getRegistrationInfo)),e.set(I.OPERATIONS_ENUM.RESTART,new B(MM.restart)),e.set(I.OPERATIONS_ENUM.RESTART_SERVICE,new B(MM.restartService)),e.set(I.OPERATIONS_ENUM.CATCHUP,new B(J6)),e.set(I.OPERATIONS_ENUM.SYSTEM_INFORMATION,new B(G6.systemInformation)),e.set(I.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new B(ps,Fc.deleteAuditLogsBefore)),e.set(I.OPERATIONS_ENUM.READ_AUDIT_LOG,new B(C6)),e.set(I.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new B(vM.createTokens)),e.set(I.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new B(vM.refreshOperationToken)),e.set(I.OPERATIONS_ENUM.LOGIN,new B(BM.login)),e.set(I.OPERATIONS_ENUM.LOGOUT,new B(BM.logout)),e.set(I.OPERATIONS_ENUM.GET_CONFIGURATION,new B(HM.getConfiguration)),e.set(I.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new B(bt.customFunctionsStatus)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new B(bt.getCustomFunctions)),e.set(I.OPERATIONS_ENUM.GET_COMPONENT_FILE,new B(bt.getComponentFile)),e.set(I.OPERATIONS_ENUM.GET_COMPONENTS,new B(bt.getComponents)),e.set(I.OPERATIONS_ENUM.SET_COMPONENT_FILE,new B(bt.setComponentFile)),e.set(I.OPERATIONS_ENUM.DROP_COMPONENT,new B(bt.dropComponent)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new B(bt.getCustomFunction)),e.set(I.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new B(bt.setCustomFunction)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new B(bt.dropCustomFunction)),e.set(I.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new B(bt.addComponent)),e.set(I.OPERATIONS_ENUM.ADD_COMPONENT,new B(bt.addComponent)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new B(bt.dropCustomFunctionProject)),e.set(I.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new B(bt.packageComponent)),e.set(I.OPERATIONS_ENUM.PACKAGE_COMPONENT,new B(bt.packageComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new B(bt.deployComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_COMPONENT,new B(bt.deployComponent)),e.set(I.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new B(qM.readTransactionLog)),e.set(I.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new B(ps,qM.deleteTransactionLogsBefore)),e.set(I.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new B(FM.installModules)),e.set(I.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new B(FM.auditModules)),e.set(I.OPERATIONS_ENUM.GET_BACKUP,new B(Xs.getBackup)),e}a(X6,"initializeOperationFunctionMap")});var Ad=m((Z_e,JM)=>{"use strict";var Xp=R(),Z6=G(),kc=F(),{handleHDBError:Zp,hdb_errors:gd}=Q(),{isMainThread:j6}=require("worker_threads"),{Readable:e9}=require("stream"),QM=require("os"),t9=require("util"),r9=Vm(),s9=t9.promisify(r9.authorize),zM=WM(),{Gzip:n9}=require("zlib");function i9(e){let t=`Found an uncaught exception with message: ${e.message}. ${QM.EOL}Stack: ${e.stack} ${QM.EOL}Terminating ${j6?"HDB":"thread"}.`;console.error(t),kc.fatal(t),process.exit(1)}a(i9,"handleServerUncaughtException");function o9(e,t,r){if(kc[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:gd.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(o9,"serverErrorHandler");function a9(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=Zp(new Error,"Invalid JSON.",gd.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(Z6.isEmpty(e.body.operation)){let s=Zp(new Error,"Request body must include an 'operation' property.",gd.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(a9,"reqBodyValidationHandler");function c9(e,t,r){let s;e.body.operation!==Xp.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Xp.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Xp.OPERATIONS_ENUM.LOGOUT?s9(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{kc.warn(n),kc.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(Zp(n,i,gd.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(c9,"authHandler");async function u9(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=zM.chooseOperation(e.body);let n=await zM.processLocalTransaction(e,s);if(n instanceof e9&&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 n9))}return n}catch(n){throw kc.error(n),n}}a(u9,"handlePostRequest");JM.exports={authHandler:c9,handlePostRequest:u9,handleServerUncaughtException:i9,serverErrorHandler:o9,reqBodyValidationHandler:a9}});var eP=m((ede,jM)=>{"use strict";var l9=require("fastify-plugin"),{handlePostRequest:XM,authHandler:_9,reqBodyValidationHandler:d9}=Ad();async function E9(e){e.decorate("hdbCore",{preValidation:[d9,_9],request:t=>ZM(XM(t)),requestWithoutAuthentication:t=>ZM(XM(t,!0))})}a(E9,"hdbCore");async function ZM(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(ZM,"convertAsyncIterators");jM.exports=l9(E9)});var rP=m((rde,tP)=>{"use strict";var jp=require("fs"),Do=W();Do.initSync();var{CONFIG_PARAMS:Vc}=R(),f9=1024*1024*1024;function h9(e){let t=Do.get(Vc.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=Do.get(Vc.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:f9,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Do.get(Vc.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=Do.get(Vc.CUSTOMFUNCTIONS_TLS_CERTIFICATE),o=Do.get(Vc.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:jp.readFileSync(`${n}`),cert:jp.readFileSync(i)+(o?`
|
|
22
|
+
`},q:.8});Et.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});HL={type:"application/json",serializeStream:ed.streamAsJSON,serialize:JSON.stringify,deserialize:u8,q:.8};Et.set("*/*",HL);Et.set("",HL);a(u8,"tryJSONParse");a(Op,"registerContentHandlers");l8=require("fastify-plugin"),_8=l8(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=sd(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(sd,"findBestSerializer");a(Np,"serialize");a(Ws,"serializeMessage");a(d8,"streamToBuffer");a(Io,"getDeserializer");a(PL,"deserializerUnknownType");a(E8,"transformIterable")});var Ip={};tt(Ip,{start:()=>m8});async function h8(e,t){let r=e.headers.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Du(e);let s=performance.now(),n,i=new Ro;try{e.responseHeaders=i;let o=e.url.slice(1),c=yp.getMatch(o);if(!c)return t(e);let u={url:c.relativeURL},l=c.Resource,_=await We(e,()=>{if(r==="POST"||r==="PUT"||r==="PATCH"||r==="QUERY")try{e.data=Io(e.headers["content-type"],!0)(e.body)}catch(R){throw new Hc.ClientError(R,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 Hc.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Hc.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){f8[0]=f;let R=String.fromCharCode(34,(Ot[0]&63)+62,(Ot[0]>>6)+(Ot[1]<<2&63)+62,(Ot[1]>>4)+(Ot[2]<<4&63)+62,(Ot[2]>>2)+62,(Ot[3]&63)+62,(Ot[3]>>6)+(Ot[4]<<2&63)+62,(Ot[4]>>4)+(Ot[5]<<4&63)+62,(Ot[5]>>2)+62,(Ot[6]&63)+62,(Ot[6]>>6)+(Ot[7]<<2&63)+62,34),O=e.headers["if-none-match"];O&&R==O?(_?.onDone&&_.onDone(),E=304,_=void 0):i.set("ETag",R)}e.createdResource&&(E=201),e.newLocation&&i.set("Location",e.newLocation);let h={status:E,headers:i,body:void 0},p=`db;dur=${d.toFixed(2)}`,T=_?.wasLoadedFromSource?.();return T!==void 0&&(T?p+=", miss":f&&i.set("Age",Math.round((Date.now()-f)/1e3))),i.append("Server-Timing",p,!0),_s(d,"TTFB",n,r),so(E<400,"success",n,r),_!==void 0&&(h.body=Np(_,e,h),r==="HEAD"&&(h.body=void 0)),h}catch(o){let c=performance.now()-s;return _s(c,"TTFB",n,r),so(!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:Ws(o.toString(),e)}}}function m8(e){if(FL)return;FL=!0,yp=e.resources,e.server.http(async(r,s)=>{if(!r.isWebSocket)return h8(r,s)}),e.server.ws(async(r,s,n)=>{GL++,bp||(setTimeout(()=>{console.log("connection count",GL,"mem",Math.round(process.memoryUsage().heapUsed/1e6)),bp=!1},1e3),bp=!0),t(s);let i=new Xr;r.on("error",console.error);let o;r.on("message",a(function(d){o||(o=Io(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 yp.call(s.pathname.slice(1),s,(_,d)=>(u=!0,_.connect(i)));if(!u)r.send(Ws(`No resource was found to handle ${s.pathname}`,s));else{c=l[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;)r.send(Ws(_.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 Hc,Ot,f8,FL,yp,GL,bp,xL=Se(()=>{Ao();ai();Hc=C(Q());Lu();aa();Yn();jS();Ot=new Uint8Array(8),f8=new Float64Array(Ot.buffer,0,1);a(h8,"http");GL=0;a(m8,"start")});var wp=m((v_e,kL)=>{var{recordAction:nd,recordActionBinary:S8}=(ai(),re(ql)),p8=require("fastify-plugin"),T8=200;kL.exports=p8(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),nd(o,"TTFB",l,d,_),S8(n.raw.statusCode<400,"success",l,d,_);let E=T8;i?.pipe?(i.on("data",h=>{E+=h.length}),i.on("end",()=>{nd(performance.now()-c,"transfer",l,d,_),nd(E,"bytes-sent",l,d,_)})):(E+=i?.length||0,nd(E,"bytes-sent",l,d,_));let f=o.toFixed(3);n.header("Server-Timing",`db;dur=${f}`)}),r()},{name:"hdb-request-time"})});var Lp=m((B_e,WL)=>{var ud=require("clone"),ld=Ue(),R8=k(),ad=g(),g8=F(),id=require("fs"),Cp=require("joi"),{string:cd}=Cp.types(),{hdb_errors:A8,handleHDBError:qc}=Q(),{HDB_ERROR_MSGS:O8,HTTP_STATUS_CODES:od}=A8,{common_validators:wo}=ss(),VL=1e9,$L=" is required",N8=["insert","update","upsert"],Up={database:{presence:!1,format:wo.schema_format,length:wo.schema_length},schema:{presence:!1,format:wo.schema_format,length:wo.schema_length},table:{presence:!0,format:wo.schema_format,length:wo.schema_length},action:{inclusion:{within:N8,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},b8={schema:cd.required(),table:cd.required(),action:cd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:y8,AWS_SECRET:I8,AWS_BUCKET:w8,AWS_FILE_KEY:C8,REGION:U8}=ad.S3_BUCKET_AUTH_KEYS,D8={s3:{presence:!0},[`s3.${y8}`]:{presence:!0,type:"String"},[`s3.${I8}`]:{presence:!0,type:"String"},[`s3.${w8}`]:{presence:!0,type:"String"},[`s3.${C8}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${U8}`]:{presence:!0,type:"String"}},YL=ud(Up);YL.data.presence={message:$L};var KL=ud(Up);KL.file_path.presence={message:$L};var L8=Object.assign(ud(Up),D8),Dp=ud(b8);Dp.csv_url=cd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Dp.passthrough_headers=Cp.object();function M8(e){let t=ld.validateObject(e,YL);return _d(e,t)}a(M8,"dataObject");function P8(e){let t=ld.validateBySchema(e,Cp.object(Dp));return _d(e,t)}a(P8,"urlObject");function v8(e){let t=ld.validateObject(e,KL);return _d(e,t)}a(v8,"fileObject");function B8(e){let t=ld.validateObject(e,L8);return _d(e,t)}a(B8,"s3FileObject");function _d(e,t){if(!t){let r=R8.checkGlobalSchemaTable(e.schema,e.table);if(r)return qc(new Error,r,od.BAD_REQUEST);if(e.operation===ad.OPERATIONS_ENUM.CSV_FILE_LOAD){try{id.accessSync(e.file_path,id.constants.R_OK|id.constants.F_OK)}catch(s){return s.code===ad.NODE_ERROR_CODES.ENOENT?qc(s,`No such file or directory ${s.path}`,od.BAD_REQUEST):s.code===ad.NODE_ERROR_CODES.EACCES?qc(s,`Permission denied ${s.path}`,od.BAD_REQUEST):qc(s)}try{let s=id.statSync(e.file_path).size;if(s>VL)return qc(new Error,O8.MAX_FILE_SIZE_ERR(s,VL),od.BAD_REQUEST)}catch(s){g8.error(s),console.error(s)}}}return t}a(_d,"postValidateChecks");WL.exports={dataObject:M8,urlObject:P8,fileObject:v8,s3FileObject:B8}});var Mp=m((q_e,QL)=>{"use strict";var Fc=F(),dd=g();async function H8(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===dd.OPERATIONS_ENUM.INSERT||t.operation===dd.OPERATIONS_ENUM.UPDATE||t.operation===dd.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===dd.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Fc.info(i.message),i):i.http_resp_msg?(Fc.error(`Error calling operation: ${e.name}`),Fc.error(i.http_resp_msg),i):(Fc.error(`Error calling operation: ${e.name}`),Fc.error(i),i)}}a(H8,"callOperationFunctionAsAwait");QL.exports={callOperationFunctionAsAwait:H8}});var JL=m((G_e,zL)=>{"use strict";var Pp=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}},vp=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};zL.exports={BulkLoadFileObject:Pp,BulkLoadDataObject:vp}});var ZL=m((k_e,XL)=>{"use strict";var Bp=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};XL.exports=Bp});var kp=m((Q_e,hM)=>{"use strict";var Ed=ir(),hd=Lp(),q8=require("needle"),Kr=g(),$_e=be(),Co=k(),{handleHDBError:Fe,hdb_errors:aM}=Q(),{HTTP_STATUS_CODES:Nt,HDB_ERROR_MSGS:ut,CHECK_LOGS_WRAPPER:Ri}=aM,Uo=F(),Hp=require("papaparse");Co.promisifyPapaParse();var Wr=require("fs-extra"),F8=require("path"),{chain:jL}=require("stream-chain"),eM=require("stream-json/streamers/StreamArray"),tM=require("stream-json/utils/Batch"),rM=require("stream-chain/utils/comp"),{finished:sM}=require("stream"),G8=W(),cM=Mp(),x8=Rp(),{BulkLoadFileObject:Fp,BulkLoadDataObject:k8}=JL(),Gp=lp(),{verifyBulkLoadAttributePerms:uM}=J_(),Y_e=ZL(),K_e=He(),W_e=vs(),{databases:V8}=(de(),re(Ne)),{coerceType:$8}=(md(),re(Vp)),nM="No records parsed from csv file.",Ti=`${G8.get("HDB_ROOT")}/tmp`,{schema_regex:Y8}=ss(),iM=1024*1024*2,oM=5e3,K8={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};hM.exports={csvDataLoad:W8,csvURLLoad:Q8,csvFileLoad:z8,importFromS3:J8};async function W8(e,t){let r=hd.dataObject(e);if(r)throw Fe(r,r.message,Nt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=dM(e.schema,e.table),i=Hp.parse(e.data,{header:!0,skipEmptyLines:!0,transform:qp.bind(null,n),dynamicTyping:!1}),o=new Gp;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&uM(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw Fe(new Error,c,Nt.BAD_REQUEST,void 0,void 0,!0);let u=new k8(e.action,e.schema,e.table,i.data);return s=await cM.callOperationFunctionAsAwait(EM,u,null),s.message===nM?nM:fM(s.records,s.number_written)}catch(n){throw gi(n)}}a(W8,"csvDataLoad");async function Q8(e){let t=hd.urlObject(e);if(t)throw Fe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Ti}/${r}`;try{await X8(e,r)}catch(n){throw Uo.error(ut.DOWNLOAD_FILE_ERR(r)+" - "+n),Fe(n,Ri(ut.DOWNLOAD_FILE_ERR(r)))}try{let n=new Fp(this.job_operation_function.name,e.action,e.schema,e.table,s,Kr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await xp(n);return await fd(s),i}catch(n){throw await fd(s),gi(n)}}a(Q8,"csvURLLoad");async function z8(e){let t=hd.fileObject(e);if(t)throw Fe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r=new Fp(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Kr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await xp(r)}catch(s){throw gi(s)}}a(z8,"csvFileLoad");async function J8(e){let t=hd.s3FileObject(e);if(t)throw Fe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=F8.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Ti}/${n}`;let i=new Fp(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await Z8(n,e);let o=await xp(i);return await fd(r),o}catch(s){throw await fd(r),gi(s)}}a(J8,"importFromS3");async function X8(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await q8("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw Fe(s,n,s.statusCode,Kr.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}e6(r,e.csv_url),await j8(t,r.raw)}a(X8,"downloadCSVFile");async function Z8(e,t){try{let r=`${Ti}/${e}`;await Wr.mkdirp(Ti),await Wr.writeFile(`${Ti}/${e}`,"",{flag:"a+"});let s=await Wr.createWriteStream(r),n=await x8.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(){Uo.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Uo.error(ut.S3_DOWNLOAD_ERR+" - "+r),Fe(r,Ri(ut.S3_DOWNLOAD_ERR))}}a(Z8,"downloadFileFromS3");async function j8(e,t){try{await Wr.mkdirp(Ti),await Wr.writeFile(`${Ti}/${e}`,t)}catch(r){throw Uo.error(ut.WRITE_TEMP_FILE_ERR),Fe(r,Ri(ut.DEFAULT_BULK_LOAD_ERR))}}a(j8,"writeFileToTempFolder");async function fd(e){if(e)try{await Wr.access(e),await Wr.unlink(e)}catch{Uo.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(fd,"deleteTempFile");function e6(e,t){if(e.statusCode!==aM.HTTP_STATUS_CODES.OK)throw Fe(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Nt.BAD_REQUEST);if(!K8[e.headers["content-type"]])throw Fe(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Nt.BAD_REQUEST);if(!e.raw)throw Fe(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Nt.BAD_REQUEST)}a(e6,"validateURLResponse");async function xp(e){try{let t;switch(e.file_type){case Kr.VALID_S3_FILE_TYPES.CSV:t=await t6(e);break;case Kr.VALID_S3_FILE_TYPES.JSON:t=await r6(e);break;default:throw Fe(new Error,ut.DEFAULT_BULK_LOAD_ERR,Nt.BAD_REQUEST,Kr.LOG_LEVELS.ERROR,ut.INVALID_FILE_EXT_ERR(e))}return fM(t.records,t.number_written)}catch(t){throw gi(t)}}a(xp,"fileLoad");async function lM(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 Ed.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&uM(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=Fe(c);r(u)}}a(lM,"validateChunk");async function _M(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Co.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Co.isEmpty(c)&&!Co.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 cM.callOperationFunctionAsAwait(EM,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Fe(c,Ri(ut.INSERT_CSV_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ut.INSERT_CSV_ERR+" - "+c);r(u)}}a(_M,"insertChunk");async function t6(e){let t={records:0,number_written:0},r=dM(e.schema,e.table);try{let s=new Gp,n=Wr.createReadStream(e.file_path,{highWaterMark:iM});n.setEncoding("utf8"),await Hp.parsePromise(n,lM.bind(null,e,s),qp.bind(null,r));let i=s.getPermsResponse();if(i)throw Fe(new Error,i,Nt.BAD_REQUEST);return n=Wr.createReadStream(e.file_path,{highWaterMark:iM}),n.setEncoding("utf8"),await Hp.parsePromise(n,_M.bind(null,e,t),qp.bind(null,r)),n.destroy(),t}catch(s){throw Fe(s,Ri(ut.PAPA_PARSE_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ut.PAPA_PARSE_ERR+s)}}a(t6,"callPapaParse");function dM(e,t){let r=V8[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>$8(i,n));return s}a(dM,"createTransformMap");function qp(e,t,r){let s=e.get(r);return s?s(t):Co.autoCast(t)}a(qp,"typeFunction");async function r6(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new Gp,n=jL([Wr.createReadStream(e.file_path,{encoding:"utf-8"}),eM.withParser(),c=>c.value,new tM({batchSize:oM}),rM(async c=>{await lM(e,s,r,c)})]);await new Promise((c,u)=>{sM(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Fe(new Error,i,Nt.BAD_REQUEST);let o=jL([Wr.createReadStream(e.file_path,{encoding:"utf-8"}),eM.withParser(),c=>c.value,new tM({batchSize:oM}),rM(async c=>{await _M(e,t,r,c)})]);return await new Promise((c,u)=>{sM(o,l=>{l?u(l):c()}),o.resume()}),t}catch(s){throw Fe(s,Ri(ut.INSERT_JSON_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ut.INSERT_JSON_ERR+s)}}a(r6,"insertJson");async function EM(e){let t={};try{e.data&&e.data.length>0&&s6(e.data[0])?t=await n6(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Uo.info(t.message))}catch(r){throw gi(r)}return t}a(EM,"callBulkFileLoad");function s6(e){let t=Object.keys(e);for(let r of t)if(!Y8.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(s6,"validateColumnNames");async function n6(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Ed.insert;break;case"update":i=Ed.update;break;case"upsert":i=Ed.upsert;break;default:throw Fe(new Error,ut.INVALID_ACTION_PARAM_ERR(s),Nt.BAD_REQUEST,Kr.LOG_LEVELS.ERROR,ut.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=Co.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw gi(o)}}a(n6,"bulkFileLoad");function fM(e,t){return`successfully loaded ${t} of ${e} records`}a(fM,"buildResponseMsg");function gi(e){return Fe(e,Ri(ut.DEFAULT_BULK_LOAD_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ut.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(gi,"buildTopLevelErrMsg")});var SM=m((J_e,mM)=>{"use strict";var $p=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};mM.exports=$p});var RM=m((Z_e,TM)=>{"use strict";var i6=g(),pM=require("moment"),o6=require("uuid").v4,Yp=class{static{a(this,"JobObject")}constructor(){this.id=o6(),this.type=void 0,this.start_datetime=pM().valueOf(),this.created_datetime=pM().valueOf(),this.end_datetime=void 0,this.status=i6.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};TM.exports=Yp});var Kp=m((ede,yM)=>{"use strict";var a6=require("uuid").v4,OM=ir(),NM=Ar(),c6=as(),u6=ji(),l6=SM(),Ge=g(),_6=RM(),d6=e_(),Mr=F(),E6=Ta(),Do=k(),{promisify:f6}=require("util"),Ai=require("moment"),h6=Z_(),Sd=Lp(),gM=Ff(),{deleteTransactionLogsBeforeValidator:m6}=np(),{handleHDBError:S6,hdb_errors:p6}=Q(),{HTTP_STATUS_CODES:T6}=p6,AM=NM.searchByValue,R6=NM.searchByHash,g6=OM.insert,A6=f6(h6.evaluateSQL),O6=OM.update;yM.exports={addJob:y6,updateJob:w6,handleGetJob:N6,handleGetJobsByStartDate:b6,getJobById:bM};async function N6(e){try{let t=await bM(e.id);return Do.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 Mr.error("There was an error getting job",t),new Error(r)}}a(N6,"handleGetJob");async function b6(e){try{let t=await I6(e);if(Mr.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=Ai(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ai(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 Mr.error(r),new Error(r)}}a(b6,"handleGetJobsByStartDate");async function y6(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Do.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return Mr.info(_),t.error=_,t}if(!Ge.JOB_TYPE_ENUM[e.operation])return Mr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ge.OPERATIONS_ENUM.CSV_FILE_LOAD:s=Sd.fileObject(e);break;case Ge.OPERATIONS_ENUM.CSV_URL_LOAD:s=Sd.urlObject(e);break;case Ge.OPERATIONS_ENUM.CSV_DATA_LOAD:s=Sd.dataObject(e);break;case Ge.OPERATIONS_ENUM.IMPORT_FROM_S3:s=Sd.s3FileObject(e);break;case Ge.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ge.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=gM(e,"date");break;case Ge.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=gM(e,"timestamp");break;case Ge.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=m6(e);break;default:break}if(s)throw S6(s,s.message,T6.BAD_REQUEST,void 0,void 0,!0);let n=new _6;n.type=e.operation===Ge.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ge.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new c6(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await AM(i))}catch(_){let d=`There was an error inserting a new job: ${_}`;return Mr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=a6();try{o=await AM(i)}catch(_){let d=`There was an error inserting a new job: ${_}`;return Mr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Mr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new E6(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await g6(u)}catch(_){return Mr.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,Mr.trace(_)}return t}a(y6,"addJob");async function I6(e){let t=Ai(e.from_date,Ai.ISO_8601),r=Ai(e.to_date,Ai.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 l6(s,e.hdb_user);try{return await A6(n)}catch(i){throw Mr.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(I6,"getJobsInDateRange");async function bM(e){if(Do.isEmptyOrZeroLength(e))return Do.errorizeMessage("Invalid job ID specified.");let t=new u6(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await R6(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Mr.error(s),Do.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(bM,"getJobById");async function w6(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Do.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ge.JOB_STATUS_ENUM.COMPLETE||e.status===Ge.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ai().valueOf());let t=new d6(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await O6(t),r}a(w6,"updateJob")});var LM=m((rde,DM)=>{"use strict";var IM=k(),Xt=g(),C6=require("moment"),pd=kp(),Td=F(),wM=Kp(),CM=j_(),UM=mn(),U6=Ve(),D6=k_(),Wp=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function L6(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(IM.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(IM.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Xt.JOB_TYPE_ENUM.csv_file_load:await Zs(e,pd.csvFileLoad);break;case Xt.JOB_TYPE_ENUM.csv_url_load:await Zs(e,pd.csvURLLoad);break;case Xt.JOB_TYPE_ENUM.csv_data_load:await Zs(e,pd.csvDataLoad);break;case Xt.JOB_TYPE_ENUM.import_from_s3:await Zs(e,pd.importFromS3);break;case Xt.JOB_TYPE_ENUM.empty_trash:break;case Xt.JOB_TYPE_ENUM.export_local:await Zs(e,CM.export_local);break;case Xt.JOB_TYPE_ENUM.export_to_s3:await Zs(e,CM.export_to_s3);break;case Xt.JOB_TYPE_ENUM.delete_files_before:case Xt.JOB_TYPE_ENUM.delete_records_before:await Zs(e,UM.deleteFilesBefore);break;case Xt.JOB_TYPE_ENUM.delete_audit_logs_before:await Zs(e,UM.deleteAuditLogsBefore);break;case Xt.JOB_TYPE_ENUM.delete_transaction_logs_before:await Zs(e,D6.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(L6,"parseMessage");async function Zs(e,t){try{e.job.status=Xt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=C6().valueOf(),await wM.updateJob(e.job),await M6(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):Td.error(`There was an error running ${t.name} job with id ${e.job.id}`),Td.error(s),e.job.message=s,e.job.status=Xt.JOB_STATUS_ENUM.ERROR;try{await wM.updateJob(e.job)}catch(n){throw Td.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Zs,"runJob");async function M6(e){Td.trace("launching job thread:",e),U6.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Xt.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(M6,"launchJobThread");DM.exports={parseMessage:L6,RunnerMessage:Wp}});var PM=m((nde,MM)=>{"use strict";var Qp=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};MM.exports=Qp});var XM=m((ode,jp)=>{"use strict";var Od=Ar(),Xp=Z_(),Rd=kp(),js=Za(),gd=En(),xc=mn(),P6=Nm(),Gc=br(),Ad=Mm(),bt=sp(),lt=F(),v6=Bm(),B6=l_(),H6=mS(),q6=f_(),F6=SS(),G6=pS(),x6=gS(),k6=OS(),zp=yS(),vM=j_(),V6=J_(),Zp=Kp(),I=g(),{hdb_errors:Vc,handleHDBError:kc}=Q(),{HTTP_STATUS_CODES:BM}=Vc,Jp=DS(),HM=QS(),KM=require("util"),Lo=ir(),$6=Bs(),Y6=ho(),qM=LM(),FM=rc(),GM=(q_(),re(Oc)),xM=Nr(),kM=k_(),VM=K_(),{setServerUtilities:K6}=(md(),re(Vp)),{CONTEXT:W6}=(Zr(),re(VE)),{_assignPackageExport:Q6}=require("../index"),{transformReq:z6}=k(),J6=Mp(),$M=Od.searchByHash,X6=Od.searchByValue,Z6=KM.promisify(Od.search),j6=KM.promisify(Xp.evaluateSQL),e9={[I.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[I.OPERATIONS_ENUM.CREATE_TABLE]:!0,[I.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[I.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[I.OPERATIONS_ENUM.DROP_TABLE]:!0,[I.OPERATIONS_ENUM.DROP_SCHEMA]:!0},B=PM();async function WM(e,t){try{if(e.body.operation!=="read_log"&&(lt.log_level===I.LOG_LEVELS.INFO||lt.log_level===I.LOG_LEVELS.DEBUG||lt.log_level===I.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;lt.info(o)}}catch(s){lt.error(s)}let r=await J6.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return e9[e.body.operation]&&$6.setSchemaDataToGlobal(s=>{s&<.error(s)}),r}a(WM,"processLocalTransaction");var YM=r9();jp.exports={chooseOperation:QM,getOperationFunction:zM,operation:JM,processLocalTransaction:WM};K6(jp.exports);function QM(e){let t;try{t=zM(e)}catch(n){throw lt.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=Xp.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Xp.checkASTPermissions(e,i);if(o)throw lt.error(`${BM.FORBIDDEN} from operation ${e.operation}`),lt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),kc(new Error,o,Vc.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=V6.verifyPerms(i,n);if(o)throw lt.error(`${BM.FORBIDDEN} from operation ${e.operation}`),lt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),kc(new Error,o,Vc.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw kc(n,"There was an error when trying to choose an operation path")}return r}a(QM,"chooseOperation");function zM(e){if(lt.trace(`getOperationFunction with operation: ${e.operation}`),YM.has(e.operation))return YM.get(e.operation);throw kc(new Error,Vc.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Vc.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(zM,"getOperationFunction");Q6("operation",JM);function JM(e,t){e.hdb_user=this[W6]?.user,e.bypass_auth=!t;let r=QM(e);return WM({body:e},r)}a(JM,"operation");async function t9(e){lt.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 Lo.insert(i);break;case I.OPERATIONS_ENUM.UPDATE:o=await Lo.update(i);break;case I.OPERATIONS_ENUM.UPSERT:o=await Lo.upsert(i);break;case I.OPERATIONS_ENUM.DELETE:o=await xc.deleteRecord(i);break;default:lt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){lt.info("Invalid operation in transaction"),lt.error(o)}}a(t9,"catchup");async function Rs(e){z6(e);let t,r;try{r=await Zp.addJob(e),t=r.createdJob,lt.info("addJob result",r);let s=new qM.RunnerMessage(t,e);return await qM.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 lt.error(n),kc(s,n)}}a(Rs,"executeJob");function r9(){let e=new Map;return e.set(I.OPERATIONS_ENUM.INSERT,new B(Lo.insert)),e.set(I.OPERATIONS_ENUM.UPDATE,new B(Lo.update)),e.set(I.OPERATIONS_ENUM.UPSERT,new B(Lo.upsert)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new B(Od.searchByConditions)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_HASH,new B($M)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_ID,new B($M)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_VALUE,new B(X6)),e.set(I.OPERATIONS_ENUM.SEARCH,new B(Z6)),e.set(I.OPERATIONS_ENUM.SQL,new B(j6)),e.set(I.OPERATIONS_ENUM.CSV_DATA_LOAD,new B(Rs,Rd.csvDataLoad)),e.set(I.OPERATIONS_ENUM.CSV_FILE_LOAD,new B(Rs,Rd.csvFileLoad)),e.set(I.OPERATIONS_ENUM.CSV_URL_LOAD,new B(Rs,Rd.csvURLLoad)),e.set(I.OPERATIONS_ENUM.IMPORT_FROM_S3,new B(Rs,Rd.importFromS3)),e.set(I.OPERATIONS_ENUM.CREATE_SCHEMA,new B(js.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_DATABASE,new B(js.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_TABLE,new B(js.createTable)),e.set(I.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new B(js.createAttribute)),e.set(I.OPERATIONS_ENUM.DROP_SCHEMA,new B(js.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_DATABASE,new B(js.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_TABLE,new B(js.dropTable)),e.set(I.OPERATIONS_ENUM.DROP_ATTRIBUTE,new B(js.dropAttribute)),e.set(I.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new B(gd.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_DATABASE,new B(gd.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_TABLE,new B(gd.describeTable)),e.set(I.OPERATIONS_ENUM.DESCRIBE_ALL,new B(gd.describeAll)),e.set(I.OPERATIONS_ENUM.DELETE,new B(xc.deleteRecord)),e.set(I.OPERATIONS_ENUM.ADD_USER,new B(Gc.addUser)),e.set(I.OPERATIONS_ENUM.ALTER_USER,new B(Gc.alterUser)),e.set(I.OPERATIONS_ENUM.DROP_USER,new B(Gc.dropUser)),e.set(I.OPERATIONS_ENUM.LIST_USERS,new B(Gc.listUsersExternal)),e.set(I.OPERATIONS_ENUM.LIST_ROLES,new B(Ad.listRoles)),e.set(I.OPERATIONS_ENUM.ADD_ROLE,new B(Ad.addRole)),e.set(I.OPERATIONS_ENUM.ALTER_ROLE,new B(Ad.alterRole)),e.set(I.OPERATIONS_ENUM.DROP_ROLE,new B(Ad.dropRole)),e.set(I.OPERATIONS_ENUM.USER_INFO,new B(Gc.userInfo)),e.set(I.OPERATIONS_ENUM.READ_LOG,new B(v6)),e.set(I.OPERATIONS_ENUM.ADD_NODE,new B(B6)),e.set(I.OPERATIONS_ENUM.UPDATE_NODE,new B(H6)),e.set(I.OPERATIONS_ENUM.REMOVE_NODE,new B(q6)),e.set(I.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new B(F6)),e.set(I.OPERATIONS_ENUM.PURGE_STREAM,new B(G6)),e.set(I.OPERATIONS_ENUM.SET_CONFIGURATION,new B(xM.setConfiguration)),e.set(I.OPERATIONS_ENUM.CLUSTER_STATUS,new B(x6.clusterStatus)),e.set(I.OPERATIONS_ENUM.CLUSTER_NETWORK,new B(k6)),e.set(I.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new B(zp.setRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new B(zp.getRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new B(zp.deleteRoutes)),e.set(I.OPERATIONS_ENUM.EXPORT_TO_S3,new B(Rs,vM.export_to_s3)),e.set(I.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new B(Rs,xc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new B(Rs,xc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.EXPORT_LOCAL,new B(Rs,vM.export_local)),e.set(I.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new B(Zp.handleGetJobsByStartDate)),e.set(I.OPERATIONS_ENUM.GET_JOB,new B(Zp.handleGetJob)),e.set(I.OPERATIONS_ENUM.GET_FINGERPRINT,new B(Jp.getFingerprint)),e.set(I.OPERATIONS_ENUM.SET_LICENSE,new B(Jp.setLicense)),e.set(I.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new B(Jp.getRegistrationInfo)),e.set(I.OPERATIONS_ENUM.RESTART,new B(HM.restart)),e.set(I.OPERATIONS_ENUM.RESTART_SERVICE,new B(HM.restartService)),e.set(I.OPERATIONS_ENUM.CATCHUP,new B(t9)),e.set(I.OPERATIONS_ENUM.SYSTEM_INFORMATION,new B(Y6.systemInformation)),e.set(I.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new B(Rs,xc.deleteAuditLogsBefore)),e.set(I.OPERATIONS_ENUM.READ_AUDIT_LOG,new B(P6)),e.set(I.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new B(FM.createTokens)),e.set(I.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new B(FM.refreshOperationToken)),e.set(I.OPERATIONS_ENUM.LOGIN,new B(GM.login)),e.set(I.OPERATIONS_ENUM.LOGOUT,new B(GM.logout)),e.set(I.OPERATIONS_ENUM.GET_CONFIGURATION,new B(xM.getConfiguration)),e.set(I.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new B(bt.customFunctionsStatus)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new B(bt.getCustomFunctions)),e.set(I.OPERATIONS_ENUM.GET_COMPONENT_FILE,new B(bt.getComponentFile)),e.set(I.OPERATIONS_ENUM.GET_COMPONENTS,new B(bt.getComponents)),e.set(I.OPERATIONS_ENUM.SET_COMPONENT_FILE,new B(bt.setComponentFile)),e.set(I.OPERATIONS_ENUM.DROP_COMPONENT,new B(bt.dropComponent)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new B(bt.getCustomFunction)),e.set(I.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new B(bt.setCustomFunction)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new B(bt.dropCustomFunction)),e.set(I.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new B(bt.addComponent)),e.set(I.OPERATIONS_ENUM.ADD_COMPONENT,new B(bt.addComponent)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new B(bt.dropCustomFunctionProject)),e.set(I.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new B(bt.packageComponent)),e.set(I.OPERATIONS_ENUM.PACKAGE_COMPONENT,new B(bt.packageComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new B(bt.deployComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_COMPONENT,new B(bt.deployComponent)),e.set(I.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new B(kM.readTransactionLog)),e.set(I.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new B(Rs,kM.deleteTransactionLogsBefore)),e.set(I.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new B(VM.installModules)),e.set(I.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new B(VM.auditModules)),e.set(I.OPERATIONS_ENUM.GET_BACKUP,new B(js.getBackup)),e}a(r9,"initializeOperationFunctionMap")});var bd=m((cde,eP)=>{"use strict";var eT=g(),s9=k(),$c=F(),{handleHDBError:tT,hdb_errors:Nd}=Q(),{isMainThread:n9}=require("worker_threads"),{Readable:i9}=require("stream"),ZM=require("os"),o9=require("util"),a9=Km(),c9=o9.promisify(a9.authorize),jM=XM(),{Gzip:u9}=require("zlib");function l9(e){let t=`Found an uncaught exception with message: ${e.message}. ${ZM.EOL}Stack: ${e.stack} ${ZM.EOL}Terminating ${n9?"HDB":"thread"}.`;console.error(t),$c.fatal(t),process.exit(1)}a(l9,"handleServerUncaughtException");function _9(e,t,r){if($c[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:Nd.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(_9,"serverErrorHandler");function d9(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=tT(new Error,"Invalid JSON.",Nd.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(s9.isEmpty(e.body.operation)){let s=tT(new Error,"Request body must include an 'operation' property.",Nd.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(d9,"reqBodyValidationHandler");function E9(e,t,r){let s;e.body.operation!==eT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==eT.OPERATIONS_ENUM.LOGIN&&e.body.operation!==eT.OPERATIONS_ENUM.LOGOUT?c9(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{$c.warn(n),$c.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(tT(n,i,Nd.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(E9,"authHandler");async function f9(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=jM.chooseOperation(e.body);let n=await jM.processLocalTransaction(e,s);if(n instanceof i9&&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 u9))}return n}catch(n){throw $c.error(n),n}}a(f9,"handlePostRequest");eP.exports={authHandler:E9,handlePostRequest:f9,handleServerUncaughtException:l9,serverErrorHandler:_9,reqBodyValidationHandler:d9}});var nP=m((lde,sP)=>{"use strict";var h9=require("fastify-plugin"),{handlePostRequest:tP,authHandler:m9,reqBodyValidationHandler:S9}=bd();async function p9(e){e.decorate("hdbCore",{preValidation:[S9,m9],request:t=>rP(tP(t,response)),requestWithoutAuthentication:(t,r)=>rP(tP(t,r,!0))})}a(p9,"hdbCore");async function rP(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(rP,"convertAsyncIterators");sP.exports=h9(p9)});var oP=m((dde,iP)=>{"use strict";var rT=require("fs"),Mo=W();Mo.initSync();var{CONFIG_PARAMS:Yc}=g(),T9=1024*1024*1024;function R9(e){let t=Mo.get(Yc.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=Mo.get(Yc.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:T9,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Mo.get(Yc.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=Mo.get(Yc.CUSTOMFUNCTIONS_TLS_CERTIFICATE),o=Mo.get(Yc.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:rT.readFileSync(`${n}`),cert:rT.readFileSync(i)+(o?`
|
|
23
23
|
|
|
24
|
-
`+jp.readFileSync(o):"")},s.http2=!0}return s}a(h9,"getServerOptions");tP.exports=h9});var iP=m((nde,nP)=>{"use strict";var eT=W();eT.initSync();var{CONFIG_PARAMS:sP}=R();function m9(){let e=eT.get(sP.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=eT.get(sP.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(m9,"getCORSOptions");nP.exports=m9});var cP=m((ode,aP)=>{"use strict";var oP=W();oP.initSync();var S9=R();function p9(){return oP.get(S9.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(p9,"getHeaderTimeoutConfig");aP.exports=p9});var sT={};et(sT,{customFunctionsServer:()=>g9,handleFile:()=>R9,ready:()=>N9});async function R9(e,t,r,s){if(!Zs){let c=tT.get(rT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);Zs=gP(c),ht.http((await Zs).server)}let n=await Zs,i=(0,lP.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),uP.has(i)||(uP.add(i),n.register(O9(i,o)))}async function g9(){try{Le.info("In Custom Functions Fastify server"+process.cwd()),Le.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Le.debug(`Custom Functions server process ${process.pid} starting up.`),await A9();let e=tT.get(rT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=Zs=await gP(t)}catch(s){throw Le.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw Le.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){Le.error(`Custom Functions ${process.pid} Error: ${e}`),Le.error(e),process.exit(1)}}async function A9(){try{Le.info("Custom Functions starting configuration."),await mP.setUsersToGlobal(),Le.info("Custom Functions completed configuration.")}catch(e){Le.error(e)}}function O9(e,t){return async function(r){try{Le.info("Custom Functions starting buildRoutes"),Le.trace("Loading fastify routes folder "+e),(0,_P.existsSync)(e)&&r.register(hP.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Le.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Le.error(n.message):n&&Le.error(n),o()})}catch(s){Le.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function gP(e){Le.info("Custom Functions starting buildServer.");let t=(0,SP.default)(e),r=(0,dP.default)(t);r.server.headersTimeout=(0,TP.default)(),r.setErrorHandler(RP.serverErrorHandler);let s=(0,pP.default)();return s&&r.register(EP.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(fP.default),await r.register(T9),await r.after(),Tp(r),Le.info("Custom Functions completed buildServer."),r}function N9(){if(Zs)return Zs.then?Zs.then(e=>e.ready()):Zs.ready()}var lP,_P,dP,EP,fP,hP,tT,rT,Le,T9,mP,SP,pP,TP,RP,Zs,uP,AP=pe(()=>{lP=require("path"),_P=require("fs"),dP=D(require("fastify")),EP=D(require("@fastify/cors")),fP=D(bp()),hP=D(require("@fastify/autoload")),tT=D(W()),rT=D(R()),Le=D(F()),T9=D(eP()),mP=D(Or()),SP=D(rP()),pP=D(iP()),TP=D(cP()),RP=D(Ad());Ro();un();uP=new Set;a(R9,"handleFile");a(g9,"customFunctionsServer");a(A9,"setUp");a(O9,"buildRouteFolder");a(gP,"buildServer");a(N9,"ready")});var nT={};et(nT,{start:()=>b9});function b9(e){let t=e.root;return{handleFile(r,s,n){NP||(NP=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=OP.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,bP.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))),OP.set(s,n)}}}var bP,OP,NP,yP=pe(()=>{bP=D(require("send")),OP=new Map;a(b9,"start")});function w9(e,t=1,r){if(iT++,(0,Ai.startWorker)("server/threads/threadServer.js",{name:bd.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===bd.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});I9.push(n),await n,Lo.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=Nd.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Lo.indexOf(s);o>-1&&Lo.splice(o,1)}if(a(i,"removeWorker"),Mo){let o=Mo;Mo=[];for(let c of o)DP[c.localPort](c)}}}),r){let s=setInterval(()=>{oT?oT=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Ai.shutdownWorkers)(),iT=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function LP(e=0,t){if(typeof e=="string")try{(0,yd.existsSync)(e)&&(0,yd.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=C9:r=U9(t):r=aT;let s=(0,CP.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},DP[e]=i=>{oT=!0,r(i,(o,c)=>{if(!o){IP?(IP.deliverSocket(i,e,c),i.resume()):iT>0?(Mo.length===0&&setTimeout(()=>{Mo.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(),Mo.push(i)):(console.log("start up a dynamic thread to handle request"),w9(0));return}o.requests++,i._handle.fd>=0?o.postMessage({port:e,fd:i._handle.fd,data:c}):P9(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=xa();return UP.info(`HarperDB ${n.version} Server running on port ${e}`),s}function aT(e,t){let r,s=0;for(let n of Lo){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Od)return Od=i,t(r);s=i}Od=0,t(r)}function C9(e,t){let r=e.remoteAddress,s=Po.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);aT(e,i=>{Po.set(r,{worker:i,lastUsed:n}),t(i)})}function U9(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=Po.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);aT(s,_=>{Po.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function L9(){Od=0;for(let e of Lo)e.expectedIdle=e.recentELU.idle+D9,e.requests=1;Lo.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function P9(e,t,r){let s=M9++;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(),Nd.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")),Nd.delete(s)),n.event=="destroy"&&(e.destroy(),Nd.delete(s))})}var Ai,CP,bd,UP,yd,y9,Lo,Mo,DP,IP,iT,I9,oT,Od,wP,Po,D9,Nd,M9,MP=pe(()=>{Ai=D(Ve()),CP=require("net"),bd=D(R()),UP=D(F()),yd=require("fs"),{isMainThread:y9}=require("worker_threads"),Lo=[],Mo=[],DP=[],iT=0,I9=[];y9&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(w9,"startHTTPWorker");a(LP,"startSocketServer");Od=0;a(aT,"findMostIdleWorker");wP=36e5,Po=new Map;a(C9,"findByRemoteAddressAffinity");a(U9,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Po)r.lastUsed+wP<e&&Po.delete(t)},wP).unref();D9=1e3;a(L9,"updateWorkerIdleness");(0,Ai.setMonitorListener)(L9);Nd=new Map,M9=1;a(P9,"proxySocket")});var qP=m((Sde,HP)=>{"use strict";var v9=require("cluster"),Qr=W();Qr.initSync();var vP=R(),fde=require("util"),js=F(),cT=require("fs"),B9=require("fastify"),hde=xa(),H9=require("@fastify/cors"),q9=require("@fastify/compress"),F9=require("@fastify/static"),G9=bp(),x9=require("path"),{PACKAGE_ROOT:k9}=R(),V9=Ps(),$9=G(),Y9=Or(),K9=Na(),{server:W9}=(un(),re(GE)),{authHandler:Q9,handlePostRequest:z9,serverErrorHandler:J9,reqBodyValidationHandler:X9}=Ad(),mde=require("net"),{registerContentHandlers:Z9}=(Ro(),re(PL)),j9=1024*1024*1024,BP="TRUE",{HDB_SETTINGS_NAMES:Ni,CONFIG_PARAMS:e7}=vP,t7=Ni.CORS_ENABLED_KEY,r7="CORS_ACCESSLIST",s7=Ni.SERVER_TIMEOUT_KEY,n7=Ni.SERVER_KEEP_ALIVE_TIMEOUT_KEY,i7=Ni.SERVER_HEADERS_TIMEOUT_KEY,o7=Ni.PRIVATE_KEY_KEY,a7=Ni.CERT_KEY,c7=Ni.HTTP_SECURE_ENABLED_KEY,Oi;HP.exports={hdbServer:PP,start:PP};async function PP(e){try{js.info("In Fastify server"+process.cwd()),js.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),js.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=v9.isMaster,await u7();let t=Qr.get(c7),r=t&&(t===!0||t.toUpperCase()===BP);Oi=l7(r),await Oi.ready(),e||(e={}),e.isOperationsServer=!0,Oi.server.cantCleanupProperly=!0;try{W9.http(Oi.server,e),Oi.server.closeIdleConnections||await Oi.listen({port:0,host:"::"})}catch(s){throw Oi.close(),js.error(s),js.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),js.fatal(t),process.exit(1)}}a(PP,"operationsServer");async function u7(){js.trace("Configuring HarperDB process."),V9.setSchemaDataToGlobal(),await Y9.setUsersToGlobal(),await K9.getLicense()}a(u7,"setUp");function l7(e){js.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=_7(e),r=B9(t);r.server.headersTimeout=E7(),r.setErrorHandler(J9);let s=d7();s&&r.register(H9,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(G9),r.register(q9),r.register(F9,{root:x9.join(k9,"docs")}),Z9(r);let n=Qr.get(vP.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!$9.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[X9,Q9],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),z9(i,o)}),r.get("/health",()=>"HarperDB is running."),js.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(l7,"buildServer");function _7(e){let t=Qr.get(s7),r=Qr.get(n7),s={bodyLimit:j9,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Qr.get(o7),i=Qr.get(a7),o=Qr.get(e7.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:cT.readFileSync(n),cert:cT.readFileSync(i)+(o?`
|
|
24
|
+
`+rT.readFileSync(o):"")},s.http2=!0}return s}a(R9,"getServerOptions");iP.exports=R9});var uP=m((fde,cP)=>{"use strict";var sT=W();sT.initSync();var{CONFIG_PARAMS:aP}=g();function g9(){let e=sT.get(aP.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=sT.get(aP.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(g9,"getCORSOptions");cP.exports=g9});var dP=m((mde,_P)=>{"use strict";var lP=W();lP.initSync();var A9=g();function O9(){return lP.get(A9.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(O9,"getHeaderTimeoutConfig");_P.exports=O9});var oT={};tt(oT,{customFunctionsServer:()=>y9,handleFile:()=>b9,ready:()=>C9});async function b9(e,t,r,s){if(!en){let c=nT.get(iT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);en=bP(c),st.http((await en).server)}let n=await en,i=(0,fP.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),EP.has(i)||(EP.add(i),n.register(w9(i,o)))}async function y9(){try{Le.info("In Custom Functions Fastify server"+process.cwd()),Le.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Le.debug(`Custom Functions server process ${process.pid} starting up.`),await I9();let e=nT.get(iT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=en=await bP(t)}catch(s){throw Le.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw Le.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){Le.error(`Custom Functions ${process.pid} Error: ${e}`),Le.error(e),process.exit(1)}}async function I9(){try{Le.info("Custom Functions starting configuration."),await RP.setUsersToGlobal(),Le.info("Custom Functions completed configuration.")}catch(e){Le.error(e)}}function w9(e,t){return async function(r){try{Le.info("Custom Functions starting buildRoutes"),Le.trace("Loading fastify routes folder "+e),(0,hP.existsSync)(e)&&r.register(TP.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Le.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Le.error(n.message):n&&Le.error(n),o()})}catch(s){Le.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function bP(e){Le.info("Custom Functions starting buildServer.");let t=(0,gP.default)(e),r=(0,mP.default)(t);r.server.headersTimeout=(0,OP.default)(),r.setErrorHandler(NP.serverErrorHandler);let s=(0,AP.default)();return s&&r.register(SP.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(pP.default),await r.register(N9),await r.after(),Op(r),Le.info("Custom Functions completed buildServer."),r}function C9(){if(en)return en.then?en.then(e=>e.ready()):en.ready()}var fP,hP,mP,SP,pP,TP,nT,iT,Le,N9,RP,gP,AP,OP,NP,en,EP,yP=Se(()=>{fP=require("path"),hP=require("fs"),mP=C(require("fastify")),SP=C(require("@fastify/cors")),pP=C(wp()),TP=C(require("@fastify/autoload")),nT=C(W()),iT=C(g()),Le=C(F()),N9=C(nP()),RP=C(br()),gP=C(oP()),AP=C(uP()),OP=C(dP()),NP=C(bd());Ao();ts();EP=new Set;a(b9,"handleFile");a(y9,"customFunctionsServer");a(I9,"setUp");a(w9,"buildRouteFolder");a(bP,"buildServer");a(C9,"ready")});var aT={};tt(aT,{start:()=>U9});function U9(e){let t=e.root;return{handleFile(r,s,n){wP||(wP=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=IP.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,CP.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))),IP.set(s,n)}}}var CP,IP,wP,UP=Se(()=>{CP=C(require("send")),IP=new Map;a(U9,"start")});function M9(e,t=1,r){if(cT++,(0,Oi.startWorker)("server/threads/threadServer.js",{name:wd.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===wd.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});L9.push(n),await n,Po.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=Id.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Po.indexOf(s);o>-1&&Po.splice(o,1)}if(a(i,"removeWorker"),vo){let o=vo;vo=[];for(let c of o)PP[c.localPort](c)}}}),r){let s=setInterval(()=>{uT?uT=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Oi.shutdownWorkers)(),cT=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function vP(e=0,t){if(typeof e=="string")try{(0,Ud.existsSync)(e)&&(0,Ud.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=P9:r=v9(t):r=lT;let s=(0,MP.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},PP[e]=i=>{uT=!0,r(i,(o,c)=>{if(!o){DP?(DP.deliverSocket(i,e,c),i.resume()):cT>0?(vo.length===0&&setTimeout(()=>{vo.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(),vo.push(i)):(console.log("start up a dynamic thread to handle request"),M9(0));return}o.requests++;let u=i._handle.fd;Cd.trace("Socket",u,"from",i.remoteAddress," routed to worker",o.threadId),u>=0?o.postMessage({port:e,fd:u,data:c}):F9(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=Va();return Cd.info(`HarperDB ${n.version} Server running on port ${e}`),s}function lT(e,t){let r,s=0;for(let n of Po){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=yd)return yd=i,t(r);s=i}yd=0,t(r)}function P9(e,t){let r=e.remoteAddress,s=Bo.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);lT(e,i=>{Bo.set(r,{worker:i,lastUsed:n}),t(i)})}function v9(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=Bo.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);lT(s,_=>{Bo.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function H9(){yd=0;for(let e of Po)e.expectedIdle=e.recentELU.idle+B9,e.requests=1;Po.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function F9(e,t,r){let s=q9++;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(),Id.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")),Id.delete(s)),n.event=="destroy"&&(e.destroy(),Id.delete(s))})}var Oi,MP,wd,Cd,Ud,D9,Po,vo,PP,DP,cT,L9,uT,yd,LP,Bo,B9,Id,q9,BP=Se(()=>{Oi=C(Ve()),MP=require("net"),wd=C(g()),Cd=C(F()),Ud=require("fs"),{isMainThread:D9}=require("worker_threads"),Po=[],vo=[],PP=[],cT=0,L9=[];D9&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(M9,"startHTTPWorker");a(vP,"startSocketServer");yd=0;a(lT,"findMostIdleWorker");LP=36e5,Bo=new Map;a(P9,"findByRemoteAddressAffinity");a(v9,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Bo)r.lastUsed+LP<e&&Bo.delete(t)},LP).unref();B9=1e3;a(H9,"updateWorkerIdleness");(0,Oi.setMonitorListener)(H9);Id=new Map,q9=1;a(F9,"proxySocket")});var xP=m((Ide,GP)=>{"use strict";var G9=require("cluster"),Qr=W();Qr.initSync();var qP=g(),Nde=require("util"),tn=F(),_T=require("fs"),x9=require("fastify"),bde=Va(),k9=require("@fastify/cors"),V9=require("@fastify/compress"),$9=require("@fastify/static"),Y9=wp(),K9=require("path"),{PACKAGE_ROOT:W9}=g(),Q9=Bs(),z9=k(),J9=br(),X9=ya(),{server:Z9}=(ts(),re(Pu)),{authHandler:j9,handlePostRequest:e7,serverErrorHandler:t7,reqBodyValidationHandler:r7}=bd(),yde=require("net"),{registerContentHandlers:s7}=(Ao(),re(qL)),n7=1024*1024*1024,FP="TRUE",{HDB_SETTINGS_NAMES:bi,CONFIG_PARAMS:i7}=qP,o7=bi.CORS_ENABLED_KEY,a7="CORS_ACCESSLIST",c7=bi.SERVER_TIMEOUT_KEY,u7=bi.SERVER_KEEP_ALIVE_TIMEOUT_KEY,l7=bi.SERVER_HEADERS_TIMEOUT_KEY,_7=bi.PRIVATE_KEY_KEY,d7=bi.CERT_KEY,E7=bi.HTTP_SECURE_ENABLED_KEY,Ni;GP.exports={hdbServer:HP,start:HP};async function HP(e){try{tn.info("In Fastify server"+process.cwd()),tn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),tn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=G9.isMaster,await f7();let t=Qr.get(E7),r=t&&(t===!0||t.toUpperCase()===FP);Ni=h7(r),await Ni.ready(),e||(e={}),e.isOperationsServer=!0,Ni.server.cantCleanupProperly=!0;try{Z9.http(Ni.server,e),Ni.server.closeIdleConnections||await Ni.listen({port:0,host:"::"})}catch(s){throw Ni.close(),tn.error(s),tn.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),tn.fatal(t),process.exit(1)}}a(HP,"operationsServer");async function f7(){tn.trace("Configuring HarperDB process."),Q9.setSchemaDataToGlobal(),await J9.setUsersToGlobal(),await X9.getLicense()}a(f7,"setUp");function h7(e){tn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=m7(e),r=x9(t);r.server.headersTimeout=p7(),r.setErrorHandler(t7);let s=S7();s&&r.register(k9,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(Y9),r.register(V9),r.register($9,{root:K9.join(W9,"docs")}),s7(r);let n=Qr.get(qP.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!z9.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[r7,j9],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),e7(i,o)}),r.get("/health",()=>"HarperDB is running."),tn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(h7,"buildServer");function m7(e){let t=Qr.get(c7),r=Qr.get(u7),s={bodyLimit:n7,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Qr.get(_7),i=Qr.get(d7),o=Qr.get(i7.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:_T.readFileSync(n),cert:_T.readFileSync(i)+(o?`
|
|
25
25
|
|
|
26
|
-
`+cT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(_7,"getServerOptions");function d7(){let e=Qr.get(t7),t=Qr.get(r7),r;return e&&(e===!0||e.toUpperCase()===BP)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(d7,"getCORSOpts");function E7(){return Qr.get(i7)}a(E7,"getHeaderTimeoutConfig")});var JP=m((gde,zP)=>{"use strict";var{decode:f7}=require("msgpackr"),{isMainThread:h7,parentPort:m7,threadId:Tde}=require("worker_threads"),uT=He(),vo=be(),S7=R(),$c=F(),FP=W(),kP=R();Ve();var p7=Ms(),{recordAction:T7,recordActionBinary:R7}=(ro(),re(vl)),{publishToStream:g7}=uT,Rde={durable:vo.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:vo.WORK_QUEUE_CONSUMER_NAMES.deliver_group},A7,O7,N7,VP,$P;zP.exports={initialize:YP,workQueueListener:QP,setSubscription:b7,setIgnoreOrigin:I7,getDatabaseSubscriptions:y7};async function YP(){$P=!0,$c.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await uT.getNATSReferences();A7=e,O7=e.info.server_name,N7=t,VP=r}a(YP,"initialize");var wd=new Map;function b7(e,t,r){let s=wd.get(e);s||wd.set(e,s=new Map),s.set(t,r),$P||YP().then(QP)}a(b7,"setSubscription");function y7(){return wd}a(y7,"getDatabaseSubscriptions");var KP;function I7(e){KP=e}a(I7,"setIgnoreOrigin");var WP=100,GP=new Array(WP),Id=0;async function QP(){let t=await(await VP.consumers.get(vo.WORK_QUEUE_CONSUMER_NAMES.stream_name,vo.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await GP[Id],GP[Id]=w7(r).catch(s=>{$c.error(s)}),++Id>=WP&&(Id=0)}a(QP,"workQueueListener");h7||m7.on("message",async e=>{let{type:t}=e;t===kP.ITC_EVENT_TYPES.SHUTDOWN&&uT.closeConnection()});async function w7(e){let t=f7(e.data);T7(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(vo.MSG_HEADERS.ORIGIN)===FP.get(S7.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!KP;if(R7(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;$c.trace("processing message:",i,o,u,(l?"records: "+l.map(N=>N.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),$c.trace(`messageProcessor nats msg id: ${e.headers.get(vo.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:p}=d||{},S=wd.get(o)?.get(u);if(!S)throw new Error("Missing table for replication message",u);if(i==="define_schema")t.type=i,S.send(t);else if(l.length===1&&!c)S.send({type:xP(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:p});else{let N=l.map((O,H)=>({type:xP(i),value:O,id:_?.[H],table:u}));for(;c;)N.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;S.send({type:"transaction",writes:N,table:u,timestamp:f,onCommit:E,user:h,nodeName:p})}FP.get(kP.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&g7(e.subject.split(".").slice(0,-1).join("."),p7.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){$c.error(i)}e.ack()}a(w7,"messageProcessor");function xP(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(xP,"convertOperation")});var hT={};et(hT,{disableNATS:()=>U7,setNATSReplicator:()=>lT,start:()=>C7});function C7(){Ud.default.get(Dd.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&L7()}function U7(e=!0){tv=e}function L7(){if(tv)return;let e=xr(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];lT(n,r,i)}}mT((r,s)=>{lT(r.tableName,r.databaseName,r),s&&sv(r)}),!XP&&(XP=!0)}function lT(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 ft{static{a(this,"NATSReplicator")}put(o){let c;return s?.put&&(!s.put.reliesOnPrototype||s.prototype.put)&&(c=s.put(this[ie],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ie],record:o},c)}delete(){let o;return s?.delete&&(!s.delete.reliesOnPrototype||s.prototype.delete)&&(o=s.delete(this[ie],this.getContext())),n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ie]},o)}publish(o){let c;return s?.publish&&(!s.publish.reliesOnPrototype||s.prototype.publish)&&(c=s.publish(this[ie],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ie],record:o},c)}invalidate(o){if(n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ie]}),s?.invalidate&&(!s.invalidate.reliesOnPrototype||s.prototype.invalidate))return s.invalidate(this[ie],this.getContext())}static defineSchema(o){sv(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 Xr;return(0,ZP.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<D7}static isNATSReplicator=!0});function n(i){let o=i?.transaction?.nats;return o||(i?.transaction?(i.transaction.push(o=i.transaction.nats=new Cd(i.transaction,i)),o.user=i.user):o=rv),o}a(n,"getNATSTransaction")}function sv(e){let t=Ud.default.get(Dd.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,dT.publishToStream)(`${ET.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,fT.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 dT,ET,fT,ZP,jP,Ud,Dd,ev,tv,D7,rv,XP,Cd,_T,nv=pe(()=>{de();Zr();dT=D(He()),ET=D(be()),fT=D(Ms());ia();ZP=D(JP()),jP=D(vt()),Ud=D(W()),Dd=D(R()),ev=D(F());a(C7,"start");a(U7,"disableNATS");D7=2;a(L7,"assignReplicationSource");a(lT,"setNATSReplicator");a(sv,"publishSchema");Cd=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r,s){let n=this.writes_by_db.get(t);if(n||this.writes_by_db.set(t,n=[]),s?.then)return s.then(()=>n.push(r));n.push(r)}commit(t){let r=Ud.default.get(Dd.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,l;for(let _ of i){let d=_.table,E=_.operation=="put"?"upsert":_.operation;u||(ev.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,dT.publishToStream)(`${ET.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,fT.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},_T=class extends Cd{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,jP.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};rv=new _T});async function ov({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await ST.getResource(e,{});n=new TT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await ST.get(e);i&&i.delete()}n=new Md(e,t)}return n}function pT(){return Ld++,Ld>65500&&(Ld=1),Ld}var iv,Yc,ST,Ld,Md,TT,av=pe(()=>{de();Rc();iv=D(vt()),Yc=D(F());$n();ST=rt({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(ov,"getSession");Ld=1;a(pT,"getNextMessageId");Md=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,l;if(c>-1?(u=n.slice(c),l=n.slice(0,c)):l=n,!l)throw new Error("No topic provided");let _=!1,d;if((l.endsWith("+")||l.endsWith("#"))&&(_=!0,l.endsWith("+")&&(d=!0),l=l.slice(0,l.length-1)),l.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(l.indexOf("#")>-1||l.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let E=this.subscriptions.find(O=>O.topic===n);E&&(E.end(),this.subscriptions.splice(this.subscriptions.indexOf(E),1));let f={search:u,user:this.user,startTime:o,omitCurrent:i,isCollection:_,shallowWildcard:d,url:""},h=Dn.getMatch(l);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);f.url=h.relativeURL;let p=h.path,S=h.Resource,N=await We(f,async()=>{let O=await S.subscribe(f);if(!O)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!O[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let H of O)try{let Y;if(H.type&&H.type!=="put"&&H.type!=="delete"&&H.type!=="message"||s&&!s(H))continue;r?(H.topic=n,Y=this.needsAcknowledge(H)):Y=pT();let A=H.id;Array.isArray(A)&&(A=po(A)),A==null&&(A=""),this.listener(p+"/"+A,H.value,Y,t)}catch(Y){(0,Yc.warn)(Y)}})(),O});return N.topic=n,N.qos=t.qos,this.subscriptions.push(N),N}resume(){}needsAcknowledge(t){return pT()}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=Dn.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 We(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=[]}},TT=class extends Md{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=pT();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,Yc.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,iv.getNextMonotonicTime)()),(0,Yc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),ST.put(this.sessionRecord)),t.qos}}});var AT={};et(AT,{start:()=>P7});async function P7({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:_}=lv(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,en.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;M7&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,_v.getSuperUser)());let{onMessage:u,onClose:l}=lv(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,en.info)("Socket error",_)})},{port:t,securePort:s})}function lv(e,t,r,s,n){uv||(uv=!0,um(_=>{_.push({metric:"mqtt-connections",connections:RT})})),RT++;let i,o={protocolVersion:4},c=(0,Pd.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){RT--,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 ht.auth(_.username,_.password.toString()),(0,gT.get)(tn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&cv.notify({username:s.username,status:tn.AUTH_AUDIT_STATUS.SUCCESS,type:tn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,gT.get)(tn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&cv.error({username:s.username,status:tn.AUTH_AUDIT_STATUS.FAILURE,type:tn.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=ov({user:s,..._}),i=await i}catch(O){return(0,en.error)(O),d({cmd:"connack",reasonCode:O.code||128,returnCode:O.code||128})}d({cmd:"connack",sessionPresent:i.sessionWasPresent,reasonCode:0,returnCode:0}),i.setListener((O,H,Y,A)=>{try{let w=O.indexOf("/",1),x=w>0?O.slice(0,w):O;d({cmd:"publish",topic:O,payload:E(H),messageId:Y||Math.floor(Math.random()*1e8),qos:A.qos},x)}catch(w){(0,en.error)(w),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let O of _.subscriptions){let H;try{H=(await i.addSubscription(O,O.qos>=1)).qos||0}catch(Y){(0,en.error)(Y),H=128}f.push(H)}await i.committed,d({cmd:"suback",granted:f,messageId:_.messageId});break;case"unsubscribe":for(let O of _.unsubscriptions)i.removeSubscription(O);d({cmd:"unsuback",messageId:_.messageId});break;case"pubrel":d({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let h=_.qos===2?"pubrec":"puback",p=e.deserialize||(e.deserialize=bo(r?.headers["content-type"])),S=_.payload?.length>0?p(_.payload):void 0,N;try{N=await i.publish(_,S)}catch(O){console.warn(O),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:N===!1?144:0},_.topic);break;case"pubrec":d({cmd:"pubrel",messageId:_.messageId,reasonCode:0});break;case"pubcomp":case"puback":i.acknowledge(_.messageId);break;case"pingreq":d({cmd:"pingresp"});break;case"disconnect":i?.disconnect(),e.close?e.close():e.end();break}}catch(f){console.error(f),d({cmd:"disconnect"})}function d(f,h){let p=(0,Pd.generate)(f,o);t(p),oi(p.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?Ys(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Pd,_v,gT,tn,en,cv,M7,uv,RT,dv=pe(()=>{Pd=require("mqtt-packet");av();_v=D(Or());Ro();ro();un();gT=D(W()),tn=D(R()),en=D(F()),cv=(0,en.loggerWithTag)("auth-event"),M7=!0;a(P7,"start");RT=0;a(lv,"onSocket")});var Av={};et(Av,{loadComponent:()=>vd,loadComponentDirectories:()=>gv});function gv(e,t){t&&(NT=t),e&&(bT=e);let r=[];if((0,Ts.existsSync)(OT)){let n=(0,Ts.readdirSync)(OT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Lr.join)(OT,o);r.push(vd(c,NT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(vd(s,NT,s)),Promise.all(r).then(()=>{Rv=!0})}async function vd(e,t,r,s,n){if(!fv.has(e)){fv.set(e,!0),n&&(bT=n);try{let i,o=(0,Lr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Ts.existsSync)(o)?i=(0,hv.parseDocument)((0,Ts.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=q7;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,Ts.existsSync)(f=(0,Lr.join)(E,"node_modules",u));)if(E=(0,Lr.dirname)(E),E.length<(0,Tv.getHdbBasePath)().length){f=null;break}if(f)_=await vd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=H7[u];if(_)try{c.push(_);let E=a(S=>(S.origin=r,rt(S)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,p=!f?.https&&f?.port;if(Kc.isMainThread&&(_=await _.startOnMainThread?.({server:ht,ensureTable:E,port:p,securePort:h,resources:t,...l})||_,s&&f))for(let S of[p,h])try{if(+S&&!Ev.includes(S)){Ev.push(S);let N=yT.get(IT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);LP(S,N)}}catch(N){console.error("Error listening on socket",S,N,u)}if(t.isWorker&&(_=await _.start?.({server:ht,ensureTable:E,port:p,securePort:h,resources:t,...l})||_),bT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,pv.handleHDBError)("Can not reference parent directories");let S=(0,Lr.join)(e,l.files);for(let N of await(0,mv.default)(S,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:H}=N,Y=(0,Lr.relative)(e,O),A=(0,Lr.basename)(e),w=l.path||"/";w=w.startsWith("/")?w:w.startsWith("./")?"/"+A+w.slice(2):w==="."?"/"+A:"/"+A+"/"+w,w+=(w.endsWith("/")?"":"/")+Y;try{if(H.isFile()){let x=await B7(O);Kc.isMainThread&&await _.setupFile?.(x,w,O,t),t.isWorker&&await _.handleFile?.(x,w,O,t)}else Kc.isMainThread&&await _.setupDirectory?.(w,O,t),t.isWorker&&await _.handleDirectory?.(w,O,t)}catch(x){console.error(`Could not load ${H.isFile()?"file":"directory"} ${O} using ${l.module} for application ${e}`,x),t.set(l.path||"/",new Wc(x))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new Wc(E),null,!0)}}if(Kc.isMainThread&&!Rv&&(0,Sv.watchDir)(e,async()=>gv()),i.extensionModule)return await Du((0,Lr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new Wc(i))}}}var Ts,Lr,Kc,hv,yT,IT,mv,Sv,pv,Tv,v7,B7,OT,bT,Rv,NT,H7,q7,Ev,fv,Wc,Ov=pe(()=>{Ts=require("fs"),Lr=require("path"),Kc=require("worker_threads"),hv=require("yaml"),yT=D(W()),IT=D(R());Cg();Mg();Pg();HL();AP();yP();mv=D(require("fast-glob")),Sv=D(Ve());$E();un();pv=D(Q());Zr();de();MP();Tv=D(W()),v7=D(qP());v_();nv();dv();({readFile:B7}=Ts.promises),OT=yT.get(IT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),bT=new Map;a(gv,"loadComponentDirectories");H7={REST:Np,graphqlSchema:VE,jsResource:KE,fastifyRoutes:sT,login:QE,static:nT,operationsApi:v7,customFunctions:{},clustering:hT,authentication:gc,mqtt:AT},q7={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},Ev=[],fv=new Map;a(vd,"loadComponent");Wc=class extends ft{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 Cv=m((zde,wv)=>{"use strict";var qd=require("fs-extra"),wT=require("path"),Bd=F(),Nv=G(),Hd=R(),Iv=W(),F7=Ar();wv.exports=G7;async function G7(){let e=x7(),t=Iv.get(Hd.CONFIG_PARAMS.ROOTPATH),r=wT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Hd.PACKAGE_ROOT}},n=wT.join(t,"node_modules");await qd.ensureDir(n);let i,o=!0,c=!1;try{i=await qd.readJson(r)}catch(u){if(Nv.isEmptyOrZeroLength(e))return;if(u.code!==Hd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!Nv.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await bv(l);s.dependencies[u]=_+l}if(!o){Bd.notify("Installing components"),await yv(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await bv(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Bd.notify("Removing component",u),c=!0);c&&(Bd.notify("Updating components."),await yv(r,s))}a(G7,"installComponents");function x7(){let e=F7.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(x7,"getComponentsConfig");async function bv(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":wT.extname(e)||await qd.pathExists(e)?"file:":"github:"}a(bv,"getPkgPrefix");async function yv(e,t){Bd.trace("npm installing components package.json",t),await qd.writeFile(e,JSON.stringify(t,null," ")),await V_().installAllRootModules(Iv.get(Hd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(yv,"installPackages")});var Lv=m((Xde,Dv)=>{var{isMainThread:Uv}=require("worker_threads"),{getTables:k7}=(de(),re(Ne)),{loadComponentDirectories:V7,loadComponent:$7}=(Ov(),re(Av)),{resetResources:Y7}=(Rc(),re(ED)),K7=Cv(),W7=Ar(),{dirname:Q7}=require("path"),{getConnection:z7}=He(),J7=W(),X7=R(),CT=new Map;async function Z7(e=!1){!Uv&&J7.get(X7.CONFIG_PARAMS.CLUSTERING_ENABLED)&&z7(),Uv&&await K7();let t=Y7();k7(),t.isWorker=e,await $7(Q7(W7.getConfigFilePath()),t,"hdb",!0,CT),await V7(CT,t);let r=[];for(let[s]of CT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Z7,"loadRootComponents");Dv.exports.loadRootComponents=Z7});var Ve=m((eEe,Hn)=>{"use strict";var{Worker:j7,MessageChannel:eee,parentPort:Rs,isMainThread:PT,threadId:tee,workerData:Qc}=require("worker_threads"),{PACKAGE_ROOT:ree}=R(),{join:vv,isAbsolute:see,extname:Gd}=require("path"),{server:nee}=(un(),re(GE)),{watch:iee,readdir:oee}=require("fs/promises"),{totalmem:Mv}=require("os"),vT=R(),bi=F(),jde=R(),{randomBytes:aee}=require("crypto"),cee=1024*1024,Bn=[],vn=[],uee=50,Bv=1e4,lee="restart",Hv="request_thread_info",qv="resource_report",Fv="thread_info",Gv="added-port",_ee="ack",UT;Hn.exports={startWorker:DT,restartWorkers:BT,shutdownWorkers:hee,workers:Bn,setMonitorListener:Oee,onMessageFromWorkers:mee,onMessageByType:See,broadcast:pee,broadcastWithAcknowledgement:Ree,setChildListenerByType:fee,getWorkerIndex:kv,getTicketKeys:Vv,setMainIsWorker:dee,restartNumber:Qc?.restartNumber||1};var xv;function kv(){return Qc?Qc.workerIndex:xv?0:void 0}a(kv,"getWorkerIndex");function dee(e){xv=e}a(dee,"setMainIsWorker");var Fd;function Vv(){return Fd||(Fd=PT?aee(48):Qc.ticketKeys,Fd)}a(Vv,"getTicketKeys");Object.defineProperty(nee,"workerIndex",{get(){return kv()}});var $v={[Hv](e,t){gee(t)},[qv](e,t){Aee(t,e)}};function DT(e,t={}){let r=process.constrainedMemory?.()||Mv();r=Math.min(r,Mv());let s=Math.max(Math.floor(r/cee/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of vn){let{port1:u,port2:l}=new eee;c.postMessage({type:Gv,port:u},[u]),i.push(l)}Gd(e)||(e+=".js");let o=new j7(see(e)?e:vv(ree,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:Hn.exports.restartNumber,ticketKeys:Vv()},transferList:i},t));return kd(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{DT(e,t)},o.on("error",c=>{console.error("Worker error:",c),bi.error("Worker error:",c)}),o.on("exit",c=>{Bn.splice(Bn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<uee?(t.unexpectedRestarts=o.unexpectedRestarts+1,DT(e,t)):bi.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{$v[c.type]?.(c,o)}),Bn.push(o),bee(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(DT,"startWorker");var Eee=[vT.THREAD_TYPES.HTTP];async function BT(e=null,t=2,r=!0){if(PT){if(r){let{loadRootComponents:n}=Lv();await n()}Hn.exports.restartNumber++,t<1&&(t=t*Bn.length);let s=[];for(let n of Bn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:Hn.exports.restartNumber,type:vT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=Eee.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),Bv*2).unref();n.on("exit",()=>{clearTimeout(u),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else Rs.postMessage({type:lee,workerType:e})}a(BT,"restartWorkers");function fee(e,t){$v[e]=t}a(fee,"setChildListenerByType");function hee(e){return BT(e,1/0,!1)}a(hee,"shutdownWorkers");var Yv=[];function mee(e){Yv.push(e)}a(mee,"onMessageFromWorkers");var LT=new Map;function See(e,t){let r=LT.get(e);r||LT.set(e,r=[]),r.push(t)}a(See,"onMessageByType");function pee(e){for(let t of vn)try{t.postMessage(e)}catch(r){bi.error("Unable to send message to worker",r)}}a(pee,"broadcast");var xd=new Map,Tee=1;function Ree(e){return new Promise(t=>{let r=0;for(let s of vn)try{let n=Tee++,i=a(()=>{xd.delete(n),--r===0&&t(),s!==Rs&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,xd.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of xd)o.port===s&&o()})),s.postMessage(e),r++}catch(n){bi.error("Unable to send message to worker",n)}r===0&&t()})}a(Ree,"broadcastWithAcknowledgement");function gee(e){e.postMessage({type:Fv,workers:Kv()})}a(gee,"sendThreadInfo");function Kv(){let e=Date.now();return Bn.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(Kv,"getChildWorkerInfo");function Aee(e,t){e.resources=t,e.resources.updated=Date.now()}a(Aee,"recordResourceReport");var MT;function Oee(e){MT=e}a(Oee,"setMonitorListener");var Nee=1e3,Pv=!1;function bee(){Pv||(Pv=!0,setInterval(()=>{for(let e of Bn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}MT&&MT()},Nee).unref())}a(bee,"startMonitoring");var yee=1e3;if(Rs){kd(Rs);for(let e of Qc.addPorts)kd(e);setInterval(()=>{let e=process.memoryUsage();Rs.postMessage({type:qv,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},yee).unref(),UT=a(()=>new Promise((e,t)=>{Rs.on("message",r),Rs.postMessage({type:Hv});function r(s){s.type===Fv&&(Rs.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else UT=Kv;Hn.exports.getThreadInfo=UT;function kd(e,t){vn.push(e),e.on("message",r=>{if(r.type===Gv)kd(r.port);else if(r.type===_ee){let s=xd.get(r.id);s&&s()}else{for(let n of Yv)n(r,e);let s=LT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){bi.error(i)}}}).on("close",()=>{vn.splice(vn.indexOf(e),1)}).on("exit",()=>{vn.splice(vn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(kd,"addPort");if(PT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await oee(s,{withFileTypes:!0}))i.isDirectory()&&r(vv(s,i.name));for await(let{filename:i}of iee(s,{persistent:!1}))(Gd(i)===".ts"||Gd(i)===".js"||Gd(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await BT(),bi.info("Reloaded HarperDB components")},100))},"watch_dir");Hn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Rs.on("message",async e=>{let{type:t}=e;t===vT.ITC_EVENT_TYPES.SHUTDOWN&&(Hn.exports.restartNumber=e.restartNumber,Rs.unref(),setTimeout(()=>{bi.warn("Thread did not voluntarily terminate",tee),process.exit(0)},Bv).unref())})});function xT(e){let t=e.auditStore=e.openDB(Xv.AUDIT_STORE_NAME,wee);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,jv.getWorkerIndex)()===0&&e.on("aftercommit",()=>{qT||(qT=setTimeout(()=>{if(qT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-Wv,0]})){if((n[0]&15)===GT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},Wv/10).unref())}),t}function Yd(e,t,r){let s=rB[r.type],n=3;if(t?t.length>80?(s|=Vd,n=(0,rn.writeKey)(t,gs,e?14:6),HT.setUint16(2,n)):(n=(0,rn.writeKey)(t,gs,e?11:3),gs[1]=n):gs[1]=0,e){s|=tB;let i=s&Vd?6:3;HT.setFloat64(i,e),t||(n=i+8)}return gs[0]=s,s&Vd?HT.setUint16(4,0):gs[2]=0,r.value?Buffer.concat([gs.slice(0,n),r.value]):gs.subarray(0,n)}function qn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Vd,i=n?6:3,o;r&tB&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&FT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:rB[r&7],value:u,lastVersion:o,get user(){return c?(0,rn.readKey)(e,i,c):void 0}}}var rn,$d,Xv,Zv,jv,eB,gs,HT,Iee,wee,Wv,qT,FT,Qv,GT,zv,Jv,Vd,tB,rB,zc=pe(()=>{rn=require("ordered-binary"),$d=D(W()),Xv=D(ke()),Zv=D(R()),jv=D(Ve()),eB=D(G());(0,$d.initSync)();gs=Buffer.alloc(1024),HT=new DataView(gs.buffer,gs.byteOffset,1024),Iee={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,rn.writeKey)(e[2],t,r+12)}else return(0,rn.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,rn.readKey)(e,t+12,r)]}else return(0,rn.readKey)(e,t,r)}},wee={encoding:"binary",keyEncoder:Iee},Wv=(0,eB.convertToMS)((0,$d.get)(Zv.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,qT=null;a(xT,"openAuditStore");FT=16,Qv=1,GT=2,zv=3,Jv=4,Vd=128,tB=64,rB={put:Qv|FT,[Qv]:"put",delete:GT,[GT]:"delete",message:zv|FT,[zv]:"message",invalidate:Jv,[Jv]:"invalidate"};a(Yd,"createAuditEntry");a(qn,"readAuditEntry")});var kT,yi,Cee,Jc,Kd,sB=pe(()=>{kT=D(vt());zc();yi=Symbol("completion"),Cee=100,Jc=class{static{a(this,"DatabaseTransaction")}writes=[];hasWrittenTime;username;lmdbDb;auditStore;readTxn;constructor(t,r,s){this.lmdbDb=t,this.username=r?.username,this.auditStore=s}getReadTxn(){return this.readTxn||(this.readTxn=this.lmdbDb.useReadTransaction())}resetReadSnapshot(){this.readTxn&&(this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}validate(){for(let t of this.writes||[])t.validate?.()}commit(t=(0,kT.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[yi]&&(i||(i=[]),i.push(d[yi])),c=_.store,this.auditStore)){d.user=this.username,d.lastVersion=_.lastVersion,d.newTxnTime&&!this.hasWrittenTime&&(t=d.newTxnTime),this.hasWrittenTime=!0;let E=[t,_.store.tableId,_.key];_.invalidated&&(E.invalidated=!0),this.auditStore.put(E,Yd(_.lastVersion,this.username,d))}},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){let d=_.store.getEntry(_.key),E=s===0&&_.lastVersion!==void 0?_.lastVersion:_.lastVersion=d?.version??null,f=_.store.ifVersion(_.key,E,l);n=n||f}else l();else for(let d of this.writes)u(d)},"nextCondition");return this.writes.length<Cee>>s?l():(s=1,n=this.writes[0].store.transaction(()=>{for(let _ of this.writes)u(_);return!0})),n?.then(_=>_?(c&&i.push(c.flushed),Promise.all(i).then(()=>(this.writes=[],{txnTime:t}))):this.commit(t,r,s+1))}abort(){this.resetReadSnapshot(),this.writes=[]}},Kd=class extends Jc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,kT.getNextMonotonicTime)())}getReadTxn(){}}});function aB(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Ho||((0,Ii.onMessageByType)(iB,d=>{let E=d.auditIds;$T(d.path,E,d.txnId)}),(0,Ii.onMessageByType)(oB,d=>{(0,As.trace)("confirming to proceed with txn",d.txnId)}),Ho=Object.create(null));let c=Ho[i]||(Ho[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=po(t);let l=new VT(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 $T(e,t,r,s){if(!Ho)return;let n=Ho[e];if(n){if(Bo&&Bo+1!==r){(0,As.trace)("Waiting to ensure latest txn id",Bo,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Wd)o<r&&((0,As.trace)("Txn",r,"waiting for txn",o),await c);if(Bo+1!==r){await(0,Ii.broadcastWithAcknowledgement)({type:oB,txnId:r});for(let[o,c]of Wd)o<r&&((0,As.trace)("Txn",r,"waiting for txn",o),await c)}Wd.delete(r),(0,As.trace)("Proceeding with txn id",r),Bo=r-1,$T(e,t,r,s)})();return Wd.set(r,i),i}(0,As.trace)("Notifying with txn id",r,s),Bo=r;try{n.auditStore.resetReadTxn()}catch(i){throw i.message+=" in "+e,i}e:for(let i of t){let[o,c,u]=i,l=n[c];if(!l)continue;(0,nB.writeKey)(i,Dee,0);let _=i[3];_&&(i.length=3);let d,E=po(u),f;do{let h=l.get(E);if(h){for(let S of h)if(!(f&&!S.includeDescendants)){if(S.startTime>=o){(0,As.info)("omitting",u,S.startTime,o);continue}try{if(S.crossThreads===!1&&!s)continue;if(d===void 0){let N=n.auditStore.get(i);if(!N||(d=qn(N,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}S.listener(u,d,o)}catch(N){console.error(N),(0,As.info)(N)}}}if(E==null)break;let p=E.lastIndexOf?.("/",E.length-2);p>-1?E=E.slice(0,p+1):E=null,f=!0}while(!0)}}}function cB(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&Uee)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,Ii.broadcast)({type:iB,path:n,auditIds:l,txnId:c,start:u}),$T(n,l,c,!0))})}}var As,Ii,nB,iB,oB,Uee,Ho,Dee,VT,Bo,Wd,uB=pe(()=>{As=D(F()),Ii=D(Ve()),nB=require("ordered-binary");ia();Rc();zc();iB="transaction",oB="transaction-await",Uee=67108864,Dee=Buffer.alloc(4096);a(aB,"addSubscription");VT=class extends Xr{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"}}},Wd=new Map;a($T,"notifyFromTransactionData");a(cB,"listenToCommits")});var Gp={};et(Gp,{coerceType:()=>Qd,makeTable:()=>Jd,setServerUtilities:()=>Bee});function Jd(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:l,dbisDB:_}=e,{expirationMS:d,audit:E,trackDeletes:f}=e,{attributes:h}=e;h||(h=[]),cB(i,u);let p=0,S,N,O={},H,Y,A,w;for(let z of h)(z.assignCreatedTime||z.name==="__createdtime__")&&(H=z),(z.assignUpdatedTime||z.name==="__updatedtime__")&&(Y=z),z.expiresAt&&(A=z),z.isPrimaryKey&&(O=z);let x;E&&lR();class k extends ft{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=H;static updatedTimeProperty=Y;static dbisDB=_;static schemaDefined=l;static sourcedFrom(T,b){if(b&&(this.sourceOptions=b,b.expiration&&this.setTTLExpiration(b.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 L=!1,y=a(async C=>{let v=C.value,U=C.table?Be[c][C.table]:k;if(c===zr.SYSTEM_SCHEMA_NAME&&(C.table===zr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||C.table===zr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),C.id===void 0&&(C.id=v[U.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));let M=await U.getResource(C.id,C,Xc);switch(C.type){case"put":return M._writeUpdate(v,Xc);case"delete":return M._writeDelete(Xc);case"publish":return M._writePublish(v,Xc);case"invalidate":return M.invalidate(Xc);default:Ui.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 v=T.subscribeOnThisThread?T.subscribeOnThisThread((0,Ci.getWorkerIndex)()):(0,Ci.getWorkerIndex)()===0,U=C&&v&&await T.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(U)for await(let M of U)try{if(!(M.type==="transaction"?M.writes[0]:M)){console.error("Bad subscription event");continue}let J=We(M,()=>{if(M.type==="transaction"){let Z=[];for(let K of M.writes){K[Oe]=M;try{Z.push(y(K))}catch(te){throw te.message+=" writing "+JSON.stringify(K)+" of event "+JSON.stringify(M),te}}return Promise.all(Z)}else if(M.type==="define_schema"){let Z=this.attributes.slice(0),K;for(let te of M.attributes)Z.find(Me=>Me.name===te.name)||(Z.push(te),K=!0);K&&(rt({table:n,database:c,attributes:Z,origin:"cluster"}),eu.signalSchemaChange(new tu.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(M)});M.onCommit&&(J?.then&&L&&eu.signalUserChange(new tu.UserEventMsg(process.pid)),J?.then?J.then(M.onCommit):M.onCommit())}catch(V){console.error("error in subscription handler",V)}}catch(C){console.error(C)}})(),this}static getResource(T,b,L){let y=super.getResource(T,b,L);if(T!=null)try{if(y.hasOwnProperty(ce))return y;let C=y._txnForRequest();if(typeof T=="object"&&T&&!Array.isArray(T))throw new Error(`Invalid id ${JSON.stringify(T)}`);let v,U,V={transaction:C?.getReadTxn()},J;return ut(T,b,V,(Z,K)=>{K?U(K):(y[ce]=Z?.value,y[Zt]=Z?.version,J=!0,v?.(y))}),J?y:new Promise((Z,K)=>{v=Z,U=K})}catch(C){throw C.message.includes("Unable to serialize object")&&(C.message+=": "+JSON.stringify(T)),C}return y}static setTTLExpiration(T){(0,Ci.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:b,value:L,version:y}of this.primaryStore.getRange({start:!1,versions:!0}))y<Date.now()-d&&y>0&&L?.__invalidated__==null&&k.evict(b,L,y)},d).unref())}static enableAuditing(){E=!0,lR(),k.audit=!0}static coerceId(T){return T===""?null:Qd(T,O)}static async dropTable(){if(delete Be[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));eu.signalSchemaChange(new tu.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.DROP_TABLE,c,n))}static Source;static get(T,b){return T&&typeof T=="object"&&!Array.isArray(T)&&T.url===""?{recordCount:this.getRecordCount(),records:"./",name:n,database:c,attributes:h}:super.get(T,b)}get(T){if(typeof T=="string")return this.getProperty(T);if(this[Cs])return this.search(T);if(T?.property)return this.getProperty(T.property);if(this.doesExist()||this[Oe]?.hasOwnProperty("returnNonexistent")&&this[Oe].returnNonexistent)return this}static allowRead(T,b){if(!T)return!1;let L=T.role.permission;if(L.super_user)return!0;if(L[n]?.read){let y=L[n].attribute_permissions;if(y){b||(b={});let C=b.select;if(C){let v=YT(y,"read");b.select=C.filter(U=>v[U])}else b.select=y.filter(v=>v.read).map(v=>v.attribute_name);return b}else return!0}}allowUpdate(T,b,L){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 v=YT(C,"update");for(let U in b)if(!v[U])return!1;if(L)for(let U of C){let M=U.attribute_name;!U.update&&!(M in b)&&(b[M]=this.getProperty(M))}}else return!0}}allowCreate(T,b){return this.allowUpdate(T,{})}static allowCreate(T,b){if(!T)return!1;let L=T.role.permission;if(L.super_user)return!0;if(L[n]?.insert){let y=L[n].attribute_permissions;if(y){let C=YT(y,"insert");for(let v in b)if(!C[v])return!1}else return!0}}static allowDelete(T){if(!T)return!1;let b=T.role.permission;if(b.super_user||b[n]?.delete)return!0}update(T,b){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(b)for(let C in this[ce])T[C]===void 0&&(T[C]=void 0);y=this[Et],y&&(T=Object.assign(y,T)),this[Et]=y=T}return!this[ce]&&t&&!(y||(y=this[Et]))?.[t]&&(y||(y=this[Et]=Object.create(null)),y[t]=this[ie]),this._writeUpdate(this),this}invalidate(T){this._txnForRequest().addWrite({key:this[ie],store:i,invalidated:!0,lastVersion:this[Zt],nodeName:this[Oe]?.nodeName,commit:(L,y)=>{if(y)return;let C={__invalidated__:L};for(let V in r)C[V]=this.getProperty(V);let v=k.Source,U,M=this[ie];return T?.isNotification||v?.invalidate&&(!v.invalidate.reliesOnPrototype||v.prototype.invalidate)&&(U=v.invalidate(M,this)),i.put(this[ie],C,L),{type:E&&"invalidate",[yi]:U}}})}static evict(T,b,L){let y=this.Source;if(y?.get&&(!y.get.reliesOnPrototype||y.prototype.get)){let C;if(!b){let v=i.getEntry(T);if(!v)return;b=v.value,L=v.version}if(b)for(let v in r)C||(C={__invalidated__:0}),C[v]=b[v];return C?i.put(T,C,L,L):i.remove(T,L)}else return i.remove(T,L)}lock(){throw new Error("Not yet implemented")}static operation(T,b){return T.table||=n,T.schema||=c,SB.operation(T,b)}async put(T){this.update(T,!0)}_writeUpdate(T,b){let L=this._txnForRequest();if(this[ie]===void 0)throw new Error("Can not save record without an id");let y=this[ce],C,v,U=this[ie];y||(this[ce]={}),L.addWrite({key:U,store:i,lastVersion:this[Zt],nodeName:this[Oe]?.nodeName,validate:()=>{this.validate(T)},commit:(M,V)=>{let J;if(V){if(C)return;let K=i.getEntry(U);y=K?.value;let te=this[Oe];te&&K?.version>(te.lastModified||0)&&(te.lastModified=K.version)}if(!v){if(v=!0,b?.isNotification)T=aa(T);else{if(T[dB]&&(C=!Ou(T),C))return;t&&T[t]!==U&&(T[t]=U),Y&&(T[Y.name]=Y.type==="Date"?new Date(M):Y.type==="String"?new Date(M).toISOString():M),H&&(y?T[H.name]=y[H.name]:T[H.name]=H.type==="Date"?new Date(M):H.type==="String"?new Date(M).toISOString():M),T=aa(T);let K=k.Source;K?.put&&(!K.put.reliesOnPrototype||K.prototype.put)&&(J=K.put(U,T,this))}if(T[ce])throw new Error("Can not assign a record with a record property");this[ce]=T}if(Ui.trace("Checking timestamp for put",U,this[Zt]>M,this[Zt],M),this[Zt]>M)return E&&{type:"put",value:i.encoder.encode(T)};let Z=i.encoder.encode(T);return i.put(this[ie],(0,qo.asBinary)(Z),M),ge(this[ie],y,T),y===null&&!V&&xn(-1),{type:E&&"put",value:Z,[yi]:J}}})}async delete(T){return typeof T=="string"?this.deleteProperty(T):this[ce]?this._writeDelete(T):!1}_writeDelete(T){let b=this._txnForRequest(),L,y=this[ie],C;return b.addWrite({key:y,store:i,lastVersion:this[Zt],nodeName:this[Oe]?.nodeName,commit:(v,U)=>{let M=this[ce];if(U){let V=i.getEntry(y);M=V?.value;let J=this[Oe];J&&V?.version>(J.lastModified||0)&&(J.lastModified=V.version)}if(!L&&(L=!0,!T?.isNotification)){let V=k.Source;V?.delete&&(!V.delete.reliesOnPrototype||V.prototype.delete)&&(C=V.delete(y,this))}if(!(this[Zt]>v))return ge(this[ie],M),Ui.trace("Write delete entry",E||f,v),E||f?(i.put(this[ie],null,v),E||uR(),U||xn(1)):i.remove(this[ie]),{type:E&&"delete",[yi]:C}}}),!0}search(T){let b=this._txnForRequest();if(!T)throw new Error("No query provided");let L=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[ie]&&(y=[{attribute:null,comparator:"prefix",value:this[ie]}].concat(y));for(let K of y){let te=K[0]??K.attribute,Me=te==null?O:h.find(on=>on.name==te);if(Me)Me.type&&(K[1]===void 0?K.value=C(K.value,Me):K[1]=C(K[1],Me));else if(te!=null)throw(0,wi.handleHDBError)(new Error,`${te} is not a defined attribute`,404)}function C(K,te){return Array.isArray(K)?K.map(Me=>Qd(Me,te)):Qd(K,te)}a(C,"coerceTypedValues"),y.length>1&&(y=(0,hB.sortBy)(y,K=>{if(K.estimated_count===void 0){let te=K.comparator||K.search_type;if(te===Zc.SEARCH_TYPES.EQUALS){let Me=K[0]??K.attribute;if(Me==null||Me===t)K.estimated_count=1;else{let on=r[Me];K.estimated_count=on?on.getValuesCount(K[1]??K.value):1/0}}else te===Zc.SEARCH_TYPES.CONTAINS||te===Zc.SEARCH_TYPES.ENDS_WITH||te==="ne"?K.estimated_count=1/0:te===Zc.SEARCH_TYPES.STARTS_WITH||te==="prefix"?K.estimated_count=Mee:K.estimated_count=Lee}return K.estimated_count}));let v=b.getReadTxn();v.use();let U=T.select,M=y[0],V;if(!M)V=i.getRange(L?{end:!1,reverse:!0,transaction:v,lazy:U?.length<4}:{start:!1,transaction:v,lazy:U?.length<4}).map(({value:K})=>K?new Promise(te=>setImmediate(()=>te(K))):qo.SKIP);else{let K=vE(M,v,L,k,T.allowFullScan);if(!T.operator||T.operator.toLowerCase()==="and"){let te=y.slice(1).map(BE);V=Z(K,te)}else{for(let Me=1;Me<y.length;Me++){let on=y[Me],dE=vE(on,v,L,k,T.allowFullScan);K=K.concat(dE)}let te=new Set;K=K.filter(Me=>te.has(Me)?!1:(te.add(Me),!0)),V=Z(K)}}(T.offset||T.limit!==void 0)&&(V=V.slice(T.offset,T.limit!==void 0?(T.offset||0)+T.limit:void 0)),V.onDone=()=>{v.done()};let J=this[Oe];function Z(K,te){let Me=te?.length,on={transaction:v,lazy:Me>0||U?.length<4,alwaysPrefetch:!0};return K.map(dE=>new Promise(EE=>ut(dE,J,on,EH=>{let fE=EH?.value;if(!fE)return EE(qo.SKIP);for(let hE=0;hE<Me;hE++)if(!te[hE](fE))return EE(qo.SKIP);EE(fE)})))}return a(Z,"idsToRecords"),V}async subscribe(T){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||rt({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let b=aB(k,this[ie]??null,function(v,U,M){try{this.send({id:v,timestamp:M,...U})}catch(V){console.error(V)}},T.startTime,this[Cs]),L=this[ie],y=T.previousCount;y>1e3&&(y=1e3);let C=T.startTime;if(this[Cs]){if(C){if(y)throw new wi.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:v,value:U}of u.getRange({start:[C,Number.MAX_SAFE_INTEGER]})){let[M,V,J]=v;if(v.length>3&&(J=v.slice(2)),V!==s)continue;let Z=qn(U,i);(L==null||fB(L,J))&&b.send({id:J,timestamp:M,...Z}),b.startTime=M}}else if(y){let v=[];for(let{key:U,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[V,J,Z]=U;if(U.length>3&&(Z=U.slice(2)),J!==s)continue;if(L==null||fB(L,Z)){let K=qn(M,i);if(v.push({id:Z,timestamp:V,...K}),--y<=0)break}}catch(V){Ui.error("Error getting history entry",U,V)}for(let U=v.length;U>0;)b.send(v[--U]);v[0]&&(b.startTime=v[0].timestamp)}else if(!T.omitCurrent)for(let{key:v,value:U,version:M}of i.getRange({start:L??!1,end:L==null?void 0:[L,mB.MAXIMUM_KEY],versions:!0}))U&&b.send({id:v,timestamp:M,value:U})}else{y&&!C&&(C=0);let v=this[Zt];if(C<v){let U=[],M=v;do{let V=[M,s,L],J=u.get(V);if(J){T.omitCurrent=!0;let Z=qn(J,i);U.push({id:L,timestamp:M,...Z}),M=Z.lastVersion}else break;y&&y--}while(M>C&&y!==0);for(let V=U.length;V>0;)b.send(U[--V]);b.startTime=v}!T.omitCurrent&&this.doesExist()&&b.send({id:L,timestamp:this[Zt],value:this})}return T.listener&&b.on("data",T.listener),b}doesExist(){return!!this[ce]}async publish(T,b){this._writePublish(T,b)}_writePublish(T,b){let L=this._txnForRequest(),y=this[ie]||null,C,v;L.addWrite({store:i,key:y,lastVersion:this[Zt],nodeName:this[Oe]?.nodeName,validate:()=>{this.validate(T)},commit:(U,M)=>{if(this.validate(T),!v&&(v=!0,!b?.isNotification)){let Z=k.Source;Z?.publish&&(!Z.publish.reliesOnPrototype||Z.prototype.publish)&&(C=Z.publish(y,T,this))}let V=M>0?i.get(y):this[ce];V===void 0&&!M&&(E||f)&&(E||uR(),xn(1));let J={type:"message",value:i.encoder.encode(T),[yi]:C};return!L.hasWrittenTime&&this[Zt]>U&&(U=J.newTxnTime=this[Zt]+.001),i.put(y,V??null,U),J}})}_txnForRequest(){let T=this[Oe],b=T?.transaction;if(b){let L;return(L=b?.find(y=>y.lmdbDb?.path===i.path))||b.push(L=new Jc(i,T.user,u)),L}else return new Kd(i,T.user,u)}validate(T){let b;for(let L=0,y=h.length;L<y;L++){let C=h[L];if(C.type){let v=T[C.name];if(v!=null)switch(C.type){case"Int":case"Float":(typeof v!="number"||C.type==="Int"&&v!==Math.floor(v))&&(b||(b=[])).push(`Property ${C.name} must be an ${C.type==="Int"?"integer":"number"}`);break;case"ID":typeof v=="string"||v?.length>0&&v.every?.(U=>typeof U=="string")||(b||(b=[])).push(`Property ${C.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof v!="string"&&(b||(b=[])).push(`Property ${C.name} must be a string`)}}C.required&&T[C.name]==null&&(b||(b=[])).push(`Property ${C.name} is required`)}if(b)throw new wi.ClientError(b.join(". "))}getUpdatedTime(){return this[Zt]}static async addAttributes(T){let b=h.slice(0);for(let L of T){if(!L.name)throw new wi.ClientError("Attribute name is required");if(L.name.match(/[`/]/))throw new wi.ClientError("Attribute names cannot include backticks or forward slashes");b.push(L)}return rt({table:n,database:c,schemaDefined:l,attributes:b}),k.indexingOperation}static async removeAttributes(T){let b=h.filter(L=>!T.includes(L.name));return rt({table:n,database:c,schemaDefined:l,attributes:b}),k.indexingOperation}static getRecordCount(){let T=0;for(let{key:b,value:L}of i.getRange({end:!1}))T++,b[0]?.description==="deletions"&&(T+=L||0);return i.getStats().entryCount-T}static updatedAttributes(){bu(this,this)}static async deleteHistory(T=0){let b;for(let{key:L,value:y}of u.getRange({start:[0,0],end:[T,0]})){await new Promise(M=>setImmediate(M));let[C,v,U]=L;L.length>3&&(U=L.slice(2)),v===s&&(b=i.remove(U))}await b}static async*getHistory(T=0,b=1/0){for(let{key:L,value:y}of u.getRange({start:[T,0],end:[b,0]})){await new Promise(V=>setImmediate(V));let[C,v,U]=L;if(L.length>3&&(U=L.slice(2)),v!==s)continue;let M=qn(y,i);M.id=U,M.timestamp=C,yield M}}static async getHistoryOfRecord(T){let b=[],L=i.getEntry(T);if(!L)return b;let y=L.version,C=0;do{await new Promise(M=>setImmediate(M));let v=[y,s,T],U=u.get(v);if(U){let M=qn(U,i);M.timestamp=y,b.push(M),y=M.lastVersion}else break}while(C<1e3);return b.reverse()}static cleanup(){x?.remove()}}k.updatedAttributes();let X=k.prototype;return X[dB]=!0,d&&k.setTTLExpiration(d/1e3),A&&dH(),k;function ge(z,T,b){let L;for(let y in r){let C=r[y],v=C.isIndexing,U=b?.[y],M=T?.[y];if(U===M&&!v)continue;L=!0;let V=(0,jc.getIndexedValues)(M);if(V){lB&&C.prefetch(V.map(J=>({key:J,value:z})),EB);for(let J=0,Z=V.length;J<Z;J++)C.remove(V[J],z)}if(V=(0,jc.getIndexedValues)(U),V){lB&&C.prefetch(V.map(J=>({key:J,value:z})),EB);for(let J=0,Z=V.length;J<Z;J++)C.put(V[J],z)}}return L}a(ge,"updateIndices");function ut(z,T,b,L){let y=a(()=>{let C=b.transaction;if(C?.isDone)throw new Error("Invalid read transaction");let v;C&&!C.hasRunLoadRecord&&(v=!0,C.hasRunLoadRecord=!0);let U;try{U=i.getEntry(z,b)}catch(Z){throw Z.message+=". The read txn is "+JSON.stringify(C)+" first loadRecord: "+v,console.error(Z),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),Z}let M,V,J;if(U?(T&&U?.version>(T.lastModified||0)&&(T.lastModified=U.version),V=U.version,M=U.value,(V<0||!M||typeof M.__invalidated__=="number"||d&&V<Date.now()-d)&&(J=!0)):J=!0,J&&!b?.allowInvalidated){let Z=k.Source;if(Z&&Z.get&&(!Z.get.reliesOnPrototype||Z.prototype.get))return $o(z,M,V,T).then(te=>{if(te?.value?.[ce])throw new Error("Can not assign a record with a record property");L(te)},te=>{L(null,te)})}if(U?.value?.[ce])throw new Error("Can not assign a record with a record property");L(U)},"whenPrefetched");if(!b.alwaysPrefetch&&(z==null||i.cache?.get(z)))return y();i.prefetch([z],y)}a(ut,"loadRecord");function Mi(){w=new Set,(0,Ci.onMessageByType)("transaction",z),i.on("aftercommit",z);function z(){for(let T of w)T()}a(z,"onCommit")}a(Mi,"setupCommitListeners");async function $o(z,T=null,b,L){if(b<0){let U;return w||Mi(),await new Promise(M=>{let V,J=a(()=>{if(U=i.getEntry(z),!U||U.version>0){if(clearTimeout(V),w.delete(J),typeof U?.value?.__invalidated__=="number")return M($o(z,U.value,U.version,L));M(U)}},"listener");w.add(J),V=setTimeout(()=>{w.delete(J),M($o(z,U?.value,void 0,L))},1e4).unref()})}let y=T?.__invalidated__,C=-(b||1);i.put(z,T,C,b);let v={transaction:L?.transaction};try{let U=await k.Source.get(z,v),M=v.lastModified||b;(!M||d&&M<Date.now()-d)&&(M=(0,jc.getNextMonotonicTime)());let J=ge(z,T,U)&&b||y>0;return U?(t&&(U[t]=z),typeof U.toJSON=="function"&&(U=U.toJSON()),i.put(z,U,M,C)):i.remove(z,C),J&&E&&u.put([M,s,z],Yd(y,null,U?{type:"put",value:i.encoder.encode(U)}:{type:"delete"})),{version:M,value:U}}catch(U){throw i.put(z,T,b,C),U}}a($o,"getFromSource");function xn(z){p||(p=i.get([_B,KT.threadId])||0),p+=z,N||(N=setTimeout(()=>{N=null,i.rootStore.status==="open"&&i.put([_B,KT.threadId],p)},50))}a(xn,"recordDeletion");function uR(){S||(S=setTimeout(()=>{if(S=null,i.rootStore.status==="open"){for(let{key:z,value:T}of i.getRange({start:!0}))if(T===null){let b=i.getEntry(z);b?.value===null&&i.remove(z,b.version),xn(-1)}}},k.getRecordCount()*100+vee).unref())}a(uR,"enqueueDeletionCleanup");function lR(){x=u?.addDeleteRemovalCallback(s,z=>{let T=i.getEntry(z);T?.value===null&&i.remove(z,T.version),xn(-1)})}a(lR,"addDeleteRemoval");function dH(){(0,Ci.getWorkerIndex)()===0&&setInterval(async()=>{try{let z=A.name,T=r[z];if(!T)throw new Error(`expiresAt attribute ${A} must be indexed`);for(let{value:b}of T.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let L=i.getEntry(b);L.value?.[z]<Date.now()&&k.evict(b,L.value,L.version),await new Promise(y=>setImmediate(y))}}catch(z){Ui.error("Error in evicting old records",z)}},Pee).unref()}a(dH,"runRecordExpirationEviction")}function YT(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 EB(){}function Bee(e){SB=e}function Qd(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Hee.test(e)&&(e+="Z"),new Date(e)):r?e:(0,zd.autoCast)(e)}function fB(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}var zr,qo,jc,hB,KT,Zc,ru,wi,eu,tu,Ui,mB,Ci,zd,SB,Lee,Mee,Pee,lB,_B,Zt,dB,AEe,Xc,vee,Hee,Ed=pe(()=>{zr=D(R()),qo=require("lmdb"),jc=D(vt()),hB=require("lodash"),KT=require("worker_threads");Zr();sB();Zc=D(ke()),ru=D(W());uB();wi=D(Q()),eu=D(Fs()),tu=D(Fr());de();Cu();Ui=D(F());Iu();$n();mB=require("ordered-binary"),Ci=D(Ve());zc();zd=D(G()),Lee=1e8,Mee=1e7,Pee=6e4;ru.initSync();lB=ru.get(zr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),_B=Symbol.for("deletions"),Zt=Symbol.for("version"),dB=Symbol.for("incremental-update"),AEe=Symbol("source-resource"),Xc={isNotification:!0,allowInvalidated:!0},vee=(0,zd.convertToMS)(ru.get(zr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Jd,"makeTable");a(YT,"attributesAsObject");a(EB,"noop");a(Bee,"setServerUtilities");Hee=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Qd,"coerceType");a(fB,"isDescendantId")});var Ne={};et(Ne,{database:()=>Ha,databases:()=>Be,dropDatabase:()=>zh,dropTableMeta:()=>Vee,getDatabases:()=>xr,getTables:()=>qee,onUpdatedTable:()=>mT,readMetaDb:()=>su,resetDatabases:()=>Fee,table:()=>rt,tables:()=>sr});function qee(){return eE||xr(),sr||{}}function xr(){if(eE)return Be;eE=!0,ko=new Map;let e=(0,yt.getHdbBasePath)()&&(0,ve.join)((0,yt.getHdbBasePath)(),jt.DATABASES_DIR_NAME),t=(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,yt.get)(jt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,hr.existsSync)(e)?e:(0,ve.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,hr.existsSync)(e))for(let r of(0,hr.readdirSync)(e,{withFileTypes:!0})){let s=(0,ve.basename)(r.name,".mdb");r.isFile()&&(0,ve.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&su((0,ve.join)(e,r.name),null,s)}if((0,hr.existsSync)((0,xo.getBaseSchemaPath)())){for(let r of(0,hr.readdirSync)((0,xo.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,ve.join)((0,xo.getBaseSchemaPath)(),r.name),n=(0,ve.join)((0,xo.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,hr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,ve.extname)(i.name).toLowerCase()===".mdb"){let o=(0,ve.join)(n,i.name);su((0,ve.join)(s,i.name),(0,ve.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,hr.existsSync)(n))for(let o of(0,hr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,ve.extname)(o.name).toLowerCase()===".mdb"&&su((0,ve.join)(n,o.name),(0,ve.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,ve.join)(c.path,(0,ve.basename)(o+".mdb"));(0,hr.existsSync)(u)&&su(u,o,r,null,!0)}}for(let r in Be){let s=ko.get(r);if(s){let n=Be[r];r.includes("delete")&&Pe.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Pe.trace(`delete table class ${i}`),delete n[i])}else if(delete Be[r],r==="data"){for(let n in sr)delete sr[n];delete sr[tE]}}return ko=null,Be}}function Fee(){eE=!1;for(let[,e]of Fn)e.needsDeletion=!0;xr();for(let[e,t]of Fn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),Fn.delete(e));return Be}function su(e,t,r=zT,s,n){let i=new WT.default(e,!1);e.includes("delete")&&Pe.trace(`reading meta data from ${e}`);try{let o=Fn.get(e);o?o.needsDeletion=!1:(o=(0,Xd.open)(i),Fn.set(e,o));let c=new Di.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Fo.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,hr.existsSync)(s)&&(i.path=s,l=(0,Xd.open)(i),l.isLegacy=!0):l=xT(o));let _=gB(r),d=_[tE],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[p,S]=f.toString().split("/");e.includes("delete")&&Pe.trace(`read key ${f}`),S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let N=E.get(p);N||E.set(p,N={attributes:[]}),(S==null||h.is_hash_attribute)&&(N.primary=h),S!=null&&N.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:p,primary:S}=h;if(!S){for(let X of p)if(X.is_hash_attribute||X.isPrimaryKey){S=X;break}if(!S)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(p)}`)}let N=_[f],O={},H=[],Y,A,w=typeof S.audit=="boolean"?S.audit:(0,yt.get)(jt.CONFIG_PARAMS.LOGGING_AUDITLOG),x=S.trackDeletes,k=S.expiration;if(N)O=N.indices,H=N.attributes,N.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(Go)||0)&&u.putSync(Go,Y+1):(S.tableId=Y=u.get(Go),Y||(Y=1),u.putSync(Go,Y+1),u.putSync(S.key,S));let X=new Di.default(!S.is_hash_attribute,S.is_hash_attribute);Pe.trace(`openDB ${S.key} from ${r}`),A=o.openDB(S.key,X),A.rootStore=o,A.tableId=Y}for(let X of p){X.attribute=X.name;try{if(!X.is_hash_attribute&&(X.indexed||X.attribute&&!X.name)){if(!O[X.name]){let ut=new Di.default(!X.is_hash_attribute,X.is_hash_attribute);Pe.trace(`openDB ${X.key} from ${r}`),O[X.name]=o.openDB(X.key,ut)}let ge=H.find(ut=>ut.name===X.name);ge?H.splice(H.indexOf(ge),1,X):H.push(X)}}catch(ge){Pe.error("Error trying to update attribute",X,H,O,ge)}}if(!N){Pe.trace(`creating table class ${f}`,Object.keys(_)),N=AB(_,f,Jd({primaryStore:A,auditStore:l,audit:w,expirationMS:k&&k*1e3,trackDeletes:x,tableName:f,tableId:Y,primaryKey:S.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:O,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),N.schemaVersion=1;for(let X of JT)X(N)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function gB(e){let t=Be[e];if(t||(e==="data"?t=Be[e]=sr:e==="system"?Object.defineProperty(Be,"system",{value:t=Object.create(null),configurable:!0}):t=Be[e]=Object.create(null)),ko&&!ko.has(e)){let r=new Set;t[tE]=r,ko.set(e,r)}return t}function AB(e,t,r){return e[t]=r,r}function Ha({database:e,table:t}){e||(e=zT),xr();let r=gB(e),s=(0,ve.join)((0,yt.getHdbBasePath)(),jt.DATABASES_DIR_NAME),n=t&&(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,yt.get)(jt.CONFIG_PARAMS.STORAGE_PATH)||((0,hr.existsSync)(s)?s:(0,ve.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME));let i=(0,ve.join)(s,(n?t:e)+".mdb"),o=Fn.get(i);if(!o){let c=new WT.default(i,!1);o=(0,Xd.open)(c),Fn.set(i,o)}return o}async function zh(e){if(!Be[e])throw new Error("Schema does not exist");let t=Be[e];for(let r in t){let n=t[r].primaryStore.rootStore;Fn.delete(n.path),n.status==="open"&&(await n.close(),await pB.remove(n.path))}if(e==="data"){for(let r in sr)delete sr[r];delete sr[tE]}delete Be[e]}function rt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=zT);let u=Ha({database:t,table:e}),l=Be[t],_=l?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let d,E,f,h;o==null&&(o=!0);let p=new Di.default(!1);for(let A of s)A.attribute?(A.name=A.attribute,A.indexed=!0):A.attribute=A.name,A.expiresAt&&(A.indexed=!0);let S,N;if(_){if(Pe.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 A=u.auditStore;A||(A=xT(u)),E=s.find(X=>X.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,yt.get)(jt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),Pe.trace(`${e} table loading, opening primary store`);let w=new Di.default(!1,!0),x=e+"/";Pe.trace(`openDB ${x} from ${t}`);let k=u.openDB(x,w);k.rootStore=u,Pe.trace(`openDB ${Fo.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(Fo.INTERNAL_DBIS_NAME,p),k.tableId=h.get(Go),k.tableId||(k.tableId=1),h.putSync(Go,k.tableId+1),E.tableId=k.tableId,_=AB(l,e,Jd({primaryStore:k,auditStore:A,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,S=!0,Y(),h.put(x,E)}Pe.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Pe.trace(`openDB ${Fo.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(Fo.INTERNAL_DBIS_NAME,p)),_.dbisDB=h;let O=[];for(let{key:A,value:w}of h.getRange({start:!0})){let[x,k]=A.toString().split("/");if(k===""&&(k=w.name),k){if(x!==e)continue}else k=x;if(!s.find(ge=>ge.name===k)?.indexed&&w.indexed&&!w.isPrimaryKey){Y(),S=!0,h.remove(A);let ge=_.indices[x];ge&&O.push(ge)}}Pe.trace(`${e} table loading, comparing atributes`);let H=[];try{for(let A of s||[]){let w=e+"/"+(A.name||"");Object.defineProperty(A,"key",{value:w,configurable:!0});let x=h.get(w);if(A.isPrimaryKey){if(n===!0&&!_.audit){_.enableAuditing(),x||(w=e+"/",x=h.get(w));let X=Object.assign({},x,{audit:!0});S=!0,Y(),h.put(w,X)}continue}x?.attribute&&!x.name&&(x.indexed=!0);let k=!x||x.type!==A.type||x.indexed!==A.indexed||JSON.stringify(x.attributes)!==JSON.stringify(A.attributes)||JSON.stringify(x.elements)!==JSON.stringify(A.elements);if(A.indexed){let X=new Di.default(!0,!1);Pe.trace(`openDB ${w} from ${t}`);let ge=u.openDB(w,X);(k||x.indexingPID&&x.indexingPID!==process.pid||x.restartNumber<nu.workerData?.restartNumber)&&(S=!0,Y(),x=h.get(w),(k||x.indexingPID&&x.indexingPID!==process.pid||x.restartNumber<nu.workerData?.restartNumber)&&(S=!0,A.lastIndexedKey=x?.lastIndexedKey||!1,A.indexingPID=process.pid,ge.isIndexing=!0,Object.defineProperty(A,"dbi",{value:ge}),H.push(A)),h.put(w,A)),f[A.name]=ge}else k&&(S=!0,Y(),h.put(w,A))}}finally{N&&N()}if(S&&(_.schemaVersion++,_.updatedAttributes()),Pe.trace(`${e} table loading, running index`),H.length>0||O.length>0?_.indexingOperation=kee(_,H,O):S&&Zd.signalSchemaChange(new jd.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,S)for(let A of JT)A(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Pe.trace(`${e} table loaded`),_;function Y(){N||u.transactionSync(()=>({then(A){N=A}}))}a(Y,"startTxn")}async function kee(e,t,r){try{let s=e.schemaVersion;await Zd.signalSchemaChange(new jd.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:l,value:_,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(_){if(u++,n=e.primaryStore.ifVersion(l,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,p=(0,TB.getIndexedValues)(_[h]);if(p)for(let S=0,N=p.length;S<N;S++)f.dbi.put(p[S],l)}}),n.then(()=>u--,E=>{u--,Pe.error(E)}),nu.workerData&&nu.workerData.restartNumber!==RB.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>Gee?await n:u>xee&&await new Promise(E=>setImmediate(E))}for(let l of t)delete l.lastIndexedKey,delete l.indexingPID,l.dbi.isIndexing=!1,n=e.dbisDB.put(l.key,l)}await n,await Zd.signalSchemaChange(new jd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Pe.error("Error in indexing",s)}}function Vee({table:e,database:t}){let r=Ha({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 mT(e){JT.push(e)}var yt,Fo,Xd,ve,hr,xo,Di,WT,jt,pB,QT,TB,Zd,jd,nu,Pe,RB,zT,tE,sr,Be,Go,JT,eE,Fn,ko,Gee,xee,de=pe(()=>{yt=D(W()),Fo=D(ke()),Xd=require("lmdb"),ve=require("path"),hr=require("fs"),xo=D(Ce());Ed();Di=D(Mu()),WT=D(vu()),jt=D(R()),pB=D(require("fs-extra")),QT=require("../index"),TB=D(vt()),Zd=D(Fs()),jd=D(Fr()),nu=require("worker_threads"),Pe=D(F()),RB=D(Ve());zc();zT="data",tE=Symbol("defined-tables");(0,yt.initSync)();sr=Object.create(null),Be=Object.create(null);(0,QT._assignPackageExport)("databases",Be);(0,QT._assignPackageExport)("tables",sr);Go=Symbol.for("next-table-id"),JT=[],Fn=new Map;a(qee,"getTables");a(xr,"getDatabases");a(Fee,"resetDatabases");a(su,"readMetaDb");a(gB,"ensureDB");a(AB,"setTable");a(Ha,"database");a(zh,"dropDatabase");a(rt,"table");Gee=1e3,xee=10;a(kee,"runIndexing");a(Vee,"dropTableMeta");a(mT,"onUpdatedTable")});var G=m((DEe,BB)=>{"use strict";var Gn=require("path"),IB=require("fs-extra"),er=F(),OB=require("fs-extra"),rE=require("os"),$ee=require("net"),Yee=require("recursive-iterator"),xe=R(),Kee=VR(),NB=require("papaparse"),sE=require("moment"),{inspect:Wee}=require("util"),bB=require("is-number"),UEe=require("lodash"),Qee=require("minimist"),zee=require("https"),Jee=require("http"),{hdb_errors:nE}=Q(),Xee=/^((\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)))$/,wB=require("util").promisify(setTimeout),Zee=100,jee=5,ete="",tte=4,yB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};BB.exports={isEmpty:mr,isEmptyOrZeroLength:Os,arrayHasEmptyValues:nte,arrayHasEmptyOrZeroLengthValues:ite,buildFolderPath:ote,isBoolean:CB,errorizeMessage:rte,stripFileExtension:cte,autoCast:ute,autoCastJSON:UB,autoCastJSONDeep:ZT,removeDir:lte,compareVersions:_te,isCompatibleDataVersion:dte,escapeRawValue:Ete,unescapeValue:fte,stringifyProps:hte,timeoutPromise:Ste,isClusterOperation:Tte,getClusterUser:gte,checkGlobalSchemaTable:Rte,getHomeDir:LB,getPropsFilePath:mte,promisifyPapaParse:Ate,removeBOM:MB,createEventPromise:Ote,checkProcessRunning:Nte,checkSchemaTableExist:bte,checkSchemaExists:PB,checkTableExists:vB,getStartOfTomorrowInSeconds:yte,getLimitKey:Ite,isObject:ate,isNotEmptyAndHasValue:ste,autoCasterIsNumberCheck:DB,backtickASTSchemaItems:wte,isPortTaken:pte,createForkArgs:Cte,autoCastBoolean:Ute,async_set_timeout:wB,getTableHashAttribute:Dte,doesSchemaExist:Lte,doesTableExist:Mte,stringifyObj:Pte,ms_to_time:vte,changeExtension:Bte,getEnvCliRootPath:jT,noBootFile:Hte,httpRequest:qte,transformReq:Fte,convertToMS:Gte,PACKAGE_ROOT:xe.PACKAGE_ROOT};function rte(e){return e instanceof Error?e:new Error(e)}a(rte,"errorizeMessage");function mr(e){return e==null}a(mr,"isEmpty");function ste(e){return!mr(e)&&(e||e===0||e===""||CB(e))}a(ste,"isNotEmptyAndHasValue");function Os(e){return mr(e)||e.length===0||e.size===0}a(Os,"isEmptyOrZeroLength");function nte(e){if(mr(e))return!0;for(let t=0;t<e.length;t++)if(mr(e[t]))return!0;return!1}a(nte,"arrayHasEmptyValues");function ite(e){if(Os(e))return!0;for(let t=0;t<e.length;t++)if(Os(e[t]))return!0;return!1}a(ite,"arrayHasEmptyOrZeroLengthValues");function ote(...e){try{return e.join(Gn.sep)}catch{console.error(e)}}a(ote,"buildFolderPath");function CB(e){return mr(e)?!1:e===!0||e===!1}a(CB,"isBoolean");function ate(e){return mr(e)?!1:typeof e=="object"}a(ate,"isObject");function cte(e){return Os(e)?ete:e.slice(0,-tte)}a(cte,"stripFileExtension");function ute(e){return mr(e)||e===""||typeof e!="string"?e:yB[e]!==void 0?yB[e]:DB(e)===!0?Number(e):Xee.test(e)?new Date(e):e}a(ute,"autoCast");function UB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(UB,"autoCastJSON");function ZT(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=ZT(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=ZT(r);s!==r&&(e[t]=s)}return e}else return UB(e)}a(ZT,"autoCastJSONDeep");function DB(e){if(e.startsWith("0.")&&bB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&bB(e))}a(DB,"autoCasterIsNumberCheck");async function lte(e){if(Os(e))throw new Error(`Directory path: ${e} does not exist`);try{await OB.emptyDir(e),await OB.remove(e)}catch(t){throw er.error(`Error removing files in ${e} -- ${t}`),t}}a(lte,"removeDir");function _te(e,t){if(Os(e)){er.info("Invalid current version sent as parameter.");return}if(Os(t)){er.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let l=0;l<u;l++)if(r=parseInt(o[l],10)-parseInt(c[l],10),r)return r;return o.length-c.length}a(_te,"compareVersions");function dte(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(dte,"isCompatibleDataVersion");function Ete(e){if(mr(e))return e;let t=String(e);return t==="."?xe.UNICODE_PERIOD:t===".."?xe.UNICODE_PERIOD+xe.UNICODE_PERIOD:t.replace(xe.FORWARD_SLASH_REGEX,xe.UNICODE_FORWARD_SLASH)}a(Ete,"escapeRawValue");function fte(e){if(mr(e))return e;let t=String(e);return t===xe.UNICODE_PERIOD?".":t===xe.UNICODE_PERIOD+xe.UNICODE_PERIOD?"..":String(e).replace(xe.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(fte,"unescapeValue");function hte(e,t){if(mr(e))return er.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+rE.EOL}!Os(s)&&s[0]===";"?r+=" "+s+n+rE.EOL:Os(s)||(r+=s+"="+n+rE.EOL)}catch{er.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(hte,"stringifyProps");function LB(){let e;try{e=rE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(LB,"getHomeDir");function mte(){let e=Gn.join(LB(),xe.HDB_HOME_DIR_NAME,xe.BOOT_PROPS_FILE_NAME);return IB.existsSync(e)||(e=Gn.join(__dirname,"../","hdb_boot_properties.file")),e}a(mte,"getPropsFilePath");function Ste(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Ste,"timeoutPromise");async function pte(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=$ee.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(pte,"isPortTaken");function Tte(e){try{return xe.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){er.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Tte,"isClusterOperation");function Rte(e,t){let r=(de(),re(Ne)).getDatabases();if(!r[e])return nE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return nE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Rte,"checkGlobalSchemaTable");function gte(e,t){if(mr(t)){er.warn("No CLUSTERING_USER defined, clustering disabled");return}if(mr(e)||Os(e)){er.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){er.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){er.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(gte,"getClusterUser");function Ate(){NB.parsePromise=function(e,t,r){return new Promise(function(s,n){NB.parse(e,{header:!0,transformHeader:MB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Ate,"promisifyPapaParse");function MB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(MB,"removeBOM");function Ote(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;er.info(`Got cluster status event response: ${Wee(n)}`);try{i.cancel()}catch{er.error("Error trying to cancel timeout.")}s(n)})})}a(Ote,"createEventPromise");async function Nte(e){let t=!0,r=0;do await wB(Zee*r++),(await Kee.findPs(e)).length>0&&(t=!1);while(t&&r<jee);if(t)throw new Error(`process ${e} was not started`)}a(Nte,"checkProcessRunning");function bte(e,t){let r=PB(e);if(r)return r;let s=vB(e,t);if(s)return s}a(bte,"checkSchemaTableExist");function PB(e){let{getDatabases:t}=(de(),re(Ne));if(!t()[e])return nE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(PB,"checkSchemaExists");function vB(e,t){let{getDatabases:r}=(de(),re(Ne));if(!r()[e][t])return nE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(vB,"checkTableExists");function yte(){let e=sE().utc().add(1,xe.MOMENT_DAYS_TAG).startOf(xe.MOMENT_DAYS_TAG).unix(),t=sE().utc().unix();return e-t}a(yte,"getStartOfTomorrowInSeconds");function Ite(){return sE().utc().format("DD-MM-YYYY")}a(Ite,"getLimitKey");function wte(e){try{let t=new Yee(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){er.error("Got an error back ticking items."),er.error(t)}}a(wte,"backtickASTSchemaItems");function Cte(e){return[e]}a(Cte,"createForkArgs");function Ute(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Ute,"autoCastBoolean");function Dte(e,t){let{getDatabases:r}=(de(),re(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Dte,"getTableHashAttribute");function Lte(e){let{getDatabases:t}=(de(),re(Ne));return t()[e]!==void 0}a(Lte,"doesSchemaExist");function Mte(e,t){let{getDatabases:r}=(de(),re(Ne));return r()[e]?.[t]!==void 0}a(Mte,"doesTableExist");function Pte(e){try{return JSON.stringify(e)}catch{return e}}a(Pte,"stringifyObj");function vte(e){let t=sE.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(vte,"ms_to_time");function Bte(e,t){let r=Gn.basename(e,Gn.extname(e));return Gn.join(Gn.dirname(e),r+t)}a(Bte,"changeExtension");function jT(){if(process.env[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Qee(process.argv);if(e[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(jT,"getEnvCliRootPath");var XT;function Hte(){if(XT)return XT;let e=jT();jT()&&IB.pathExistsSync(Gn.join(e,xe.HDB_CONFIG_FILE))&&(XT=!0)}a(Hte,"noBootFile");function qte(e,t){let r;return e.protocol==="http:"?r=Jee:r=zee,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(qte,"httpRequest");function Fte(e){if(!e.schema&&!e.database){e.schema=xe.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Fte,"transformReq");function Gte(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(Gte,"convertToMS")});var W=m((MEe,FB)=>{"use strict";var eR=require("fs-extra"),Jr=require("path"),HB=require("os"),xte=require("properties-reader"),iu=F(),Li=G(),ee=R(),iE=Ar(),kte="Error initializing environment manager",oE="BOOT_PROPS_FILE_PATH",qB=!1,Vte={[ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},sn={};FB.exports={BOOT_PROPS_FILE_PATH:oE,getHdbBasePath:$te,setHdbBasePath:Yte,get:Kte,initSync:Qte,setProperty:Ee,initTestEnvironment:zte};function $te(){return sn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a($te,"getHdbBasePath");function Yte(e){sn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Yte,"setHdbBasePath");function Kte(e){let t=iE.getConfigValue(e);return t===void 0?sn[e]:t}a(Kte,"get");function Ee(e,t){Vte[e]&&(sn[e]=t),iE.updateConfigObject(e,t)}a(Ee,"setProperty");function Wte(){let e;try{e=Li.getPropsFilePath(),eR.accessSync(e,eR.constants.F_OK|eR.constants.R_OK),qB=!0;let t=xte(e);return sn[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),sn[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),sn[oE]=e,!0}catch{return iu.trace(`Environment manager found no properties file at ${e}`),!1}}a(Wte,"doesPropFileExist");function Qte(e=!1){try{(qB||Wte()||Li.noBootFile())&&(iE.initConfig(e),sn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=iE.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){iu.error(kte),iu.error(t),console.error(t),process.exit(1)}}a(Qte,"initSync");function zte(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=Jr.join(__dirname,"../../","unitTests");sn[oE]=Jr.join(u,"hdb_boot_properties.file"),Ee(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Jr.join(u,"settings.test")),Ee(ee.HDB_SETTINGS_NAMES.INSTALL_USER,HB.userInfo()?HB.userInfo().username:void 0),Ee(ee.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Jr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(ee.HDB_SETTINGS_NAMES.CERT_KEY,Jr.join(u,"envDir","utility","keys","certificate.pem")),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Jr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Jr.join(u,"envDir","utility","keys","certificate.pem")),Ee(ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ee(ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Jr.join(u,"envDir","log")),Ee(ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ee(ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ee(ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ee(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Jr.join(u,"envDir")),Ee(ee.CONFIG_PARAMS.STORAGE_PATH,Jr.join(u,"envDir")),Ee(ee.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Li.isEmpty(n)?!0:n),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Li.isEmpty(n)?!0:n),Ee(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Li.isEmpty(i)?!1:i),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Li.isEmpty(i)?!1:i),Ee(ee.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ee(ee.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ee(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ee(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ee(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Jr.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ee(ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Li.isEmpty(c)?!1:c),o&&(Ee("CORS_ACCESSLIST",o),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(Ee(ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(Ee(ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(Ee(ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${oE}. Please check your boot props and settings files`;iu.fatal(r),iu.error(t)}}a(zte,"initTestEnvironment")});var $B=m((vEe,VB)=>{"use strict";var kB=require("joi"),{string:ou,boolean:GB,array:Jte}=kB.types(),xB=R(),Xte=Ue();VB.exports=Zte;function Zte(e){let t=kB.object({operation:ou.valid(xB.OPERATIONS_ENUM.ADD_NODE,xB.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:ou.required(),subscriptions:Jte.items({schema:ou.required(),table:ou.optional(),hash_attribute:ou.optional(),subscribe:GB.required(),publish:GB.required()}).min(1).required()});return Xte.validateBySchema(e,t)}a(Zte,"updateRemoteSourceValidator")});var au=m((HEe,YB)=>{"use strict";var tR=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,s=void 0){this.status=t,this.message=r,this.system_info=s}};YB.exports=tR});var JB=m((FEe,zB)=>{"use strict";var jte=$B(),nn=F(),rR=be(),ere=R(),sR=yr(),KB=He(),WB=Ja(),tre=Al(),{Node:rre,NodeSubscription:QB}=In(),nR=au(),iR=G(),sre=W(),{cloneDeep:nre}=require("lodash"),{broadcast:ire}=Ve();zB.exports=ore;async function ore(e){try{let t=jte(e);if(t)return nn.error(`Validation error in updateRemoteSource: ${t.message}`),new nR(rR.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:s,system_info:n}=e,i=[],o=nre(await sR.getNodeRecord(s)),c=!iR.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&nn.trace(`Existing record found for ${s}, updating records subscriptions`);for(let l=0,_=r.length;l<_;l++){let d=r[l],E=d.schema,f=d.table;if(!iR.doesSchemaExist(E)){nn.trace(`updateRemoteSource creating schema: ${E}`);try{await WB.createSchema({operation:"create_schema",schema:E})}catch(h){nn.error(h)}}if(f&&!iR.doesTableExist(E,f)){nn.trace(`updateRemoteSource creating table: ${f} in schema: ${E}`);let h=new tre(E,f,d.hash_attribute);h.attributes=d.attributes;try{await WB.createTable(h)}catch(p){nn.error(p)}nn.trace(`Creating local stream for ${E}.${f}`),await KB.createLocalTableStream(E,f)}if(await KB.updateWorkStream(d,s),c){let h=!1;for(let p=0,S=o.subscriptions.length;p<S;p++){let N=o.subscriptions[p];if(N.schema===E&&N.table===f){N.publish=d.publish,N.subscribe=d.subscribe,h=!0;break}}h||o.subscriptions.push(new QB(E,f,d.publish,d.subscribe))}else i.push(new QB(E,f,d.publish,d.subscribe))}c||(o=new rre(s,i,void 0),nn.trace(`No record found for ${s}, creating a new one`));let u=Object.create({});return Object.assign(u,o),u.system_info=n,await sR.upsertNodeRecord(u),ire({type:"nats_update"}),new nR(rR.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${sre.get(ere.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await sR.getSystemInfo())}catch(t){nn.error(t);let r=t.message?t.message:t;return new nR(rR.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(ore,"updateRemoteSource")});var eH=m((xEe,jB)=>{"use strict";var ZB=require("joi"),{string:XB}=ZB.types(),are=R(),cre=Ue();jB.exports=ure;function ure(e){let t=ZB.object({operation:XB.valid(are.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:XB.required()});return cre.validateBySchema(e,t)}a(ure,"removeRemoteSourceValidator")});var rH=m((VEe,tH)=>{"use strict";var lre=eH(),aE=F(),cE=be(),oR=R(),_re=yr(),dre=G(),Ere=He(),fre=W(),uE=au(),{NodeSubscription:hre}=In(),mre=ji(),Sre=hn(),{broadcast:pre}=Ve(),Tre=fre.get(oR.CONFIG_PARAMS.CLUSTERING_NODENAME);tH.exports=Rre;async function Rre(e){try{let t=lre(e);if(t)return aE.error(`Validation error in removeRemoteSource: ${t.message}`),new uE(cE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,s=await _re.getNodeRecord(r);if(dre.isEmptyOrZeroLength(s)){let i=`No record found for node '${r}'`;return aE.error(i),new uE(cE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}s=s[0];for(let i=0,o=s.subscriptions.length;i<o;i++){let c=s.subscriptions[i];aE.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let u=new hre(c.schema,c.table,!1,!1);await Ere.updateWorkStream(u,r)}let n=new mre(oR.SYSTEM_SCHEMA_NAME,oR.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Sre.deleteRecord(n),pre({type:"nats_update"}),new uE(cE.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${Tre} successfully removed node '${r}'.`)}catch(t){aE.error(t);let r=t.message?t.message:t;return new uE(cE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Rre,"removeRemoteSource")});var aH=m((YEe,oH)=>{"use strict";var lE=F(),_E=R(),sH=be(),nH=W(),gre=G(),iH=au(),Are=yr(),Ore=Xl(),Nre=ir();oH.exports=bre;async function bre(e){try{lE.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=gre.ms_to_time(t),s=new yre(nH.get(_E.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),nH.get(_E.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT),r,await Are.getSystemInfo());try{let n={name:e.node_name,system_info:e.system_info},i=new Ore(_E.SYSTEM_SCHEMA_NAME,_E.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[n]);await Nre.update(i)}catch(n){lE.error("Get remote config encountered an error updating system info for node:",e.node_name,n)}return lE.trace("getRemoteSourceConfig response:",s),new iH(sH.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,s)}catch(t){lE.error(t);let r=t.message?t.message:t;return new iH(sH.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(bre,"getRemoteSourceConfig");function yre(e,t,r,s){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=s}a(yre,"ConfigResponseObject")});var _H=m((WEe,lH)=>{"use strict";var cH=W();cH.initSync();var uH=He(),cu=F(),Vo=R(),aR=be(),Ire=JB(),wre=rH(),Cre=aH(),Ure=au(),{encode:Dre,decode:Lre}=require("msgpackr"),Mre=Ps(),Pre=dn(),vre=require("util"),Bre=R(),{isMainThread:Hre,parentPort:qre}=require("worker_threads");Ve();var Fre=vre.promisify(Mre.setSchemaDataToGlobal),cR=cH.get(Vo.CONFIG_PARAMS.CLUSTERING_NODENAME);lH.exports=Gre;async function Gre(){try{cu.notify("Starting reply service."),await Fre();let e=await uH.getConnection(),t=`${cR}.__request__`,r=e.subscribe(t,{queue:cR});await xre(r)}catch(e){cu.error(e)}}a(Gre,"initialize");async function xre(e){for await(let t of e){let r=Lre(t.data),s;switch(r.operation){case Vo.OPERATIONS_ENUM.ADD_NODE:case Vo.OPERATIONS_ENUM.UPDATE_NODE:s=await Ire(r);break;case Vo.OPERATIONS_ENUM.REMOVE_NODE:s=await wre(r);break;case Vo.OPERATIONS_ENUM.CLUSTER_STATUS:s=await Cre(r);break;case Vo.OPERATIONS_ENUM.DESCRIBE_ALL:s=await kre();break;default:let n=`node '${cR}' reply service received unrecognized request operation`;cu.error(n),s=new Ure(aR.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,n)}cu.trace(s),t.respond(Dre(s))}}a(xre,"handleRequest");async function kre(){try{return{status:aR.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await Pre.describeAll()}}catch(e){return cu.error(e),{status:aR.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(kre,"getRemoteDescribeAll");Hre||qre.on("message",async e=>{let{type:t}=e;t===Bre.ITC_EVENT_TYPES.SHUTDOWN&&uH.closeConnection()})});var Vre=_H();(async()=>{try{await Vre()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|
|
26
|
+
`+_T.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(m7,"getServerOptions");function S7(){let e=Qr.get(o7),t=Qr.get(a7),r;return e&&(e===!0||e.toUpperCase()===FP)&&(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(S7,"getCORSOpts");function p7(){return Qr.get(l7)}a(p7,"getHeaderTimeoutConfig")});var jP=m((Dde,ZP)=>{"use strict";var{decode:T7}=require("msgpackr"),{isMainThread:R7,parentPort:g7,threadId:Cde}=require("worker_threads"),dT=He(),Ho=be(),A7=g(),Kc=F(),kP=W(),YP=g();Ve();var O7=vs(),{recordAction:N7,recordActionBinary:b7}=(ai(),re(ql)),{publishToStream:y7}=dT,Ude={durable:Ho.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Ho.WORK_QUEUE_CONSUMER_NAMES.deliver_group},I7,w7,C7,KP,WP;ZP.exports={initialize:QP,workQueueListener:XP,setSubscription:U7,setIgnoreOrigin:L7,getDatabaseSubscriptions:D7};async function QP(){WP=!0,Kc.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await dT.getNATSReferences();I7=e,w7=e.info.server_name,C7=t,KP=r}a(QP,"initialize");var Ld=new Map;function U7(e,t,r){let s=Ld.get(e);s||Ld.set(e,s=new Map),s.set(t,r),WP||QP().then(XP)}a(U7,"setSubscription");function D7(){return Ld}a(D7,"getDatabaseSubscriptions");var zP;function L7(e){zP=e}a(L7,"setIgnoreOrigin");var JP=100,VP=new Array(JP),Dd=0;async function XP(){let t=await(await KP.consumers.get(Ho.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ho.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await VP[Dd],VP[Dd]=M7(r).catch(s=>{Kc.error(s)}),++Dd>=JP&&(Dd=0)}a(XP,"workQueueListener");R7||g7.on("message",async e=>{let{type:t}=e;t===YP.ITC_EVENT_TYPES.SHUTDOWN&&dT.closeConnection()});async function M7(e){let t=T7(e.data);N7(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Ho.MSG_HEADERS.ORIGIN)===kP.get(A7.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!zP;if(b7(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;Kc.trace("processing message:",i,o,u,(l?"records: "+l.map(R=>R.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),Kc.trace(`messageProcessor nats msg id: ${e.headers.get(Ho.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:p}=d||{},T=Ld.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:$P(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:p});else{let R=l.map((O,V)=>({type:$P(i),value:O,id:_?.[V],table:u}));for(;c;)R.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;T.send({type:"transaction",writes:R,table:u,timestamp:f,onCommit:E,user:h,nodeName:p})}kP.get(YP.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&y7(e.subject.split(".").slice(0,-1).join("."),O7.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){Kc.error(i)}e.ack()}a(M7,"messageProcessor");function $P(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a($P,"convertOperation")});var pT={};tt(pT,{disableNATS:()=>v7,setNATSReplicator:()=>ET,start:()=>P7});function P7(){Pd.default.get(vd.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&H7()}function v7(e=!0){nv=e}function H7(){if(nv)return;let e=xr(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];ET(n,r,i)}}TT((r,s)=>{ET(r.tableName,r.databaseName,r),s&&ov(r)}),!ev&&(ev=!0)}function ET(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 ht{static{a(this,"NATSReplicator")}put(o){let c;return s?.put&&(!s.put.reliesOnPrototype||s.prototype.put)&&(c=s.put(this[ae],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ae],record:o},c)}delete(){let o;return s?.delete&&(!s.delete.reliesOnPrototype||s.prototype.delete)&&(o=s.delete(this[ae],this.getContext())),n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ae]},o)}publish(o){let c;return s?.publish&&(!s.publish.reliesOnPrototype||s.prototype.publish)&&(c=s.publish(this[ae],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ae],record:o},c)}invalidate(o){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ae]})}static defineSchema(o){ov(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 Xr;return(0,tv.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<B7}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 Md(i.transaction,i)),o.user=i.user):o=iv),o}a(n,"getNATSTransaction")}function ov(e){let t=Pd.default.get(vd.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,hT.publishToStream)(`${mT.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,ST.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 hT,mT,ST,tv,rv,Pd,vd,sv,nv,B7,iv,ev,Md,fT,av=Se(()=>{de();Zr();hT=C(He()),mT=C(be()),ST=C(vs());aa();tv=C(jP()),rv=C(vt()),Pd=C(W()),vd=C(g()),sv=C(F());a(P7,"start");a(v7,"disableNATS");B7=2;a(H7,"assignReplicationSource");a(ET,"setNATSReplicator");a(ov,"publishSchema");Md=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=Pd.default.get(vd.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||(sv.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,hT.publishToStream)(`${mT.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,ST.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},fT=class extends Md{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,rv.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};iv=new fT});async function uv({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await RT.getResource(e,{});n=new AT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await RT.get(e);i&&i.delete()}n=new Hd(e,t)}return n}function gT(){return Bd++,Bd>65500&&(Bd=1),Bd}var cv,Wc,RT,Bd,Hd,AT,lv=Se(()=>{de();Ac();cv=C(vt()),Wc=C(F());Yn();RT=nt({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(uv,"getSession");Bd=1;a(gT,"getNextMessageId");Hd=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,l;if(c>-1?(u=n.slice(c),l=n.slice(0,c)):l=n,!l)throw new Error("No topic provided");let _=!1,d;if((l.endsWith("+")||l.endsWith("#"))&&(_=!0,l.endsWith("+")&&(d=!0),l=l.slice(0,l.length-1)),l.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(l.indexOf("#")>-1||l.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let E=this.subscriptions.find(O=>O.topic===n);E&&(E.end(),this.subscriptions.splice(this.subscriptions.indexOf(E),1));let f={search:u,user:this.user,startTime:o,omitCurrent:i,isCollection:_,shallowWildcard:d,url:""},h=Ln.getMatch(l);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);f.url=h.relativeURL;let p=h.path,T=h.Resource,R=await We(f,async()=>{let O=await T.subscribe(f);if(!O)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!O[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let V of O)try{let $;if(V.type&&V.type!=="put"&&V.type!=="delete"&&V.type!=="message"||s&&!s(V))continue;r?(V.topic=n,$=this.needsAcknowledge(V)):$=gT();let U=V.id;Array.isArray(U)&&(U=To(U)),U==null&&(U=""),this.listener(p+"/"+U,V.value,$,t)}catch($){(0,Wc.warn)($)}})(),O});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){return gT()}acknowledge(t){}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user;let i=Ln.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return We(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=[]}},AT=class extends Hd{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=gT();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,Wc.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,cv.getNextMonotonicTime)()),(0,Wc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),RT.put(this.sessionRecord)),t.qos}}});var bT={};tt(bT,{start:()=>F7});async function F7({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:_}=Ev(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,rn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;q7&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,fv.getSuperUser)());let{onMessage:u,onClose:l}=Ev(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,rn.info)("Socket error",_)})},{port:t,securePort:s})}function Ev(e,t,r,s,n){dv||(dv=!0,dm(_=>{_.push({metric:"mqtt-connections",connections:OT})})),OT++;let i,o={protocolVersion:4},c=(0,qd.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){OT--,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 st.auth(_.username,_.password.toString()),(0,NT.get)(sn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&_v.notify({username:s.username,status:sn.AUTH_AUDIT_STATUS.SUCCESS,type:sn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,NT.get)(sn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&_v.error({username:s.username,status:sn.AUTH_AUDIT_STATUS.FAILURE,type:sn.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=uv({user:s,..._}),i=await i}catch(O){return(0,rn.error)(O),d({cmd:"connack",reasonCode:O.code||128,returnCode:O.code||128})}d({cmd:"connack",sessionPresent:i.sessionWasPresent,reasonCode:0,returnCode:0}),i.setListener((O,V,$,U)=>{try{let b=O.indexOf("/",1),P=b>0?O.slice(0,b):O;d({cmd:"publish",topic:O,payload:E(V),messageId:$||Math.floor(Math.random()*1e8),qos:U.qos},P)}catch(b){(0,rn.error)(b),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let O of _.subscriptions){let V;try{V=(await i.addSubscription(O,O.qos>=1)).qos||0}catch($){(0,rn.error)($),V=128}f.push(V)}await i.committed,d({cmd:"suback",granted:f,messageId:_.messageId});break;case"unsubscribe":for(let O of _.unsubscriptions)i.removeSubscription(O);d({cmd:"unsuback",messageId:_.messageId});break;case"pubrel":d({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let h=_.qos===2?"pubrec":"puback",p=e.deserialize||(e.deserialize=Io(r?.headers["content-type"])),T=_.payload?.length>0?p(_.payload):void 0,R;try{R=await i.publish(_,T)}catch(O){console.warn(O),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:R===!1?144:0},_.topic);break;case"pubrec":d({cmd:"pubrel",messageId:_.messageId,reasonCode:0});break;case"pubcomp":case"puback":i.acknowledge(_.messageId);break;case"pingreq":d({cmd:"pingresp"});break;case"disconnect":i?.disconnect(),e.close?e.close():e.end();break}}catch(f){console.error(f),d({cmd:"disconnect"})}function d(f,h){let p=(0,qd.generate)(f,o);t(p),_s(p.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?Ws(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var qd,fv,NT,sn,rn,_v,q7,dv,OT,hv=Se(()=>{qd=require("mqtt-packet");lv();fv=C(br());Ao();ai();ts();NT=C(W()),sn=C(g()),rn=C(F()),_v=(0,rn.loggerWithTag)("auth-event"),q7=!0;a(F7,"start");OT=0;a(Ev,"onSocket")});var bv={};tt(bv,{loadComponent:()=>Fd,loadComponentDirectories:()=>Nv});function Nv(e,t){t&&(IT=t),e&&(wT=e);let r=[];if((0,gs.existsSync)(yT)){let n=(0,gs.readdirSync)(yT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Pr.join)(yT,o);r.push(Fd(c,IT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Fd(s,IT,s)),Promise.all(r).then(()=>{Ov=!0})}async function Fd(e,t,r,s,n){if(!Sv.has(e)){Sv.set(e,!0),n&&(wT=n);try{let i,o=(0,Pr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,gs.existsSync)(o)?i=(0,pv.parseDocument)((0,gs.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=V7;let c=[];for(let u in i){let l=i[u];if(!l)continue;let _,d=l.package;if(d){let E=e,f;for(;!(0,gs.existsSync)(f=(0,Pr.join)(E,"node_modules",u));)if(E=(0,Pr.dirname)(E),E.length<(0,Av.getHdbBasePath)().length){f=null;break}if(f)_=await Fd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=k7[u];if(_)try{c.push(_);let E=a(T=>(T.origin=r,nt(T)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,p=!f?.https&&f?.port;if(Qc.isMainThread&&(_=await _.startOnMainThread?.({server:st,ensureTable:E,port:p,securePort:h,resources:t,...l})||_,s&&f))for(let T of[p,h])try{if(+T&&!mv.includes(T)){mv.push(T);let R=CT.get(UT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);vP(T,R)}}catch(R){console.error("Error listening on socket",T,R,u)}if(t.isWorker&&(_=await _.start?.({server:st,ensureTable:E,port:p,securePort:h,resources:t,...l})||_),wT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,gv.handleHDBError)("Can not reference parent directories");let T=(0,Pr.join)(e,l.files);for(let R of await(0,Tv.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:V}=R,$=(0,Pr.relative)(e,O),U=(0,Pr.basename)(e),b=l.path||"/";b=b.startsWith("/")?b:b.startsWith("./")?"/"+U+b.slice(2):b==="."?"/"+U:"/"+U+"/"+b,b+=(b.endsWith("/")?"":"/")+$;try{if(V.isFile()){let P=await x7(O);Qc.isMainThread&&await _.setupFile?.(P,b,O,t),t.isWorker&&await _.handleFile?.(P,b,O,t)}else Qc.isMainThread&&await _.setupDirectory?.(b,O,t),t.isWorker&&await _.handleDirectory?.(b,O,t)}catch(P){console.error(`Could not load ${V.isFile()?"file":"directory"} ${O} using ${l.module} for application ${e}`,P),t.set(l.path||"/",new zc(P))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new zc(E),null,!0)}}if(Qc.isMainThread&&!Ov&&(0,Rv.watchDir)(e,async()=>Nv()),i.extensionModule)return await vu((0,Pr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new zc(i))}}}var gs,Pr,Qc,pv,CT,UT,Tv,Rv,gv,Av,G7,x7,yT,wT,Ov,IT,k7,V7,mv,Sv,zc,yv=Se(()=>{gs=require("fs"),Pr=require("path"),Qc=require("worker_threads"),pv=require("yaml"),CT=C(W()),UT=C(g());Lg();Bg();Hg();xL();yP();UP();Tv=C(require("fast-glob")),Rv=C(Ve());WE();ts();gv=C(Q());Zr();de();BP();Av=C(W()),G7=C(xP());q_();av();hv();({readFile:x7}=gs.promises),yT=CT.get(UT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),wT=new Map;a(Nv,"loadComponentDirectories");k7={REST:Ip,graphqlSchema:KE,jsResource:zE,fastifyRoutes:oT,login:XE,static:aT,operationsApi:G7,customFunctions:{},clustering:pT,authentication:Oc,mqtt:bT},V7={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},mv=[],Sv=new Map;a(Fd,"loadComponent");zc=class extends ht{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var Lv=m((iEe,Dv)=>{"use strict";var kd=require("fs-extra"),DT=require("path"),Gd=F(),Iv=k(),xd=g(),Uv=W(),$7=Nr();Dv.exports=Y7;async function Y7(){let e=K7(),t=Uv.get(xd.CONFIG_PARAMS.ROOTPATH),r=DT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+xd.PACKAGE_ROOT}},n=DT.join(t,"node_modules");await kd.ensureDir(n);let i,o=!0,c=!1;try{i=await kd.readJson(r)}catch(u){if(Iv.isEmptyOrZeroLength(e))return;if(u.code!==xd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!Iv.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await wv(l);s.dependencies[u]=_+l}if(!o){Gd.notify("Installing components"),await Cv(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await wv(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Gd.notify("Removing component",u),c=!0);c&&(Gd.notify("Updating components."),await Cv(r,s))}a(Y7,"installComponents");function K7(){let e=$7.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(K7,"getComponentsConfig");async function wv(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":DT.extname(e)||await kd.pathExists(e)?"file:":"github:"}a(wv,"getPkgPrefix");async function Cv(e,t){Gd.trace("npm installing components package.json",t),await kd.writeFile(e,JSON.stringify(t,null," ")),await K_().installAllRootModules(Uv.get(xd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(Cv,"installPackages")});var vv=m((aEe,Pv)=>{var{isMainThread:Mv}=require("worker_threads"),{getTables:W7}=(de(),re(Ne)),{loadComponentDirectories:Q7,loadComponent:z7}=(yv(),re(bv)),{resetResources:J7}=(Ac(),re(SD)),X7=Lv(),Z7=Nr(),{dirname:j7}=require("path"),{getConnection:eee}=He(),tee=W(),ree=g(),LT=new Map;async function see(e=!1){!Mv&&tee.get(ree.CONFIG_PARAMS.CLUSTERING_ENABLED)&&eee(),Mv&&await X7();let t=J7();W7(),t.isWorker=e,await z7(j7(Z7.getConfigFilePath()),t,"hdb",!0,LT),await Q7(LT,t);let r=[];for(let[s]of LT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(see,"loadRootComponents");Pv.exports.loadRootComponents=see});var Ve=m((lEe,qn)=>{"use strict";var{Worker:nee,MessageChannel:iee,parentPort:As,isMainThread:HT,threadId:oee,workerData:Jc}=require("worker_threads"),{PACKAGE_ROOT:aee}=g(),{join:qv,isAbsolute:cee,extname:$d}=require("path"),{server:uee}=(ts(),re(Pu)),{watch:lee,readdir:_ee}=require("fs/promises"),{totalmem:Bv}=require("os"),qT=g(),yi=F(),uEe=g(),{randomBytes:dee}=require("crypto"),Eee=1024*1024,Hn=[],Bn=[],fee=50,Fv=1e4,hee="restart",Gv="request_thread_info",xv="resource_report",kv="thread_info",Vv="added-port",mee="ack",MT;qn.exports={startWorker:PT,restartWorkers:FT,shutdownWorkers:Ree,workers:Hn,setMonitorListener:wee,onMessageFromWorkers:gee,onMessageByType:Aee,broadcast:Oee,broadcastWithAcknowledgement:bee,setChildListenerByType:Tee,getWorkerIndex:Yv,getTicketKeys:Kv,setMainIsWorker:See,restartNumber:Jc?.restartNumber||1};var $v;function Yv(){return Jc?Jc.workerIndex:$v?0:void 0}a(Yv,"getWorkerIndex");function See(e){$v=e}a(See,"setMainIsWorker");var Vd;function Kv(){return Vd||(Vd=HT?dee(48):Jc.ticketKeys,Vd)}a(Kv,"getTicketKeys");Object.defineProperty(uee,"workerIndex",{get(){return Yv()}});var Wv={[Gv](e,t){yee(t)},[xv](e,t){Iee(t,e)}};function PT(e,t={}){let r=process.constrainedMemory?.()||Bv();r=Math.min(r,Bv());let s=Math.max(Math.floor(r/Eee/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Bn){let{port1:u,port2:l}=new iee;c.postMessage({type:Vv,port:u},[u]),i.push(l)}$d(e)||(e+=".js");let o=new nee(cee(e)?e:qv(aee,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:i,workerIndex:t.workerIndex,name:t.name,restartNumber:qn.exports.restartNumber,ticketKeys:Kv()},transferList:i},t));return Kd(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{PT(e,t)},o.on("error",c=>{console.error("Worker error:",c),yi.error("Worker error:",c)}),o.on("exit",c=>{Hn.splice(Hn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<fee?(t.unexpectedRestarts=o.unexpectedRestarts+1,PT(e,t)):yi.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{Wv[c.type]?.(c,o)}),Hn.push(o),Uee(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(PT,"startWorker");var pee=[qT.THREAD_TYPES.HTTP];async function FT(e=null,t=2,r=!0){if(HT){if(r){let{loadRootComponents:n}=vv();await n()}qn.exports.restartNumber++,t<1&&(t=t*Hn.length);let s=[];for(let n of Hn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:qn.exports.restartNumber,type:qT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=pee.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),Fv*2).unref();n.on("exit",()=>{clearTimeout(u),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else As.postMessage({type:hee,workerType:e})}a(FT,"restartWorkers");function Tee(e,t){Wv[e]=t}a(Tee,"setChildListenerByType");function Ree(e){return FT(e,1/0,!1)}a(Ree,"shutdownWorkers");var Qv=[];function gee(e){Qv.push(e)}a(gee,"onMessageFromWorkers");var vT=new Map;function Aee(e,t){let r=vT.get(e);r||vT.set(e,r=[]),r.push(t)}a(Aee,"onMessageByType");function Oee(e){for(let t of Bn)try{t.postMessage(e)}catch(r){yi.error("Unable to send message to worker",r)}}a(Oee,"broadcast");var Yd=new Map,Nee=1;function bee(e){return new Promise(t=>{let r=0;for(let s of Bn)try{let n=Nee++,i=a(()=>{Yd.delete(n),--r===0&&t(),s!==As&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Yd.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Yd)o.port===s&&o()})),s.postMessage(e),r++}catch(n){yi.error("Unable to send message to worker",n)}r===0&&t()})}a(bee,"broadcastWithAcknowledgement");function yee(e){e.postMessage({type:kv,workers:zv()})}a(yee,"sendThreadInfo");function zv(){let e=Date.now();return Hn.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(zv,"getChildWorkerInfo");function Iee(e,t){e.resources=t,e.resources.updated=Date.now()}a(Iee,"recordResourceReport");var BT;function wee(e){BT=e}a(wee,"setMonitorListener");var Cee=1e3,Hv=!1;function Uee(){Hv||(Hv=!0,setInterval(()=>{for(let e of Hn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}BT&&BT()},Cee).unref())}a(Uee,"startMonitoring");var Dee=1e3;if(As){Kd(As);for(let e of Jc.addPorts)Kd(e);setInterval(()=>{let e=process.memoryUsage();As.postMessage({type:xv,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Dee).unref(),MT=a(()=>new Promise((e,t)=>{As.on("message",r),As.postMessage({type:Gv});function r(s){s.type===kv&&(As.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else MT=zv;qn.exports.getThreadInfo=MT;function Kd(e,t){Bn.push(e),e.on("message",r=>{if(r.type===Vv)Kd(r.port);else if(r.type===mee){let s=Yd.get(r.id);s&&s()}else{for(let n of Qv)n(r,e);let s=vT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){yi.error(i)}}}).on("close",()=>{Bn.splice(Bn.indexOf(e),1)}).on("exit",()=>{Bn.splice(Bn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Kd,"addPort");if(HT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await _ee(s,{withFileTypes:!0}))i.isDirectory()&&r(qv(s,i.name));for await(let{filename:i}of lee(s,{persistent:!1}))($d(i)===".ts"||$d(i)===".js"||$d(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await FT(),yi.info("Reloaded HarperDB components")},100))},"watch_dir");qn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else As.on("message",async e=>{let{type:t}=e;t===qT.ITC_EVENT_TYPES.SHUTDOWN&&(qn.exports.restartNumber=e.restartNumber,As.unref(),setTimeout(()=>{yi.warn("Thread did not voluntarily terminate",oee),process.exit(0)},Fv).unref())})});function $T(e){let t=e.auditStore=e.openDB(eB.AUDIT_STORE_NAME,Mee);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,rB.getWorkerIndex)()===0&&e.on("aftercommit",()=>{xT||(xT=setTimeout(()=>{if(xT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-Jv,0]})){if((n[0]&15)===VT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},Jv/10).unref())}),t}function zd(e,t,r){let s=iB[r.type],n=3;if(t?t.length>80?(s|=Wd,n=(0,nn.writeKey)(t,Os,e?14:6),GT.setUint16(2,n)):(n=(0,nn.writeKey)(t,Os,e?11:3),Os[1]=n):Os[1]=0,e){s|=nB;let i=s&Wd?6:3;GT.setFloat64(i,e),t||(n=i+8)}return Os[0]=s,s&Wd?GT.setUint16(4,0):Os[2]=0,r.value?Buffer.concat([Os.slice(0,n),r.value]):Os.subarray(0,n)}function Fn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Wd,i=n?6:3,o;r&nB&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&kT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:iB[r&7],value:u,lastVersion:o,get user(){return c?(0,nn.readKey)(e,i,c):void 0}}}var nn,Qd,eB,tB,rB,sB,Os,GT,Lee,Mee,Jv,xT,kT,Xv,VT,Zv,jv,Wd,nB,iB,Xc=Se(()=>{nn=require("ordered-binary"),Qd=C(W()),eB=C(ke()),tB=C(g()),rB=C(Ve()),sB=C(k());(0,Qd.initSync)();Os=Buffer.alloc(1024),GT=new DataView(Os.buffer,Os.byteOffset,1024),Lee={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,nn.writeKey)(e[2],t,r+12)}else return(0,nn.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,nn.readKey)(e,t+12,r)]}else return(0,nn.readKey)(e,t,r)}},Mee={encoding:"binary",keyEncoder:Lee},Jv=(0,sB.convertToMS)((0,Qd.get)(tB.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,xT=null;a($T,"openAuditStore");kT=16,Xv=1,VT=2,Zv=3,jv=4,Wd=128,nB=64,iB={put:Xv|kT,[Xv]:"put",delete:VT,[VT]:"delete",message:Zv|kT,[Zv]:"message",invalidate:jv,[jv]:"invalidate"};a(zd,"createAuditEntry");a(Fn,"readAuditEntry")});var YT,Ii,Pee,Zc,Jd,oB=Se(()=>{YT=C(vt());Xc();Ii=Symbol("completion"),Pee=100,Zc=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,YT.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[Ii]&&(i||(i=[]),i.push(d[Ii])),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,zd(_.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<Pee>>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=[]}},Jd=class extends Zc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,YT.getNextMonotonicTime)())}getReadTxn(){}}});function lB(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Fo||((0,wi.onMessageByType)(cB,d=>{let E=d.auditIds;WT(d.path,E,d.txnId)}),(0,wi.onMessageByType)(uB,d=>{(0,Ns.trace)("confirming to proceed with txn",d.txnId)}),Fo=Object.create(null));let c=Fo[i]||(Fo[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=To(t);let l=new KT(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 WT(e,t,r,s){if(!Fo)return;let n=Fo[e];if(n){if(qo&&qo+1!==r){(0,Ns.trace)("Waiting to ensure latest txn id",qo,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Xd)o<r&&((0,Ns.trace)("Txn",r,"waiting for txn",o),await c);if(qo+1!==r){await(0,wi.broadcastWithAcknowledgement)({type:uB,txnId:r});for(let[o,c]of Xd)o<r&&((0,Ns.trace)("Txn",r,"waiting for txn",o),await c)}Xd.delete(r),(0,Ns.trace)("Proceeding with txn id",r),qo=r-1,WT(e,t,r,s)})();return Xd.set(r,i),i}(0,Ns.trace)("Notifying with txn id",r,s),qo=r;try{n.auditStore.resetReadTxn()}catch(i){throw i.message+=" in "+e,i}e:for(let i of t){let[o,c,u]=i,l=n[c];if(!l)continue;(0,aB.writeKey)(i,Bee,0);let _=i[3];_&&(i.length=3);let d,E=To(u),f;do{let h=l.get(E);if(h){for(let T of h)if(!(f&&!T.includeDescendants)){if(T.startTime>=o){(0,Ns.info)("omitting",u,T.startTime,o);continue}try{if(T.crossThreads===!1&&!s)continue;if(d===void 0){let R=n.auditStore.get(i);if(!R||(d=Fn(R,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}T.listener(u,d,o)}catch(R){console.error(R),(0,Ns.info)(R)}}}if(E==null)break;let p=E.lastIndexOf?.("/",E.length-2);p>-1?E=E.slice(0,p+1):E=null,f=!0}while(!0)}}}function _B(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&vee)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,wi.broadcast)({type:cB,path:n,auditIds:l,txnId:c,start:u}),WT(n,l,c,!0))})}}var Ns,wi,aB,cB,uB,vee,Fo,Bee,KT,qo,Xd,dB=Se(()=>{Ns=C(F()),wi=C(Ve()),aB=require("ordered-binary");aa();Ac();Xc();cB="transaction",uB="transaction-await",vee=67108864,Bee=Buffer.alloc(4096);a(lB,"addSubscription");KT=class extends Xr{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"}}},Xd=new Map;a(WT,"notifyFromTransactionData");a(_B,"listenToCommits")});var Vp={};tt(Vp,{coerceType:()=>Zd,makeTable:()=>eE,setServerUtilities:()=>xee});function eE(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=[]),_B(i,u);let p=0,T,R,O,V={},$,U,b,P;for(let Z of h)(Z.assignCreatedTime||Z.name==="__createdtime__")&&($=Z),(Z.assignUpdatedTime||Z.name==="__updatedtime__")&&(U=Z),Z.expiresAt&&(b=Z),Z.isPrimaryKey&&(V=Z);let z;E&&ER();class q extends ht{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=h;static expirationTimer;static createdTimeProperty=$;static updatedTimeProperty=U;static dbisDB=_;static schemaDefined=l;static sourcedFrom(S,N){if(N&&(this.sourceOptions=N,N.expiration&&this.setTTLExpiration(N.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(S,this.sourceOptions);else if(S.mergeSource)this.Source=S.mergeSource(this.Source,this.sourceOptions);else throw new Error("Can not assign multiple sources to a table with no source providing a (static) mergeSource method");else this.Source=S;return R=S&&S.get&&(!S.get.reliesOnPrototype||S.prototype.get),(async()=>{let D=!1,y=a(async w=>{let v=w.value,G=w.table?Be[c][w.table]:q;if(c===zr.SYSTEM_SCHEMA_NAME&&(w.table===zr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||w.table===zr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),w.id===void 0&&(w.id=v[G.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));let L=await G.getResource(w.id,w,jc);switch(w.type){case"put":return L._writeUpdate(v,jc);case"delete":return L._writeDelete(jc);case"publish":return L._writePublish(v,jc);case"invalidate":return L.invalidate(jc);default:Di.error("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=S.subscribe&&(!S.subscribe.reliesOnPrototype||S.prototype.subscribe);w&&f==null&&(f=!0);let v=S.subscribeOnThisThread?S.subscribeOnThisThread((0,Ui.getWorkerIndex)()):(0,Ui.getWorkerIndex)()===0,G=w&&v&&await S.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(G)for await(let L of G)try{if(!(L.type==="transaction"?L.writes[0]:L)){console.error("Bad subscription event");continue}let X=We(L,()=>{if(L.type==="transaction"){let J=[];for(let Y of L.writes){Y[Ae]=L;try{J.push(y(Y))}catch(j){throw j.message+=" writing "+JSON.stringify(Y)+" of event "+JSON.stringify(L),j}}return Promise.all(J)}else if(L.type==="define_schema"){let J=this.attributes.slice(0),Y;for(let j of L.attributes)J.find(Me=>Me.name===j.name)||(J.push(j),Y=!0);Y&&(nt({table:n,database:c,attributes:J,origin:"cluster"}),ru.signalSchemaChange(new su.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(L)});L.onCommit&&(X?.then&&D&&ru.signalUserChange(new su.UserEventMsg(process.pid)),X?.then?X.then(L.onCommit):L.onCommit())}catch(x){console.error("error in subscription handler",x)}}catch(w){console.error(w)}})(),this}static getResource(S,N,D){let y=super.getResource(S,N,D);if(S!=null)try{if(y.hasOwnProperty(ce))return y;let w=y._txnForRequest();if(typeof S=="object"&&S&&!Array.isArray(S))throw new Error(`Invalid id ${JSON.stringify(S)}`);let v,G,x={transaction:w?.getReadTxn()},X;return _u(S,N,x,y,D?.allowInvalidated,(J,Y)=>{Y?G(Y):(y[ce]=J?.value,y[Zt]=J?.version,X=!0,v?.(y))}),X?y:new Promise((J,Y)=>{v=J,G=Y})}catch(w){throw w.message.includes("Unable to serialize object")&&(w.message+=": "+JSON.stringify(S)),w}return y}static setTTLExpiration(S){(0,Ui.getWorkerIndex)()===0&&(d=S*1e3,this.expirationTimer&&clearInterval(this.expirationTimer),this.expirationTimer=setInterval(()=>{if(this.primaryStore.rootStore.status!=="open")return clearInterval(this.expirationTimer);for(let{key:N,value:D,version:y}of this.primaryStore.getRange({start:!1,versions:!0}))y<Date.now()-d&&y>0&&D?.__invalidated__==null&&q.evict(N,D,y)},d).unref())}static enableAuditing(){E=!0,ER(),q.audit=!0}static coerceId(S){return S===""?null:Zd(S,V)}static async dropTable(){if(delete Be[c][n],c===o){for(let S in r)_.remove(q.tableName+"/"+S),r[S].drop();_.remove(q.tableName+"/"),i.drop(),await _.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));ru.signalSchemaChange(new su.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.DROP_TABLE,c,n))}static Source;static get(S,N){return S&&typeof S=="object"&&!Array.isArray(S)&&S.url===""?{recordCount:this.getRecordCount(),records:"./",name:n,database:c,attributes:h}:super.get(S,N)}get(S){if(typeof S=="string")return this.getProperty(S);if(this[Ds])return this.search(S);if(S?.property)return this.getProperty(S.property);if(this.doesExist()||this[Ae]?.hasOwnProperty("returnNonexistent")&&this[Ae].returnNonexistent)return this}static allowRead(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.read){let y=D[n].attribute_permissions;if(y){N||(N={});let w=N.select;if(w){let v=QT(y,"read");N.select=w.filter(G=>v[G])}else N.select=y.filter(v=>v.read).map(v=>v.attribute_name);return N}else return!0}}allowUpdate(S,N,D){if(!S)return!1;let y=S.role.permission;if(y.super_user)return!0;if(y[n]?.update){let w=y[n].attribute_permissions;if(w){let v=QT(w,"update");for(let G in N)if(!v[G])return!1;if(D)for(let G of w){let L=G.attribute_name;!G.update&&!(L in N)&&(N[L]=this.getProperty(L))}}else return!0}}allowCreate(S,N){return this.allowUpdate(S,{})}static allowCreate(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.insert){let y=D[n].attribute_permissions;if(y){let w=QT(y,"insert");for(let v in N)if(!w[v])return!1}else return!0}}static allowDelete(S){if(!S)return!1;let N=S.role.permission;if(N.super_user||N[n]?.delete)return!0}update(S,N){if(!this._txnForRequest())throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;let y;if(typeof S=="object"&&S){if(N)for(let w in this[ce])S[w]===void 0&&(S[w]=void 0);y=this[ft],y&&(S=Object.assign(y,S)),this[ft]=y=S}return!this[ce]&&t&&!(y||(y=this[ft]))?.[t]&&(y||(y=this[ft]=Object.create(null)),y[t]=this[ae]),this._writeUpdate(this),this}invalidate(S){this._txnForRequest().addWrite({key:this[ae],store:i,invalidated:!0,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,commit:(D,y)=>{if(y)return;let w={__invalidated__:D};for(let x in r)w[x]=this.getProperty(x);let v=q.Source,G,L=this[ae];return S?.isNotification||v?.shouldReceiveInvalidations&&(G=v.invalidate(L,this)),i.put(this[ae],w,D),{type:E&&"invalidate",[Ii]:G}}})}static evict(S,N,D){let y=this.Source;if(y?.get&&(!y.get.reliesOnPrototype||y.prototype.get)){let w;if(!N){let v=i.getEntry(S);if(!v)return;N=v.value,D=v.version}if(N)for(let v in r)w||(w={__invalidated__:0}),w[v]=N[v];return w?i.put(S,w,D,D):i.remove(S,D)}else return i.remove(S,D)}lock(){throw new Error("Not yet implemented")}static operation(S,N){return S.table||=n,S.schema||=c,gB.operation(S,N)}async put(S){this.update(S,!0)}_writeUpdate(S,N){let D=this._txnForRequest();if(this[ae]===void 0)throw new Error("Can not save record without an id");let y=this[ce],w,v,G=this[ae];y||(this[ce]={}),D.addWrite({key:G,store:i,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(L,x)=>{let X;if(x){if(w)return;let Y=i.getEntry(G);y=Y?.value;let j=this[Ae];j&&Y?.version>(j.lastModified||0)&&(j.lastModified=Y.version)}if(!v){if(v=!0,N?.isNotification)S=ua(S);else{if(S[hB]&&(w=!yu(S),w))return;t&&S[t]!==G&&(S[t]=G),U&&(S[U.name]=U.type==="Date"?new Date(L):U.type==="String"?new Date(L).toISOString():L),$&&(y?S[$.name]=y[$.name]:S[$.name]=$.type==="Date"?new Date(L):$.type==="String"?new Date(L).toISOString():L),S=ua(S);let Y=q.Source;Y?.put&&(!Y.put.reliesOnPrototype||Y.prototype.put)&&(X=Y.put(G,S,this))}if(S[ce])throw new Error("Can not assign a record with a record property");this[ce]=S}if(Di.trace("Checking timestamp for put",G,this[Zt]>L,this[Zt],L),this[Zt]>L)return E&&{type:"put",value:i.encoder.encode(S)};let J=i.encoder.encode(S);return i.put(this[ae],(0,Go.asBinary)(J),L),et(this[ae],y,S),y===null&&!x&&kn(-1),{type:E&&"put",value:J,[Ii]:X}}})}async delete(S){return typeof S=="string"?this.deleteProperty(S):this[ce]?this._writeDelete(S):!1}_writeDelete(S){let N=this._txnForRequest(),D,y=this[ae],w;return N.addWrite({key:y,store:i,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,commit:(v,G)=>{let L=this[ce];if(G){let x=i.getEntry(y);L=x?.value;let X=this[Ae];X&&x?.version>(X.lastModified||0)&&(X.lastModified=x.version)}if(!D&&(D=!0,!S?.isNotification)){let x=q.Source;x?.delete&&(!x.delete.reliesOnPrototype||x.prototype.delete)&&(w=x.delete(y,this))}if(!(this[Zt]>v))return et(this[ae],L),Di.trace("Write delete entry",E||f,v),E||f?(i.put(this[ae],null,v),E||dR(),G||kn(1)):i.remove(this[ae]),{type:E&&"delete",[Ii]:w}}}),!0}search(S){let N=this._txnForRequest();if(!S)throw new Error("No query provided");let D=S.reverse===!0,y=S.conditions;y?y.length===void 0&&(y=Array.from(y)):y=Array.isArray(S)?S:S[Symbol.iterator]?Array.from(S):[],this[ae]&&(y=[{attribute:null,comparator:"prefix",value:this[ae]}].concat(y));for(let Y of y){let j=Y[0]??Y.attribute,Me=j==null?V:h.find(cn=>cn.name==j);if(Me)Me.type&&(Y[1]===void 0?Y.value=w(Y.value,Me):Y[1]=w(Y[1],Me));else if(j!=null)throw(0,Ci.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function w(Y,j){return Array.isArray(Y)?Y.map(Me=>Zd(Me,j)):Zd(Y,j)}a(w,"coerceTypedValues"),y.length>1&&(y=(0,TB.sortBy)(y,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===eu.SEARCH_TYPES.EQUALS){let Me=Y[0]??Y.attribute;if(Me==null||Me===t)Y.estimated_count=1;else{let cn=r[Me];Y.estimated_count=cn?cn.getValuesCount(Y[1]??Y.value):1/0}}else j===eu.SEARCH_TYPES.CONTAINS||j===eu.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===eu.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=qee:Y.estimated_count=Hee}return Y.estimated_count}));let v=N.getReadTxn();v.use();let G=S.select,L=y[0],x;if(!L)x=i.getRange(D?{end:!1,reverse:!0,transaction:v,lazy:G?.length<4}:{start:!1,transaction:v,lazy:G?.length<4}).map(({value:Y})=>Y?new Promise(j=>setImmediate(()=>j(Y))):Go.SKIP);else{let Y=FE(L,v,D,q,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=y.slice(1).map(GE);x=J(Y,j)}else{for(let Me=1;Me<y.length;Me++){let cn=y[Me],mE=FE(cn,v,D,q,S.allowFullScan);Y=Y.concat(mE)}let j=new Set;Y=Y.filter(Me=>j.has(Me)?!1:(j.add(Me),!0)),x=J(Y)}}(S.offset||S.limit!==void 0)&&(x=x.slice(S.offset,S.limit!==void 0?(S.offset||0)+S.limit:void 0)),x.onDone=()=>{v.done()};let X=this[Ae];function J(Y,j){let Me=j?.length,cn={transaction:v,lazy:Me>0||G?.length<4,alwaysPrefetch:!0};return Y.map(mE=>new Promise(SE=>_u(mE,X,cn,null,!1,SH=>{let pE=SH?.value;if(!pE)return SE(Go.SKIP);for(let TE=0;TE<Me;TE++)if(!j[TE](pE))return SE(Go.SKIP);SE(pE)})))}return a(J,"idsToRecords"),x}async subscribe(S){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||nt({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=lB(q,this[ae]??null,function(v,G,L){try{this.send({id:v,timestamp:L,...G})}catch(x){console.error(x)}},S.startTime,this[Ds]),D=this[ae],y=S.previousCount;y>1e3&&(y=1e3);let w=S.startTime;if(this[Ds]){if(w){if(y)throw new Ci.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:v,value:G}of u.getRange({start:[w,Number.MAX_SAFE_INTEGER]})){let[L,x,X]=v;if(v.length>3&&(X=v.slice(2)),x!==s)continue;let J=Fn(G,i);(D==null||pB(D,X))&&N.send({id:X,timestamp:L,...J}),N.startTime=L}}else if(y){let v=[];for(let{key:G,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[x,X,J]=G;if(G.length>3&&(J=G.slice(2)),X!==s)continue;if(D==null||pB(D,J)){let Y=Fn(L,i);if(v.push({id:J,timestamp:x,...Y}),--y<=0)break}}catch(x){Di.error("Error getting history entry",G,x)}for(let G=v.length;G>0;)N.send(v[--G]);v[0]&&(N.startTime=v[0].timestamp)}else if(!S.omitCurrent)for(let{key:v,value:G,version:L}of i.getRange({start:D??!1,end:D==null?void 0:[D,RB.MAXIMUM_KEY],versions:!0}))G&&N.send({id:v,timestamp:L,value:G})}else{y&&!w&&(w=0);let v=this[Zt];if(w<v){let G=[],L=v;do{let x=[L,s,D],X=u.get(x);if(X){S.omitCurrent=!0;let J=Fn(X,i);G.push({id:D,timestamp:L,...J}),L=J.lastVersion}else break;y&&y--}while(L>w&&y!==0);for(let x=G.length;x>0;)N.send(G[--x]);N.startTime=v}!S.omitCurrent&&this.doesExist()&&N.send({id:D,timestamp:this[Zt],value:this})}return S.listener&&N.on("data",S.listener),N}doesExist(){return!!this[ce]}async publish(S,N){this._writePublish(S,N)}_writePublish(S,N){let D=this._txnForRequest(),y=this[ae]||null,w,v;D.addWrite({store:i,key:y,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(G,L)=>{if(this.validate(S),!v&&(v=!0,!N?.isNotification)){let J=q.Source;J?.publish&&(!J.publish.reliesOnPrototype||J.prototype.publish)&&(w=J.publish(y,S,this))}let x=L>0?i.get(y):this[ce];x===void 0&&!L&&(E||f)&&(E||dR(),kn(1));let X={type:"message",value:i.encoder.encode(S),[Ii]:w};return!D.hasWrittenTime&&this[Zt]>G&&(G=X.newTxnTime=this[Zt]+.001),i.put(y,x??null,G),X}})}_txnForRequest(){let S=this[Ae],N=S?.transaction;if(N){let D;return(D=N?.find(y=>y.lmdbDb?.path===i.path))||N.push(D=new Zc(i,S.user,u)),D}else return new Jd(i,S.user,u)}validate(S){let N;for(let D=0,y=h.length;D<y;D++){let w=h[D];if(w.type){let v=S[w.name];if(v!=null)switch(w.type){case"Int":case"Float":(typeof v!="number"||w.type==="Int"&&v!==Math.floor(v))&&(N||(N=[])).push(`Property ${w.name} must be an ${w.type==="Int"?"integer":"number"}`);break;case"ID":typeof v=="string"||v?.length>0&&v.every?.(G=>typeof G=="string")||(N||(N=[])).push(`Property ${w.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof v!="string"&&(N||(N=[])).push(`Property ${w.name} must be a string`)}}w.required&&S[w.name]==null&&(N||(N=[])).push(`Property ${w.name} is required`)}if(N)throw new Ci.ClientError(N.join(". "))}getUpdatedTime(){return this[Zt]}wasLoadedFromSource(){return R?!!this[mB]:void 0}static async addAttributes(S){let N=h.slice(0);for(let D of S){if(!D.name)throw new Ci.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Ci.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return nt({table:n,database:c,schemaDefined:l,attributes:N}),q.indexingOperation}static async removeAttributes(S){let N=h.filter(D=>!S.includes(D.name));return nt({table:n,database:c,schemaDefined:l,attributes:N}),q.indexingOperation}static getRecordCount(){let S=0;for(let{key:N,value:D}of i.getRange({end:!1}))S++,N[0]?.description==="deletions"&&(S+=D||0);return i.getStats().entryCount-S}static updatedAttributes(){wu(this,this)}static async deleteHistory(S=0){let N;for(let{key:D,value:y}of u.getRange({start:[0,0],end:[S,0]})){await new Promise(L=>setImmediate(L));let[w,v,G]=D;D.length>3&&(G=D.slice(2)),v===s&&(N=i.remove(G))}await N}static async*getHistory(S=0,N=1/0){for(let{key:D,value:y}of u.getRange({start:[S,0],end:[N,0]})){await new Promise(x=>setImmediate(x));let[w,v,G]=D;if(D.length>3&&(G=D.slice(2)),v!==s)continue;let L=Fn(y,i);L.id=G,L.timestamp=w,yield L}}static async getHistoryOfRecord(S){let N=[],D=i.getEntry(S);if(!D)return N;let y=D.version,w=0;do{await new Promise(L=>setImmediate(L));let v=[y,s,S],G=u.get(v);if(G){let L=Fn(G,i);L.timestamp=y,N.push(L),y=L.lastVersion}else break}while(w<1e3);return N.reverse()}static cleanup(){z?.remove()}}q.updatedAttributes();let Oe=q.prototype;return Oe[hB]=!0,d&&q.setTTLExpiration(d/1e3),b&&mH(),q;function et(Z,S,N){let D;for(let y in r){let w=r[y],v=w.isIndexing,G=N?.[y],L=S?.[y];if(G===L&&!v)continue;D=!0;let x=(0,tu.getIndexedValues)(L);if(x){EB&&w.prefetch(x.map(X=>({key:X,value:Z})),SB);for(let X=0,J=x.length;X<J;X++)w.remove(x[X],Z)}if(x=(0,tu.getIndexedValues)(G),x){EB&&w.prefetch(x.map(X=>({key:X,value:Z})),SB);for(let X=0,J=x.length;X<J;X++)w.put(x[X],Z)}}return D}a(et,"updateIndices");function _u(Z,S,N,D,y,w){let v=a(()=>{let G=N.transaction;if(G?.isDone)throw new Error("Invalid read transaction");let L;G&&!G.hasRunLoadRecord&&(L=!0,G.hasRunLoadRecord=!0);let x;try{x=i.getEntry(Z,N)}catch(j){throw j.message+=". The read txn is "+JSON.stringify(G)+" first loadRecord: "+L,console.error(j),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),j}let X,J,Y;if(x?(S&&x?.version>(S.lastModified||0)&&(S.lastModified=x.version),J=x.version,X=x.value,(J<0||!X||typeof X.__invalidated__=="number"||d&&J<Date.now()-d)&&(Y=!0)):Y=!0,R&&so(Y,"cache-hit",n),Y&&!y&&(D&&(D[mB]=!0),R))return Ko(Z,X,J,S).then(j=>{if(j?.value?.[ce])throw new Error("Can not assign a record with a record property");S&&j?.version>(S.lastModified||0)&&(S.lastModified=j.version),w(j)},j=>{w(null,j)});if(x?.value?.[ce])throw new Error("Can not assign a record with a record property");w(x)},"whenPrefetched");if(!N.alwaysPrefetch&&(Z==null||i.cache?.get(Z)))return v();i.prefetch([Z],v)}a(_u,"loadRecord");function Pi(){P=new Set,(0,Ui.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let S of P)S()}a(Z,"onCommit")}a(Pi,"setupCommitListeners");async function Ko(Z,S=null,N,D){if(N<0){let L;return P||Pi(),await new Promise(x=>{let X,J=a(()=>{if(L=i.getEntry(Z),!L||L.version>0){if(clearTimeout(X),P.delete(J),typeof L?.value?.__invalidated__=="number")return x(Ko(Z,L.value,L.version,D));x(L)}},"listener");P.add(J),X=setTimeout(()=>{P.delete(J),x(Ko(Z,L?.value,void 0,D))},1e4).unref()})}let y=S?.__invalidated__,w=-(N||1);i.put(Z,S,w,N);let v={transaction:D?.transaction,replacingRecord:S,replacingVersion:N},G=D?.responseHeaders;G&&(v.responseHeaders=G);try{let L=performance.now(),x=await q.Source.get(Z,v),X=performance.now()-L;_s(X,"cache-resolution",n),G&&G.append("Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`);let J=v.lastModified||N;(!J||d&&J<Date.now()-d)&&(J=(0,tu.getNextMonotonicTime)());let j=et(Z,S,x)&&N||y>0;return x?(t&&(x[t]=Z),typeof x.toJSON=="function"&&(x=x.toJSON()),i.put(Z,x,J,w)):i.remove(Z,w),j&&E&&u.put([J,s,Z],zd(y,null,x?{type:"put",value:i.encoder.encode(x)}:{type:"delete"})),{version:J,value:x}}catch(L){throw i.put(Z,S,N,w),L}}a(Ko,"getFromSource");function kn(Z){p||(p=i.get([fB,zT.threadId])||0),p+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([fB,zT.threadId],p)},50))}a(kn,"recordDeletion");function dR(){T||(T=setTimeout(()=>{if(T=null,i.rootStore.status==="open"){for(let{key:Z,value:S}of i.getRange({start:!0}))if(S===null){let N=i.getEntry(Z);N?.value===null&&i.remove(Z,N.version),kn(-1)}}},q.getRecordCount()*100+Gee).unref())}a(dR,"enqueueDeletionCleanup");function ER(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),kn(-1)})}a(ER,"addDeleteRemoval");function mH(){(0,Ui.getWorkerIndex)()===0&&setInterval(async()=>{try{let Z=b.name,S=r[Z];if(!S)throw new Error(`expiresAt attribute ${b} must be indexed`);for(let{value:N}of S.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let D=i.getEntry(N);D?.value?.[Z]<Date.now()&&q.evict(N,D.value,D.version),await new Promise(y=>setImmediate(y))}}catch(Z){Di.error("Error in evicting old records",Z)}},Fee).unref()}a(mH,"runRecordExpirationEviction")}function QT(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function SB(){}function xee(e){gB=e}function Zd(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!kee.test(e)&&(e+="Z"),new Date(e)):r?e:(0,jd.autoCast)(e)}function pB(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}var zr,Go,tu,TB,zT,eu,nu,Ci,ru,su,Di,RB,Ui,jd,gB,Hee,qee,Fee,EB,fB,Zt,hB,MEe,mB,jc,Gee,kee,md=Se(()=>{zr=C(g()),Go=require("lmdb"),tu=C(vt()),TB=require("lodash"),zT=require("worker_threads");Zr();oB();eu=C(ke()),nu=C(W());dB();Ci=C(Q()),ru=C(xs()),su=C(Fr());de();Lu();Di=C(F());Uu();Yn();RB=require("ordered-binary"),Ui=C(Ve());Xc();jd=C(k());ai();Hee=1e8,qee=1e7,Fee=6e4;nu.initSync();EB=nu.get(zr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),fB=Symbol.for("deletions"),Zt=Symbol.for("version"),hB=Symbol.for("incremental-update"),MEe=Symbol("source-resource"),mB=Symbol("load-from-source"),jc={isNotification:!0,allowInvalidated:!0},Gee=(0,jd.convertToMS)(nu.get(zr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(eE,"makeTable");a(QT,"attributesAsObject");a(SB,"noop");a(xee,"setServerUtilities");kee=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Zd,"coerceType");a(pB,"isDescendantId")});var Ne={};tt(Ne,{database:()=>Fa,databases:()=>Be,dropDatabase:()=>Zh,dropTableMeta:()=>Qee,getDatabases:()=>xr,getTables:()=>Vee,onUpdatedTable:()=>TT,readMetaDb:()=>iu,resetDatabases:()=>$ee,table:()=>nt,tables:()=>sr});function Vee(){return nE||xr(),sr||{}}function xr(){if(nE)return Be;nE=!0,$o=new Map;let e=(0,yt.getHdbBasePath)()&&(0,ve.join)((0,yt.getHdbBasePath)(),jt.DATABASES_DIR_NAME),t=(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,yt.get)(jt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,hr.existsSync)(e)?e:(0,ve.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,hr.existsSync)(e))for(let r of(0,hr.readdirSync)(e,{withFileTypes:!0})){let s=(0,ve.basename)(r.name,".mdb");r.isFile()&&(0,ve.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&iu((0,ve.join)(e,r.name),null,s)}if((0,hr.existsSync)((0,Vo.getBaseSchemaPath)())){for(let r of(0,hr.readdirSync)((0,Vo.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,ve.join)((0,Vo.getBaseSchemaPath)(),r.name),n=(0,ve.join)((0,Vo.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,hr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,ve.extname)(i.name).toLowerCase()===".mdb"){let o=(0,ve.join)(n,i.name);iu((0,ve.join)(s,i.name),(0,ve.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,hr.existsSync)(n))for(let o of(0,hr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,ve.extname)(o.name).toLowerCase()===".mdb"&&iu((0,ve.join)(n,o.name),(0,ve.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,ve.join)(c.path,(0,ve.basename)(o+".mdb"));(0,hr.existsSync)(u)&&iu(u,o,r,null,!0)}}for(let r in Be){let s=$o.get(r);if(s){let n=Be[r];r.includes("delete")&&Pe.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Pe.trace(`delete table class ${i}`),delete n[i])}else if(delete Be[r],r==="data"){for(let n in sr)delete sr[n];delete sr[iE]}}return $o=null,Be}}function $ee(){nE=!1;for(let[,e]of Gn)e.needsDeletion=!0;xr();for(let[e,t]of Gn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),Gn.delete(e));return Be}function iu(e,t,r=ZT,s,n){let i=new JT.default(e,!1);e.includes("delete")&&Pe.trace(`reading meta data from ${e}`);try{let o=Gn.get(e);o?o.needsDeletion=!1:(o=(0,tE.open)(i),Gn.set(e,o));let c=new Li.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(xo.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,hr.existsSync)(s)&&(i.path=s,l=(0,tE.open)(i),l.isLegacy=!0):l=$T(o));let _=bB(r),d=_[iE],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[p,T]=f.toString().split("/");e.includes("delete")&&Pe.trace(`read key ${f}`),T===""?T=h.name:T||(T=p,p=t,h.name||(h.name=T,h.indexed=!h.is_hash_attribute)),d?.add(p);let R=E.get(p);R||E.set(p,R={attributes:[]}),(T==null||h.is_hash_attribute)&&(R.primary=h),T!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:p,primary:T}=h;if(!T){for(let q of p)if(q.is_hash_attribute||q.isPrimaryKey){T=q;break}if(!T)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(p)}`)}let R=_[f],O={},V=[],$,U,b=typeof T.audit=="boolean"?T.audit:(0,yt.get)(jt.CONFIG_PARAMS.LOGGING_AUDITLOG),P=T.trackDeletes,z=T.expiration;if(R)O=R.indices,V=R.attributes,R.schemaVersion++;else{$=T.tableId,$?$>=(u.get(ko)||0)&&u.putSync(ko,$+1):(T.tableId=$=u.get(ko),$||($=1),u.putSync(ko,$+1),u.putSync(T.key,T));let q=new Li.default(!T.is_hash_attribute,T.is_hash_attribute);Pe.trace(`openDB ${T.key} from ${r}`),U=o.openDB(T.key,q),U.rootStore=o,U.tableId=$}for(let q of p){q.attribute=q.name;try{if(!q.is_hash_attribute&&(q.indexed||q.attribute&&!q.name)){if(!O[q.name]){let et=new Li.default(!q.is_hash_attribute,q.is_hash_attribute);Pe.trace(`openDB ${q.key} from ${r}`),O[q.name]=o.openDB(q.key,et)}let Oe=V.find(et=>et.name===q.name);Oe?V.splice(V.indexOf(Oe),1,q):V.push(q)}}catch(Oe){Pe.error("Error trying to update attribute",q,V,O,Oe)}}if(!R){Pe.trace(`creating table class ${f}`,Object.keys(_)),R=yB(_,f,eE({primaryStore:U,auditStore:l,audit:b,expirationMS:z&&z*1e3,trackDeletes:P,tableName:f,tableId:$,primaryKey:T.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:O,attributes:p,schemaDefined:T.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let q of jT)q(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function bB(e){let t=Be[e];if(t||(e==="data"?t=Be[e]=sr:e==="system"?Object.defineProperty(Be,"system",{value:t=Object.create(null),configurable:!0}):t=Be[e]=Object.create(null)),$o&&!$o.has(e)){let r=new Set;t[iE]=r,$o.set(e,r)}return t}function yB(e,t,r){return e[t]=r,r}function Fa({database:e,table:t}){e||(e=ZT),xr();let r=bB(e),s=(0,ve.join)((0,yt.getHdbBasePath)(),jt.DATABASES_DIR_NAME),n=t&&(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,yt.get)(jt.CONFIG_PARAMS.STORAGE_PATH)||((0,hr.existsSync)(s)?s:(0,ve.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME));let i=(0,ve.join)(s,(n?t:e)+".mdb"),o=Gn.get(i);if(!o){let c=new JT.default(i,!1);o=(0,tE.open)(c),Gn.set(i,o)}return o}async function Zh(e){if(!Be[e])throw new Error("Schema does not exist");let t=Be[e];for(let r in t){let n=t[r].primaryStore.rootStore;Gn.delete(n.path),n.status==="open"&&(await n.close(),await AB.remove(n.path))}if(e==="data"){for(let r in sr)delete sr[r];delete sr[iE]}delete Be[e]}function nt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=ZT);let u=Fa({database:t,table:e}),l=Be[t],_=l?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let d,E,f,h;o==null&&(o=!0);let p=new Li.default(!1);for(let U of s)U.attribute?(U.name=U.attribute,U.indexed=!0):U.attribute=U.name,U.expiresAt&&(U.indexed=!0);let T,R;if(_){if(Pe.trace(`${e} table already exists`),d=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);_.attributes.splice(0,_.attributes.length,...s)}else{let U=u.auditStore;U||(U=$T(u)),E=s.find(q=>q.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,yt.get)(jt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),Pe.trace(`${e} table loading, opening primary store`);let b=new Li.default(!1,!0),P=e+"/";Pe.trace(`openDB ${P} from ${t}`);let z=u.openDB(P,b);z.rootStore=u,Pe.trace(`openDB ${xo.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(xo.INTERNAL_DBIS_NAME,p),z.tableId=h.get(ko),z.tableId||(z.tableId=1),h.putSync(ko,z.tableId+1),E.tableId=z.tableId,_=yB(l,e,eE({primaryStore:z,auditStore:U,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:o,dbisDB:h})),_.schemaVersion=1,T=!0,$(),h.put(P,E)}Pe.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Pe.trace(`openDB ${xo.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(xo.INTERNAL_DBIS_NAME,p)),_.dbisDB=h;let O=[];for(let{key:U,value:b}of h.getRange({start:!0})){let[P,z]=U.toString().split("/");if(z===""&&(z=b.name),z){if(P!==e)continue}else z=P;if(!s.find(Oe=>Oe.name===z)?.indexed&&b.indexed&&!b.isPrimaryKey){$(),T=!0,h.remove(U);let Oe=_.indices[P];Oe&&O.push(Oe)}}Pe.trace(`${e} table loading, comparing atributes`);let V=[];try{for(let U of s||[]){let b=e+"/"+(U.name||"");Object.defineProperty(U,"key",{value:b,configurable:!0});let P=h.get(b);if(U.isPrimaryKey){if(n===!0&&!_.audit){_.enableAuditing(),P||(b=e+"/",P=h.get(b));let q=Object.assign({},P,{audit:!0});T=!0,$(),h.put(b,q)}continue}P?.attribute&&!P.name&&(P.indexed=!0);let z=!P||P.type!==U.type||P.indexed!==U.indexed||JSON.stringify(P.attributes)!==JSON.stringify(U.attributes)||JSON.stringify(P.elements)!==JSON.stringify(U.elements);if(U.indexed){let q=new Li.default(!0,!1);Pe.trace(`openDB ${b} from ${t}`);let Oe=u.openDB(b,q);(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<ou.workerData?.restartNumber)&&(T=!0,$(),P=h.get(b),(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<ou.workerData?.restartNumber)&&(T=!0,U.lastIndexedKey=P?.lastIndexedKey||!1,U.indexingPID=process.pid,Oe.isIndexing=!0,Object.defineProperty(U,"dbi",{value:Oe}),V.push(U)),h.put(b,U)),f[U.name]=Oe}else z&&(T=!0,$(),h.put(b,U))}}finally{R&&R()}if(T&&(_.schemaVersion++,_.updatedAttributes()),Pe.trace(`${e} table loading, running index`),V.length>0||O.length>0?_.indexingOperation=Wee(_,V,O):T&&rE.signalSchemaChange(new sE.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,T)for(let U of jT)U(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Pe.trace(`${e} table loaded`),_;function $(){R||u.transactionSync(()=>({then(U){R=U}}))}a($,"startTxn")}async function Wee(e,t,r){try{let s=e.schemaVersion;await rE.signalSchemaChange(new sE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:l,value:_,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(_){if(u++,n=e.primaryStore.ifVersion(l,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,p=(0,OB.getIndexedValues)(_[h]);if(p)for(let T=0,R=p.length;T<R;T++)f.dbi.put(p[T],l)}}),n.then(()=>u--,E=>{u--,Pe.error(E)}),ou.workerData&&ou.workerData.restartNumber!==NB.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>Yee?await n:u>Kee&&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 rE.signalSchemaChange(new sE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Pe.error("Error in indexing",s)}}function Qee({table:e,database:t}){let r=Fa({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function TT(e){jT.push(e)}var yt,xo,tE,ve,hr,Vo,Li,JT,jt,AB,XT,OB,rE,sE,ou,Pe,NB,ZT,iE,sr,Be,ko,jT,nE,Gn,$o,Yee,Kee,de=Se(()=>{yt=C(W()),xo=C(ke()),tE=require("lmdb"),ve=require("path"),hr=require("fs"),Vo=C(Ce());md();Li=C(Hu()),JT=C(Fu()),jt=C(g()),AB=C(require("fs-extra")),XT=require("../index"),OB=C(vt()),rE=C(xs()),sE=C(Fr()),ou=require("worker_threads"),Pe=C(F()),NB=C(Ve());Xc();ZT="data",iE=Symbol("defined-tables");(0,yt.initSync)();sr=Object.create(null),Be=Object.create(null);(0,XT._assignPackageExport)("databases",Be);(0,XT._assignPackageExport)("tables",sr);ko=Symbol.for("next-table-id"),jT=[],Gn=new Map;a(Vee,"getTables");a(xr,"getDatabases");a($ee,"resetDatabases");a(iu,"readMetaDb");a(bB,"ensureDB");a(yB,"setTable");a(Fa,"database");a(Zh,"dropDatabase");a(nt,"table");Yee=1e3,Kee=10;a(Wee,"runIndexing");a(Qee,"dropTableMeta");a(TT,"onUpdatedTable")});var k=m((kEe,GB)=>{"use strict";var xn=require("path"),DB=require("fs-extra"),er=F(),IB=require("fs-extra"),oE=require("os"),zee=require("net"),Jee=require("recursive-iterator"),xe=g(),Xee=KR(),wB=require("papaparse"),aE=require("moment"),{inspect:Zee}=require("util"),CB=require("is-number"),xEe=require("lodash"),jee=require("minimist"),ete=require("https"),tte=require("http"),{hdb_errors:cE}=Q(),rte=/^((\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)))$/,LB=require("util").promisify(setTimeout),ste=100,nte=5,ite="",ote=4,UB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};GB.exports={isEmpty:mr,isEmptyOrZeroLength:bs,arrayHasEmptyValues:ute,arrayHasEmptyOrZeroLengthValues:lte,buildFolderPath:_te,isBoolean:MB,errorizeMessage:ate,stripFileExtension:Ete,autoCast:fte,autoCastJSON:PB,autoCastJSONDeep:tR,removeDir:hte,compareVersions:mte,isCompatibleDataVersion:Ste,escapeRawValue:pte,unescapeValue:Tte,stringifyProps:Rte,timeoutPromise:Ate,isClusterOperation:Nte,getClusterUser:yte,checkGlobalSchemaTable:bte,getHomeDir:BB,getPropsFilePath:gte,promisifyPapaParse:Ite,removeBOM:HB,createEventPromise:wte,checkProcessRunning:Cte,checkSchemaTableExist:Ute,checkSchemaExists:qB,checkTableExists:FB,getStartOfTomorrowInSeconds:Dte,getLimitKey:Lte,isObject:dte,isNotEmptyAndHasValue:cte,autoCasterIsNumberCheck:vB,backtickASTSchemaItems:Mte,isPortTaken:Ote,createForkArgs:Pte,autoCastBoolean:vte,async_set_timeout:LB,getTableHashAttribute:Bte,doesSchemaExist:Hte,doesTableExist:qte,stringifyObj:Fte,ms_to_time:Gte,changeExtension:xte,getEnvCliRootPath:rR,noBootFile:kte,httpRequest:Vte,transformReq:$te,convertToMS:Yte,PACKAGE_ROOT:xe.PACKAGE_ROOT};function ate(e){return e instanceof Error?e:new Error(e)}a(ate,"errorizeMessage");function mr(e){return e==null}a(mr,"isEmpty");function cte(e){return!mr(e)&&(e||e===0||e===""||MB(e))}a(cte,"isNotEmptyAndHasValue");function bs(e){return mr(e)||e.length===0||e.size===0}a(bs,"isEmptyOrZeroLength");function ute(e){if(mr(e))return!0;for(let t=0;t<e.length;t++)if(mr(e[t]))return!0;return!1}a(ute,"arrayHasEmptyValues");function lte(e){if(bs(e))return!0;for(let t=0;t<e.length;t++)if(bs(e[t]))return!0;return!1}a(lte,"arrayHasEmptyOrZeroLengthValues");function _te(...e){try{return e.join(xn.sep)}catch{console.error(e)}}a(_te,"buildFolderPath");function MB(e){return mr(e)?!1:e===!0||e===!1}a(MB,"isBoolean");function dte(e){return mr(e)?!1:typeof e=="object"}a(dte,"isObject");function Ete(e){return bs(e)?ite:e.slice(0,-ote)}a(Ete,"stripFileExtension");function fte(e){return mr(e)||e===""||typeof e!="string"?e:UB[e]!==void 0?UB[e]:vB(e)===!0?Number(e):rte.test(e)?new Date(e):e}a(fte,"autoCast");function PB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(PB,"autoCastJSON");function tR(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=tR(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=tR(r);s!==r&&(e[t]=s)}return e}else return PB(e)}a(tR,"autoCastJSONDeep");function vB(e){if(e.startsWith("0.")&&CB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&CB(e))}a(vB,"autoCasterIsNumberCheck");async function hte(e){if(bs(e))throw new Error(`Directory path: ${e} does not exist`);try{await IB.emptyDir(e),await IB.remove(e)}catch(t){throw er.error(`Error removing files in ${e} -- ${t}`),t}}a(hte,"removeDir");function mte(e,t){if(bs(e)){er.info("Invalid current version sent as parameter.");return}if(bs(t)){er.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let l=0;l<u;l++)if(r=parseInt(o[l],10)-parseInt(c[l],10),r)return r;return o.length-c.length}a(mte,"compareVersions");function Ste(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Ste,"isCompatibleDataVersion");function pte(e){if(mr(e))return e;let t=String(e);return t==="."?xe.UNICODE_PERIOD:t===".."?xe.UNICODE_PERIOD+xe.UNICODE_PERIOD:t.replace(xe.FORWARD_SLASH_REGEX,xe.UNICODE_FORWARD_SLASH)}a(pte,"escapeRawValue");function Tte(e){if(mr(e))return e;let t=String(e);return t===xe.UNICODE_PERIOD?".":t===xe.UNICODE_PERIOD+xe.UNICODE_PERIOD?"..":String(e).replace(xe.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Tte,"unescapeValue");function Rte(e,t){if(mr(e))return er.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+oE.EOL}!bs(s)&&s[0]===";"?r+=" "+s+n+oE.EOL:bs(s)||(r+=s+"="+n+oE.EOL)}catch{er.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Rte,"stringifyProps");function BB(){let e;try{e=oE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(BB,"getHomeDir");function gte(){let e=xn.join(BB(),xe.HDB_HOME_DIR_NAME,xe.BOOT_PROPS_FILE_NAME);return DB.existsSync(e)||(e=xn.join(__dirname,"../","hdb_boot_properties.file")),e}a(gte,"getPropsFilePath");function Ate(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Ate,"timeoutPromise");async function Ote(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=zee.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Ote,"isPortTaken");function Nte(e){try{return xe.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){er.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Nte,"isClusterOperation");function bte(e,t){let r=(de(),re(Ne)).getDatabases();if(!r[e])return cE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return cE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(bte,"checkGlobalSchemaTable");function yte(e,t){if(mr(t)){er.warn("No CLUSTERING_USER defined, clustering disabled");return}if(mr(e)||bs(e)){er.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){er.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){er.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(yte,"getClusterUser");function Ite(){wB.parsePromise=function(e,t,r){return new Promise(function(s,n){wB.parse(e,{header:!0,transformHeader:HB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Ite,"promisifyPapaParse");function HB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(HB,"removeBOM");function wte(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;er.info(`Got cluster status event response: ${Zee(n)}`);try{i.cancel()}catch{er.error("Error trying to cancel timeout.")}s(n)})})}a(wte,"createEventPromise");async function Cte(e){let t=!0,r=0;do await LB(ste*r++),(await Xee.findPs(e)).length>0&&(t=!1);while(t&&r<nte);if(t)throw new Error(`process ${e} was not started`)}a(Cte,"checkProcessRunning");function Ute(e,t){let r=qB(e);if(r)return r;let s=FB(e,t);if(s)return s}a(Ute,"checkSchemaTableExist");function qB(e){let{getDatabases:t}=(de(),re(Ne));if(!t()[e])return cE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(qB,"checkSchemaExists");function FB(e,t){let{getDatabases:r}=(de(),re(Ne));if(!r()[e][t])return cE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(FB,"checkTableExists");function Dte(){let e=aE().utc().add(1,xe.MOMENT_DAYS_TAG).startOf(xe.MOMENT_DAYS_TAG).unix(),t=aE().utc().unix();return e-t}a(Dte,"getStartOfTomorrowInSeconds");function Lte(){return aE().utc().format("DD-MM-YYYY")}a(Lte,"getLimitKey");function Mte(e){try{let t=new Jee(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){er.error("Got an error back ticking items."),er.error(t)}}a(Mte,"backtickASTSchemaItems");function Pte(e){return[e]}a(Pte,"createForkArgs");function vte(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(vte,"autoCastBoolean");function Bte(e,t){let{getDatabases:r}=(de(),re(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Bte,"getTableHashAttribute");function Hte(e){let{getDatabases:t}=(de(),re(Ne));return t()[e]!==void 0}a(Hte,"doesSchemaExist");function qte(e,t){let{getDatabases:r}=(de(),re(Ne));return r()[e]?.[t]!==void 0}a(qte,"doesTableExist");function Fte(e){try{return JSON.stringify(e)}catch{return e}}a(Fte,"stringifyObj");function Gte(e){let t=aE.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(Gte,"ms_to_time");function xte(e,t){let r=xn.basename(e,xn.extname(e));return xn.join(xn.dirname(e),r+t)}a(xte,"changeExtension");function rR(){if(process.env[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=jee(process.argv);if(e[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(rR,"getEnvCliRootPath");var eR;function kte(){if(eR)return eR;let e=rR();rR()&&DB.pathExistsSync(xn.join(e,xe.HDB_CONFIG_FILE))&&(eR=!0)}a(kte,"noBootFile");function Vte(e,t){let r;return e.protocol==="http:"?r=tte:r=ete,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(Vte,"httpRequest");function $te(e){if(!e.schema&&!e.database){e.schema=xe.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a($te,"transformReq");function Yte(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(Yte,"convertToMS")});var W=m(($Ee,VB)=>{"use strict";var sR=require("fs-extra"),Jr=require("path"),xB=require("os"),Kte=require("properties-reader"),au=F(),Mi=k(),te=g(),uE=Nr(),Wte="Error initializing environment manager",lE="BOOT_PROPS_FILE_PATH",kB=!1,Qte={[te.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},on={};VB.exports={BOOT_PROPS_FILE_PATH:lE,getHdbBasePath:zte,setHdbBasePath:Jte,get:Xte,initSync:jte,setProperty:Ee,initTestEnvironment:ere};function zte(){return on[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(zte,"getHdbBasePath");function Jte(e){on[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Jte,"setHdbBasePath");function Xte(e){let t=uE.getConfigValue(e);return t===void 0?on[e]:t}a(Xte,"get");function Ee(e,t){Qte[e]&&(on[e]=t),uE.updateConfigObject(e,t)}a(Ee,"setProperty");function Zte(){let e;try{e=Mi.getPropsFilePath(),sR.accessSync(e,sR.constants.F_OK|sR.constants.R_OK),kB=!0;let t=Kte(e);return on[te.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(te.HDB_SETTINGS_NAMES.INSTALL_USER),on[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),on[lE]=e,!0}catch{return au.trace(`Environment manager found no properties file at ${e}`),!1}}a(Zte,"doesPropFileExist");function jte(e=!1){try{(kB||Zte()||Mi.noBootFile())&&(uE.initConfig(e),on[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=uE.getConfigValue(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){au.error(Wte),au.error(t),console.error(t),process.exit(1)}}a(jte,"initSync");function ere(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=Jr.join(__dirname,"../../","unitTests");on[lE]=Jr.join(u,"hdb_boot_properties.file"),Ee(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Jr.join(u,"settings.test")),Ee(te.HDB_SETTINGS_NAMES.INSTALL_USER,xB.userInfo()?xB.userInfo().username:void 0),Ee(te.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Jr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.HDB_SETTINGS_NAMES.CERT_KEY,Jr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Jr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Jr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ee(te.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Jr.join(u,"envDir","log")),Ee(te.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ee(te.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ee(te.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ee(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Jr.join(u,"envDir")),Ee(te.CONFIG_PARAMS.STORAGE_PATH,Jr.join(u,"envDir")),Ee(te.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Mi.isEmpty(n)?!0:n),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Mi.isEmpty(n)?!0:n),Ee(te.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(te.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Mi.isEmpty(i)?!1:i),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Mi.isEmpty(i)?!1:i),Ee(te.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ee(te.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Jr.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ee(te.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Mi.isEmpty(c)?!1:c),o&&(Ee("CORS_ACCESSLIST",o),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${lE}. Please check your boot props and settings files`;au.fatal(r),au.error(t)}}a(ere,"initTestEnvironment")});var QB=m((KEe,WB)=>{"use strict";var KB=require("joi"),{string:cu,boolean:$B,array:tre}=KB.types(),YB=g(),rre=Ue();WB.exports=sre;function sre(e){let t=KB.object({operation:cu.valid(YB.OPERATIONS_ENUM.ADD_NODE,YB.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:cu.required(),subscriptions:tre.items({schema:cu.required(),table:cu.optional(),hash_attribute:cu.optional(),subscribe:$B.required(),publish:$B.required()}).min(1).required()});return rre.validateBySchema(e,t)}a(sre,"updateRemoteSourceValidator")});var uu=m((QEe,zB)=>{"use strict";var nR=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,s=void 0){this.status=t,this.message=r,this.system_info=s}};zB.exports=nR});var eH=m((JEe,jB)=>{"use strict";var nre=QB(),an=F(),iR=be(),ire=g(),oR=wr(),JB=He(),XB=Za(),ore=yl(),{Node:are,NodeSubscription:ZB}=wn(),aR=uu(),cR=k(),cre=W(),{cloneDeep:ure}=require("lodash"),{broadcast:lre}=Ve();jB.exports=_re;async function _re(e){try{let t=nre(e);if(t)return an.error(`Validation error in updateRemoteSource: ${t.message}`),new aR(iR.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:s,system_info:n}=e,i=[],o=ure(await oR.getNodeRecord(s)),c=!cR.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&an.trace(`Existing record found for ${s}, updating records subscriptions`);for(let l=0,_=r.length;l<_;l++){let d=r[l],E=d.schema,f=d.table;if(!cR.doesSchemaExist(E)){an.trace(`updateRemoteSource creating schema: ${E}`);try{await XB.createSchema({operation:"create_schema",schema:E})}catch(h){an.error(h)}}if(f&&!cR.doesTableExist(E,f)){let h=new ore(E,f,d.hash_attribute);d.attributes&&(h.attributes=d.attributes),an.trace(`updateRemoteSource creating table: ${f} in schema: ${E} with attributes: ${JSON.stringify(d.attributes)}`);try{await XB.createTable(h)}catch(p){an.error(p)}an.trace(`Creating local stream for ${E}.${f}`),await JB.createLocalTableStream(E,f)}if(await JB.updateWorkStream(d,s),c){let h=!1;for(let p=0,T=o.subscriptions.length;p<T;p++){let R=o.subscriptions[p];if(R.schema===E&&R.table===f){R.publish=d.publish,R.subscribe=d.subscribe,h=!0;break}}h||o.subscriptions.push(new ZB(E,f,d.publish,d.subscribe))}else i.push(new ZB(E,f,d.publish,d.subscribe))}c||(o=new are(s,i,void 0),an.trace(`No record found for ${s}, creating a new one`));let u=Object.create({});return Object.assign(u,o),u.system_info=n,await oR.upsertNodeRecord(u),lre({type:"nats_update"}),new aR(iR.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${cre.get(ire.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await oR.getSystemInfo())}catch(t){an.error(t);let r=t.message?t.message:t;return new aR(iR.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(_re,"updateRemoteSource")});var nH=m((ZEe,sH)=>{"use strict";var rH=require("joi"),{string:tH}=rH.types(),dre=g(),Ere=Ue();sH.exports=fre;function fre(e){let t=rH.object({operation:tH.valid(dre.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:tH.required()});return Ere.validateBySchema(e,t)}a(fre,"removeRemoteSourceValidator")});var oH=m((efe,iH)=>{"use strict";var hre=nH(),_E=F(),dE=be(),uR=g(),mre=wr(),Sre=k(),pre=He(),Tre=W(),EE=uu(),{NodeSubscription:Rre}=wn(),gre=eo(),Are=mn(),{broadcast:Ore}=Ve(),Nre=Tre.get(uR.CONFIG_PARAMS.CLUSTERING_NODENAME);iH.exports=bre;async function bre(e){try{let t=hre(e);if(t)return _E.error(`Validation error in removeRemoteSource: ${t.message}`),new EE(dE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,s=await mre.getNodeRecord(r);if(Sre.isEmptyOrZeroLength(s)){let i=`No record found for node '${r}'`;return _E.error(i),new EE(dE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}s=s[0];for(let i=0,o=s.subscriptions.length;i<o;i++){let c=s.subscriptions[i];_E.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let u=new Rre(c.schema,c.table,!1,!1);await pre.updateWorkStream(u,r)}let n=new gre(uR.SYSTEM_SCHEMA_NAME,uR.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Are.deleteRecord(n),Ore({type:"nats_update"}),new EE(dE.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${Nre} successfully removed node '${r}'.`)}catch(t){_E.error(t);let r=t.message?t.message:t;return new EE(dE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(bre,"removeRemoteSource")});var _H=m((rfe,lH)=>{"use strict";var fE=F(),hE=g(),aH=be(),cH=W(),yre=k(),uH=uu(),Ire=wr(),wre=e_(),Cre=ir();lH.exports=Ure;async function Ure(e){try{fE.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=yre.ms_to_time(t),s=new Dre(cH.get(hE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),cH.get(hE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT),r,await Ire.getSystemInfo());try{let n={name:e.node_name,system_info:e.system_info},i=new wre(hE.SYSTEM_SCHEMA_NAME,hE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[n]);await Cre.update(i)}catch(n){fE.error("Get remote config encountered an error updating system info for node:",e.node_name,n)}return fE.trace("getRemoteSourceConfig response:",s),new uH(aH.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,s)}catch(t){fE.error(t);let r=t.message?t.message:t;return new uH(aH.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Ure,"getRemoteSourceConfig");function Dre(e,t,r,s){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=s}a(Dre,"ConfigResponseObject")});var hH=m((nfe,fH)=>{"use strict";var dH=W();dH.initSync();var EH=He(),lu=F(),Yo=g(),lR=be(),Lre=eH(),Mre=oH(),Pre=_H(),vre=uu(),{encode:Bre,decode:Hre}=require("msgpackr"),qre=Bs(),Fre=En(),Gre=require("util"),xre=g(),{isMainThread:kre,parentPort:Vre}=require("worker_threads");Ve();var $re=Gre.promisify(qre.setSchemaDataToGlobal),_R=dH.get(Yo.CONFIG_PARAMS.CLUSTERING_NODENAME);fH.exports=Yre;async function Yre(){try{lu.notify("Starting reply service."),await $re();let e=await EH.getConnection(),t=`${_R}.__request__`,r=e.subscribe(t,{queue:_R});await Kre(r)}catch(e){lu.error(e)}}a(Yre,"initialize");async function Kre(e){for await(let t of e){let r=Hre(t.data),s;switch(r.operation){case Yo.OPERATIONS_ENUM.ADD_NODE:case Yo.OPERATIONS_ENUM.UPDATE_NODE:s=await Lre(r);break;case Yo.OPERATIONS_ENUM.REMOVE_NODE:s=await Mre(r);break;case Yo.OPERATIONS_ENUM.CLUSTER_STATUS:s=await Pre(r);break;case Yo.OPERATIONS_ENUM.DESCRIBE_ALL:s=await Wre();break;default:let n=`node '${_R}' reply service received unrecognized request operation`;lu.error(n),s=new vre(lR.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,n)}lu.trace(s),t.respond(Bre(s))}}a(Kre,"handleRequest");async function Wre(){try{return{status:lR.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await Fre.describeAll()}}catch(e){return lu.error(e),{status:lR.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(Wre,"getRemoteDescribeAll");kre||Vre.on("message",async e=>{let{type:t}=e;t===xre.ITC_EVENT_TYPES.SHUTDOWN&&EH.closeConnection()})});var Qre=hH();(async()=>{try{await Qre()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|