harperdb 4.3.29 → 4.3.31
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 +24 -24
- package/bin/lite.js +18 -18
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +18 -18
- package/launchServiceScripts/launchNatsReplyService.js +18 -18
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +18 -18
- package/npm-shrinkwrap.json +12 -12
- package/package.json +1 -1
- package/resources/Table.d.ts +1 -0
- package/resources/databases.d.ts +1 -0
- package/server/jobs/jobProcess.js +18 -18
- package/server/threads/threadServer.js +18 -18
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.2bfc8c33.js → main.9edb81b4.js} +2 -2
- package/utility/scripts/restartHdb.js +18 -18
- /package/studio/build-local/static/js/{main.2bfc8c33.js.LICENSE.txt → main.9edb81b4.js.LICENSE.txt} +0 -0
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
"use strict";var xq=Object.create;var fc=Object.defineProperty;var Hq=Object.getOwnPropertyDescriptor;var Gq=Object.getOwnPropertyNames;var qq=Object.getPrototypeOf,Fq=Object.prototype.hasOwnProperty;var a=(e,t)=>fc(e,"name",{value:t,configurable:!0});var Re=(e,t)=>()=>(e&&(t=e(e=0)),t);var g=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Fe=(e,t)=>{for(var r in t)fc(e,r,{get:t[r],enumerable:!0})},EO=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Gq(t))!Fq.call(e,s)&&s!==r&&fc(e,s,{get:()=>t[s],enumerable:!(n=Hq(t,s))||n.enumerable});return e};var H=(e,t,r)=>(r=e!=null?xq(qq(e)):{},EO(t||!e||!e.__esModule?fc(r,"default",{value:e,enumerable:!0}):r,e)),ie=e=>EO(fc({},"__esModule",{value:!0}),e);var pO=g((cce,mO)=>{var kq=require("fast-glob"),{statSync:Uh,existsSync:vh,readFileSync:Vq,writeFileSync:$q}=require("fs"),{spawnSync:Yq,spawn:Kq,execFileSync:ace}=require("child_process"),{isMainThread:Wq}=require("worker_threads"),{join:ei,relative:hO}=require("path"),{PACKAGE_ROOT:Nn}=P(),{tmpdir:Qq,platform:zq}=require("os");require("source-map-support").install();var Jq=["resources","server","dataLayer","components"],Ec="ts-build",Bh,Xq=__filename.endsWith("tsBuild.js");if(Xq){if(Wq){let r;try{Uh(ei(Nn,Ec)),r=!0}catch{}if(r)for(let n of kq.sync(Jq.map(s=>s+"/**/*.ts"),{cwd:Nn})){let s=0,i=0;try{s=Uh(ei(Nn,n)).mtimeMs-5e3,i=Uh(ei(Nn,Ec,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),Bh=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),Bh=!0;if(Bh){let n=ei(Nn,"node_modules/.bin/tsc");zq()==="win32"&&(n+=".cmd");let s=Yq(n,{cwd:Nn});if(s.stdout?.length&&console.log(s.stdout.toString()),s.stderr?.length&&console.log(s.stderr.toString()),r){let i=ei(Qq(),"harperdb-tsc.pid"),o;if(vh(i))try{process.kill(+Vq(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=Kq(n,["--watch"],{cwd:Nn,detached:!0,stdio:"ignore"});$q(i,c.pid.toString()),c.unref()}}}}let e=mO.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Nn)&&!n[0].includes("node_modules")){let i=hO(Nn,n[0]),o;i.startsWith(Ec)?o=ei(Nn,hO(Ec,i)):o=ei(Nn,Ec,i);let c=ei(o,r),u=c+".js";if(vh(u))return u;if(c.includes(".")&&vh(c))return c}return t(r,n,s)}}});var P=g((_ce,LO)=>{"use strict";var an=require("path"),jq=require("fs"),{relative:uce,join:lce}=an,{existsSync:Zq}=jq;function eF(){let e=__dirname;for(;!Zq(an.join(e,"package.json"));){let t=an.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(eF,"getHDBPackageRoot");var ti=eF(),SO="js",u_=SO,tF="harperdb-config.yaml",rF="defaultConfig.yaml",nF="hdb",TO=`harperdb.${u_}`,gO=`customFunctionsServer.${u_}`,sF=`restartHdb.${u_}`,Hh="HarperDB",c_="Custom Functions",l_="Clustering Hub",__="Clustering Leaf",iF="Clustering Ingest Service",oF="Clustering Reply Service",aF="foreground.pid",cF="hdb.pid",uF="data",lF={HDB:Hh,CLUSTERING_HUB:l_,CLUSTERING_LEAF:__,CLUSTERING_INGEST_SERVICE:iF,CLUSTERING_REPLY_SERVICE:oF,CUSTOM_FUNCTIONS:c_,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"},_F={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},dF={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},fF={harperdb:Hh,"clustering hub":l_,"clustering leaf":__,"custom functions":c_,custom_functions:c_,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},EF={CLUSTERING_HUB_PROC_DESCRIPTOR:l_,CLUSTERING_LEAF_PROC_DESCRIPTOR:__},xh={HDB:an.join(ti,"server/harperdb"),CUSTOM_FUNCTIONS:an.join(ti,"server/customFunctions"),CLUSTERING_HUB:an.join(ti,"server/nats"),CLUSTERING_LEAF:an.join(ti,"server/nats")},hF={HDB:an.join(xh.HDB,TO),CUSTOM_FUNCTIONS:an.join(xh.CUSTOM_FUNCTIONS,gO)},mF={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:an.join(ti,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:an.join(ti,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:an.join(ti,"launchServiceScripts/launchUpdateNodes4-0-0.js")},pF={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},RO="support@harperdb.io",SF="customer-success@harperdb.io",AO=1,TF=4141,OO="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",gF="https://www.harperdb.io/product",RF=`For support, please submit a request at ${OO} or contact ${RO}`,bO=`For license support, please contact ${SF}`,AF="None of the specified records were found.",OF="hash attribute not found",bF=`Your current license only supports ${AO} role. ${bO}`,yF="Your current license only supports 3 connections to a node.",NF="127.0.0.1",IF=1,wF=/^\.$/,CF=/^\.\.$/,DF="U+002E",LF=/\//g,MF="U+002F",PF=/U\+002F/g,UF=/^U\+002E$/,vF=/^U\+002EU\+002E$/,BF="d",xF=999999,HF="*",GF="--max-old-space-size=",qF="system",FF="__hdb_hash",kF=".harperdb",VF=".hdb",$F="keys",YF="hdb_boot_properties.file",KF=".updateConfig.json",WF="SIGTSTP",QF=24,zF=6e4,JF=448,XF="blob",jF="trash",ZF="database",ek="schema",tk="transactions",rk=".count",nk="id",sk="PROCESS_NAME",yO={SETTINGS_PATH_KEY:"settings_path"},NO=require("lodash"),ik={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",OPERATIONSAPI_NETWORK_SECUREPORT:"OPERATIONSAPI_NETWORK_SECUREPORT",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},ok={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},ak={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},ck={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"},uk={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"},Ur="hdb_internal:",lk={CREATE_SCHEMA:Ur+"create_schema",CREATE_TABLE:Ur+"create_table",CREATE_ATTRIBUTE:Ur+"create_attribute",ADD_USER:Ur+"add_user",ALTER_USER:Ur+"alter_user",DROP_USER:Ur+"drop_user",HDB_NODES:Ur+"hdb_nodes",HDB_USERS:Ur+"hdb_users",HDB_WORKERS:Ur+"hdb_workers",CATCHUP:Ur+"catchup",SCHEMA_CATCHUP:Ur+"schema_catchup",WORKER_ROOM:Ur+"cluster_workers"},_k={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"},dk="060493.ks",fk=".license",Ek={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},te={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",SET_NODE_REPLICATION:"set_node_replication",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"},hk={CSV:".csv",JSON:".json"},mk={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},pk={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},hc={};hc[te.INSERT]=te.INSERT;hc[te.UPDATE]=te.UPDATE;hc[te.UPSERT]=te.UPSERT;hc[te.DELETE]=te.DELETE;var Ge=Object.create(null);Ge[te.DESCRIBE_ALL]=te.DESCRIBE_ALL;Ge[te.DESCRIBE_TABLE]=te.DESCRIBE_TABLE;Ge[te.DESCRIBE_SCHEMA]=te.DESCRIBE_SCHEMA;Ge[te.READ_LOG]=te.READ_LOG;Ge[te.ADD_NODE]=te.ADD_NODE;Ge[te.LIST_USERS]=te.LIST_USERS;Ge[te.LIST_ROLES]=te.LIST_ROLES;Ge[te.USER_INFO]=te.USER_INFO;Ge[te.SQL]=te.SQL;Ge[te.GET_JOB]=te.GET_JOB;Ge[te.SEARCH_JOBS_BY_START_DATE]=te.SEARCH_JOBS_BY_START_DATE;Ge[te.DELETE_FILES_BEFORE]=te.DELETE_FILES_BEFORE;Ge[te.EXPORT_LOCAL]=te.EXPORT_LOCAL;Ge[te.EXPORT_TO_S3]=te.EXPORT_TO_S3;Ge[te.CLUSTER_STATUS]=te.CLUSTER_STATUS;Ge[te.REMOVE_NODE]=te.REMOVE_NODE;Ge[te.RESTART]=te.RESTART;Ge[te.CUSTOM_FUNCTIONS_STATUS]=te.CUSTOM_FUNCTIONS_STATUS;Ge[te.GET_CUSTOM_FUNCTIONS]=te.GET_CUSTOM_FUNCTIONS;Ge[te.GET_CUSTOM_FUNCTION]=te.GET_CUSTOM_FUNCTION;Ge[te.SET_CUSTOM_FUNCTION]=te.SET_CUSTOM_FUNCTION;Ge[te.DROP_CUSTOM_FUNCTION]=te.DROP_CUSTOM_FUNCTION;Ge[te.ADD_CUSTOM_FUNCTION_PROJECT]=te.ADD_CUSTOM_FUNCTION_PROJECT;Ge[te.DROP_CUSTOM_FUNCTION_PROJECT]=te.DROP_CUSTOM_FUNCTION_PROJECT;Ge[te.PACKAGE_CUSTOM_FUNCTION_PROJECT]=te.PACKAGE_CUSTOM_FUNCTION_PROJECT;Ge[te.DEPLOY_CUSTOM_FUNCTION_PROJECT]=te.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Sk={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},Tk={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},IO={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"},gk=NO.invert(IO),Rk={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"},w={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_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",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_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},wO={settings_path:yO.SETTINGS_PATH_KEY,hdb_root_key:w.ROOTPATH,hdb_root:w.ROOTPATH,rootpath:w.ROOTPATH,server_port_key:w.OPERATIONSAPI_NETWORK_PORT,server_port:w.OPERATIONSAPI_NETWORK_PORT,cert_key:w.TLS_CERTIFICATE,certificate:w.TLS_CERTIFICATE,private_key_key:w.TLS_PRIVATEKEY,private_key:w.TLS_PRIVATEKEY,http_secure_enabled_key:w.OPERATIONSAPI_NETWORK_HTTPS,https_on:w.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:w.OPERATIONSAPI_NETWORK_CORS,cors_on:w.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:w.LOGGING_LEVEL,log_level:w.LOGGING_LEVEL,log_path_key:w.LOGGING_ROOT,log_path:w.LOGGING_ROOT,clustering_node_name_key:w.CLUSTERING_NODENAME,node_name:w.CLUSTERING_NODENAME,clustering_enabled_key:w.CLUSTERING_ENABLED,clustering:w.CLUSTERING_ENABLED,max_http_threads:w.THREADS_COUNT,max_hdb_processes:w.THREADS_COUNT,server_timeout_key:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:w.LOGGING_AUDITLOG,disable_transaction_log:w.LOGGING_AUDITLOG,operation_token_timeout_key:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:w.HTTP_PORT,custom_functions_port:w.HTTP_PORT,custom_functions_directory_key:w.COMPONENTSROOT,custom_functions_directory:w.COMPONENTSROOT,max_custom_function_processes:w.THREADS_COUNT,log_to_file:w.LOGGING_FILE,log_to_stdstreams:w.LOGGING_STDSTREAMS,local_studio_on:w.LOCALSTUDIO_ENABLED,clustering_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:w.CLUSTERING_USER,clustering_enabled:w.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:w.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:w.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:w.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:w.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:w.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:w.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:w.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxconsumemsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS,clustering_leafserver_streams_maxingestthreads:w.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS,clustering_leafserver_streams_maxmsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:w.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:w.CLUSTERING_NODENAME,clustering_tls_certificate:w.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:w.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:w.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:w.CLUSTERING_TLS_INSECURE,clustering_tls_verify:w.CLUSTERING_TLS_VERIFY,clustering_loglevel:w.CLUSTERING_LOGLEVEL,clustering_republishmessages:w.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:w.CLUSTERING_DATABASELEVEL,customfunctions_network_port:w.HTTP_PORT,customfunctions_tls_certificate:w.TLS_CERTIFICATE,customfunctions_network_cors:w.HTTP_CORS,customfunctions_network_corsaccesslist:w.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:w.HTTP_HEADERSTIMEOUT,customfunctions_network_https:w.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:w.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:w.HTTP_TIMEOUT,customfunctions_tls:w.TLS,http_threads:w.THREADS_COUNT,threads:w.THREADS_COUNT,threads_count:w.THREADS_COUNT,threads_debug:w.THREADS_DEBUG,threads_debug_startingport:w.THREADS_DEBUG_STARTINGPORT,threads_debug_port:w.THREADS_DEBUG_PORT,threads_debug_host:w.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:w.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:w.THREADS_MAXHEAPMEMORY,http_session_affinity:w.HTTP_SESSIONAFFINITY,http_compressionthreshold:w.HTTP_COMPRESSIONTHRESHOLD,http_cors:w.HTTP_CORS,http_corsaccesslist:w.HTTP_CORSACCESSLIST,http_headerstimeout:w.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,http_timeout:w.HTTP_TIMEOUT,http_port:w.HTTP_PORT,http_secureport:w.HTTP_SECUREPORT,http_mtls:w.HTTP_MTLS,http_mtls_user:w.HTTP_MTLS_USER,http_mtls_required:w.HTTP_MTLS_REQUIRED,http_maxheadersize:w.HTTP_MAXHEADERSIZE,http_threadrange:w.HTTP_THREADRANGE,customfunctions_processes:w.THREADS_COUNT,customfunctions_root:w.COMPONENTSROOT,localstudio_enabled:w.LOCALSTUDIO_ENABLED,logging_file:w.LOGGING_FILE,logging_level:w.LOGGING_LEVEL,logging_root:w.LOGGING_ROOT,logging_rotation_enabled:w.LOGGING_ROTATION_ENABLED,logging_rotation_compress:w.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:w.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:w.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:w.LOGGING_ROTATION_PATH,logging_stdstreams:w.LOGGING_STDSTREAMS,logging_auditlog:w.LOGGING_AUDITLOG,logging_auditretention:w.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:w.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:w.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:w.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:w.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:w.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:w.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:w.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls:w.OPERATIONSAPI_TLS,operationsapi_tls_certificate:w.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:w.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:w.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:w.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:w.ROOTPATH,databases:w.DATABASES,storage_path:w.STORAGE_PATH,storage_maxtransactionqueuetime:w.STORAGE_MAXTRANSACTIONQUEUETIME,ignorescripts:w.IGNORE_SCRIPTS,mqtt_network_port:w.MQTT_NETWORK_PORT,mqtt_websocket:w.MQTT_WEBSOCKET,mqtt_network_secureport:w.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:w.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:w.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:w.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:w.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:w.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:w.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:w.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:w.AUTHENTICATION_CACHETTL,authentication_enablesessions:w.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:w.COMPONENTSROOT,tls:w.TLS,tls_certificate:w.TLS_CERTIFICATE,tls_privatekey:w.TLS_PRIVATEKEY,tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,tls_ciphers:w.TLS_CIPHERS};for(let e in w){let t=w[e];wO[t.toLowerCase()]=t}var Ak={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Ok={csv_file_load:"csv_file_load",csv_data_load:te.CSV_DATA_LOAD,csv_url_load:te.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",restart_service:"restart_service"},bk={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"},yk={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Nk={VERSION_DEFAULT:"2.2.0"},Ik={DEVELOPMENT:8192,DEFAULT:512},wk={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"},Ck={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"},Dk={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},CO={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Lk=Symbol("metadata"),Mk="__clustering__",Pk=Object.values(CO),Uk=15984864e5,DO={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},vk=NO.invert(DO),Bk={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"},xk=111,Hk=`\r
|
|
2
|
-
`,
|
|
1
|
+
"use strict";var Hq=Object.create;var fc=Object.defineProperty;var Gq=Object.getOwnPropertyDescriptor;var qq=Object.getOwnPropertyNames;var Fq=Object.getPrototypeOf,kq=Object.prototype.hasOwnProperty;var a=(e,t)=>fc(e,"name",{value:t,configurable:!0});var Re=(e,t)=>()=>(e&&(t=e(e=0)),t);var g=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Fe=(e,t)=>{for(var r in t)fc(e,r,{get:t[r],enumerable:!0})},EO=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of qq(t))!kq.call(e,s)&&s!==r&&fc(e,s,{get:()=>t[s],enumerable:!(n=Gq(t,s))||n.enumerable});return e};var H=(e,t,r)=>(r=e!=null?Hq(Fq(e)):{},EO(t||!e||!e.__esModule?fc(r,"default",{value:e,enumerable:!0}):r,e)),ie=e=>EO(fc({},"__esModule",{value:!0}),e);var pO=g((uce,mO)=>{var Vq=require("fast-glob"),{statSync:Uh,existsSync:vh,readFileSync:$q,writeFileSync:Yq}=require("fs"),{spawnSync:Kq,spawn:Wq,execFileSync:cce}=require("child_process"),{isMainThread:Qq}=require("worker_threads"),{join:ei,relative:hO}=require("path"),{PACKAGE_ROOT:Nn}=P(),{tmpdir:zq,platform:Jq}=require("os");require("source-map-support").install();var jq=["resources","server","dataLayer","components"],Ec="ts-build",Bh,Xq=__filename.endsWith("tsBuild.js");if(Xq){if(Qq){let r;try{Uh(ei(Nn,Ec)),r=!0}catch{}if(r)for(let n of Vq.sync(jq.map(s=>s+"/**/*.ts"),{cwd:Nn})){let s=0,i=0;try{s=Uh(ei(Nn,n)).mtimeMs-5e3,i=Uh(ei(Nn,Ec,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),Bh=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),Bh=!0;if(Bh){let n=ei(Nn,"node_modules/.bin/tsc");Jq()==="win32"&&(n+=".cmd");let s=Kq(n,{cwd:Nn});if(s.stdout?.length&&console.log(s.stdout.toString()),s.stderr?.length&&console.log(s.stderr.toString()),r){let i=ei(zq(),"harperdb-tsc.pid"),o;if(vh(i))try{process.kill(+$q(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=Wq(n,["--watch"],{cwd:Nn,detached:!0,stdio:"ignore"});Yq(i,c.pid.toString()),c.unref()}}}}let e=mO.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Nn)&&!n[0].includes("node_modules")){let i=hO(Nn,n[0]),o;i.startsWith(Ec)?o=ei(Nn,hO(Ec,i)):o=ei(Nn,Ec,i);let c=ei(o,r),u=c+".js";if(vh(u))return u;if(c.includes(".")&&vh(c))return c}return t(r,n,s)}}});var P=g((dce,LO)=>{"use strict";var an=require("path"),Zq=require("fs"),{relative:lce,join:_ce}=an,{existsSync:eF}=Zq;function tF(){let e=__dirname;for(;!eF(an.join(e,"package.json"));){let t=an.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(tF,"getHDBPackageRoot");var ti=tF(),SO="js",u_=SO,rF="harperdb-config.yaml",nF="defaultConfig.yaml",sF="hdb",TO=`harperdb.${u_}`,gO=`customFunctionsServer.${u_}`,iF=`restartHdb.${u_}`,Hh="HarperDB",c_="Custom Functions",l_="Clustering Hub",__="Clustering Leaf",oF="Clustering Ingest Service",aF="Clustering Reply Service",cF="foreground.pid",uF="hdb.pid",lF="data",_F={HDB:Hh,CLUSTERING_HUB:l_,CLUSTERING_LEAF:__,CLUSTERING_INGEST_SERVICE:oF,CLUSTERING_REPLY_SERVICE:aF,CUSTOM_FUNCTIONS:c_,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"},dF={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},fF={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},EF={harperdb:Hh,"clustering hub":l_,"clustering leaf":__,"custom functions":c_,custom_functions:c_,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},hF={CLUSTERING_HUB_PROC_DESCRIPTOR:l_,CLUSTERING_LEAF_PROC_DESCRIPTOR:__},xh={HDB:an.join(ti,"server/harperdb"),CUSTOM_FUNCTIONS:an.join(ti,"server/customFunctions"),CLUSTERING_HUB:an.join(ti,"server/nats"),CLUSTERING_LEAF:an.join(ti,"server/nats")},mF={HDB:an.join(xh.HDB,TO),CUSTOM_FUNCTIONS:an.join(xh.CUSTOM_FUNCTIONS,gO)},pF={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:an.join(ti,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:an.join(ti,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:an.join(ti,"launchServiceScripts/launchUpdateNodes4-0-0.js")},SF={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},RO="support@harperdb.io",TF="customer-success@harperdb.io",AO=1,gF=4141,OO="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",RF="https://www.harperdb.io/product",AF=`For support, please submit a request at ${OO} or contact ${RO}`,bO=`For license support, please contact ${TF}`,OF="None of the specified records were found.",bF="hash attribute not found",yF=`Your current license only supports ${AO} role. ${bO}`,NF="Your current license only supports 3 connections to a node.",IF="127.0.0.1",wF=1,CF=/^\.$/,DF=/^\.\.$/,LF="U+002E",MF=/\//g,PF="U+002F",UF=/U\+002F/g,vF=/^U\+002E$/,BF=/^U\+002EU\+002E$/,xF="d",HF=999999,GF="*",qF="--max-old-space-size=",FF="system",kF="__hdb_hash",VF=".harperdb",$F=".hdb",YF="keys",KF="hdb_boot_properties.file",WF=".updateConfig.json",QF="SIGTSTP",zF=24,JF=6e4,jF=448,XF="blob",ZF="trash",ek="database",tk="schema",rk="transactions",nk=".count",sk="id",ik="PROCESS_NAME",yO={SETTINGS_PATH_KEY:"settings_path"},NO=require("lodash"),ok={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",OPERATIONSAPI_NETWORK_SECUREPORT:"OPERATIONSAPI_NETWORK_SECUREPORT",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},ak={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},ck={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},uk={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"},lk={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"},Ur="hdb_internal:",_k={CREATE_SCHEMA:Ur+"create_schema",CREATE_TABLE:Ur+"create_table",CREATE_ATTRIBUTE:Ur+"create_attribute",ADD_USER:Ur+"add_user",ALTER_USER:Ur+"alter_user",DROP_USER:Ur+"drop_user",HDB_NODES:Ur+"hdb_nodes",HDB_USERS:Ur+"hdb_users",HDB_WORKERS:Ur+"hdb_workers",CATCHUP:Ur+"catchup",SCHEMA_CATCHUP:Ur+"schema_catchup",WORKER_ROOM:Ur+"cluster_workers"},dk={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"},fk="060493.ks",Ek=".license",hk={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},te={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",SET_NODE_REPLICATION:"set_node_replication",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"},mk={CSV:".csv",JSON:".json"},pk={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Sk={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},hc={};hc[te.INSERT]=te.INSERT;hc[te.UPDATE]=te.UPDATE;hc[te.UPSERT]=te.UPSERT;hc[te.DELETE]=te.DELETE;var Ge=Object.create(null);Ge[te.DESCRIBE_ALL]=te.DESCRIBE_ALL;Ge[te.DESCRIBE_TABLE]=te.DESCRIBE_TABLE;Ge[te.DESCRIBE_SCHEMA]=te.DESCRIBE_SCHEMA;Ge[te.READ_LOG]=te.READ_LOG;Ge[te.ADD_NODE]=te.ADD_NODE;Ge[te.LIST_USERS]=te.LIST_USERS;Ge[te.LIST_ROLES]=te.LIST_ROLES;Ge[te.USER_INFO]=te.USER_INFO;Ge[te.SQL]=te.SQL;Ge[te.GET_JOB]=te.GET_JOB;Ge[te.SEARCH_JOBS_BY_START_DATE]=te.SEARCH_JOBS_BY_START_DATE;Ge[te.DELETE_FILES_BEFORE]=te.DELETE_FILES_BEFORE;Ge[te.EXPORT_LOCAL]=te.EXPORT_LOCAL;Ge[te.EXPORT_TO_S3]=te.EXPORT_TO_S3;Ge[te.CLUSTER_STATUS]=te.CLUSTER_STATUS;Ge[te.REMOVE_NODE]=te.REMOVE_NODE;Ge[te.RESTART]=te.RESTART;Ge[te.CUSTOM_FUNCTIONS_STATUS]=te.CUSTOM_FUNCTIONS_STATUS;Ge[te.GET_CUSTOM_FUNCTIONS]=te.GET_CUSTOM_FUNCTIONS;Ge[te.GET_CUSTOM_FUNCTION]=te.GET_CUSTOM_FUNCTION;Ge[te.SET_CUSTOM_FUNCTION]=te.SET_CUSTOM_FUNCTION;Ge[te.DROP_CUSTOM_FUNCTION]=te.DROP_CUSTOM_FUNCTION;Ge[te.ADD_CUSTOM_FUNCTION_PROJECT]=te.ADD_CUSTOM_FUNCTION_PROJECT;Ge[te.DROP_CUSTOM_FUNCTION_PROJECT]=te.DROP_CUSTOM_FUNCTION_PROJECT;Ge[te.PACKAGE_CUSTOM_FUNCTION_PROJECT]=te.PACKAGE_CUSTOM_FUNCTION_PROJECT;Ge[te.DEPLOY_CUSTOM_FUNCTION_PROJECT]=te.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Tk={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},gk={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},IO={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"},Rk=NO.invert(IO),Ak={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"},w={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_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",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_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},wO={settings_path:yO.SETTINGS_PATH_KEY,hdb_root_key:w.ROOTPATH,hdb_root:w.ROOTPATH,rootpath:w.ROOTPATH,server_port_key:w.OPERATIONSAPI_NETWORK_PORT,server_port:w.OPERATIONSAPI_NETWORK_PORT,cert_key:w.TLS_CERTIFICATE,certificate:w.TLS_CERTIFICATE,private_key_key:w.TLS_PRIVATEKEY,private_key:w.TLS_PRIVATEKEY,http_secure_enabled_key:w.OPERATIONSAPI_NETWORK_HTTPS,https_on:w.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:w.OPERATIONSAPI_NETWORK_CORS,cors_on:w.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:w.LOGGING_LEVEL,log_level:w.LOGGING_LEVEL,log_path_key:w.LOGGING_ROOT,log_path:w.LOGGING_ROOT,clustering_node_name_key:w.CLUSTERING_NODENAME,node_name:w.CLUSTERING_NODENAME,clustering_enabled_key:w.CLUSTERING_ENABLED,clustering:w.CLUSTERING_ENABLED,max_http_threads:w.THREADS_COUNT,max_hdb_processes:w.THREADS_COUNT,server_timeout_key:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:w.LOGGING_AUDITLOG,disable_transaction_log:w.LOGGING_AUDITLOG,operation_token_timeout_key:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:w.HTTP_PORT,custom_functions_port:w.HTTP_PORT,custom_functions_directory_key:w.COMPONENTSROOT,custom_functions_directory:w.COMPONENTSROOT,max_custom_function_processes:w.THREADS_COUNT,log_to_file:w.LOGGING_FILE,log_to_stdstreams:w.LOGGING_STDSTREAMS,local_studio_on:w.LOCALSTUDIO_ENABLED,clustering_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:w.CLUSTERING_USER,clustering_enabled:w.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:w.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:w.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:w.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:w.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:w.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:w.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:w.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxconsumemsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS,clustering_leafserver_streams_maxingestthreads:w.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS,clustering_leafserver_streams_maxmsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:w.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:w.CLUSTERING_NODENAME,clustering_tls_certificate:w.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:w.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:w.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:w.CLUSTERING_TLS_INSECURE,clustering_tls_verify:w.CLUSTERING_TLS_VERIFY,clustering_loglevel:w.CLUSTERING_LOGLEVEL,clustering_republishmessages:w.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:w.CLUSTERING_DATABASELEVEL,customfunctions_network_port:w.HTTP_PORT,customfunctions_tls_certificate:w.TLS_CERTIFICATE,customfunctions_network_cors:w.HTTP_CORS,customfunctions_network_corsaccesslist:w.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:w.HTTP_HEADERSTIMEOUT,customfunctions_network_https:w.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:w.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:w.HTTP_TIMEOUT,customfunctions_tls:w.TLS,http_threads:w.THREADS_COUNT,threads:w.THREADS_COUNT,threads_count:w.THREADS_COUNT,threads_debug:w.THREADS_DEBUG,threads_debug_startingport:w.THREADS_DEBUG_STARTINGPORT,threads_debug_port:w.THREADS_DEBUG_PORT,threads_debug_host:w.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:w.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:w.THREADS_MAXHEAPMEMORY,http_session_affinity:w.HTTP_SESSIONAFFINITY,http_compressionthreshold:w.HTTP_COMPRESSIONTHRESHOLD,http_cors:w.HTTP_CORS,http_corsaccesslist:w.HTTP_CORSACCESSLIST,http_headerstimeout:w.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,http_timeout:w.HTTP_TIMEOUT,http_port:w.HTTP_PORT,http_secureport:w.HTTP_SECUREPORT,http_mtls:w.HTTP_MTLS,http_mtls_user:w.HTTP_MTLS_USER,http_mtls_required:w.HTTP_MTLS_REQUIRED,http_maxheadersize:w.HTTP_MAXHEADERSIZE,http_threadrange:w.HTTP_THREADRANGE,customfunctions_processes:w.THREADS_COUNT,customfunctions_root:w.COMPONENTSROOT,localstudio_enabled:w.LOCALSTUDIO_ENABLED,logging_file:w.LOGGING_FILE,logging_level:w.LOGGING_LEVEL,logging_root:w.LOGGING_ROOT,logging_rotation_enabled:w.LOGGING_ROTATION_ENABLED,logging_rotation_compress:w.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:w.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:w.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:w.LOGGING_ROTATION_PATH,logging_stdstreams:w.LOGGING_STDSTREAMS,logging_auditlog:w.LOGGING_AUDITLOG,logging_auditretention:w.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:w.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:w.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:w.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:w.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:w.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:w.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:w.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls:w.OPERATIONSAPI_TLS,operationsapi_tls_certificate:w.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:w.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:w.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:w.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:w.ROOTPATH,databases:w.DATABASES,storage_path:w.STORAGE_PATH,storage_maxtransactionqueuetime:w.STORAGE_MAXTRANSACTIONQUEUETIME,ignorescripts:w.IGNORE_SCRIPTS,mqtt_network_port:w.MQTT_NETWORK_PORT,mqtt_websocket:w.MQTT_WEBSOCKET,mqtt_network_secureport:w.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:w.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:w.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:w.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:w.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:w.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:w.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:w.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:w.AUTHENTICATION_CACHETTL,authentication_enablesessions:w.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:w.COMPONENTSROOT,tls:w.TLS,tls_certificate:w.TLS_CERTIFICATE,tls_privatekey:w.TLS_PRIVATEKEY,tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,tls_ciphers:w.TLS_CIPHERS};for(let e in w){let t=w[e];wO[t.toLowerCase()]=t}var Ok={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},bk={csv_file_load:"csv_file_load",csv_data_load:te.CSV_DATA_LOAD,csv_url_load:te.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",restart_service:"restart_service"},yk={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},Nk={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Ik={VERSION_DEFAULT:"2.2.0"},wk={DEVELOPMENT:8192,DEFAULT:512},Ck={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},Dk={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},Lk={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},CO={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Mk=Symbol("metadata"),Pk="__clustering__",Uk=Object.values(CO),vk=15984864e5,DO={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Bk=NO.invert(DO),xk={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"},Hk=111,Gk=`\r
|
|
2
|
+
`,qk={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Fk=["*","%"],kk="unauthorized_access",Vk="func_val",$k={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Yk={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Kk={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",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update"},Wk={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},Qk={HTTP:"http"},zk={STOPPED:"stopped",ONLINE:"online"},Jk="3.x.x",jk={SUCCESS:"success",FAILURE:"failure"},Xk={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};LO.exports={LOCAL_HARPERDB_OPERATIONS:Ge,HDB_SUPPORT_ADDRESS:RO,HDB_SUPPORT_URL:OO,HDB_PRICING_URL:RF,SUPPORT_HELP_MSG:AF,LICENSE_HELP_MSG:bO,HDB_PROC_NAME:TO,HDB_PROC_DESCRIPTOR:Hh,CLUSTERING_LEAF_PROC_DESCRIPTOR:__,CLUSTERING_HUB_PROC_DESCRIPTOR:l_,SYSTEM_SCHEMA_NAME:FF,HASH_FOLDER_NAME:kF,HDB_HOME_DIR_NAME:VF,UPDATE_FILE_NAME:WF,LICENSE_KEY_DIR_NAME:YF,BOOT_PROPS_FILE_NAME:KF,JOB_TYPE_ENUM:bk,JOB_STATUS_ENUM:hk,SYSTEM_TABLE_NAMES:uk,SYSTEM_TABLE_HASH_ATTRIBUTES:lk,OPERATIONS_ENUM:te,VALID_S3_FILE_TYPES:mk,S3_BUCKET_AUTH_KEYS:pk,VALID_SQL_OPS_ENUM:Sk,GEO_CONVERSION_ENUM:gk,HDB_SETTINGS_NAMES:IO,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Rk,SERVICE_ACTIONS_ENUM:Tk,CLUSTER_MESSAGE_TYPE_ENUM:yk,CLUSTER_CONNECTION_DIRECTION_ENUM:Nk,CLUSTER_EVENTS_DEFS_ENUM:Ck,PERIOD_REGEX:CF,DOUBLE_PERIOD_REGEX:DF,UNICODE_PERIOD:LF,FORWARD_SLASH_REGEX:MF,UNICODE_FORWARD_SLASH:PF,ESCAPED_FORWARD_SLASH_REGEX:UF,ESCAPED_PERIOD_REGEX:vF,ESCAPED_DOUBLE_PERIOD_REGEX:BF,REG_KEY_FILE_NAME:fk,RESTART_TIMEOUT_MS:JF,HDB_FILE_PERMISSIONS:jF,DATABASES_DIR_NAME:ek,LEGACY_DATABASES_DIR_NAME:tk,TRANSACTIONS_DIR_NAME:rk,LIMIT_COUNT_NAME:nk,ID_ATTRIBUTE_STRING:sk,INSERT_MODULE_ENUM:ak,UPGRADE_JSON_FIELD_NAMES_ENUM:ck,RESTART_CODE:QF,RESTART_CODE_NUM:zF,CLUSTER_OPERATIONS:hc,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:dk,HDB_INTERNAL_SC_CHANNEL_PREFIX:Ur,INTERNAL_SC_CHANNELS:_k,CLUSTERING_MESSAGE_TYPES:xk,HDB_FILE_SUFFIX:$F,BLOB_FOLDER_NAME:XF,HDB_TRASH_DIR:ZF,ORIGINATOR_SET_VALUE:Hk,LICENSE_VALUES:Ik,RAM_ALLOCATION_ENUM:wk,TIME_STAMP_NAMES_ENUM:CO,TIME_STAMP_NAMES:Uk,PERMS_UPDATE_RELEASE_TIMESTAMP:vk,SEARCH_NOT_FOUND_MESSAGE:OF,SEARCH_ATTRIBUTE_NOT_FOUND:bF,LICENSE_ROLE_DENIED_RESPONSE:yF,LICENSE_MAX_CONNS_REACHED:NF,BASIC_LICENSE_MAX_NON_CU_ROLES:AO,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:gF,VALUE_SEARCH_COMPARATORS:DO,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Bk,LICENSE_FILE_NAME:Ek,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Dk,NEW_LINE:Gk,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:wF,MOMENT_DAYS_TAG:xF,API_TURNOVER_SEC:HF,LOOPBACK:IF,CODE_EXTENSION:u_,WILDCARD_SEARCH_VALUE:GF,NODE_ERROR_CODES:Lk,JAVASCRIPT_EXTENSION:SO,PERMS_CRUD_ENUM:qk,UNAUTHORIZED_PERMISSION_NAME:kk,SEARCH_WILDCARDS:Fk,FUNC_VAL:Vk,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:$k,JWT_ENUM:Yk,CLUSTERING_FLAG:Pk,ITC_EVENT_TYPES:Kk,CUSTOM_FUNCTION_PROC_NAME:gO,CUSTOM_FUNCTION_PROC_DESCRIPTOR:c_,SERVICES:Wk,THREAD_TYPES:Qk,MEM_SETTING_KEY:qF,HDB_RESTART_SCRIPT:iF,PROCESS_DESCRIPTORS:_F,SERVICE_SERVERS:mF,SERVICE_SERVERS_CWD:xh,PROCESS_DESCRIPTORS_VALIDATE:EF,LAUNCH_SERVICE_SCRIPTS:pF,LOG_LEVELS:fF,PROCESS_NAME_ENV_PROP:ik,LOG_NAMES:dF,PM2_PROCESS_STATUSES:zk,CONFIG_PARAM_MAP:wO,CONFIG_PARAMS:w,HDB_CONFIG_FILE:rF,HDB_DEFAULT_CONFIG_FILE:nF,ROLE_TYPES_ENUM:SF,BOOT_PROP_PARAMS:yO,INSTALL_PROMPTS:ok,HDB_ROOT_DIR_NAME:sF,CLUSTERING_PROCESSES:hF,FOREGROUND_PID_FILE:cF,PACKAGE_ROOT:ti,PRE_4_0_0_VERSION:Jk,DATABASES_PARAM_CONFIG:Ok,METADATA_PROPERTY:Mk,AUTH_AUDIT_STATUS:jk,AUTH_AUDIT_TYPES:Xk,HDB_PID_FILE:uF,DEFAULT_DATABASE_NAME:lF,LEGACY_CONFIG_PARAMS:Ak};pO()});var Gh=g((Ece,UO)=>{"use strict";var MO=require("minimist");UO.exports=Zk;function Zk(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=PO(process.env),n=PO(MO(process.argv))):(r=process.env,n=MO(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(Zk,"assignCMDENVVariables");function PO(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(PO,"objKeysToLowerCase")});var $=g((mce,Kh)=>{"use strict";var Hi=require("fs-extra"),{workerData:eV,threadId:tV}=require("worker_threads"),Ts=require("path"),xO=require("yaml"),HO=require("properties-reader"),Tt=P(),vO=Gh(),rV=require("os"),{PACKAGE_ROOT:Fh}=P(),{_assignPackageExport:nV}=require("../index"),pc={};for(let e in console)pc[e]||(pc[e]=console[e]);var ur={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},GO={STDOUT:"stdOut",STDERR:"stdErr"},sV=Ts.join(Fh,"logs"),iV=Ts.join(Fh,"config/yaml/",Tt.HDB_DEFAULT_CONFIG_FILE),oV=1e4,Ss,zn,cr,d_,f_,Sc,Vo,mc;mc===void 0&&qO();Kh.exports={notify:VO,fatal:$O,error:Tc,warn:Yh,info:E_,debug:$h,trace:Vh,setLogLevel:fV,log_level:cr,loggerWithTag:aV,suppressLogging:cV,initLogSettings:qO,setupConsoleLogging:FO,logCustomLevel:_V,closeLogFile:kh,getLogFilePath:()=>Sc,OUTPUTS:GO,AuthAuditLog:mV};nV("logger",Kh.exports);function qO(e=!1){try{if(mc===void 0||e){kh();let t=dV(),r=vO(["ROOTPATH"]);try{mc=HO(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Hi.pathExistsSync(Ts.join(r.ROOTPATH,Tt.HDB_CONFIG_FILE)))throw n}({level:cr,config_log_path:f_,to_file:Ss,to_stream:zn}=EV(r.ROOTPATH?Ts.join(r.ROOTPATH,Tt.HDB_CONFIG_FILE):mc.get("settings_path"))),d_=Tt.LOG_NAMES.HDB,Sc=Ts.join(f_,d_)}}catch(t){if(mc=void 0,t.code===Tt.NODE_ERROR_CODES.ENOENT||t.code===Tt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=vO(Object.keys(Tt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Tt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===Tt.CONFIG_PARAMS.LOGGING_LEVEL){cr=u;continue}if(c===Tt.CONFIG_PARAMS.LOGGING_STDSTREAMS){zn=u;continue}c===Tt.CONFIG_PARAMS.LOGGING_FILE&&(Ss=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=hV();Ss=Ss===void 0?s:Ss,Ss=BO(Ss),zn=zn===void 0?i:zn,zn=BO(zn),cr=cr===void 0?n:cr,f_=sV,d_=Tt.LOG_NAMES.INSTALL,Sc=Ts.join(f_,d_);return}throw Tc("Error initializing log settings"),Tc(t),t}process.env.DEV_MODE&&(zn=!0),FO()}a(qO,"initLogSettings");var qh=!0;function FO(){ko("error",Tc),ko("warn",Yh),ko("log",E_),ko("info",E_),ko("debug",$h),ko("trace",Vh)}a(FO,"setupConsoleLogging");function ko(e,t){console[e]=function(...r){if(qh&&t(...r),!/PM2 log:|App \[/.test(r[0]))return pc[e](...r)}}a(ko,"logConsole");function aV(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(VO),fatal:r($O),error:r(Tc),warn:r(Yh),info:r(E_),debug:r($h),trace:r(Vh)};function r(n){return function(...s){return n(t,...s)}}}a(aV,"loggerWithTag");function cV(e){try{qh=!1,e()}finally{qh=!0}}a(cV,"suppressLogging");var uV=eV?.name?.replace(/ /g,"-")||"main";function gs(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-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||uV+"/"+tV);c<s;c++){let _=t[c];if(_ instanceof Error&&_.stack)n+=_.stack,Object.keys(_).length>0&&(n+=`
|
|
3
3
|
`+JSON.stringify(_)),_.cause&&(t[c--]=_.cause,_&&(n+=`
|
|
4
|
-
Caused by:`))
|
|
5
|
-
`}a(gs,"createLogRecord");function gc(e){Ss&&kO(e),
|
|
6
|
-
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.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,n])=>({pid:Number.parseInt(r,10),name:pV.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(RV,"findPs")});var ft=g((Tce,QO)=>{"use strict";var AV="__dbis__",OV="__txns__",bV="__environment_name__",yV="__dbi_defintion__",NV={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"},IV=["__createdtime__","__updatedtime__"],wV="\uFFFF",WO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},CV=Object.values(WO);QO.exports={AUDIT_STORE_NAME:OV,INTERNAL_DBIS_NAME:AV,DBI_DEFINITION_NAME:yV,SEARCH_TYPES:NV,TIMESTAMP_NAMES:IV,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:bV,TRANSACTIONS_DBI_NAMES_ENUM:WO,TRANSACTIONS_DBIS:CV,OVERFLOW_MARKER:wV}});var vr=g((gce,nb)=>{"use strict";var zO=P(),JO=ft(),XO={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},jO=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),ZO={500:jO("There was an error processing your request."),400:"Invalid request"},DV=ZO[XO.INTERNAL_SERVER_ERROR],LV={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.`},MV={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},PV={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"},UV={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 ${JO.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${JO.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"},vV={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${zO.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 ${zO.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"},eb={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"},BV={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."},xV={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`},HV={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"},GV={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},qV={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`},tb={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.`},rb={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}`},FV={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."},kV={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},VV={...eb,...PV,...LV,...BV,...xV,...HV,...GV,...qV,...vV,...tb,...rb,...FV,...kV,...MV};nb.exports={CHECK_LOGS_WRAPPER:jO,HDB_ERROR_MSGS:VV,DEFAULT_ERROR_MSGS:ZO,DEFAULT_ERROR_RESP:DV,HTTP_STATUS_CODES:XO,LMDB_ERRORS_ENUM:UV,AUTHENTICATION_ERROR_MSGS:eb,VALIDATION_ERROR_MSGS:tb,ITC_ERRORS:rb}});var se=g((Ace,ob)=>{"use strict";var $o=vr(),$V=$(),YV=P(),m_=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,sb),this.statusCode=n||$o.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||($o.DEFAULT_ERROR_MSGS[n]?$o.DEFAULT_ERROR_MSGS[n]:$o.DEFAULT_ERROR_MSGS[$o.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&$V[s](i)}},Wh=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}},Qh=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function sb(e,t,r,n=YV.LOG_LEVELS.ERROR,s=null,i=!1){if(ib(e))return e;let o=new m_(e,t,r,n,s);return i&&delete o.stack,o}a(sb,"handleHDBError");function ib(e){return e.__proto__.constructor.name===m_.name}a(ib,"isHDBError");ob.exports={isHDBError:ib,handleHDBError:sb,ClientError:Wh,ServerError:Qh,hdb_errors:$o}});var Xe=g((bce,fb)=>{"use strict";var yc=P(),KV=z(),ur=ee(),Nc=require("path"),WV=require("minimist"),ab=require("fs-extra"),cb=require("lodash");ur.initSync();var{CONFIG_PARAMS:ri,DATABASES_PARAM_CONFIG:Rc,SYSTEM_SCHEMA_NAME:p_}=yc,Ac,Oc,bc;function ub(){if(Ac!==void 0)return Ac;if(ur.getHdbBasePath()!==void 0)return Ac=ur.get(ri.STORAGE_PATH)||Nc.join(ur.getHdbBasePath(),yc.DATABASES_DIR_NAME),Ac}a(ub,"getBaseSchemaPath");function lb(){if(Oc!==void 0)return Oc;if(ur.getHdbBasePath()!==void 0)return Oc=db(p_),Oc}a(lb,"getSystemSchemaPath");function _b(){if(bc!==void 0)return bc;if(ur.getHdbBasePath()!==void 0)return bc=ur.get(yc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Nc.join(ur.getHdbBasePath(),yc.TRANSACTIONS_DIR_NAME),bc}a(_b,"getTransactionAuditStoreBasePath");function QV(e,t){let r=ur.get(ri.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Nc.join(_b(),e.toString())}a(QV,"getTransactionAuditStorePath");function db(e,t){e=e.toString(),t=t&&t.toString();let r=ur.get(yc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Nc.join(ub(),e)}a(db,"getSchemaPath");function zV(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,WV(process.argv));let n=r[ri.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!KV.isObject(n))throw o;i=n}for(let o of i){let c=o[p_];if(!c)continue;let u=ur.get(ri.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Rc.PATH];if(_)return cb.set(u,[p_,Rc.TABLES,t,Rc.PATH],_),ur.setProperty(ri.DATABASES,u),_;let l=c?.[Rc.PATH];if(l)return cb.set(u,[p_,Rc.PATH],l),ur.setProperty(ri.DATABASES,u),l}}let s=r[ri.STORAGE_PATH.toUpperCase()];if(s){if(!ab.pathExistsSync(s))throw new Error(s+" does not exist");let i=Nc.join(s,e);return ab.mkdirsSync(i),ur.setProperty(ri.STORAGE_PATH,s),i}return lb()}a(zV,"initSystemSchemaPaths");function JV(){Ac=void 0,Oc=void 0,bc=void 0}a(JV,"resetPaths");fb.exports={getBaseSchemaPath:ub,getSystemSchemaPath:lb,getTransactionAuditStorePath:QV,getTransactionAuditStoreBasePath:_b,getSchemaPath:db,initSystemSchemaPaths:zV,resetPaths:JV}});var Br=g((wce,Sb)=>{"use strict";var XV=vr().LMDB_ERRORS_ENUM,Nce=require("lmdb"),jV=ft(),Ice=require("buffer").Buffer,{OVERFLOW_MARKER:Eb,MAX_SEARCH_KEY_LENGTH:S_}=jV,hb=["number","string","symbol","boolean","bigint"];function ZV(e){if(e=e?.primaryStore||e,!e)throw new Error(XV.ENV_REQUIRED)}a(ZV,"validateEnv");function e$(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(e$,"stringifyData");function t$(e){return e instanceof Date?e.valueOf():e}a(t$,"convertKeyValueToWrite");function r$(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(hb.includes(typeof e))return e.length>S_?[e.slice(0,S_)+Eb]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(hb.includes(typeof i))i.length>S_?r.push(i.slice(0,S_)+Eb):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(r$,"getIndexedValues");var T_=0,mb=0;function pb(){mb=Date.now()-performance.now()}a(pb,"adjustStartTime");pb();var n$=6e4;setInterval(pb,n$).unref();function s$(){let e=performance.now()+mb;return e>T_?(T_=e,e):(T_+=488e-6,T_)}a(s$,"getNextMonotonicTime");Sb.exports={validateEnv:ZV,stringifyData:e$,convertKeyValueToWrite:t$,getNextMonotonicTime:s$,getIndexedValues:r$}});var Ic=g((Dce,Tb)=>{"use strict";var i$=P().OPERATIONS_ENUM,zh=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=i$.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Tb.exports=zh});var wc=g((Pce,Ob)=>{"use strict";var Mce=Ic(),g_=P(),Jh=z(),gb=$(),o$=require("uuid"),{handleHDBError:R_,hdb_errors:a$}=se(),{HDB_ERROR_MSGS:A_,HTTP_STATUS_CODES:O_}=a$;Ob.exports=Rb;function Rb(e,t,r){for(let s=0;s<t.length;s++)Ab(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];c$(i,r,e.operation)}}a(Rb,"processRows");Rb.validateAttribute=Ab;function Ab(e){if(Buffer.byteLength(String(e))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw R_(new Error,A_.ATTR_NAME_LENGTH_ERR(e),O_.BAD_REQUEST,void 0,void 0,!0);if(Jh.isEmptyOrZeroLength(e)||Jh.isEmpty(e.trim()))throw R_(new Error,A_.ATTR_NAME_NULLISH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(Ab,"validateAttribute");function c$(e,t,r){if(!e.hasOwnProperty(t)||Jh.isEmptyOrZeroLength(e[t])){if(r===g_.OPERATIONS_ENUM.INSERT||r===g_.OPERATIONS_ENUM.UPSERT){e[t]=o$.v4();return}throw gb.error("Update transaction aborted due to record with no hash value:",e),R_(new Error,A_.RECORD_MISSING_HASH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw gb.error(e),R_(new Error,A_.HASH_VAL_LENGTH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(c$,"validateHash")});var bb,In,Xh,Cc=Re(()=>{bb=require("events"),In=class extends bb.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new Xh;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},Xh=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});var Gi={};Fe(Gi,{server:()=>at});var yb,at,lr=Re(()=>{yb=require("../index"),at={};(0,yb._assignPackageExport)("server",at)});var em={};Fe(em,{loadGQLSchema:()=>_$,start:()=>Zh,startOnMainThread:()=>l$});function Zh({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let B=function(U){if(U.kind==="NonNullType"){let Q=B(U.type);return Q.nullable=!1,Q}if(U.kind==="ListType")return{type:"array",elements:B(U.type)};let M={type:U.name?.value};return Object.defineProperty(M,"location",{value:U.loc.startToken}),M};a(B,"getProperty");let T=S.name.value,A=[],b={table:null,database:null,properties:A};E.set(T,b);for(let U of S.directives){if(U.name.value==="table"){for(let F of U.arguments)b[F.name.value]=F.value.value;b.schema&&(b.database=b.schema),b.table||(b.table=T),b.audit&&(b.audit=b.audit!=="false"),b.attributes=b.properties,f.push(b)}if(U.name.value==="sealed"&&(b.sealed=!0),U.name.value==="export"){b.export=!0;for(let F of U.arguments)F.name.value==="name"&&(b.export={name:F.value.value})}}let I=!1;for(let U of S.fields){let F=B(U.type);F.name=U.name.value,A.push(F);for(let M of U.directives)if(M.name.value==="primaryKey")I?console.warn("Can not define two attributes as a primary key"):(F.isPrimaryKey=!0,I=!0);else if(M.name.value==="indexed")F.indexed=!0;else if(M.name.value==="relationship"){let Q={};for(let J of M.arguments)Q[J.name.value]=J.value.value;F.relationship=Q}else if(M.name.value==="createdTime")F.assignCreatedTime=!0;else if(M.name.value==="updatedTime")F.assignUpdatedTime=!0;else if(M.name.value==="expiresAt")F.expiresAt=!0;else if(M.name.value==="allow"){let Q=F.authorizedRoles=[];for(let J of M.arguments)J.name.value==="role"&&Q.push(J.value.value)}}b.type=T,T==="Query"&&(h=b)}function p(S){let T=E.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):u$.includes(S.type)||(0,Nb.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of E.values())for(let T of S.properties)p(T);for(let S of f)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,jh.dirname)(n),S.tableClass):i.set((0,jh.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var jh,Nb,u$,l$,_$,Ib=Re(()=>{jh=require("path");Ae();Nb=H(Qe()),u$=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(Zh,"start");l$=Zh,_$=Zh({ensureTable:Et}).handleFile});async function b_(e){let t=(0,Db.pathToFileURL)(e).toString();return d$?(Dc||(Dc=f$(h$)),(await(await Dc).import(t)).namespace):import(t)}async function f$(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Dc=new Compartment({console,Math,Date,fetch:E$,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,Cb.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:$t,tables:xr,databases:ct})}};let n=await(0,wb.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Dc}function E$(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 h$(){return{Resource:$t,tables:xr}}var wb,Cb,Db,d$,Dc,tm=Re(()=>{cn();Ae();wb=require("fs/promises"),Cb=require("path"),Db=require("url"),d$=!1;a(b_,"secureImport");a(f$,"getCompartment");a(E$,"secureOnlyFetch");a(h$,"getGlobalVars")});var nm={};Fe(nm,{handleFile:()=>m$});async function m$(e,t,r,n){let s=new Map,i=await b_(r);c(i.default)&&n.set((0,rm.dirname)(t),i.default),o(i,(0,rm.dirname)(t));function o(u,_){for(let l in u){let d=u[l];c(d)?n.set(_+"/"+l,d):typeof d=="object"&&o(d,_+"/"+l)}}a(o,"recurseForResources");function c(u){return typeof u=="function"&&(u.get||u.put||u.post||u.delete)}return a(c,"isResource"),s}var rm,Lb=Re(()=>{tm();rm=require("path");a(m$,"handleFile")});var im={};Fe(im,{start:()=>p$});function p$({resources:e}){e.set("login",sm),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var sm,Mb=Re(()=>{cn();a(p$,"start");sm=class extends $t{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var Gb={};Fe(Gb,{parse:()=>am,streamAsJSON:()=>Lc,stringify:()=>qi});function Lc(e){return new om({value:e})}function Pb(e){return console.error(e),JSON.stringify(e.toString())}function Ub(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function qi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===xb)return Hb(e);if(t.resolution)return t.resolution.then(()=>qi(e));throw t}}function Hb(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=Hb(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+qi(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function am(e){return g$.test(e)?S$.parse(e):JSON.parse(e)}var vb,Bb,S$,T$,xb,om,g$,cm=Re(()=>{vb=require("stream"),Bb=H(require("json-bigint-fixes")),S$=(0,Bb.default)({useNativeBigInt:!0}),T$=1e4,xb={};BigInt.prototype.toJSON=function(){throw xb};a(Lc,"streamAsJSON");om=class extends vb.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),Pb)}catch(s){yield Pb(s)}else yield qi(t)}else yield qi(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);Ub(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>T$?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 Ub(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(Pb,"handleError");a(Ub,"when");a(qi,"stringify");a(Hb,"jsStringify");g$=/[[,:]\s*-?\d{16,}/;a(am,"parse")});var jb=g((zce,Xb)=>{"use strict";var um=require("recursive-iterator"),R$=require("alasql"),lm=require("clone"),qb=z(),{handleHDBError:Fb,hdb_errors:A$}=se(),{HDB_ERROR_MSGS:kb,HTTP_STATUS_CODES:Vb}=A$,{getDatabases:O$}=(Ae(),ie(ke)),b$=["DISTINCT_ARRAY"],$b=Symbol("validateTables"),_m=Symbol("validateTable"),Qce=Symbol("getAllColumns"),Yb=Symbol("validateAllColumns"),y_=Symbol("findColumn"),Kb=Symbol("validateOrderBy"),Mc=Symbol("validateSegment"),dm=Symbol("validateColumn"),Wb=Symbol("setColumnsForTable"),Qb=Symbol("checkColumnsForAsterisk"),zb=Symbol("validateGroupBy"),Jb=Symbol("hasColumns"),fm=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[$b](),this[Qb](),this[Yb]()}[$b](){if(this[Jb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[_m](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[_m](t.table)})}}[Jb](){let t=!1,r=new um(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[_m](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=O$();if(!r[t.databaseid])throw Fb(new Error,kb.SCHEMA_NOT_FOUND(t.databaseid),Vb.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Fb(new Error,kb.TABLE_NOT_FOUND(t.databaseid,t.tableid),Vb.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=lm(s);i.table=lm(t),this.attributes.push(i)})}[y_](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)}[Qb](){let t=new um(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Wb](r.tableid)}[Wb](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new R$.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Yb](){this[Mc](this.statement.columns,!1),this[Mc](this.statement.joins,!1),this[Mc](this.statement.where,!1),this[zb](this.statement.group,!1),this[Mc](this.statement.order,!0)}[Mc](t,r){if(!t)return;let n=new um(t),s=[];for(let{node:i,path:o}of n)!qb.isEmpty(i)&&!qb.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Kb](i):s.push(this[dm](i)));return s}[zb](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&b$.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=lm(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[y_](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[y_](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.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`}[Kb](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[dm](t)}[dm](t){let r=this[y_](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};Xb.exports=fm});var ey=g((Xce,Zb)=>{"use strict";var Em=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")}};Zb.exports=Em});var ry=g((Zce,ty)=>{"use strict";var hm=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};ty.exports=hm});var oy={};Fe(oy,{HAS_EXPIRATION:()=>Am,LAST_TIMESTAMP_PLACEHOLDER:()=>vc,LOCAL_TIMESTAMP:()=>y$,METADATA:()=>Pc,NO_TIMESTAMP:()=>pm,PENDING_LOCAL_TIME:()=>Om,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Rm,RecordEncoder:()=>gm,TIMESTAMP_ASSIGN_LAST:()=>I$,TIMESTAMP_ASSIGN_NEW:()=>sy,TIMESTAMP_ASSIGN_PREVIOUS:()=>iy,TIMESTAMP_PLACEHOLDER:()=>N_,TIMESTAMP_RECORD_PREVIOUS:()=>Sm,getUpdateRecord:()=>bm,handleLocalTimeForGets:()=>D_});function C$(){return Uc[0]=Uc[0]^64,N$.getFloat64(0)}function D_(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),u=c?.value,_=u?.[Pc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[Pc]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[Pc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Fi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Fi.length;u++){let _=Fi[u].deref();(!_||_.isDone||_.isCommitted)&&Fi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function bm(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",E,f){if(E||u==null?Yo=i?.localTime?Sm|iy:pm:Yo=u?i?.localTime?Sm|16384:sy|16384:pm,l>0&&(c|=Am),w_=c,Tm=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Yo>0},p;try{E&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(u){let T=_?.user?.username;if(f&&(I_=e.encoder.encode(f)),E&&i?.localTime){let A=i?.localTime,b=r.get(A);if(b){let I=vt(b).previousLocalTime;return r.put(A,C_(o,t,n,I,T,d,I_),{ifVersion:p}),S}}r.put(vc,C_(o,t,n,i?.localTime?1:0,T,d,I_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var ny,mm,N_,vc,Rm,y$,Pc,Uc,N$,pm,sy,I$,iy,Sm,Am,Om,w$,I_,Yo,w_,Tm,gm,Fi,Bc=Re(()=>{ny=require("msgpackr");ni();mm=H($()),N_=new Uint8Array([1,1,1,1,4,64,0,0]),vc=new Uint8Array([1,1,1,1,1,0,0,0]),Rm=new Uint8Array([1,1,1,1,3,64,0,0]),y$=Symbol("local-timestamp"),Pc=Symbol("metadata"),Uc=new Uint8Array(8),N$=new DataView(Uc.buffer,0,8),pm=0,sy=0,I$=1,iy=3,Sm=4,Am=16,Om=1,Yo=0,w_=-1,Tm=0,gm=class extends ny.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(Yo||w_>=0){let i=0,o=Yo;o&&(i+=8,Yo=0);let c=w_,u=Tm;c>=0&&(i+=2,w_=-1,u&&(i+=8,Tm=0));let _=w$=r.call(this,n,s|2048|i);I_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(N_[4]=o,N_[5]=o>>8,_.set(N_,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,u;if(i===2){if(t.copy)t.copy(Uc,0,c),c+=8;else for(let d=0;d<8;d++)Uc[d]=t[c++];u=C$(),i=t[c]}let _;i<32&&(o=i,c+=2,o&Am&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,s),s-c);return{localTime:u,value:l,[Pc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(C$,"getTimestamp");a(D_,"handleLocalTimeForGets");Fi=[];setInterval(()=>{for(let e=0;e<Fi.length;e++){let t=Fi[e].deref();!t||t.isDone||t.isCommitted?Fi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(mm.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):mm.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(bm,"getUpdateRecord")});var xc=g((sue,cy)=>{"use strict";var ay=ee(),D$=P(),{RecordEncoder:L$}=(Bc(),ie(oy)),nue=require("fs");ay.initSync();var M$=ay.get(D$.CONFIG_PARAMS.STORAGE_CACHING)!==!1,ym=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=M$&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:L$})}};cy.exports=ym});var Hc=g((oue,uy)=>{"use strict";var Hr=ee(),un=P();Hr.initSync();var L_=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Hr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Hr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Hr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Hr.get(un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Hr.get(un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Hr.get(un.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Hr.get(un.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Hr.get(un.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};uy.exports=L_;L_.MAX_DBS=1e4});var ze=g((cue,Ty)=>{"use strict";var Im=require("lmdb"),wn=require("fs-extra"),Gr=require("path"),M_=Br(),dy=$(),_r=vr().LMDB_ERRORS_ENUM,P_=ry(),wm=xc(),fy=Hc(),si=ft(),ly=P(),{table:P$,resetDatabases:U$}=(Ae(),ie(ke)),_y=ee(),Cn=si.INTERNAL_DBIS_NAME,Ey=si.DBI_DEFINITION_NAME,v$="data.mdb",B$="lock.mdb",Gc=".mdb",x$="-lock",Nm=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ln(t,r),this.key_type=this.dbi[si.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[si.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new Im.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function U_(e,t){if(e===void 0)throw new Error(_r.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(_r.ENV_NAME_REQUIRED)}a(U_,"pathEnvNameValidation");async function Cm(e,t,r=!0){try{await wn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(_r.INVALID_BASE_PATH):n}try{let n=Gr.join(e,t+Gc);return await wn.access(n,wn.constants.R_OK|wn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await wn.access(Gr.join(e,t,v$),wn.constants.R_OK|wn.constants.F_OK),Gr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(_r.INVALID_ENVIRONMENT)}else throw new Error(_r.INVALID_ENVIRONMENT);throw n}}a(Cm,"validateEnvironmentPath");function v_(e,t){if(M_.validateEnv(e),t===void 0)throw new Error(_r.DBI_NAME_REQUIRED)}a(v_,"validateEnvDBIName");async function H$(e,t,r=!1,n=!1){U_(e,t);let s=Gr.basename(e);t=t.toString();let i=_y.get(ly.CONFIG_PARAMS.DATABASES);i||_y.setProperty(ly.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Cm(e,t,n),hy(e,t,r)}catch(o){if(o.message===_r.INVALID_ENVIRONMENT){let c=Gr.join(e,t);await wn.mkdirp(n?c:e);let u=new fy(n?c:c+Gc,!1),_=Im.open(u);_.dbis=Object.create(null);let l=new wm(!1);_.openDB(Cn,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Dm(e,t,r);return _[si.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(H$,"createEnvironment");async function G$(e,t,r,n=!0){U_(e,t),t=t.toString();let s=Gr.join(e,t);return P$({table:t,database:Gr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(G$,"copyEnvironment");async function hy(e,t,r=!1){U_(e,t),t=t.toString();let n=Dm(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await Cm(e,t),i=Gr.join(e,t+Gc),o=s!=i,c=new fy(s,o),u=Im.open(c);u.dbis=Object.create(null);let _=py(u);for(let l=0;l<_.length;l++)ln(u,_[l]);return u[si.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(hy,"openEnvironment");async function q$(e,t,r=!1){U_(e,t),t=t.toString();let n=Gr.join(e,t+Gc),s=await Cm(e,t);if(global.lmdb_map!==void 0){let i=Dm(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await my(o),delete global.lmdb_map[i]}}await wn.remove(s),await wn.remove(s===n?s+x$:Gr.join(Gr.dirname(s),B$))}a(q$,"deleteEnvironment");async function my(e){M_.validateEnv(e);let t=e[si.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(my,"closeEnvironment");function Dm(e,t,r=!1){let s=`${Gr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(Dm,"getCachedEnvironmentName");function F$(e){M_.validateEnv(e);let t=Object.create(null),r=ln(e,Cn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Cn)try{t[n]=Object.assign(new P_,s)}catch{dy.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(F$,"listDBIDefinitions");function py(e){M_.validateEnv(e);let t=[],r=ln(e,Cn);for(let{key:n}of r.getRange({start:!1}))n!==Cn&&t.push(n);return t}a(py,"listDBIs");function k$(e,t){let n=ln(e,Cn).getEntry(t),s=new P_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{dy.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(k$,"getDBIDefinition");function Sy(e,t,r,n=!r){if(v_(e,t),t=t.toString(),t===Cn)throw new Error(_r.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ln(e,t)}catch(s){if(s.message===_r.DBI_DOES_NOT_EXIST){let i=new wm(r,n===!0),o=e.openDB(t,i),c=new P_(r===!0,n);return o[Ey]=c,ln(e,Cn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(Sy,"createDBI");function ln(e,t){if(v_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Cn?r=k$(e,t):r=new P_,r===void 0)throw new Error(_r.DBI_DOES_NOT_EXIST);let n;try{let s=new wm(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(_r.DBI_DOES_NOT_EXIST):s}return n[Ey]=r,e.dbis[t]=n,n}a(ln,"openDBI");function V$(e,t){v_(e,t),t=t.toString();let r=ln(e,t),n=r.getStats();return r[si.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(V$,"statDBI");async function $$(e,t){try{let r=Gr.join(e,t+Gc);return(await wn.stat(r)).size}catch{throw new Error(_r.INVALID_ENVIRONMENT)}}a($$,"environmentDataSize");function Y$(e,t){if(v_(e,t),t=t.toString(),t===Cn)throw new Error(_r.CANNOT_DROP_INTERNAL_DBIS_NAME);ln(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ln(e,Cn).removeSync(t)}a(Y$,"dropDBI");function K$(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ln(e,i)}catch(o){if(o.message===_r.DBI_DOES_NOT_EXIST)Sy(e,i,i!==t,i===t),n=!0;else throw o}}n&&U$()}a(K$,"initializeDBIs");Ty.exports={openDBI:ln,openEnvironment:hy,createEnvironment:H$,listDBIs:py,listDBIDefinitions:F$,createDBI:Sy,dropDBI:Y$,statDBI:V$,deleteEnvironment:q$,initializeDBIs:K$,TransactionCursor:Nm,environmentDataSize:$$,copyEnvironment:G$,closeEnvironment:my}});var Ry=g((lue,gy)=>{"use strict";var Lm=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};gy.exports=Lm});var Oy=g((due,Ay)=>{"use strict";var Mm=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};Ay.exports=Mm});var yy=g((Eue,by)=>{"use strict";var Pm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};by.exports=Pm});var Ko=g((Tue,wy)=>{"use strict";var W$=ze(),Q$=Ry(),z$=Oy(),J$=yy(),zn=Br(),qc=vr().LMDB_ERRORS_ENUM,X$=ft(),Rs=P(),j$=z(),Z$=require("uuid"),mue=require("lmdb"),{handleHDBError:e1,hdb_errors:t1}=se(),{OVERFLOW_MARKER:pue,MAX_SEARCH_KEY_LENGTH:Sue}=X$,Ny=ee();Ny.initSync();var B_=Ny.get(Rs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Um=Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ki=Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function r1(e,t,r,n,s=zn.getNextMonotonicTime()){Hm(e,t,r,n),vm(e,t,r);let i=new Q$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];Iy(_,!0,s);let l=n1(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Bm(o,c,n,i,s)}a(r1,"insertRecords");function n1(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Rs.FUNC_VAL],n[o]=c)}let u=zn.getIndexedValues(c),_=e.dbis[o];if(u){B_&&_.prefetch(u.map(l=>({key:l,value:s})),x_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}B_&&e.dbis[t].prefetch([s],x_),e.dbis[t].put(s,n,n[ki])})}a(n1,"insertRecord");function s1(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(s1,"removeSkippedRecords");function Iy(e,t,r){let n=r>0;(n||!Number.isInteger(e[ki]))&&(e[ki]=r||(r=zn.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[Um]))&&(e[Um]=r||zn.getNextMonotonicTime()):delete e[Um]}a(Iy,"setTimestamps");function vm(e,t,r){r.indexOf(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),W$.initializeDBIs(e,t,r)}a(vm,"initializeTransaction");async function i1(e,t,r,n,s=zn.getNextMonotonicTime()){Hm(e,t,r,n),vm(e,t,r);let i=new z$,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],E;try{E=xm(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(E),u.push(d)}return Bm(c,u,n,i,s,o)}a(i1,"updateRecords");async function o1(e,t,r,n,s=zn.getNextMonotonicTime()){try{Hm(e,t,r,n)}catch(u){throw e1(u,u.message,t1.HTTP_STATUS_CODES.BAD_REQUEST)}vm(e,t,r);let i=new J$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;j$.isEmpty(_[t])?(l=Z$.v4(),_[t]=l):l=_[t];let d=xm(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return Bm(o,c,n,i,s)}a(o1,"upsertRecords");async function Bm(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||zn.getNextMonotonicTime(),s1(r,i),n}a(Bm,"finalizeWrite");function xm(e,t,r,n,s,i=!1,o){let c=e.dbis[t],u=c.getEntry(n),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(Iy(r,!l,o),Number.isInteger(r[ki])&&_[ki]>r[ki])return!1;l&&s.original_records.push(_);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 T=_[h];if(typeof p=="function"){let b=p([[_]]);Array.isArray(b)&&(p=b[0][Rs.FUNC_VAL],r[h]=p)}if(p===T)continue;let A=zn.getIndexedValues(T);if(A){B_&&S.prefetch(A.map(b=>({key:b,value:n})),x_);for(let b=0,I=A.length;b<I;b++)S.remove(A[b],n)}if(A=zn.getIndexedValues(p),A){B_&&S.prefetch(A.map(b=>({key:b,value:n})),x_);for(let b=0,I=A.length;b<I;b++)S.put(A[b],n)}}let f=Object.assign({},_,r);c.put(n,f,f[ki])},"do_put");return u?d=c.ifVersion(n,u.version,E):d=c.ifNoExists(n,E),d.then(f=>f?!0:xm(e,t,r,n,s,i,o))}a(xm,"updateUpsertRecord");function a1(e,t,r){if(zn.validateEnv(e),t===void 0)throw new Error(qc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(qc.WRITE_ATTRIBUTES_REQUIRED):new Error(qc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(a1,"validateBasic");function Hm(e,t,r,n){if(a1(e,t,r),!Array.isArray(n))throw n===void 0?new Error(qc.RECORDS_REQUIRED):new Error(qc.RECORDS_MUST_BE_ARRAY)}a(Hm,"validateWrite");function x_(){}a(x_,"noop");wy.exports={insertRecords:r1,updateRecords:i1,upsertRecords:o1}});var Vi=g((Rue,c1)=>{c1.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var Xn=g((Aue,Ly)=>{"use strict";var Dy=z(),Cy=P(),Wo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Jn=require("joi"),ii={schema_format:{pattern:Wo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},u1=Jn.alternatives(Jn.string().min(1).max(ii.schema_length.maximum).pattern(Wo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),Jn.number(),Jn.array()).required(),l1=Jn.alternatives(Jn.string().min(1).max(ii.schema_length.maximum).pattern(Wo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),Jn.number()),_1=Jn.alternatives(Jn.string().min(1).max(ii.schema_length.maximum).pattern(Wo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),Jn.number()).required();function d1(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ii.schema_length.maximum?`'${e}' maximum of 250 characters`:Wo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(d1,"checkValidTable");function f1(e,t){return Dy.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(f1,"validateSchemaExists");function E1(e,t){let r=t.state.ancestors[0].schema;return Dy.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(E1,"validateTableExists");function h1(e,t){return e.toLowerCase()===Cy.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Cy.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(h1,"validateSchemaName");Ly.exports={common_validators:ii,schema_regex:Wo,hdb_schema_table:u1,validateSchemaExists:f1,validateTableExists:E1,validateSchemaName:h1,checkValidTable:d1,hdb_database:l1,hdb_table:_1}});var je=g((bue,My)=>{"use strict";var dr=require("validate.js");dr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||dr.validators.type.checks[t](e)?null:` must be a '${t}' value`};dr.validators.type.checks={Object:function(e){return dr.isObject(e)&&!dr.isArray(e)},Array:dr.isArray,Integer:dr.isInteger,Number:dr.isNumber,String:dr.isString,Date:dr.isDate,Boolean:function(e){return typeof e=="boolean"}};dr.validators.hasValidFileExt=function(e,t){return dr.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};My.exports={validateObject:m1,validateObjectAsync:p1,validateBySchema:S1};function m1(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=dr(e,t,{format:"flat"});return r?new Error(r):null}a(m1,"validateObject");async function p1(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await dr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(p1,"validateObjectAsync");function S1(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(S1,"validateBySchema")});var H_=g((Nue,Py)=>{var{common_validators:jn}=Xn(),kc=je(),Fc="is required",gt={database:{presence:!1,format:jn.schema_format,length:jn.schema_length},schema:{presence:!1,format:jn.schema_format,length:jn.schema_length},table:{presence:!0,format:jn.schema_format,length:jn.schema_length},attribute:{presence:!0,format:jn.schema_format,length:jn.schema_length},hash_attribute:{presence:!0,format:jn.schema_format,length:jn.schema_length}};function Vc(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(Vc,"makeAttributesStrings");function T1(e){return e=Vc(e),gt.table.presence=!1,gt.attribute.presence=!1,gt.hash_attribute.presence=!1,kc.validateObject(e,gt)}a(T1,"schema_object");function g1(e){return e=Vc(e),gt.table.presence={message:Fc},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,kc.validateObject(e,gt)}a(g1,"table_object");function R1(e){return e=Vc(e),gt.table.presence={message:Fc},gt.attribute.presence=!1,kc.validateObject(e,gt)}a(R1,"create_table_object");function A1(e){return e=Vc(e),gt.table.presence={message:Fc},gt.attribute.presence={message:Fc},gt.hash_attribute.presence=!1,kc.validateObject(e,gt)}a(A1,"attribute_object");function O1(e){return e=Vc(e),gt.table.presence={message:Fc},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,kc.validateObject(e,gt)}a(O1,"describe_table");function b1(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(b1,"validateTableResidence");Py.exports={schema_object:T1,create_table_object:R1,table_object:g1,attribute_object:A1,describe_table:O1,validateTableResidence:b1}});var vy=g((wue,Uy)=>{"use strict";var y1=require("uuid"),Gm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||y1.v4(),this.schema_table=`${this.schema}.${this.table}`}};Uy.exports=Gm});var G_=g((Due,By)=>{"use strict";var N1=vy(),qm=class extends N1{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};By.exports=qm});var Hy=g((Mue,xy)=>{"use strict";xy.exports=w1;var I1="inserted";function w1(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===I1?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(w1,"returnObject")});var q_=g((Uue,Vy)=>{"use strict";var C1=P(),Fm=ze(),D1=Ko(),{getSystemSchemaPath:L1,getSchemaPath:M1}=Xe(),P1=Vi(),U1=H_(),v1=G_(),B1=Hy(),{handleHDBError:Gy,hdb_errors:Fy}=se(),qy=z(),{HTTP_STATUS_CODES:x1}=Fy,km=P1.hdb_attribute,ky=[];for(let e=0;e<km.attributes.length;e++)ky.push(km.attributes[e].attribute);var H1="inserted";Vy.exports=G1;async function G1(e){let t=U1.attribute_object(e);if(t)throw Gy(new Error,t.message,Fy.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&qy.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Gy(new Error,r,x1.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=qy.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new v1(e.schema,e.table,e.attribute,e.id);try{let i=await Fm.openEnvironment(M1(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}`);Fm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Fm.openEnvironment(L1(),C1.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await D1.insertRecords(o,km.hash_attribute,ky,[s]);return B1(H1,c,{records:[s]},u)}catch(i){throw i}}a(G1,"lmdbCreateAttribute")});var $m=g((Bue,Yy)=>{var{hdb_table:q1,hdb_database:$y}=Xn(),F1=je(),Vm=require("joi"),k1={undefined:"undefined",null:"null"},V1=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||k1[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),$1=Vm.object({database:$y,schema:$y,table:q1,records:Vm.array().items(Vm.object().custom(V1)).required()});Yy.exports=function(e){return F1.validateBySchema(e,$1)}});var $c=g((Gue,Wy)=>{"use strict";var As=z(),Ky=$(),Hue=$m(),{getDatabases:Y1}=(Ae(),ie(ke)),{ClientError:$i}=se();Wy.exports=K1;function K1(e){if(As.isEmpty(e))throw new $i("invalid update parameters defined.");if(As.isEmptyOrZeroLength(e.schema))throw new $i("invalid schema specified.");if(As.isEmptyOrZeroLength(e.table))throw new $i("invalid table specified.");if(!Array.isArray(e.records))throw new $i("records must be an array");let t=Y1()[e.schema]?.[e.table];if(As.isEmpty(t))throw new $i(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&As.isEmptyOrZeroLength(o[r]))throw Ky.error("a valid hash attribute must be provided with update record:",o),new $i("a valid hash attribute must be provided with update record, check log for more info");if(!As.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Ky.error(`a valid hash value must be provided with ${e.operation} record:`,o),new $i(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!As.isEmpty(o[r])&&o[r]!==""&&n.has(As.autoCast(o[r]))&&(o.skip=!0),n.add(As.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(K1,"insertUpdateValidate")});var zy=g((Fue,Qy)=>{"use strict";var Ym=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};Qy.exports=Ym});var jy=g((Vue,Xy)=>{"use strict";var Km=ze(),W1=$(),Jy=vr().LMDB_ERRORS_ENUM;Xy.exports=Q1;async function Q1(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 Km.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==Jy.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await Km.closeEnvironment(global.lmdb_map[n]),await Km.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==Jy.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){W1.error(t)}}a(Q1,"cleanLMDBMap")});var Os=g((Yue,rN)=>{"use strict";var Yc=require("crypto"),z1=ee(),{CONFIG_PARAMS:J1}=P(),eN="aes-256-cbc",X1=32,j1=16,Wm=64,tN=32,Z1=Wm+tN,Zy=new Map;rN.exports={encrypt:eY,decrypt:tY,createNatsTableStreamName:rY};function eY(e){let t=Yc.randomBytes(X1),r=Yc.randomBytes(j1),n=Yc.createCipheriv(eN,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(eY,"encrypt");function tY(e){let t=e.substr(0,Wm),r=e.substr(Wm,tN),n=e.substr(Z1,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Yc.createDecipheriv(eN,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(tY,"decrypt");function rY(e,t){let r=z1.get(J1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=Zy.get(r);return n||(n=Yc.createHash("md5").update(r).digest("hex"),Zy.set(r,n)),n}a(rY,"createNatsTableStreamName")});var bs=g((Que,sN)=>{"use strict";var Wue=qr(),Kc=$(),nN=H_(),nY=Os(),F_=z(),{handleHDBError:k_,hdb_errors:sY}=se(),{HDB_ERROR_MSGS:V_,HTTP_STATUS_CODES:Qm}=sY,iY=ee();iY.initSync();var{getDatabases:zm}=(Ae(),ie(ke)),oY=require("fs-extra");sN.exports={describeAll:aY,describeTable:$_,describeSchema:cY};async function aY(e={}){try{let t=F_.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=zm(),o={},c={},u=[],_=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let E=i[d];for(let f in E)try{let h;if(t||s||r)h=await $_({schema:d,table:f,exact_count:_});else if(n&&n[d].describe&&n[d].tables[f].describe){let p=n[d].tables[f].attribute_permissions;h=await $_({schema:d,table:f,exact_count:_},p)}h&&u.push(h)}catch(h){Kc.error(h)}}let l={};for(let d in u)t||s||r?(l[u[d].schema]==null&&(l[u[d].schema]={}),l[u[d].schema][u[d].name]=u[d],o[u[d].schema]&&delete o[u[d].schema]):c[u[d].schema]&&(l[u[d].schema]==null&&(l[u[d].schema]={}),l[u[d].schema][u[d].name]=u[d],o[u[d].schema]&&delete o[u[d].schema]);for(let d in o)t||s||r?l[d]={}:c[d]&&(l[d]={});return l}catch(t){return Kc.error("Got an error in describeAll"),Kc.error(t),k_(new Error,V_.DESCRIBE_ALL_ERR)}}a(aY,"describeAll");async function $_(e,t){F_.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=nN.describe_table(e);if(i)throw i;let c=zm()[r];if(!c)throw k_(new Error,V_.SCHEMA_NOT_FOUND(e.schema),Qm.NOT_FOUND);let u=c[n];if(!u)throw k_(new Error,V_.TABLE_NOT_FOUND(e.schema,e.table),Qm.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(h=>({type:h.type,name:h.name})):void 0}))}a(_,"pushAtt");let l=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),u.attributes.forEach(h=>{f[h.name]&&_(h)})}else u.attributes?.forEach(f=>_(f));let d;try{d=(await oY.stat(u.primaryStore.env.path)).size}catch(f){Kc.warn("unable to get database size",f)}let E={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l,db_size:d};E.clustering_stream_name=nY.createNatsTableStreamName(E.schema,E.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.estimated_record_range=f.estimatedRange;let h=u.auditStore;if(h)for(let p of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=p[0];if(!E.last_updated_record&&u.indices.__updatedtime__)for(let p of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=p}catch(f){Kc.warn(`unable to stat table dbi due to ${f}`)}return E}a($_,"descTable");async function cY(e){F_.transformReq(e);let t=nN.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 n=e.schema.toString(),i=zm()[n];if(!i)throw k_(new Error,V_.SCHEMA_NOT_FOUND(e.schema),Qm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),F_.isEmpty(u)||u.describe){let _=await $_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(cY,"describeSchema")});var ys=g((jue,uN)=>{var uY=Vi(),{callbackify:oN,promisify:lY}=require("util"),{getDatabases:aN}=(Ae(),ie(ke));uN.exports={setSchemaDataToGlobal:iN,getTableSchema:_Y,getSystemSchema:dY,setSchemaDataToGlobalAsync:lY(iN)};var cN=bs(),Jue=oN(cN.describeAll),Xue=oN(cN.describeTable);function iN(e){global.hdb_schema=aN(),e&&e()}a(iN,"setSchemaDataToGlobal");function _Y(e,t,r){let n=aN()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(_Y,"getTableSchema");function dY(){return uY}a(dY,"getSystemSchema")});var Fr=g((ele,fN)=>{"use strict";var K_=$m(),Yt=z(),fY=require("util"),W_=Dn(),EY=ys(),lN=$(),{handleHDBError:Yi,hdb_errors:hY}=se(),{HTTP_STATUS_CODES:Ki}=hY,mY=fY.promisify(EY.getTableSchema),pY="updated",_N="inserted",dN="upserted";fN.exports={insert:TY,update:gY,upsert:RY,validation:SY,flush:AY};async function SY(e){if(Yt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Yt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Yt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await mY(e.schema,e.table),r=K_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Yt.isEmptyOrZeroLength(c[n]))throw lN.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Yt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw lN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Yt.isEmpty(c[n])&&c[n]!==""&&s.has(Yt.autoCast(c[n]))&&(c.skip=!0),s.add(Yt.autoCast(c[n]));for(let u in c)i[u]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(SY,"validation");async function TY(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=K_(e);if(t)throw Yi(new Error,t.message,Ki.BAD_REQUEST);Yt.transformReq(e);let r=Yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yi(new Error,r,Ki.BAD_REQUEST);let n=await W_.createRecords(e);return Y_(_N,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(TY,"insertData");async function gY(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=K_(e);if(t)throw Yi(new Error,t.message,Ki.BAD_REQUEST);Yt.transformReq(e);let r=Yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yi(new Error,r,Ki.BAD_REQUEST);let n=await W_.updateRecords(e);return Yt.isEmpty(n.existing_rows)?Y_(pY,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Y_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(gY,"updateData");async function RY(e){if(e.operation!=="upsert")throw Yi(new Error,"invalid operation, must be upsert",Ki.INTERNAL_SERVER_ERROR);let t=K_(e);if(t)throw Yi(new Error,t.message,Ki.BAD_REQUEST);Yt.transformReq(e);let r=Yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yi(new Error,r,Ki.BAD_REQUEST);let n=await W_.upsertRecords(e);return Y_(dN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(RY,"upsertData");function Y_(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===_N?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===dN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Y_,"returnObject");function AY(e){return Yt.transformReq(e),W_.flush(e.schema,e.table)}a(AY,"flush")});var Xm=g((rle,mN)=>{var OY=je(),Jm=require("joi"),{hdb_table:bY,hdb_database:EN}=Xn(),hN={schema:EN,database:EN,table:bY},yY={date:Jm.date().iso().required()},NY={timestamp:Jm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};mN.exports=function(e,t){let r=t==="timestamp"?{...hN,...NY}:{...hN,...yY},n=Jm.object(r);return OY.validateBySchema(e,n)}});var TN=g((nle,SN)=>{var IY=je(),jm=require("joi"),{hdb_table:wY,hdb_database:pN}=Xn(),CY=jm.object({schema:pN,database:pN,table:wY,hash_values:jm.array().required(),ids:jm.array()});SN.exports=function(e){return IY.validateBySchema(e,CY)}});var RN=g((sle,gN)=>{"use strict";var Zm=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},ep=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},tp=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};gN.exports={InsertObject:Zm,NoSQLSeachObject:ep,DeleteResponseObject:tp}});var ci=g((ole,NN)=>{"use strict";var ON=Xm(),DY=TN(),Wi=z(),AN=require("moment"),bN=$(),{promisify:LY,callbackify:MY}=require("util"),Qi=P(),PY=ys(),rp=LY(PY.getTableSchema),np=Dn(),{DeleteResponseObject:UY}=RN(),{handleHDBError:oi,hdb_errors:vY}=se(),{HDB_ERROR_MSGS:Q_,HTTP_STATUS_CODES:ai}=vY,BY="records successfully deleted",xY=MY(yN);NN.exports={delete:xY,deleteRecord:yN,deleteFilesBefore:HY,deleteAuditLogsBefore:GY};async function HY(e){let t=ON(e,"date");if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);if(Wi.transformReq(e),!AN(e.date,AN.ISO_8601).isValid())throw oi(new Error,Q_.INVALID_DATE,ai.BAD_REQUEST,Qi.LOG_LEVELS.ERROR,Q_.INVALID_DATE,!0);let n=Wi.checkSchemaTableExist(e.schema,e.table);if(n)throw oi(new Error,n,ai.NOT_FOUND,Qi.LOG_LEVELS.ERROR,n,!0);let s=await np.deleteRecordsBefore(e);if(await rp(e.schema,e.table),bN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(HY,"deleteFilesBefore");async function GY(e){let t=ON(e,"timestamp");if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);if(Wi.transformReq(e),isNaN(e.timestamp))throw oi(new Error,Q_.INVALID_VALUE("Timestamp"),ai.BAD_REQUEST,Qi.LOG_LEVELS.ERROR,Q_.INVALID_VALUE("Timestamp"),!0);let r=Wi.checkSchemaTableExist(e.schema,e.table);if(r)throw oi(new Error,r,ai.NOT_FOUND,Qi.LOG_LEVELS.ERROR,r,!0);let n=await np.deleteAuditLogsBefore(e);return await rp(e.schema,e.table),bN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(GY,"deleteAuditLogsBefore");async function yN(e){e.ids&&(e.hash_values=e.ids);let t=DY(e);if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);Wi.transformReq(e);let r=Wi.checkSchemaTableExist(e.schema,e.table);if(r)throw oi(new Error,r,ai.NOT_FOUND,Qi.LOG_LEVELS.ERROR,r,!0);try{await rp(e.schema,e.table);let n=await np.deleteRecords(e);return Wi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${BY}`),n}catch(n){if(n.message===Qi.SEARCH_NOT_FOUND_MESSAGE){let s=new UY;return s.message=Qi.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(yN,"deleteRecord")});var z_=g((cle,CN)=>{var qY=require("crypto"),IN=9;function FY(e){let t=VY(IN),r=wN(e+t);return t+r}a(FY,"createHash");function kY(e,t){let r=e?.substr(0,IN),n=r+wN(t+r);return e===n}a(kY,"validateHash");function VY(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(VY,"generateSalt");function wN(e){return qY.createHash("md5").update(e).digest("hex")}a(wN,"md5");CN.exports={hash:FY,validate:kY}});var LN=g((lle,DN)=>{var sp=je(),Zt={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 $Y(e){return Zt.password.presence=!0,Zt.username.presence=!0,Zt.role.presence=!0,Zt.active.presence=!0,sp.validateObject(e,Zt)}a($Y,"addUserValidation");function YY(e){return Zt.password.presence=!1,Zt.username.presence=!0,Zt.role.presence=!1,Zt.active.presence=!1,sp.validateObject(e,Zt)}a(YY,"alterUserValidation");function KY(e){return Zt.password.presence=!1,Zt.username.presence=!0,Zt.role.presence=!1,Zt.active.presence=!1,sp.validateObject(e,Zt)}a(KY,"dropUserValidation");DN.exports={addUserValidation:$Y,alterUserValidation:YY,dropUserValidation:KY}});var Ve=g((fle,PN)=>{"use strict";var{platform:dle}=require("os"),WY="nats-server.zip",ip="nats-server",QY=process.platform==="win32"?`${ip}.exe`:ip,zY=/^[^\s.,*>]+$/,MN="__request__",JY=a(e=>`${e}.${MN}`,"REQUEST_SUBJECT"),XY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},jY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},ZY={HUB:"hub.pid",LEAF:"leaf.pid"},eK={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},tK={SUCCESS:"success",ERROR:"error"},rK={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},nK={TXN:"txn",MSGID:"msgid"},Qo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},sK={[Qo.ERR]:1,[Qo.WRN]:2,[Qo.INF]:3,[Qo.DBG]:4,[Qo.TRC]:5},iK={debug:"-D",trace:"-DVV"};PN.exports={NATS_SERVER_ZIP:WY,NATS_SERVER_NAME:ip,NATS_BINARY_NAME:QY,PID_FILES:ZY,NATS_CONFIG_FILES:jY,SERVER_SUFFIX:eK,NATS_TERM_CONSTRAINTS_RX:zY,REQUEST_SUFFIX:MN,UPDATE_REMOTE_RESPONSE_STATUSES:tK,CLUSTER_STATUS_STATUSES:rK,REQUEST_SUBJECT:JY,SUBJECT_PREFIXES:nK,MSG_HEADERS:XY,LOG_LEVELS:Qo,LOG_LEVEL_FLAGS:iK,LOG_LEVEL_HIERARCHY:sK}});var vN=g((hle,UN)=>{"use strict";var oK={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,`\r
|
|
4
|
+
Caused by:`));else if(typeof _=="object")try{n+=JSON.stringify(_)}catch{n+="Object ["+Object.keys(_)+"]"}else n+=_;c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
|
|
5
|
+
`}a(gs,"createLogRecord");function gc(e){Ss&&kO(e),zn&&process.stdout.write(e)}a(gc,"logStdOut");function h_(e){Ss&&kO(e),zn&&process.stderr.write(e)}a(h_,"logStdErr");function kO(e){lV(),Vo?Hi.appendFileSync(Vo,e):pc.log(e)}a(kO,"logToFile");function kh(){try{Hi.closeSync(Vo)}catch{}Vo=null}a(kh,"closeLogFile");function lV(){if(!Vo){try{if(!Sc)debugger;Vo=Hi.openSync(Sc,"a")}catch(e){pc.error(e)}setTimeout(()=>{kh()},oV).unref()}}a(lV,"openLogFile");function E_(...e){ur[cr]<=ur.info&&gc(gs("info",e))}a(E_,"info");function Vh(...e){ur[cr]<=ur.trace&&gc(gs("trace",e))}a(Vh,"trace");function Tc(...e){ur[cr]<=ur.error&&h_(gs("error",e))}a(Tc,"error");function $h(...e){ur[cr]<=ur.debug&&gc(gs("debug",e))}a($h,"debug");function VO(...e){ur[cr]<=ur.notify&&gc(gs("notify",e))}a(VO,"notify");function $O(...e){ur[cr]<=ur.fatal&&h_(gs("fatal",e))}a($O,"fatal");function Yh(...e){ur[cr]<=ur.warn&&h_(gs("warn",e))}a(Yh,"warn");function _V(e,t,...r){t===GO.STDERR?h_(gs(e,r)):gc(gs(e,r))}a(_V,"logCustomLevel");function dV(){let e;try{e=rV.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Ts.join(e,Tt.HDB_HOME_DIR_NAME,Tt.BOOT_PROPS_FILE_NAME);return Hi.existsSync(t)||(t=Ts.join(Fh,"utility/hdb_boot_properties.file")),t}a(dV,"getPropsFilePath");function fV(e){cr=e}a(fV,"setLogLevel");function BO(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(BO,"autoCastBoolean");function EV(e){try{if(e.includes("config/settings.js")){let o=HO(e);return{level:o.get(Tt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Ts.dirname(o.get(Tt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Tt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Tt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=xO.parseDocument(Hi.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===Tt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(EV,"getLogConfig");function hV(){try{let e=xO.parseDocument(Hi.readFileSync(iV,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(hV,"getDefaultConfig");function mV(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(mV,"AuthAuditLog")});var KO=g((Sce,YO)=>{"use strict";var pV=require("util"),SV=require("path"),TV=require("child_process"),gV=pV.promisify(TV.execFile),RV=1e3*1e3*10;YO.exports={findPs:AV};async function AV(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await gV("ps",["wwxo",`pid,${r}`],{maxBuffer:RV});for(let s of n.trim().split(`
|
|
6
|
+
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.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,n])=>({pid:Number.parseInt(r,10),name:SV.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(AV,"findPs")});var ft=g((gce,QO)=>{"use strict";var OV="__dbis__",bV="__txns__",yV="__environment_name__",NV="__dbi_defintion__",IV={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"},wV=["__createdtime__","__updatedtime__"],CV="\uFFFF",WO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},DV=Object.values(WO);QO.exports={AUDIT_STORE_NAME:bV,INTERNAL_DBIS_NAME:OV,DBI_DEFINITION_NAME:NV,SEARCH_TYPES:IV,TIMESTAMP_NAMES:wV,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:yV,TRANSACTIONS_DBI_NAMES_ENUM:WO,TRANSACTIONS_DBIS:DV,OVERFLOW_MARKER:CV}});var vr=g((Rce,nb)=>{"use strict";var zO=P(),JO=ft(),jO={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},XO=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),ZO={500:XO("There was an error processing your request."),400:"Invalid request"},LV=ZO[jO.INTERNAL_SERVER_ERROR],MV={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.`},PV={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},UV={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"},vV={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 ${JO.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${JO.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"},BV={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${zO.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 ${zO.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"},eb={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"},xV={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."},HV={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`},GV={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"},qV={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},FV={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`},tb={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.`},rb={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}`},kV={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."},VV={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},$V={...eb,...UV,...MV,...xV,...HV,...GV,...qV,...FV,...BV,...tb,...rb,...kV,...VV,...PV};nb.exports={CHECK_LOGS_WRAPPER:XO,HDB_ERROR_MSGS:$V,DEFAULT_ERROR_MSGS:ZO,DEFAULT_ERROR_RESP:LV,HTTP_STATUS_CODES:jO,LMDB_ERRORS_ENUM:vV,AUTHENTICATION_ERROR_MSGS:eb,VALIDATION_ERROR_MSGS:tb,ITC_ERRORS:rb}});var se=g((Oce,ob)=>{"use strict";var $o=vr(),YV=$(),KV=P(),m_=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,sb),this.statusCode=n||$o.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||($o.DEFAULT_ERROR_MSGS[n]?$o.DEFAULT_ERROR_MSGS[n]:$o.DEFAULT_ERROR_MSGS[$o.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&YV[s](i)}},Wh=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}},Qh=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function sb(e,t,r,n=KV.LOG_LEVELS.ERROR,s=null,i=!1){if(ib(e))return e;let o=new m_(e,t,r,n,s);return i&&delete o.stack,o}a(sb,"handleHDBError");function ib(e){return e.__proto__.constructor.name===m_.name}a(ib,"isHDBError");ob.exports={isHDBError:ib,handleHDBError:sb,ClientError:Wh,ServerError:Qh,hdb_errors:$o}});var je=g((yce,fb)=>{"use strict";var yc=P(),WV=z(),lr=ee(),Nc=require("path"),QV=require("minimist"),ab=require("fs-extra"),cb=require("lodash");lr.initSync();var{CONFIG_PARAMS:ri,DATABASES_PARAM_CONFIG:Rc,SYSTEM_SCHEMA_NAME:p_}=yc,Ac,Oc,bc;function ub(){if(Ac!==void 0)return Ac;if(lr.getHdbBasePath()!==void 0)return Ac=lr.get(ri.STORAGE_PATH)||Nc.join(lr.getHdbBasePath(),yc.DATABASES_DIR_NAME),Ac}a(ub,"getBaseSchemaPath");function lb(){if(Oc!==void 0)return Oc;if(lr.getHdbBasePath()!==void 0)return Oc=db(p_),Oc}a(lb,"getSystemSchemaPath");function _b(){if(bc!==void 0)return bc;if(lr.getHdbBasePath()!==void 0)return bc=lr.get(yc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Nc.join(lr.getHdbBasePath(),yc.TRANSACTIONS_DIR_NAME),bc}a(_b,"getTransactionAuditStoreBasePath");function zV(e,t){let r=lr.get(ri.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Nc.join(_b(),e.toString())}a(zV,"getTransactionAuditStorePath");function db(e,t){e=e.toString(),t=t&&t.toString();let r=lr.get(yc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Nc.join(ub(),e)}a(db,"getSchemaPath");function JV(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,QV(process.argv));let n=r[ri.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!WV.isObject(n))throw o;i=n}for(let o of i){let c=o[p_];if(!c)continue;let u=lr.get(ri.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Rc.PATH];if(_)return cb.set(u,[p_,Rc.TABLES,t,Rc.PATH],_),lr.setProperty(ri.DATABASES,u),_;let l=c?.[Rc.PATH];if(l)return cb.set(u,[p_,Rc.PATH],l),lr.setProperty(ri.DATABASES,u),l}}let s=r[ri.STORAGE_PATH.toUpperCase()];if(s){if(!ab.pathExistsSync(s))throw new Error(s+" does not exist");let i=Nc.join(s,e);return ab.mkdirsSync(i),lr.setProperty(ri.STORAGE_PATH,s),i}return lb()}a(JV,"initSystemSchemaPaths");function jV(){Ac=void 0,Oc=void 0,bc=void 0}a(jV,"resetPaths");fb.exports={getBaseSchemaPath:ub,getSystemSchemaPath:lb,getTransactionAuditStorePath:zV,getTransactionAuditStoreBasePath:_b,getSchemaPath:db,initSystemSchemaPaths:JV,resetPaths:jV}});var Br=g((Cce,Sb)=>{"use strict";var XV=vr().LMDB_ERRORS_ENUM,Ice=require("lmdb"),ZV=ft(),wce=require("buffer").Buffer,{OVERFLOW_MARKER:Eb,MAX_SEARCH_KEY_LENGTH:S_}=ZV,hb=["number","string","symbol","boolean","bigint"];function e$(e){if(e=e?.primaryStore||e,!e)throw new Error(XV.ENV_REQUIRED)}a(e$,"validateEnv");function t$(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(t$,"stringifyData");function r$(e){return e instanceof Date?e.valueOf():e}a(r$,"convertKeyValueToWrite");function n$(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(hb.includes(typeof e))return e.length>S_?[e.slice(0,S_)+Eb]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(hb.includes(typeof i))i.length>S_?r.push(i.slice(0,S_)+Eb):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(n$,"getIndexedValues");var T_=0,mb=0;function pb(){mb=Date.now()-performance.now()}a(pb,"adjustStartTime");pb();var s$=6e4;setInterval(pb,s$).unref();function i$(){let e=performance.now()+mb;return e>T_?(T_=e,e):(T_+=488e-6,T_)}a(i$,"getNextMonotonicTime");Sb.exports={validateEnv:e$,stringifyData:t$,convertKeyValueToWrite:r$,getNextMonotonicTime:i$,getIndexedValues:n$}});var Ic=g((Lce,Tb)=>{"use strict";var o$=P().OPERATIONS_ENUM,zh=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=o$.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Tb.exports=zh});var wc=g((Uce,Ob)=>{"use strict";var Pce=Ic(),g_=P(),Jh=z(),gb=$(),a$=require("uuid"),{handleHDBError:R_,hdb_errors:c$}=se(),{HDB_ERROR_MSGS:A_,HTTP_STATUS_CODES:O_}=c$;Ob.exports=Rb;function Rb(e,t,r){for(let s=0;s<t.length;s++)Ab(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];u$(i,r,e.operation)}}a(Rb,"processRows");Rb.validateAttribute=Ab;function Ab(e){if(Buffer.byteLength(String(e))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw R_(new Error,A_.ATTR_NAME_LENGTH_ERR(e),O_.BAD_REQUEST,void 0,void 0,!0);if(Jh.isEmptyOrZeroLength(e)||Jh.isEmpty(e.trim()))throw R_(new Error,A_.ATTR_NAME_NULLISH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(Ab,"validateAttribute");function u$(e,t,r){if(!e.hasOwnProperty(t)||Jh.isEmptyOrZeroLength(e[t])){if(r===g_.OPERATIONS_ENUM.INSERT||r===g_.OPERATIONS_ENUM.UPSERT){e[t]=a$.v4();return}throw gb.error("Update transaction aborted due to record with no hash value:",e),R_(new Error,A_.RECORD_MISSING_HASH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw gb.error(e),R_(new Error,A_.HASH_VAL_LENGTH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(u$,"validateHash")});var bb,In,jh,Cc=Re(()=>{bb=require("events"),In=class extends bb.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new jh;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(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}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)}},jh=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}}}});var Gi={};Fe(Gi,{server:()=>at});var yb,at,_r=Re(()=>{yb=require("../index"),at={};(0,yb._assignPackageExport)("server",at)});var em={};Fe(em,{loadGQLSchema:()=>d$,start:()=>Zh,startOnMainThread:()=>_$});function Zh({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let B=function(U){if(U.kind==="NonNullType"){let Q=B(U.type);return Q.nullable=!1,Q}if(U.kind==="ListType")return{type:"array",elements:B(U.type)};let M={type:U.name?.value};return Object.defineProperty(M,"location",{value:U.loc.startToken}),M};a(B,"getProperty");let T=S.name.value,A=[],b={table:null,database:null,properties:A};E.set(T,b);for(let U of S.directives){if(U.name.value==="table"){for(let F of U.arguments)b[F.name.value]=F.value.value;b.schema&&(b.database=b.schema),b.table||(b.table=T),b.audit&&(b.audit=b.audit!=="false"),b.attributes=b.properties,f.push(b)}if(U.name.value==="sealed"&&(b.sealed=!0),U.name.value==="export"){b.export=!0;for(let F of U.arguments)F.name.value==="name"&&(b.export={name:F.value.value})}}let I=!1;for(let U of S.fields){let F=B(U.type);F.name=U.name.value,A.push(F);for(let M of U.directives)if(M.name.value==="primaryKey")I?console.warn("Can not define two attributes as a primary key"):(F.isPrimaryKey=!0,I=!0);else if(M.name.value==="indexed")F.indexed=!0;else if(M.name.value==="relationship"){let Q={};for(let J of M.arguments)Q[J.name.value]=J.value.value;F.relationship=Q}else if(M.name.value==="createdTime")F.assignCreatedTime=!0;else if(M.name.value==="updatedTime")F.assignUpdatedTime=!0;else if(M.name.value==="expiresAt")F.expiresAt=!0;else if(M.name.value==="allow"){let Q=F.authorizedRoles=[];for(let J of M.arguments)J.name.value==="role"&&Q.push(J.value.value)}}b.type=T,T==="Query"&&(h=b)}function p(S){let T=E.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):l$.includes(S.type)||(0,Nb.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of E.values())for(let T of S.properties)p(T);for(let S of f)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Xh.dirname)(n),S.tableClass):i.set((0,Xh.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var Xh,Nb,l$,_$,d$,Ib=Re(()=>{Xh=require("path");Ae();Nb=H(Qe()),l$=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(Zh,"start");_$=Zh,d$=Zh({ensureTable:Et}).handleFile});async function b_(e){let t=(0,Db.pathToFileURL)(e).toString();return f$?(Dc||(Dc=E$(m$)),(await(await Dc).import(t)).namespace):import(t)}async function E$(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Dc=new Compartment({console,Math,Date,fetch:h$,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,Cb.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:$t,tables:xr,databases:ct})}};let n=await(0,wb.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Dc}function h$(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 m$(){return{Resource:$t,tables:xr}}var wb,Cb,Db,f$,Dc,tm=Re(()=>{cn();Ae();wb=require("fs/promises"),Cb=require("path"),Db=require("url"),f$=!1;a(b_,"secureImport");a(E$,"getCompartment");a(h$,"secureOnlyFetch");a(m$,"getGlobalVars")});var nm={};Fe(nm,{handleFile:()=>p$});async function p$(e,t,r,n){let s=new Map,i=await b_(r);c(i.default)&&n.set((0,rm.dirname)(t),i.default),o(i,(0,rm.dirname)(t));function o(u,_){for(let l in u){let d=u[l];c(d)?n.set(_+"/"+l,d):typeof d=="object"&&o(d,_+"/"+l)}}a(o,"recurseForResources");function c(u){return typeof u=="function"&&(u.get||u.put||u.post||u.delete)}return a(c,"isResource"),s}var rm,Lb=Re(()=>{tm();rm=require("path");a(p$,"handleFile")});var im={};Fe(im,{start:()=>S$});function S$({resources:e}){e.set("login",sm),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var sm,Mb=Re(()=>{cn();a(S$,"start");sm=class extends $t{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var Gb={};Fe(Gb,{parse:()=>am,streamAsJSON:()=>Lc,stringify:()=>qi});function Lc(e){return new om({value:e})}function Pb(e){return console.error(e),JSON.stringify(e.toString())}function Ub(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function qi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===xb)return Hb(e);if(t.resolution)return t.resolution.then(()=>qi(e));throw t}}function Hb(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=Hb(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+qi(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function am(e){return R$.test(e)?T$.parse(e):JSON.parse(e)}var vb,Bb,T$,g$,xb,om,R$,cm=Re(()=>{vb=require("stream"),Bb=H(require("json-bigint-fixes")),T$=(0,Bb.default)({useNativeBigInt:!0}),g$=1e4,xb={};BigInt.prototype.toJSON=function(){throw xb};a(Lc,"streamAsJSON");om=class extends vb.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),Pb)}catch(s){yield Pb(s)}else yield qi(t)}else yield qi(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);Ub(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>g$?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 Ub(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(Pb,"handleError");a(Ub,"when");a(qi,"stringify");a(Hb,"jsStringify");R$=/[[,:]\s*-?\d{16,}/;a(am,"parse")});var Xb=g((Jce,jb)=>{"use strict";var um=require("recursive-iterator"),A$=require("alasql"),lm=require("clone"),qb=z(),{handleHDBError:Fb,hdb_errors:O$}=se(),{HDB_ERROR_MSGS:kb,HTTP_STATUS_CODES:Vb}=O$,{getDatabases:b$}=(Ae(),ie(ke)),y$=["DISTINCT_ARRAY"],$b=Symbol("validateTables"),_m=Symbol("validateTable"),zce=Symbol("getAllColumns"),Yb=Symbol("validateAllColumns"),y_=Symbol("findColumn"),Kb=Symbol("validateOrderBy"),Mc=Symbol("validateSegment"),dm=Symbol("validateColumn"),Wb=Symbol("setColumnsForTable"),Qb=Symbol("checkColumnsForAsterisk"),zb=Symbol("validateGroupBy"),Jb=Symbol("hasColumns"),fm=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[$b](),this[Qb](),this[Yb]()}[$b](){if(this[Jb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[_m](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[_m](t.table)})}}[Jb](){let t=!1,r=new um(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[_m](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=b$();if(!r[t.databaseid])throw Fb(new Error,kb.SCHEMA_NOT_FOUND(t.databaseid),Vb.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Fb(new Error,kb.TABLE_NOT_FOUND(t.databaseid,t.tableid),Vb.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=lm(s);i.table=lm(t),this.attributes.push(i)})}[y_](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)}[Qb](){let t=new um(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Wb](r.tableid)}[Wb](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new A$.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Yb](){this[Mc](this.statement.columns,!1),this[Mc](this.statement.joins,!1),this[Mc](this.statement.where,!1),this[zb](this.statement.group,!1),this[Mc](this.statement.order,!0)}[Mc](t,r){if(!t)return;let n=new um(t),s=[];for(let{node:i,path:o}of n)!qb.isEmpty(i)&&!qb.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Kb](i):s.push(this[dm](i)));return s}[zb](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&y$.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=lm(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[y_](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[y_](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.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`}[Kb](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[dm](t)}[dm](t){let r=this[y_](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};jb.exports=fm});var ey=g((Xce,Zb)=>{"use strict";var Em=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")}};Zb.exports=Em});var ry=g((eue,ty)=>{"use strict";var hm=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};ty.exports=hm});var oy={};Fe(oy,{HAS_EXPIRATION:()=>Am,LAST_TIMESTAMP_PLACEHOLDER:()=>vc,LOCAL_TIMESTAMP:()=>N$,METADATA:()=>Pc,NO_TIMESTAMP:()=>pm,PENDING_LOCAL_TIME:()=>Om,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Rm,RecordEncoder:()=>gm,TIMESTAMP_ASSIGN_LAST:()=>w$,TIMESTAMP_ASSIGN_NEW:()=>sy,TIMESTAMP_ASSIGN_PREVIOUS:()=>iy,TIMESTAMP_PLACEHOLDER:()=>N_,TIMESTAMP_RECORD_PREVIOUS:()=>Sm,getUpdateRecord:()=>bm,handleLocalTimeForGets:()=>D_});function D$(){return Uc[0]=Uc[0]^64,I$.getFloat64(0)}function D_(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),u=c?.value,_=u?.[Pc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[Pc]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[Pc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Fi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Fi.length;u++){let _=Fi[u].deref();(!_||_.isDone||_.isCommitted)&&Fi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function bm(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",E,f){if(E||u==null?Yo=i?.localTime?Sm|iy:pm:Yo=u?i?.localTime?Sm|16384:sy|16384:pm,l>0&&(c|=Am),w_=c,Tm=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Yo>0},p;try{E&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(u){let T=_?.user?.username;if(f&&(I_=e.encoder.encode(f)),E&&i?.localTime){let A=i?.localTime,b=r.get(A);if(b){let I=vt(b).previousLocalTime;return r.put(A,C_(o,t,n,I,T,d,I_),{ifVersion:p}),S}}r.put(vc,C_(o,t,n,i?.localTime?1:0,T,d,I_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var ny,mm,N_,vc,Rm,N$,Pc,Uc,I$,pm,sy,w$,iy,Sm,Am,Om,C$,I_,Yo,w_,Tm,gm,Fi,Bc=Re(()=>{ny=require("msgpackr");ni();mm=H($()),N_=new Uint8Array([1,1,1,1,4,64,0,0]),vc=new Uint8Array([1,1,1,1,1,0,0,0]),Rm=new Uint8Array([1,1,1,1,3,64,0,0]),N$=Symbol("local-timestamp"),Pc=Symbol("metadata"),Uc=new Uint8Array(8),I$=new DataView(Uc.buffer,0,8),pm=0,sy=0,w$=1,iy=3,Sm=4,Am=16,Om=1,Yo=0,w_=-1,Tm=0,gm=class extends ny.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(Yo||w_>=0){let i=0,o=Yo;o&&(i+=8,Yo=0);let c=w_,u=Tm;c>=0&&(i+=2,w_=-1,u&&(i+=8,Tm=0));let _=C$=r.call(this,n,s|2048|i);I_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(N_[4]=o,N_[5]=o>>8,_.set(N_,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,u;if(i===2){if(t.copy)t.copy(Uc,0,c),c+=8;else for(let d=0;d<8;d++)Uc[d]=t[c++];u=D$(),i=t[c]}let _;i<32&&(o=i,c+=2,o&Am&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,s),s-c);return{localTime:u,value:l,[Pc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(D$,"getTimestamp");a(D_,"handleLocalTimeForGets");Fi=[];setInterval(()=>{for(let e=0;e<Fi.length;e++){let t=Fi[e].deref();!t||t.isDone||t.isCommitted?Fi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(mm.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):mm.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(bm,"getUpdateRecord")});var xc=g((iue,cy)=>{"use strict";var ay=ee(),L$=P(),{RecordEncoder:M$}=(Bc(),ie(oy)),sue=require("fs");ay.initSync();var P$=ay.get(L$.CONFIG_PARAMS.STORAGE_CACHING)!==!1,ym=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=P$&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:M$})}};cy.exports=ym});var Hc=g((aue,uy)=>{"use strict";var Hr=ee(),un=P();Hr.initSync();var L_=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Hr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Hr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Hr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Hr.get(un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Hr.get(un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Hr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Hr.get(un.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Hr.get(un.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Hr.get(un.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};uy.exports=L_;L_.MAX_DBS=1e4});var ze=g((uue,Ty)=>{"use strict";var Im=require("lmdb"),wn=require("fs-extra"),Gr=require("path"),M_=Br(),dy=$(),dr=vr().LMDB_ERRORS_ENUM,P_=ry(),wm=xc(),fy=Hc(),si=ft(),ly=P(),{table:U$,resetDatabases:v$}=(Ae(),ie(ke)),_y=ee(),Cn=si.INTERNAL_DBIS_NAME,Ey=si.DBI_DEFINITION_NAME,B$="data.mdb",x$="lock.mdb",Gc=".mdb",H$="-lock",Nm=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ln(t,r),this.key_type=this.dbi[si.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[si.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new Im.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function U_(e,t){if(e===void 0)throw new Error(dr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(dr.ENV_NAME_REQUIRED)}a(U_,"pathEnvNameValidation");async function Cm(e,t,r=!0){try{await wn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(dr.INVALID_BASE_PATH):n}try{let n=Gr.join(e,t+Gc);return await wn.access(n,wn.constants.R_OK|wn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await wn.access(Gr.join(e,t,B$),wn.constants.R_OK|wn.constants.F_OK),Gr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(dr.INVALID_ENVIRONMENT)}else throw new Error(dr.INVALID_ENVIRONMENT);throw n}}a(Cm,"validateEnvironmentPath");function v_(e,t){if(M_.validateEnv(e),t===void 0)throw new Error(dr.DBI_NAME_REQUIRED)}a(v_,"validateEnvDBIName");async function G$(e,t,r=!1,n=!1){U_(e,t);let s=Gr.basename(e);t=t.toString();let i=_y.get(ly.CONFIG_PARAMS.DATABASES);i||_y.setProperty(ly.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Cm(e,t,n),hy(e,t,r)}catch(o){if(o.message===dr.INVALID_ENVIRONMENT){let c=Gr.join(e,t);await wn.mkdirp(n?c:e);let u=new fy(n?c:c+Gc,!1),_=Im.open(u);_.dbis=Object.create(null);let l=new wm(!1);_.openDB(Cn,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Dm(e,t,r);return _[si.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(G$,"createEnvironment");async function q$(e,t,r,n=!0){U_(e,t),t=t.toString();let s=Gr.join(e,t);return U$({table:t,database:Gr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(q$,"copyEnvironment");async function hy(e,t,r=!1){U_(e,t),t=t.toString();let n=Dm(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await Cm(e,t),i=Gr.join(e,t+Gc),o=s!=i,c=new fy(s,o),u=Im.open(c);u.dbis=Object.create(null);let _=py(u);for(let l=0;l<_.length;l++)ln(u,_[l]);return u[si.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(hy,"openEnvironment");async function F$(e,t,r=!1){U_(e,t),t=t.toString();let n=Gr.join(e,t+Gc),s=await Cm(e,t);if(global.lmdb_map!==void 0){let i=Dm(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await my(o),delete global.lmdb_map[i]}}await wn.remove(s),await wn.remove(s===n?s+H$:Gr.join(Gr.dirname(s),x$))}a(F$,"deleteEnvironment");async function my(e){M_.validateEnv(e);let t=e[si.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(my,"closeEnvironment");function Dm(e,t,r=!1){let s=`${Gr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(Dm,"getCachedEnvironmentName");function k$(e){M_.validateEnv(e);let t=Object.create(null),r=ln(e,Cn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Cn)try{t[n]=Object.assign(new P_,s)}catch{dy.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(k$,"listDBIDefinitions");function py(e){M_.validateEnv(e);let t=[],r=ln(e,Cn);for(let{key:n}of r.getRange({start:!1}))n!==Cn&&t.push(n);return t}a(py,"listDBIs");function V$(e,t){let n=ln(e,Cn).getEntry(t),s=new P_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{dy.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(V$,"getDBIDefinition");function Sy(e,t,r,n=!r){if(v_(e,t),t=t.toString(),t===Cn)throw new Error(dr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ln(e,t)}catch(s){if(s.message===dr.DBI_DOES_NOT_EXIST){let i=new wm(r,n===!0),o=e.openDB(t,i),c=new P_(r===!0,n);return o[Ey]=c,ln(e,Cn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(Sy,"createDBI");function ln(e,t){if(v_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Cn?r=V$(e,t):r=new P_,r===void 0)throw new Error(dr.DBI_DOES_NOT_EXIST);let n;try{let s=new wm(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(dr.DBI_DOES_NOT_EXIST):s}return n[Ey]=r,e.dbis[t]=n,n}a(ln,"openDBI");function $$(e,t){v_(e,t),t=t.toString();let r=ln(e,t),n=r.getStats();return r[si.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a($$,"statDBI");async function Y$(e,t){try{let r=Gr.join(e,t+Gc);return(await wn.stat(r)).size}catch{throw new Error(dr.INVALID_ENVIRONMENT)}}a(Y$,"environmentDataSize");function K$(e,t){if(v_(e,t),t=t.toString(),t===Cn)throw new Error(dr.CANNOT_DROP_INTERNAL_DBIS_NAME);ln(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ln(e,Cn).removeSync(t)}a(K$,"dropDBI");function W$(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ln(e,i)}catch(o){if(o.message===dr.DBI_DOES_NOT_EXIST)Sy(e,i,i!==t,i===t),n=!0;else throw o}}n&&v$()}a(W$,"initializeDBIs");Ty.exports={openDBI:ln,openEnvironment:hy,createEnvironment:G$,listDBIs:py,listDBIDefinitions:k$,createDBI:Sy,dropDBI:K$,statDBI:$$,deleteEnvironment:F$,initializeDBIs:W$,TransactionCursor:Nm,environmentDataSize:Y$,copyEnvironment:q$,closeEnvironment:my}});var Ry=g((_ue,gy)=>{"use strict";var Lm=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};gy.exports=Lm});var Oy=g((fue,Ay)=>{"use strict";var Mm=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};Ay.exports=Mm});var yy=g((hue,by)=>{"use strict";var Pm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};by.exports=Pm});var Ko=g((gue,wy)=>{"use strict";var Q$=ze(),z$=Ry(),J$=Oy(),j$=yy(),Jn=Br(),qc=vr().LMDB_ERRORS_ENUM,X$=ft(),Rs=P(),Z$=z(),e1=require("uuid"),pue=require("lmdb"),{handleHDBError:t1,hdb_errors:r1}=se(),{OVERFLOW_MARKER:Sue,MAX_SEARCH_KEY_LENGTH:Tue}=X$,Ny=ee();Ny.initSync();var B_=Ny.get(Rs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Um=Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ki=Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function n1(e,t,r,n,s=Jn.getNextMonotonicTime()){Hm(e,t,r,n),vm(e,t,r);let i=new z$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];Iy(_,!0,s);let l=s1(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Bm(o,c,n,i,s)}a(n1,"insertRecords");function s1(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Rs.FUNC_VAL],n[o]=c)}let u=Jn.getIndexedValues(c),_=e.dbis[o];if(u){B_&&_.prefetch(u.map(l=>({key:l,value:s})),x_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}B_&&e.dbis[t].prefetch([s],x_),e.dbis[t].put(s,n,n[ki])})}a(s1,"insertRecord");function i1(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(i1,"removeSkippedRecords");function Iy(e,t,r){let n=r>0;(n||!Number.isInteger(e[ki]))&&(e[ki]=r||(r=Jn.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[Um]))&&(e[Um]=r||Jn.getNextMonotonicTime()):delete e[Um]}a(Iy,"setTimestamps");function vm(e,t,r){r.indexOf(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Q$.initializeDBIs(e,t,r)}a(vm,"initializeTransaction");async function o1(e,t,r,n,s=Jn.getNextMonotonicTime()){Hm(e,t,r,n),vm(e,t,r);let i=new J$,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],E;try{E=xm(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(E),u.push(d)}return Bm(c,u,n,i,s,o)}a(o1,"updateRecords");async function a1(e,t,r,n,s=Jn.getNextMonotonicTime()){try{Hm(e,t,r,n)}catch(u){throw t1(u,u.message,r1.HTTP_STATUS_CODES.BAD_REQUEST)}vm(e,t,r);let i=new j$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;Z$.isEmpty(_[t])?(l=e1.v4(),_[t]=l):l=_[t];let d=xm(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return Bm(o,c,n,i,s)}a(a1,"upsertRecords");async function Bm(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Jn.getNextMonotonicTime(),i1(r,i),n}a(Bm,"finalizeWrite");function xm(e,t,r,n,s,i=!1,o){let c=e.dbis[t],u=c.getEntry(n),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(Iy(r,!l,o),Number.isInteger(r[ki])&&_[ki]>r[ki])return!1;l&&s.original_records.push(_);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 T=_[h];if(typeof p=="function"){let b=p([[_]]);Array.isArray(b)&&(p=b[0][Rs.FUNC_VAL],r[h]=p)}if(p===T)continue;let A=Jn.getIndexedValues(T);if(A){B_&&S.prefetch(A.map(b=>({key:b,value:n})),x_);for(let b=0,I=A.length;b<I;b++)S.remove(A[b],n)}if(A=Jn.getIndexedValues(p),A){B_&&S.prefetch(A.map(b=>({key:b,value:n})),x_);for(let b=0,I=A.length;b<I;b++)S.put(A[b],n)}}let f=Object.assign({},_,r);c.put(n,f,f[ki])},"do_put");return u?d=c.ifVersion(n,u.version,E):d=c.ifNoExists(n,E),d.then(f=>f?!0:xm(e,t,r,n,s,i,o))}a(xm,"updateUpsertRecord");function c1(e,t,r){if(Jn.validateEnv(e),t===void 0)throw new Error(qc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(qc.WRITE_ATTRIBUTES_REQUIRED):new Error(qc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(c1,"validateBasic");function Hm(e,t,r,n){if(c1(e,t,r),!Array.isArray(n))throw n===void 0?new Error(qc.RECORDS_REQUIRED):new Error(qc.RECORDS_MUST_BE_ARRAY)}a(Hm,"validateWrite");function x_(){}a(x_,"noop");wy.exports={insertRecords:n1,updateRecords:o1,upsertRecords:a1}});var Vi=g((Aue,u1)=>{u1.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var Xn=g((Oue,Ly)=>{"use strict";var Dy=z(),Cy=P(),Wo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,jn=require("joi"),ii={schema_format:{pattern:Wo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},l1=jn.alternatives(jn.string().min(1).max(ii.schema_length.maximum).pattern(Wo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),jn.number(),jn.array()).required(),_1=jn.alternatives(jn.string().min(1).max(ii.schema_length.maximum).pattern(Wo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),jn.number()),d1=jn.alternatives(jn.string().min(1).max(ii.schema_length.maximum).pattern(Wo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),jn.number()).required();function f1(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ii.schema_length.maximum?`'${e}' maximum of 250 characters`:Wo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(f1,"checkValidTable");function E1(e,t){return Dy.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(E1,"validateSchemaExists");function h1(e,t){let r=t.state.ancestors[0].schema;return Dy.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(h1,"validateTableExists");function m1(e,t){return e.toLowerCase()===Cy.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Cy.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(m1,"validateSchemaName");Ly.exports={common_validators:ii,schema_regex:Wo,hdb_schema_table:l1,validateSchemaExists:E1,validateTableExists:h1,validateSchemaName:m1,checkValidTable:f1,hdb_database:_1,hdb_table:d1}});var Xe=g((yue,My)=>{"use strict";var fr=require("validate.js");fr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||fr.validators.type.checks[t](e)?null:` must be a '${t}' value`};fr.validators.type.checks={Object:function(e){return fr.isObject(e)&&!fr.isArray(e)},Array:fr.isArray,Integer:fr.isInteger,Number:fr.isNumber,String:fr.isString,Date:fr.isDate,Boolean:function(e){return typeof e=="boolean"}};fr.validators.hasValidFileExt=function(e,t){return fr.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};My.exports={validateObject:p1,validateObjectAsync:S1,validateBySchema:T1};function p1(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=fr(e,t,{format:"flat"});return r?new Error(r):null}a(p1,"validateObject");async function S1(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await fr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(S1,"validateObjectAsync");function T1(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(T1,"validateBySchema")});var H_=g((Iue,Py)=>{var{common_validators:Zn}=Xn(),kc=Xe(),Fc="is required",gt={database:{presence:!1,format:Zn.schema_format,length:Zn.schema_length},schema:{presence:!1,format:Zn.schema_format,length:Zn.schema_length},table:{presence:!0,format:Zn.schema_format,length:Zn.schema_length},attribute:{presence:!0,format:Zn.schema_format,length:Zn.schema_length},hash_attribute:{presence:!0,format:Zn.schema_format,length:Zn.schema_length}};function Vc(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(Vc,"makeAttributesStrings");function g1(e){return e=Vc(e),gt.table.presence=!1,gt.attribute.presence=!1,gt.hash_attribute.presence=!1,kc.validateObject(e,gt)}a(g1,"schema_object");function R1(e){return e=Vc(e),gt.table.presence={message:Fc},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,kc.validateObject(e,gt)}a(R1,"table_object");function A1(e){return e=Vc(e),gt.table.presence={message:Fc},gt.attribute.presence=!1,kc.validateObject(e,gt)}a(A1,"create_table_object");function O1(e){return e=Vc(e),gt.table.presence={message:Fc},gt.attribute.presence={message:Fc},gt.hash_attribute.presence=!1,kc.validateObject(e,gt)}a(O1,"attribute_object");function b1(e){return e=Vc(e),gt.table.presence={message:Fc},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,kc.validateObject(e,gt)}a(b1,"describe_table");function y1(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(y1,"validateTableResidence");Py.exports={schema_object:g1,create_table_object:A1,table_object:R1,attribute_object:O1,describe_table:b1,validateTableResidence:y1}});var vy=g((Cue,Uy)=>{"use strict";var N1=require("uuid"),Gm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||N1.v4(),this.schema_table=`${this.schema}.${this.table}`}};Uy.exports=Gm});var G_=g((Lue,By)=>{"use strict";var I1=vy(),qm=class extends I1{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};By.exports=qm});var Hy=g((Pue,xy)=>{"use strict";xy.exports=C1;var w1="inserted";function C1(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===w1?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(C1,"returnObject")});var q_=g((vue,Vy)=>{"use strict";var D1=P(),Fm=ze(),L1=Ko(),{getSystemSchemaPath:M1,getSchemaPath:P1}=je(),U1=Vi(),v1=H_(),B1=G_(),x1=Hy(),{handleHDBError:Gy,hdb_errors:Fy}=se(),qy=z(),{HTTP_STATUS_CODES:H1}=Fy,km=U1.hdb_attribute,ky=[];for(let e=0;e<km.attributes.length;e++)ky.push(km.attributes[e].attribute);var G1="inserted";Vy.exports=q1;async function q1(e){let t=v1.attribute_object(e);if(t)throw Gy(new Error,t.message,Fy.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&qy.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Gy(new Error,r,H1.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=qy.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new B1(e.schema,e.table,e.attribute,e.id);try{let i=await Fm.openEnvironment(P1(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}`);Fm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Fm.openEnvironment(M1(),D1.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await L1.insertRecords(o,km.hash_attribute,ky,[s]);return x1(G1,c,{records:[s]},u)}catch(i){throw i}}a(q1,"lmdbCreateAttribute")});var $m=g((xue,Yy)=>{var{hdb_table:F1,hdb_database:$y}=Xn(),k1=Xe(),Vm=require("joi"),V1={undefined:"undefined",null:"null"},$1=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||V1[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),Y1=Vm.object({database:$y,schema:$y,table:F1,records:Vm.array().items(Vm.object().custom($1)).required()});Yy.exports=function(e){return k1.validateBySchema(e,Y1)}});var $c=g((que,Wy)=>{"use strict";var As=z(),Ky=$(),Gue=$m(),{getDatabases:K1}=(Ae(),ie(ke)),{ClientError:$i}=se();Wy.exports=W1;function W1(e){if(As.isEmpty(e))throw new $i("invalid update parameters defined.");if(As.isEmptyOrZeroLength(e.schema))throw new $i("invalid schema specified.");if(As.isEmptyOrZeroLength(e.table))throw new $i("invalid table specified.");if(!Array.isArray(e.records))throw new $i("records must be an array");let t=K1()[e.schema]?.[e.table];if(As.isEmpty(t))throw new $i(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&As.isEmptyOrZeroLength(o[r]))throw Ky.error("a valid hash attribute must be provided with update record:",o),new $i("a valid hash attribute must be provided with update record, check log for more info");if(!As.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Ky.error(`a valid hash value must be provided with ${e.operation} record:`,o),new $i(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!As.isEmpty(o[r])&&o[r]!==""&&n.has(As.autoCast(o[r]))&&(o.skip=!0),n.add(As.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(W1,"insertUpdateValidate")});var zy=g((kue,Qy)=>{"use strict";var Ym=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};Qy.exports=Ym});var Xy=g(($ue,jy)=>{"use strict";var Km=ze(),Q1=$(),Jy=vr().LMDB_ERRORS_ENUM;jy.exports=z1;async function z1(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 Km.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==Jy.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await Km.closeEnvironment(global.lmdb_map[n]),await Km.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==Jy.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){Q1.error(t)}}a(z1,"cleanLMDBMap")});var Os=g((Kue,rN)=>{"use strict";var Yc=require("crypto"),J1=ee(),{CONFIG_PARAMS:j1}=P(),eN="aes-256-cbc",X1=32,Z1=16,Wm=64,tN=32,eY=Wm+tN,Zy=new Map;rN.exports={encrypt:tY,decrypt:rY,createNatsTableStreamName:nY};function tY(e){let t=Yc.randomBytes(X1),r=Yc.randomBytes(Z1),n=Yc.createCipheriv(eN,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(tY,"encrypt");function rY(e){let t=e.substr(0,Wm),r=e.substr(Wm,tN),n=e.substr(eY,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Yc.createDecipheriv(eN,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(rY,"decrypt");function nY(e,t){let r=J1.get(j1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=Zy.get(r);return n||(n=Yc.createHash("md5").update(r).digest("hex"),Zy.set(r,n)),n}a(nY,"createNatsTableStreamName")});var bs=g((zue,sN)=>{"use strict";var Que=qr(),Kc=$(),nN=H_(),sY=Os(),F_=z(),{handleHDBError:k_,hdb_errors:iY}=se(),{HDB_ERROR_MSGS:V_,HTTP_STATUS_CODES:Qm}=iY,oY=ee();oY.initSync();var{getDatabases:zm}=(Ae(),ie(ke)),aY=require("fs-extra");sN.exports={describeAll:cY,describeTable:$_,describeSchema:uY};async function cY(e={}){try{let t=F_.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=zm(),o={},c={},u=[],_=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let E=i[d];for(let f in E)try{let h;if(t||s||r)h=await $_({schema:d,table:f,exact_count:_});else if(n&&n[d].describe&&n[d].tables[f].describe){let p=n[d].tables[f].attribute_permissions;h=await $_({schema:d,table:f,exact_count:_},p)}h&&u.push(h)}catch(h){Kc.error(h)}}let l={};for(let d in u)t||s||r?(l[u[d].schema]==null&&(l[u[d].schema]={}),l[u[d].schema][u[d].name]=u[d],o[u[d].schema]&&delete o[u[d].schema]):c[u[d].schema]&&(l[u[d].schema]==null&&(l[u[d].schema]={}),l[u[d].schema][u[d].name]=u[d],o[u[d].schema]&&delete o[u[d].schema]);for(let d in o)t||s||r?l[d]={}:c[d]&&(l[d]={});return l}catch(t){return Kc.error("Got an error in describeAll"),Kc.error(t),k_(new Error,V_.DESCRIBE_ALL_ERR)}}a(cY,"describeAll");async function $_(e,t){F_.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=nN.describe_table(e);if(i)throw i;let c=zm()[r];if(!c)throw k_(new Error,V_.SCHEMA_NOT_FOUND(e.schema),Qm.NOT_FOUND);let u=c[n];if(!u)throw k_(new Error,V_.TABLE_NOT_FOUND(e.schema,e.table),Qm.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(h=>({type:h.type,name:h.name})):void 0}))}a(_,"pushAtt");let l=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),u.attributes.forEach(h=>{f[h.name]&&_(h)})}else u.attributes?.forEach(f=>_(f));let d;try{d=(await aY.stat(u.primaryStore.env.path)).size}catch(f){Kc.warn("unable to get database size",f)}let E={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l,db_size:d};E.clustering_stream_name=sY.createNatsTableStreamName(E.schema,E.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.estimated_record_range=f.estimatedRange;let h=u.auditStore;if(h)for(let p of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=p[0];if(!E.last_updated_record&&u.indices.__updatedtime__)for(let p of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=p}catch(f){Kc.warn(`unable to stat table dbi due to ${f}`)}return E}a($_,"descTable");async function uY(e){F_.transformReq(e);let t=nN.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 n=e.schema.toString(),i=zm()[n];if(!i)throw k_(new Error,V_.SCHEMA_NOT_FOUND(e.schema),Qm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),F_.isEmpty(u)||u.describe){let _=await $_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(uY,"describeSchema")});var ys=g((Zue,uN)=>{var lY=Vi(),{callbackify:oN,promisify:_Y}=require("util"),{getDatabases:aN}=(Ae(),ie(ke));uN.exports={setSchemaDataToGlobal:iN,getTableSchema:dY,getSystemSchema:fY,setSchemaDataToGlobalAsync:_Y(iN)};var cN=bs(),jue=oN(cN.describeAll),Xue=oN(cN.describeTable);function iN(e){global.hdb_schema=aN(),e&&e()}a(iN,"setSchemaDataToGlobal");function dY(e,t,r){let n=aN()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(dY,"getTableSchema");function fY(){return lY}a(fY,"getSystemSchema")});var Fr=g((tle,fN)=>{"use strict";var K_=$m(),Yt=z(),EY=require("util"),W_=Dn(),hY=ys(),lN=$(),{handleHDBError:Yi,hdb_errors:mY}=se(),{HTTP_STATUS_CODES:Ki}=mY,pY=EY.promisify(hY.getTableSchema),SY="updated",_N="inserted",dN="upserted";fN.exports={insert:gY,update:RY,upsert:AY,validation:TY,flush:OY};async function TY(e){if(Yt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Yt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Yt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await pY(e.schema,e.table),r=K_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Yt.isEmptyOrZeroLength(c[n]))throw lN.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Yt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw lN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Yt.isEmpty(c[n])&&c[n]!==""&&s.has(Yt.autoCast(c[n]))&&(c.skip=!0),s.add(Yt.autoCast(c[n]));for(let u in c)i[u]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(TY,"validation");async function gY(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=K_(e);if(t)throw Yi(new Error,t.message,Ki.BAD_REQUEST);Yt.transformReq(e);let r=Yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yi(new Error,r,Ki.BAD_REQUEST);let n=await W_.createRecords(e);return Y_(_N,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(gY,"insertData");async function RY(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=K_(e);if(t)throw Yi(new Error,t.message,Ki.BAD_REQUEST);Yt.transformReq(e);let r=Yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yi(new Error,r,Ki.BAD_REQUEST);let n=await W_.updateRecords(e);return Yt.isEmpty(n.existing_rows)?Y_(SY,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Y_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(RY,"updateData");async function AY(e){if(e.operation!=="upsert")throw Yi(new Error,"invalid operation, must be upsert",Ki.INTERNAL_SERVER_ERROR);let t=K_(e);if(t)throw Yi(new Error,t.message,Ki.BAD_REQUEST);Yt.transformReq(e);let r=Yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yi(new Error,r,Ki.BAD_REQUEST);let n=await W_.upsertRecords(e);return Y_(dN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(AY,"upsertData");function Y_(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===_N?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===dN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Y_,"returnObject");function OY(e){return Yt.transformReq(e),W_.flush(e.schema,e.table)}a(OY,"flush")});var jm=g((nle,mN)=>{var bY=Xe(),Jm=require("joi"),{hdb_table:yY,hdb_database:EN}=Xn(),hN={schema:EN,database:EN,table:yY},NY={date:Jm.date().iso().required()},IY={timestamp:Jm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};mN.exports=function(e,t){let r=t==="timestamp"?{...hN,...IY}:{...hN,...NY},n=Jm.object(r);return bY.validateBySchema(e,n)}});var TN=g((sle,SN)=>{var wY=Xe(),Xm=require("joi"),{hdb_table:CY,hdb_database:pN}=Xn(),DY=Xm.object({schema:pN,database:pN,table:CY,hash_values:Xm.array().required(),ids:Xm.array()});SN.exports=function(e){return wY.validateBySchema(e,DY)}});var RN=g((ile,gN)=>{"use strict";var Zm=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},ep=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},tp=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};gN.exports={InsertObject:Zm,NoSQLSeachObject:ep,DeleteResponseObject:tp}});var ci=g((ale,NN)=>{"use strict";var ON=jm(),LY=TN(),Wi=z(),AN=require("moment"),bN=$(),{promisify:MY,callbackify:PY}=require("util"),Qi=P(),UY=ys(),rp=MY(UY.getTableSchema),np=Dn(),{DeleteResponseObject:vY}=RN(),{handleHDBError:oi,hdb_errors:BY}=se(),{HDB_ERROR_MSGS:Q_,HTTP_STATUS_CODES:ai}=BY,xY="records successfully deleted",HY=PY(yN);NN.exports={delete:HY,deleteRecord:yN,deleteFilesBefore:GY,deleteAuditLogsBefore:qY};async function GY(e){let t=ON(e,"date");if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);if(Wi.transformReq(e),!AN(e.date,AN.ISO_8601).isValid())throw oi(new Error,Q_.INVALID_DATE,ai.BAD_REQUEST,Qi.LOG_LEVELS.ERROR,Q_.INVALID_DATE,!0);let n=Wi.checkSchemaTableExist(e.schema,e.table);if(n)throw oi(new Error,n,ai.NOT_FOUND,Qi.LOG_LEVELS.ERROR,n,!0);let s=await np.deleteRecordsBefore(e);if(await rp(e.schema,e.table),bN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(GY,"deleteFilesBefore");async function qY(e){let t=ON(e,"timestamp");if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);if(Wi.transformReq(e),isNaN(e.timestamp))throw oi(new Error,Q_.INVALID_VALUE("Timestamp"),ai.BAD_REQUEST,Qi.LOG_LEVELS.ERROR,Q_.INVALID_VALUE("Timestamp"),!0);let r=Wi.checkSchemaTableExist(e.schema,e.table);if(r)throw oi(new Error,r,ai.NOT_FOUND,Qi.LOG_LEVELS.ERROR,r,!0);let n=await np.deleteAuditLogsBefore(e);return await rp(e.schema,e.table),bN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(qY,"deleteAuditLogsBefore");async function yN(e){e.ids&&(e.hash_values=e.ids);let t=LY(e);if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);Wi.transformReq(e);let r=Wi.checkSchemaTableExist(e.schema,e.table);if(r)throw oi(new Error,r,ai.NOT_FOUND,Qi.LOG_LEVELS.ERROR,r,!0);try{await rp(e.schema,e.table);let n=await np.deleteRecords(e);return Wi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${xY}`),n}catch(n){if(n.message===Qi.SEARCH_NOT_FOUND_MESSAGE){let s=new vY;return s.message=Qi.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(yN,"deleteRecord")});var z_=g((ule,CN)=>{var FY=require("crypto"),IN=9;function kY(e){let t=$Y(IN),r=wN(e+t);return t+r}a(kY,"createHash");function VY(e,t){let r=e?.substr(0,IN),n=r+wN(t+r);return e===n}a(VY,"validateHash");function $Y(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a($Y,"generateSalt");function wN(e){return FY.createHash("md5").update(e).digest("hex")}a(wN,"md5");CN.exports={hash:kY,validate:VY}});var LN=g((_le,DN)=>{var sp=Xe(),Zt={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 YY(e){return Zt.password.presence=!0,Zt.username.presence=!0,Zt.role.presence=!0,Zt.active.presence=!0,sp.validateObject(e,Zt)}a(YY,"addUserValidation");function KY(e){return Zt.password.presence=!1,Zt.username.presence=!0,Zt.role.presence=!1,Zt.active.presence=!1,sp.validateObject(e,Zt)}a(KY,"alterUserValidation");function WY(e){return Zt.password.presence=!1,Zt.username.presence=!0,Zt.role.presence=!1,Zt.active.presence=!1,sp.validateObject(e,Zt)}a(WY,"dropUserValidation");DN.exports={addUserValidation:YY,alterUserValidation:KY,dropUserValidation:WY}});var Ve=g((Ele,PN)=>{"use strict";var{platform:fle}=require("os"),QY="nats-server.zip",ip="nats-server",zY=process.platform==="win32"?`${ip}.exe`:ip,JY=/^[^\s.,*>]+$/,MN="__request__",jY=a(e=>`${e}.${MN}`,"REQUEST_SUBJECT"),XY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},ZY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},eK={HUB:"hub.pid",LEAF:"leaf.pid"},tK={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},rK={SUCCESS:"success",ERROR:"error"},nK={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},sK={TXN:"txn",MSGID:"msgid"},Qo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},iK={[Qo.ERR]:1,[Qo.WRN]:2,[Qo.INF]:3,[Qo.DBG]:4,[Qo.TRC]:5},oK={debug:"-D",trace:"-DVV"};PN.exports={NATS_SERVER_ZIP:QY,NATS_SERVER_NAME:ip,NATS_BINARY_NAME:zY,PID_FILES:eK,NATS_CONFIG_FILES:ZY,SERVER_SUFFIX:tK,NATS_TERM_CONSTRAINTS_RX:JY,REQUEST_SUFFIX:MN,UPDATE_REMOTE_RESPONSE_STATUSES:rK,CLUSTER_STATUS_STATUSES:nK,REQUEST_SUBJECT:jY,SUBJECT_PREFIXES:sK,MSG_HEADERS:XY,LOG_LEVELS:Qo,LOG_LEVEL_FLAGS:oK,LOG_LEVEL_HIERARCHY:iK}});var vN=g((mle,UN)=>{"use strict";var aK={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,`\r
|
|
7
7
|
`),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,`\r
|
|
8
|
-
`)},aK="certificate.pem",cK="privateKey.pem",uK="ca.pem";UN.exports={CERTIFICATE_VALUES:oK,CERTIFICATE_PEM_NAME:aK,PRIVATEKEY_PEM_NAME:cK,CA_PEM_NAME:uK}});var op=g((ple,FN)=>{"use strict";var GN=require("fs-extra"),ae=require("joi"),lK=require("os"),{boolean:be,string:er,number:tt,array:J_}=ae.types(),{totalmem:BN}=require("os"),zi=require("path"),_K=$(),X_=z(),mle=vN(),xN=P(),dK=je(),HN="log",fK="components",EK="Invalid logging.rotation.maxSize unit. Available units are G, M or K",hK="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",mK="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",pK="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",SK="rootPath config parameter is undefined",TK="clustering.enabled config parameter is undefined",Ji=tt.min(0).required(),j_=J_.items({host:er.required(),port:Ji}).empty(null),Zn,qN=!1;FN.exports={configValidator:gK,routesValidator:NK,route_constraints:j_};function gK(e,t=!1){if(qN=t,Zn=e.rootPath,X_.isEmpty(Zn))throw SK;let r=be.required(),n=tt.min(0).max(1e3).empty(null).default(yK),s=er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Wc),i=er.optional().empty(null),o=er.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ae.string().empty(null).default(Wc),u=ae.custom(AK).empty(null).default(Wc),_=e.clustering?.enabled;if(X_.isEmpty(_))throw TK;let l=ae.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return _===!0?d=ae.object({enabled:r,hubServer:ae.object({cluster:ae.object({name:ae.required().empty(null),network:ae.object({port:Ji,routes:j_}).required()}).required(),leafNodes:ae.object({network:ae.object({port:Ji}).required()}).required(),network:ae.object({port:Ji}).required()}).required(),leafServer:ae.object({network:ae.object({port:Ji,routes:j_}).required(),streams:ae.object({maxAge:tt.min(120).allow(null).optional(),maxBytes:tt.min(1).allow(null).optional(),maxMsgs:tt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ae.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:be.optional(),databaseLevel:be.optional(),tls:ae.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:be.required(),verify:be.optional()}),user:er.optional().empty(null)}).required():d=ae.object({enabled:r,tls:ae.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:be.required()})}).required(),ae.object({authentication:ae.object({authorizeLocal:be,cacheTTL:tt.required(),enableSessions:be}),analytics:ae.object({aggregatePeriod:tt}),componentsRoot:s.optional(),clustering:d,localStudio:ae.object({enabled:r}).required(),logging:ae.object({auditAuthEvents:ae.object({logFailed:be,logSuccessful:be}),file:be.required(),level:ae.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ae.object({enabled:be.optional(),compress:be.optional(),interval:er.custom(bK).optional().empty(null),maxSize:er.custom(OK).optional().empty(null),path:er.optional().empty(null).default(Wc)}).required(),root:s,stdStreams:be.required(),auditLog:be.required()}).required(),operationsApi:ae.object({network:ae.object({cors:be.optional(),corsAccessList:J_.optional(),headersTimeout:tt.min(1).optional(),keepAliveTimeout:tt.min(1).optional(),port:tt.optional().empty(null),domainSocket:ae.optional().empty("hdb/operations-server").default(Wc),securePort:tt.optional().empty(null),timeout:tt.min(1).optional()}).optional(),tls:ae.alternatives([ae.array().items(l),l])}).required(),rootPath:er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ae.object({network:ae.object({port:Ji,securePort:Ji,mtls:ae.alternatives([be.optional(),ae.object({user:er.optional(),certificateAuthority:i,required:be.optional()})])}).required(),webSocket:be.optional(),requireAuthentication:be.optional()}),http:ae.object({compressionThreshold:tt.optional(),cors:be.optional(),corsAccessList:J_.optional(),headersTimeout:tt.min(1).optional(),port:tt.min(0).optional().empty(null),securePort:tt.min(0).optional().empty(null),maxHeaderSize:tt.optional(),mtls:ae.alternatives([be.optional(),ae.object({user:er.optional(),certificateAuthority:i,required:be.optional()})]),threadRange:ae.alternatives([J_.optional(),er.optional()])}).required(),threads:ae.alternatives(n.optional(),ae.object({count:n.optional(),debug:ae.alternatives(be.optional(),ae.object({startingPort:tt.min(1).optional(),host:er.optional(),waitForDebugger:be.optional()})),maxHeapMemory:tt.min(0).optional()})),storage:ae.object({writeAsync:be.required(),overlappingSync:be.optional(),caching:be.optional(),compression:ae.alternatives([be.optional(),ae.object({dictionary:er.optional(),threshold:tt.optional()})]),compactOnStart:be.optional(),compactOnStartKeepBackup:be.optional(),noReadAhead:be.optional(),path:u,prefetchWrites:be.optional(),maxFreeSpaceToLoad:tt.optional(),maxFreeSpaceToRetain:tt.optional()}).required(),ignoreScripts:be.optional(),tls:ae.alternatives([ae.array().items(l),l])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(gK,"configValidator");function RK(e){return qN||GN.existsSync(e)?null:`Specified path ${e} does not exist.`}a(RK,"doesPathExist");function AK(e,t){ae.assert(e,er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=RK(e);if(r)return t.message(r)}a(AK,"validatePath");function OK(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(EK);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(mK):e}a(OK,"validateRotationMaxSize");function bK(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(hK);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(pK):e}a(bK,"validateRotationInterval");function yK(e,t){let r=t.state.path.join("."),n=lK.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||BN();return i=Math.round(Math.min(i,BN())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),_K.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(yK,"setDefaultThreads");function Wc(e,t){let r=t.state.path.join(".");if(!X_.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(X_.isEmpty(Zn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return zi.join(Zn,fK);case"logging.root":return zi.join(Zn,HN);case"clustering.leafServer.streams.path":return zi.join(Zn,"clustering","leaf");case"storage.path":let n=zi.join(Zn,xN.LEGACY_DATABASES_DIR_NAME);return GN.existsSync(n)?n:zi.join(Zn,xN.DATABASES_DIR_NAME);case"logging.rotation.path":return zi.join(Zn,HN);case"operationsApi.network.domainSocket":return r==null?null:zi.join(Zn,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Wc,"setDefaultRoot");function NK(e){let t=ae.object({routes:j_});return dK.validateBySchema({routes:e},t)}a(NK,"routesValidator")});var Er=g((gle,JN)=>{"use strict";var Vr=P(),Bt=z(),It=$(),{configValidator:IK,routesValidator:kN}=op(),fr=require("fs-extra"),wK=require("yaml"),Ln=require("path"),CK=require("is-number"),$N=require("properties-reader"),DK=require("lodash"),{handleHDBError:LK}=se(),{HTTP_STATUS_CODES:MK,HDB_ERROR_MSGS:Z_}=vr(),Tle=require("minimist"),{server:PK}=(lr(),ie(Gi)),{DATABASES_PARAM_CONFIG:Qc,CONFIG_PARAMS:kr,CONFIG_PARAM_MAP:Mn}=Vr,UK="Unable to get config value because config is uninitialized",vK="Config successfully initialized",BK="Error backing up config file",xK="Empty parameter sent to getConfigValue",YN=Ln.join(Vr.PACKAGE_ROOT,"config","yaml",Vr.HDB_DEFAULT_CONFIG_FILE),HK="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",VN={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"},ed,wt,td;JN.exports={createConfigFile:GK,getDefaultConfig:qK,getConfigValue:WN,initConfig:cp,flattenConfig:zo,updateConfigValue:QN,updateConfigObject:kK,getConfiguration:YK,setConfiguration:KK,readConfigFile:lp,getClusteringRoutes:WK,initOldConfig:zN,getConfigFromFile:QK,getConfigFilePath:Xi,addConfig:zK,deleteConfigFromFile:JK,getConfigObj:XK};function GK(e,t=!1){let r=ui(YN);ed=zo(r.toJSON());let n;for(let c in e){let u=Mn[c.toLowerCase()];if(u===kr.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(_=>({[_]:e[c][_]}));continue}if(!u&&(c.endsWith("_package")||c.endsWith("_port"))&&(u=c),u!==void 0){let _=u.split("_"),l=ap(u,e[c]);u==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{r.setIn([..._],l)}catch(d){It.error(d)}}}n&&KN(r,n),up(r,t);let s=r.toJSON();wt=zo(s);let i=r.getIn(["rootPath"]),o=Ln.join(i,Vr.HDB_CONFIG_FILE);fr.createFileSync(o),fr.writeFileSync(o,String(r)),It.trace(`Config file written to ${o}`)}a(GK,"createConfigFile");function KN(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Bt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Qc.TABLES))for(let i in n[s][Qc.TABLES])for(let o in n[s][Qc.TABLES][i]){let c=n[s][Qc.TABLES][i][o],u=[kr.DATABASES,s,Qc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in n[s]){let o=n[s][i],c=[kr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){It.error("Error parsing schemas CLI/env config arguments",n)}}a(KN,"setSchemasConfig");function qK(e){if(ed===void 0){let r=ui(YN);ed=zo(r.toJSON())}let t=Mn[e.toLowerCase()];if(t!==void 0)return ed[t.toLowerCase()]}a(qK,"getDefaultConfig");function WN(e){if(e==null){It.error(xK);return}if(wt===void 0){It.trace(UK);return}let t=Mn[e.toLowerCase()];if(t!==void 0)return wt[t.toLowerCase()]}a(WN,"getConfigValue");function Xi(e=Bt.getPropsFilePath()){let t=Bt.getEnvCliRootPath();return t?Ln.join(t,Vr.HDB_CONFIG_FILE):$N(e).get(Vr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Xi,"getConfigFilePath");function cp(e=!1){if(wt===void 0||e){let t;if(!Bt.noBootFile()){t=Bt.getPropsFilePath();try{fr.accessSync(t,fr.constants.F_OK|fr.constants.R_OK)}catch(i){throw It.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Xi(t),n;if(r.includes("config/settings.js"))try{zN(r);return}catch(i){if(i.code!==Vr.NODE_ERROR_CODES.ENOENT)throw i}try{n=ui(r)}catch(i){if(i.code===Vr.NODE_ERROR_CODES.ENOENT){It.trace(`HarperDB config file not found at ${r}.
|
|
9
|
-
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}`)}FK(n,r),up(n);let s=n.toJSON();if(PK.config=s,wt=zo(s),wt.logging_rotation_rotate)for(let i in VN)wt[i]&&It.error(`Config ${VN[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);It.trace(vK)}}a(cp,"initConfig");function FK(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Ln.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Ln.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Ln.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(It.trace("Updating config file with missing config params"),fr.writeFileSync(t,String(e)))}a(FK,"checkForUpdatedConfig");function up(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=IK(r,t);if(n.error)throw Z_.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(up,"validateConfig");function kK(e,t){wt===void 0&&(wt={});let r=Mn[e.toLowerCase()];if(r===void 0){It.trace(`Unable to update config object because config param '${e}' does not exist`);return}wt[r.toLowerCase()]=t}a(kK,"updateConfigObject");function QN(e,t,r=void 0,n=!1,s=!1,i=!1){wt===void 0&&cp();let o=WN(Mn.hdb_root),c=Ln.join(o,Vr.HDB_CONFIG_FILE),u=ui(c),_;if(r===void 0&&e.toLowerCase()===kr.DATABASES)_=t;else if(r===void 0){let E;if(i)E=e;else if(E=Mn[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=ap(E,t);u.setIn([...f],h)}else for(let E in r){let f=Mn[E.toLowerCase()];if(f===kr.HTTP_SECUREPORT&&r[E]===wt[kr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),f===kr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===wt[kr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),f===kr.DATABASES){_=r[E];continue}if(f?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),p=Vr.LEGACY_CONFIG_PARAMS[E.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(f=p,h=p.split("_"));let S=ap(f,r[E]);f==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(T){It.error(T)}}}_&&KN(u,_),up(u);let l=u.getIn(["rootPath"]),d=Ln.join(l,Vr.HDB_CONFIG_FILE);n===!0&&VK(c,l),fr.writeFileSync(d,String(u)),s&&(wt=zo(u.toJSON())),It.trace(`Config parameter: ${e} updated with value: ${t}`)}a(QN,"updateConfigValue");function VK(e,t){try{let r=Ln.join(t,"backup",`${Vr.HDB_CONFIG_FILE}.bak`);fr.copySync(e,r),It.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){It.error(BK),It.error(r)}}a(VK,"backupConfigFile");var $K=["databases"];function zo(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),td=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!$K.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!kr[u.toUpperCase()]&&Mn[u]&&(s[Mn[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(zo,"flattenConfig");function ap(e,t){if(e===kr.CLUSTERING_NODENAME||e===kr.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(CK(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Bt.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 Bt.autoCast(t)}a(ap,"castConfigValue");function YK(){let e=Bt.getPropsFilePath(),t=Xi(e);return ui(t).toJSON()}a(YK,"getConfiguration");async function KK(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return QN(void 0,void 0,s,!0),HK}catch(i){throw typeof i=="string"||i instanceof String?LK(i,i,MK.BAD_REQUEST,void 0,void 0,!0):i}}a(KK,"setConfiguration");function lp(){let e=Bt.getPropsFilePath();try{fr.accessSync(e,fr.constants.F_OK|fr.constants.R_OK)}catch(n){if(!Bt.noBootFile())throw It.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Xi(e);return ui(t).toJSON()}a(lp,"readConfigFile");function ui(e){return wK.parseDocument(fr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ui,"parseYamlDoc");function WK(){let e=lp(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Bt.isEmptyOrZeroLength(t)?[]:t;let r=kN(t);if(r)throw Z_.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Bt.isEmptyOrZeroLength(n)?[]:n;let s=kN(n);if(s)throw Z_.CONFIG_VALIDATION(s.message);if(!Bt.isEmptyOrZeroLength(n)&&!Bt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Bt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Z_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(WK,"getClusteringRoutes");function zN(e){let t=$N(e);wt={};for(let r in Mn){let n=t.get(r.toUpperCase());if(Bt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Mn[r].toLowerCase();s===kr.LOGGING_ROOT?wt[s]=Ln.dirname(n):wt[s]=n}return wt}a(zN,"initOldConfig");function QK(e){let t=lp();return DK.get(t,e.replaceAll("_","."))}a(QK,"getConfigFromFile");async function zK(e,t){let r=ui(Xi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await fr.writeFile(Xi(),String(r))}a(zK,"addConfig");function JK(e){let t=Xi(Bt.getPropsFilePath()),r=ui(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Ln.join(n,Vr.HDB_CONFIG_FILE);fr.writeFileSync(s,String(r))}a(JK,"deleteConfigFromFile");function XK(){return td||(cp(),td)}a(XK,"getConfigObj")});var jN=g((Ale,XN)=>{"use strict";var rd=P(),nd=class{static{a(this,"BaseLicense")}constructor(t=0,r=rd.RAM_ALLOCATION_ENUM.DEFAULT,n=rd.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},_p=class extends nd{static{a(this,"ExtendedLicense")}constructor(t=0,r=rd.RAM_ALLOCATION_ENUM.DEFAULT,n=rd.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};XN.exports={BaseLicense:nd,ExtendedLicense:_p}});var ji=g((ble,sI)=>{"use strict";var Xo=require("fs-extra"),eI=z_(),tI=require("crypto"),jK=require("moment"),ZK=require("uuid").v4,tr=$(),fp=require("path"),eW=z(),li=P(),{totalmem:ZN}=require("os"),tW=jN().ExtendedLicense,Jo="invalid license key format",rW="061183",nW="mofi25",sW="aes-256-cbc",iW=16,oW=32,rI=ee();rI.initSync();var dp;sI.exports={validateLicense:nI,generateFingerPrint:cW,licenseSearch:mp,getLicense:_W,checkMemoryLimit:dW};function Ep(){return fp.join(rI.getHdbBasePath(),li.LICENSE_KEY_DIR_NAME,li.LICENSE_FILE_NAME)}a(Ep,"getLicenseDirPath");function aW(){let e=Ep();return fp.join(e,li.LICENSE_FILE_NAME)}a(aW,"getLicenseFilePath");function hp(){let e=Ep();return fp.join(e,li.REG_KEY_FILE_NAME)}a(hp,"getFingerPrintFilePath");async function cW(){let e=hp();try{return await Xo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await uW();throw tr.error(`Error writing fingerprint file to ${e}`),tr.error(t),new Error("There was an error generating the fingerprint")}}a(cW,"generateFingerPrint");async function uW(){let e=ZK(),t=eI.hash(e),r=hp();try{await Xo.mkdirp(Ep()),await Xo.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw tr.error(`Error writing fingerprint file to ${r}`),tr.error(n),new Error("There was an error generating the fingerprint")}return t}a(uW,"writeFingerprint");function nI(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:li.RAM_ALLOCATION_ENUM.DEFAULT,version:li.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return tr.error("empty license key passed to validate."),r;let n=hp(),s=!1;try{s=Xo.statSync(n)}catch(i){tr.error(i)}if(s){let i;try{i=Xo.readFileSync(n,"utf8")}catch{tr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(nW),c=o[1];c=Buffer.concat([Buffer.from(c)],iW);let u=Buffer.concat([Buffer.from(i)],oW),_=tI.createDecipheriv(sW,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let f=lW(o[0],i);if(f)l=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Jo),tr.error(Jo),new Error(Jo)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Jo),tr.error(Jo),new Error(Jo)}else r.exp_date=l;r.exp_date<jK().valueOf()&&(r.valid_date=!1),eI.validate(o[1],`${rW}${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||tr.error("Invalid licence"),r}a(nI,"validateLicense");function lW(e,t){try{let r=tI.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{tr.warn("Check old license failed")}}a(lW,"checkOldLicense");function mp(){let e=new tW,t=[];try{t=Xo.readFileSync(aW(),"utf-8").split(li.NEW_LINE)}catch(r){r.code==="ENOENT"?tr.info("no license file found"):tr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(eW.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=nI(s.license_key,s.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(s){tr.error("There was an error parsing the license string."),tr.error(s),e.ram_allocation=li.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return dp=e,e}a(mp,"licenseSearch");async function _W(){return dp||await mp(),dp}a(_W,"getLicense");function dW(){let e=mp().ram_allocation,t=process.constrainedMemory?.()||ZN();if(t=Math.round(Math.min(t,ZN())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(dW,"checkMemoryLimit")});var _n=g((Cle,gI)=>{"use strict";var cI="username is required",uI="nothing to update, must supply active, role or password to update",lI="password cannot be an empty string",_I="If role is specified, it cannot be empty.",dI="active must be true or false";gI.exports={addUser:RW,alterUser:AW,dropUser:bW,getSuperUser:wW,userInfo:yW,listUsers:id,listUsersExternal:NW,setUsersToGlobal:Zo,findAndValidateUser:SI,getClusterUser:CW,USERNAME_REQUIRED:cI,ALTERUSER_NOTHING_TO_UPDATE:uI,EMPTY_PASSWORD:lI,EMPTY_ROLE:_I,ACTIVE_BOOLEAN:dI};var fI=Fr(),fW=ci(),Tp=z_(),EI=LN(),hI=qr(),gp=Ns(),$r=z(),mI=require("validate.js"),Oe=$(),{promisify:EW}=require("util"),Rp=Os(),iI=P(),oI=Ve(),hW=Er(),Nle=ee(),Ile=ji(),mW=Vi(),{table:wle}=(Ae(),ie(ke)),{handleHDBError:es,hdb_errors:pW}=se(),{HTTP_STATUS_CODES:ts,AUTHENTICATION_ERROR_MSGS:pp,HDB_ERROR_MSGS:jo}=pW,{UserEventMsg:Ap}=Pn(),Sp=require("lodash"),{server:Op}=(lr(),ie(Gi)),SW=$();Op.getUser=(e,t)=>SI(e,t,t!=null);var pI={username:!0,active:!0,role:!0,password:!0},aI=new Map,sd=hI.searchByValue,TW=hI.searchByHash,gW=EW(fW.delete);async function RW(e){let t=mI.cleanAttributes(e,pI),r=EI.addUserValidation(t);if(r)throw es(new Error,r.message,ts.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await sd(n),s=s&&Array.from(s)}catch(u){throw Oe.error("There was an error searching for a role in add user"),Oe.error(u),u}if(!s||s.length<1)throw es(new Error,jo.ROLE_NAME_NOT_FOUND(t.role),ts.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw es(new Error,jo.DUP_ROLES_FOUND(t.role),ts.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Rp.encrypt(t.password)),t.password=Tp.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await fI.insert(i)}catch(u){throw Oe.error("There was an error searching for a user."),Oe.error(u),u}Oe.debug(o);try{await Zo()}catch(u){throw Oe.error("Got an error setting users to global"),Oe.error(u),u}if(o.skipped_hashes.length===1)throw es(new Error,jo.USER_ALREADY_EXISTS(t.username),ts.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],gp.signalUserChange(new Ap(process.pid)),`${c.username} successfully added`}a(RW,"addUser");async function AW(e){let t=mI.cleanAttributes(e,pI);if($r.isEmptyOrZeroLength(t.username))throw new Error(cI);if($r.isEmptyOrZeroLength(t.password)&&$r.isEmptyOrZeroLength(t.role)&&$r.isEmptyOrZeroLength(t.active))throw new Error(uI);if(!$r.isEmpty(t.password)&&$r.isEmptyOrZeroLength(t.password.trim()))throw new Error(lI);if(!$r.isEmpty(t.active)&&!$r.isBoolean(t.active))throw new Error(dI);let r=OW(t.username);if(!$r.isEmpty(t.password)&&!$r.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Rp.encrypt(t.password)),t.password=Tp.hash(t.password)),t.role==="")throw new Error(_I);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 sd(i)||[])}catch(c){throw Oe.error("Got an error searching for a role."),Oe.error(c),c}if(!o||o.length===0){let c=jo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Oe.error(c),es(new Error,c,ts.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=jo.ALTER_USER_DUP_ROLES(t.role);throw Oe.error(c),es(new Error,c,ts.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await fI.update(n)}catch(i){throw Oe.error("Error during update."),Oe.error(i),i}try{await Zo()}catch(i){throw Oe.error("Got an error setting users to global"),Oe.error(i),i}return gp.signalUserChange(new Ap(process.pid)),s}a(AW,"alterUser");function OW(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(OW,"isClusterUser");async function bW(e){try{let t=EI.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if($r.isEmpty(global.hdb_users.get(e.username)))throw es(new Error,jo.USER_NOT_EXIST(e.username),ts.NOT_FOUND,void 0,void 0,!0);let n;try{n=await gW(r)}catch(s){throw Oe.error("Got an error deleting a user."),Oe.error(s),s}Oe.debug(n);try{await Zo()}catch(s){throw Oe.error("Got an error setting users to global."),Oe.error(s),s}return gp.signalUserChange(new Ap(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(bW,"dropUser");async function yW(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Sp.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await TW(r)}catch(s){throw Oe.error("Got an error searching for a role."),Oe.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Oe.error(r),r}return t}a(yW,"userInfo");async function NW(){let e;try{e=await id()}catch(t){throw Oe.error("Got an error listing users."),Oe.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(NW,"listUsersExternal");async function id(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await sd(e)}catch(o){throw Oe.error("Got an error searching for roles."),Oe.error(o),o}let r={};for(let o of t)r[o.id]=Sp.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await sd(n)}catch(o){throw Oe.error("Got an error searching for users."),Oe.error(o),o}let i=new Map;for(let o of s)o=Sp.cloneDeep(o),o.role=r[o.role],IW(o.role),i.set(o.username,o);return i}catch(e){throw Oe.error("got an error listing users"),Oe.error(e),$r.errorizeMessage(e)}return null}a(id,"listUsers");function IW(e){try{if(!e){Oe.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(mW)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Oe.error("Got an error trying to set system permissions."),Oe.error(t)}}a(IW,"appendSystemTablesToRole");async function Zo(){try{let e=await id();global.hdb_users=e}catch(e){throw Oe.error(e),e}}a(Zo,"setUsersToGlobal");async function SI(e,t,r=!0){global.hdb_users||await Zo();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw es(new Error,pp.GENERIC_AUTH_FAIL,ts.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw es(new Error,pp.USER_INACTIVE,ts.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(aI.get(t)===n.password)return s;if(Tp.validate(n.password,t))aI.set(t,n.password);else throw es(new Error,pp.GENERIC_AUTH_FAIL,ts.UNAUTHORIZED,void 0,void 0,!0)}return s}a(SI,"findAndValidateUser");async function wW(){global.hdb_users||await Zo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(wW,"getSuperUser");async function CW(){let e=await id(),t=hW.getConfigFromFile(iI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!$r.isEmpty(r)&&r?.role?.role===iI.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Rp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+oI.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+oI.SERVER_SUFFIX.ADMIN,r}a(CW,"getClusterUser");var TI=[];Op.invalidateUser=function(e){for(let t of TI)try{t(e)}catch(r){SW.error("Error invalidating user",r)}};Op.onInvalidatedUser=function(e){TI.push(e)}});var Jc=g((Ple,bI)=>{"use strict";var Zi=$(),Yr=P(),DW=jy(),Lle=ys(),Mle=bs(),LW=_n(),{validateEvent:RI}=Pn(),zc=Dn(),MW=require("process"),{resetDatabases:PW}=(Ae(),ie(ke)),UW={[Yr.ITC_EVENT_TYPES.SCHEMA]:vW,[Yr.ITC_EVENT_TYPES.USER]:OI};async function vW(e){let t=RI(e);if(t){Zi.error(t);return}Zi.trace("ITC schemaHandler received schema event:",e),await DW(e.message),await BW(e.message)}a(vW,"schemaHandler");async function BW(e){try{zc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),zc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),zc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=PW();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Zi.error(t)}}a(BW,"syncSchemaMetadata");var AI=[];async function OI(e){try{try{zc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),zc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Zi.warn(r)}let t=RI(e);if(t){Zi.error(t);return}Zi.trace(`ITC userHandler ${Yr.HDB_ITC_CLIENT_PREFIX}${MW.pid} received user event:`,e),await LW.setUsersToGlobal();for(let r of AI)r()}catch(t){Zi.error(t)}}a(OI,"userHandler");OI.addListener=function(e){AI.push(e)};bI.exports=UW});var Pn=g((Gle,NI)=>{"use strict";var vle=$(),bp=z(),xW=P(),{ITC_ERRORS:Xc}=vr(),{parentPort:Ble,threadId:HW,isMainThread:GW,workerData:xle}=require("worker_threads"),{onMessageFromWorkers:qW,broadcast:Hle,broadcastWithAcknowledgement:FW}=Qe();NI.exports={sendItcEvent:kW,validateEvent:yI,SchemaEventMsg:VW,UserEventMsg:$W};var od;qW(async(e,t)=>{od=od||Jc(),yI(e),od[e.type]&&await od[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function kW(e){return!GW&&e.message&&(e.message.originator=HW),FW(e)}a(kW,"sendItcEvent");function yI(e){if(typeof e!="object")return Xc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||bp.isEmpty(e.type))return Xc.MISSING_TYPE;if(!e.hasOwnProperty("message")||bp.isEmpty(e.message))return Xc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||bp.isEmpty(e.message.originator))return Xc.MISSING_ORIGIN;if(xW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Xc.INVALID_EVENT(e.type)}a(yI,"validateEvent");function VW(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(VW,"SchemaEventMsg");function $W(e){this.originator=e}a($W,"UserEventMsg")});var Ns=g((kle,DI)=>{"use strict";var II=P(),Fle=z(),ad=$(),wI=zy(),ea,{sendItcEvent:CI}=Pn();function YW(e){try{ad.trace("signalSchemaChange called with message:",e),ea=ea||Jc();let t=new wI(II.ITC_EVENT_TYPES.SCHEMA,e);return ea.schema(t),CI(t)}catch(t){ad.error(t)}}a(YW,"signalSchemaChange");function KW(e){try{ad.trace("signalUserChange called with message:",e),ea=ea||Jc();let t=new wI(II.ITC_EVENT_TYPES.USER,e);return ea.user(t),CI(t)}catch(t){ad.error(t)}}a(KW,"signalUserChange");DI.exports={signalSchemaChange:YW,signalUserChange:KW}});var cd=g(($le,MI)=>{"use strict";var LI=z(),WW=P(),QW=$(),zW=q_(),JW=G_(),XW=Ns(),{SchemaEventMsg:jW}=Pn(),ZW="already exists in";MI.exports=eQ;async function eQ(e,t,r){if(LI.isEmptyOrZeroLength(r))return r;let n=[];LI.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await tQ(e,t.schema,t.name,i)})),s}a(eQ,"lmdbCheckForNewAttributes");async function tQ(e,t,r,n){let s=new JW(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await rQ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(ZW))QW.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(tQ,"createNewAttribute");async function rQ(e){let t;return t=await zW(e),XW.signalSchemaChange(new jW(process.pid,WW.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(rQ,"createAttribute")});var ta=g((Kle,PI)=>{"use strict";var yp=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};PI.exports=yp});var vI=g((Qle,UI)=>{"use strict";var nQ=ta(),sQ=P().OPERATIONS_ENUM,Np=class extends nQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(sQ.INSERT,r,n,s,i),this.records=t}};UI.exports=Np});var xI=g((Jle,BI)=>{"use strict";var iQ=ta(),oQ=P().OPERATIONS_ENUM,Ip=class extends iQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(oQ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};BI.exports=Ip});var GI=g((jle,HI)=>{"use strict";var aQ=ta(),cQ=P().OPERATIONS_ENUM,wp=class extends aQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(cQ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};HI.exports=wp});var FI=g((e_e,qI)=>{"use strict";var uQ=ta(),lQ=P().OPERATIONS_ENUM,Cp=class extends uQ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(lQ.DELETE,n,s,t,i),this.original_records=r}};qI.exports=Cp});var jc=g((n_e,YI)=>{"use strict";var r_e=require("path"),kI=ze(),_Q=vI(),dQ=xI(),fQ=GI(),EQ=FI(),ra=ft(),VI=z(),{CONFIG_PARAMS:hQ}=P(),$I=ee();$I.initSync();var ud=P().OPERATIONS_ENUM,{getTransactionAuditStorePath:mQ}=Xe();YI.exports=pQ;async function pQ(e,t){if($I.get(hQ.LOGGING_AUDITLOG)===!1)return;let r=mQ(e.schema,e.table),n=await kI.openEnvironment(r,e.table,!0),s=SQ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){kI.initializeDBIs(n,ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ra.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),VI.isEmpty(s.user_name)||n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(pQ,"writeTransaction");function SQ(e,t){let r=VI.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===ud.INSERT)return new _Q(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.UPDATE)return new dQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.UPSERT)return new fQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.DELETE)return new EQ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(SQ,"createTransactionObject")});var Dp=g((o_e,KI)=>{"use strict";var TQ=$c(),i_e=Ic(),Zc=P(),gQ=wc(),RQ=Ko().insertRecords,AQ=ze(),OQ=$(),bQ=cd(),{getSchemaPath:yQ}=Xe(),NQ=jc();KI.exports=IQ;async function IQ(e){try{let{schema_table:t,attributes:r}=TQ(e);gQ(e,r,t.hash_attribute),e.schema!==Zc.SYSTEM_SCHEMA_NAME&&(r.includes(Zc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Zc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Zc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Zc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await bQ(e.hdb_auth_header,t,r),s=yQ(e.schema,e.table),i=await AQ.openEnvironment(s,e.table),o=await RQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await NQ(e,o)}catch(c){OQ.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(IQ,"lmdbCreateRecords")});var zI=g((c_e,QI)=>{"use strict";var WI=P(),wQ=Dp(),CQ=Ic(),DQ=require("fs-extra"),{getSchemaPath:LQ}=Xe();QI.exports=MQ;async function MQ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new CQ(WI.SYSTEM_SCHEMA_NAME,WI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await wQ(r),await DQ.mkdirp(LQ(e.schema))}a(MQ,"lmdbCreateSchema")});var XI=g((l_e,JI)=>{"use strict";var Lp=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};JI.exports=Lp});var tw=g((h_e,ew)=>{"use strict";var jI=ze(),Mp=Br(),Pp=vr().LMDB_ERRORS_ENUM,PQ=ft(),ZI=$(),d_e=z(),UQ=require("lmdb"),vQ=XI(),BQ=P(),{OVERFLOW_MARKER:f_e,MAX_SEARCH_KEY_LENGTH:E_e}=PQ,xQ=BQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function HQ(e,t,r,n){if(Mp.validateEnv(e),t===void 0)throw new Error(Pp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Pp.IDS_REQUIRED):new Error(Pp.IDS_MUST_BE_ITERABLE);try{let s=jI.listDBIs(e);jI.initializeDBIs(e,t,s);let i=new vQ,o,c=[],u=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[xQ]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,UQ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let T=s[S];if(!h.hasOwnProperty(T)||T===t)continue;let A=e.dbis[T],b=h[T];if(b!=null)try{let I=Mp.getIndexedValues(b);if(I)for(let B=0,U=I.length;B<U;B++)A.remove(I[B],o)}catch{ZI.warn(`cannot delete from attribute: ${T}, ${b}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){ZI.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let E=0,f=l.length;E<f;E++)l[E]===!0?i.deleted.push(u[E]):(i.skipped.push(u[E]),_.push(E));let d=0;for(let E=0;E<_.length;E++){let f=_[E];i.original_records.splice(f-d,1),d++}return i.txn_time=Mp.getNextMonotonicTime(),i}catch(s){throw s}}a(HQ,"deleteRecords");ew.exports={deleteRecords:HQ}});var eu=g((p_e,nw)=>{"use strict";var na=z(),GQ=tw(),qQ=ze(),{getSchemaPath:FQ}=Xe(),kQ=jc(),VQ=$();nw.exports=$Q;async function $Q(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(na.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(na.isEmptyOrZeroLength(e.hash_values)&&!na.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];na.isEmpty(u)||e.hash_values.push(u)}}if(na.isEmptyOrZeroLength(e.hash_values))return rw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(na.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=FQ(e.schema,e.table),i=await qQ.openEnvironment(s,e.table),o=await GQ.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await kQ(e,o)}catch(c){VQ.error(`unable to write transaction due to ${c.message}`)}return rw(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a($Q,"lmdbDeleteRecords");function rw(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(rw,"createDeleteResponse")});var vp=g((g_e,sw)=>{"use strict";var YQ=P(),T_e=Br();function Up(e,t){let r=Object.create(null);if(t.length===1&&YQ.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(Up,"parseRow");function KQ(e,t,r,n){let s=Up(r,e);n.push(s)}a(KQ,"searchAll");function WQ(e,t,r,n){let s=Up(r,e);n[t]=s}a(WQ,"searchAllToMap");function QQ(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(QQ,"iterateDBI");function eo(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(eo,"pushResults");function zQ(e,t,r,n,s,i){t.toString().endsWith(e)&&eo(t,r,n,s,i)}a(zQ,"endsWith");function JQ(e,t,r,n,s,i){t.toString().includes(e)&&eo(t,r,n,s,i)}a(JQ,"contains");function XQ(e,t,r,n,s,i){t>e&&eo(t,r,n,s,i)}a(XQ,"greaterThanCompare");function jQ(e,t,r,n,s,i){t>=e&&eo(t,r,n,s,i)}a(jQ,"greaterThanEqualCompare");function ZQ(e,t,r,n,s,i){t<e&&eo(t,r,n,s,i)}a(ZQ,"lessThanCompare");function ez(e,t,r,n,s,i){t<=e&&eo(t,r,n,s,i)}a(ez,"lessThanEqualCompare");sw.exports={parseRow:Up,searchAll:KQ,searchAllToMap:WQ,iterateDBI:QQ,endsWith:zQ,contains:JQ,greaterThanCompare:XQ,greaterThanEqualCompare:jQ,lessThanCompare:ZQ,lessThanEqualCompare:ez,pushResults:eo}});var sa=g((y_e,_w)=>{"use strict";var _i=ze(),A_e=$(),Kr=Br(),ld=ft(),ht=vr().LMDB_ERRORS_ENUM,O_e=z(),tz=P(),_d=vp(),{parseRow:rz}=_d,b_e=require("lmdb"),{OVERFLOW_MARKER:iw,MAX_SEARCH_KEY_LENGTH:nz}=ld;function ow(e,t,r,n=!1,s=void 0,i=void 0){return to(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(ow,"iterateFullIndex");function tu(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return to(e,t,r,(l,d,E,f)=>{let A={transaction:l,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return f===r?(A.values=!1,d.getRange(A).map(b=>({value:b}))):d.getRange(A)})}a(tu,"iterateRangeBetween");function to(e,t,r,n){let s=e.database||e,i=_i.openDBI(s,r);i[ld.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&_i.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(to,"setupTransaction");function aw(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(iw)){if(!s)if(r)s=_i.openDBI(e,r);else{let u=_i.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=_i.openDBI(e,u[_]),!s[ld.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(aw,"getOverflowCheck");function sz(e,t,r,n=!1,s=void 0,i=void 0){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return to(e,t,t,(o,c,u)=>(dd(r),r=ru(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>rz(_.value,r))))}a(sz,"searchAll");function iz(e,t,r,n=!1,s=void 0,i=void 0){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);dd(r),r=ru(e.database||e,r);let o=new Map;for(let{key:c,value:u}of ow(e,t,t,n,s,i))o.set(c,_d.parseRow(u,r));return o}a(iz,"searchAllToMap");function oz(e,t,r=!1,n=void 0,s=void 0){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=ow(e,void 0,t,r,n,s),c=o.transaction,u=aw(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(oz,"iterateDBI");function az(e,t){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return _i.statDBI(e,t).entryCount}a(az,"countAll");function cz(e,t,r,n,s=!1,i=void 0,o=void 0){return di(e,r,n),to(e,t,r,(c,u,_,l)=>(n=Kr.convertKeyValueToWrite(n),l===r?u.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:u.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(cz,"equals");function uz(e,t,r){return di(e,t,r),_i.openDBI(e,t).getValuesCount(r)}a(uz,"count");function lz(e,t,r,n,s=!1,i=void 0,o=void 0){return di(e,r,n),to(e,null,r,(c,u)=>{n=Kr.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let l;if(s===!0){let d;for(let E of u.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(n))return E;if(_===!0)return l.DONE}}),l.filter(E=>E)}else return l=u.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(lz,"startsWith");function _z(e,t,r,n,s=!1,i=void 0,o=void 0){return cw(e,t,r,n,s,i,o,!0)}a(_z,"endsWith");function cw(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return di(e,r,n),to(e,null,r,(u,_,l,d)=>{let E=aw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(iw)?_.getValues(f,{transaction:u}).map(p=>{let S=E(f,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[ld.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:_.getValues(f,{transaction:u}).map(p=>({key:f,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(cw,"contains");function dz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),tu(e,t,r,n,u,s,i,o,!0,!1)}a(dz,"greaterThan");function fz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),tu(e,t,r,n,u,s,i,o,!1,!1)}a(fz,"greaterThanEqual");function Ez(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),tu(e,t,r,u,n,s,i,o,!1,!0)}a(Ez,"lessThan");function hz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),tu(e,t,r,u,n,s,i,o,!1,!1)}a(hz,"lessThanEqual");function mz(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Kr.validateEnv(e),r===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ht.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ht.END_VALUE_REQUIRED);if(n=Kr.convertKeyValueToWrite(n),s=Kr.convertKeyValueToWrite(s),n>s)throw new Error(ht.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return tu(e,t,r,n,s,i,o,c)}a(mz,"between");function pz(e,t,r,n){Kr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(dd(r),r=ru(s,r),n===void 0)throw new Error(ht.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=_d.parseRow(c,r)),o}a(pz,"searchByHash");function Sz(e,t,r){Kr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Sz,"checkHashExists");function Tz(e,t,r,n,s=[]){return lw(e,t,r,n,s),uw(e,t,r,n,s).map(i=>i[1])}a(Tz,"batchSearchByHash");function gz(e,t,r,n,s=[]){lw(e,t,r,n,s);let i=new Map;for(let[o,c]of uw(e,t,r,n,s))i.set(o,c);return i}a(gz,"batchSearchByHashToMap");function uw(e,t,r,n,s=[]){return to(e,t,t,(i,o,c)=>{r=ru(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,_d.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(uw,"batchHashSearch");function lw(e,t,r,n,s){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(dd(r),n==null)throw new Error(ht.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ht.IDS_MUST_BE_ITERABLE)}a(lw,"initializeBatchSearchByHash");function dd(e){if(!Array.isArray(e))throw e===void 0?new Error(ht.FETCH_ATTRIBUTES_REQUIRED):new Error(ht.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(dd,"validateFetchAttributes");function di(e,t,r){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.SEARCH_VALUE_REQUIRED);if(r?.length>nz)throw new Error(ht.SEARCH_VALUE_TOO_LARGE)}a(di,"validateComparisonFunctions");function ru(e,t){return t.length===1&&tz.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=_i.listDBIs(e)),t}a(ru,"setGetWholeRowAttributes");_w.exports={searchAll:sz,searchAllToMap:iz,count:uz,countAll:az,equals:cz,startsWith:lz,endsWith:_z,contains:cw,searchByHash:pz,setGetWholeRowAttributes:ru,batchSearchByHash:Tz,batchSearchByHashToMap:gz,checkHashExists:Sz,iterateDBI:oz,greaterThan:dz,greaterThanEqual:fz,lessThan:Ez,lessThanEqual:hz,between:mz}});var ia=g((I_e,mw)=>{var dw=require("lodash"),fw=je(),he=require("joi"),Rz=z(),{hdb_schema_table:nu,checkValidTable:Ew,hdb_table:hw,hdb_database:fd}=Xn(),{handleHDBError:Az,hdb_errors:Oz}=se(),{getDatabases:bz}=(Ae(),ie(ke)),{HTTP_STATUS_CODES:yz}=Oz,Nz=he.object({database:fd,schema:fd,table:hw,search_attribute:nu,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(nu,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),Iz=he.object({database:fd,schema:fd,table:hw,operator:he.string().valid("and","or").default("and").lowercase(),offset:he.number().integer().min(0),limit:he.number().integer().min(1),get_attributes:he.array().min(1).items(he.alternatives(nu,he.object())).optional(),sort:he.object({attribute:he.alternatives(nu,he.array().min(1)),descending:he.bool().optional()}).optional(),conditions:he.array().min(1).items(he.alternatives(he.object({operator:he.string().valid("and","or").default("and").lowercase(),conditions:he.array()}),he.object({search_attribute:he.alternatives(nu,he.array().min(1)),search_type:he.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:he.when("search_type",{switch:[{is:"equals",then:he.any()},{is:"between",then:he.array().items(he.alternatives([he.string(),he.number()])).length(2)}],otherwise:he.alternatives(he.string(),he.number())}).required()}))).required()});mw.exports=function(e,t){let r=null;switch(t){case"value":r=fw.validateBySchema(e,Nz);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(Ew("database",e.schema)),i(Ew("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"),s&&(r=new Error(s.trim()));break;case"conditions":r=fw.validateBySchema(e,Iz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Rz.checkGlobalSchemaTable(e.schema,e.table);if(s)return Az(new Error,s,yz.NOT_FOUND);let o=bz()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,E=l.conditions.length;d<E;d++){let f=l.conditions[d];f.conditions?u(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=dw.filter(c,l=>l!=="*"&&!l.startsWith?.("$")&&l.attribute!=="*"&&!Array.isArray(l)&&!l.name&&!dw.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var Bp=g((C_e,pw)=>{"use strict";var wz=ze(),Cz=ia(),{getSchemaPath:Dz}=Xe();pw.exports=Lz;function Lz(e){let t=Cz(e,"hashes");if(t)throw t;let r=Dz(e.schema,e.table);return wz.openEnvironment(r,e.table)}a(Lz,"initialize")});var xp=g((L_e,Sw)=>{"use strict";var Mz=sa(),Pz=Bp();Sw.exports=Uz;async function Uz(e){let t=await Pz(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Mz.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Uz,"lmdbGetDataByHash")});var oa=g((P_e,Tw)=>{"use strict";var Hp=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};Tw.exports=Hp});var Rw=g((B_e,gw)=>{"use strict";var v_e=oa(),vz=sa(),Bz=Bp();gw.exports=xz;async function xz(e){let t=await Bz(e),r=global.hdb_schema[e.schema][e.table];return vz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(xz,"lmdbSearchByHash")});var rs=g((H_e,Aw)=>{"use strict";var Gp=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};Aw.exports=Gp});var Ed=g((q_e,ww)=>{"use strict";var rr=sa(),Hz=ze(),Gz=z(),me=ft(),ro=P(),qz=Vi(),Ow=vr().LMDB_ERRORS_ENUM,{getSchemaPath:Fz}=Xe(),Is=ro.SEARCH_WILDCARDS;async function kz(e,t,r){let n;e.schema===ro.SYSTEM_SCHEMA_NAME?n=qz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=Iw(e,n.hash_attribute,r,t);return yw(e,s,n.hash_attribute,r)}a(kz,"prepSearch");async function yw(e,t,r,n){let s=Fz(e.schema,e.table),i=await Hz.openEnvironment(s,e.table),o=Nw(i,e,t,r),c=o.transaction||i;if([me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,me.SEARCH_TYPES.SEARCH_ALL,me.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Vz(e,r)===!1){let l=e.search_attribute;if(l===r)return n?bw(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[l]:E.key}),"toObject");return n?bw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?rr.batchSearchByHashToMap(c,r,e.get_attributes,_):rr.batchSearchByHash(c,r,e.get_attributes,_)}a(yw,"executeSearch");function Nw(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<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 me.SEARCH_TYPES.EQUALS:s=rr.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.CONTAINS:s=rr.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.ENDS_WITH:case me.SEARCH_TYPES._ENDS_WITH:s=rr.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.STARTS_WITH:case me.SEARCH_TYPES._STARTS_WITH:s=rr.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return rr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return rr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.SEARCH_ALL:return rr.searchAll(e,n,t.get_attributes,o,c,u);case me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return rr.searchAllToMap(e,n,t.get_attributes,o,c,u);case me.SEARCH_TYPES.BETWEEN:s=rr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case me.SEARCH_TYPES.GREATER_THAN:case me.SEARCH_TYPES._GREATER_THAN:s=rr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.GREATER_THAN_EQUAL:case me.SEARCH_TYPES._GREATER_THAN_EQUAL:s=rr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.LESS_THAN:case me.SEARCH_TYPES._LESS_THAN:s=rr.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.LESS_THAN_EQUAL:case me.SEARCH_TYPES._LESS_THAN_EQUAL:s=rr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(Nw,"searchByType");function bw(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(bw,"createMapFromIterable");function Vz(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 n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(Vz,"checkToFetchMore");function Iw(e,t,r,n){if(Gz.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Is.indexOf(s)>-1)return r===!0?me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:me.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Is[0])<0&&s.indexOf(Is[1])<0)return c===!0?r===!0?me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:me.SEARCH_TYPES.EQUALS;if(Is.indexOf(i)>=0&&Is.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),me.SEARCH_TYPES.CONTAINS;if(Is.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),me.SEARCH_TYPES.ENDS_WITH;if(Is.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),me.SEARCH_TYPES.STARTS_WITH;if(s.includes(Is[0])||s.includes(Is[1]))return me.SEARCH_TYPES.EQUALS;throw new Error(Ow.UNKNOWN_SEARCH_TYPE)}else switch(n){case ro.VALUE_SEARCH_COMPARATORS.BETWEEN:return me.SEARCH_TYPES.BETWEEN;case ro.VALUE_SEARCH_COMPARATORS.GREATER:return me.SEARCH_TYPES.GREATER_THAN;case ro.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return me.SEARCH_TYPES.GREATER_THAN_EQUAL;case ro.VALUE_SEARCH_COMPARATORS.LESS:return me.SEARCH_TYPES.LESS_THAN;case ro.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return me.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Ow.UNKNOWN_SEARCH_TYPE)}}a(Iw,"createSearchTypeFromSearchObject");ww.exports={executeSearch:yw,createSearchTypeFromSearchObject:Iw,prepSearch:kz,searchByType:Nw}});var Dw=g((V_e,Cw)=>{"use strict";var k_e=rs(),$z=ia(),Yz=z(),Kz=P(),Wz=Ed();Cw.exports=Qz;function Qz(e,t){if(!Yz.isEmpty(t)&&Kz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=$z(e,"value");if(n)throw n;return Wz.prepSearch(e,t,!0)}a(Qz,"lmdbGetDataByValue")});var su=g((K_e,Lw)=>{"use strict";var Y_e=rs(),zz=ia(),Jz=z(),Xz=P(),jz=Ed();Lw.exports=Zz;async function Zz(e,t){if(!Jz.isEmpty(t)&&Xz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=zz(e,"value");if(n)throw n;return jz.prepSearch(e,t,!1)}a(Zz,"lmdbSearchByValue")});var Pw=g((z_e,Mw)=>{"use strict";var Q_e=ft(),qp=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},Fp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},kp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Mw.exports={SearchByConditionsObject:qp,SearchCondition:Fp,SortAttribute:kp}});var Hw=g((Z_e,xw)=>{"use strict";var X_e=Pw().SearchByConditionsObject,eJ=rs(),tJ=ia(),Vp=sa(),hd=ft(),{Resource:j_e}=(cn(),ie($p)),Bw=Ed(),rJ=vp(),nJ=require("lodash"),{getSchemaPath:sJ}=Xe(),Uw=ze(),{handleHDBError:iJ,hdb_errors:oJ}=se(),{HTTP_STATUS_CODES:aJ}=oJ,cJ=1e8;xw.exports=uJ;async function uJ(e){let t=tJ(e,"conditions");if(t)throw iJ(t,t.message,aJ.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=sJ(e.schema,e.table),n=await Uw.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Uw.openDBI(n,_.search_attribute);let i=nJ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===hd.SEARCH_TYPES.EQUALS?_.estimated_count=Vp.count(n,_.search_attribute,_.search_value):l===hd.SEARCH_TYPES.CONTAINS||l===hd.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=cJ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await vw(o,e,i[0],s.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],l=i.slice(1).map(Bw.filterByType),d=l.length,E=Vp.setGetWholeRowAttributes(n,e.get_attributes);u=c.map(f=>_.get(f,{transaction:o,lazy:!0})),d>0&&(u=u.filter(f=>{for(let h=0;h<d;h++)if(!l[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=>rJ.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await vw(o,e,E,s.hash_attribute);c=c.concat(f)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=Vp.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(uJ,"lmdbSearchByConditions");async function vw(e,t,r,n){let s=new eJ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===hd.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,Bw.searchByType(e,s,i,n).map(o=>o.value)}a(vw,"executeConditionSearch")});var aa=g((tde,Gw)=>{"use strict";var lJ=P().OPERATIONS_ENUM,Yp=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=lJ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};Gw.exports=Yp});var Kp=g((nde,Ww)=>{"use strict";var Vw=rs(),$w=aa(),Yw=su(),Kw=eu(),hr=P(),qw=z(),Fw=ze(),{getTransactionAuditStorePath:_J,getSchemaPath:dJ}=Xe(),kw=$();Ww.exports=fJ;async function fJ(e){try{if(qw.isEmpty(global.hdb_schema[e.schema])||qw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await EJ(e),await hJ(e);let t=dJ(e.schema,e.table);try{await Fw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")kw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=_J(e.schema,e.table);await Fw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")kw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(fJ,"lmdbDropTable");async function EJ(e){let t=new Vw(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Yw(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new $w(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await Kw(s)}a(EJ,"deleteAttributesFromSystem");async function hJ(e){let t=new Vw(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await Yw(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new $w(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await Kw(s)}catch(i){throw i}}a(hJ,"dropTableFromSystem")});var zw=g((ide,Qw)=>{"use strict";var mJ=require("fs-extra"),pJ=rs(),SJ=oa(),TJ=aa(),gJ=Kp(),RJ=eu(),AJ=xp(),OJ=su(),ws=P(),{getSchemaPath:bJ}=Xe(),{handleHDBError:yJ,hdb_errors:NJ}=se(),{HDB_ERROR_MSGS:IJ,HTTP_STATUS_CODES:wJ}=NJ;Qw.exports=CJ;async function CJ(e){let t;try{t=await DJ(e.schema);let r=new pJ(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await OJ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await gJ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new TJ(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await RJ(s);let i=bJ(t);await mJ.remove(i)}catch(r){throw r}}a(CJ,"lmdbDropSchema");async function DJ(e){let t=new SJ(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await AJ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw yJ(new Error,IJ.SCHEMA_NOT_FOUND(e),wJ.NOT_FOUND,void 0,void 0,!0);return n}a(DJ,"validateDropSchema")});var md=g((ade,Jw)=>{"use strict";var Wp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Jw.exports=Wp});var jw=g((lde,Xw)=>{"use strict";var LJ=require("fs-extra"),pd=ze(),{getTransactionAuditStorePath:MJ}=Xe(),Qp=ft(),ude=md();Xw.exports=PJ;async function PJ(e){let t;try{let r=MJ(e.schema,e.table);await LJ.mkdirp(r),t=await pd.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{pd.createDBI(t,Qp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),pd.createDBI(t,Qp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),pd.createDBI(t,Qp.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(PJ,"createTransactionsAuditEnvironment")});var rC=g((dde,tC)=>{"use strict";var zp=P(),Zw=ze(),UJ=Ko(),{getSystemSchemaPath:vJ,getSchemaPath:BJ}=Xe(),xJ=Vi(),HJ=q_(),Jp=G_(),GJ=$(),qJ=jw(),jp=xJ.hdb_table,eC=[];for(let e=0;e<jp.attributes.length;e++)eC.push(jp.attributes[e].attribute);tC.exports=FJ;async function FJ(e,t){let r=BJ(t.schema,t.table),n=new Jp(t.schema,t.table,zp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Jp(t.schema,t.table,zp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Jp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Zw.createEnvironment(r,t.table),e!==void 0){let o=await Zw.openEnvironment(vJ(),zp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await UJ.insertRecords(o,jp.hash_attribute,eC,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Xp(n),await Xp(s),await Xp(i)}await qJ(t)}catch(o){throw o}}a(FJ,"lmdbCreateTable");async function Xp(e){try{await HJ(e)}catch(t){GJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Xp,"createAttribute")});var sC=g((Ede,nC)=>{"use strict";var kJ=$c(),VJ=wc(),$J=cd(),iu=P(),YJ=Ko().updateRecords,KJ=ze(),{getSchemaPath:WJ}=Xe(),QJ=jc(),zJ=$();nC.exports=JJ;async function JJ(e){try{let{schema_table:t,attributes:r}=kJ(e);VJ(e,r,t.hash_attribute),e.schema!==iu.SYSTEM_SCHEMA_NAME&&(r.includes(iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await $J(e.hdb_auth_header,t,r),s=WJ(e.schema,e.table),i=await KJ.openEnvironment(s,e.table),o=await YJ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await QJ(e,o)}catch(c){zJ.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(JJ,"lmdbUpdateRecords")});var oC=g((mde,iC)=>{"use strict";var XJ=P().OPERATIONS_ENUM,Zp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=XJ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};iC.exports=Zp});var cC=g((Tde,aC)=>{"use strict";var Sde=oC(),jJ=$c(),ZJ=wc(),e2=cd(),ou=P(),t2=Ko().upsertRecords,r2=ze(),{getSchemaPath:n2}=Xe(),s2=jc(),i2=$(),{handleHDBError:o2,hdb_errors:a2}=se();aC.exports=c2;async function c2(e){let t;try{t=jJ(e)}catch(u){throw o2(u,u.message,a2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;ZJ(e,n,r.hash_attribute),e.schema!==ou.SYSTEM_SCHEMA_NAME&&(n.includes(ou.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(ou.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(ou.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(ou.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await e2(e.hdb_auth_header,r,n),i=n2(e.schema,e.table),o=await r2.openEnvironment(i,e.table),c=await t2(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await s2(e,c)}catch(u){i2.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(c2,"lmdbUpsertRecords")});var lC=g((Rde,uC)=>{"use strict";var eS=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};uC.exports=eS});var dC=g((Ode,_C)=>{"use strict";var tS=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};_C.exports=tS});var hC=g((Nde,EC)=>{"use strict";var rS=ze(),{getTransactionAuditStorePath:u2}=Xe(),yde=lC(),au=ft(),l2=z(),fC=dC(),_2=require("util").promisify,d2=_2(setTimeout),f2=1e4,E2=100;EC.exports=h2;async function h2(e){let t=u2(e.schema,e.table),r=await rS.openEnvironment(t,e.table,!0),n=rS.listDBIs(r);rS.initializeDBIs(r,au.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new fC;do s=await m2(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await d2(E2);while(s.transactions_deleted>0);return i}a(h2,"deleteAuditLogsBefore");async function m2(e,t){let r=new fC;try{let n=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[au.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];l2.isEmpty(c)||(s=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>f2)break}return await s,r}catch(n){throw n}}a(m2,"deleteTransactions")});var pC=g((wde,mC)=>{"use strict";var nS=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};mC.exports=nS});var TC=g((Lde,SC)=>{"use strict";var p2=rs(),S2=aa(),Dde=pC(),ns=P(),T2=z(),sS=ze(),g2=Vi(),R2=su(),A2=eu(),{getSchemaPath:O2}=Xe();SC.exports=b2;async function b2(e,t=!0){let r;e.schema===ns.SYSTEM_SCHEMA_NAME?r=g2[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await N2(e),s=O2(e.schema,e.table),i=await sS.openEnvironment(s,e.table);return t===!0&&await y2(e,i,r.hash_attribute),sS.dropDBI(i,e.attribute),n}a(b2,"lmdbDropAttribute");async function y2(e,t,r){let n=sS.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:u}of n.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);s=t.dbis[r].put(o,_,u)}await s}a(y2,"removeAttributeFromAllObjects");async function N2(e){let t=new p2(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await R2(t)).filter(o=>o[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(T2.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new S2(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return A2(i)}a(N2,"dropAttributeFromSystem")});var yC=g((Ude,bC)=>{"use strict";var iS=ze(),ca=ft(),Pde=Br(),oS=P(),gC=z(),{getTransactionAuditStorePath:I2}=Xe(),w2=sa(),Sd=ta(),C2=$();bC.exports=D2;async function D2(e){let t=I2(e.schema,e.table),r=await iS.openEnvironment(t,e.table,!0),n=iS.listDBIs(r);iS.initializeDBIs(r,ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return RC(r,e.search_values);case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,M2(r,e.search_values,s);case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return L2(r,e.search_values);default:return RC(r)}}a(D2,"readAuditLog");function RC(e,t=[0,Date.now()]){gC.isEmpty(t[0])&&(t[0]=0),gC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new Sd,s))}a(RC,"searchTransactionsByTimestamp");function L2(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[ca.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,OC(e,i))}return Object.fromEntries(r)}a(L2,"searchTransactionsByUsername");function M2(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=w2.equals(e,ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ca.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let E=Number(d);n.has(E)?n.get(E).push(_.toString()):n.set(E,[_.toString()])}}let s=Array.from(n.keys()),i=OC(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);AC(u,"records",r,l,o),AC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(M2,"searchTransactionsByHashValues");function AC(e,t,r,n,s){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(n.indexOf(u)>=0)if(s.has(u)){let _=s.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new Sd(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Sd(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(AC,"loopRecords");function OC(e,t){let r=[];try{let n=e.dbis[ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new Sd,i);r.push(o)}}catch(i){C2.warn(i)}return r}catch(n){throw n}}a(OC,"batchSearchTransactions")});var IC=g((Hde,NC)=>{"use strict";var{getSchemaPath:Bde}=Xe(),xde=ze(),{database:P2}=(Ae(),ie(ke));NC.exports={writeTransaction:U2};async function U2(e,t,r){return P2({database:e,table:t}).transaction(r)}a(U2,"writeTransaction")});var LC=g((qde,DC)=>{"use strict";var{getSchemaPath:wC}=Xe(),CC=ze();DC.exports={flush:v2,resetReadTxn:B2};async function v2(e,t){return(await CC.openEnvironment(wC(e,t),t.toString())).flushed}a(v2,"flush");async function B2(e,t){try{(await CC.openEnvironment(wC(e,t),t.toString())).resetReadTxn()}catch{}}a(B2,"resetReadTxn")});var vC=g((kde,UC)=>{"use strict";var{Readable:x2}=require("stream"),{getDatabases:H2}=(Ae(),ie(ke)),{readSync:G2,openSync:q2,createReadStream:MC}=require("fs"),{open:F2}=require("lmdb"),PC=xc(),k2=Hc(),{AUDIT_STORE_OPTIONS:V2}=(ni(),ie(BC)),{INTERNAL_DBIS_NAME:$2,AUDIT_STORE_NAME:Y2}=ft();UC.exports=W2;var aS=32768,K2=100;async function W2(e){let t=e.database||e.schema||"data",r=H2()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let l=_.dbisDB,d=F2({noSync:!0,maxDbs:k2.MAX_DBS}),E,f=d.openDB($2,new PC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(A,b){b.encoding="binary",b.encoder=void 0;let I=d.openDB(A,b),B=l.openDB(A,b);for(let{key:U,version:F,value:M}of B.getRange({start:null,transaction:h,versions:B.useVersions}))E=I.put(U,M,F),p++%K2===0&&(await new Promise(Q=>setTimeout(Q,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:A,value:b}of l.getRange({transaction:h,start:!1}))if(s.some(I=>A.startsWith?.(I+"/"))){f.put(A,b);let[,I]=A.split("/"),B=!I,U=new PC(!B,B);await S(A,U)}e.include_audit&&await S(Y2,Object.assign({},V2)),await E;let T=MC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=q2(o.path);return o.transaction(()=>{let _=Buffer.alloc(aS);G2(c,_,0,aS),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=MC(null,{fd:c,start:aS}),E=new x2.from(async function*(){yield _;for await(let f of d)l.openTimer&&(l.openTimer=0),yield f;l.done()}());return E.headers=u(),E});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(W2,"getBackup")});var GC=g(($de,HC)=>{"use strict";var Q2=$(),{handleHDBError:z2}=se(),J2=ey(),X2=q_(),j2=Dp(),Z2=zI(),e4=eu(),t4=xp(),r4=Rw(),n4=Dw(),s4=su(),i4=Hw(),o4=zw(),a4=rC(),c4=sC(),u4=cC(),l4=hC(),_4=Kp(),d4=TC(),f4=yC(),E4=IC(),xC=LC(),h4=vC(),cS=class extends J2{static{a(this,"LMDBBridge")}async searchByConditions(t){return i4(t)}async getDataByHash(t){return await t4(t)}async searchByHash(t){return await r4(t)}async getDataByValue(t,r){return await n4(t,r)}async searchByValue(t){return await s4(t)}async createSchema(t){return await Z2(t)}async dropSchema(t){return await o4(t)}async createTable(t,r){return await a4(t,r)}async dropTable(t){return await _4(t)}async createAttribute(t){return await X2(t)}async createRecords(t){return await j2(t)}async updateRecords(t){return await c4(t)}async upsertRecords(t){try{return await u4(t)}catch(r){throw z2(r,null,null,Q2.ERR,r)}}async deleteRecords(t){return await e4(t)}async dropAttribute(t){return await d4(t)}async deleteAuditLogsBefore(t){return await l4(t)}async readAuditLog(t){return await f4(t)}writeTransaction(t,r,n){return E4.writeTransaction(t,r,n)}flush(t,r){return xC.flush(t,r)}resetReadTxn(t,r){return xC.resetReadTxn(t,r)}getBackup(t){return h4(t)}};HC.exports=cS});function T4(){S4=setInterval(function(){for(let e of uS)if(e.stale){let t=e[ye]?.url;VC.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},p4).unref()}var lS,kC,VC,$C,YC,KC,qC,uS,m4,cu,FC,no,Td,p4,S4,_S=Re(()=>{lS=H(Br()),kC=H(se()),VC=H($());cn();$C=H(ee()),YC=H(P()),KC=H(z()),qC=100,uS=new Set,m4=(0,KC.convertToMS)($C.get(YC.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,no=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),uS.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(uS.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(cu&&!this.overloadChecked&&performance.now()-FC>m4)throw new kC.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,lS.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let f=d;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=d;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let p=d;p<this.validated;p++){let S=this.writes[p];if(!S)continue;let T=S[f===0?"before":"beforeIntermediate"];if(T){let A=T();h?h.push?h.push(A):h=[h,A]:h=A}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),u=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let E=d.store.ifVersion(d.key,d.entry?.version??null,u);s=s||E}else u();else for(let E of this.writes)c(E)},"nextCondition"),_=this.lmdbDb;if(this.writes.length>0&&(_?.retryRisk&&(_.retryRisk*=.99),this.writes.length+(_?.retryRisk||0)<qC>>n?u():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return cu||(cu=s,FC=performance.now(),cu.then(()=>{cu=null})),s.then(d=>d?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(_&&(_.retryRisk=(_.retryRisk||0)+qC/2),t?t.retries=n+1:t={retries:1},this.commit(t)));let l={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(E=>({txnTime:r,next:E}));l.next=d}return l}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},Td=class extends no{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,lS.getNextMonotonicTime)())}getReadTxn(){}},p4=3e4;a(T4,"startMonitoringTxns");T4()});function rt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new no;e.timestamp&&(n.timestamp=e.timestamp),n[ye]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let u=n.commit({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var WC,so=Re(()=>{WC=require("../index");cn();_S();a(rt,"transaction");(0,WC._assignPackageExport)("transaction",rt);rt.commit=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};rt.abort=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var tD={};Fe(tD,{ResourceBridge:()=>ES});function hS({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 zC(e,t){let r=ss(e),n=hS(e,r);if(!r)throw new Un.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache},o;rt(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l;try{l=await r.get({id:_,lazy:s,select:n},i),l=l&&Rd(l)}catch(d){l={message:d.toString()}}return t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function ss(e){let t=e.database||e.schema||R4,r=mr()[t];if(!r)throw(0,Un.handleHDBError)(new Error,g4.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function JC(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*XC(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(u)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[u]})}n&&(yield n)}var jC,gd,Un,ZC,vn,dS,fS,eD,g4,R4,A4,O4,QC,ES,rD=Re(()=>{"use strict";jC=H(GC()),gd=H(ia()),Un=H(se());Ae();ZC=H($c()),vn=H(P()),dS=H(Ns()),fS=H(Pn()),eD=H(z());so();Ad();({HDB_ERROR_MSGS:g4}=Un.hdb_errors),R4="data",A4=1e4,O4=10,ES=class extends jC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),QC=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,gd.default)(t,"conditions");if(r)throw(0,Un.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=ss(t);if(!n)throw new Un.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:hS(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Un.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Et({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await ss(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=ss(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,u)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,u),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){ss(t).dropTable()}createSchema(t){return ua({database:t.schema,table:null}),dS.signalSchemaChange(new fS.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await mS(t.schema),dS.signalSchemaChange(new fS.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,QC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,ZC.default)(t),s,i=mr()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return rt(o,async c=>{if(!i.schemaDefined){s=[];for(let l of n)i.attributes.find(E=>E.name==l)||s.push(l);s.length>0&&await i.addAttributes(s.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=l[i.primaryKey],E=d!=null&&await i.get(d,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){_.push(l[i.primaryKey]);continue}E&&(E=Rd(E));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let h=l[f];if(typeof h=="function")try{let p=h([[E]]);Array.isArray(p)&&(h=p[0].func_val,l[f]=h)}catch(p){throw p.message+="Trying to set key "+f+" on object"+JSON.stringify(l),p}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=E[f]);await(d==null?i.create(l,o):i.put(l,o)),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=mr()[t.schema][t.table],n={user:t.hdb_user};return rt(n,async s=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,n)?o.push(u):c.push(u);return JC(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=mr()[t.schema][t.table];if(!r.createdTimeProperty)throw new Un.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:vn.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,eD.async_set_timeout)(O4),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%A4===0&&await _();return u.length>0&&await _(),s?JC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,gd.default)(t,"hashes");if(r)throw r;return zC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of zC(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&vn.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,gd.default)(t,"value");if(n)throw n;let s=ss(t);if(!s)throw new Un.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===vn.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:hS(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async getDataByValue(t,r){let n=new Map,s=ss(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){ss({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return ss(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=ss(t),n={};switch(t.search_type){case vn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case vn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of XC(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return XC(r,t.search_values?.[0],t.search_values?.[1])}}};a(hS,"getSelect");a(zC,"getRecords");a(ss,"getTable");a(JC,"createDeleteResponse");a(XC,"groupRecordsInHistory")});var Dn=g((ife,nD)=>{"use strict";var{ResourceBridge:b4}=(rD(),ie(tD)),y4=ee();y4.initSync();var Od;function N4(){return Od||(Od=new b4,Od)}a(N4,"getBridge");nD.exports=N4()});var aD=g((afe,oD)=>{"use strict";var sD=require("lodash"),uu=require("mathjs"),I4=require("jsonata"),iD=z();oD.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?sD.uniqWith(e,sD.isEqual):e,searchJSON:w4,mad:lu.bind(null,uu.mad),mean:lu.bind(null,uu.mean),mode:lu.bind(null,uu.mode),prod:lu.bind(null,uu.prod),median:lu.bind(null,uu.median)};function lu(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(lu,"aggregateFunction");function w4(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(iD.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),iD.isEmpty(this.__ala__.res[r])){let n=I4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(w4,"searchJSON")});var uD=g((ufe,cD)=>{"use strict";var Rt=require("moment"),pS="YYYY-MM-DDTHH:mm:ss.SSSZZ";Rt.suppressDeprecationWarnings=!0;cD.exports={current_date:()=>Rt().utc().format("YYYY-MM-DD"),current_time:()=>Rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Rt(e).utc().format("YYYY");case"month":return Rt(e).utc().format("MM");case"day":return Rt(e).utc().format("DD");case"hour":return Rt(e).utc().format("HH");case"minute":return Rt(e).utc().format("mm");case"second":return Rt(e).utc().format("ss");case"millisecond":return Rt(e).utc().format("SSS");default:break}},date:e=>Rt(e).utc().format(pS),date_format:(e,t)=>Rt(e).utc().format(t),date_add:(e,t,r)=>Rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=Rt(e).utc(),s=Rt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>Rt().utc().valueOf(),get_server_time:()=>Rt().format(pS),offset_utc:(e,t)=>Rt(e).utc().utcOffset(t).format(pS)}});var fD=g((lfe,dD)=>{"use strict";var C4=require("@turf/area"),D4=require("@turf/length"),L4=require("@turf/circle"),M4=require("@turf/difference"),P4=require("@turf/distance"),U4=require("@turf/boolean-contains"),v4=require("@turf/boolean-equal"),B4=require("@turf/boolean-disjoint"),x4=require("@turf/helpers"),lD=P(),Te=z(),Cs=$();dD.exports={geoArea:H4,geoLength:G4,geoCircle:q4,geoDifference:F4,geoDistance:_D,geoNear:k4,geoContains:V4,geoEqual:$4,geoCrosses:Y4,geoConvert:K4};function H4(e){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return C4.default(e)}catch(t){return Cs.trace(t,e),NaN}}a(H4,"geoArea");function G4(e,t){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return D4.default(e,{units:t||"kilometers"})}catch(r){return Cs.trace(r,e),NaN}}a(G4,"geoLength");function q4(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return L4.default(e,t,{units:r||"kilometers"})}catch(n){return Cs.trace(n,e,t),NaN}}a(q4,"geoCircle");function F4(e,t){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return M4(e,t)}catch(r){return Cs.trace(r,e,t),NaN}}a(F4,"geoDifference");function _D(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return P4.default(e,t,{units:r||"kilometers"})}catch(n){return Cs.trace(n,e,t),NaN}}a(_D,"geoDistance");function k4(e,t,r,n){if(Te.isEmpty(e)||Te.isEmpty(t))return!1;if(Te.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return _D(e,t,n)<=r}catch(s){return Cs.trace(s,e,t),!1}}a(k4,"geoNear");function V4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return U4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(V4,"geoContains");function $4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return v4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a($4,"geoEqual");function Y4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return!B4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(Y4,"geoCrosses");function K4(e,t,r){if(Te.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Te.isEmpty(t))throw new Error("geo_type is required");if(Te.isEmpty(lD.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(lD.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Te.autoCastJSON(e)),x4[t](e,r)}a(K4,"geoConvert")});var bd=g((dfe,ED)=>{var io=aD(),Wr=uD(),is=fD();ED.exports=e=>{e.aggr.mad=e.aggr.MAD=io.mad,e.aggr.mean=e.aggr.MEAN=io.mean,e.aggr.mode=e.aggr.MODE=io.mode,e.aggr.prod=e.aggr.PROD=io.prod,e.aggr.median=e.aggr.MEDIAN=io.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=io.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=io.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Wr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Wr.current_time,e.fn.extract=e.fn.EXTRACT=Wr.extract,e.fn.date=e.fn.DATE=Wr.date,e.fn.date_format=e.fn.DATE_FORMAT=Wr.date_format,e.fn.date_add=e.fn.DATE_ADD=Wr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Wr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Wr.date_diff,e.fn.now=e.fn.NOW=Wr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Wr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Wr.get_server_time,e.fn.getdate=e.fn.GETDATE=Wr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Wr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=is.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=is.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=is.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=is.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=is.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=is.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=is.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=is.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=is.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=is.geoNear}});var SD=g((ffe,pD)=>{"use strict";var _u=require("lodash"),pr=require("alasql");pr.options.cache=!1;var W4=bd(),hD=require("clone"),yd=require("recursive-iterator"),fe=$(),Le=z(),la=Dn(),Q4=P(),{hdb_errors:z4}=se(),{getDatabases:mD}=(Ae(),ie(ke)),J4="IS NULL",Bn="There was a problem performing this search. Please check the logs and try again.";W4(pr);var SS=class{static{a(this,"SQLSearch")}constructor(t,r){if(Le.isEmpty(t))throw fe.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(),Le.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Le.isEmptyOrZeroLength(n))return fe.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw fe.error("Error thrown from checkEmptySQL in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw fe.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),fe.error(n),new Error(Bn)}if(Object.keys(this.data).length===0)return fe.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw fe.error("Error thrown from processJoins in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw fe.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{return t=await this._finalSQL(),t}catch(n){throw fe.error("Error thrown from finalSQL in SQLSearch class method search."),fe.error(n),new Error(Bn)}}_getColumns(){let t=new yd(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(hD(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=_u.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=mD()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Le.isEmpty(this.statement.where)){fe.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new yd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Le.isEmpty(r)&&r.right)if(Le.isNotEmptyAndHasValue(r.right.value)){let n=Le.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new pr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Le.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new pr.yy.LogicValue({value:i}):n instanceof pr.yy.StringValue&&Le.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new pr.yy.NumValue({value:i}))});if(t){fe.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new yd(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Le.isEmpty(Q4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Le.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Le.isEmptyOrZeroLength(r.left.columnid)||Le.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(Le.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"=":!Le.isEmpty(r.right.value)||!Le.isEmpty(r.left.value)?n.add(Le.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)n.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from)&&Le.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&_u.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Le.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Le.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&!Le.isEmptyOrZeroLength(this.columns.columns))return t;if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pr.promise(r)}catch(r){throw fe.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),fe.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(hD(n))})}_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,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Le.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(J4)>-1&&this.tables.forEach(s=>{let i={columnid:mD()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=_u.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},u=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(u=!0),!Le.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await la.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(Bn)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let E=await la.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(Bn)}else if(!Le.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,E=l.length;d<E;d++){let f=l[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await la.getDataByValue(c,f.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),fe.error(l),new Error(Bn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await la.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,E]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),fe.error(l),new Error(Bn)}}}_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 pr.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(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.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 n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new pr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new pr.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 s=t.is_func?new pr.yy.FuncValue:new pr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.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={};s.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:"";u=u.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(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 l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=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,s);E=await pr.promise(h,t),t=null}catch(f){throw fe.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),fe.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=_u.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let A=p[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[A]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new yd(this.columns);for(let{node:i}of s)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)&&n.push(o)}}n=_u.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw fe.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),fe.error(i),new Error(Bn)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},u=await la.getDataByHash(c),_=s.columns.length;for(let l=0,d=o.length;l<d;l++){let E=o[l],f=u.get(E);for(let h=0;h<_;h++){let p=s.columns[h],S=f[p]===void 0?null:f[p];this.data[n].__merged_data[E].push(S)}}}}catch(r){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getData."),fe.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(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.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 s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===u}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();fe.trace(`Final SQL: ${s}`),n=await pr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),fe.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw fe.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),fe.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return fe.error(z4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),fe.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${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=s[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;n=n.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(u,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await la.getDataByValue(i);for(let[c,u]of o)this.data[s].__merged_data[c]||(u[n.attribute]===void 0&&(u[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=u[n.attribute]??null}catch(o){throw fe.error("There was an error when processing this SQL operation. Check your logs"),fe.error(o),new Error(Bn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};pD.exports=SS});var qr=g((hfe,TD)=>{"use strict";var X4=jb();TD.exports={searchByConditions:Z4,searchByHash:e3,searchByValue:t3,search:r3};var TS=Dn(),{transformReq:gS}=z(),j4=SD();async function Z4(e){return gS(e),TS.searchByConditions(e)}a(Z4,"searchByConditions");async function e3(e){gS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of TS.searchByHash(e))r&&t.push(r);return t}a(e3,"searchByHash");async function t3(e){gS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of TS.searchByValue(e))t.push(r);return t}a(t3,"searchByValue");function r3(e,t){try{let r=new X4(e);r.validate(),new j4(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(r3,"search")});var Nd=g((pfe,gD)=>{"use strict";var n3=Dn();gD.exports={writeTransaction:s3};function s3(e,t,r){return n3.writeTransaction(e,t,r)}a(s3,"writeTransaction")});var bD=g((gfe,OD)=>{"use strict";var i3=qr(),o3=ys(),RD=$(),a3=Fr(),Tfe=Nd(),c3=require("clone"),AS=require("alasql"),u3=bd(),AD=require("util"),l3=AD.promisify(o3.getTableSchema),_3=AD.promisify(i3.search),d3=P(),RS=z();u3(AS);OD.exports={update:E3};var f3="There was a problem performing this update. Please check the logs and try again.";async function E3({statement:e,hdb_user:t}){let r=await l3(e.table.databaseid,e.table.tableid),n=h3(e.columns);RS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=c3(s),c=RS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=AS.parse(u).statements[0],l=await _3(_),d=m3(n,l);return p3(o,d,t)}a(E3,"update");function h3(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=AS.compile(`SELECT ${r.expression.toString()} AS [${d3.FUNC_VAL}] FROM ?`)}),t}catch(t){throw RD.error(t),new Error(f3)}}a(h3,"createUpdateRecord");function m3(e,t){return RS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(m3,"buildUpdateRecords");async function p3(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await a3.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){RD.error(`Error delete new_attributes from update response: ${i}`)}return s}a(p3,"updateRecords")});var ND=g((bfe,yD)=>{var S3=require("alasql"),T3=qr(),g3=$(),R3=Dn(),bS=require("util"),OS=z(),A3=P(),O3=ys(),Afe=Nd(),Ofe=Fr(),b3="record",y3="successfully deleted",N3=bS.callbackify(D3),I3=bS.promisify(T3.search),w3=bS.promisify(O3.getTableSchema);yD.exports={convertDelete:N3};function C3(e){return`${e.deleted_hashes.length} ${b3}${e.deleted_hashes.length===1?"":"s"} ${y3}`}a(C3,"generateReturnMessage");async function D3({statement:e,hdb_user:t}){let r=await w3(e.table.databaseid,e.table.tableid);OS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=OS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=S3.parse(o).statements[0],u={operation:A3.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await I3(c);let _=await R3.deleteRecords(u);return OS.isEmptyOrZeroLength(_.message)&&(_.message=C3(_)),delete _.txn_time,_}catch(_){throw g3.error(_),_.hdb_code?_.message:_}}a(D3,"convertDelete")});var LD=g((Nfe,DD)=>{"use strict";var L3=bs(),{hdb_errors:ID}=se(),{getDatabases:wD}=(Ae(),ie(ke));DD.exports={checkSchemaExists:CD,checkSchemaTableExists:M3,schema_describe:L3};async function CD(e){if(!wD()[e])return ID.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(CD,"checkSchemaExists");async function M3(e,t){let r=await CD(e);if(r)return r;if(!wD()[e][t])return ID.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(M3,"checkSchemaTableExists")});var du=g((wfe,P3)=>{P3.exports={name:"harperdb",version:"4.3.29",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && 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:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.635.0","@aws-sdk/lib-storage":"3.635.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.1.3",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.17.1",yaml:"2.4.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",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.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.4.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var pu={};Fe(pu,{addAnalyticsListener:()=>mu,recordAction:()=>Sr,recordActionBinary:()=>Qr,setAnalyticsEnabled:()=>U3});function U3(e){qD=e}function Sr(e,t,r,n,s){if(!qD)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Cd.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},Cd.set(i,o)}Id||v3()}function Qr(e,t,r,n,s){Sr(!!e,t,r,n,s)}function mu(e){VD.push(e)}function v3(){Id=performance.now(),setTimeout(async()=>{let e=performance.now()-Id;Id=0;let t=[],r={time:Date.now(),period:e,threadId:oo.threadId,metrics:t};for(let[s,i]of Cd){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of $D){let E=Math.floor(c*d),f=o[E-1];if(E>u){let h=E-u;if(f===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:f,count:h}:f),l=f;u=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await YD()}let n=process.memoryUsage();t.push({metric:"memory",threadId:oo.threadId,byThread:!0,...n});for(let s of VD)s(t);Cd=new Map,oo.parentPort?oo.parentPort.postMessage({type:kD,report:r}):QD({report:r})},FD).unref()}async function B3(e,t=6e4){let r=IS(),n=KD(),s=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,fu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,fu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,u=new Map,_=[],l;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;l=p;let{metrics:T,threadId:A}=S;for(let b of T||[]){let{path:I,method:B,type:U,metric:F,count:M,total:Q,distribution:J,threads:X,...oe}=b;M||(M=1);let ue=F+(I?"-"+I:"");B!==void 0&&(ue+="-"+B),U!==void 0&&(ue+="-"+U);let le=c.get(ue);if(le){if(le.threads){let Ne=le.threads[A];if(Ne)le=Ne;else{le.threads[A]=Object.assign({},oe);continue}}le.count||(le.count=1);let Be=le.count;for(let Ne in oe){let xe=oe[Ne];typeof xe=="number"&&(le[Ne]=(le[Ne]*Be+xe*M)/(Be+M))}le.count+=M,Q>=0&&(le.total+=Q,le.ratio=le.total/le.count)}else le=Object.assign({period:t},b),delete le.distribution,c.set(ue,le),le.byThread&&(le.threads=[],le.threads[A]=Object.assign({},oe),_.push(le));if(J){J=J.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Be=u.get(ue);Be?Be.push(...J):u.set(ue,J)}}await YD()}for(let p of _){let{path:S,method:T,type:A,metric:b,count:I,total:B,distribution:U,threads:F,...M}=p;F=F.filter(Q=>Q);for(let Q in M){if(typeof p[Q]!="number")continue;let J=0;for(let X of F){let oe=X[Q];typeof oe=="number"&&(J+=oe)}p[Q]=J}p.count=F.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Ne,xe)=>Ne.value>xe.value?1:-1);let A=T.count-1,b=[],I=0,B=0,U;for(let Ne of $D){let xe=A*Ne;for(;I<xe;)U=S[B++],I+=U.count,B===1&&I--;let n_=S[B>1?B-2:0];U||(U=S[0]),b.push(U.value-(U.value-n_.value)*(I-xe)/U.count)}let[F,M,Q,J,X,oe,ue,le,Be]=b;Object.assign(T,{p1:F,p10:M,p25:Q,median:J,p75:X,p90:oe,p95:ue,p99:le,p999:Be})}let d;for(let[p,S]of c)S.id=(0,wd.getNextMonotonicTime)(),S.time=l,n.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||n.primaryStore.put(S.id,S)}),d=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(d||h*10>f){let p=(0,wd.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:f-MD,active:h-PD,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(p,S,{append:!0}).then(T=>{T||n.primaryStore.put(p,S)})}MD=f,PD=h}async function UD(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function IS(){return vD||(vD=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function KD(){return BD||(BD=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function G3(){WD=!0;let e=(0,hu.get)(NS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await B3(FD,e),await UD(IS(),x3),await UD(KD(),H3)},Math.min(e/2,2147483647)).unref()}function QD(e,t){let r=e.report;r.threadId=t?.threadId||oo.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(xD+=n.mean*n.count);r.totalBytesProcessed=xD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(HD.get(t))}),HD.set(t,t.performance.eventLoopUtilization())),r.id=(0,wd.getNextMonotonicTime)(),IS().primaryStore.put(r.id,r),WD||G3(),q3&&(zD=k3(r))}async function k3(e){if(await zD,!fi){let r=(0,Eu.dirname)((0,fu.getLogFilePath)());try{fi=await(0,yS.open)((0,Eu.join)(r,"analytics.log"),"r+")}catch{fi=await(0,yS.open)((0,Eu.join)(r,"analytics.log"),"w+")}}let t=(await fi.stat()).size;if(t>F3){let r=Buffer.alloc(t);await fi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fi.write(r,{position:0}),await fi.truncate(r.length),t=r.length}await fi.write(JSON.stringify(e)+`
|
|
10
|
-
`,t)}var oo,GD,fu,Eu,yS,wd,hu,NS,Cd,qD,Id,FD,kD,VD,$D,MD,PD,YD,
|
|
8
|
+
`)},cK="certificate.pem",uK="privateKey.pem",lK="ca.pem";UN.exports={CERTIFICATE_VALUES:aK,CERTIFICATE_PEM_NAME:cK,PRIVATEKEY_PEM_NAME:uK,CA_PEM_NAME:lK}});var op=g((Sle,FN)=>{"use strict";var GN=require("fs-extra"),ae=require("joi"),_K=require("os"),{boolean:be,string:er,number:tt,array:J_}=ae.types(),{totalmem:BN}=require("os"),zi=require("path"),dK=$(),j_=z(),ple=vN(),xN=P(),fK=Xe(),HN="log",EK="components",hK="Invalid logging.rotation.maxSize unit. Available units are G, M or K",mK="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",pK="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",SK="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",TK="rootPath config parameter is undefined",gK="clustering.enabled config parameter is undefined",Ji=tt.min(0).required(),X_=J_.items({host:er.required(),port:Ji}).empty(null),es,qN=!1;FN.exports={configValidator:RK,routesValidator:IK,route_constraints:X_};function RK(e,t=!1){if(qN=t,es=e.rootPath,j_.isEmpty(es))throw TK;let r=be.required(),n=tt.min(0).max(1e3).empty(null).default(NK),s=er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Wc),i=er.optional().empty(null),o=er.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ae.string().empty(null).default(Wc),u=ae.custom(OK).empty(null).default(Wc),_=e.clustering?.enabled;if(j_.isEmpty(_))throw gK;let l=ae.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return _===!0?d=ae.object({enabled:r,hubServer:ae.object({cluster:ae.object({name:ae.required().empty(null),network:ae.object({port:Ji,routes:X_}).required()}).required(),leafNodes:ae.object({network:ae.object({port:Ji}).required()}).required(),network:ae.object({port:Ji}).required()}).required(),leafServer:ae.object({network:ae.object({port:Ji,routes:X_}).required(),streams:ae.object({maxAge:tt.min(120).allow(null).optional(),maxBytes:tt.min(1).allow(null).optional(),maxMsgs:tt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ae.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:be.optional(),databaseLevel:be.optional(),tls:ae.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:be.required(),verify:be.optional()}),user:er.optional().empty(null)}).required():d=ae.object({enabled:r,tls:ae.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:be.required()})}).required(),ae.object({authentication:ae.object({authorizeLocal:be,cacheTTL:tt.required(),enableSessions:be}),analytics:ae.object({aggregatePeriod:tt}),componentsRoot:s.optional(),clustering:d,localStudio:ae.object({enabled:r}).required(),logging:ae.object({auditAuthEvents:ae.object({logFailed:be,logSuccessful:be}),file:be.required(),level:ae.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ae.object({enabled:be.optional(),compress:be.optional(),interval:er.custom(yK).optional().empty(null),maxSize:er.custom(bK).optional().empty(null),path:er.optional().empty(null).default(Wc)}).required(),root:s,stdStreams:be.required(),auditLog:be.required()}).required(),operationsApi:ae.object({network:ae.object({cors:be.optional(),corsAccessList:J_.optional(),headersTimeout:tt.min(1).optional(),keepAliveTimeout:tt.min(1).optional(),port:tt.optional().empty(null),domainSocket:ae.optional().empty("hdb/operations-server").default(Wc),securePort:tt.optional().empty(null),timeout:tt.min(1).optional()}).optional(),tls:ae.alternatives([ae.array().items(l),l])}).required(),rootPath:er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ae.object({network:ae.object({port:Ji,securePort:Ji,mtls:ae.alternatives([be.optional(),ae.object({user:er.optional(),certificateAuthority:i,required:be.optional()})])}).required(),webSocket:be.optional(),requireAuthentication:be.optional()}),http:ae.object({compressionThreshold:tt.optional(),cors:be.optional(),corsAccessList:J_.optional(),headersTimeout:tt.min(1).optional(),port:tt.min(0).optional().empty(null),securePort:tt.min(0).optional().empty(null),maxHeaderSize:tt.optional(),mtls:ae.alternatives([be.optional(),ae.object({user:er.optional(),certificateAuthority:i,required:be.optional()})]),threadRange:ae.alternatives([J_.optional(),er.optional()])}).required(),threads:ae.alternatives(n.optional(),ae.object({count:n.optional(),debug:ae.alternatives(be.optional(),ae.object({startingPort:tt.min(1).optional(),host:er.optional(),waitForDebugger:be.optional()})),maxHeapMemory:tt.min(0).optional()})),storage:ae.object({writeAsync:be.required(),overlappingSync:be.optional(),caching:be.optional(),compression:ae.alternatives([be.optional(),ae.object({dictionary:er.optional(),threshold:tt.optional()})]),compactOnStart:be.optional(),compactOnStartKeepBackup:be.optional(),noReadAhead:be.optional(),path:u,prefetchWrites:be.optional(),maxFreeSpaceToLoad:tt.optional(),maxFreeSpaceToRetain:tt.optional()}).required(),ignoreScripts:be.optional(),tls:ae.alternatives([ae.array().items(l),l])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(RK,"configValidator");function AK(e){return qN||GN.existsSync(e)?null:`Specified path ${e} does not exist.`}a(AK,"doesPathExist");function OK(e,t){ae.assert(e,er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=AK(e);if(r)return t.message(r)}a(OK,"validatePath");function bK(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(hK);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(pK):e}a(bK,"validateRotationMaxSize");function yK(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(mK);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(SK):e}a(yK,"validateRotationInterval");function NK(e,t){let r=t.state.path.join("."),n=_K.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||BN();return i=Math.round(Math.min(i,BN())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),dK.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(NK,"setDefaultThreads");function Wc(e,t){let r=t.state.path.join(".");if(!j_.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(j_.isEmpty(es))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return zi.join(es,EK);case"logging.root":return zi.join(es,HN);case"clustering.leafServer.streams.path":return zi.join(es,"clustering","leaf");case"storage.path":let n=zi.join(es,xN.LEGACY_DATABASES_DIR_NAME);return GN.existsSync(n)?n:zi.join(es,xN.DATABASES_DIR_NAME);case"logging.rotation.path":return zi.join(es,HN);case"operationsApi.network.domainSocket":return r==null?null:zi.join(es,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Wc,"setDefaultRoot");function IK(e){let t=ae.object({routes:X_});return fK.validateBySchema({routes:e},t)}a(IK,"routesValidator")});var hr=g((Rle,JN)=>{"use strict";var Vr=P(),Bt=z(),It=$(),{configValidator:wK,routesValidator:kN}=op(),Er=require("fs-extra"),CK=require("yaml"),Ln=require("path"),DK=require("is-number"),$N=require("properties-reader"),LK=require("lodash"),{handleHDBError:MK}=se(),{HTTP_STATUS_CODES:PK,HDB_ERROR_MSGS:Z_}=vr(),gle=require("minimist"),{server:UK}=(_r(),ie(Gi)),{DATABASES_PARAM_CONFIG:Qc,CONFIG_PARAMS:kr,CONFIG_PARAM_MAP:Mn}=Vr,vK="Unable to get config value because config is uninitialized",BK="Config successfully initialized",xK="Error backing up config file",HK="Empty parameter sent to getConfigValue",YN=Ln.join(Vr.PACKAGE_ROOT,"config","yaml",Vr.HDB_DEFAULT_CONFIG_FILE),GK="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",VN={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"},ed,wt,td;JN.exports={createConfigFile:qK,getDefaultConfig:FK,getConfigValue:WN,initConfig:cp,flattenConfig:zo,updateConfigValue:QN,updateConfigObject:VK,getConfiguration:KK,setConfiguration:WK,readConfigFile:lp,getClusteringRoutes:QK,initOldConfig:zN,getConfigFromFile:zK,getConfigFilePath:ji,addConfig:JK,deleteConfigFromFile:jK,getConfigObj:XK};function qK(e,t=!1){let r=ui(YN);ed=zo(r.toJSON());let n;for(let c in e){let u=Mn[c.toLowerCase()];if(u===kr.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(_=>({[_]:e[c][_]}));continue}if(!u&&(c.endsWith("_package")||c.endsWith("_port"))&&(u=c),u!==void 0){let _=u.split("_"),l=ap(u,e[c]);u==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{r.setIn([..._],l)}catch(d){It.error(d)}}}n&&KN(r,n),up(r,t);let s=r.toJSON();wt=zo(s);let i=r.getIn(["rootPath"]),o=Ln.join(i,Vr.HDB_CONFIG_FILE);Er.createFileSync(o),Er.writeFileSync(o,String(r)),It.trace(`Config file written to ${o}`)}a(qK,"createConfigFile");function KN(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Bt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Qc.TABLES))for(let i in n[s][Qc.TABLES])for(let o in n[s][Qc.TABLES][i]){let c=n[s][Qc.TABLES][i][o],u=[kr.DATABASES,s,Qc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in n[s]){let o=n[s][i],c=[kr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){It.error("Error parsing schemas CLI/env config arguments",n)}}a(KN,"setSchemasConfig");function FK(e){if(ed===void 0){let r=ui(YN);ed=zo(r.toJSON())}let t=Mn[e.toLowerCase()];if(t!==void 0)return ed[t.toLowerCase()]}a(FK,"getDefaultConfig");function WN(e){if(e==null){It.error(HK);return}if(wt===void 0){It.trace(vK);return}let t=Mn[e.toLowerCase()];if(t!==void 0)return wt[t.toLowerCase()]}a(WN,"getConfigValue");function ji(e=Bt.getPropsFilePath()){let t=Bt.getEnvCliRootPath();return t?Ln.join(t,Vr.HDB_CONFIG_FILE):$N(e).get(Vr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ji,"getConfigFilePath");function cp(e=!1){if(wt===void 0||e){let t;if(!Bt.noBootFile()){t=Bt.getPropsFilePath();try{Er.accessSync(t,Er.constants.F_OK|Er.constants.R_OK)}catch(i){throw It.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ji(t),n;if(r.includes("config/settings.js"))try{zN(r);return}catch(i){if(i.code!==Vr.NODE_ERROR_CODES.ENOENT)throw i}try{n=ui(r)}catch(i){if(i.code===Vr.NODE_ERROR_CODES.ENOENT){It.trace(`HarperDB config file not found at ${r}.
|
|
9
|
+
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}`)}kK(n,r),up(n);let s=n.toJSON();if(UK.config=s,wt=zo(s),wt.logging_rotation_rotate)for(let i in VN)wt[i]&&It.error(`Config ${VN[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);It.trace(BK)}}a(cp,"initConfig");function kK(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Ln.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Ln.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Ln.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(It.trace("Updating config file with missing config params"),Er.writeFileSync(t,String(e)))}a(kK,"checkForUpdatedConfig");function up(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=wK(r,t);if(n.error)throw Z_.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(up,"validateConfig");function VK(e,t){wt===void 0&&(wt={});let r=Mn[e.toLowerCase()];if(r===void 0){It.trace(`Unable to update config object because config param '${e}' does not exist`);return}wt[r.toLowerCase()]=t}a(VK,"updateConfigObject");function QN(e,t,r=void 0,n=!1,s=!1,i=!1){wt===void 0&&cp();let o=WN(Mn.hdb_root),c=Ln.join(o,Vr.HDB_CONFIG_FILE),u=ui(c),_;if(r===void 0&&e.toLowerCase()===kr.DATABASES)_=t;else if(r===void 0){let E;if(i)E=e;else if(E=Mn[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=ap(E,t);u.setIn([...f],h)}else for(let E in r){let f=Mn[E.toLowerCase()];if(f===kr.HTTP_SECUREPORT&&r[E]===wt[kr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),f===kr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===wt[kr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),f===kr.DATABASES){_=r[E];continue}if(f?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),p=Vr.LEGACY_CONFIG_PARAMS[E.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(f=p,h=p.split("_"));let S=ap(f,r[E]);f==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(T){It.error(T)}}}_&&KN(u,_),up(u);let l=u.getIn(["rootPath"]),d=Ln.join(l,Vr.HDB_CONFIG_FILE);n===!0&&$K(c,l),Er.writeFileSync(d,String(u)),s&&(wt=zo(u.toJSON())),It.trace(`Config parameter: ${e} updated with value: ${t}`)}a(QN,"updateConfigValue");function $K(e,t){try{let r=Ln.join(t,"backup",`${Vr.HDB_CONFIG_FILE}.bak`);Er.copySync(e,r),It.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){It.error(xK),It.error(r)}}a($K,"backupConfigFile");var YK=["databases"];function zo(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),td=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!YK.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!kr[u.toUpperCase()]&&Mn[u]&&(s[Mn[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(zo,"flattenConfig");function ap(e,t){if(e===kr.CLUSTERING_NODENAME||e===kr.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(DK(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Bt.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 Bt.autoCast(t)}a(ap,"castConfigValue");function KK(){let e=Bt.getPropsFilePath(),t=ji(e);return ui(t).toJSON()}a(KK,"getConfiguration");async function WK(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return QN(void 0,void 0,s,!0),GK}catch(i){throw typeof i=="string"||i instanceof String?MK(i,i,PK.BAD_REQUEST,void 0,void 0,!0):i}}a(WK,"setConfiguration");function lp(){let e=Bt.getPropsFilePath();try{Er.accessSync(e,Er.constants.F_OK|Er.constants.R_OK)}catch(n){if(!Bt.noBootFile())throw It.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ji(e);return ui(t).toJSON()}a(lp,"readConfigFile");function ui(e){return CK.parseDocument(Er.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ui,"parseYamlDoc");function QK(){let e=lp(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Bt.isEmptyOrZeroLength(t)?[]:t;let r=kN(t);if(r)throw Z_.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Bt.isEmptyOrZeroLength(n)?[]:n;let s=kN(n);if(s)throw Z_.CONFIG_VALIDATION(s.message);if(!Bt.isEmptyOrZeroLength(n)&&!Bt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Bt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Z_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(QK,"getClusteringRoutes");function zN(e){let t=$N(e);wt={};for(let r in Mn){let n=t.get(r.toUpperCase());if(Bt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Mn[r].toLowerCase();s===kr.LOGGING_ROOT?wt[s]=Ln.dirname(n):wt[s]=n}return wt}a(zN,"initOldConfig");function zK(e){let t=lp();return LK.get(t,e.replaceAll("_","."))}a(zK,"getConfigFromFile");async function JK(e,t){let r=ui(ji());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Er.writeFile(ji(),String(r))}a(JK,"addConfig");function jK(e){let t=ji(Bt.getPropsFilePath()),r=ui(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Ln.join(n,Vr.HDB_CONFIG_FILE);Er.writeFileSync(s,String(r))}a(jK,"deleteConfigFromFile");function XK(){return td||(cp(),td)}a(XK,"getConfigObj")});var XN=g((Ole,jN)=>{"use strict";var rd=P(),nd=class{static{a(this,"BaseLicense")}constructor(t=0,r=rd.RAM_ALLOCATION_ENUM.DEFAULT,n=rd.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},_p=class extends nd{static{a(this,"ExtendedLicense")}constructor(t=0,r=rd.RAM_ALLOCATION_ENUM.DEFAULT,n=rd.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};jN.exports={BaseLicense:nd,ExtendedLicense:_p}});var Xi=g((yle,sI)=>{"use strict";var jo=require("fs-extra"),eI=z_(),tI=require("crypto"),ZK=require("moment"),eW=require("uuid").v4,tr=$(),fp=require("path"),tW=z(),li=P(),{totalmem:ZN}=require("os"),rW=XN().ExtendedLicense,Jo="invalid license key format",nW="061183",sW="mofi25",iW="aes-256-cbc",oW=16,aW=32,rI=ee();rI.initSync();var dp;sI.exports={validateLicense:nI,generateFingerPrint:uW,licenseSearch:mp,getLicense:dW,checkMemoryLimit:fW};function Ep(){return fp.join(rI.getHdbBasePath(),li.LICENSE_KEY_DIR_NAME,li.LICENSE_FILE_NAME)}a(Ep,"getLicenseDirPath");function cW(){let e=Ep();return fp.join(e,li.LICENSE_FILE_NAME)}a(cW,"getLicenseFilePath");function hp(){let e=Ep();return fp.join(e,li.REG_KEY_FILE_NAME)}a(hp,"getFingerPrintFilePath");async function uW(){let e=hp();try{return await jo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await lW();throw tr.error(`Error writing fingerprint file to ${e}`),tr.error(t),new Error("There was an error generating the fingerprint")}}a(uW,"generateFingerPrint");async function lW(){let e=eW(),t=eI.hash(e),r=hp();try{await jo.mkdirp(Ep()),await jo.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw tr.error(`Error writing fingerprint file to ${r}`),tr.error(n),new Error("There was an error generating the fingerprint")}return t}a(lW,"writeFingerprint");function nI(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:li.RAM_ALLOCATION_ENUM.DEFAULT,version:li.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return tr.error("empty license key passed to validate."),r;let n=hp(),s=!1;try{s=jo.statSync(n)}catch(i){tr.error(i)}if(s){let i;try{i=jo.readFileSync(n,"utf8")}catch{tr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(sW),c=o[1];c=Buffer.concat([Buffer.from(c)],oW);let u=Buffer.concat([Buffer.from(i)],aW),_=tI.createDecipheriv(iW,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let f=_W(o[0],i);if(f)l=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Jo),tr.error(Jo),new Error(Jo)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Jo),tr.error(Jo),new Error(Jo)}else r.exp_date=l;r.exp_date<ZK().valueOf()&&(r.valid_date=!1),eI.validate(o[1],`${nW}${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||tr.error("Invalid licence"),r}a(nI,"validateLicense");function _W(e,t){try{let r=tI.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{tr.warn("Check old license failed")}}a(_W,"checkOldLicense");function mp(){let e=new rW,t=[];try{t=jo.readFileSync(cW(),"utf-8").split(li.NEW_LINE)}catch(r){r.code==="ENOENT"?tr.info("no license file found"):tr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(tW.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=nI(s.license_key,s.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(s){tr.error("There was an error parsing the license string."),tr.error(s),e.ram_allocation=li.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return dp=e,e}a(mp,"licenseSearch");async function dW(){return dp||await mp(),dp}a(dW,"getLicense");function fW(){let e=mp().ram_allocation,t=process.constrainedMemory?.()||ZN();if(t=Math.round(Math.min(t,ZN())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(fW,"checkMemoryLimit")});var _n=g((Dle,gI)=>{"use strict";var cI="username is required",uI="nothing to update, must supply active, role or password to update",lI="password cannot be an empty string",_I="If role is specified, it cannot be empty.",dI="active must be true or false";gI.exports={addUser:AW,alterUser:OW,dropUser:yW,getSuperUser:CW,userInfo:NW,listUsers:id,listUsersExternal:IW,setUsersToGlobal:Zo,findAndValidateUser:SI,getClusterUser:DW,USERNAME_REQUIRED:cI,ALTERUSER_NOTHING_TO_UPDATE:uI,EMPTY_PASSWORD:lI,EMPTY_ROLE:_I,ACTIVE_BOOLEAN:dI};var fI=Fr(),EW=ci(),Tp=z_(),EI=LN(),hI=qr(),gp=Ns(),$r=z(),mI=require("validate.js"),Oe=$(),{promisify:hW}=require("util"),Rp=Os(),iI=P(),oI=Ve(),mW=hr(),Ile=ee(),wle=Xi(),pW=Vi(),{table:Cle}=(Ae(),ie(ke)),{handleHDBError:ts,hdb_errors:SW}=se(),{HTTP_STATUS_CODES:rs,AUTHENTICATION_ERROR_MSGS:pp,HDB_ERROR_MSGS:Xo}=SW,{UserEventMsg:Ap}=Pn(),Sp=require("lodash"),{server:Op}=(_r(),ie(Gi)),TW=$();Op.getUser=(e,t)=>SI(e,t,t!=null);var pI={username:!0,active:!0,role:!0,password:!0},aI=new Map,sd=hI.searchByValue,gW=hI.searchByHash,RW=hW(EW.delete);async function AW(e){let t=mI.cleanAttributes(e,pI),r=EI.addUserValidation(t);if(r)throw ts(new Error,r.message,rs.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await sd(n),s=s&&Array.from(s)}catch(u){throw Oe.error("There was an error searching for a role in add user"),Oe.error(u),u}if(!s||s.length<1)throw ts(new Error,Xo.ROLE_NAME_NOT_FOUND(t.role),rs.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw ts(new Error,Xo.DUP_ROLES_FOUND(t.role),rs.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Rp.encrypt(t.password)),t.password=Tp.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await fI.insert(i)}catch(u){throw Oe.error("There was an error searching for a user."),Oe.error(u),u}Oe.debug(o);try{await Zo()}catch(u){throw Oe.error("Got an error setting users to global"),Oe.error(u),u}if(o.skipped_hashes.length===1)throw ts(new Error,Xo.USER_ALREADY_EXISTS(t.username),rs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],gp.signalUserChange(new Ap(process.pid)),`${c.username} successfully added`}a(AW,"addUser");async function OW(e){let t=mI.cleanAttributes(e,pI);if($r.isEmptyOrZeroLength(t.username))throw new Error(cI);if($r.isEmptyOrZeroLength(t.password)&&$r.isEmptyOrZeroLength(t.role)&&$r.isEmptyOrZeroLength(t.active))throw new Error(uI);if(!$r.isEmpty(t.password)&&$r.isEmptyOrZeroLength(t.password.trim()))throw new Error(lI);if(!$r.isEmpty(t.active)&&!$r.isBoolean(t.active))throw new Error(dI);let r=bW(t.username);if(!$r.isEmpty(t.password)&&!$r.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Rp.encrypt(t.password)),t.password=Tp.hash(t.password)),t.role==="")throw new Error(_I);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 sd(i)||[])}catch(c){throw Oe.error("Got an error searching for a role."),Oe.error(c),c}if(!o||o.length===0){let c=Xo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Oe.error(c),ts(new Error,c,rs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Xo.ALTER_USER_DUP_ROLES(t.role);throw Oe.error(c),ts(new Error,c,rs.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await fI.update(n)}catch(i){throw Oe.error("Error during update."),Oe.error(i),i}try{await Zo()}catch(i){throw Oe.error("Got an error setting users to global"),Oe.error(i),i}return gp.signalUserChange(new Ap(process.pid)),s}a(OW,"alterUser");function bW(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(bW,"isClusterUser");async function yW(e){try{let t=EI.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if($r.isEmpty(global.hdb_users.get(e.username)))throw ts(new Error,Xo.USER_NOT_EXIST(e.username),rs.NOT_FOUND,void 0,void 0,!0);let n;try{n=await RW(r)}catch(s){throw Oe.error("Got an error deleting a user."),Oe.error(s),s}Oe.debug(n);try{await Zo()}catch(s){throw Oe.error("Got an error setting users to global."),Oe.error(s),s}return gp.signalUserChange(new Ap(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(yW,"dropUser");async function NW(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Sp.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await gW(r)}catch(s){throw Oe.error("Got an error searching for a role."),Oe.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Oe.error(r),r}return t}a(NW,"userInfo");async function IW(){let e;try{e=await id()}catch(t){throw Oe.error("Got an error listing users."),Oe.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(IW,"listUsersExternal");async function id(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await sd(e)}catch(o){throw Oe.error("Got an error searching for roles."),Oe.error(o),o}let r={};for(let o of t)r[o.id]=Sp.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await sd(n)}catch(o){throw Oe.error("Got an error searching for users."),Oe.error(o),o}let i=new Map;for(let o of s)o=Sp.cloneDeep(o),o.role=r[o.role],wW(o.role),i.set(o.username,o);return i}catch(e){throw Oe.error("got an error listing users"),Oe.error(e),$r.errorizeMessage(e)}return null}a(id,"listUsers");function wW(e){try{if(!e){Oe.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(pW)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Oe.error("Got an error trying to set system permissions."),Oe.error(t)}}a(wW,"appendSystemTablesToRole");async function Zo(){try{let e=await id();global.hdb_users=e}catch(e){throw Oe.error(e),e}}a(Zo,"setUsersToGlobal");async function SI(e,t,r=!0){global.hdb_users||await Zo();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw ts(new Error,pp.GENERIC_AUTH_FAIL,rs.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw ts(new Error,pp.USER_INACTIVE,rs.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(aI.get(t)===n.password)return s;if(Tp.validate(n.password,t))aI.set(t,n.password);else throw ts(new Error,pp.GENERIC_AUTH_FAIL,rs.UNAUTHORIZED,void 0,void 0,!0)}return s}a(SI,"findAndValidateUser");async function CW(){global.hdb_users||await Zo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(CW,"getSuperUser");async function DW(){let e=await id(),t=mW.getConfigFromFile(iI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!$r.isEmpty(r)&&r?.role?.role===iI.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Rp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+oI.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+oI.SERVER_SUFFIX.ADMIN,r}a(DW,"getClusterUser");var TI=[];Op.invalidateUser=function(e){for(let t of TI)try{t(e)}catch(r){TW.error("Error invalidating user",r)}};Op.onInvalidatedUser=function(e){TI.push(e)}});var Jc=g((Ule,bI)=>{"use strict";var Zi=$(),Yr=P(),LW=Xy(),Mle=ys(),Ple=bs(),MW=_n(),{validateEvent:RI}=Pn(),zc=Dn(),PW=require("process"),{resetDatabases:UW}=(Ae(),ie(ke)),vW={[Yr.ITC_EVENT_TYPES.SCHEMA]:BW,[Yr.ITC_EVENT_TYPES.USER]:OI};async function BW(e){let t=RI(e);if(t){Zi.error(t);return}Zi.trace("ITC schemaHandler received schema event:",e),await LW(e.message),await xW(e.message)}a(BW,"schemaHandler");async function xW(e){try{zc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),zc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),zc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=UW();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Zi.error(t)}}a(xW,"syncSchemaMetadata");var AI=[];async function OI(e){try{try{zc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),zc.resetReadTxn(Yr.SYSTEM_SCHEMA_NAME,Yr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Zi.warn(r)}let t=RI(e);if(t){Zi.error(t);return}Zi.trace(`ITC userHandler ${Yr.HDB_ITC_CLIENT_PREFIX}${PW.pid} received user event:`,e),await MW.setUsersToGlobal();for(let r of AI)r()}catch(t){Zi.error(t)}}a(OI,"userHandler");OI.addListener=function(e){AI.push(e)};bI.exports=vW});var Pn=g((qle,NI)=>{"use strict";var Ble=$(),bp=z(),HW=P(),{ITC_ERRORS:jc}=vr(),{parentPort:xle,threadId:GW,isMainThread:qW,workerData:Hle}=require("worker_threads"),{onMessageFromWorkers:FW,broadcast:Gle,broadcastWithAcknowledgement:kW}=Qe();NI.exports={sendItcEvent:VW,validateEvent:yI,SchemaEventMsg:$W,UserEventMsg:YW};var od;FW(async(e,t)=>{od=od||Jc(),yI(e),od[e.type]&&await od[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function VW(e){return!qW&&e.message&&(e.message.originator=GW),kW(e)}a(VW,"sendItcEvent");function yI(e){if(typeof e!="object")return jc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||bp.isEmpty(e.type))return jc.MISSING_TYPE;if(!e.hasOwnProperty("message")||bp.isEmpty(e.message))return jc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||bp.isEmpty(e.message.originator))return jc.MISSING_ORIGIN;if(HW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return jc.INVALID_EVENT(e.type)}a(yI,"validateEvent");function $W(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a($W,"SchemaEventMsg");function YW(e){this.originator=e}a(YW,"UserEventMsg")});var Ns=g((Vle,DI)=>{"use strict";var II=P(),kle=z(),ad=$(),wI=zy(),ea,{sendItcEvent:CI}=Pn();function KW(e){try{ad.trace("signalSchemaChange called with message:",e),ea=ea||Jc();let t=new wI(II.ITC_EVENT_TYPES.SCHEMA,e);return ea.schema(t),CI(t)}catch(t){ad.error(t)}}a(KW,"signalSchemaChange");function WW(e){try{ad.trace("signalUserChange called with message:",e),ea=ea||Jc();let t=new wI(II.ITC_EVENT_TYPES.USER,e);return ea.user(t),CI(t)}catch(t){ad.error(t)}}a(WW,"signalUserChange");DI.exports={signalSchemaChange:KW,signalUserChange:WW}});var cd=g((Yle,MI)=>{"use strict";var LI=z(),QW=P(),zW=$(),JW=q_(),jW=G_(),XW=Ns(),{SchemaEventMsg:ZW}=Pn(),eQ="already exists in";MI.exports=tQ;async function tQ(e,t,r){if(LI.isEmptyOrZeroLength(r))return r;let n=[];LI.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await rQ(e,t.schema,t.name,i)})),s}a(tQ,"lmdbCheckForNewAttributes");async function rQ(e,t,r,n){let s=new jW(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await nQ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(eQ))zW.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(rQ,"createNewAttribute");async function nQ(e){let t;return t=await JW(e),XW.signalSchemaChange(new ZW(process.pid,QW.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(nQ,"createAttribute")});var ta=g((Wle,PI)=>{"use strict";var yp=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};PI.exports=yp});var vI=g((zle,UI)=>{"use strict";var sQ=ta(),iQ=P().OPERATIONS_ENUM,Np=class extends sQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(iQ.INSERT,r,n,s,i),this.records=t}};UI.exports=Np});var xI=g((jle,BI)=>{"use strict";var oQ=ta(),aQ=P().OPERATIONS_ENUM,Ip=class extends oQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(aQ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};BI.exports=Ip});var GI=g((Zle,HI)=>{"use strict";var cQ=ta(),uQ=P().OPERATIONS_ENUM,wp=class extends cQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(uQ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};HI.exports=wp});var FI=g((t_e,qI)=>{"use strict";var lQ=ta(),_Q=P().OPERATIONS_ENUM,Cp=class extends lQ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(_Q.DELETE,n,s,t,i),this.original_records=r}};qI.exports=Cp});var Xc=g((s_e,YI)=>{"use strict";var n_e=require("path"),kI=ze(),dQ=vI(),fQ=xI(),EQ=GI(),hQ=FI(),ra=ft(),VI=z(),{CONFIG_PARAMS:mQ}=P(),$I=ee();$I.initSync();var ud=P().OPERATIONS_ENUM,{getTransactionAuditStorePath:pQ}=je();YI.exports=SQ;async function SQ(e,t){if($I.get(mQ.LOGGING_AUDITLOG)===!1)return;let r=pQ(e.schema,e.table),n=await kI.openEnvironment(r,e.table,!0),s=TQ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){kI.initializeDBIs(n,ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ra.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),VI.isEmpty(s.user_name)||n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(SQ,"writeTransaction");function TQ(e,t){let r=VI.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===ud.INSERT)return new dQ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.UPDATE)return new fQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.UPSERT)return new EQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.DELETE)return new hQ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(TQ,"createTransactionObject")});var Dp=g((a_e,KI)=>{"use strict";var gQ=$c(),o_e=Ic(),Zc=P(),RQ=wc(),AQ=Ko().insertRecords,OQ=ze(),bQ=$(),yQ=cd(),{getSchemaPath:NQ}=je(),IQ=Xc();KI.exports=wQ;async function wQ(e){try{let{schema_table:t,attributes:r}=gQ(e);RQ(e,r,t.hash_attribute),e.schema!==Zc.SYSTEM_SCHEMA_NAME&&(r.includes(Zc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Zc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Zc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Zc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await yQ(e.hdb_auth_header,t,r),s=NQ(e.schema,e.table),i=await OQ.openEnvironment(s,e.table),o=await AQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await IQ(e,o)}catch(c){bQ.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(wQ,"lmdbCreateRecords")});var zI=g((u_e,QI)=>{"use strict";var WI=P(),CQ=Dp(),DQ=Ic(),LQ=require("fs-extra"),{getSchemaPath:MQ}=je();QI.exports=PQ;async function PQ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new DQ(WI.SYSTEM_SCHEMA_NAME,WI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await CQ(r),await LQ.mkdirp(MQ(e.schema))}a(PQ,"lmdbCreateSchema")});var jI=g((__e,JI)=>{"use strict";var Lp=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};JI.exports=Lp});var tw=g((m_e,ew)=>{"use strict";var XI=ze(),Mp=Br(),Pp=vr().LMDB_ERRORS_ENUM,UQ=ft(),ZI=$(),f_e=z(),vQ=require("lmdb"),BQ=jI(),xQ=P(),{OVERFLOW_MARKER:E_e,MAX_SEARCH_KEY_LENGTH:h_e}=UQ,HQ=xQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function GQ(e,t,r,n){if(Mp.validateEnv(e),t===void 0)throw new Error(Pp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Pp.IDS_REQUIRED):new Error(Pp.IDS_MUST_BE_ITERABLE);try{let s=XI.listDBIs(e);XI.initializeDBIs(e,t,s);let i=new BQ,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||n&&h[HQ]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,vQ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let T=s[S];if(!h.hasOwnProperty(T)||T===t)continue;let A=e.dbis[T],b=h[T];if(b!=null)try{let I=Mp.getIndexedValues(b);if(I)for(let B=0,U=I.length;B<U;B++)A.remove(I[B],o)}catch{ZI.warn(`cannot delete from attribute: ${T}, ${b}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){ZI.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let E=0,f=l.length;E<f;E++)l[E]===!0?i.deleted.push(u[E]):(i.skipped.push(u[E]),_.push(E));let d=0;for(let E=0;E<_.length;E++){let f=_[E];i.original_records.splice(f-d,1),d++}return i.txn_time=Mp.getNextMonotonicTime(),i}catch(s){throw s}}a(GQ,"deleteRecords");ew.exports={deleteRecords:GQ}});var eu=g((S_e,nw)=>{"use strict";var na=z(),qQ=tw(),FQ=ze(),{getSchemaPath:kQ}=je(),VQ=Xc(),$Q=$();nw.exports=YQ;async function YQ(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(na.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(na.isEmptyOrZeroLength(e.hash_values)&&!na.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];na.isEmpty(u)||e.hash_values.push(u)}}if(na.isEmptyOrZeroLength(e.hash_values))return rw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(na.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=kQ(e.schema,e.table),i=await FQ.openEnvironment(s,e.table),o=await qQ.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await VQ(e,o)}catch(c){$Q.error(`unable to write transaction due to ${c.message}`)}return rw(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(YQ,"lmdbDeleteRecords");function rw(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(rw,"createDeleteResponse")});var vp=g((R_e,sw)=>{"use strict";var KQ=P(),g_e=Br();function Up(e,t){let r=Object.create(null);if(t.length===1&&KQ.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(Up,"parseRow");function WQ(e,t,r,n){let s=Up(r,e);n.push(s)}a(WQ,"searchAll");function QQ(e,t,r,n){let s=Up(r,e);n[t]=s}a(QQ,"searchAllToMap");function zQ(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(zQ,"iterateDBI");function eo(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(eo,"pushResults");function JQ(e,t,r,n,s,i){t.toString().endsWith(e)&&eo(t,r,n,s,i)}a(JQ,"endsWith");function jQ(e,t,r,n,s,i){t.toString().includes(e)&&eo(t,r,n,s,i)}a(jQ,"contains");function XQ(e,t,r,n,s,i){t>e&&eo(t,r,n,s,i)}a(XQ,"greaterThanCompare");function ZQ(e,t,r,n,s,i){t>=e&&eo(t,r,n,s,i)}a(ZQ,"greaterThanEqualCompare");function ez(e,t,r,n,s,i){t<e&&eo(t,r,n,s,i)}a(ez,"lessThanCompare");function tz(e,t,r,n,s,i){t<=e&&eo(t,r,n,s,i)}a(tz,"lessThanEqualCompare");sw.exports={parseRow:Up,searchAll:WQ,searchAllToMap:QQ,iterateDBI:zQ,endsWith:JQ,contains:jQ,greaterThanCompare:XQ,greaterThanEqualCompare:ZQ,lessThanCompare:ez,lessThanEqualCompare:tz,pushResults:eo}});var sa=g((N_e,_w)=>{"use strict";var _i=ze(),O_e=$(),Kr=Br(),ld=ft(),ht=vr().LMDB_ERRORS_ENUM,b_e=z(),rz=P(),_d=vp(),{parseRow:nz}=_d,y_e=require("lmdb"),{OVERFLOW_MARKER:iw,MAX_SEARCH_KEY_LENGTH:sz}=ld;function ow(e,t,r,n=!1,s=void 0,i=void 0){return to(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(ow,"iterateFullIndex");function tu(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return to(e,t,r,(l,d,E,f)=>{let A={transaction:l,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return f===r?(A.values=!1,d.getRange(A).map(b=>({value:b}))):d.getRange(A)})}a(tu,"iterateRangeBetween");function to(e,t,r,n){let s=e.database||e,i=_i.openDBI(s,r);i[ld.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&_i.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(to,"setupTransaction");function aw(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(iw)){if(!s)if(r)s=_i.openDBI(e,r);else{let u=_i.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=_i.openDBI(e,u[_]),!s[ld.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(aw,"getOverflowCheck");function iz(e,t,r,n=!1,s=void 0,i=void 0){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return to(e,t,t,(o,c,u)=>(dd(r),r=ru(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>nz(_.value,r))))}a(iz,"searchAll");function oz(e,t,r,n=!1,s=void 0,i=void 0){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);dd(r),r=ru(e.database||e,r);let o=new Map;for(let{key:c,value:u}of ow(e,t,t,n,s,i))o.set(c,_d.parseRow(u,r));return o}a(oz,"searchAllToMap");function az(e,t,r=!1,n=void 0,s=void 0){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=ow(e,void 0,t,r,n,s),c=o.transaction,u=aw(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(az,"iterateDBI");function cz(e,t){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return _i.statDBI(e,t).entryCount}a(cz,"countAll");function uz(e,t,r,n,s=!1,i=void 0,o=void 0){return di(e,r,n),to(e,t,r,(c,u,_,l)=>(n=Kr.convertKeyValueToWrite(n),l===r?u.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:u.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(uz,"equals");function lz(e,t,r){return di(e,t,r),_i.openDBI(e,t).getValuesCount(r)}a(lz,"count");function _z(e,t,r,n,s=!1,i=void 0,o=void 0){return di(e,r,n),to(e,null,r,(c,u)=>{n=Kr.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let l;if(s===!0){let d;for(let E of u.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(n))return E;if(_===!0)return l.DONE}}),l.filter(E=>E)}else return l=u.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(_z,"startsWith");function dz(e,t,r,n,s=!1,i=void 0,o=void 0){return cw(e,t,r,n,s,i,o,!0)}a(dz,"endsWith");function cw(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return di(e,r,n),to(e,null,r,(u,_,l,d)=>{let E=aw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(iw)?_.getValues(f,{transaction:u}).map(p=>{let S=E(f,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[ld.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:_.getValues(f,{transaction:u}).map(p=>({key:f,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(cw,"contains");function fz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),tu(e,t,r,n,u,s,i,o,!0,!1)}a(fz,"greaterThan");function Ez(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),tu(e,t,r,n,u,s,i,o,!1,!1)}a(Ez,"greaterThanEqual");function hz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),tu(e,t,r,u,n,s,i,o,!1,!0)}a(hz,"lessThan");function mz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),tu(e,t,r,u,n,s,i,o,!1,!1)}a(mz,"lessThanEqual");function pz(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Kr.validateEnv(e),r===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ht.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ht.END_VALUE_REQUIRED);if(n=Kr.convertKeyValueToWrite(n),s=Kr.convertKeyValueToWrite(s),n>s)throw new Error(ht.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return tu(e,t,r,n,s,i,o,c)}a(pz,"between");function Sz(e,t,r,n){Kr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(dd(r),r=ru(s,r),n===void 0)throw new Error(ht.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=_d.parseRow(c,r)),o}a(Sz,"searchByHash");function Tz(e,t,r){Kr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Tz,"checkHashExists");function gz(e,t,r,n,s=[]){return lw(e,t,r,n,s),uw(e,t,r,n,s).map(i=>i[1])}a(gz,"batchSearchByHash");function Rz(e,t,r,n,s=[]){lw(e,t,r,n,s);let i=new Map;for(let[o,c]of uw(e,t,r,n,s))i.set(o,c);return i}a(Rz,"batchSearchByHashToMap");function uw(e,t,r,n,s=[]){return to(e,t,t,(i,o,c)=>{r=ru(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,_d.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(uw,"batchHashSearch");function lw(e,t,r,n,s){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(dd(r),n==null)throw new Error(ht.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ht.IDS_MUST_BE_ITERABLE)}a(lw,"initializeBatchSearchByHash");function dd(e){if(!Array.isArray(e))throw e===void 0?new Error(ht.FETCH_ATTRIBUTES_REQUIRED):new Error(ht.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(dd,"validateFetchAttributes");function di(e,t,r){if(Kr.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.SEARCH_VALUE_REQUIRED);if(r?.length>sz)throw new Error(ht.SEARCH_VALUE_TOO_LARGE)}a(di,"validateComparisonFunctions");function ru(e,t){return t.length===1&&rz.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=_i.listDBIs(e)),t}a(ru,"setGetWholeRowAttributes");_w.exports={searchAll:iz,searchAllToMap:oz,count:lz,countAll:cz,equals:uz,startsWith:_z,endsWith:dz,contains:cw,searchByHash:Sz,setGetWholeRowAttributes:ru,batchSearchByHash:gz,batchSearchByHashToMap:Rz,checkHashExists:Tz,iterateDBI:az,greaterThan:fz,greaterThanEqual:Ez,lessThan:hz,lessThanEqual:mz,between:pz}});var ia=g((w_e,mw)=>{var dw=require("lodash"),fw=Xe(),he=require("joi"),Az=z(),{hdb_schema_table:nu,checkValidTable:Ew,hdb_table:hw,hdb_database:fd}=Xn(),{handleHDBError:Oz,hdb_errors:bz}=se(),{getDatabases:yz}=(Ae(),ie(ke)),{HTTP_STATUS_CODES:Nz}=bz,Iz=he.object({database:fd,schema:fd,table:hw,search_attribute:nu,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(nu,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),wz=he.object({database:fd,schema:fd,table:hw,operator:he.string().valid("and","or").default("and").lowercase(),offset:he.number().integer().min(0),limit:he.number().integer().min(1),get_attributes:he.array().min(1).items(he.alternatives(nu,he.object())).optional(),sort:he.object({attribute:he.alternatives(nu,he.array().min(1)),descending:he.bool().optional()}).optional(),conditions:he.array().min(1).items(he.alternatives(he.object({operator:he.string().valid("and","or").default("and").lowercase(),conditions:he.array()}),he.object({search_attribute:he.alternatives(nu,he.array().min(1)),search_type:he.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:he.when("search_type",{switch:[{is:"equals",then:he.any()},{is:"between",then:he.array().items(he.alternatives([he.string(),he.number()])).length(2)}],otherwise:he.alternatives(he.string(),he.number())}).required()}))).required()});mw.exports=function(e,t){let r=null;switch(t){case"value":r=fw.validateBySchema(e,Iz);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(Ew("database",e.schema)),i(Ew("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"),s&&(r=new Error(s.trim()));break;case"conditions":r=fw.validateBySchema(e,wz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Az.checkGlobalSchemaTable(e.schema,e.table);if(s)return Oz(new Error,s,Nz.NOT_FOUND);let o=yz()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,E=l.conditions.length;d<E;d++){let f=l.conditions[d];f.conditions?u(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=dw.filter(c,l=>l!=="*"&&!l.startsWith?.("$")&&l.attribute!=="*"&&!Array.isArray(l)&&!l.name&&!dw.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var Bp=g((D_e,pw)=>{"use strict";var Cz=ze(),Dz=ia(),{getSchemaPath:Lz}=je();pw.exports=Mz;function Mz(e){let t=Dz(e,"hashes");if(t)throw t;let r=Lz(e.schema,e.table);return Cz.openEnvironment(r,e.table)}a(Mz,"initialize")});var xp=g((M_e,Sw)=>{"use strict";var Pz=sa(),Uz=Bp();Sw.exports=vz;async function vz(e){let t=await Uz(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Pz.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(vz,"lmdbGetDataByHash")});var oa=g((U_e,Tw)=>{"use strict";var Hp=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};Tw.exports=Hp});var Rw=g((x_e,gw)=>{"use strict";var B_e=oa(),Bz=sa(),xz=Bp();gw.exports=Hz;async function Hz(e){let t=await xz(e),r=global.hdb_schema[e.schema][e.table];return Bz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Hz,"lmdbSearchByHash")});var ns=g((G_e,Aw)=>{"use strict";var Gp=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};Aw.exports=Gp});var Ed=g((F_e,ww)=>{"use strict";var rr=sa(),Gz=ze(),qz=z(),me=ft(),ro=P(),Fz=Vi(),Ow=vr().LMDB_ERRORS_ENUM,{getSchemaPath:kz}=je(),Is=ro.SEARCH_WILDCARDS;async function Vz(e,t,r){let n;e.schema===ro.SYSTEM_SCHEMA_NAME?n=Fz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=Iw(e,n.hash_attribute,r,t);return yw(e,s,n.hash_attribute,r)}a(Vz,"prepSearch");async function yw(e,t,r,n){let s=kz(e.schema,e.table),i=await Gz.openEnvironment(s,e.table),o=Nw(i,e,t,r),c=o.transaction||i;if([me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,me.SEARCH_TYPES.SEARCH_ALL,me.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if($z(e,r)===!1){let l=e.search_attribute;if(l===r)return n?bw(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[l]:E.key}),"toObject");return n?bw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?rr.batchSearchByHashToMap(c,r,e.get_attributes,_):rr.batchSearchByHash(c,r,e.get_attributes,_)}a(yw,"executeSearch");function Nw(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<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 me.SEARCH_TYPES.EQUALS:s=rr.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.CONTAINS:s=rr.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.ENDS_WITH:case me.SEARCH_TYPES._ENDS_WITH:s=rr.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.STARTS_WITH:case me.SEARCH_TYPES._STARTS_WITH:s=rr.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return rr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return rr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.SEARCH_ALL:return rr.searchAll(e,n,t.get_attributes,o,c,u);case me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return rr.searchAllToMap(e,n,t.get_attributes,o,c,u);case me.SEARCH_TYPES.BETWEEN:s=rr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case me.SEARCH_TYPES.GREATER_THAN:case me.SEARCH_TYPES._GREATER_THAN:s=rr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.GREATER_THAN_EQUAL:case me.SEARCH_TYPES._GREATER_THAN_EQUAL:s=rr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.LESS_THAN:case me.SEARCH_TYPES._LESS_THAN:s=rr.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.LESS_THAN_EQUAL:case me.SEARCH_TYPES._LESS_THAN_EQUAL:s=rr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(Nw,"searchByType");function bw(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(bw,"createMapFromIterable");function $z(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 n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a($z,"checkToFetchMore");function Iw(e,t,r,n){if(qz.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Is.indexOf(s)>-1)return r===!0?me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:me.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Is[0])<0&&s.indexOf(Is[1])<0)return c===!0?r===!0?me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:me.SEARCH_TYPES.EQUALS;if(Is.indexOf(i)>=0&&Is.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),me.SEARCH_TYPES.CONTAINS;if(Is.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),me.SEARCH_TYPES.ENDS_WITH;if(Is.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),me.SEARCH_TYPES.STARTS_WITH;if(s.includes(Is[0])||s.includes(Is[1]))return me.SEARCH_TYPES.EQUALS;throw new Error(Ow.UNKNOWN_SEARCH_TYPE)}else switch(n){case ro.VALUE_SEARCH_COMPARATORS.BETWEEN:return me.SEARCH_TYPES.BETWEEN;case ro.VALUE_SEARCH_COMPARATORS.GREATER:return me.SEARCH_TYPES.GREATER_THAN;case ro.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return me.SEARCH_TYPES.GREATER_THAN_EQUAL;case ro.VALUE_SEARCH_COMPARATORS.LESS:return me.SEARCH_TYPES.LESS_THAN;case ro.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return me.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Ow.UNKNOWN_SEARCH_TYPE)}}a(Iw,"createSearchTypeFromSearchObject");ww.exports={executeSearch:yw,createSearchTypeFromSearchObject:Iw,prepSearch:Vz,searchByType:Nw}});var Dw=g(($_e,Cw)=>{"use strict";var V_e=ns(),Yz=ia(),Kz=z(),Wz=P(),Qz=Ed();Cw.exports=zz;function zz(e,t){if(!Kz.isEmpty(t)&&Wz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Yz(e,"value");if(n)throw n;return Qz.prepSearch(e,t,!0)}a(zz,"lmdbGetDataByValue")});var su=g((W_e,Lw)=>{"use strict";var K_e=ns(),Jz=ia(),jz=z(),Xz=P(),Zz=Ed();Lw.exports=eJ;async function eJ(e,t){if(!jz.isEmpty(t)&&Xz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Jz(e,"value");if(n)throw n;return Zz.prepSearch(e,t,!1)}a(eJ,"lmdbSearchByValue")});var Pw=g((J_e,Mw)=>{"use strict";var z_e=ft(),qp=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},Fp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},kp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Mw.exports={SearchByConditionsObject:qp,SearchCondition:Fp,SortAttribute:kp}});var Hw=g((ede,xw)=>{"use strict";var X_e=Pw().SearchByConditionsObject,tJ=ns(),rJ=ia(),Vp=sa(),hd=ft(),{Resource:Z_e}=(cn(),ie($p)),Bw=Ed(),nJ=vp(),sJ=require("lodash"),{getSchemaPath:iJ}=je(),Uw=ze(),{handleHDBError:oJ,hdb_errors:aJ}=se(),{HTTP_STATUS_CODES:cJ}=aJ,uJ=1e8;xw.exports=lJ;async function lJ(e){let t=rJ(e,"conditions");if(t)throw oJ(t,t.message,cJ.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=iJ(e.schema,e.table),n=await Uw.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Uw.openDBI(n,_.search_attribute);let i=sJ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===hd.SEARCH_TYPES.EQUALS?_.estimated_count=Vp.count(n,_.search_attribute,_.search_value):l===hd.SEARCH_TYPES.CONTAINS||l===hd.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=uJ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await vw(o,e,i[0],s.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],l=i.slice(1).map(Bw.filterByType),d=l.length,E=Vp.setGetWholeRowAttributes(n,e.get_attributes);u=c.map(f=>_.get(f,{transaction:o,lazy:!0})),d>0&&(u=u.filter(f=>{for(let h=0;h<d;h++)if(!l[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=>nJ.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await vw(o,e,E,s.hash_attribute);c=c.concat(f)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=Vp.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(lJ,"lmdbSearchByConditions");async function vw(e,t,r,n){let s=new tJ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===hd.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,Bw.searchByType(e,s,i,n).map(o=>o.value)}a(vw,"executeConditionSearch")});var aa=g((rde,Gw)=>{"use strict";var _J=P().OPERATIONS_ENUM,Yp=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=_J.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};Gw.exports=Yp});var Kp=g((sde,Ww)=>{"use strict";var Vw=ns(),$w=aa(),Yw=su(),Kw=eu(),mr=P(),qw=z(),Fw=ze(),{getTransactionAuditStorePath:dJ,getSchemaPath:fJ}=je(),kw=$();Ww.exports=EJ;async function EJ(e){try{if(qw.isEmpty(global.hdb_schema[e.schema])||qw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await hJ(e),await mJ(e);let t=fJ(e.schema,e.table);try{await Fw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")kw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=dJ(e.schema,e.table);await Fw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")kw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(EJ,"lmdbDropTable");async function hJ(e){let t=new Vw(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Yw(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new $w(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await Kw(s)}a(hJ,"deleteAttributesFromSystem");async function mJ(e){let t=new Vw(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await Yw(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new $w(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await Kw(s)}catch(i){throw i}}a(mJ,"dropTableFromSystem")});var zw=g((ode,Qw)=>{"use strict";var pJ=require("fs-extra"),SJ=ns(),TJ=oa(),gJ=aa(),RJ=Kp(),AJ=eu(),OJ=xp(),bJ=su(),ws=P(),{getSchemaPath:yJ}=je(),{handleHDBError:NJ,hdb_errors:IJ}=se(),{HDB_ERROR_MSGS:wJ,HTTP_STATUS_CODES:CJ}=IJ;Qw.exports=DJ;async function DJ(e){let t;try{t=await LJ(e.schema);let r=new SJ(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await bJ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await RJ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new gJ(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await AJ(s);let i=yJ(t);await pJ.remove(i)}catch(r){throw r}}a(DJ,"lmdbDropSchema");async function LJ(e){let t=new TJ(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await OJ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw NJ(new Error,wJ.SCHEMA_NOT_FOUND(e),CJ.NOT_FOUND,void 0,void 0,!0);return n}a(LJ,"validateDropSchema")});var md=g((cde,Jw)=>{"use strict";var Wp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Jw.exports=Wp});var Xw=g((_de,jw)=>{"use strict";var MJ=require("fs-extra"),pd=ze(),{getTransactionAuditStorePath:PJ}=je(),Qp=ft(),lde=md();jw.exports=UJ;async function UJ(e){let t;try{let r=PJ(e.schema,e.table);await MJ.mkdirp(r),t=await pd.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{pd.createDBI(t,Qp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),pd.createDBI(t,Qp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),pd.createDBI(t,Qp.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(UJ,"createTransactionsAuditEnvironment")});var rC=g((fde,tC)=>{"use strict";var zp=P(),Zw=ze(),vJ=Ko(),{getSystemSchemaPath:BJ,getSchemaPath:xJ}=je(),HJ=Vi(),GJ=q_(),Jp=G_(),qJ=$(),FJ=Xw(),Xp=HJ.hdb_table,eC=[];for(let e=0;e<Xp.attributes.length;e++)eC.push(Xp.attributes[e].attribute);tC.exports=kJ;async function kJ(e,t){let r=xJ(t.schema,t.table),n=new Jp(t.schema,t.table,zp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Jp(t.schema,t.table,zp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Jp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Zw.createEnvironment(r,t.table),e!==void 0){let o=await Zw.openEnvironment(BJ(),zp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await vJ.insertRecords(o,Xp.hash_attribute,eC,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await jp(n),await jp(s),await jp(i)}await FJ(t)}catch(o){throw o}}a(kJ,"lmdbCreateTable");async function jp(e){try{await GJ(e)}catch(t){qJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(jp,"createAttribute")});var sC=g((hde,nC)=>{"use strict";var VJ=$c(),$J=wc(),YJ=cd(),iu=P(),KJ=Ko().updateRecords,WJ=ze(),{getSchemaPath:QJ}=je(),zJ=Xc(),JJ=$();nC.exports=jJ;async function jJ(e){try{let{schema_table:t,attributes:r}=VJ(e);$J(e,r,t.hash_attribute),e.schema!==iu.SYSTEM_SCHEMA_NAME&&(r.includes(iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await YJ(e.hdb_auth_header,t,r),s=QJ(e.schema,e.table),i=await WJ.openEnvironment(s,e.table),o=await KJ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await zJ(e,o)}catch(c){JJ.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(jJ,"lmdbUpdateRecords")});var oC=g((pde,iC)=>{"use strict";var XJ=P().OPERATIONS_ENUM,Zp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=XJ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};iC.exports=Zp});var cC=g((gde,aC)=>{"use strict";var Tde=oC(),ZJ=$c(),e2=wc(),t2=cd(),ou=P(),r2=Ko().upsertRecords,n2=ze(),{getSchemaPath:s2}=je(),i2=Xc(),o2=$(),{handleHDBError:a2,hdb_errors:c2}=se();aC.exports=u2;async function u2(e){let t;try{t=ZJ(e)}catch(u){throw a2(u,u.message,c2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;e2(e,n,r.hash_attribute),e.schema!==ou.SYSTEM_SCHEMA_NAME&&(n.includes(ou.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(ou.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(ou.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(ou.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await t2(e.hdb_auth_header,r,n),i=s2(e.schema,e.table),o=await n2.openEnvironment(i,e.table),c=await r2(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await i2(e,c)}catch(u){o2.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(u2,"lmdbUpsertRecords")});var lC=g((Ade,uC)=>{"use strict";var eS=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};uC.exports=eS});var dC=g((bde,_C)=>{"use strict";var tS=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};_C.exports=tS});var hC=g((Ide,EC)=>{"use strict";var rS=ze(),{getTransactionAuditStorePath:l2}=je(),Nde=lC(),au=ft(),_2=z(),fC=dC(),d2=require("util").promisify,f2=d2(setTimeout),E2=1e4,h2=100;EC.exports=m2;async function m2(e){let t=l2(e.schema,e.table),r=await rS.openEnvironment(t,e.table,!0),n=rS.listDBIs(r);rS.initializeDBIs(r,au.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new fC;do s=await p2(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await f2(h2);while(s.transactions_deleted>0);return i}a(m2,"deleteAuditLogsBefore");async function p2(e,t){let r=new fC;try{let n=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[au.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];_2.isEmpty(c)||(s=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>E2)break}return await s,r}catch(n){throw n}}a(p2,"deleteTransactions")});var pC=g((Cde,mC)=>{"use strict";var nS=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};mC.exports=nS});var TC=g((Mde,SC)=>{"use strict";var S2=ns(),T2=aa(),Lde=pC(),ss=P(),g2=z(),sS=ze(),R2=Vi(),A2=su(),O2=eu(),{getSchemaPath:b2}=je();SC.exports=y2;async function y2(e,t=!0){let r;e.schema===ss.SYSTEM_SCHEMA_NAME?r=R2[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await I2(e),s=b2(e.schema,e.table),i=await sS.openEnvironment(s,e.table);return t===!0&&await N2(e,i,r.hash_attribute),sS.dropDBI(i,e.attribute),n}a(y2,"lmdbDropAttribute");async function N2(e,t,r){let n=sS.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:u}of n.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);s=t.dbis[r].put(o,_,u)}await s}a(N2,"removeAttributeFromAllObjects");async function I2(e){let t=new S2(ss.SYSTEM_SCHEMA_NAME,ss.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await A2(t)).filter(o=>o[ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(g2.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[ss.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new T2(ss.SYSTEM_SCHEMA_NAME,ss.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return O2(i)}a(I2,"dropAttributeFromSystem")});var yC=g((vde,bC)=>{"use strict";var iS=ze(),ca=ft(),Ude=Br(),oS=P(),gC=z(),{getTransactionAuditStorePath:w2}=je(),C2=sa(),Sd=ta(),D2=$();bC.exports=L2;async function L2(e){let t=w2(e.schema,e.table),r=await iS.openEnvironment(t,e.table,!0),n=iS.listDBIs(r);iS.initializeDBIs(r,ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return RC(r,e.search_values);case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,P2(r,e.search_values,s);case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return M2(r,e.search_values);default:return RC(r)}}a(L2,"readAuditLog");function RC(e,t=[0,Date.now()]){gC.isEmpty(t[0])&&(t[0]=0),gC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new Sd,s))}a(RC,"searchTransactionsByTimestamp");function M2(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[ca.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,OC(e,i))}return Object.fromEntries(r)}a(M2,"searchTransactionsByUsername");function P2(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=C2.equals(e,ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ca.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let E=Number(d);n.has(E)?n.get(E).push(_.toString()):n.set(E,[_.toString()])}}let s=Array.from(n.keys()),i=OC(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);AC(u,"records",r,l,o),AC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(P2,"searchTransactionsByHashValues");function AC(e,t,r,n,s){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(n.indexOf(u)>=0)if(s.has(u)){let _=s.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new Sd(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Sd(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(AC,"loopRecords");function OC(e,t){let r=[];try{let n=e.dbis[ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new Sd,i);r.push(o)}}catch(i){D2.warn(i)}return r}catch(n){throw n}}a(OC,"batchSearchTransactions")});var IC=g((Gde,NC)=>{"use strict";var{getSchemaPath:xde}=je(),Hde=ze(),{database:U2}=(Ae(),ie(ke));NC.exports={writeTransaction:v2};async function v2(e,t,r){return U2({database:e,table:t}).transaction(r)}a(v2,"writeTransaction")});var LC=g((Fde,DC)=>{"use strict";var{getSchemaPath:wC}=je(),CC=ze();DC.exports={flush:B2,resetReadTxn:x2};async function B2(e,t){return(await CC.openEnvironment(wC(e,t),t.toString())).flushed}a(B2,"flush");async function x2(e,t){try{(await CC.openEnvironment(wC(e,t),t.toString())).resetReadTxn()}catch{}}a(x2,"resetReadTxn")});var vC=g((Vde,UC)=>{"use strict";var{Readable:H2}=require("stream"),{getDatabases:G2}=(Ae(),ie(ke)),{readSync:q2,openSync:F2,createReadStream:MC}=require("fs"),{open:k2}=require("lmdb"),PC=xc(),V2=Hc(),{AUDIT_STORE_OPTIONS:$2}=(ni(),ie(BC)),{INTERNAL_DBIS_NAME:Y2,AUDIT_STORE_NAME:K2}=ft();UC.exports=Q2;var aS=32768,W2=100;async function Q2(e){let t=e.database||e.schema||"data",r=G2()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let l=_.dbisDB,d=k2({noSync:!0,maxDbs:V2.MAX_DBS}),E,f=d.openDB(Y2,new PC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(A,b){b.encoding="binary",b.encoder=void 0;let I=d.openDB(A,b),B=l.openDB(A,b);for(let{key:U,version:F,value:M}of B.getRange({start:null,transaction:h,versions:B.useVersions}))E=I.put(U,M,F),p++%W2===0&&(await new Promise(Q=>setTimeout(Q,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:A,value:b}of l.getRange({transaction:h,start:!1}))if(s.some(I=>A.startsWith?.(I+"/"))){f.put(A,b);let[,I]=A.split("/"),B=!I,U=new PC(!B,B);await S(A,U)}e.include_audit&&await S(K2,Object.assign({},$2)),await E;let T=MC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=F2(o.path);return o.transaction(()=>{let _=Buffer.alloc(aS);q2(c,_,0,aS),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=MC(null,{fd:c,start:aS}),E=new H2.from(async function*(){yield _;for await(let f of d)l.openTimer&&(l.openTimer=0),yield f;l.done()}());return E.headers=u(),E});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(Q2,"getBackup")});var GC=g((Yde,HC)=>{"use strict";var z2=$(),{handleHDBError:J2}=se(),j2=ey(),X2=q_(),Z2=Dp(),e4=zI(),t4=eu(),r4=xp(),n4=Rw(),s4=Dw(),i4=su(),o4=Hw(),a4=zw(),c4=rC(),u4=sC(),l4=cC(),_4=hC(),d4=Kp(),f4=TC(),E4=yC(),h4=IC(),xC=LC(),m4=vC(),cS=class extends j2{static{a(this,"LMDBBridge")}async searchByConditions(t){return o4(t)}async getDataByHash(t){return await r4(t)}async searchByHash(t){return await n4(t)}async getDataByValue(t,r){return await s4(t,r)}async searchByValue(t){return await i4(t)}async createSchema(t){return await e4(t)}async dropSchema(t){return await a4(t)}async createTable(t,r){return await c4(t,r)}async dropTable(t){return await d4(t)}async createAttribute(t){return await X2(t)}async createRecords(t){return await Z2(t)}async updateRecords(t){return await u4(t)}async upsertRecords(t){try{return await l4(t)}catch(r){throw J2(r,null,null,z2.ERR,r)}}async deleteRecords(t){return await t4(t)}async dropAttribute(t){return await f4(t)}async deleteAuditLogsBefore(t){return await _4(t)}async readAuditLog(t){return await E4(t)}writeTransaction(t,r,n){return h4.writeTransaction(t,r,n)}flush(t,r){return xC.flush(t,r)}resetReadTxn(t,r){return xC.resetReadTxn(t,r)}getBackup(t){return m4(t)}};HC.exports=cS});function g4(){T4=setInterval(function(){for(let e of uS)if(e.stale){let t=e[ye]?.url;VC.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},S4).unref()}var lS,kC,VC,$C,YC,KC,qC,uS,p4,cu,FC,no,Td,S4,T4,_S=Re(()=>{lS=H(Br()),kC=H(se()),VC=H($());cn();$C=H(ee()),YC=H(P()),KC=H(z()),qC=100,uS=new Set,p4=(0,KC.convertToMS)($C.get(YC.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,no=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),uS.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(uS.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(cu&&!this.overloadChecked&&performance.now()-FC>p4)throw new kC.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,lS.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let f=d;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=d;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let p=d;p<this.validated;p++){let S=this.writes[p];if(!S)continue;let T=S[f===0?"before":"beforeIntermediate"];if(T){let A=T();h?h.push?h.push(A):h=[h,A]:h=A}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),u=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let E=d.store.ifVersion(d.key,d.entry?.version??null,u);s=s||E}else u();else for(let E of this.writes)c(E)},"nextCondition"),_=this.lmdbDb;if(this.writes.length>0&&(_?.retryRisk&&(_.retryRisk*=.99),this.writes.length+(_?.retryRisk||0)<qC>>n?u():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return cu||(cu=s,FC=performance.now(),cu.then(()=>{cu=null})),s.then(d=>d?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(_&&(_.retryRisk=(_.retryRisk||0)+qC/2),t?t.retries=n+1:t={retries:1},this.commit(t)));let l={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(E=>({txnTime:r,next:E}));l.next=d}return l}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},Td=class extends no{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,lS.getNextMonotonicTime)())}getReadTxn(){}},S4=3e4;a(g4,"startMonitoringTxns");g4()});function rt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new no;e.timestamp&&(n.timestamp=e.timestamp),n[ye]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let u=n.commit({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var WC,so=Re(()=>{WC=require("../index");cn();_S();a(rt,"transaction");(0,WC._assignPackageExport)("transaction",rt);rt.commit=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};rt.abort=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var tD={};Fe(tD,{ResourceBridge:()=>ES});function hS({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 zC(e,t){let r=is(e),n=hS(e,r);if(!r)throw new Un.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache},o;rt(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l;try{l=await r.get({id:_,lazy:s,select:n},i),l=l&&Rd(l)}catch(d){l={message:d.toString()}}return t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function is(e){let t=e.database||e.schema||A4,r=pr()[t];if(!r)throw(0,Un.handleHDBError)(new Error,R4.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function JC(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*jC(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(u)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[u]})}n&&(yield n)}var XC,gd,Un,ZC,vn,dS,fS,eD,R4,A4,O4,b4,QC,ES,rD=Re(()=>{"use strict";XC=H(GC()),gd=H(ia()),Un=H(se());Ae();ZC=H($c()),vn=H(P()),dS=H(Ns()),fS=H(Pn()),eD=H(z());so();Ad();({HDB_ERROR_MSGS:R4}=Un.hdb_errors),A4="data",O4=1e4,b4=10,ES=class extends XC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),QC=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,gd.default)(t,"conditions");if(r)throw(0,Un.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=is(t);if(!n)throw new Un.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:hS(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Un.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Et({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await is(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=is(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,u)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,u),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){is(t).dropTable()}createSchema(t){return ua({database:t.schema,table:null}),dS.signalSchemaChange(new fS.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await mS(t.schema),dS.signalSchemaChange(new fS.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,QC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,ZC.default)(t),s,i=pr()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return rt(o,async c=>{if(!i.schemaDefined){s=[];for(let l of n)i.attributes.find(E=>E.name==l)||s.push(l);s.length>0&&await i.addAttributes(s.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=l[i.primaryKey],E=d!=null&&await i.get(d,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){_.push(l[i.primaryKey]);continue}E&&(E=Rd(E));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let h=l[f];if(typeof h=="function")try{let p=h([[E]]);Array.isArray(p)&&(h=p[0].func_val,l[f]=h)}catch(p){throw p.message+="Trying to set key "+f+" on object"+JSON.stringify(l),p}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=E[f]);await(d==null?i.create(l,o):i.put(l,o)),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=pr()[t.schema][t.table],n={user:t.hdb_user};return rt(n,async s=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,n)?o.push(u):c.push(u);return JC(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=pr()[t.schema][t.table];if(!r.createdTimeProperty)throw new Un.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:vn.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,eD.async_set_timeout)(b4),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%O4===0&&await _();return u.length>0&&await _(),s?JC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,gd.default)(t,"hashes");if(r)throw r;return zC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of zC(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&vn.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,gd.default)(t,"value");if(n)throw n;let s=is(t);if(!s)throw new Un.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===vn.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:hS(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async getDataByValue(t,r){let n=new Map,s=is(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){is({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return is(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=is(t),n={};switch(t.search_type){case vn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case vn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of jC(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return jC(r,t.search_values?.[0],t.search_values?.[1])}}};a(hS,"getSelect");a(zC,"getRecords");a(is,"getTable");a(JC,"createDeleteResponse");a(jC,"groupRecordsInHistory")});var Dn=g((ofe,nD)=>{"use strict";var{ResourceBridge:y4}=(rD(),ie(tD)),N4=ee();N4.initSync();var Od;function I4(){return Od||(Od=new y4,Od)}a(I4,"getBridge");nD.exports=I4()});var aD=g((cfe,oD)=>{"use strict";var sD=require("lodash"),uu=require("mathjs"),w4=require("jsonata"),iD=z();oD.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?sD.uniqWith(e,sD.isEqual):e,searchJSON:C4,mad:lu.bind(null,uu.mad),mean:lu.bind(null,uu.mean),mode:lu.bind(null,uu.mode),prod:lu.bind(null,uu.prod),median:lu.bind(null,uu.median)};function lu(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(lu,"aggregateFunction");function C4(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(iD.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),iD.isEmpty(this.__ala__.res[r])){let n=w4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(C4,"searchJSON")});var uD=g((lfe,cD)=>{"use strict";var Rt=require("moment"),pS="YYYY-MM-DDTHH:mm:ss.SSSZZ";Rt.suppressDeprecationWarnings=!0;cD.exports={current_date:()=>Rt().utc().format("YYYY-MM-DD"),current_time:()=>Rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Rt(e).utc().format("YYYY");case"month":return Rt(e).utc().format("MM");case"day":return Rt(e).utc().format("DD");case"hour":return Rt(e).utc().format("HH");case"minute":return Rt(e).utc().format("mm");case"second":return Rt(e).utc().format("ss");case"millisecond":return Rt(e).utc().format("SSS");default:break}},date:e=>Rt(e).utc().format(pS),date_format:(e,t)=>Rt(e).utc().format(t),date_add:(e,t,r)=>Rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=Rt(e).utc(),s=Rt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>Rt().utc().valueOf(),get_server_time:()=>Rt().format(pS),offset_utc:(e,t)=>Rt(e).utc().utcOffset(t).format(pS)}});var fD=g((_fe,dD)=>{"use strict";var D4=require("@turf/area"),L4=require("@turf/length"),M4=require("@turf/circle"),P4=require("@turf/difference"),U4=require("@turf/distance"),v4=require("@turf/boolean-contains"),B4=require("@turf/boolean-equal"),x4=require("@turf/boolean-disjoint"),H4=require("@turf/helpers"),lD=P(),Te=z(),Cs=$();dD.exports={geoArea:G4,geoLength:q4,geoCircle:F4,geoDifference:k4,geoDistance:_D,geoNear:V4,geoContains:$4,geoEqual:Y4,geoCrosses:K4,geoConvert:W4};function G4(e){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return D4.default(e)}catch(t){return Cs.trace(t,e),NaN}}a(G4,"geoArea");function q4(e,t){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return L4.default(e,{units:t||"kilometers"})}catch(r){return Cs.trace(r,e),NaN}}a(q4,"geoLength");function F4(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return M4.default(e,t,{units:r||"kilometers"})}catch(n){return Cs.trace(n,e,t),NaN}}a(F4,"geoCircle");function k4(e,t){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return P4(e,t)}catch(r){return Cs.trace(r,e,t),NaN}}a(k4,"geoDifference");function _D(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return U4.default(e,t,{units:r||"kilometers"})}catch(n){return Cs.trace(n,e,t),NaN}}a(_D,"geoDistance");function V4(e,t,r,n){if(Te.isEmpty(e)||Te.isEmpty(t))return!1;if(Te.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return _D(e,t,n)<=r}catch(s){return Cs.trace(s,e,t),!1}}a(V4,"geoNear");function $4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return v4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a($4,"geoContains");function Y4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return B4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(Y4,"geoEqual");function K4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return!x4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(K4,"geoCrosses");function W4(e,t,r){if(Te.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Te.isEmpty(t))throw new Error("geo_type is required");if(Te.isEmpty(lD.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(lD.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Te.autoCastJSON(e)),H4[t](e,r)}a(W4,"geoConvert")});var bd=g((ffe,ED)=>{var io=aD(),Wr=uD(),os=fD();ED.exports=e=>{e.aggr.mad=e.aggr.MAD=io.mad,e.aggr.mean=e.aggr.MEAN=io.mean,e.aggr.mode=e.aggr.MODE=io.mode,e.aggr.prod=e.aggr.PROD=io.prod,e.aggr.median=e.aggr.MEDIAN=io.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=io.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=io.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Wr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Wr.current_time,e.fn.extract=e.fn.EXTRACT=Wr.extract,e.fn.date=e.fn.DATE=Wr.date,e.fn.date_format=e.fn.DATE_FORMAT=Wr.date_format,e.fn.date_add=e.fn.DATE_ADD=Wr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Wr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Wr.date_diff,e.fn.now=e.fn.NOW=Wr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Wr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Wr.get_server_time,e.fn.getdate=e.fn.GETDATE=Wr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Wr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=os.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=os.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=os.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=os.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=os.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=os.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=os.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=os.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=os.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=os.geoNear}});var SD=g((Efe,pD)=>{"use strict";var _u=require("lodash"),Sr=require("alasql");Sr.options.cache=!1;var Q4=bd(),hD=require("clone"),yd=require("recursive-iterator"),fe=$(),Le=z(),la=Dn(),z4=P(),{hdb_errors:J4}=se(),{getDatabases:mD}=(Ae(),ie(ke)),j4="IS NULL",Bn="There was a problem performing this search. Please check the logs and try again.";Q4(Sr);var SS=class{static{a(this,"SQLSearch")}constructor(t,r){if(Le.isEmpty(t))throw fe.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(),Le.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Le.isEmptyOrZeroLength(n))return fe.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw fe.error("Error thrown from checkEmptySQL in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw fe.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),fe.error(n),new Error(Bn)}if(Object.keys(this.data).length===0)return fe.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw fe.error("Error thrown from processJoins in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw fe.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),fe.error(n),new Error(Bn)}try{return t=await this._finalSQL(),t}catch(n){throw fe.error("Error thrown from finalSQL in SQLSearch class method search."),fe.error(n),new Error(Bn)}}_getColumns(){let t=new yd(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(hD(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=_u.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=mD()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Le.isEmpty(this.statement.where)){fe.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new yd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Le.isEmpty(r)&&r.right)if(Le.isNotEmptyAndHasValue(r.right.value)){let n=Le.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Sr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Le.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Sr.yy.LogicValue({value:i}):n instanceof Sr.yy.StringValue&&Le.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Sr.yy.NumValue({value:i}))});if(t){fe.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new yd(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Le.isEmpty(z4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Le.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Le.isEmptyOrZeroLength(r.left.columnid)||Le.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(Le.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"=":!Le.isEmpty(r.right.value)||!Le.isEmpty(r.left.value)?n.add(Le.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)n.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from)&&Le.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&_u.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Le.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Le.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&!Le.isEmptyOrZeroLength(this.columns.columns))return t;if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Sr.promise(r)}catch(r){throw fe.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),fe.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(hD(n))})}_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,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Le.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(j4)>-1&&this.tables.forEach(s=>{let i={columnid:mD()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=_u.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},u=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(u=!0),!Le.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await la.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(Bn)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let E=await la.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(Bn)}else if(!Le.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,E=l.length;d<E;d++){let f=l[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await la.getDataByValue(c,f.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),fe.error(l),new Error(Bn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await la.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,E]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),fe.error(l),new Error(Bn)}}}_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 Sr.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(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.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 n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Sr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Sr.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 s=t.is_func?new Sr.yy.FuncValue:new Sr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.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={};s.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:"";u=u.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(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 l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=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,s);E=await Sr.promise(h,t),t=null}catch(f){throw fe.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),fe.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=_u.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let A=p[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[A]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new yd(this.columns);for(let{node:i}of s)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)&&n.push(o)}}n=_u.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw fe.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),fe.error(i),new Error(Bn)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},u=await la.getDataByHash(c),_=s.columns.length;for(let l=0,d=o.length;l<d;l++){let E=o[l],f=u.get(E);for(let h=0;h<_;h++){let p=s.columns[h],S=f[p]===void 0?null:f[p];this.data[n].__merged_data[E].push(S)}}}}catch(r){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getData."),fe.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(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.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 s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===u}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();fe.trace(`Final SQL: ${s}`),n=await Sr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),fe.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw fe.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),fe.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return fe.error(J4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),fe.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${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=s[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;n=n.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(u,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await la.getDataByValue(i);for(let[c,u]of o)this.data[s].__merged_data[c]||(u[n.attribute]===void 0&&(u[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=u[n.attribute]??null}catch(o){throw fe.error("There was an error when processing this SQL operation. Check your logs"),fe.error(o),new Error(Bn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};pD.exports=SS});var qr=g((mfe,TD)=>{"use strict";var X4=Xb();TD.exports={searchByConditions:e3,searchByHash:t3,searchByValue:r3,search:n3};var TS=Dn(),{transformReq:gS}=z(),Z4=SD();async function e3(e){return gS(e),TS.searchByConditions(e)}a(e3,"searchByConditions");async function t3(e){gS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of TS.searchByHash(e))r&&t.push(r);return t}a(t3,"searchByHash");async function r3(e){gS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of TS.searchByValue(e))t.push(r);return t}a(r3,"searchByValue");function n3(e,t){try{let r=new X4(e);r.validate(),new Z4(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(n3,"search")});var Nd=g((Sfe,gD)=>{"use strict";var s3=Dn();gD.exports={writeTransaction:i3};function i3(e,t,r){return s3.writeTransaction(e,t,r)}a(i3,"writeTransaction")});var bD=g((Rfe,OD)=>{"use strict";var o3=qr(),a3=ys(),RD=$(),c3=Fr(),gfe=Nd(),u3=require("clone"),AS=require("alasql"),l3=bd(),AD=require("util"),_3=AD.promisify(a3.getTableSchema),d3=AD.promisify(o3.search),f3=P(),RS=z();l3(AS);OD.exports={update:h3};var E3="There was a problem performing this update. Please check the logs and try again.";async function h3({statement:e,hdb_user:t}){let r=await _3(e.table.databaseid,e.table.tableid),n=m3(e.columns);RS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=u3(s),c=RS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=AS.parse(u).statements[0],l=await d3(_),d=p3(n,l);return S3(o,d,t)}a(h3,"update");function m3(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=AS.compile(`SELECT ${r.expression.toString()} AS [${f3.FUNC_VAL}] FROM ?`)}),t}catch(t){throw RD.error(t),new Error(E3)}}a(m3,"createUpdateRecord");function p3(e,t){return RS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(p3,"buildUpdateRecords");async function S3(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await c3.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){RD.error(`Error delete new_attributes from update response: ${i}`)}return s}a(S3,"updateRecords")});var ND=g((yfe,yD)=>{var T3=require("alasql"),g3=qr(),R3=$(),A3=Dn(),bS=require("util"),OS=z(),O3=P(),b3=ys(),Ofe=Nd(),bfe=Fr(),y3="record",N3="successfully deleted",I3=bS.callbackify(L3),w3=bS.promisify(g3.search),C3=bS.promisify(b3.getTableSchema);yD.exports={convertDelete:I3};function D3(e){return`${e.deleted_hashes.length} ${y3}${e.deleted_hashes.length===1?"":"s"} ${N3}`}a(D3,"generateReturnMessage");async function L3({statement:e,hdb_user:t}){let r=await C3(e.table.databaseid,e.table.tableid);OS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=OS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=T3.parse(o).statements[0],u={operation:O3.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await w3(c);let _=await A3.deleteRecords(u);return OS.isEmptyOrZeroLength(_.message)&&(_.message=D3(_)),delete _.txn_time,_}catch(_){throw R3.error(_),_.hdb_code?_.message:_}}a(L3,"convertDelete")});var LD=g((Ife,DD)=>{"use strict";var M3=bs(),{hdb_errors:ID}=se(),{getDatabases:wD}=(Ae(),ie(ke));DD.exports={checkSchemaExists:CD,checkSchemaTableExists:P3,schema_describe:M3};async function CD(e){if(!wD()[e])return ID.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(CD,"checkSchemaExists");async function P3(e,t){let r=await CD(e);if(r)return r;if(!wD()[e][t])return ID.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(P3,"checkSchemaTableExists")});var du=g((Cfe,U3)=>{U3.exports={name:"harperdb",version:"4.3.31",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && 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:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.635.0","@aws-sdk/lib-storage":"3.635.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.1.3",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.17.1",yaml:"2.4.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",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.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.4.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var pu={};Fe(pu,{addAnalyticsListener:()=>mu,recordAction:()=>Tr,recordActionBinary:()=>Qr,setAnalyticsEnabled:()=>v3});function v3(e){qD=e}function Tr(e,t,r,n,s){if(!qD)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Cd.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},Cd.set(i,o)}Id||B3()}function Qr(e,t,r,n,s){Tr(!!e,t,r,n,s)}function mu(e){VD.push(e)}function B3(){Id=performance.now(),setTimeout(async()=>{let e=performance.now()-Id;Id=0;let t=[],r={time:Date.now(),period:e,threadId:oo.threadId,metrics:t};for(let[s,i]of Cd){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of $D){let E=Math.floor(c*d),f=o[E-1];if(E>u){let h=E-u;if(f===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:f,count:h}:f),l=f;u=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await YD()}let n=process.memoryUsage();t.push({metric:"memory",threadId:oo.threadId,byThread:!0,...n});for(let s of VD)s(t);Cd=new Map,oo.parentPort?oo.parentPort.postMessage({type:kD,report:r}):QD({report:r})},FD).unref()}async function x3(e,t=6e4){let r=IS(),n=KD(),s=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,fu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,fu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,u=new Map,_=[],l;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;l=p;let{metrics:T,threadId:A}=S;for(let b of T||[]){let{path:I,method:B,type:U,metric:F,count:M,total:Q,distribution:J,threads:j,...oe}=b;M||(M=1);let ue=F+(I?"-"+I:"");B!==void 0&&(ue+="-"+B),U!==void 0&&(ue+="-"+U);let le=c.get(ue);if(le){if(le.threads){let Ne=le.threads[A];if(Ne)le=Ne;else{le.threads[A]=Object.assign({},oe);continue}}le.count||(le.count=1);let Be=le.count;for(let Ne in oe){let xe=oe[Ne];typeof xe=="number"&&(le[Ne]=(le[Ne]*Be+xe*M)/(Be+M))}le.count+=M,Q>=0&&(le.total+=Q,le.ratio=le.total/le.count)}else le=Object.assign({period:t},b),delete le.distribution,c.set(ue,le),le.byThread&&(le.threads=[],le.threads[A]=Object.assign({},oe),_.push(le));if(J){J=J.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Be=u.get(ue);Be?Be.push(...J):u.set(ue,J)}}await YD()}for(let p of _){let{path:S,method:T,type:A,metric:b,count:I,total:B,distribution:U,threads:F,...M}=p;F=F.filter(Q=>Q);for(let Q in M){if(typeof p[Q]!="number")continue;let J=0;for(let j of F){let oe=j[Q];typeof oe=="number"&&(J+=oe)}p[Q]=J}p.count=F.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Ne,xe)=>Ne.value>xe.value?1:-1);let A=T.count-1,b=[],I=0,B=0,U;for(let Ne of $D){let xe=A*Ne;for(;I<xe;)U=S[B++],I+=U.count,B===1&&I--;let n_=S[B>1?B-2:0];U||(U=S[0]),b.push(U.value-(U.value-n_.value)*(I-xe)/U.count)}let[F,M,Q,J,j,oe,ue,le,Be]=b;Object.assign(T,{p1:F,p10:M,p25:Q,median:J,p75:j,p90:oe,p95:ue,p99:le,p999:Be})}let d;for(let[p,S]of c)S.id=(0,wd.getNextMonotonicTime)(),S.time=l,n.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||n.primaryStore.put(S.id,S)}),d=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(d||h*10>f){let p=(0,wd.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:f-MD,active:h-PD,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(p,S,{append:!0}).then(T=>{T||n.primaryStore.put(p,S)})}MD=f,PD=h}async function UD(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function IS(){return vD||(vD=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function KD(){return BD||(BD=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function q3(){WD=!0;let e=(0,hu.get)(NS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await x3(FD,e),await UD(IS(),H3),await UD(KD(),G3)},Math.min(e/2,2147483647)).unref()}function QD(e,t){let r=e.report;r.threadId=t?.threadId||oo.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(xD+=n.mean*n.count);r.totalBytesProcessed=xD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(HD.get(t))}),HD.set(t,t.performance.eventLoopUtilization())),r.id=(0,wd.getNextMonotonicTime)(),IS().primaryStore.put(r.id,r),WD||q3(),F3&&(zD=V3(r))}async function V3(e){if(await zD,!fi){let r=(0,Eu.dirname)((0,fu.getLogFilePath)());try{fi=await(0,yS.open)((0,Eu.join)(r,"analytics.log"),"r+")}catch{fi=await(0,yS.open)((0,Eu.join)(r,"analytics.log"),"w+")}}let t=(await fi.stat()).size;if(t>k3){let r=Buffer.alloc(t);await fi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fi.write(r,{position:0}),await fi.truncate(r.length),t=r.length}await fi.write(JSON.stringify(e)+`
|
|
10
|
+
`,t)}var oo,GD,fu,Eu,yS,wd,hu,NS,Cd,qD,Id,FD,kD,VD,$D,MD,PD,YD,H3,G3,vD,BD,WD,xD,HD,F3,zD,fi,k3,Ds=Re(()=>{oo=require("worker_threads"),GD=H(Qe());Ae();fu=H($()),Eu=require("path"),yS=require("fs/promises"),wd=H(Br()),hu=H(ee()),NS=H(P());_r();(0,hu.initSync)();Cd=new Map,qD=(0,hu.get)(NS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(v3,"setAnalyticsEnabled");a(Tr,"recordAction");at.recordAnalytics=Tr;a(Qr,"recordActionBinary");Id=0,FD=1e3,kD="analytics-report",VD=[];a(mu,"addAnalyticsListener");$D=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(B3,"sendAnalytics");a(x3,"aggregation");MD=0,PD=0,YD=a(()=>new Promise(setImmediate),"rest");a(UD,"cleanup");H3=36e5,G3=31536e6;a(IS,"getRawAnalyticsTable");a(KD,"getAnalyticsTable");(0,GD.setChildListenerByType)(kD,QD);a(q3,"startScheduledTasks");xD=0,HD=new Map,F3=!1;a(QD,"recordAnalytics");k3=1e6;a(V3,"logAnalytics")});var MS=g((kfe,aL)=>{"use strict";var{decode:$3}=require("msgpackr"),{isMainThread:Gfe,parentPort:qfe,threadId:Ffe}=require("worker_threads"),Md=ut(),_a=Ve(),DS=P(),nr=$(),CS=ee(),Y3=P(),{onMessageByType:K3}=Qe(),ZD=Os(),{recordAction:JD,recordActionBinary:W3}=(Ds(),ie(pu)),{publishToStream:Q3}=Md,{ConsumerEvents:jD}=require("nats"),z3=qr(),{promisify:J3}=require("util"),eL=J3(setTimeout),Pd=1e4,Ud,Ld,j3,X3,tL,Su=new Map,da=new Map;aL.exports={initialize:rL,ingestConsumer:LS,setSubscription:Z3,setIgnoreOrigin:rj,getDatabaseSubscriptions:tj,updateConsumer:nL};async function rL(){K3(DS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await nL(n)}),tL=!0,nr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Md.getNATSReferences();Ud=e,Ld=e.info.server_name,j3=t,X3=r}a(rL,"initialize");async function nL(e){if(e.status==="start"){let{js:t,jsm:r}=await sL(e.node_domain_name);LS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Su.get(e.stream_name+e.node_domain_name);t&&(nr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Su.set(e.stream_name+e.node_domain_name,"close")),da.get(e.node_domain_name)==="failed"&&da.set(e.node_domain_name,"close")}}a(nL,"updateConsumer");var vd=new Map;function Z3(e,t,r){let n=vd.get(e);n||vd.set(e,n=new Map),n.set(t,r),tL||rL().then(ej)}a(Z3,"setSubscription");async function ej(){let e=await z3.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+_a.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await sL(r),!n))break;let{schema:o,table:c}=i,u=ZD.createNatsTableStreamName(o,c);LS(u,n,s,r)}}}a(ej,"accessConsumers");async function sL(e){let t,r,n=1;for(;!r;)try{t=await Ud.jetstream({domain:e}),r=await Ud.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(da.get(e)==="close")break;da.set(e,"failed"),n%10===1&&nr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<Pd?n++*100:Pd;await eL(i)}return{js:t,jsm:r}}a(sL,"connectToRemoteJS");function tj(){return vd}a(tj,"getDatabaseSubscriptions");var iL;function rj(e){iL=e}a(rj,"setIgnoreOrigin");var oL=100,XD=new Array(oL),Dd=0;async function LS(e,t,r,n){let{connection:s}=await Md.getNATSReferences();Ud=s,Ld=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,Ld),nr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(da.get(n)==="close")break;o%10===1&&nr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(nr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await Md.createConsumer(r,e,Ld,new Date(Date.now()).toISOString()));let l=o++*100<Pd?o++*100:Pd;await eL(l)}let c=!1,u;for(;!c;){if(Su.get(e+n)==="close"||da.get(n)==="close"){Su.delete(e+n),c=!0;continue}u=await i.consume({max_messages:CS.get(DS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Su.set(e+n,u);let _=!1;(async()=>{for await(let l of await u.status())if(l.type===jD.ConsumerDeleted&&(await u.close(),c=!0),l.type===jD.HeartbeatsMissed){let d=l.data;nr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${u.consumer.stream}`),d===100&&(nr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${u.consumer.stream}`),u.stop(),_=!0)}})();try{for await(let l of u)await XD[Dd],XD[Dd]=nj(l).catch(d=>{nr.error(d)}),++Dd>=oL&&(Dd=0)}catch(l){l.message==="consumer deleted"?(nr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",u.consumer.stream),await u.close(),c=!0):nr.error("Error consuming clustering ingest, restarting consumer",l)}}}a(LS,"ingestConsumer");async function nj(e){let t=$3(e.data);JD(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),nr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=CS.get(DS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(_a.MSG_HEADERS.TRANSACTED_NODES)&&r.values(_a.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(_a.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!iL),W3(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(_a.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:E,expiresAt:f}=t;nr.trace("processing message:",o,c,_,(l?"records: "+l.map(B=>B?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),nr.trace(`messageProcessor nats msg id: ${e.headers.get(_a.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let p=new Promise(B=>h=B),{timestamp:S,user:T,node_name:A}=E||{},b=vd.get(c)?.get(_);if(!b)throw new Error(`Missing table for replication message: ${_}`);if(o==="define_schema")t.type=o,t.onCommit=h,b.send(t);else if(l.length===1&&!u)b.send({type:wS(o),value:l[0],id:d?.[0],expiresAt:f,timestamp:S,table:_,onCommit:h,user:T,nodeName:A});else{let B=l.map((U,F)=>({type:wS(o),value:U,expiresAt:f,id:d?.[F],table:_}));for(;u;)B.push({type:wS(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;b.send({type:"transaction",writes:B,table:_,timestamp:S,onCommit:h,user:T,nodeName:A})}CS.get(Y3.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Q3(e.subject.split(".").slice(0,-1).join("."),ZD.createNatsTableStreamName(c,_),e.headers,e.data),await p;let I=Date.now()-S;S&&JD(I,"replication-latency",e.subject,o,"ingest")}catch(o){nr.error(o)}e.ack()}a(nj,"messageProcessor");function wS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(wS,"convertOperation")});var ut=g((zfe,bL)=>{"use strict";var xt=ee();xt.initSync();var sj=require("fs-extra"),ij=require("semver"),Ru=require("path"),{monotonicFactory:oj}=require("ulidx"),uL=oj(),aj=require("util"),lL=require("child_process"),cj=aj.promisify(lL.exec),uj=lL.spawn,Kt=Ve(),Ie=P(),Bd=z(),xn=$(),xd=Os(),lj=Nd(),Tu=hr(),{broadcast:_j,onMessageByType:dj,getWorkerIndex:fj}=Qe(),{isMainThread:_L}=require("worker_threads"),{Encoder:Ej,decode:BS}=require("msgpackr"),dL=new Ej,{isEmpty:lo}=Bd,fL=_n(),$fe=48*36e11;_L&&dj(Ie.ITC_EVENT_TYPES.RESTART,()=>{gr=void 0,uo=void 0});var{connect:hj,StorageType:mj,RetentionPolicy:pj,AckPolicy:xS,DeliverPolicy:HS,DiscardPolicy:Sj,NatsConnection:Yfe,JetStreamManager:Kfe,JetStreamClient:Wfe,StringCodec:Qfe,JSONCodec:Tj,createInbox:GS,headers:gj,ErrorCode:cL}=require("nats"),{PACKAGE_ROOT:Rj}=P(),Aj=du(),{recordAction:Oj}=(Ds(),ie(pu)),EL=Tj(),bj="clustering",yj=Aj.engines[Kt.NATS_SERVER_NAME],Nj=Ru.join(Rj,"dependencies"),vS=Ru.join(Nj,`${process.platform}-${process.arch}`,Kt.NATS_BINARY_NAME),PS,US,gu,ao,co;bL.exports={runCommand:hL,checkNATSServerInstalled:Ij,createConnection:qS,getConnection:Au,getJetStreamManager:Ou,getJetStream:pL,getNATSReferences:as,getServerList:Cj,createLocalStream:FS,listStreams:SL,deleteLocalStream:Dj,getServerConfig:fa,listRemoteStreams:Lj,viewStream:Mj,viewStreamIterator:Pj,publishToStream:Uj,request:xj,reloadNATS:kS,reloadNATSHub:Hj,reloadNATSLeaf:Gj,extractServerName:Bj,requestErrorHandler:qj,createLocalTableStream:AL,createTableStreams:Vj,purgeTableStream:OL,purgeSchemaTableStreams:$j,getStreamInfo:Yj,updateLocalStreams:Wj,closeConnection:wj,getJsmServerName:Hd,addNatsMsgHeader:TL,clearClientCache:mL,updateRemoteConsumer:Fj,createConsumer:gL,updateConsumerIterator:kj};async function hL(e,t=void 0){let{stdout:r,stderr:n}=await cj(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
11
11
|
`,""));return r.replace(`
|
|
12
|
-
`,"")}a(hL,"runCommand");async function NX(){try{await nX.access(vS)}catch{return!1}let e=await hL(`${vS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return sX.eq(t,bX)}a(NX,"checkNATSServerInstalled");async function qS(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await fL.getClusterUser();if(lo(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}xn.trace("create nats connection called");let i=await EX({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),xn.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&xn.error("Error with Nats client connection, connection closed",o),mL()}),i}a(qS,"createConnection");function mL(){Tr=void 0,ao=void 0,co=void 0,uo=void 0}a(mL,"clearClientCache");async function IX(){Tr&&(await Tr.drain(),Tr=void 0,ao=void 0,co=void 0,uo=void 0)}a(IX,"closeConnection");var Tr,uo;async function Au(){return uo||(uo=qS(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Tr=await uo),Tr||uo}a(Au,"getConnection");async function Ou(){if(ao)return ao;lo(Tr)&&await Au();let{domain:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(lo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ao=await Tr.jetstreamManager({domain:e,timeout:6e4}),ao}a(Ou,"getJetStreamManager");async function pL(){if(co)return co;lo(Tr)&&await Au();let{domain:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(lo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return co=Tr.jetstream({domain:e,timeout:6e4}),co}a(pL,"getJetStream");async function os(){let e=Tr||await Au(),t=ao||await Ou(),r=co||await pL();return{connection:e,jsm:t,js:r}}a(os,"getNATSReferences");async function wX(e){let t=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await fL.getClusterUser(),s=await qS(t,r,n),i=GS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=EL.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await Bd.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(wX,"getServerList");async function FS(e,t){let{jsm:r}=await os(),n=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:hX.File,retention:mX.Limits,subjects:t,discard:pX.Old,max_msgs:s,max_bytes:i,max_age:n})}a(FS,"createLocalStream");async function SL(){let{jsm:e}=await os(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(SL,"listStreams");async function CX(e){let{jsm:t}=await os();await t.streams.delete(e)}a(CX,"deleteLocalStream");async function DX(e){let{connection:t}=await os(),r=[],n=GS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(EL.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(DX,"listRemoteStreams");async function LX(e,t=void 0,r=void 0){let{jsm:n,js:s}=await os(),i=uL(),o={durable_name:i,ack_policy:xS.Explicit};t&&(o.deliver_policy=HS.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=BS(l.data),E={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(E.origin=l.headers.get(Kt.MSG_HEADERS.ORIGIN)),_.push(E),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(LX,"viewStream");async function*MX(e,t=void 0,r=void 0){let{jsm:n,js:s}=await os(),i=uL(),o={durable_name:i,ack_policy:xS.Explicit};t&&(o.deliver_policy=HS.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=BS(_.data);l[0]||(l=[l]);for(let d of l){let E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(E.origin=_.headers.get(Kt.MSG_HEADERS.ORIGIN)),yield E}if(_.ack(),_.info.pending===0)break}await c.delete()}a(MX,"viewStreamIterator");async function PX(e,t,r,n){xn.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=TL(n,r);let{js:s}=await os(),i=await Hd(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:dL.encode(n);try{xn.trace(`publishToStream publishing to subject: ${o}`),AX(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return RL(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){xn.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await FS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(PX,"publishToStream");function TL(e,t){t===void 0&&(t=TX());let r=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Kt.MSG_HEADERS.ORIGIN)&&r&&t.append(Kt.MSG_HEADERS.ORIGIN,r),t}a(TL,"addNatsMsgHeader");function fa(e){e=e.toLowerCase();let t=Ru.join(xt.get(Ie.CONFIG_PARAMS.ROOTPATH),OX);if(e===Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return lo(US)&&(US={port:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.HUB,config_file:Kt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ru.join(t,Kt.PID_FILES.HUB),hdb_nats_path:t}),US;if(e===Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return lo(PS)&&(PS={port:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.LEAF,config_file:Kt.NATS_CONFIG_FILES.LEAF_SERVER,domain:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.LEAF,pid_file_path:Ru.join(t,Kt.PID_FILES.LEAF),hdb_nats_path:t}),PS;xn.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(fa,"getServerConfig");async function gL(e,t,r,n){try{await e.consumers.add(t,{ack_policy:xS.Explicit,durable_name:r,deliver_policy:HS.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(gL,"createConsumer");async function UX(e,t,r){await e.consumers.delete(t,r)}a(UX,"removeConsumer");function vX(e){return e.split(".")[1]}a(vX,"extractServerName");async function BX(e,t,r=6e4,n=GS()){if(!Bd.isObject(t))throw new Error("data param must be an object");let s=dL.encode(t),{connection:i}=await os(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return BS(c.data)}a(BX,"request");function kS(e){return new Promise(async(t,r)=>{let n=cX(vS,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(kS,"reloadNATS");async function xX(){let{pid_file_path:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await kS(e)}a(xX,"reloadNATSHub");async function HX(){let{pid_file_path:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await kS(e)}a(HX,"reloadNATSLeaf");function GX(e,t,r){let n;switch(e.code){case cL.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case cL.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(GX,"requestErrorHandler");async function qX(e,t){let r=t+Kt.SERVER_SUFFIX.LEAF,{connection:n}=await os(),{jsm:s}=await QX(r),{schema:i,table:o}=e,c=xd.createNatsTableStreamName(i,o),u=e.start_time?e.start_time:new Date(Date.now()).toISOString();await RL(async()=>{if(e.subscribe===!0)await gL(s,c,n.info.server_name,u);else try{await UX(s,c,n.info.server_name)}catch(_){xn.trace(_)}})}a(qX,"updateRemoteConsumer");async function FX(e,t,r,n){let s=xd.createNatsTableStreamName(e,t),i=r+Kt.SERVER_SUFFIX.LEAF,o={type:Ie.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!_L&&dX()<xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=MS();await c(o)}await lX(o),n==="stop"&&await Bd.async_set_timeout(1e3)}a(FX,"updateConsumerIterator");function RL(e){return uX.writeTransaction(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(RL,"exclusiveLock");async function AL(e,t){let r=xd.createNatsTableStreamName(e,t),n=await Hd(),s=YX(e,t,n);await FS(r,[s])}a(AL,"createLocalTableStream");async function kX(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await AL(n,s)}}a(kX,"createTableStreams");async function OL(e,t,r=void 0){if(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=xd.createNatsTableStreamName(e,t),{domain:s}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Au()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")xn.warn(n);else throw n}}a(OL,"purgeTableStream");async function VX(e,t){if(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await OL(e,t[r])}a(VX,"purgeSchemaTableStreams");async function $X(e){return(await Ou()).streams.info(e)}a($X,"getStreamInfo");function YX(e,t,r){return`${Kt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(YX,"createSubjectName");async function Hd(){if(gu)return gu;if(gu=(await Ou())?.nc?.info?.server_name,gu===void 0)throw new Error("Unable to get jetstream manager server name");return gu}a(Hd,"getJsmServerName");async function KX(){let e=await Ou(),t=await Hd(),r=await SL();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=WX(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let l=_.join(".");xn.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l,await e.streams.update(s.name,s)}}a(KX,"updateLocalStreams");function WX(e){let{config:t}=e,r=!1,n=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(WX,"updateStreamLimits");async function QX(e){let t,r;try{t=await Tr.jetstream({domain:e}),r=await Tr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw xn.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(QX,"connectToRemoteJS")});var bu=g((Xfe,wL)=>{"use strict";var Ea=H_(),ha=LD(),zX=$(),JX=require("uuid").v4,Jfe=require("clone"),qd=Ns(),ma=P(),XX=require("util"),Ei=Dn(),{handleHDBError:gr,hdb_errors:jX}=se(),{HDB_ERROR_MSGS:Gd,HTTP_STATUS_CODES:Rr}=jX,{SchemaEventMsg:Fd}=Pn(),yL=ut(),{getDatabases:ZX}=(Ae(),ie(ke)),{transformReq:pa}=z();wL.exports={createSchema:ej,createSchemaStructure:NL,createTable:tj,createTableStructure:IL,createAttribute:oj,dropSchema:rj,dropTable:nj,dropAttribute:sj,getBackup:aj};async function ej(e){let t=await NL(e);return qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema)),t}a(ej,"createSchema");async function NL(e){let t=Ea.schema_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);if(pa(e),!await ha.checkSchemaExists(e.schema))throw gr(new Error,Gd.SCHEMA_EXISTS_ERR(e.schema),Rr.BAD_REQUEST,ma.LOG_LEVELS.ERROR,Gd.SCHEMA_EXISTS_ERR(e.schema),!0);return await Ei.createSchema(e),`database '${e.schema}' successfully created`}a(NL,"createSchemaStructure");async function tj(e){return pa(e),e.hash_attribute=e.primary_key??e.hash_attribute,await IL(e)}a(tj,"createTable");async function IL(e){let t=Ea.create_table_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);if(Ea.validateTableResidence(e.residence),!await ha.checkSchemaTableExists(e.schema,e.table))throw gr(new Error,Gd.TABLE_EXISTS_ERR(e.schema,e.table),Rr.BAD_REQUEST,ma.LOG_LEVELS.ERROR,Gd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:JX(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ei.createTable(n,e);else throw gr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Rr.BAD_REQUEST);else await Ei.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(IL,"createTableStructure");async function rj(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Ea.schema_object(e),n=t??r;if(n)throw gr(n,n.message,Rr.BAD_REQUEST,void 0,void 0,!0);pa(e);let s=await ha.checkSchemaExists(e.schema);if(s)throw gr(new Error,s,Rr.NOT_FOUND,ma.LOG_LEVELS.ERROR,s,!0);let i=await ha.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Ei.dropSchema(e),qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema)),await yL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(rj,"dropSchema");async function nj(e){let t=Ea.table_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);pa(e);let r=await ha.checkSchemaTableExists(e.schema,e.table);if(r)throw gr(new Error,r,Rr.NOT_FOUND,ma.LOG_LEVELS.ERROR,r,!0);return await Ei.dropTable(e),await yL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(nj,"dropTable");async function sj(e){let t=Ea.attribute_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);pa(e);let r=await ha.checkSchemaTableExists(e.schema,e.table);if(r)throw gr(new Error,r,Rr.NOT_FOUND,ma.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw gr(new Error,"You cannot drop a hash attribute",Rr.BAD_REQUEST,void 0,void 0,!0);if(ma.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw gr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Rr.BAD_REQUEST,void 0,void 0,!0);try{return await Ei.dropAttribute(e),ij(e),qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw zX.error(`Got an error deleting attribute ${XX.inspect(e)}.`),n}}a(sj,"dropAttribute");function ij(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(ij,"dropAttributeFromGlobal");async function oj(e){pa(e);let t=ZX()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw gr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Rr.BAD_REQUEST,void 0,void 0,!0);return await Ei.createAttribute(e),qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(oj,"createAttribute");function aj(e){return Ei.getBackup(e)}a(aj,"getBackup")});var DL=g((Zfe,CL)=>{"use strict";var{OPERATIONS_ENUM:cj}=P(),VS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=cj.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};CL.exports=VS});var $S=g((rEe,vL)=>{"use strict";var uj=Dn(),tEe=DL(),kd=z(),Vd=P(),lj=ee(),{handleHDBError:LL,hdb_errors:_j}=se(),{HDB_ERROR_MSGS:ML,HTTP_STATUS_CODES:PL}=_j,dj=Object.values(Vd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),UL="To use this operation audit log must be enabled in harperdb-config.yaml";vL.exports=fj;async function fj(e){if(kd.isEmpty(e.schema))throw new Error(ML.SCHEMA_REQUIRED_ERR);if(kd.isEmpty(e.table))throw new Error(ML.TABLE_REQUIRED_ERR);if(!lj.get(Vd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw LL(new Error,UL,PL.BAD_REQUEST,Vd.LOG_LEVELS.ERROR,UL,!0);let t=kd.checkSchemaTableExist(e.schema,e.table);if(t)throw LL(new Error,t,PL.NOT_FOUND,Vd.LOG_LEVELS.ERROR,t,!0);if(!kd.isEmpty(e.search_type)&&dj.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await uj.readAuditLog(e)}a(fj,"readAuditLog")});var xL=g((sEe,BL)=>{"use strict";var{OPERATIONS_ENUM:Ej}=P(),YS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Ej.GET_BACKUP,this.schema=t,this.table=r}};BL.exports=YS});var qL=g((cEe,GL)=>{"use strict";var hj=Dn(),oEe=xL(),KS=z(),mj=P(),aEe=ee(),{handleHDBError:pj,hdb_errors:Sj}=se(),{HDB_ERROR_MSGS:HL,HTTP_STATUS_CODES:Tj}=Sj;GL.exports=gj;async function gj(e){if(KS.isEmpty(e.schema))throw new Error(HL.SCHEMA_REQUIRED_ERR);if(KS.isEmpty(e.table))throw new Error(HL.TABLE_REQUIRED_ERR);let t=KS.checkSchemaTableExist(e.schema,e.table);if(t)throw pj(new Error,t,Tj.NOT_FOUND,mj.LOG_LEVELS.ERROR,t,!0);return await hj.getBackup(read_audit_log_object)}a(gj,"getBackup")});var KL=g((lEe,YL)=>{var hi=require("validate.js"),kL=je(),Sa=P(),{handleHDBError:Rj,hdb_errors:Aj}=se(),{HDB_ERROR_MSGS:mt,HTTP_STATUS_CODES:Oj}=Aj,WS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),bj={STRUCTURE_USER:"structure_user"},FL=Object.values(Sa.ROLE_TYPES_ENUM),yj="attribute_permissions",Nj="attribute_name",{PERMS_CRUD_ENUM:Ta}=Sa,Ij=[yj,...Object.values(Ta)],VL=[Ta.READ,Ta.INSERT,Ta.UPDATE],wj=[Nj,...VL];function Cj(e){let t=WS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,$L(e,t)}a(Cj,"addRoleValidation");function Dj(e){let t=WS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,$L(e,t)}a(Dj,"alterRoleValidation");function Lj(e){let t=WS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,kL.validateObject(e,t)}a(Lj,"dropRoleValidation");var Mj=["operation","role","id","permission","hdb_user","hdb_auth_header"];function $L(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Mj.includes(n[o])||s.push(n[o]);s.length>0&&At(mt.INVALID_ROLE_JSON_KEYS(s),r);let i=kL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{At(o,r)}),e.permission){let o=Pj(e);o&&At(o,r),FL.forEach(c=>{e.permission[c]&&!hi.isBoolean(e.permission[c])&&At(mt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(FL.indexOf(o)<0){if(o===bj.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||At(mt.SCHEMA_NOT_FOUND(d),r)}continue}At(mt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){At(mt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){At(mt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{Ij.includes(l)||At(mt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Ta).forEach(l=>{hi.isDefined(_[l])?hi.isBoolean(_[l])||At(mt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):At(mt.TABLE_PERM_MISSING(l),r,o,u)}),hi.isDefined(_.attribute_permissions)){if(!hi.isArray(_.attribute_permissions)){At(mt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{At(mt.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in _.attribute_permissions){let f=_.attribute_permissions[E];if(Object.keys(f).forEach(p=>{!wj.includes(p)&&p!==Ta.DELETE&&At(mt.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!hi.isDefined(f.attribute_name)){At(mt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!l.includes(h)){At(mt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}VL.forEach(p=>{hi.isDefined(f[p])?hi.isBoolean(f[p])||At(mt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):At(mt.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(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let E=`${o}.${u}`;At(mt.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return Uj(r)}a($L,"customValidate");YL.exports={addRoleValidation:Cj,alterRoleValidation:Dj,dropRoleValidation:Lj};function Pj(e){let{operation:t,permission:r}=e;if(t===Sa.OPERATIONS_ENUM.ADD_ROLE||t===Sa.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return mt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Sa.ROLE_TYPES_ENUM.SUPER_USER:Sa.ROLE_TYPES_ENUM.CLUSTER_USER;return mt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Pj,"validateNoSUPerms");function Uj(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:mt.ROLE_PERMS_ERROR,...e};return Rj(new Error,n,Oj.BAD_REQUEST)}else return null}a(Uj,"generateRolePermResponse");function At(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(At,"addPermError")});var ZS=g((dEe,JL)=>{"use strict";var WL=Fr(),QL=qr(),vj=ci(),zS=KL(),JS=Ns(),Bj=require("uuid").v4,xj=require("util"),$d=P(),Hj=z(),XS=QL.searchByValue,Gj=QL.searchByHash,qj=xj.promisify(vj.delete),Fj=rs(),kj=oa(),{hdb_errors:Vj,handleHDBError:_o}=se(),{HDB_ERROR_MSGS:zL,HTTP_STATUS_CODES:yu}=Vj,{UserEventMsg:jS}=Pn();JL.exports={addRole:$j,alterRole:Yj,dropRole:Kj,listRoles:Wj};function QS(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(QS,"scrubRoleDetails");async function $j(e){let t=zS.addRoleValidation(e);if(t)throw t;e=QS(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await XS(r)||[])}catch(i){throw _o(i)}if(n&&n.length>0)throw _o(new Error,zL.ROLE_ALREADY_EXISTS(e.role),yu.CONFLICT,void 0,void 0,!0);e.id||(e.id=Bj());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await WL.insert(s),JS.signalUserChange(new jS(process.pid)),e=QS(e),e}a($j,"addRole");async function Yj(e){let t=zS.alterRoleValidation(e);if(t)throw t;e=QS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await WL.update(r)}catch(s){throw _o(s)}if(n&&n?.message==="updated 0 of 1 records")throw _o(new Error,"Invalid role id",yu.BAD_REQUEST,void 0,void 0,!0);return await JS.signalUserChange(new jS(process.pid)),e}a(Yj,"alterRole");async function Kj(e){let t=zS.dropRoleValidation(e);if(t)throw _o(new Error,t,yu.BAD_REQUEST,void 0,void 0,!0);let r=new kj($d.SYSTEM_SCHEMA_NAME,$d.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Gj(r));if(n.length===0)throw _o(new Error,zL.ROLE_NOT_FOUND,yu.NOT_FOUND,void 0,void 0,!0);let s=new Fj($d.SYSTEM_SCHEMA_NAME,$d.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await XS(s)),o=!1;if(Hj.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw _o(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,yu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await qj(c),JS.signalUserChange(new jS(process.pid)),`${n[0].role} successfully deleted`}a(Kj,"dropRole");async function Wj(){return XS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Wj,"listRoles")});var eM=g((EEe,ZL)=>{"use strict";var Qj=ee(),mi=require("joi"),zj=je(),XL=require("moment"),Jj=require("fs-extra"),eT=require("path"),Xj=require("lodash"),Nu=P(),{LOG_LEVELS:fo}=P(),jj="YYYY-MM-DD hh:mm:ss",Zj=eT.resolve(__dirname,"../logs");ZL.exports=function(e){return zj.validateBySchema(e,eZ)};var eZ=mi.object({from:mi.custom(jL),until:mi.custom(jL),level:mi.valid(fo.NOTIFY,fo.FATAL,fo.ERROR,fo.WARN,fo.INFO,fo.DEBUG,fo.TRACE),order:mi.valid("asc","desc"),limit:mi.number().min(1),start:mi.number().min(0),log_name:mi.custom(tZ)});function jL(e,t){if(XL(e,XL.ISO_8601).format(jj)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(jL,"validateDatetime");function tZ(e,t){if(Xj.invert(Nu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Qj.get(Nu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?Nu.LOG_NAMES.HDB:e,i=s===Nu.LOG_NAMES.INSTALL?eT.join(Zj,Nu.LOG_NAMES.INSTALL):eT.join(n,s);return Jj.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(tZ,"validateReadLogPath")});var rT=g((mEe,rM)=>{"use strict";var Yd=P(),rZ=$(),nZ=ee(),sZ=eM(),tT=require("path"),tM=require("fs-extra"),{once:iZ}=require("events"),{handleHDBError:oZ,hdb_errors:aZ}=se(),{PACKAGE_ROOT:cZ}=P(),uZ=tT.join(cZ,"logs"),lZ=1e3,_Z=200;rM.exports=dZ;async function dZ(e){let t=sZ(e);if(t)throw oZ(t,t.message,aZ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=nZ.get(Yd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?Yd.LOG_NAMES.HDB:e.log_name,s=n===Yd.LOG_NAMES.INSTALL?tT.join(uZ,Yd.LOG_NAMES.INSTALL):tT.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?lZ: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&&!l&&(p=Math.max(tM.statSync(s).size-(h+5)*_Z,0));let S=tM.createReadStream(s,{start:p});S.on("error",U=>{rZ.error(U)});let T=0,A=[],b="",I;S.on("data",U=>{let F=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;U=b+U;let M=0,Q;for(;(Q=F.exec(U))&&!S.destroyed;){I&&(I.message=U.slice(M,Q.index),B(I));let[J,X,oe]=Q,ue=oe.split("] ["),le=ue[0],Be=ue[1];ue.splice(0,2),I={timestamp:X,thread:le,level:Be,tags:ue,message:""},M=Q.index+J.length}b=U.slice(M)}),S.on("end",U=>{S.destroyed||I&&(I.message=b.trim(),B(I))}),S.resume();function B(U){let F,M,Q;switch(!0){case(i&&c&&_):F=new Date(U.timestamp),M=new Date(u),Q=new Date(l),U.level===o&&F>=M&&F<=Q&&T<f?T++:U.level===o&&F>=M&&F<=Q&&(pi(U,E,A),T++,T===h&&S.destroy());break;case(i&&c):F=new Date(U.timestamp),M=new Date(u),U.level===o&&F>=M&&T<f?T++:U.level===o&&F>=M&&(pi(U,E,A),T++,T===h&&S.destroy());break;case(i&&_):F=new Date(U.timestamp),Q=new Date(l),U.level===o&&F<=Q&&T<f?T++:U.level===o&&F<=Q&&(pi(U,E,A),T++,T===h&&S.destroy());break;case(c&&_):F=new Date(U.timestamp),M=new Date(u),Q=new Date(l),F>=M&&F<=Q&&T<f?T++:F>=M&&F<=Q&&(pi(U,E,A),T++,T===h&&S.destroy());break;case i:U.level===o&&T<f?T++:U.level===o&&(pi(U,E,A),T++,T===h&&S.destroy());break;case c:F=new Date(U.timestamp),M=new Date(u),F>=M&&T<f?T++:F>=M&&T>=f&&(pi(U,E,A),T++,T===h&&S.destroy());break;case _:F=new Date(U.timestamp),Q=new Date(l),F<=Q&&T<f?T++:F<=Q&&T>=f&&(pi(U,E,A),T++,T===h&&S.destroy());break;default:T<f?T++:(pi(U,E,A),T++,T===h&&S.destroy())}}return a(B,"onLogMessage"),await iZ(S,"close"),A}a(dZ,"readLog");function pi(e,t,r){t==="desc"?fZ(e,r):t==="asc"?EZ(e,r):r.push(e)}a(pi,"pushLineToResult");function fZ(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(fZ,"insertDescending");function EZ(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(EZ,"insertAscending")});var Kd=g((REe,oM)=>{"use strict";var nT=require("joi"),{string:Iu,boolean:nM,date:hZ}=nT.types(),mZ=je(),{validateSchemaExists:SEe,validateTableExists:TEe,validateSchemaName:gEe}=Xn(),pZ=P(),SZ=Ve(),sM=ee();sM.initSync();var TZ=Iu.invalid(sM.get(pZ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(SZ.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(),iM={operation:Iu.valid("add_node","update_node","set_node_replication"),node_name:TZ,subscriptions:nT.array().items({table:Iu.optional(),schema:Iu.optional(),database:Iu.optional(),subscribe:nM.required(),publish:nM.required().custom(RZ),start_time:hZ.iso()}).min(1).required()};function gZ(e){return mZ.validateBySchema(e,nT.object(iM))}a(gZ,"addUpdateNodeValidator");function RZ(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(RZ,"checkForFalsy");oM.exports={addUpdateNodeValidator:gZ,validation_schema:iM}});var cM=g((OEe,aM)=>{var AZ=je(),OZ={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};aM.exports=function(e){return AZ.validateObject(e,OZ)}});var Wd=g((bEe,uM)=>{"use strict";var bZ=P().OPERATIONS_ENUM,sT=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=bZ.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};uM.exports=sT});var _M=g((NEe,lM)=>{"use strict";var yZ={OPERATION:"operation",REFRESH:"refresh"},iT=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},oT=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};lM.exports={JWTTokens:iT,TOKEN_TYPE_ENUM:yZ,JWTRSAKeys:oT}});var Du=g((wEe,hM)=>{"use strict";var Cu=require("jsonwebtoken"),aT=require("fs-extra"),cT=z(),dn=P(),{handleHDBError:Ar,hdb_errors:NZ}=se(),{HTTP_STATUS_CODES:Or,AUTHENTICATION_ERROR_MSGS:br}=NZ,wu=$(),dM=z_(),_T=_n(),IZ=Fr().update,wZ=Wd(),CZ=Ns(),{UserEventMsg:DZ}=Pn(),Si=ee();Si.initSync();var uT=require("path"),{JWTTokens:LZ,JWTRSAKeys:MZ,TOKEN_TYPE_ENUM:Qd}=_M(),PZ=Si.get(dn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Si.get(dn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",UZ=Si.get(dn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Si.get(dn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",zd="RS256",lT;hM.exports={createTokens:vZ,validateOperationToken:xZ,refreshOperationToken:BZ,validateRefreshToken:EM};async function vZ(e){if(cT.isEmpty(e)||typeof e!="object")throw Ar(new Error,br.INVALID_AUTH_OBJECT,Or.BAD_REQUEST,void 0,void 0,!0);if(cT.isEmpty(e.username))throw Ar(new Error,br.USERNAME_REQUIRED,Or.BAD_REQUEST,void 0,void 0,!0);if(cT.isEmpty(e.password))throw Ar(new Error,br.PASSWORD_REQUIRED,Or.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await _T.findAndValidateUser(e.username,e.password),!t)throw Ar(new Error,br.INVALID_CREDENTIALS,Or.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw wu.error(E),Ar(new Error,br.INVALID_CREDENTIALS,Or.UNAUTHORIZED,void 0,void 0,!0)}let r=await Jd(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await fM(i,r.private_key,r.passphrase),c=await Cu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:UZ,algorithm:zd,subject:Qd.REFRESH}),u=dM.hash(c),_=new wZ(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await IZ(_)}catch(E){wu.error(E),d=E}if(d!==void 0||l.skipped_hashes.length>0)throw Ar(new Error,br.REFRESH_TOKEN_SAVE_FAILED,Or.INTERNAL_SERVER_ERROR);return CZ.signalUserChange(new DZ(process.pid)),new LZ(o,c)}a(vZ,"createTokens");async function fM(e,t,r){return await Cu.sign(e,{key:t,passphrase:r},{expiresIn:PZ,algorithm:zd,subject:Qd.OPERATION})}a(fM,"signOperationToken");async function Jd(){if(lT===void 0)try{let e=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await aT.readFile(e)).toString(),s=(await aT.readFile(t)).toString(),i=(await aT.readFile(r)).toString();lT=new MZ(i,s,n)}catch(e){throw wu.error(e),Ar(new Error,br.NO_ENCRYPTION_KEYS,Or.INTERNAL_SERVER_ERROR)}return lT}a(Jd,"getJWTRSAKeys");async function BZ(e){if(!e)throw Ar(new Error,br.INVALID_BODY,Or.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Ar(new Error,br.REFRESH_TOKEN_REQUIRED,Or.BAD_REQUEST,void 0,void 0,!0);await EM(e.refresh_token);let t=await Jd(),r=await Cu.decode(e.refresh_token);return{operation_token:await fM({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(BZ,"refreshOperationToken");async function xZ(e){try{let t=await Jd(),r=await Cu.verify(e,t.public_key,{algorithms:zd,subject:Qd.OPERATION});return await _T.findAndValidateUser(r.username,void 0,!1)}catch(t){throw wu.warn(t),t.name&&t.name==="TokenExpiredError"?Ar(new Error,br.TOKEN_EXPIRED,Or.FORBIDDEN):Ar(new Error,br.INVALID_TOKEN,Or.UNAUTHORIZED)}}a(xZ,"validateOperationToken");async function EM(e){let t;try{let r=await Jd(),n=await Cu.verify(e,r.public_key,{algorithms:zd,subject:Qd.REFRESH});t=await _T.findAndValidateUser(n.username,void 0,!1)}catch(r){throw wu.warn(r),r.name&&r.name==="TokenExpiredError"?Ar(new Error,br.TOKEN_EXPIRED,Or.FORBIDDEN):Ar(new Error,br.INVALID_TOKEN,Or.UNAUTHORIZED)}if(!dM.validate(t.refresh_token,e))throw Ar(new Error,br.INVALID_TOKEN,Or.UNAUTHORIZED);return t}a(EM,"validateRefreshToken")});var dT=g((LEe,SM)=>{"use strict";var HZ=cM(),ga=require("passport"),GZ=require("passport-local").Strategy,qZ=require("passport-http").BasicStrategy,FZ=require("util"),kZ=_n(),pM=FZ.callbackify(kZ.findAndValidateUser),DEe=vr(),VZ=P(),mM=Du();ga.use(new GZ(function(e,t,r){pM(e,t,r)}));ga.use(new qZ(function(e,t,r){pM(e,t,r)}));ga.serializeUser(function(e,t){t(null,e)});ga.deserializeUser(function(e,t){t(null,e)});function $Z(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":ga.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===VZ.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?mM.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):mM.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:ga.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a($Z,"authorize");function YZ(e,t){let r=HZ(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);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]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(YZ,"checkPermissions");SM.exports={authorize:$Z,checkPermissions:YZ}});var Ti=g((PEe,TM)=>{"use strict";var fT=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},ET=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};TM.exports={Node:fT,NodeSubscription:ET}});var RM=g((vEe,gM)=>{"use strict";var KZ=P().OPERATIONS_ENUM,hT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=KZ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};gM.exports=hT});var Lu=g((xEe,AM)=>{"use strict";var mT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},pT=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};AM.exports={RemotePayloadObject:mT,RemotePayloadSubscription:pT}});var bM=g((GEe,OM)=>{"use strict";var ST=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};OM.exports=ST});var IM=g(($Ee,NM)=>{"use strict";var WZ=bM(),FEe=ft(),yM=ze(),QZ=$(),{getSchemaPath:kEe,getTransactionAuditStorePath:VEe}=Xe(),{getDatabases:zZ}=(Ae(),ie(ke));NM.exports=JZ;async function JZ(e){let t=new WZ;try{let r=zZ()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await yM.environmentDataSize(schema_path,e.name),o=await yM.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){QZ.warn(`unable to stat table dbi due to ${r}`)}return t}a(JZ,"lmdbGetTableSize")});var CM=g((KEe,wM)=>{"use strict";var TT=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};wM.exports=TT});var Ra=g((jEe,PM)=>{"use strict";var XZ=require("fs-extra"),jZ=require("path"),sr=require("systeminformation"),gi=$(),DM=ut(),QEe=Ve(),jd=P(),ZZ=IM(),e5=bs(),{getThreadInfo:LM}=Qe(),DT=ee();DT.initSync();var t5=CM(),{openEnvironment:zEe}=ze(),{getSchemaPath:JEe}=Xe(),{database:XEe,databases:gT}=(Ae(),ie(ke)),Xd;PM.exports={getHDBProcessInfo:bT,getNetworkInfo:NT,getDiskInfo:yT,getMemoryInfo:OT,getCPUInfo:AT,getTimeInfo:RT,getSystemInformation:IT,systemInformation:r5,getTableSize:wT,getMetrics:CT};function RT(){return sr.time()}a(RT,"getTimeInfo");async function AT(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await sr.cpu();l.cpu_speed=await sr.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:T,...A}=await sr.currentLoad();return A.cpus=[],T.forEach(b=>{let{raw_load:I,raw_load_idle:B,raw_load_irq:U,raw_load_nice:F,raw_load_system:M,raw_load_user:Q,...J}=b;A.cpus.push(J)}),l.current_load=A,l}catch(e){return gi.error(`error in getCPUInfo: ${e}`),{}}}a(AT,"getCPUInfo");async function OT(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await sr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return gi.error(`error in getMemoryInfo: ${e}`),{}}}a(OT,"getMemoryInfo");async function bT(){let e={core:[],clustering:[]};try{let t=await sr.processes(),r;try{r=Number.parseInt(await XZ.readFile(jZ.join(DT.get(jd.CONFIG_PARAMS.ROOTPATH),jd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===jd.NODE_ERROR_CODES.ENOENT)gi.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return gi.error(`error in getHDBProcessInfo: ${t}`),e}}a(bT,"getHDBProcessInfo");async function yT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await sr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await sr.fsStats();return e.read_write=_,e.size=await sr.fsSize(),e}catch(t){return gi.error(`error in getDiskInfo: ${t}`),e}}a(yT,"getDiskInfo");async function NT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await sr.networkInterfaceDefault(),e.latency=await sr.inetChecksite("google.com"),(await sr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...E}=n;e.interfaces.push(E)}),(await sr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return gi.error(`error in getNetworkInfo: ${t}`),e}}a(NT,"getNetworkInfo");async function IT(){if(Xd!==void 0)return Xd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await sr.osInfo();e=c;let u=await sr.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Xd=e,Xd}catch(t){return gi.error(`error in getSystemInformation: ${t}`),e}}a(IT,"getSystemInformation");async function wT(){let e=[],t=await e5.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await ZZ(n));return e}a(wT,"getTableSize");async function CT(){let e={};for(let t in gT){let r=e[t]={},n=r.tables={};for(let s in gT[t])try{let i=gT[t][s];r.readers||(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(u=>{let[_,l,d]=u.trim().split(" ");return{pid:_,thread:l,txnid:d}}),i.primaryStore.auditStore&&(r.audit=i.auditStore.getStats()));let o=i.primaryStore.getStats(),c={};for(let u of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[u]=o[u];n[s]=c}catch(i){gi.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(CT,"getMetrics");async function MM(){if(DT.get(jd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await DM.getNATSReferences(),t=await DM.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(MM,"getNatsStreamInfo");async function r5(e){let t=new t5;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await IT(),t.time=RT(),t.cpu=await AT(),t.memory=await OT(),t.disk=await yT(),t.network=await NT(),t.harperdb_processes=await bT(),t.table_size=await wT(),t.metrics=await CT(),t.threads=await LM(),t.replication=await MM(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await IT();break;case"time":t.time=RT();break;case"cpu":t.cpu=await AT();break;case"memory":t.memory=await OT();break;case"disk":t.disk=await yT();break;case"network":t.network=await NT();break;case"harperdb_processes":t.harperdb_processes=await bT();break;case"table_size":t.table_size=await wT();break;case"database_metrics":case"metrics":t.metrics=await CT();break;case"threads":t.threads=await LM();break;case"replication":t.replication=await MM();break;default:break}return t}a(r5,"systemInformation")});var ef=g((ehe,UM)=>{"use strict";UM.exports={version:n5,printVersion:s5};var Zd=du();function n5(){if(Zd)return Zd.version}a(n5,"version");function s5(){Zd&&console.log(`HarperDB Version ${Zd.version}`)}a(s5,"printVersion")});var fn=g((she,HM)=>{"use strict";var i5=Fr(),LT=z(),o5=require("util"),Eo=P(),vM=ee();vM.initSync();var a5=dT(),BM=qr(),{Node:rhe,NodeSubscription:nhe}=Ti(),c5=oa(),u5=RM(),{RemotePayloadObject:l5,RemotePayloadSubscription:_5}=Lu(),{handleHDBError:d5,hdb_errors:f5}=se(),{HTTP_STATUS_CODES:E5,HDB_ERROR_MSGS:h5}=f5,m5=rs(),p5=Ra(),S5=ef(),{getDatabases:T5}=(Ae(),ie(ke)),g5=o5.promisify(a5.authorize),R5=BM.searchByHash,A5=BM.searchByValue;HM.exports={authHeaderToUser:O5,isEmpty:b5,getNodeRecord:y5,upsertNodeRecord:N5,buildNodePayloads:I5,checkClusteringEnabled:w5,getAllNodeRecords:C5,getSystemInfo:D5,reverseSubscription:xM};async function O5(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await g5(t,null),e}a(O5,"authHeaderToUser");function b5(e){return e==null}a(b5,"isEmpty");async function y5(e){let t=new c5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return R5(t)}a(y5,"getNodeRecord");async function N5(e){let t=new u5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return i5.upsert(t)}a(N5,"upsertNodeRecord");function xM(e){if(LT.isEmpty(e.subscribe)||LT.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(xM,"reverseSubscription");function I5(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=LT.getTableHashAttribute(u,_),{subscribe:d,publish:E}=xM(c),f=T5()[u]?.[_],h=new _5(u,_,l,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new l5(r,t,s,n)}a(I5,"buildNodePayloads");function w5(){if(!vM.get(Eo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw d5(new Error,h5.CLUSTERING_NOT_ENABLED,E5.BAD_REQUEST,void 0,void 0,!0)}a(w5,"checkClusteringEnabled");async function C5(){let e=new m5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await A5(e))}a(C5,"getAllNodeRecords");async function D5(){let e=await p5.getSystemInformation();return{hdb_version:S5.version(),node_version:e.node_version,platform:e.platform}}a(D5,"getSystemInfo")});var MT=g((ohe,KM)=>{"use strict";var tf=ut(),GM=z(),qM=Ve(),FM=P(),rf=$(),kM=bu(),L5=md(),{RemotePayloadObject:M5}=Lu(),{handleHDBError:VM,hdb_errors:P5}=se(),{HTTP_STATUS_CODES:$M}=P5,{NodeSubscription:YM}=Ti();KM.exports=U5;async function U5(e,t){let r;try{r=await tf.request(`${t}.${qM.REQUEST_SUFFIX}`,new M5(FM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),rf.trace("Response from remote describe all request:",r)}catch(o){rf.error(`addNode received error from describe all request to remote node: ${o}`);let c=tf.requestErrorHandler(o,"add_node",t);throw VM(new Error,c,$M.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===qM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw VM(new Error,o,$M.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===FM.SYSTEM_SCHEMA_NAME){await tf.createLocalTableStream(u,c);let h=new YM(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=GM.doesSchemaExist(u),l=n[u]!==void 0,d=c?GM.doesTableExist(u,c):!0,E=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!E){s.push(o);continue}if(!_&&l&&(rf.trace(`addNode creating schema: ${u}`),await kM.createSchema({operation:"create_schema",schema:u})),!d&&E){rf.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new L5(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await kM.createTable(h)}await tf.createLocalTableStream(u,c);let f=new YM(u,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(U5,"reviewSubscriptions")});var af=g((che,zM)=>{"use strict";var{handleHDBError:nf,hdb_errors:v5}=se(),{HTTP_STATUS_CODES:sf}=v5,{addUpdateNodeValidator:B5}=Kd(),of=$(),QM=P(),WM=Ve(),x5=z(),Mu=ut(),Pu=fn(),H5=ee(),G5=MT(),{Node:q5,NodeSubscription:F5}=Ti(),{broadcast:k5}=Qe(),V5="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",$5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Y5=H5.get(QM.CONFIG_PARAMS.CLUSTERING_NODENAME);zM.exports=K5;async function K5(e,t=!1){of.trace("addNode called with:",e),Pu.checkClusteringEnabled();let r=B5(e);if(r)throw nf(r,r.message,sf.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await Pu.getNodeRecord(n);if(!x5.isEmptyOrZeroLength(d))throw nf(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,sf.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await G5(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=V5,o;let c=Pu.buildNodePayloads(s,Y5,QM.OPERATIONS_ENUM.ADD_NODE,await Pu.getSystemInfo()),u=[];for(let d=0,E=s.length;d<E;d++){let f=s[d];s[d].start_time===void 0&&delete s[d].start_time,u.push(new F5(f.schema,f.table,f.publish,f.subscribe))}of.trace("addNode sending remote payload:",c);let _;try{_=await Mu.request(`${n}.${WM.REQUEST_SUFFIX}`,c)}catch(d){of.error(`addNode received error from request: ${d}`);for(let f=0,h=s.length;f<h;f++){let p=s[f];p.publish=!1,p.subscribe=!1,await Mu.updateRemoteConsumer(p,n)}let E=Mu.requestErrorHandler(d,"add_node",n);throw nf(new Error,E,sf.INTERNAL_SERVER_ERROR,"error",E)}if(_.status===WM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw nf(new Error,d,sf.INTERNAL_SERVER_ERROR,"error",d)}of.trace(_);for(let d=0,E=s.length;d<E;d++){let f=s[d];await Mu.updateRemoteConsumer(f,n),f.subscribe===!0&&await Mu.updateConsumerIterator(f.schema,f.table,n,"start")}let l=new q5(n,u,_.system_info);return await Pu.upsertNodeRecord(l),k5({type:"nats_update"}),i.length>0?o.message=$5:o.message=`Successfully added '${n}' to manifest`,o}a(K5,"addNode")});var vT=g((_he,jM)=>{"use strict";var{handleHDBError:PT,hdb_errors:W5}=se(),{HTTP_STATUS_CODES:UT}=W5,{addUpdateNodeValidator:Q5}=Kd(),Uu=$(),XM=P(),JM=Ve(),lhe=z(),vu=ut(),Bu=fn(),z5=ee(),{cloneDeep:J5}=require("lodash"),X5=MT(),{Node:j5,NodeSubscription:Z5}=Ti(),{broadcast:e8}=Qe(),t8="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",r8="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",n8=z5.get(XM.CONFIG_PARAMS.CLUSTERING_NODENAME);jM.exports=s8;async function s8(e){Uu.trace("updateNode called with:",e),Bu.checkClusteringEnabled();let t=Q5(e);if(t)throw PT(t,t.message,UT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Bu.getNodeRecord(r);s.length>0&&(n=J5(s));let{added:i,skipped:o}=await X5(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=t8,c;let u=Bu.buildNodePayloads(i,n8,XM.OPERATIONS_ENUM.UPDATE_NODE,await Bu.getSystemInfo());for(let l=0,d=i.length;l<d;l++){let E=i[l];Uu.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[l].start_time===void 0&&delete i[l].start_time}Uu.trace("updateNode sending remote payload:",u);let _;try{_=await vu.request(`${r}.${JM.REQUEST_SUFFIX}`,u)}catch(l){Uu.error(`updateNode received error from request: ${l}`);let d=vu.requestErrorHandler(l,"update_node",r);throw PT(new Error,d,UT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===JM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw PT(new Error,l,UT.INTERNAL_SERVER_ERROR,"error",l)}Uu.trace(_);for(let l=0,d=i.length;l<d;l++){let E=i[l];await vu.updateRemoteConsumer(E,r),E.subscribe===!0?await vu.updateConsumerIterator(E.schema,E.table,r,"start"):await vu.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new j5(r,[],_.system_info)]),await i8(n[0],i,_.system_info),o.length>0?c.message=r8:c.message=`Successfully updated '${r}'`,c}a(s8,"updateNode");async function i8(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=n.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Z5(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Bu.upsertNodeRecord(n),e8({type:"nats_update"})}a(i8,"updateNodeTable")});var nP=g((fhe,rP)=>{"use strict";var tP=require("joi"),{string:ZM}=tP.types(),o8=je(),eP=P(),a8=ee(),c8=Ve();rP.exports=u8;function u8(e){let t=ZM.invalid(a8.get(eP.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(c8.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=tP.object({operation:ZM.valid(eP.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return o8.validateBySchema(e,r)}a(u8,"removeNodeValidator")});var uf=g((hhe,cP)=>{"use strict";var{handleHDBError:sP,hdb_errors:l8}=se(),{HTTP_STATUS_CODES:iP}=l8,_8=nP(),xu=$(),oP=fn(),d8=z(),cf=P(),aP=Ve(),BT=ut(),f8=ee(),{RemotePayloadObject:E8}=Lu(),{NodeSubscription:h8}=Ti(),m8=aa(),p8=ci(),{broadcast:S8}=Qe(),T8=f8.get(cf.CONFIG_PARAMS.CLUSTERING_NODENAME);cP.exports=g8;async function g8(e){xu.trace("removeNode called with:",e),oP.checkClusteringEnabled();let t=_8(e);if(t)throw sP(t,t.message,iP.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await oP.getNodeRecord(r);if(d8.isEmptyOrZeroLength(n))throw sP(new Error,`Node '${r}' was not found.`,iP.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new E8(cf.OPERATIONS_ENUM.REMOVE_NODE,T8,[]),i,o=!1;for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];l.subscribe===!0&&await BT.updateConsumerIterator(l.schema,l.table,r,"stop");try{await BT.updateRemoteConsumer(new h8(l.schema,l.table,!1,!1),r)}catch(d){xu.error(d)}}try{i=await BT.request(`${r}.${aP.REQUEST_SUFFIX}`,s),xu.trace("Remove node reply from remote node:",r,i)}catch(u){xu.error("removeNode received error from request:",u),o=!0}let c=new m8(cf.SYSTEM_SCHEMA_NAME,cf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await p8.deleteRecord(c),S8({type:"nats_update"}),i?.status===aP.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(xu.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(g8,"removeNode")});var _P=g((phe,lP)=>{"use strict";var uP=require("joi"),{string:R8,array:A8}=uP.types(),O8=je(),b8=Kd();lP.exports=y8;function y8(e){let t=uP.object({operation:R8.valid("configure_cluster").required(),connections:A8.items(b8.validation_schema).required()});return O8.validateBySchema(e,t)}a(y8,"configureClusterValidator")});var xT=g((The,mP)=>{"use strict";var N8=P(),lf=$(),I8=z(),w8=uf(),C8=af(),dP=fn(),D8=_P(),{handleHDBError:fP,hdb_errors:L8}=se(),{HTTP_STATUS_CODES:EP}=L8,M8="Configure cluster complete.",P8="Failed to configure the cluster. Check the logs for more details.",U8="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";mP.exports=v8;async function v8(e){lf.trace("configure cluster called with:",e),dP.checkClusteringEnabled();let t=D8(e);if(t)throw fP(t,t.message,EP.BAD_REQUEST,void 0,void 0,!0);let r=await dP.getAllNodeRecords(),n=[];for(let l=0,d=r.length;l<d;l++){let E=await hP(w8,{operation:N8.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[l].name},r[l].name);n.push(E)}lf.trace("All results from configure_cluster remove node:",n);let s=[],i=e.connections.length;for(let l=0;l<i;l++){let d=e.connections[l],E=await hP(C8,d,d.node_name);s.push(E)}lf.trace("All results from configure_cluster add node:",s);let o=[],c=[],u=!1,_=n.concat(s);for(let l=0,d=_.length;l<d;l++){let E=_[l];E.status==="rejected"&&(lf.error(E),o.includes(E.node_name)||o.push(E.node_name)),(E?.result?.message?.includes?.("Successfully")||E?.result?.includes?.("Successfully"))&&(u=!0),!(typeof E.result=="string"&&E.result.includes("Successfully removed")||E.status==="rejected")&&c.push({node_name:E?.node_name,subscriptions:E?.result})}if(I8.isEmptyOrZeroLength(o))return{message:M8,connections:c};if(u)return{message:U8,failed_nodes:o,connections:c};throw fP(new Error,P8,EP.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(v8,"configureCluster");async function hP(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(hP,"functionWrapper")});var gP=g((Rhe,TP)=>{"use strict";var Hu=require("joi"),B8=je(),{validateSchemaExists:pP,validateTableExists:x8,validateSchemaName:SP}=Xn(),H8=Hu.object({operation:Hu.string().valid("purge_stream"),schema:Hu.string().custom(pP).custom(SP).optional(),database:Hu.string().custom(pP).custom(SP).optional(),table:Hu.string().custom(x8).required()});function G8(e){return B8.validateBySchema(e,H8)}a(G8,"purgeStreamValidator");TP.exports=G8});var HT=g((Ohe,RP)=>{"use strict";var{handleHDBError:q8,hdb_errors:F8}=se(),{HTTP_STATUS_CODES:k8}=F8,V8=gP(),$8=ut(),Y8=fn();RP.exports=K8;async function K8(e){e.schema=e.schema??e.database;let t=V8(e);if(t)throw q8(t,t.message,k8.BAD_REQUEST,void 0,void 0,!0);Y8.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await $8.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(K8,"purgeStream")});var FT=g((yhe,IP)=>{"use strict";var qT=fn(),W8=ut(),bP=ee(),_f=P(),ho=Ve(),Q8=z(),GT=$(),{RemotePayloadObject:z8}=Lu(),{ErrorCode:AP}=require("nats"),OP=bP.get(_f.CONFIG_PARAMS.CLUSTERING_ENABLED),yP=bP.get(_f.CONFIG_PARAMS.CLUSTERING_NODENAME);IP.exports={clusterStatus:J8,buildNodeStatus:NP};async function J8(){let e={node_name:yP,is_enabled:OP,connections:[]};if(!OP)return e;let t=await qT.getAllNodeRecords();if(Q8.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(NP(t[n],e.connections));return await Promise.allSettled(r),e}a(J8,"clusterStatus");async function NP(e,t){let r=e.name,n=new z8(_f.OPERATIONS_ENUM.CLUSTER_STATUS,yP,void 0,await qT.getSystemInfo()),s,i,o=ho.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await W8.request(ho.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===ho.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ho.CLUSTER_STATUS_STATUSES.CLOSED,GT.error(`Error getting node status from ${r} `,s))}catch(u){GT.warn(`Error getting node status from ${r}`,u),u.code===AP.NoResponders?o=ho.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===AP.Timeout?o=ho.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ho.CLUSTER_STATUS_STATUSES.CLOSED}let c=new X8(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let u={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==_f.PRE_4_0_0_VERSION&&await qT.upsertNodeRecord(u)}catch(u){GT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(NP,"buildNodeStatus");function X8(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(X8,"NodeStatusObject")});var VT=g((Ihe,wP)=>{"use strict";var{handleHDBError:j8,hdb_errors:Z8}=se(),{HTTP_STATUS_CODES:e6}=Z8,t6=ut(),r6=fn(),kT=z(),df=require("joi"),n6=je(),s6=2e3,i6=df.object({timeout:df.number().min(1),connected_nodes:df.boolean(),routes:df.boolean()});wP.exports=o6;async function o6(e){r6.checkClusteringEnabled();let t=n6.validateBySchema(e,i6);if(t)throw j8(t,t.message,e6.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||kT.autoCastBoolean(n),o=s===void 0||kT.autoCastBoolean(s),c={nodes:[]},u=await t6.getServerList(r??s6),_={};if(i)for(let l=0,d=u.length;l<d;l++){let E=u[l].statsz;E&&(_[u[l].server.name]=E.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let E=u[l].server,f=u[l].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[E.name]&&_[E.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(p=>({host:p.split(":")[0],port:kT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(o6,"clusterNetwork")});var MP=g((Che,LP)=>{"use strict";var $T=require("joi"),CP=je(),{route_constraints:DP}=op();LP.exports={setRoutesValidator:a6,deleteRoutesValidator:c6};function a6(e){let t=$T.object({server:$T.valid("hub","leaf").required(),routes:DP.required()});return CP.validateBySchema(e,t)}a(a6,"setRoutesValidator");function c6(e){let t=$T.object({routes:DP.required()});return CP.validateBySchema(e,t)}a(c6,"deleteRoutesValidator")});var KT=g((Lhe,BP)=>{"use strict";var mo=Er(),YT=z(),ff=P(),PP=MP(),{handleHDBError:UP,hdb_errors:u6}=se(),{HTTP_STATUS_CODES:vP}=u6,l6="cluster routes successfully set",_6="cluster routes successfully deleted";BP.exports={setRoutes:d6,getRoutes:f6,deleteRoutes:E6};function d6(e){let t=PP.setRoutesValidator(e);if(t)throw UP(t,t.message,vP.BAD_REQUEST,void 0,void 0,!0);let r=mo.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=YT.autoCast(_.port);let l=n.some(E=>E.host===_.host&&E.port===_.port),d=s.some(E=>E.host===_.host&&E.port===_.port);l||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?mo.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):mo.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:l6,set:o,skipped:i}}a(d6,"setRoutes");function f6(){let e=mo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(f6,"getRoutes");function E6(e){let t=PP.deleteRoutesValidator(e);if(t)throw UP(t,t.message,vP.BAD_REQUEST,void 0,void 0,!0);let r=mo.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],E=!1;for(let f=0,h=n.length;f<h;f++){let p=n[f];if(d.host===p.host&&d.port===p.port){n.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,p=s.length;h<p;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(n=YT.isEmptyOrZeroLength(n)?null:n,mo.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=YT.isEmptyOrZeroLength(s)?null:s,mo.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:_6,deleted:i,skipped:o}}a(E6,"deleteRoutes")});var HP=g((Phe,xP)=>{"use strict";var Gu=require("alasql"),po=require("recursive-iterator"),Hn=$(),h6=z(),qu=P(),WT=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,p6(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(s=>qu.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!qu.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][qu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=m6(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!qu.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Gu.yy.Column({columnid:_});s.tableid&&(l.tableid=s.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function m6(e){return e.filter(t=>t[qu.PERMS_CRUD_ENUM.READ])}a(m6,"filterReadRestrictedAttrs");function p6(e,t,r,n,s){S6(e,t,r,n,s)}a(p6,"interpretAST");function Fu(e,t,r,n,s){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),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(Fu,"addSchemaTableToMap");function S6(e,t,r,n,s){if(!e){Hn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Gu.yy.Insert?A6(e,t,r):e instanceof Gu.yy.Select?T6(e,t,r,n,s):e instanceof Gu.yy.Update?g6(e,t,r):e instanceof Gu.yy.Delete?R6(e,t,r):Hn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(S6,"getRecordAttributesAST");function T6(e,t,r,n,s){if(!e){Hn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(h6.isEmptyOrZeroLength(i)){Hn.error("No schema specified");return}e.from.forEach(c=>{Fu(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Fu(c.table,t,r,n,s)});let o=new po(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Hn.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new po(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Hn.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new po(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=s.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Hn.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new po(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Hn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(T6,"getSelectAttributes");function g6(e,t,r){if(!e){Hn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new po(e.columns),s=e.table.databaseid;Fu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.table.tableid,s,i.columnid,t,r)}a(g6,"getUpdateAttributes");function R6(e,t,r){if(!e){Hn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new po(e.where),s=e.table.databaseid;Fu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.table.tableid,s,i.columnid,t,r)}a(R6,"getDeleteAttributes");function A6(e,t,r){if(!e){Hn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new po(e.columns),s=e.into.databaseid;Fu(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.into.tableid,s,i.columnid,t,r)}a(A6,"getInsertAttributes");function QT(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(QT,"pushAttribute");xP.exports=WT});var XT=g((vhe,kP)=>{var Ef=ji(),GP=require("chalk"),zr=$(),qP=require("prompt"),{promisify:O6}=require("util"),zT=P(),b6=require("fs-extra"),y6=require("path"),N6=z(),I6=ef(),FP=ee();FP.initSync();var w6=require("moment"),C6=O6(qP.get),D6=y6.join(FP.getHdbBasePath(),zT.LICENSE_KEY_DIR_NAME,zT.LICENSE_FILE_NAME,zT.LICENSE_FILE_NAME);kP.exports={getFingerprint:M6,setLicense:L6,parseLicense:JT,register:P6,getRegistrationInfo:v6};async function L6(e){if(e&&e.key&&e.company){try{zr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await JT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw zr.error(r),zr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(L6,"setLicense");async function M6(){let e={};try{e=await Ef.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw zr.error(r),zr.error(t),new Error(r)}return e}a(M6,"getFingerprint");async function JT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");zr.info("Validating license input...");let r=Ef.validateLicense(e,t);if(zr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(zr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(zr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{zr.info("writing license to disk"),await b6.writeFile(D6,JSON.stringify({license_key:e,company:t}))}catch(n){throw zr.error("Failed to write License"),n}return"Registration successful."}a(JT,"parseLicense");async function P6(){let e=await U6();return JT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(P6,"register");async function U6(){let e=await Ef.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:GP.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:GP.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{qP.start()}catch(n){zr.error(n)}let r;try{r=await C6(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(U6,"promptForRegistration");async function v6(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Ef.getLicense()}catch(r){throw zr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(N6.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=I6.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=w6.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(v6,"getRegistrationInfo")});var $P=g((xhe,VP)=>{"use strict";var B6=Ve(),jT=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+B6.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:E,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};VP.exports=jT});var WP=g((Ghe,KP)=>{"use strict";var YP=Ve(),ZT=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+YP.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+YP.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};KP.exports=ZT});var zP=g((Fhe,QP)=>{"use strict";var eg=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};QP.exports=eg});var XP=g((Vhe,JP)=>{"use strict";var x6=Ve(),tg=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+x6.SERVER_SUFFIX.ADMIN,this.password=r}};JP.exports=tg});var sg=g((Yhe,eU)=>{"use strict";var Aa=require("path"),pf=require("fs-extra"),H6=$P(),G6=WP(),q6=zP(),F6=XP(),rg=_n(),ba=z(),yr=Er(),mf=P(),ku=Ve(),{CONFIG_PARAMS:pt}=mf,ya=$(),Vu=ee(),jP=Os(),ng=ut(),Oa="clustering",k6=1e4,ZP=50;eU.exports={generateNatsConfig:$6,removeNatsConfig:Y6,getHubConfigPath:V6};function V6(){let e=Vu.get(pt.ROOTPATH);return Aa.join(e,Oa,ku.NATS_CONFIG_FILES.HUB_SERVER)}a(V6,"getHubConfigPath");async function $6(e=!1,t=void 0){Vu.initSync();let r=Vu.get(pt.ROOTPATH),n=Aa.join(r,Oa,ku.PID_FILES.HUB),s=Aa.join(r,Oa,ku.PID_FILES.LEAF),i=yr.getConfigFromFile(pt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Aa.join(r,Oa,ku.NATS_CONFIG_FILES.HUB_SERVER),c=Aa.join(r,Oa,ku.NATS_CONFIG_FILES.LEAF_SERVER),u=yr.getConfigFromFile(pt.CLUSTERING_TLS_CERTIFICATE),_=yr.getConfigFromFile(pt.CLUSTERING_TLS_PRIVATEKEY),l=yr.getConfigFromFile(pt.CLUSTERING_TLS_CERT_AUTH),d=yr.getConfigFromFile(pt.CLUSTERING_TLS_INSECURE),E=yr.getConfigFromFile(pt.CLUSTERING_TLS_VERIFY),f=yr.getConfigFromFile(pt.CLUSTERING_NODENAME),h=yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await ng.checkNATSServerInstalled()||Sf("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await rg.listUsers(),S=yr.getConfigFromFile(pt.CLUSTERING_USER),T=await rg.getClusterUser();(ba.isEmpty(T)||T.active!==!0)&&Sf(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await hf(pt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await hf(pt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await hf(pt.CLUSTERING_HUBSERVER_NETWORK_PORT),await hf(pt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let A=[],b=[];for(let[J,X]of p.entries())X.role?.role===mf.ROLE_TYPES_ENUM.CLUSTER_USER&&X.active&&(A.push(new F6(X.username,jP.decrypt(X.hash))),b.push(new q6(X.username,jP.decrypt(X.hash))));let I=[],{hub_routes:B}=yr.getClusteringRoutes();if(!ba.isEmptyOrZeroLength(B))for(let J of B)I.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${J.host}:${J.port}`);let U=new H6(yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_NETWORK_PORT),f,n,u,_,l,d,E,h,yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_CLUSTER_NAME),yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),I,A,b);l==null&&(delete U.tls.ca_file,delete U.leafnodes.tls.ca_file),t=ba.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===mf.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await pf.writeJson(o,U),ya.trace(`Hub server config written to ${o}`));let F=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,M=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,Q=new G6(yr.getConfigFromFile(pt.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,s,i,[F],[M],A,b,u,_,l,d);l==null&&delete Q.tls.ca_file,(t===void 0||t===mf.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await pf.writeJson(c,Q),ya.trace(`Leaf server config written to ${c}`))}a($6,"generateNatsConfig");async function hf(e){let t=Vu.get(e);return ba.isEmpty(t)&&Sf(`port undefined for '${e}'`),await ba.isPortTaken(t)&&Sf(`'${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(hf,"isPortAvailable");function Sf(e){let t=`Error generating clustering config: ${e}`;ya.error(t),console.error(t),process.exit(1)}a(Sf,"generateNatsConfigError");async function Y6(e){let{port:t,config_file:r}=ng.getServerConfig(e),{username:n,decrypt_hash:s}=await rg.getClusterUser(),i=0,o=2e3;for(;i<ZP;){try{let l=await ng.createConnection(t,n,s,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){ya.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=ZP)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let _=o*(i*2);_>3e4&&ya.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await ba.async_set_timeout(_)}let c="0".repeat(k6),u=Aa.join(Vu.get(pt.ROOTPATH),Oa,r);await pf.writeFile(u,c),await pf.remove(u),ya.notify(e,"started.")}a(Y6,"removeNatsConfig")});var oU=g((Whe,iU)=>{"use strict";var Jr=ee(),K6=ji(),pe=P(),$u=Ve(),Ls=require("path"),{PACKAGE_ROOT:gf}=P(),tU=ee(),Tf=z(),Na="/dev/null",W6=Ls.join(gf,"launchServiceScripts"),rU=Ls.join(gf,"utility/scripts"),Q6=Ls.join(rU,pe.HDB_RESTART_SCRIPT),nU=Ls.resolve(gf,"dependencies",`${process.platform}-${process.arch}`,$u.NATS_BINARY_NAME);function sU(){let t=K6.licenseSearch().ram_allocation||pe.RAM_ALLOCATION_ENUM.DEFAULT,r=pe.MEM_SETTING_KEY+t,n={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Tf.noBootFile()&&(n[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Tf.getEnvCliRootPath()),{name:pe.PROCESS_DESCRIPTORS.HDB,script:pe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:gf}}a(sU,"generateMainServerConfig");var z6=9930;function J6(){Jr.initSync(!0);let e=Jr.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ls.join(e,"clustering",$u.NATS_CONFIG_FILES.HUB_SERVER),r=Ls.join(Jr.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=tU.get(pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=$u.LOG_LEVEL_FLAGS[Jr.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==z6?"-"+n:""),script:nU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Jr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Na,i.error_file=Na),i}a(J6,"generateNatsHubServerConfig");var X6=9940;function j6(){Jr.initSync(!0);let e=Jr.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ls.join(e,"clustering",$u.NATS_CONFIG_FILES.LEAF_SERVER),r=Ls.join(Jr.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=tU.get(pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=$u.LOG_LEVEL_FLAGS[Jr.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==X6?"-"+n:""),script:nU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Jr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Na,i.error_file=Na),i}a(j6,"generateNatsLeafServerConfig");function Z6(){Jr.initSync();let e=Ls.join(Jr.get(pe.CONFIG_PARAMS.LOGGING_ROOT),pe.LOG_NAMES.HDB),t={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:pe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:W6,autorestart:!1};return Jr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Na,t.error_file=Na),t}a(Z6,"generateClusteringUpgradeV4ServiceConfig");function e9(){let e={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.RESTART_HDB};return Tf.noBootFile()&&(e[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Tf.getEnvCliRootPath()),{...{name:pe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:rU},script:Q6}}a(e9,"generateRestart");function t9(){return{apps:[sU()]}}a(t9,"generateAllServiceConfigs");iU.exports={generateAllServiceConfigs:t9,generateMainServerConfig:sU,generateRestart:e9,generateNatsHubServerConfig:J6,generateNatsLeafServerConfig:j6,generateClusteringUpgradeV4ServiceConfig:Z6}});var gU=g((Jhe,TU)=>{"use strict";var ve=P(),r9=z(),Ps=sg(),Rf=ut(),Ms=Ve(),Ri=oU(),Af=ee(),Ai=$(),n9=fn(),{startWorker:aU,onMessageFromWorkers:s9}=Qe(),i9=Ra(),zhe=require("util"),o9=require("child_process"),a9=require("fs"),{execFile:c9}=o9,we;TU.exports={enterPM2Mode:u9,start:Oi,stop:ig,reload:uU,restart:lU,list:og,describe:dU,connect:Us,kill:E9,startAllServices:h9,startService:ag,getUniqueServicesList:fU,restartAllServices:m9,isServiceRegistered:EU,reloadStopStart:hU,restartHdb:_U,deleteProcess:d9,startClusteringProcesses:pU,startClusteringThreads:SU,isHdbRestartRunning:f9,isClusteringRunning:S9,stopClustering:p9,reloadClustering:T9};var Yu=!1;s9(e=>{e.type==="restart"&&Af.initSync(!0)});function u9(){Yu=!0}a(u9,"enterPM2Mode");function Us(){return we||(we=require("pm2")),new Promise((e,t)=>{we.connect((r,n)=>{Ai.setupConsoleLogging(),r&&t(r),e(n)})})}a(Us,"connect");var Nr,l9=10,cU;function Oi(e,t=!1){if(Yu)return _9(e);let r=c9(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Nr.indexOf(r);o>-1&&Nr.splice(o,1),!cU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<l9&&(a9.existsSync(Ps.getHubConfigPath())?Oi(e):(await Ps.generateNatsConfig(!0),Oi(e),await new Promise(c=>setTimeout(c,3e3)),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Af.get(ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Ms.LOG_LEVEL_HIERARCHY[o]>=Ms.LOG_LEVEL_HIERARCHY[l||"info"]){let f=l===Ms.LOG_LEVELS.ERR||l===Ms.LOG_LEVELS.WRN?Ai.OUTPUTS.STDERR:Ai.OUTPUTS.STDOUT;Ai.logCustomLevel(l||"info",f,n,i.slice(_,u.index).trim())}let[d,E]=u;_=u.index+d.length,l=Ms.LOG_LEVELS[E]}if(Ms.LOG_LEVEL_HIERARCHY[o]>=Ms.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Ms.LOG_LEVELS.ERR||l===Ms.LOG_LEVELS.WRN?Ai.OUTPUTS.STDERR:Ai.OUTPUTS.STDOUT;Ai.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Nr=[],!Nr&&!t){let i=a(()=>{cU=!0,Nr&&(Nr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Nr.push(r)}a(Oi,"start");function _9(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.start(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(_9,"startWithPM2");function ig(e){if(!Yu){for(let t of Nr||[])t.name===e&&(Nr.splice(Nr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.stop(e,async(n,s)=>{n&&(we.disconnect(),r(n)),we.delete(e,(i,o)=>{i&&(we.disconnect(),r(n)),we.disconnect(),t(o)})})})}a(ig,"stop");function uU(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.reload(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(uU,"reload");function lU(e){if(!Yu)for(let t of Nr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.restart(e,(n,s)=>{we.disconnect(),t(s)})})}a(lU,"restart");function d9(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.delete(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(d9,"deleteProcess");async function _U(){await Oi(Ri.generateRestart())}a(_U,"restartHdb");async function f9(){let e=await og();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(f9,"isHdbRestartRunning");function og(){return new Promise(async(e,t)=>{try{await Us()}catch(r){t(r)}we.list((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(og,"list");function dU(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.describe(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(dU,"describe");function E9(){if(!Yu){for(let e of Nr||[])e.kill();Nr=[];return}return new Promise(async(e,t)=>{try{await Us()}catch(r){t(r)}we.killDaemon((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(E9,"kill");async function h9(){try{await pU(),await SU(),await Oi(Ri.generateAllServiceConfigs())}catch(e){throw we?.disconnect(),e}}a(h9,"startAllServices");async function ag(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ri.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ri.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ri.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ri.generateNatsHubServerConfig(),await Oi(r,t),await Ps.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ri.generateNatsLeafServerConfig(),await Oi(r,t),await Ps.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ri.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Oi(r)}catch(r){throw we?.disconnect(),r}}a(ag,"startService");async function fU(){try{let e=await og(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw we?.disconnect(),e}}a(fU,"getUniqueServicesList");async function m9(e=[]){try{let t=!1,r=await fU();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===ve.PROCESS_DESCRIPTORS.HDB?t=!0:await lU(o))}t&&await hU(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw we?.disconnect(),t}}a(m9,"restartAllServices");async function EU(e){if(Nr?.find(r=>r.name===e))return!0;let t=await i9.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(EU,"isServiceRegistered");async function hU(e){let t=Af.get(ve.CONFIG_PARAMS.THREADS_COUNT)??Af.get(ve.CONFIG_PARAMS.THREADS),r=await dU(e),n=r9.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await ig(e),await ag(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await _U():await uU(e)}a(hU,"reloadStopStart");var mU;async function pU(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await ag(r,e)}}a(pU,"startClusteringProcesses");async function SU(){mU=aU(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Rf.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Rf.updateLocalStreams();let e=await n9.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){Ai.info("Starting clustering upgrade 4.0.0 process"),aU(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(SU,"startClusteringThreads");async function p9(){for(let e in ve.CLUSTERING_PROCESSES)if(e!==ve.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ve.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await mU.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await ig(t)}}a(p9,"stopClustering");async function S9(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await EU(t)===!1)return!1}return!0}a(S9,"isClusteringRunning");async function T9(){await Ps.generateNatsConfig(!0),await Rf.reloadNATSHub(),await Rf.reloadNATSLeaf(),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(T9,"reloadClustering")});var IU={};Fe(IU,{compactOnStart:()=>g9,copyDb:()=>NU});async function g9(){Wu.notify("Running compact on start"),console.log("Running compact on start");let e=(0,cg.get)(bi.CONFIG_PARAMS.ROOTPATH),t=new Map,r=mr();try{for(let n in r){if(n==="system")continue;let s;for(let u in r[n]){s=r[n][u].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,Of.join)(e,"backup",n+".mdb"),o=(0,Of.join)(e,bi.DATABASES_DIR_NAME,n+"-copy.mdb"),c=await RU(n);console.log("Database",n,"before compact has a total record count of",c),t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await NU(n,o),console.log("Backing up",n,"to",i),await(0,So.move)(s,i,{overwrite:!0})}Ku();for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,So.move)(i,s,{overwrite:!0}),await(0,So.remove)((0,Of.join)(e,bi.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));Ku()}catch(n){Wu.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,ug.updateConfigValue)(bi.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,So.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Ku(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await RU(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let u=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
12
|
+
`,"")}a(hL,"runCommand");async function Ij(){try{await sj.access(vS)}catch{return!1}let e=await hL(`${vS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return ij.eq(t,yj)}a(Ij,"checkNATSServerInstalled");async function qS(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await fL.getClusterUser();if(lo(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}xn.trace("create nats connection called");let i=await hj({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),xn.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&xn.error("Error with Nats client connection, connection closed",o),mL()}),i}a(qS,"createConnection");function mL(){gr=void 0,ao=void 0,co=void 0,uo=void 0}a(mL,"clearClientCache");async function wj(){gr&&(await gr.drain(),gr=void 0,ao=void 0,co=void 0,uo=void 0)}a(wj,"closeConnection");var gr,uo;async function Au(){return uo||(uo=qS(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),gr=await uo),gr||uo}a(Au,"getConnection");async function Ou(){if(ao)return ao;lo(gr)&&await Au();let{domain:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(lo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ao=await gr.jetstreamManager({domain:e,timeout:6e4}),ao}a(Ou,"getJetStreamManager");async function pL(){if(co)return co;lo(gr)&&await Au();let{domain:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(lo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return co=gr.jetstream({domain:e,timeout:6e4}),co}a(pL,"getJetStream");async function as(){let e=gr||await Au(),t=ao||await Ou(),r=co||await pL();return{connection:e,jsm:t,js:r}}a(as,"getNATSReferences");async function Cj(e){let t=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await fL.getClusterUser(),s=await qS(t,r,n),i=GS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=EL.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await Bd.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(Cj,"getServerList");async function FS(e,t){let{jsm:r}=await as(),n=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:mj.File,retention:pj.Limits,subjects:t,discard:Sj.Old,max_msgs:s,max_bytes:i,max_age:n})}a(FS,"createLocalStream");async function SL(){let{jsm:e}=await as(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(SL,"listStreams");async function Dj(e){let{jsm:t}=await as();await t.streams.delete(e)}a(Dj,"deleteLocalStream");async function Lj(e){let{connection:t}=await as(),r=[],n=GS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(EL.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(Lj,"listRemoteStreams");async function Mj(e,t=void 0,r=void 0){let{jsm:n,js:s}=await as(),i=uL(),o={durable_name:i,ack_policy:xS.Explicit};t&&(o.deliver_policy=HS.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=BS(l.data),E={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(E.origin=l.headers.get(Kt.MSG_HEADERS.ORIGIN)),_.push(E),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(Mj,"viewStream");async function*Pj(e,t=void 0,r=void 0){let{jsm:n,js:s}=await as(),i=uL(),o={durable_name:i,ack_policy:xS.Explicit};t&&(o.deliver_policy=HS.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=BS(_.data);l[0]||(l=[l]);for(let d of l){let E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(E.origin=_.headers.get(Kt.MSG_HEADERS.ORIGIN)),yield E}if(_.ack(),_.info.pending===0)break}await c.delete()}a(Pj,"viewStreamIterator");async function Uj(e,t,r,n){xn.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=TL(n,r);let{js:s}=await as(),i=await Hd(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:dL.encode(n);try{xn.trace(`publishToStream publishing to subject: ${o}`),Oj(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return RL(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){xn.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await FS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(Uj,"publishToStream");function TL(e,t){t===void 0&&(t=gj());let r=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Kt.MSG_HEADERS.ORIGIN)&&r&&t.append(Kt.MSG_HEADERS.ORIGIN,r),t}a(TL,"addNatsMsgHeader");function fa(e){e=e.toLowerCase();let t=Ru.join(xt.get(Ie.CONFIG_PARAMS.ROOTPATH),bj);if(e===Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return lo(US)&&(US={port:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.HUB,config_file:Kt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ru.join(t,Kt.PID_FILES.HUB),hdb_nats_path:t}),US;if(e===Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return lo(PS)&&(PS={port:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.LEAF,config_file:Kt.NATS_CONFIG_FILES.LEAF_SERVER,domain:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.LEAF,pid_file_path:Ru.join(t,Kt.PID_FILES.LEAF),hdb_nats_path:t}),PS;xn.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(fa,"getServerConfig");async function gL(e,t,r,n){try{await e.consumers.add(t,{ack_policy:xS.Explicit,durable_name:r,deliver_policy:HS.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(gL,"createConsumer");async function vj(e,t,r){await e.consumers.delete(t,r)}a(vj,"removeConsumer");function Bj(e){return e.split(".")[1]}a(Bj,"extractServerName");async function xj(e,t,r=6e4,n=GS()){if(!Bd.isObject(t))throw new Error("data param must be an object");let s=dL.encode(t),{connection:i}=await as(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return BS(c.data)}a(xj,"request");function kS(e){return new Promise(async(t,r)=>{let n=uj(vS,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(kS,"reloadNATS");async function Hj(){let{pid_file_path:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await kS(e)}a(Hj,"reloadNATSHub");async function Gj(){let{pid_file_path:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await kS(e)}a(Gj,"reloadNATSLeaf");function qj(e,t,r){let n;switch(e.code){case cL.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case cL.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(qj,"requestErrorHandler");async function Fj(e,t){let r=t+Kt.SERVER_SUFFIX.LEAF,{connection:n}=await as(),{jsm:s}=await zj(r),{schema:i,table:o}=e,c=xd.createNatsTableStreamName(i,o),u=e.start_time?e.start_time:new Date(Date.now()).toISOString();await RL(async()=>{if(e.subscribe===!0)await gL(s,c,n.info.server_name,u);else try{await vj(s,c,n.info.server_name)}catch(_){xn.trace(_)}})}a(Fj,"updateRemoteConsumer");async function kj(e,t,r,n){let s=xd.createNatsTableStreamName(e,t),i=r+Kt.SERVER_SUFFIX.LEAF,o={type:Ie.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!_L&&fj()<xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=MS();await c(o)}await _j(o),n==="stop"&&await Bd.async_set_timeout(1e3)}a(kj,"updateConsumerIterator");function RL(e){return lj.writeTransaction(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(RL,"exclusiveLock");async function AL(e,t){let r=xd.createNatsTableStreamName(e,t),n=await Hd(),s=Kj(e,t,n);await FS(r,[s])}a(AL,"createLocalTableStream");async function Vj(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await AL(n,s)}}a(Vj,"createTableStreams");async function OL(e,t,r=void 0){if(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=xd.createNatsTableStreamName(e,t),{domain:s}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Au()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")xn.warn(n);else throw n}}a(OL,"purgeTableStream");async function $j(e,t){if(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await OL(e,t[r])}a($j,"purgeSchemaTableStreams");async function Yj(e){return(await Ou()).streams.info(e)}a(Yj,"getStreamInfo");function Kj(e,t,r){return`${Kt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Kj,"createSubjectName");async function Hd(){if(gu)return gu;if(gu=(await Ou())?.nc?.info?.server_name,gu===void 0)throw new Error("Unable to get jetstream manager server name");return gu}a(Hd,"getJsmServerName");async function Wj(){let e=await Ou(),t=await Hd(),r=await SL();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Qj(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let l=_.join(".");xn.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l,await e.streams.update(s.name,s)}}a(Wj,"updateLocalStreams");function Qj(e){let{config:t}=e,r=!1,n=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(Qj,"updateStreamLimits");async function zj(e){let t,r;try{t=await gr.jetstream({domain:e}),r=await gr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw xn.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(zj,"connectToRemoteJS")});var bu=g((Xfe,wL)=>{"use strict";var Ea=H_(),ha=LD(),Jj=$(),jj=require("uuid").v4,jfe=require("clone"),qd=Ns(),ma=P(),Xj=require("util"),Ei=Dn(),{handleHDBError:Rr,hdb_errors:Zj}=se(),{HDB_ERROR_MSGS:Gd,HTTP_STATUS_CODES:Ar}=Zj,{SchemaEventMsg:Fd}=Pn(),yL=ut(),{getDatabases:eX}=(Ae(),ie(ke)),{transformReq:pa}=z();wL.exports={createSchema:tX,createSchemaStructure:NL,createTable:rX,createTableStructure:IL,createAttribute:aX,dropSchema:nX,dropTable:sX,dropAttribute:iX,getBackup:cX};async function tX(e){let t=await NL(e);return qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema)),t}a(tX,"createSchema");async function NL(e){let t=Ea.schema_object(e);if(t)throw Rr(t,t.message,Ar.BAD_REQUEST,void 0,void 0,!0);if(pa(e),!await ha.checkSchemaExists(e.schema))throw Rr(new Error,Gd.SCHEMA_EXISTS_ERR(e.schema),Ar.BAD_REQUEST,ma.LOG_LEVELS.ERROR,Gd.SCHEMA_EXISTS_ERR(e.schema),!0);return await Ei.createSchema(e),`database '${e.schema}' successfully created`}a(NL,"createSchemaStructure");async function rX(e){return pa(e),e.hash_attribute=e.primary_key??e.hash_attribute,await IL(e)}a(rX,"createTable");async function IL(e){let t=Ea.create_table_object(e);if(t)throw Rr(t,t.message,Ar.BAD_REQUEST,void 0,void 0,!0);if(Ea.validateTableResidence(e.residence),!await ha.checkSchemaTableExists(e.schema,e.table))throw Rr(new Error,Gd.TABLE_EXISTS_ERR(e.schema,e.table),Ar.BAD_REQUEST,ma.LOG_LEVELS.ERROR,Gd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:jj(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ei.createTable(n,e);else throw Rr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Ar.BAD_REQUEST);else await Ei.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(IL,"createTableStructure");async function nX(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Ea.schema_object(e),n=t??r;if(n)throw Rr(n,n.message,Ar.BAD_REQUEST,void 0,void 0,!0);pa(e);let s=await ha.checkSchemaExists(e.schema);if(s)throw Rr(new Error,s,Ar.NOT_FOUND,ma.LOG_LEVELS.ERROR,s,!0);let i=await ha.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Ei.dropSchema(e),qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema)),await yL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(nX,"dropSchema");async function sX(e){let t=Ea.table_object(e);if(t)throw Rr(t,t.message,Ar.BAD_REQUEST,void 0,void 0,!0);pa(e);let r=await ha.checkSchemaTableExists(e.schema,e.table);if(r)throw Rr(new Error,r,Ar.NOT_FOUND,ma.LOG_LEVELS.ERROR,r,!0);return await Ei.dropTable(e),await yL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(sX,"dropTable");async function iX(e){let t=Ea.attribute_object(e);if(t)throw Rr(t,t.message,Ar.BAD_REQUEST,void 0,void 0,!0);pa(e);let r=await ha.checkSchemaTableExists(e.schema,e.table);if(r)throw Rr(new Error,r,Ar.NOT_FOUND,ma.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Rr(new Error,"You cannot drop a hash attribute",Ar.BAD_REQUEST,void 0,void 0,!0);if(ma.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Rr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Ar.BAD_REQUEST,void 0,void 0,!0);try{return await Ei.dropAttribute(e),oX(e),qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Jj.error(`Got an error deleting attribute ${Xj.inspect(e)}.`),n}}a(iX,"dropAttribute");function oX(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(oX,"dropAttributeFromGlobal");async function aX(e){pa(e);let t=eX()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Rr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Ar.BAD_REQUEST,void 0,void 0,!0);return await Ei.createAttribute(e),qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(aX,"createAttribute");function cX(e){return Ei.getBackup(e)}a(cX,"getBackup")});var DL=g((eEe,CL)=>{"use strict";var{OPERATIONS_ENUM:uX}=P(),VS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=uX.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};CL.exports=VS});var $S=g((nEe,vL)=>{"use strict";var lX=Dn(),rEe=DL(),kd=z(),Vd=P(),_X=ee(),{handleHDBError:LL,hdb_errors:dX}=se(),{HDB_ERROR_MSGS:ML,HTTP_STATUS_CODES:PL}=dX,fX=Object.values(Vd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),UL="To use this operation audit log must be enabled in harperdb-config.yaml";vL.exports=EX;async function EX(e){if(kd.isEmpty(e.schema))throw new Error(ML.SCHEMA_REQUIRED_ERR);if(kd.isEmpty(e.table))throw new Error(ML.TABLE_REQUIRED_ERR);if(!_X.get(Vd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw LL(new Error,UL,PL.BAD_REQUEST,Vd.LOG_LEVELS.ERROR,UL,!0);let t=kd.checkSchemaTableExist(e.schema,e.table);if(t)throw LL(new Error,t,PL.NOT_FOUND,Vd.LOG_LEVELS.ERROR,t,!0);if(!kd.isEmpty(e.search_type)&&fX.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await lX.readAuditLog(e)}a(EX,"readAuditLog")});var xL=g((iEe,BL)=>{"use strict";var{OPERATIONS_ENUM:hX}=P(),YS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=hX.GET_BACKUP,this.schema=t,this.table=r}};BL.exports=YS});var qL=g((uEe,GL)=>{"use strict";var mX=Dn(),aEe=xL(),KS=z(),pX=P(),cEe=ee(),{handleHDBError:SX,hdb_errors:TX}=se(),{HDB_ERROR_MSGS:HL,HTTP_STATUS_CODES:gX}=TX;GL.exports=RX;async function RX(e){if(KS.isEmpty(e.schema))throw new Error(HL.SCHEMA_REQUIRED_ERR);if(KS.isEmpty(e.table))throw new Error(HL.TABLE_REQUIRED_ERR);let t=KS.checkSchemaTableExist(e.schema,e.table);if(t)throw SX(new Error,t,gX.NOT_FOUND,pX.LOG_LEVELS.ERROR,t,!0);return await mX.getBackup(read_audit_log_object)}a(RX,"getBackup")});var KL=g((_Ee,YL)=>{var hi=require("validate.js"),kL=Xe(),Sa=P(),{handleHDBError:AX,hdb_errors:OX}=se(),{HDB_ERROR_MSGS:mt,HTTP_STATUS_CODES:bX}=OX,WS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),yX={STRUCTURE_USER:"structure_user"},FL=Object.values(Sa.ROLE_TYPES_ENUM),NX="attribute_permissions",IX="attribute_name",{PERMS_CRUD_ENUM:Ta}=Sa,wX=[NX,...Object.values(Ta)],VL=[Ta.READ,Ta.INSERT,Ta.UPDATE],CX=[IX,...VL];function DX(e){let t=WS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,$L(e,t)}a(DX,"addRoleValidation");function LX(e){let t=WS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,$L(e,t)}a(LX,"alterRoleValidation");function MX(e){let t=WS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,kL.validateObject(e,t)}a(MX,"dropRoleValidation");var PX=["operation","role","id","permission","hdb_user","hdb_auth_header"];function $L(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)PX.includes(n[o])||s.push(n[o]);s.length>0&&At(mt.INVALID_ROLE_JSON_KEYS(s),r);let i=kL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{At(o,r)}),e.permission){let o=UX(e);o&&At(o,r),FL.forEach(c=>{e.permission[c]&&!hi.isBoolean(e.permission[c])&&At(mt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(FL.indexOf(o)<0){if(o===yX.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||At(mt.SCHEMA_NOT_FOUND(d),r)}continue}At(mt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){At(mt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){At(mt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{wX.includes(l)||At(mt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Ta).forEach(l=>{hi.isDefined(_[l])?hi.isBoolean(_[l])||At(mt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):At(mt.TABLE_PERM_MISSING(l),r,o,u)}),hi.isDefined(_.attribute_permissions)){if(!hi.isArray(_.attribute_permissions)){At(mt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{At(mt.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in _.attribute_permissions){let f=_.attribute_permissions[E];if(Object.keys(f).forEach(p=>{!CX.includes(p)&&p!==Ta.DELETE&&At(mt.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!hi.isDefined(f.attribute_name)){At(mt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!l.includes(h)){At(mt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}VL.forEach(p=>{hi.isDefined(f[p])?hi.isBoolean(f[p])||At(mt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):At(mt.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(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let E=`${o}.${u}`;At(mt.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return vX(r)}a($L,"customValidate");YL.exports={addRoleValidation:DX,alterRoleValidation:LX,dropRoleValidation:MX};function UX(e){let{operation:t,permission:r}=e;if(t===Sa.OPERATIONS_ENUM.ADD_ROLE||t===Sa.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return mt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Sa.ROLE_TYPES_ENUM.SUPER_USER:Sa.ROLE_TYPES_ENUM.CLUSTER_USER;return mt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(UX,"validateNoSUPerms");function vX(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:mt.ROLE_PERMS_ERROR,...e};return AX(new Error,n,bX.BAD_REQUEST)}else return null}a(vX,"generateRolePermResponse");function At(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(At,"addPermError")});var ZS=g((fEe,JL)=>{"use strict";var WL=Fr(),QL=qr(),BX=ci(),zS=KL(),JS=Ns(),xX=require("uuid").v4,HX=require("util"),$d=P(),GX=z(),jS=QL.searchByValue,qX=QL.searchByHash,FX=HX.promisify(BX.delete),kX=ns(),VX=oa(),{hdb_errors:$X,handleHDBError:_o}=se(),{HDB_ERROR_MSGS:zL,HTTP_STATUS_CODES:yu}=$X,{UserEventMsg:XS}=Pn();JL.exports={addRole:YX,alterRole:KX,dropRole:WX,listRoles:QX};function QS(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(QS,"scrubRoleDetails");async function YX(e){let t=zS.addRoleValidation(e);if(t)throw t;e=QS(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await jS(r)||[])}catch(i){throw _o(i)}if(n&&n.length>0)throw _o(new Error,zL.ROLE_ALREADY_EXISTS(e.role),yu.CONFLICT,void 0,void 0,!0);e.id||(e.id=xX());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await WL.insert(s),JS.signalUserChange(new XS(process.pid)),e=QS(e),e}a(YX,"addRole");async function KX(e){let t=zS.alterRoleValidation(e);if(t)throw t;e=QS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await WL.update(r)}catch(s){throw _o(s)}if(n&&n?.message==="updated 0 of 1 records")throw _o(new Error,"Invalid role id",yu.BAD_REQUEST,void 0,void 0,!0);return await JS.signalUserChange(new XS(process.pid)),e}a(KX,"alterRole");async function WX(e){let t=zS.dropRoleValidation(e);if(t)throw _o(new Error,t,yu.BAD_REQUEST,void 0,void 0,!0);let r=new VX($d.SYSTEM_SCHEMA_NAME,$d.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await qX(r));if(n.length===0)throw _o(new Error,zL.ROLE_NOT_FOUND,yu.NOT_FOUND,void 0,void 0,!0);let s=new kX($d.SYSTEM_SCHEMA_NAME,$d.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await jS(s)),o=!1;if(GX.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw _o(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,yu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await FX(c),JS.signalUserChange(new XS(process.pid)),`${n[0].role} successfully deleted`}a(WX,"dropRole");async function QX(){return jS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(QX,"listRoles")});var eM=g((hEe,ZL)=>{"use strict";var zX=ee(),mi=require("joi"),JX=Xe(),jL=require("moment"),jX=require("fs-extra"),eT=require("path"),XX=require("lodash"),Nu=P(),{LOG_LEVELS:fo}=P(),ZX="YYYY-MM-DD hh:mm:ss",eZ=eT.resolve(__dirname,"../logs");ZL.exports=function(e){return JX.validateBySchema(e,tZ)};var tZ=mi.object({from:mi.custom(XL),until:mi.custom(XL),level:mi.valid(fo.NOTIFY,fo.FATAL,fo.ERROR,fo.WARN,fo.INFO,fo.DEBUG,fo.TRACE),order:mi.valid("asc","desc"),limit:mi.number().min(1),start:mi.number().min(0),log_name:mi.custom(rZ)});function XL(e,t){if(jL(e,jL.ISO_8601).format(ZX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(XL,"validateDatetime");function rZ(e,t){if(XX.invert(Nu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=zX.get(Nu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?Nu.LOG_NAMES.HDB:e,i=s===Nu.LOG_NAMES.INSTALL?eT.join(eZ,Nu.LOG_NAMES.INSTALL):eT.join(n,s);return jX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(rZ,"validateReadLogPath")});var rT=g((pEe,rM)=>{"use strict";var Yd=P(),nZ=$(),sZ=ee(),iZ=eM(),tT=require("path"),tM=require("fs-extra"),{once:oZ}=require("events"),{handleHDBError:aZ,hdb_errors:cZ}=se(),{PACKAGE_ROOT:uZ}=P(),lZ=tT.join(uZ,"logs"),_Z=1e3,dZ=200;rM.exports=fZ;async function fZ(e){let t=iZ(e);if(t)throw aZ(t,t.message,cZ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=sZ.get(Yd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?Yd.LOG_NAMES.HDB:e.log_name,s=n===Yd.LOG_NAMES.INSTALL?tT.join(lZ,Yd.LOG_NAMES.INSTALL):tT.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?_Z: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&&!l&&(p=Math.max(tM.statSync(s).size-(h+5)*dZ,0));let S=tM.createReadStream(s,{start:p});S.on("error",U=>{nZ.error(U)});let T=0,A=[],b="",I;S.on("data",U=>{let F=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;U=b+U;let M=0,Q;for(;(Q=F.exec(U))&&!S.destroyed;){I&&(I.message=U.slice(M,Q.index),B(I));let[J,j,oe]=Q,ue=oe.split("] ["),le=ue[0],Be=ue[1];ue.splice(0,2),I={timestamp:j,thread:le,level:Be,tags:ue,message:""},M=Q.index+J.length}b=U.slice(M)}),S.on("end",U=>{S.destroyed||I&&(I.message=b.trim(),B(I))}),S.resume();function B(U){let F,M,Q;switch(!0){case(i&&c&&_):F=new Date(U.timestamp),M=new Date(u),Q=new Date(l),U.level===o&&F>=M&&F<=Q&&T<f?T++:U.level===o&&F>=M&&F<=Q&&(pi(U,E,A),T++,T===h&&S.destroy());break;case(i&&c):F=new Date(U.timestamp),M=new Date(u),U.level===o&&F>=M&&T<f?T++:U.level===o&&F>=M&&(pi(U,E,A),T++,T===h&&S.destroy());break;case(i&&_):F=new Date(U.timestamp),Q=new Date(l),U.level===o&&F<=Q&&T<f?T++:U.level===o&&F<=Q&&(pi(U,E,A),T++,T===h&&S.destroy());break;case(c&&_):F=new Date(U.timestamp),M=new Date(u),Q=new Date(l),F>=M&&F<=Q&&T<f?T++:F>=M&&F<=Q&&(pi(U,E,A),T++,T===h&&S.destroy());break;case i:U.level===o&&T<f?T++:U.level===o&&(pi(U,E,A),T++,T===h&&S.destroy());break;case c:F=new Date(U.timestamp),M=new Date(u),F>=M&&T<f?T++:F>=M&&T>=f&&(pi(U,E,A),T++,T===h&&S.destroy());break;case _:F=new Date(U.timestamp),Q=new Date(l),F<=Q&&T<f?T++:F<=Q&&T>=f&&(pi(U,E,A),T++,T===h&&S.destroy());break;default:T<f?T++:(pi(U,E,A),T++,T===h&&S.destroy())}}return a(B,"onLogMessage"),await oZ(S,"close"),A}a(fZ,"readLog");function pi(e,t,r){t==="desc"?EZ(e,r):t==="asc"?hZ(e,r):r.push(e)}a(pi,"pushLineToResult");function EZ(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(EZ,"insertDescending");function hZ(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(hZ,"insertAscending")});var Kd=g((AEe,oM)=>{"use strict";var nT=require("joi"),{string:Iu,boolean:nM,date:mZ}=nT.types(),pZ=Xe(),{validateSchemaExists:TEe,validateTableExists:gEe,validateSchemaName:REe}=Xn(),SZ=P(),TZ=Ve(),sM=ee();sM.initSync();var gZ=Iu.invalid(sM.get(SZ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(TZ.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(),iM={operation:Iu.valid("add_node","update_node","set_node_replication"),node_name:gZ,subscriptions:nT.array().items({table:Iu.optional(),schema:Iu.optional(),database:Iu.optional(),subscribe:nM.required(),publish:nM.required().custom(AZ),start_time:mZ.iso()}).min(1).required()};function RZ(e){return pZ.validateBySchema(e,nT.object(iM))}a(RZ,"addUpdateNodeValidator");function AZ(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(AZ,"checkForFalsy");oM.exports={addUpdateNodeValidator:RZ,validation_schema:iM}});var cM=g((bEe,aM)=>{var OZ=Xe(),bZ={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};aM.exports=function(e){return OZ.validateObject(e,bZ)}});var Wd=g((yEe,uM)=>{"use strict";var yZ=P().OPERATIONS_ENUM,sT=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=yZ.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};uM.exports=sT});var _M=g((IEe,lM)=>{"use strict";var NZ={OPERATION:"operation",REFRESH:"refresh"},iT=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},oT=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};lM.exports={JWTTokens:iT,TOKEN_TYPE_ENUM:NZ,JWTRSAKeys:oT}});var Du=g((CEe,hM)=>{"use strict";var Cu=require("jsonwebtoken"),aT=require("fs-extra"),cT=z(),dn=P(),{handleHDBError:Or,hdb_errors:IZ}=se(),{HTTP_STATUS_CODES:br,AUTHENTICATION_ERROR_MSGS:yr}=IZ,wu=$(),dM=z_(),_T=_n(),wZ=Fr().update,CZ=Wd(),DZ=Ns(),{UserEventMsg:LZ}=Pn(),Si=ee();Si.initSync();var uT=require("path"),{JWTTokens:MZ,JWTRSAKeys:PZ,TOKEN_TYPE_ENUM:Qd}=_M(),UZ=Si.get(dn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Si.get(dn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",vZ=Si.get(dn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Si.get(dn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",zd="RS256",lT;hM.exports={createTokens:BZ,validateOperationToken:HZ,refreshOperationToken:xZ,validateRefreshToken:EM};async function BZ(e){if(cT.isEmpty(e)||typeof e!="object")throw Or(new Error,yr.INVALID_AUTH_OBJECT,br.BAD_REQUEST,void 0,void 0,!0);if(cT.isEmpty(e.username))throw Or(new Error,yr.USERNAME_REQUIRED,br.BAD_REQUEST,void 0,void 0,!0);if(cT.isEmpty(e.password))throw Or(new Error,yr.PASSWORD_REQUIRED,br.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await _T.findAndValidateUser(e.username,e.password),!t)throw Or(new Error,yr.INVALID_CREDENTIALS,br.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw wu.error(E),Or(new Error,yr.INVALID_CREDENTIALS,br.UNAUTHORIZED,void 0,void 0,!0)}let r=await Jd(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await fM(i,r.private_key,r.passphrase),c=await Cu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:vZ,algorithm:zd,subject:Qd.REFRESH}),u=dM.hash(c),_=new CZ(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await wZ(_)}catch(E){wu.error(E),d=E}if(d!==void 0||l.skipped_hashes.length>0)throw Or(new Error,yr.REFRESH_TOKEN_SAVE_FAILED,br.INTERNAL_SERVER_ERROR);return DZ.signalUserChange(new LZ(process.pid)),new MZ(o,c)}a(BZ,"createTokens");async function fM(e,t,r){return await Cu.sign(e,{key:t,passphrase:r},{expiresIn:UZ,algorithm:zd,subject:Qd.OPERATION})}a(fM,"signOperationToken");async function Jd(){if(lT===void 0)try{let e=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await aT.readFile(e)).toString(),s=(await aT.readFile(t)).toString(),i=(await aT.readFile(r)).toString();lT=new PZ(i,s,n)}catch(e){throw wu.error(e),Or(new Error,yr.NO_ENCRYPTION_KEYS,br.INTERNAL_SERVER_ERROR)}return lT}a(Jd,"getJWTRSAKeys");async function xZ(e){if(!e)throw Or(new Error,yr.INVALID_BODY,br.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Or(new Error,yr.REFRESH_TOKEN_REQUIRED,br.BAD_REQUEST,void 0,void 0,!0);await EM(e.refresh_token);let t=await Jd(),r=await Cu.decode(e.refresh_token);return{operation_token:await fM({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(xZ,"refreshOperationToken");async function HZ(e){try{let t=await Jd(),r=await Cu.verify(e,t.public_key,{algorithms:zd,subject:Qd.OPERATION});return await _T.findAndValidateUser(r.username,void 0,!1)}catch(t){throw wu.warn(t),t.name&&t.name==="TokenExpiredError"?Or(new Error,yr.TOKEN_EXPIRED,br.FORBIDDEN):Or(new Error,yr.INVALID_TOKEN,br.UNAUTHORIZED)}}a(HZ,"validateOperationToken");async function EM(e){let t;try{let r=await Jd(),n=await Cu.verify(e,r.public_key,{algorithms:zd,subject:Qd.REFRESH});t=await _T.findAndValidateUser(n.username,void 0,!1)}catch(r){throw wu.warn(r),r.name&&r.name==="TokenExpiredError"?Or(new Error,yr.TOKEN_EXPIRED,br.FORBIDDEN):Or(new Error,yr.INVALID_TOKEN,br.UNAUTHORIZED)}if(!dM.validate(t.refresh_token,e))throw Or(new Error,yr.INVALID_TOKEN,br.UNAUTHORIZED);return t}a(EM,"validateRefreshToken")});var dT=g((MEe,SM)=>{"use strict";var GZ=cM(),ga=require("passport"),qZ=require("passport-local").Strategy,FZ=require("passport-http").BasicStrategy,kZ=require("util"),VZ=_n(),pM=kZ.callbackify(VZ.findAndValidateUser),LEe=vr(),$Z=P(),mM=Du();ga.use(new qZ(function(e,t,r){pM(e,t,r)}));ga.use(new FZ(function(e,t,r){pM(e,t,r)}));ga.serializeUser(function(e,t){t(null,e)});ga.deserializeUser(function(e,t){t(null,e)});function YZ(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":ga.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===$Z.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?mM.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):mM.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:ga.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(YZ,"authorize");function KZ(e,t){let r=GZ(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);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]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(KZ,"checkPermissions");SM.exports={authorize:YZ,checkPermissions:KZ}});var Ti=g((UEe,TM)=>{"use strict";var fT=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},ET=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};TM.exports={Node:fT,NodeSubscription:ET}});var RM=g((BEe,gM)=>{"use strict";var WZ=P().OPERATIONS_ENUM,hT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=WZ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};gM.exports=hT});var Lu=g((HEe,AM)=>{"use strict";var mT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},pT=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};AM.exports={RemotePayloadObject:mT,RemotePayloadSubscription:pT}});var bM=g((qEe,OM)=>{"use strict";var ST=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};OM.exports=ST});var IM=g((YEe,NM)=>{"use strict";var QZ=bM(),kEe=ft(),yM=ze(),zZ=$(),{getSchemaPath:VEe,getTransactionAuditStorePath:$Ee}=je(),{getDatabases:JZ}=(Ae(),ie(ke));NM.exports=jZ;async function jZ(e){let t=new QZ;try{let r=JZ()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await yM.environmentDataSize(schema_path,e.name),o=await yM.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){zZ.warn(`unable to stat table dbi due to ${r}`)}return t}a(jZ,"lmdbGetTableSize")});var CM=g((WEe,wM)=>{"use strict";var TT=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};wM.exports=TT});var Ra=g((ZEe,PM)=>{"use strict";var XZ=require("fs-extra"),ZZ=require("path"),sr=require("systeminformation"),gi=$(),DM=ut(),zEe=Ve(),Xd=P(),e5=IM(),t5=bs(),{getThreadInfo:LM}=Qe(),DT=ee();DT.initSync();var r5=CM(),{openEnvironment:JEe}=ze(),{getSchemaPath:jEe}=je(),{database:XEe,databases:gT}=(Ae(),ie(ke)),jd;PM.exports={getHDBProcessInfo:bT,getNetworkInfo:NT,getDiskInfo:yT,getMemoryInfo:OT,getCPUInfo:AT,getTimeInfo:RT,getSystemInformation:IT,systemInformation:n5,getTableSize:wT,getMetrics:CT};function RT(){return sr.time()}a(RT,"getTimeInfo");async function AT(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await sr.cpu();l.cpu_speed=await sr.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:T,...A}=await sr.currentLoad();return A.cpus=[],T.forEach(b=>{let{raw_load:I,raw_load_idle:B,raw_load_irq:U,raw_load_nice:F,raw_load_system:M,raw_load_user:Q,...J}=b;A.cpus.push(J)}),l.current_load=A,l}catch(e){return gi.error(`error in getCPUInfo: ${e}`),{}}}a(AT,"getCPUInfo");async function OT(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await sr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return gi.error(`error in getMemoryInfo: ${e}`),{}}}a(OT,"getMemoryInfo");async function bT(){let e={core:[],clustering:[]};try{let t=await sr.processes(),r;try{r=Number.parseInt(await XZ.readFile(ZZ.join(DT.get(Xd.CONFIG_PARAMS.ROOTPATH),Xd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Xd.NODE_ERROR_CODES.ENOENT)gi.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return gi.error(`error in getHDBProcessInfo: ${t}`),e}}a(bT,"getHDBProcessInfo");async function yT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await sr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await sr.fsStats();return e.read_write=_,e.size=await sr.fsSize(),e}catch(t){return gi.error(`error in getDiskInfo: ${t}`),e}}a(yT,"getDiskInfo");async function NT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await sr.networkInterfaceDefault(),e.latency=await sr.inetChecksite("google.com"),(await sr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...E}=n;e.interfaces.push(E)}),(await sr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return gi.error(`error in getNetworkInfo: ${t}`),e}}a(NT,"getNetworkInfo");async function IT(){if(jd!==void 0)return jd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await sr.osInfo();e=c;let u=await sr.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,jd=e,jd}catch(t){return gi.error(`error in getSystemInformation: ${t}`),e}}a(IT,"getSystemInformation");async function wT(){let e=[],t=await t5.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await e5(n));return e}a(wT,"getTableSize");async function CT(){let e={};for(let t in gT){let r=e[t]={},n=r.tables={};for(let s in gT[t])try{let i=gT[t][s];r.readers||(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(u=>{let[_,l,d]=u.trim().split(" ");return{pid:_,thread:l,txnid:d}}),i.primaryStore.auditStore&&(r.audit=i.auditStore.getStats()));let o=i.primaryStore.getStats(),c={};for(let u of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[u]=o[u];n[s]=c}catch(i){gi.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(CT,"getMetrics");async function MM(){if(DT.get(Xd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await DM.getNATSReferences(),t=await DM.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(MM,"getNatsStreamInfo");async function n5(e){let t=new r5;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await IT(),t.time=RT(),t.cpu=await AT(),t.memory=await OT(),t.disk=await yT(),t.network=await NT(),t.harperdb_processes=await bT(),t.table_size=await wT(),t.metrics=await CT(),t.threads=await LM(),t.replication=await MM(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await IT();break;case"time":t.time=RT();break;case"cpu":t.cpu=await AT();break;case"memory":t.memory=await OT();break;case"disk":t.disk=await yT();break;case"network":t.network=await NT();break;case"harperdb_processes":t.harperdb_processes=await bT();break;case"table_size":t.table_size=await wT();break;case"database_metrics":case"metrics":t.metrics=await CT();break;case"threads":t.threads=await LM();break;case"replication":t.replication=await MM();break;default:break}return t}a(n5,"systemInformation")});var ef=g((the,UM)=>{"use strict";UM.exports={version:s5,printVersion:i5};var Zd=du();function s5(){if(Zd)return Zd.version}a(s5,"version");function i5(){Zd&&console.log(`HarperDB Version ${Zd.version}`)}a(i5,"printVersion")});var fn=g((ihe,HM)=>{"use strict";var o5=Fr(),LT=z(),a5=require("util"),Eo=P(),vM=ee();vM.initSync();var c5=dT(),BM=qr(),{Node:nhe,NodeSubscription:she}=Ti(),u5=oa(),l5=RM(),{RemotePayloadObject:_5,RemotePayloadSubscription:d5}=Lu(),{handleHDBError:f5,hdb_errors:E5}=se(),{HTTP_STATUS_CODES:h5,HDB_ERROR_MSGS:m5}=E5,p5=ns(),S5=Ra(),T5=ef(),{getDatabases:g5}=(Ae(),ie(ke)),R5=a5.promisify(c5.authorize),A5=BM.searchByHash,O5=BM.searchByValue;HM.exports={authHeaderToUser:b5,isEmpty:y5,getNodeRecord:N5,upsertNodeRecord:I5,buildNodePayloads:w5,checkClusteringEnabled:C5,getAllNodeRecords:D5,getSystemInfo:L5,reverseSubscription:xM};async function b5(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await R5(t,null),e}a(b5,"authHeaderToUser");function y5(e){return e==null}a(y5,"isEmpty");async function N5(e){let t=new u5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return A5(t)}a(N5,"getNodeRecord");async function I5(e){let t=new l5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return o5.upsert(t)}a(I5,"upsertNodeRecord");function xM(e){if(LT.isEmpty(e.subscribe)||LT.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(xM,"reverseSubscription");function w5(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=LT.getTableHashAttribute(u,_),{subscribe:d,publish:E}=xM(c),f=g5()[u]?.[_],h=new d5(u,_,l,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new _5(r,t,s,n)}a(w5,"buildNodePayloads");function C5(){if(!vM.get(Eo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw f5(new Error,m5.CLUSTERING_NOT_ENABLED,h5.BAD_REQUEST,void 0,void 0,!0)}a(C5,"checkClusteringEnabled");async function D5(){let e=new p5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await O5(e))}a(D5,"getAllNodeRecords");async function L5(){let e=await S5.getSystemInformation();return{hdb_version:T5.version(),node_version:e.node_version,platform:e.platform}}a(L5,"getSystemInfo")});var MT=g((ahe,KM)=>{"use strict";var tf=ut(),GM=z(),qM=Ve(),FM=P(),rf=$(),kM=bu(),M5=md(),{RemotePayloadObject:P5}=Lu(),{handleHDBError:VM,hdb_errors:U5}=se(),{HTTP_STATUS_CODES:$M}=U5,{NodeSubscription:YM}=Ti();KM.exports=v5;async function v5(e,t){let r;try{r=await tf.request(`${t}.${qM.REQUEST_SUFFIX}`,new P5(FM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),rf.trace("Response from remote describe all request:",r)}catch(o){rf.error(`addNode received error from describe all request to remote node: ${o}`);let c=tf.requestErrorHandler(o,"add_node",t);throw VM(new Error,c,$M.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===qM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw VM(new Error,o,$M.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===FM.SYSTEM_SCHEMA_NAME){await tf.createLocalTableStream(u,c);let h=new YM(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=GM.doesSchemaExist(u),l=n[u]!==void 0,d=c?GM.doesTableExist(u,c):!0,E=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!E){s.push(o);continue}if(!_&&l&&(rf.trace(`addNode creating schema: ${u}`),await kM.createSchema({operation:"create_schema",schema:u})),!d&&E){rf.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new M5(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await kM.createTable(h)}await tf.createLocalTableStream(u,c);let f=new YM(u,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(v5,"reviewSubscriptions")});var af=g((uhe,zM)=>{"use strict";var{handleHDBError:nf,hdb_errors:B5}=se(),{HTTP_STATUS_CODES:sf}=B5,{addUpdateNodeValidator:x5}=Kd(),of=$(),QM=P(),WM=Ve(),H5=z(),Mu=ut(),Pu=fn(),G5=ee(),q5=MT(),{Node:F5,NodeSubscription:k5}=Ti(),{broadcast:V5}=Qe(),$5="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Y5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",K5=G5.get(QM.CONFIG_PARAMS.CLUSTERING_NODENAME);zM.exports=W5;async function W5(e,t=!1){of.trace("addNode called with:",e),Pu.checkClusteringEnabled();let r=x5(e);if(r)throw nf(r,r.message,sf.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await Pu.getNodeRecord(n);if(!H5.isEmptyOrZeroLength(d))throw nf(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,sf.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await q5(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=$5,o;let c=Pu.buildNodePayloads(s,K5,QM.OPERATIONS_ENUM.ADD_NODE,await Pu.getSystemInfo()),u=[];for(let d=0,E=s.length;d<E;d++){let f=s[d];s[d].start_time===void 0&&delete s[d].start_time,u.push(new k5(f.schema,f.table,f.publish,f.subscribe))}of.trace("addNode sending remote payload:",c);let _;try{_=await Mu.request(`${n}.${WM.REQUEST_SUFFIX}`,c)}catch(d){of.error(`addNode received error from request: ${d}`);for(let f=0,h=s.length;f<h;f++){let p=s[f];p.publish=!1,p.subscribe=!1,await Mu.updateRemoteConsumer(p,n)}let E=Mu.requestErrorHandler(d,"add_node",n);throw nf(new Error,E,sf.INTERNAL_SERVER_ERROR,"error",E)}if(_.status===WM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw nf(new Error,d,sf.INTERNAL_SERVER_ERROR,"error",d)}of.trace(_);for(let d=0,E=s.length;d<E;d++){let f=s[d];await Mu.updateRemoteConsumer(f,n),f.subscribe===!0&&await Mu.updateConsumerIterator(f.schema,f.table,n,"start")}let l=new F5(n,u,_.system_info);return await Pu.upsertNodeRecord(l),V5({type:"nats_update"}),i.length>0?o.message=Y5:o.message=`Successfully added '${n}' to manifest`,o}a(W5,"addNode")});var vT=g((dhe,XM)=>{"use strict";var{handleHDBError:PT,hdb_errors:Q5}=se(),{HTTP_STATUS_CODES:UT}=Q5,{addUpdateNodeValidator:z5}=Kd(),Uu=$(),jM=P(),JM=Ve(),_he=z(),vu=ut(),Bu=fn(),J5=ee(),{cloneDeep:j5}=require("lodash"),X5=MT(),{Node:Z5,NodeSubscription:e8}=Ti(),{broadcast:t8}=Qe(),r8="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",n8="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",s8=J5.get(jM.CONFIG_PARAMS.CLUSTERING_NODENAME);XM.exports=i8;async function i8(e){Uu.trace("updateNode called with:",e),Bu.checkClusteringEnabled();let t=z5(e);if(t)throw PT(t,t.message,UT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Bu.getNodeRecord(r);s.length>0&&(n=j5(s));let{added:i,skipped:o}=await X5(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=r8,c;let u=Bu.buildNodePayloads(i,s8,jM.OPERATIONS_ENUM.UPDATE_NODE,await Bu.getSystemInfo());for(let l=0,d=i.length;l<d;l++){let E=i[l];Uu.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[l].start_time===void 0&&delete i[l].start_time}Uu.trace("updateNode sending remote payload:",u);let _;try{_=await vu.request(`${r}.${JM.REQUEST_SUFFIX}`,u)}catch(l){Uu.error(`updateNode received error from request: ${l}`);let d=vu.requestErrorHandler(l,"update_node",r);throw PT(new Error,d,UT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===JM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw PT(new Error,l,UT.INTERNAL_SERVER_ERROR,"error",l)}Uu.trace(_);for(let l=0,d=i.length;l<d;l++){let E=i[l];await vu.updateRemoteConsumer(E,r),E.subscribe===!0?await vu.updateConsumerIterator(E.schema,E.table,r,"start"):await vu.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new Z5(r,[],_.system_info)]),await o8(n[0],i,_.system_info),o.length>0?c.message=n8:c.message=`Successfully updated '${r}'`,c}a(i8,"updateNode");async function o8(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=n.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new e8(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Bu.upsertNodeRecord(n),t8({type:"nats_update"})}a(o8,"updateNodeTable")});var nP=g((Ehe,rP)=>{"use strict";var tP=require("joi"),{string:ZM}=tP.types(),a8=Xe(),eP=P(),c8=ee(),u8=Ve();rP.exports=l8;function l8(e){let t=ZM.invalid(c8.get(eP.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(u8.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=tP.object({operation:ZM.valid(eP.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return a8.validateBySchema(e,r)}a(l8,"removeNodeValidator")});var uf=g((mhe,cP)=>{"use strict";var{handleHDBError:sP,hdb_errors:_8}=se(),{HTTP_STATUS_CODES:iP}=_8,d8=nP(),xu=$(),oP=fn(),f8=z(),cf=P(),aP=Ve(),BT=ut(),E8=ee(),{RemotePayloadObject:h8}=Lu(),{NodeSubscription:m8}=Ti(),p8=aa(),S8=ci(),{broadcast:T8}=Qe(),g8=E8.get(cf.CONFIG_PARAMS.CLUSTERING_NODENAME);cP.exports=R8;async function R8(e){xu.trace("removeNode called with:",e),oP.checkClusteringEnabled();let t=d8(e);if(t)throw sP(t,t.message,iP.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await oP.getNodeRecord(r);if(f8.isEmptyOrZeroLength(n))throw sP(new Error,`Node '${r}' was not found.`,iP.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new h8(cf.OPERATIONS_ENUM.REMOVE_NODE,g8,[]),i,o=!1;for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];l.subscribe===!0&&await BT.updateConsumerIterator(l.schema,l.table,r,"stop");try{await BT.updateRemoteConsumer(new m8(l.schema,l.table,!1,!1),r)}catch(d){xu.error(d)}}try{i=await BT.request(`${r}.${aP.REQUEST_SUFFIX}`,s),xu.trace("Remove node reply from remote node:",r,i)}catch(u){xu.error("removeNode received error from request:",u),o=!0}let c=new p8(cf.SYSTEM_SCHEMA_NAME,cf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await S8.deleteRecord(c),T8({type:"nats_update"}),i?.status===aP.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(xu.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(R8,"removeNode")});var _P=g((She,lP)=>{"use strict";var uP=require("joi"),{string:A8,array:O8}=uP.types(),b8=Xe(),y8=Kd();lP.exports=N8;function N8(e){let t=uP.object({operation:A8.valid("configure_cluster").required(),connections:O8.items(y8.validation_schema).required()});return b8.validateBySchema(e,t)}a(N8,"configureClusterValidator")});var xT=g((ghe,mP)=>{"use strict";var I8=P(),lf=$(),w8=z(),C8=uf(),D8=af(),dP=fn(),L8=_P(),{handleHDBError:fP,hdb_errors:M8}=se(),{HTTP_STATUS_CODES:EP}=M8,P8="Configure cluster complete.",U8="Failed to configure the cluster. Check the logs for more details.",v8="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";mP.exports=B8;async function B8(e){lf.trace("configure cluster called with:",e),dP.checkClusteringEnabled();let t=L8(e);if(t)throw fP(t,t.message,EP.BAD_REQUEST,void 0,void 0,!0);let r=await dP.getAllNodeRecords(),n=[];for(let l=0,d=r.length;l<d;l++){let E=await hP(C8,{operation:I8.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[l].name},r[l].name);n.push(E)}lf.trace("All results from configure_cluster remove node:",n);let s=[],i=e.connections.length;for(let l=0;l<i;l++){let d=e.connections[l],E=await hP(D8,d,d.node_name);s.push(E)}lf.trace("All results from configure_cluster add node:",s);let o=[],c=[],u=!1,_=n.concat(s);for(let l=0,d=_.length;l<d;l++){let E=_[l];E.status==="rejected"&&(lf.error(E),o.includes(E.node_name)||o.push(E.node_name)),(E?.result?.message?.includes?.("Successfully")||E?.result?.includes?.("Successfully"))&&(u=!0),!(typeof E.result=="string"&&E.result.includes("Successfully removed")||E.status==="rejected")&&c.push({node_name:E?.node_name,subscriptions:E?.result})}if(w8.isEmptyOrZeroLength(o))return{message:P8,connections:c};if(u)return{message:v8,failed_nodes:o,connections:c};throw fP(new Error,U8,EP.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(B8,"configureCluster");async function hP(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(hP,"functionWrapper")});var gP=g((Ahe,TP)=>{"use strict";var Hu=require("joi"),x8=Xe(),{validateSchemaExists:pP,validateTableExists:H8,validateSchemaName:SP}=Xn(),G8=Hu.object({operation:Hu.string().valid("purge_stream"),schema:Hu.string().custom(pP).custom(SP).optional(),database:Hu.string().custom(pP).custom(SP).optional(),table:Hu.string().custom(H8).required()});function q8(e){return x8.validateBySchema(e,G8)}a(q8,"purgeStreamValidator");TP.exports=q8});var HT=g((bhe,RP)=>{"use strict";var{handleHDBError:F8,hdb_errors:k8}=se(),{HTTP_STATUS_CODES:V8}=k8,$8=gP(),Y8=ut(),K8=fn();RP.exports=W8;async function W8(e){e.schema=e.schema??e.database;let t=$8(e);if(t)throw F8(t,t.message,V8.BAD_REQUEST,void 0,void 0,!0);K8.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Y8.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(W8,"purgeStream")});var FT=g((Nhe,IP)=>{"use strict";var qT=fn(),Q8=ut(),bP=ee(),_f=P(),ho=Ve(),z8=z(),GT=$(),{RemotePayloadObject:J8}=Lu(),{ErrorCode:AP}=require("nats"),OP=bP.get(_f.CONFIG_PARAMS.CLUSTERING_ENABLED),yP=bP.get(_f.CONFIG_PARAMS.CLUSTERING_NODENAME);IP.exports={clusterStatus:j8,buildNodeStatus:NP};async function j8(){let e={node_name:yP,is_enabled:OP,connections:[]};if(!OP)return e;let t=await qT.getAllNodeRecords();if(z8.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(NP(t[n],e.connections));return await Promise.allSettled(r),e}a(j8,"clusterStatus");async function NP(e,t){let r=e.name,n=new J8(_f.OPERATIONS_ENUM.CLUSTER_STATUS,yP,void 0,await qT.getSystemInfo()),s,i,o=ho.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await Q8.request(ho.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===ho.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ho.CLUSTER_STATUS_STATUSES.CLOSED,GT.error(`Error getting node status from ${r} `,s))}catch(u){GT.warn(`Error getting node status from ${r}`,u),u.code===AP.NoResponders?o=ho.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===AP.Timeout?o=ho.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ho.CLUSTER_STATUS_STATUSES.CLOSED}let c=new X8(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let u={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==_f.PRE_4_0_0_VERSION&&await qT.upsertNodeRecord(u)}catch(u){GT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(NP,"buildNodeStatus");function X8(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(X8,"NodeStatusObject")});var VT=g((whe,wP)=>{"use strict";var{handleHDBError:Z8,hdb_errors:e6}=se(),{HTTP_STATUS_CODES:t6}=e6,r6=ut(),n6=fn(),kT=z(),df=require("joi"),s6=Xe(),i6=2e3,o6=df.object({timeout:df.number().min(1),connected_nodes:df.boolean(),routes:df.boolean()});wP.exports=a6;async function a6(e){n6.checkClusteringEnabled();let t=s6.validateBySchema(e,o6);if(t)throw Z8(t,t.message,t6.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||kT.autoCastBoolean(n),o=s===void 0||kT.autoCastBoolean(s),c={nodes:[]},u=await r6.getServerList(r??i6),_={};if(i)for(let l=0,d=u.length;l<d;l++){let E=u[l].statsz;E&&(_[u[l].server.name]=E.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let E=u[l].server,f=u[l].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[E.name]&&_[E.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(p=>({host:p.split(":")[0],port:kT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(a6,"clusterNetwork")});var MP=g((Dhe,LP)=>{"use strict";var $T=require("joi"),CP=Xe(),{route_constraints:DP}=op();LP.exports={setRoutesValidator:c6,deleteRoutesValidator:u6};function c6(e){let t=$T.object({server:$T.valid("hub","leaf").required(),routes:DP.required()});return CP.validateBySchema(e,t)}a(c6,"setRoutesValidator");function u6(e){let t=$T.object({routes:DP.required()});return CP.validateBySchema(e,t)}a(u6,"deleteRoutesValidator")});var KT=g((Mhe,BP)=>{"use strict";var mo=hr(),YT=z(),ff=P(),PP=MP(),{handleHDBError:UP,hdb_errors:l6}=se(),{HTTP_STATUS_CODES:vP}=l6,_6="cluster routes successfully set",d6="cluster routes successfully deleted";BP.exports={setRoutes:f6,getRoutes:E6,deleteRoutes:h6};function f6(e){let t=PP.setRoutesValidator(e);if(t)throw UP(t,t.message,vP.BAD_REQUEST,void 0,void 0,!0);let r=mo.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=YT.autoCast(_.port);let l=n.some(E=>E.host===_.host&&E.port===_.port),d=s.some(E=>E.host===_.host&&E.port===_.port);l||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?mo.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):mo.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:_6,set:o,skipped:i}}a(f6,"setRoutes");function E6(){let e=mo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(E6,"getRoutes");function h6(e){let t=PP.deleteRoutesValidator(e);if(t)throw UP(t,t.message,vP.BAD_REQUEST,void 0,void 0,!0);let r=mo.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],E=!1;for(let f=0,h=n.length;f<h;f++){let p=n[f];if(d.host===p.host&&d.port===p.port){n.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,p=s.length;h<p;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(n=YT.isEmptyOrZeroLength(n)?null:n,mo.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=YT.isEmptyOrZeroLength(s)?null:s,mo.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:d6,deleted:i,skipped:o}}a(h6,"deleteRoutes")});var HP=g((Uhe,xP)=>{"use strict";var Gu=require("alasql"),po=require("recursive-iterator"),Hn=$(),m6=z(),qu=P(),WT=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,S6(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(s=>qu.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!qu.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][qu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=p6(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!qu.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Gu.yy.Column({columnid:_});s.tableid&&(l.tableid=s.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function p6(e){return e.filter(t=>t[qu.PERMS_CRUD_ENUM.READ])}a(p6,"filterReadRestrictedAttrs");function S6(e,t,r,n,s){T6(e,t,r,n,s)}a(S6,"interpretAST");function Fu(e,t,r,n,s){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),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(Fu,"addSchemaTableToMap");function T6(e,t,r,n,s){if(!e){Hn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Gu.yy.Insert?O6(e,t,r):e instanceof Gu.yy.Select?g6(e,t,r,n,s):e instanceof Gu.yy.Update?R6(e,t,r):e instanceof Gu.yy.Delete?A6(e,t,r):Hn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(T6,"getRecordAttributesAST");function g6(e,t,r,n,s){if(!e){Hn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(m6.isEmptyOrZeroLength(i)){Hn.error("No schema specified");return}e.from.forEach(c=>{Fu(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Fu(c.table,t,r,n,s)});let o=new po(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Hn.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new po(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Hn.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new po(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=s.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Hn.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new po(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Hn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(g6,"getSelectAttributes");function R6(e,t,r){if(!e){Hn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new po(e.columns),s=e.table.databaseid;Fu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.table.tableid,s,i.columnid,t,r)}a(R6,"getUpdateAttributes");function A6(e,t,r){if(!e){Hn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new po(e.where),s=e.table.databaseid;Fu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.table.tableid,s,i.columnid,t,r)}a(A6,"getDeleteAttributes");function O6(e,t,r){if(!e){Hn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new po(e.columns),s=e.into.databaseid;Fu(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.into.tableid,s,i.columnid,t,r)}a(O6,"getInsertAttributes");function QT(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(QT,"pushAttribute");xP.exports=WT});var jT=g((Bhe,kP)=>{var Ef=Xi(),GP=require("chalk"),zr=$(),qP=require("prompt"),{promisify:b6}=require("util"),zT=P(),y6=require("fs-extra"),N6=require("path"),I6=z(),w6=ef(),FP=ee();FP.initSync();var C6=require("moment"),D6=b6(qP.get),L6=N6.join(FP.getHdbBasePath(),zT.LICENSE_KEY_DIR_NAME,zT.LICENSE_FILE_NAME,zT.LICENSE_FILE_NAME);kP.exports={getFingerprint:P6,setLicense:M6,parseLicense:JT,register:U6,getRegistrationInfo:B6};async function M6(e){if(e&&e.key&&e.company){try{zr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await JT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw zr.error(r),zr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(M6,"setLicense");async function P6(){let e={};try{e=await Ef.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw zr.error(r),zr.error(t),new Error(r)}return e}a(P6,"getFingerprint");async function JT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");zr.info("Validating license input...");let r=Ef.validateLicense(e,t);if(zr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(zr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(zr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{zr.info("writing license to disk"),await y6.writeFile(L6,JSON.stringify({license_key:e,company:t}))}catch(n){throw zr.error("Failed to write License"),n}return"Registration successful."}a(JT,"parseLicense");async function U6(){let e=await v6();return JT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(U6,"register");async function v6(){let e=await Ef.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:GP.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:GP.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{qP.start()}catch(n){zr.error(n)}let r;try{r=await D6(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(v6,"promptForRegistration");async function B6(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Ef.getLicense()}catch(r){throw zr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(I6.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=w6.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=C6.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(B6,"getRegistrationInfo")});var $P=g((Hhe,VP)=>{"use strict";var x6=Ve(),XT=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+x6.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:E,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};VP.exports=XT});var WP=g((qhe,KP)=>{"use strict";var YP=Ve(),ZT=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+YP.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+YP.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};KP.exports=ZT});var zP=g((khe,QP)=>{"use strict";var eg=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};QP.exports=eg});var jP=g(($he,JP)=>{"use strict";var H6=Ve(),tg=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+H6.SERVER_SUFFIX.ADMIN,this.password=r}};JP.exports=tg});var sg=g((Khe,eU)=>{"use strict";var Aa=require("path"),pf=require("fs-extra"),G6=$P(),q6=WP(),F6=zP(),k6=jP(),rg=_n(),ba=z(),Nr=hr(),mf=P(),ku=Ve(),{CONFIG_PARAMS:pt}=mf,ya=$(),Vu=ee(),XP=Os(),ng=ut(),Oa="clustering",V6=1e4,ZP=50;eU.exports={generateNatsConfig:Y6,removeNatsConfig:K6,getHubConfigPath:$6};function $6(){let e=Vu.get(pt.ROOTPATH);return Aa.join(e,Oa,ku.NATS_CONFIG_FILES.HUB_SERVER)}a($6,"getHubConfigPath");async function Y6(e=!1,t=void 0){Vu.initSync();let r=Vu.get(pt.ROOTPATH),n=Aa.join(r,Oa,ku.PID_FILES.HUB),s=Aa.join(r,Oa,ku.PID_FILES.LEAF),i=Nr.getConfigFromFile(pt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Aa.join(r,Oa,ku.NATS_CONFIG_FILES.HUB_SERVER),c=Aa.join(r,Oa,ku.NATS_CONFIG_FILES.LEAF_SERVER),u=Nr.getConfigFromFile(pt.CLUSTERING_TLS_CERTIFICATE),_=Nr.getConfigFromFile(pt.CLUSTERING_TLS_PRIVATEKEY),l=Nr.getConfigFromFile(pt.CLUSTERING_TLS_CERT_AUTH),d=Nr.getConfigFromFile(pt.CLUSTERING_TLS_INSECURE),E=Nr.getConfigFromFile(pt.CLUSTERING_TLS_VERIFY),f=Nr.getConfigFromFile(pt.CLUSTERING_NODENAME),h=Nr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await ng.checkNATSServerInstalled()||Sf("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await rg.listUsers(),S=Nr.getConfigFromFile(pt.CLUSTERING_USER),T=await rg.getClusterUser();(ba.isEmpty(T)||T.active!==!0)&&Sf(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await hf(pt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await hf(pt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await hf(pt.CLUSTERING_HUBSERVER_NETWORK_PORT),await hf(pt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let A=[],b=[];for(let[J,j]of p.entries())j.role?.role===mf.ROLE_TYPES_ENUM.CLUSTER_USER&&j.active&&(A.push(new k6(j.username,XP.decrypt(j.hash))),b.push(new F6(j.username,XP.decrypt(j.hash))));let I=[],{hub_routes:B}=Nr.getClusteringRoutes();if(!ba.isEmptyOrZeroLength(B))for(let J of B)I.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${J.host}:${J.port}`);let U=new G6(Nr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_NETWORK_PORT),f,n,u,_,l,d,E,h,Nr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Nr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),I,A,b);l==null&&(delete U.tls.ca_file,delete U.leafnodes.tls.ca_file),t=ba.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===mf.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await pf.writeJson(o,U),ya.trace(`Hub server config written to ${o}`));let F=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,M=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,Q=new q6(Nr.getConfigFromFile(pt.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,s,i,[F],[M],A,b,u,_,l,d);l==null&&delete Q.tls.ca_file,(t===void 0||t===mf.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await pf.writeJson(c,Q),ya.trace(`Leaf server config written to ${c}`))}a(Y6,"generateNatsConfig");async function hf(e){let t=Vu.get(e);return ba.isEmpty(t)&&Sf(`port undefined for '${e}'`),await ba.isPortTaken(t)&&Sf(`'${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(hf,"isPortAvailable");function Sf(e){let t=`Error generating clustering config: ${e}`;ya.error(t),console.error(t),process.exit(1)}a(Sf,"generateNatsConfigError");async function K6(e){let{port:t,config_file:r}=ng.getServerConfig(e),{username:n,decrypt_hash:s}=await rg.getClusterUser(),i=0,o=2e3;for(;i<ZP;){try{let l=await ng.createConnection(t,n,s,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){ya.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=ZP)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let _=o*(i*2);_>3e4&&ya.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await ba.async_set_timeout(_)}let c="0".repeat(V6),u=Aa.join(Vu.get(pt.ROOTPATH),Oa,r);await pf.writeFile(u,c),await pf.remove(u),ya.notify(e,"started.")}a(K6,"removeNatsConfig")});var oU=g((Qhe,iU)=>{"use strict";var Jr=ee(),W6=Xi(),pe=P(),$u=Ve(),Ls=require("path"),{PACKAGE_ROOT:gf}=P(),tU=ee(),Tf=z(),Na="/dev/null",Q6=Ls.join(gf,"launchServiceScripts"),rU=Ls.join(gf,"utility/scripts"),z6=Ls.join(rU,pe.HDB_RESTART_SCRIPT),nU=Ls.resolve(gf,"dependencies",`${process.platform}-${process.arch}`,$u.NATS_BINARY_NAME);function sU(){let t=W6.licenseSearch().ram_allocation||pe.RAM_ALLOCATION_ENUM.DEFAULT,r=pe.MEM_SETTING_KEY+t,n={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Tf.noBootFile()&&(n[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Tf.getEnvCliRootPath()),{name:pe.PROCESS_DESCRIPTORS.HDB,script:pe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:gf}}a(sU,"generateMainServerConfig");var J6=9930;function j6(){Jr.initSync(!0);let e=Jr.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ls.join(e,"clustering",$u.NATS_CONFIG_FILES.HUB_SERVER),r=Ls.join(Jr.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=tU.get(pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=$u.LOG_LEVEL_FLAGS[Jr.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==J6?"-"+n:""),script:nU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Jr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Na,i.error_file=Na),i}a(j6,"generateNatsHubServerConfig");var X6=9940;function Z6(){Jr.initSync(!0);let e=Jr.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ls.join(e,"clustering",$u.NATS_CONFIG_FILES.LEAF_SERVER),r=Ls.join(Jr.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=tU.get(pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=$u.LOG_LEVEL_FLAGS[Jr.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==X6?"-"+n:""),script:nU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Jr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Na,i.error_file=Na),i}a(Z6,"generateNatsLeafServerConfig");function e9(){Jr.initSync();let e=Ls.join(Jr.get(pe.CONFIG_PARAMS.LOGGING_ROOT),pe.LOG_NAMES.HDB),t={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:pe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Q6,autorestart:!1};return Jr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Na,t.error_file=Na),t}a(e9,"generateClusteringUpgradeV4ServiceConfig");function t9(){let e={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.RESTART_HDB};return Tf.noBootFile()&&(e[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Tf.getEnvCliRootPath()),{...{name:pe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:rU},script:z6}}a(t9,"generateRestart");function r9(){return{apps:[sU()]}}a(r9,"generateAllServiceConfigs");iU.exports={generateAllServiceConfigs:r9,generateMainServerConfig:sU,generateRestart:t9,generateNatsHubServerConfig:j6,generateNatsLeafServerConfig:Z6,generateClusteringUpgradeV4ServiceConfig:e9}});var RU=g((jhe,gU)=>{"use strict";var ve=P(),n9=z(),Ps=sg(),Rf=ut(),Ms=Ve(),Ri=oU(),Af=ee(),Ai=$(),s9=fn(),{startWorker:aU,onMessageFromWorkers:i9}=Qe(),o9=Ra(),Jhe=require("util"),a9=require("child_process"),c9=require("fs"),{execFile:u9}=a9,we;gU.exports={enterPM2Mode:l9,start:Oi,stop:ig,reload:uU,restart:lU,list:og,describe:fU,connect:Us,kill:h9,startAllServices:m9,startService:ag,getUniqueServicesList:EU,restartAllServices:p9,isServiceRegistered:hU,reloadStopStart:mU,restartHdb:dU,deleteProcess:f9,startClusteringProcesses:SU,startClusteringThreads:TU,isHdbRestartRunning:E9,isClusteringRunning:T9,stopClustering:S9,reloadClustering:g9,expectedRestartOfChildren:_U};var Yu=!1;i9(e=>{e.type==="restart"&&Af.initSync(!0)});function l9(){Yu=!0}a(l9,"enterPM2Mode");function Us(){return we||(we=require("pm2")),new Promise((e,t)=>{we.connect((r,n)=>{Ai.setupConsoleLogging(),r&&t(r),e(n)})})}a(Us,"connect");var ir,_9=10,cU;function Oi(e,t=!1){if(Yu)return d9(e);let r=u9(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=ir.indexOf(r);o>-1&&ir.splice(o,1),!cU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<_9&&(c9.existsSync(Ps.getHubConfigPath())?Oi(e):(await Ps.generateNatsConfig(!0),Oi(e),await new Promise(c=>setTimeout(c,3e3)),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Af.get(ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Ms.LOG_LEVEL_HIERARCHY[o]>=Ms.LOG_LEVEL_HIERARCHY[l||"info"]){let f=l===Ms.LOG_LEVELS.ERR||l===Ms.LOG_LEVELS.WRN?Ai.OUTPUTS.STDERR:Ai.OUTPUTS.STDOUT;Ai.logCustomLevel(l||"info",f,n,i.slice(_,u.index).trim())}let[d,E]=u;_=u.index+d.length,l=Ms.LOG_LEVELS[E]}if(Ms.LOG_LEVEL_HIERARCHY[o]>=Ms.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Ms.LOG_LEVELS.ERR||l===Ms.LOG_LEVELS.WRN?Ai.OUTPUTS.STDERR:Ai.OUTPUTS.STDOUT;Ai.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!ir&&(ir=[],!t)){let i=a(()=>{cU=!0,ir&&(ir.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}ir.push(r)}a(Oi,"start");function d9(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.start(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(d9,"startWithPM2");function ig(e){if(!Yu){for(let t of ir||[])t.name===e&&(ir.splice(ir.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.stop(e,async(n,s)=>{n&&(we.disconnect(),r(n)),we.delete(e,(i,o)=>{i&&(we.disconnect(),r(n)),we.disconnect(),t(o)})})})}a(ig,"stop");function uU(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.reload(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(uU,"reload");function lU(e){if(!Yu){_U();for(let t of ir||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.restart(e,(n,s)=>{we.disconnect(),t(s)})})}a(lU,"restart");function _U(){for(let e of ir||[])e.config&&(e.config.restarts=0)}a(_U,"expectedRestartOfChildren");function f9(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.delete(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(f9,"deleteProcess");async function dU(){await Oi(Ri.generateRestart())}a(dU,"restartHdb");async function E9(){let e=await og();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(E9,"isHdbRestartRunning");function og(){return new Promise(async(e,t)=>{try{await Us()}catch(r){t(r)}we.list((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(og,"list");function fU(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.describe(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(fU,"describe");function h9(){if(!Yu){for(let e of ir||[])e.kill();ir=[];return}return new Promise(async(e,t)=>{try{await Us()}catch(r){t(r)}we.killDaemon((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(h9,"kill");async function m9(){try{await SU(),await TU(),await Oi(Ri.generateAllServiceConfigs())}catch(e){throw we?.disconnect(),e}}a(m9,"startAllServices");async function ag(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ri.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ri.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ri.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ri.generateNatsHubServerConfig(),await Oi(r,t),await Ps.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ri.generateNatsLeafServerConfig(),await Oi(r,t),await Ps.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ri.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Oi(r)}catch(r){throw we?.disconnect(),r}}a(ag,"startService");async function EU(){try{let e=await og(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw we?.disconnect(),e}}a(EU,"getUniqueServicesList");async function p9(e=[]){try{let t=!1,r=await EU();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===ve.PROCESS_DESCRIPTORS.HDB?t=!0:await lU(o))}t&&await mU(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw we?.disconnect(),t}}a(p9,"restartAllServices");async function hU(e){if(ir?.find(r=>r.name===e))return!0;let t=await o9.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(hU,"isServiceRegistered");async function mU(e){let t=Af.get(ve.CONFIG_PARAMS.THREADS_COUNT)??Af.get(ve.CONFIG_PARAMS.THREADS),r=await fU(e),n=n9.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await ig(e),await ag(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await dU():await uU(e)}a(mU,"reloadStopStart");var pU;async function SU(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await ag(r,e)}}a(SU,"startClusteringProcesses");async function TU(){pU=aU(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Rf.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Rf.updateLocalStreams();let e=await s9.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){Ai.info("Starting clustering upgrade 4.0.0 process"),aU(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(TU,"startClusteringThreads");async function S9(){for(let e in ve.CLUSTERING_PROCESSES)if(e!==ve.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ve.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await pU.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await ig(t)}}a(S9,"stopClustering");async function T9(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await hU(t)===!1)return!1}return!0}a(T9,"isClusteringRunning");async function g9(){await Ps.generateNatsConfig(!0),await Rf.reloadNATSHub(),await Rf.reloadNATSLeaf(),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(g9,"reloadClustering")});var wU={};Fe(wU,{compactOnStart:()=>R9,copyDb:()=>IU});async function R9(){Wu.notify("Running compact on start"),console.log("Running compact on start");let e=(0,cg.get)(bi.CONFIG_PARAMS.ROOTPATH),t=new Map,r=pr();try{for(let n in r){if(n==="system")continue;let s;for(let u in r[n]){s=r[n][u].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,Of.join)(e,"backup",n+".mdb"),o=(0,Of.join)(e,bi.DATABASES_DIR_NAME,n+"-copy.mdb"),c=await AU(n);console.log("Database",n,"before compact has a total record count of",c),t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await IU(n,o),console.log("Backing up",n,"to",i),await(0,So.move)(s,i,{overwrite:!0})}Ku();for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,So.move)(i,s,{overwrite:!0}),await(0,So.remove)((0,Of.join)(e,bi.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));Ku()}catch(n){Wu.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,ug.updateConfigValue)(bi.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,So.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Ku(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await AU(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let u=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
13
13
|
Total record count before compaction: ${i}, total after: ${c}.
|
|
14
|
-
Database backup has not been removed and can be found here: ${s}`;Wu.error(u),console.error(u)}(0,cg.get)(bi.CONFIG_PARAMS.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,So.remove)(s))}(0,ug.updateConfigValue)(bi.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1)}async function
|
|
15
|
-
${r.stack}`;throw hg.error(n),vU(new Error)}}}a(v9,"getRolePermissions");function B9(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Ir.SYSTEM_SCHEMA_NAME]=n[Ir.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=x9(t[i]);return}r[i]=GU(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],u=t[i][o],_=H9(c,u);r[i].describe||FU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=mg()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=mg()})}),r}a(B9,"translateRolePermissions");function x9(e){let t=GU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=mg(!0,!0,!0,!0,!0)}),t}a(x9,"createStructureUserPermissions");function H9(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,E=l;return Ir.TIME_STAMP_NAMES.includes(d)&&(E=xU(d,l[ju])),_[d]=E,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=BU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=VU(l),s.attribute_permissions.push(l),c||G9(l,u)}else if(_!==o){let l;Ir.TIME_STAMP_NAMES.includes(_)?l=xU(_):l=BU(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=HU(s),s}else return e.describe=HU(e),e}a(H9,"getTableAttrPerms");function HU(e){return FU.filter(t=>e[t]).length>0}a(HU,"getSchemaTableDescribePerm");function VU(e){return kU.filter(t=>e[t]).length>0}a(VU,"getAttributeDescribePerm");function G9(e,t){kU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(G9,"checkForHashPerms")});var KU={};Fe(KU,{Resources:()=>Df,keyArrayToString:()=>wa,resetResources:()=>q9,resources:()=>yi});function q9(){return yi=new Df}function wa(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Df,yi,Zu=Re(()=>{so();Df=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),u=this.get(c);if(!u&&c.indexOf(".")>-1){let _=c.split(".");u=this.get(_[0])}if(u){if(u.relativeURL=t.slice(n),!u.hasSubPaths)return u;s=u}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),!s&&o.indexOf(".")>-1&&(s=this.get(o.split(".")[0])),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return rt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(q9,"resetResources");a(wa,"keyArrayToString")});var WU={};Fe(WU,{Headers:()=>Ni,appendHeader:()=>Tg});function Tg(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var Ni,el=Re(()=>{Ni=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(Tg,"appendHeader")});var tl={};Fe(tl,{authentication:()=>tv,bypassAuth:()=>W9,login:()=>z9,logout:()=>J9,start:()=>Q9});function W9(){ev=!0}async function tv(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let f=e.isOperationsServer?$9?V9:[]:k9?F9:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h=new Ni([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Lf&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Lf&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Lf){i||(i=r.host);let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let p of h)if(p.startsWith(f)){let S=p.indexOf(";");u=p.slice(f.length,S===-1?p.length:S),_=await zU.get(u);break}e.session=_||(_={})}let l=a((f,h,p)=>{let S=new Ca.AuthAuditLog(f,h,Ht.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===Ht.AUTH_AUDIT_STATUS.SUCCESS?QU.notify(S):QU.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let f=e.mtlsConfig.user;f!==null?((f===void 0||f==="Common Name"||f==="CN")&&(f=e.peerCertificate.subject.CN),e.user=await at.getUser(f,null,null),l(f,Ht.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Ca.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=go.get(n),!d){let f=n.indexOf(" "),h=n.slice(0,f),p=n.slice(f+1),S,T;try{switch(h){case"Basic":let A=atob(p),b=A.indexOf(":");S=A.slice(0,b),T=A.slice(b+1),d=S||T?await at.getUser(S,T,e):null;break;case"Bearer":try{d=await(0,Mf.validateOperationToken)(p)}catch(I){if(I.message==="invalid token")try{return await(0,Mf.validateRefreshToken)(p),c({status:-1})}catch{throw I}}break}}catch(A){return K9&&(go.get(p)||(go.set(p,p),l(S,Ht.AUTH_AUDIT_STATUS.FAILURE,h))),c({status:401,body:Ro({error:A.message},e)})}go.set(n,d),Y9&&l(d.username,Ht.AUTH_AUDIT_STATUS.SUCCESS,h)}e.user=d}else _?.user?e.user=await at.getUser(_.user,null,e):(ev&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,XU.getSuperUser)());Lf&&(e.session.update=function(f){if(!u){u=(0,jU.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):E?.headers?.set&&E.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):E?.headers?.set&&(i&&E.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),E.headers.set("X-Hdb-Session","Secure"))),f.id=u,zU.put(f)},e.login=async function(f,h){e.user=await at.getUser(f,h,e),e.session.update({user:e.user.username})});let E=await t(e);return E&&(E.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&yi.loginPath?(E.status=302,E.headers.set("Location",yi.loginPath(e))):E.headers.set("WWW-Authenticate","Basic")),c(E))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new Ni);for(let d=0;d<_;){let E=o[d++];l.set(E,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function Q9({server:e,port:t}){e.http(tv,{port:t||"all"}),JU||(JU=!0,setInterval(()=>{go=new Map},hn.get(Ht.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),ZU.user.addListener(()=>{go=new Map}))}async function z9(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 J9(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var XU,Mf,jU,hn,Ht,Ca,ZU,QU,F9,k9,V9,$9,zU,Lf,ev,Y9,K9,go,JU,Pf=Re(()=>{XU=H(_n());lr();Zu();Mf=H(Du());Ae();jU=require("uuid"),hn=H(ee()),Ht=H(P()),Ca=H($()),ZU=H(Jc());el();Da();QU=(0,Ca.loggerWithTag)("auth-event");hn.initSync();F9=hn.get(Ht.CONFIG_PARAMS.HTTP_CORSACCESSLIST),k9=hn.get(Ht.CONFIG_PARAMS.HTTP_CORS),V9=hn.get(Ht.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),$9=hn.get(Ht.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),zU=Et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Lf=hn.get(Ht.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,ev=hn.get(Ht.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Y9=hn.get(Ht.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,K9=hn.get(Ht.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,go=new Map;at.onInvalidatedUser(()=>{go=new Map});a(W9,"bypassAuth");a(tv,"authentication");a(Q9,"start");a(z9,"login");a(J9,"logout")});var cv=g((pme,av)=>{"use strict";var Ce=require("joi"),rv=require("fs-extra"),nv=require("path"),Bs=je(),sv=ee(),iv=P(),ov=$(),{hdb_errors:X9}=se(),{HDB_ERROR_MSGS:ir}=X9,vs=/^[a-zA-Z0-9-_]+$/;av.exports={getDropCustomFunctionValidator:Z9,setCustomFunctionValidator:e7,addComponentValidator:s7,dropCustomFunctionProjectValidator:i7,packageComponentValidator:o7,deployComponentValidator:a7,setComponentFileValidator:t7,getComponentFileValidator:n7,dropComponentFileValidator:r7};function Uf(e,t,r){try{let n=sv.get(iv.CONFIG_PARAMS.COMPONENTSROOT),s=nv.join(n,t);return rv.existsSync(s)?e?t:r.message(ir.PROJECT_EXISTS):e?r.message(ir.NO_PROJECT):t}catch(n){return ov.error(n),r.message(ir.VALIDATION_ERR)}}a(Uf,"checkProjectExists");function rl(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(rl,"checkFilePath");function j9(e,t,r,n){try{let s=sv.get(iv.CONFIG_PARAMS.COMPONENTSROOT),i=nv.join(s,e,t,r+".js");return rv.existsSync(i)?r:n.message(ir.NO_FILE)}catch(s){return ov.error(s),n.message(ir.VALIDATION_ERR)}}a(j9,"checkFileExists");function Z9(e){let t=Ce.object({project:Ce.string().pattern(vs).custom(Uf.bind(null,!0)).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(vs).custom(j9.bind(null,e.project,e.type)).custom(rl).required().messages({"string.pattern.base":ir.BAD_FILE_NAME})});return Bs.validateBySchema(e,t)}a(Z9,"getDropCustomFunctionValidator");function e7(e){let t=Ce.object({project:Ce.string().pattern(vs).custom(Uf.bind(null,!0)).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(rl).required(),function_content:Ce.string().required()});return Bs.validateBySchema(e,t)}a(e7,"setCustomFunctionValidator");function t7(e){let t=Ce.object({project:Ce.string().pattern(vs).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),file:Ce.string().custom(rl).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Bs.validateBySchema(e,t)}a(t7,"setComponentFileValidator");function r7(e){let t=Ce.object({project:Ce.string().pattern(vs).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),file:Ce.string().custom(rl).optional()});return Bs.validateBySchema(e,t)}a(r7,"dropComponentFileValidator");function n7(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(rl).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Bs.validateBySchema(e,t)}a(n7,"getComponentFileValidator");function s7(e){let t=Ce.object({project:Ce.string().pattern(vs).custom(Uf.bind(null,!1)).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME})});return Bs.validateBySchema(e,t)}a(s7,"addComponentValidator");function i7(e){let t=Ce.object({project:Ce.string().pattern(vs).custom(Uf.bind(null,!0)).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME})});return Bs.validateBySchema(e,t)}a(i7,"dropCustomFunctionProjectValidator");function o7(e){let t=Ce.object({project:Ce.string().pattern(vs).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean()});return Bs.validateBySchema(e,t)}a(o7,"packageComponentValidator");function a7(e){let t=Ce.object({project:Ce.string().pattern(vs).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),payload:Ce.string().optional().messages({"string.pattern.base":ir.BAD_PACKAGE}),package:Ce.string().optional()});return Bs.validateBySchema(e,t)}a(a7,"deployComponentValidator")});var Hf=g((Tme,hv)=>{"use strict";var vf=require("joi"),Bf=require("path"),uv=require("fs-extra"),{exec:c7}=require("child_process"),u7=require("util"),lv=u7.promisify(c7),nl=P(),{handleHDBError:La,hdb_errors:l7}=se(),{HTTP_STATUS_CODES:Ma}=l7,sl=ee(),_7=je(),Pa=$();sl.initSync();var gg=sl.get(nl.CONFIG_PARAMS.COMPONENTSROOT),_v="npm install --omit=dev --json",d7=`${_v} --dry-run`;hv.exports={installModules:m7,auditModules:p7,installAllRootModules:f7,uninstallRootModule:E7,linkHarperdb:h7};async function f7(e=!1){await xf(),await il(e?"npm install --ignore-scripts":"npm install",sl.get(nl.CONFIG_PARAMS.ROOTPATH))}a(f7,"installAllRootModules");async function E7(e){await il(`npm uninstall ${e}`,sl.get(nl.CONFIG_PARAMS.ROOTPATH))}a(E7,"uninstallRootModule");async function h7(){await xf(),await il(`npm link ${nl.PACKAGE_ROOT}`,sl.get(nl.CONFIG_PARAMS.ROOTPATH))}a(h7,"linkHarperdb");async function il(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await lv(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
|
|
14
|
+
Database backup has not been removed and can be found here: ${s}`;Wu.error(u),console.error(u)}(0,cg.get)(bi.CONFIG_PARAMS.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,So.remove)(s))}(0,ug.updateConfigValue)(bi.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1)}async function AU(e){let t=await(0,NU.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function IU(e,t){console.log("copyDb start");let r=pr()[e],n;for(let d in r){n=r[d].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,OU.open)(new bU.default(t)),c=o.openDB(bf.INTERNAL_DBIS_NAME),u,_=0,l=s.useReadTransaction();try{for(let{key:f,value:h}of s.getRange({transaction:l})){let p=h.is_hash_attribute||h.isPrimaryKey,S,T;if(p&&(S=h.compression,T=Nf(),T?h.compression=T:delete h.compression,S?.dictionary?.toString()===T?.dictionary?.toString()&&(S=null,T=null)),c.put(f,h),!(p||h.indexed))continue;let A=new yU.default(!p,p);A.encoding="binary",A.compression=S;let b=n.openDB(f,A);b.decoder=null,A.compression=T;let I=o.openDB(f,A);I.encoder=null,console.log("copying",f,"from",e,"to",t),await E(b,I,p,l)}let d=n.openDB(bf.AUDIT_STORE_NAME,yf);console.log("copying audit log"),E(i,d,!1,l);async function E(f,h,p,S){let T=0,A=0;for(let{key:b,value:I,version:B}of f.getRange({start:null,versions:p,transaction:S}))u=h.put(b,I,B),T++,S.openTimer&&(S.openTimer=0),A+=(b?.length||10)+I.length,_++>5e3&&(await u,console.log("copied",T,"entries",A,"bytes"),_=0);console.log("finish copying, copied",T,"entries",A,"bytes")}a(E,"copyDbi"),await u,console.log("copied database "+e+" to "+t)}finally{l.done(),o.close()}}var OU,Of,So,cg,bU,yU,bf,bi,NU,ug,Wu,CU=Re(()=>{Ae();OU=require("lmdb"),Of=require("path"),So=require("fs-extra"),cg=H(ee()),bU=H(Hc()),yU=H(xc()),bf=H(ft()),bi=H(P());ni();NU=H(bs()),ug=H(hr()),Wu=H($());a(R9,"compactOnStart");a(AU,"getTotalDBRecordCount");a(IU,"copyDb")});var ju=g((sme,vU)=>{"use strict";var A9=require("minimist"),{isMainThread:dg,parentPort:lg,threadId:rme}=require("worker_threads"),nt=P(),{PROCESS_DESCRIPTORS_VALIDATE:Qu}=nt,cs=$(),fg=z(),wf=sg(),If=ut(),nme=Ve(),MU=hr(),Gn=RU(),DU=Ra(),{compactOnStart:O9}=(CU(),ie(wU)),b9=Gh(),{restartWorkers:Cf,onMessageByType:y9}=Qe(),{handleHDBError:N9,hdb_errors:I9}=se(),{HTTP_STATUS_CODES:w9}=I9,Ju=ee();Ju.initSync();var zu=`Restarting HarperDB. This may take up to ${nt.RESTART_TIMEOUT_MS/1e3} seconds.`,C9="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",LU="Clustering is not enabled so cannot be restarted",D9="Invalid service",Ia,En;vU.exports={restart:PU,restartService:Eg};dg&&y9(nt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await Eg({service:e.workerType}):PU({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function PU(e){En=Object.keys(e).length===0,Ia=await Gn.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR);let t=A9(process.argv);if(t.service){await Eg(t);return}if(En&&!Ia){console.error(C9);return}if(En&&console.log(zu),Ia){Gn.enterPM2Mode(),cs.notify(zu);let r=b9(Object.keys(nt.CONFIG_PARAM_MAP),!0);return fg.isEmptyOrZeroLength(Object.keys(r))||MU.updateConfigValue(void 0,void 0,r,!0,!0),L9(),zu}return dg?(cs.notify(zu),Ju.get(nt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await O9(),setTimeout(()=>{Cf()},50)):lg.postMessage({type:nt.ITC_EVENT_TYPES.RESTART}),zu}a(PU,"restart");async function Eg(e){let{service:t}=e;if(nt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw N9(new Error,D9,w9.BAD_REQUEST,void 0,void 0,!0);if(Gn.expectedRestartOfChildren(),Ia=await Gn.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR),!dg)return lg.postMessage({type:nt.ITC_EVENT_TYPES.RESTART,workerType:t}),new Promise(n=>{lg.on("message",s=>{s.type==="restart-complete"&&n()})});let r;switch(t){case Qu.clustering:if(!Ju.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=LU;break}En&&console.log("Restarting clustering"),cs.notify("Restarting clustering"),await UU();break;case Qu.clustering_config:case Qu["clustering config"]:if(!Ju.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=LU;break}En&&console.log("Restarting clustering_config"),cs.notify("Restarting clustering_config"),await Gn.reloadClustering();break;case"custom_functions":case"custom functions":case Qu.harperdb:case Qu.http_workers:if(En&&!Ia){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}En&&console.log("Restarting http_workers"),cs.notify("Restarting http_workers"),En?await Gn.restart(nt.HDB_PROC_DESCRIPTOR):await Cf("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(cs.error(r),En&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(Eg,"restartService");async function L9(){await UU(),await Gn.restart(nt.HDB_PROC_DESCRIPTOR),await fg.async_set_timeout(2e3),Ju.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await _g(),En&&(await If.closeConnection(),process.exit(0))}a(L9,"restartPM2Mode");async function UU(){if(!MU.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await DU.getHDBProcessInfo()).clustering.length===0)cs.trace("Clustering not running, restart will start clustering services"),await wf.generateNatsConfig(!0),await Gn.startClusteringProcesses(),await Gn.startClusteringThreads(),await _g(),En&&await If.closeConnection();else{await wf.generateNatsConfig(!0),Ia?(cs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Gn.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Gn.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await DU.getHDBProcessInfo()).clustering.forEach(s=>{cs.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await fg.async_set_timeout(3e3),await _g(),await If.updateLocalStreams(),En&&await If.closeConnection(),cs.trace("Restart clustering restarting ingest and reply service threads");let t=Cf(nt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Cf(nt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(UU,"restartClustering");async function _g(){await wf.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await wf.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(_g,"removeNatsConfig")});var KU=g((ame,YU)=>{"use strict";var ome=require("lodash"),Ir=P(),{handleHDBError:BU,hdb_errors:M9}=se(),{HDB_ERROR_MSGS:P9,HTTP_STATUS_CODES:U9}=M9,hg=$();YU.exports={getRolePermissions:B9};var To=Object.create(null),v9=a(e=>({key:e,perms:{}}),"perms_template_obj"),qU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),FU=a((e=!1,t=!1,r=!1,n=!1)=>({[Ir.PERMS_CRUD_ENUM.READ]:e,[Ir.PERMS_CRUD_ENUM.INSERT]:t,[Ir.PERMS_CRUD_ENUM.UPDATE]:r,[Ir.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),mg=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...FU(t,r,n,s)}),"table_perms_template"),xU=a((e,t=FU())=>({attribute_name:e,describe:$U(t),[Xu]:t[Xu],[pg]:t[pg],[Sg]:t[Sg]}),"attr_perms_template"),HU=a((e,t=!1)=>({attribute_name:e,describe:t,[Xu]:t}),"timestamp_attr_perms_template"),{READ:Xu,INSERT:pg,UPDATE:Sg}=Ir.PERMS_CRUD_ENUM,kU=Object.values(Ir.PERMS_CRUD_ENUM),VU=[Xu,pg,Sg];function B9(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[Ir.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(To[t]&&To[t].key===n)return To[t].perms;let s=x9(e,r);return To[t]?To[t].key=n:To[t]=v9(n),To[t].perms=s,s}catch(r){if(!e[Ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Ir.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw hg.error(n),hg.debug(r),BU(new Error,P9.OUTDATED_PERMS_TRANSLATION_ERROR,U9.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
15
|
+
${r.stack}`;throw hg.error(n),BU(new Error)}}}a(B9,"getRolePermissions");function x9(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Ir.SYSTEM_SCHEMA_NAME]=n[Ir.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=H9(t[i]);return}r[i]=qU(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],u=t[i][o],_=G9(c,u);r[i].describe||kU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=mg()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=mg()})}),r}a(x9,"translateRolePermissions");function H9(e){let t=qU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=mg(!0,!0,!0,!0,!0)}),t}a(H9,"createStructureUserPermissions");function G9(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,E=l;return Ir.TIME_STAMP_NAMES.includes(d)&&(E=HU(d,l[Xu])),_[d]=E,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=xU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=$U(l),s.attribute_permissions.push(l),c||q9(l,u)}else if(_!==o){let l;Ir.TIME_STAMP_NAMES.includes(_)?l=HU(_):l=xU(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=GU(s),s}else return e.describe=GU(e),e}a(G9,"getTableAttrPerms");function GU(e){return kU.filter(t=>e[t]).length>0}a(GU,"getSchemaTableDescribePerm");function $U(e){return VU.filter(t=>e[t]).length>0}a($U,"getAttributeDescribePerm");function q9(e,t){VU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(q9,"checkForHashPerms")});var WU={};Fe(WU,{Resources:()=>Df,keyArrayToString:()=>wa,resetResources:()=>F9,resources:()=>yi});function F9(){return yi=new Df}function wa(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Df,yi,Zu=Re(()=>{so();Df=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),u=this.get(c);if(!u&&c.indexOf(".")>-1){let _=c.split(".");u=this.get(_[0])}if(u){if(u.relativeURL=t.slice(n),!u.hasSubPaths)return u;s=u}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),!s&&o.indexOf(".")>-1&&(s=this.get(o.split(".")[0])),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return rt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(F9,"resetResources");a(wa,"keyArrayToString")});var QU={};Fe(QU,{Headers:()=>Ni,appendHeader:()=>Tg});function Tg(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var Ni,el=Re(()=>{Ni=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(Tg,"appendHeader")});var tl={};Fe(tl,{authentication:()=>rv,bypassAuth:()=>Q9,login:()=>J9,logout:()=>j9,start:()=>z9});function Q9(){tv=!0}async function rv(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let f=e.isOperationsServer?Y9?$9:[]:V9?k9:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h=new Ni([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Lf&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Lf&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Lf){i||(i=r.host);let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let p of h)if(p.startsWith(f)){let S=p.indexOf(";");u=p.slice(f.length,S===-1?p.length:S),_=await JU.get(u);break}e.session=_||(_={})}let l=a((f,h,p)=>{let S=new Ca.AuthAuditLog(f,h,Ht.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===Ht.AUTH_AUDIT_STATUS.SUCCESS?zU.notify(S):zU.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let f=e.mtlsConfig.user;f!==null?((f===void 0||f==="Common Name"||f==="CN")&&(f=e.peerCertificate.subject.CN),e.user=await at.getUser(f,null,null),l(f,Ht.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Ca.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=go.get(n),!d){let f=n.indexOf(" "),h=n.slice(0,f),p=n.slice(f+1),S,T;try{switch(h){case"Basic":let A=atob(p),b=A.indexOf(":");S=A.slice(0,b),T=A.slice(b+1),d=S||T?await at.getUser(S,T,e):null;break;case"Bearer":try{d=await(0,Mf.validateOperationToken)(p)}catch(I){if(I.message==="invalid token")try{return await(0,Mf.validateRefreshToken)(p),c({status:-1})}catch{throw I}}break}}catch(A){return W9&&(go.get(p)||(go.set(p,p),l(S,Ht.AUTH_AUDIT_STATUS.FAILURE,h))),c({status:401,body:Ro({error:A.message},e)})}go.set(n,d),K9&&l(d.username,Ht.AUTH_AUDIT_STATUS.SUCCESS,h)}e.user=d}else _?.user?e.user=await at.getUser(_.user,null,e):(tv&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,XU.getSuperUser)());Lf&&(e.session.update=function(f){if(!u){u=(0,ZU.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):E?.headers?.set&&E.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):E?.headers?.set&&(i&&E.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),E.headers.set("X-Hdb-Session","Secure"))),f.id=u,JU.put(f)},e.login=async function(f,h){e.user=await at.getUser(f,h,e),e.session.update({user:e.user.username})});let E=await t(e);return E&&(E.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&yi.loginPath?(E.status=302,E.headers.set("Location",yi.loginPath(e))):E.headers.set("WWW-Authenticate","Basic")),c(E))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new Ni);for(let d=0;d<_;){let E=o[d++];l.set(E,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function z9({server:e,port:t}){e.http(rv,{port:t||"all"}),jU||(jU=!0,setInterval(()=>{go=new Map},hn.get(Ht.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),ev.user.addListener(()=>{go=new Map}))}async function J9(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 j9(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var XU,Mf,ZU,hn,Ht,Ca,ev,zU,k9,V9,$9,Y9,JU,Lf,tv,K9,W9,go,jU,Pf=Re(()=>{XU=H(_n());_r();Zu();Mf=H(Du());Ae();ZU=require("uuid"),hn=H(ee()),Ht=H(P()),Ca=H($()),ev=H(Jc());el();Da();zU=(0,Ca.loggerWithTag)("auth-event");hn.initSync();k9=hn.get(Ht.CONFIG_PARAMS.HTTP_CORSACCESSLIST),V9=hn.get(Ht.CONFIG_PARAMS.HTTP_CORS),$9=hn.get(Ht.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Y9=hn.get(Ht.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),JU=Et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Lf=hn.get(Ht.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,tv=hn.get(Ht.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,K9=hn.get(Ht.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,W9=hn.get(Ht.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,go=new Map;at.onInvalidatedUser(()=>{go=new Map});a(Q9,"bypassAuth");a(rv,"authentication");a(z9,"start");a(J9,"login");a(j9,"logout")});var uv=g((Sme,cv)=>{"use strict";var Ce=require("joi"),nv=require("fs-extra"),sv=require("path"),Bs=Xe(),iv=ee(),ov=P(),av=$(),{hdb_errors:X9}=se(),{HDB_ERROR_MSGS:or}=X9,vs=/^[a-zA-Z0-9-_]+$/;cv.exports={getDropCustomFunctionValidator:e7,setCustomFunctionValidator:t7,addComponentValidator:i7,dropCustomFunctionProjectValidator:o7,packageComponentValidator:a7,deployComponentValidator:c7,setComponentFileValidator:r7,getComponentFileValidator:s7,dropComponentFileValidator:n7};function Uf(e,t,r){try{let n=iv.get(ov.CONFIG_PARAMS.COMPONENTSROOT),s=sv.join(n,t);return nv.existsSync(s)?e?t:r.message(or.PROJECT_EXISTS):e?r.message(or.NO_PROJECT):t}catch(n){return av.error(n),r.message(or.VALIDATION_ERR)}}a(Uf,"checkProjectExists");function rl(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(rl,"checkFilePath");function Z9(e,t,r,n){try{let s=iv.get(ov.CONFIG_PARAMS.COMPONENTSROOT),i=sv.join(s,e,t,r+".js");return nv.existsSync(i)?r:n.message(or.NO_FILE)}catch(s){return av.error(s),n.message(or.VALIDATION_ERR)}}a(Z9,"checkFileExists");function e7(e){let t=Ce.object({project:Ce.string().pattern(vs).custom(Uf.bind(null,!0)).required().messages({"string.pattern.base":or.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(vs).custom(Z9.bind(null,e.project,e.type)).custom(rl).required().messages({"string.pattern.base":or.BAD_FILE_NAME})});return Bs.validateBySchema(e,t)}a(e7,"getDropCustomFunctionValidator");function t7(e){let t=Ce.object({project:Ce.string().pattern(vs).custom(Uf.bind(null,!0)).required().messages({"string.pattern.base":or.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(rl).required(),function_content:Ce.string().required()});return Bs.validateBySchema(e,t)}a(t7,"setCustomFunctionValidator");function r7(e){let t=Ce.object({project:Ce.string().pattern(vs).required().messages({"string.pattern.base":or.BAD_PROJECT_NAME}),file:Ce.string().custom(rl).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Bs.validateBySchema(e,t)}a(r7,"setComponentFileValidator");function n7(e){let t=Ce.object({project:Ce.string().pattern(vs).required().messages({"string.pattern.base":or.BAD_PROJECT_NAME}),file:Ce.string().custom(rl).optional()});return Bs.validateBySchema(e,t)}a(n7,"dropComponentFileValidator");function s7(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(rl).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Bs.validateBySchema(e,t)}a(s7,"getComponentFileValidator");function i7(e){let t=Ce.object({project:Ce.string().pattern(vs).custom(Uf.bind(null,!1)).required().messages({"string.pattern.base":or.BAD_PROJECT_NAME})});return Bs.validateBySchema(e,t)}a(i7,"addComponentValidator");function o7(e){let t=Ce.object({project:Ce.string().pattern(vs).custom(Uf.bind(null,!0)).required().messages({"string.pattern.base":or.BAD_PROJECT_NAME})});return Bs.validateBySchema(e,t)}a(o7,"dropCustomFunctionProjectValidator");function a7(e){let t=Ce.object({project:Ce.string().pattern(vs).required().messages({"string.pattern.base":or.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean()});return Bs.validateBySchema(e,t)}a(a7,"packageComponentValidator");function c7(e){let t=Ce.object({project:Ce.string().pattern(vs).required().messages({"string.pattern.base":or.BAD_PROJECT_NAME}),payload:Ce.string().optional().messages({"string.pattern.base":or.BAD_PACKAGE}),package:Ce.string().optional()});return Bs.validateBySchema(e,t)}a(c7,"deployComponentValidator")});var Hf=g((gme,mv)=>{"use strict";var vf=require("joi"),Bf=require("path"),lv=require("fs-extra"),{exec:u7}=require("child_process"),l7=require("util"),_v=l7.promisify(u7),nl=P(),{handleHDBError:La,hdb_errors:_7}=se(),{HTTP_STATUS_CODES:Ma}=_7,sl=ee(),d7=Xe(),Pa=$();sl.initSync();var gg=sl.get(nl.CONFIG_PARAMS.COMPONENTSROOT),dv="npm install --omit=dev --json",f7=`${dv} --dry-run`;mv.exports={installModules:p7,auditModules:S7,installAllRootModules:E7,uninstallRootModule:h7,linkHarperdb:m7};async function E7(e=!1){await xf(),await il(e?"npm install --ignore-scripts":"npm install",sl.get(nl.CONFIG_PARAMS.ROOTPATH))}a(E7,"installAllRootModules");async function h7(e){await il(`npm uninstall ${e}`,sl.get(nl.CONFIG_PARAMS.ROOTPATH))}a(h7,"uninstallRootModule");async function m7(){await xf(),await il(`npm link ${nl.PACKAGE_ROOT}`,sl.get(nl.CONFIG_PARAMS.ROOTPATH))}a(m7,"linkHarperdb");async function il(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await _v(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
|
|
16
16
|
`,""))}return n&&!n.includes("Debugger listening")&&Pa.error("Error running NPM command:",e,n),Pa.trace(r,n),r?.replace(`
|
|
17
|
-
`,"")}a(il,"runCommand");async function
|
|
17
|
+
`,"")}a(il,"runCommand");async function p7(e){Pa.info(`starting installModules for request: ${e}`);let t=hv(e);if(t)throw La(t,t.message,Ma.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?f7:dv;await xf(),await Ev(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 _=Bf.join(gg,u),l,d=null;try{let{stdout:E,stderr:f}=await _v(s,{cwd:_});l=E?E.replace(`
|
|
18
18
|
`,""):null,d=f?f.replace(`
|
|
19
|
-
`,""):null}catch(E){E.stderr?i[u].npm_error=
|
|
20
|
-
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(dv,"parseNPMStdErr");async function p7(e){Pa.info(`starting auditModules for request: ${e}`);let t=Ev(e);if(t)throw La(t,t.message,Ma.BAD_REQUEST);let{projects:r}=e;await xf(),await fv(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Bf.join(gg,o);n[o]={npm_output:null,npm_error:null};try{let u=await il("npm audit --json",c);n[o].npm_output=JSON.parse(u)}catch(u){n[o].npm_error=dv(u.stderr)}}return Pa.info(`finished auditModules with response ${n}`),n}a(p7,"auditModules");async function xf(){try{return await il("npm -v"),!0}catch{throw La(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Ma.BAD_REQUEST,void 0,void 0,!0)}}a(xf,"checkNPMInstalled");async function fv(e){if(!Array.isArray(e)||e.length===0)throw La(new Error,"projects argument must be an array with at least 1 element",Ma.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Bf.join(gg,i.toString());if(!await uv.pathExists(o)){t.push(i);continue}let u=Bf.join(o,"package.json");await uv.pathExists(u)||r.push(i)}if(t.length>0)throw La(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Ma.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw La(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Ma.BAD_REQUEST,void 0,void 0,!0)}a(fv,"checkProjectPaths");function Ev(e){let t=vf.object({projects:vf.array().min(1).items(vf.string()).required(),dry_run:vf.boolean().default(!1)});return _7.validateBySchema(e,t)}a(Ev,"modulesValidator")});var Ag=g((Rme,gv)=>{"use strict";var Ua=require("fs-extra"),Rg=require("path"),Gf=$(),mv=z(),qf=P(),Tv=ee(),S7=Er();gv.exports=T7;async function T7(){let e=g7(),t=Tv.get(qf.CONFIG_PARAMS.ROOTPATH),r=Rg.join(t,"package.json"),n={dependencies:{harperdb:"file:"+qf.PACKAGE_ROOT}},s=Rg.join(t,"node_modules");await Ua.ensureDir(s);let i,o=!0,c=!1;try{i=await Ua.readJson(r)}catch(u){if(mv.isEmptyOrZeroLength(e))return;if(u.code!==qf.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!mv.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await pv(_);n.dependencies[u]=l+_}if(!o){Gf.notify("Installing components"),await Sv(r,n,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await pv(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)n.dependencies[u]===void 0&&(Gf.notify("Removing component",u),c=!0);c&&(Gf.notify("Updating components."),await Sv(r,n,i))}a(T7,"installComponents");function g7(){let e=S7.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(g7,"getComponentsConfig");async function pv(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Rg.extname(e)||await Ua.pathExists(e)?"file:":"github:"}a(pv,"getPkgPrefix");async function Sv(e,t,r){Gf.trace("npm installing components package.json",t),await Ua.writeFile(e,JSON.stringify(t,null," "));try{await Hf().installAllRootModules(Tv.get(qf.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Ua.writeFile(e,JSON.stringify(r,null," ")):await Ua.unlink(e),n}}a(Sv,"installPackages")});var yg=g((bme,bv)=>{"use strict";var $e=require("fs-extra"),Og=require("fast-glob"),ge=require("path"),Av=require("tar-fs"),Ome=require("uuid").v4,bg=require("normalize-path"),us=cv(),Ct=$(),Je=P(),Ot=ee(),ol=Er(),R7=z(),{PACKAGE_ROOT:A7}=P(),{handleHDBError:Gt,hdb_errors:O7}=se(),{basename:b7}=require("path"),y7=Ag(),Ov=ee(),N7=P(),{Readable:I7}=require("stream"),{isMainThread:w7}=require("worker_threads"),{HDB_ERROR_MSGS:Ao,HTTP_STATUS_CODES:qt}=O7,C7=ge.join(A7,"application-template"),Rv=ge.join(Ot.get(Je.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function D7(){Ct.trace("getting custom api status");let e={};try{e={port:Ot.get(Je.CONFIG_PARAMS.HTTP_PORT),directory:Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Gt(new Error,Ao.FUNCTION_STATUS,qt.INTERNAL_SERVER_ERROR,Ct.ERR,t)}return e}a(D7,"customFunctionsStatus");function L7(){Ct.trace("getting custom api endpoints");let e={},t=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT);try{Og.sync(bg(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:Og.sync(bg(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:Og.sync(bg(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Gt(new Error,Ao.GET_FUNCTIONS,qt.INTERNAL_SERVER_ERROR,Ct.ERR,r)}return e}a(L7,"getCustomFunctions");function M7(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=us.getDropCustomFunctionValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);Ct.trace("getting custom api endpoint file content");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=ge.join(r,n,s,i+".js");try{return $e.readFileSync(o,{encoding:"utf8"})}catch(c){throw Gt(new Error,Ao.GET_FUNCTION,qt.INTERNAL_SERVER_ERROR,Ct.ERR,c)}}a(M7,"getCustomFunction");function P7(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=us.setCustomFunctionValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);Ct.trace("setting custom function file content");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return $e.outputFileSync(ge.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Gt(new Error,Ao.SET_FUNCTION,qt.INTERNAL_SERVER_ERROR,Ct.ERR,c)}}a(P7,"setCustomFunction");function U7(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=us.getDropCustomFunctionValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);Ct.trace("dropping custom function file");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return $e.unlinkSync(ge.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Gt(new Error,Ao.DROP_FUNCTION,qt.INTERNAL_SERVER_ERROR,Ct.ERR,o)}}a(U7,"dropCustomFunction");function v7(e){e.project&&(e.project=ge.parse(e.project).name);let t=us.addComponentValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);Ct.trace("adding component");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=ge.join(r,n);return $e.mkdirSync(s,{recursive:!0}),$e.copySync(C7,s),`Successfully added project: ${n}`}catch(s){throw Gt(new Error,Ao.ADD_FUNCTION,qt.INTERNAL_SERVER_ERROR,Ct.ERR,s)}}a(v7,"addComponent");function B7(e){e.project&&(e.project=ge.parse(e.project).name);let t=us.dropCustomFunctionProjectValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);Ct.trace("dropping custom function project");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Ot.get(Je.CONFIG_PARAMS.APPS);if(!R7.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return ol.updateConfigValue(Je.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=ge.join(r,n);return $e.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Gt(new Error,Ao.DROP_FUNCTION_PROJECT,qt.INTERNAL_SERVER_ERROR,Ct.ERR,i)}}a(B7,"dropCustomFunctionProject");async function x7(e){e.project&&(e.project=ge.parse(e.project).name);let t=us.packageComponentValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Ct.trace("packaging component",n);let s;try{s=await $e.realpath(ge.join(r,n))}catch(u){if(u.code!==Je.NODE_ERROR_CODES.ENOENT)throw u;try{s=await $e.realpath(ge.join(Ot.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Je.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await $e.ensureDir(Rv);let i=ge.join(Rv,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(ge.join(s,"node_modules"))}),Av.pack(s,o).pipe($e.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=$e.readFileSync(i,{encoding:"base64"});return await $e.remove(i),{project:n,payload:c}}a(x7,"packageComponent");async function H7(e){e.project&&(e.project=ge.parse(e.project).name);let t=us.deployComponentValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(Ct.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=ge.join(r,n),i="file:"+o,await $e.emptyDir(o);let E=I7.from(Buffer.from(s,"base64"));await new Promise((h,p)=>{E.pipe(Av.extract(o,{finish:h})).on("error",p)});let f=await $e.readdir(o);f.length===1&&f[0]==="package"&&(await $e.copy(ge.join(o,"package"),o),await $e.remove(ge.join(o,"package")))}if(await ol.addConfig(n,{package:i}),!s){await y7();let E=Ov.get(N7.CONFIG_PARAMS.ROOTPATH);o=ge.join(E,"node_modules",n)}if(w7)return;let c=new Map;c.isWorker=!0;let u=(kf(),ie(Ff)),_;u.setErrorReporter(E=>_=E);let l=b7(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return Ct.info("Installed component"),`Successfully deployed: ${n}`}a(H7,"deployComponent");async function G7(){let e=ol.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let u=await $e.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=ge.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let E={name:l,entries:[]};c.entries.push(E),await r(d,E)}else{let E=await $e.stat(d),f={name:ge.basename(l),mtime:E.mtime,size:E.size};c.entries.push(f)}}return c}catch(u){return Ct.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),n=await r(Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{name:Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT).split(ge.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(ge.join(Ot.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(kf(),ie(Ff)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return n}a(G7,"getComponents");async function q7(e){let t=us.getComponentFileValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);let n=ol.getConfigObj()[e.project]||e.project==="harperdb"?ge.join(Ov.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules"):Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await $e.stat(ge.join(n,e.project,e.file));return{message:await $e.readFile(ge.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Je.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${ge.join(e.project,e.file)}'`):i}}a(q7,"getComponentFile");async function F7(e){let t=us.setComponentFileValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=ge.join(Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await $e.ensureFile(n),await $e.outputFile(n,e.payload,r)):await $e.ensureDir(n),"Successfully set component: "+e.file}a(F7,"setComponentFile");async function k7(e){let t=us.dropComponentFileValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);let r=e.file?ge.join(e.project,e.file):e.project,n=ge.join(Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),r);return await $e.pathExists(n)&&await $e.remove(n),ol.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(k7,"dropComponent");bv.exports={customFunctionsStatus:D7,getCustomFunctions:L7,getCustomFunction:M7,setCustomFunction:P7,dropCustomFunction:U7,addComponent:v7,dropCustomFunctionProject:B7,packageComponent:x7,deployComponent:H7,getComponents:G7,getComponentFile:q7,setComponentFile:F7,dropComponent:k7}});var Ng=g((Nme,Nv)=>{"use strict";var ls=require("joi"),yv=je();Nv.exports={readTransactionLogValidator:V7,deleteTransactionLogsBeforeValidator:$7};function V7(e){let t=ls.object({schema:ls.string().required(),table:ls.string().required(),from:ls.date().timestamp(),to:ls.date().timestamp(),limit:ls.number().min(1)});return yv.validateBySchema(e,t)}a(V7,"readTransactionLogValidator");function $7(e){let t=ls.object({schema:ls.string().required(),table:ls.string().required(),timestamp:ls.date().timestamp().required()});return yv.validateBySchema(e,t)}a($7,"deleteTransactionLogsBeforeValidator")});var Vf=g((wme,Lv)=>{"use strict";var Ig=P(),al=ut(),Iv=z(),wv=ee(),Cv=Os(),{handleHDBError:va,hdb_errors:Y7}=se(),{HTTP_STATUS_CODES:Ba}=Y7,{readTransactionLogValidator:K7,deleteTransactionLogsBeforeValidator:W7}=Ng(),Dv="This operation relies on clustering and cannot run with it disable.",Q7="Logs successfully deleted from transaction log.",z7="All logs successfully deleted from transaction log.";Lv.exports={readTransactionLog:J7,deleteTransactionLogsBefore:X7};async function*J7(e){let t=K7(e);if(t)throw va(t,t.message,Ba.BAD_REQUEST,void 0,void 0,!0);if(!wv.get(Ig.CONFIG_PARAMS.CLUSTERING_ENABLED))throw va(new Error,Dv,Ba.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=Iv.checkSchemaTableExist(r,n);if(s)throw va(new Error,s,Ba.NOT_FOUND,void 0,void 0,!0);let i=Cv.createNatsTableStreamName(r,n),o=await al.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===Ig.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(J7,"readTransactionLog");async function X7(e){let t=W7(e);if(t)throw va(t,t.message,Ba.BAD_REQUEST,void 0,void 0,!0);if(!wv.get(Ig.CONFIG_PARAMS.CLUSTERING_ENABLED))throw va(new Error,Dv,Ba.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=Iv.checkSchemaTableExist(r,n);if(i)throw va(new Error,i,Ba.NOT_FOUND,void 0,void 0,!0);let o=Cv.createNatsTableStreamName(r,n),{jsm:c}=await al.getNATSReferences(),u=await al.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let l=Q7,d,E=new Date(u.state.last_ts).getTime();return s>E?(d=u.state.last_seq+1,l=z7):d=(await al.viewStream(o,parseInt(s),1))[0].nats_sequence,await al.purgeTableStream(r,n,{seq:d}),l}a(X7,"deleteTransactionLogsBefore")});var Pv=g((Dme,Mv)=>{"use strict";var wg=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};Mv.exports=wg});var vv=g((Mme,Uv)=>{"use strict";var Cg=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};Uv.exports=Cg});var Lg=g((Ume,xv)=>{"use strict";var Bv=Pv(),j7=vv(),{HDB_ERROR_MSGS:Z7}=vr(),Dg=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Z7.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,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new Bv(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let u=new j7(c,s[c]);i.push(u)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new Bv(r,n,[],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}};xv.exports=Dg});var Wf=g((Bme,Zv)=>{"use strict";var Mg=Fr(),$f=qr(),pn=bu(),ll=bs(),Pg=ci(),eee=$S(),tee=qL(),_l=_n(),Yf=ZS(),Dt=$(),ree=rT(),nee=af(),see=vT(),iee=uf(),oee=xT(),aee=HT(),cee=FT(),uee=VT(),Ug=KT(),xs=z(),lee=HP(),vg=XT(),qv=Xu(),mn=P(),Fv=YU(),_ee=Ra(),kv=Du(),Vv=(Pf(),ie(tl)),$v=Er(),Xr=yg(),dee=require("alasql"),Yv=Vf(),Kv=Hf(),Wv=Lg(),{handleHDBError:wr,hdb_errors:Qv}=se(),{HDB_ERROR_MSGS:Wt,HTTP_STATUS_CODES:cl}=Qv,V=new Map,zv="delete",Ii="insert",Hs="read",Oo="update",ul="describe",Hv=ll.describeSchema.name,Gv=ll.describeTable.name,Jv={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},fee="catchup",Eee="handleGetJob",hee="handleGetJobsByStartDate",Kf={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},mee=[pn.createTable.name,pn.createAttribute.name,pn.dropTable.name,pn.dropAttribute.name],Xv={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},W=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};V.set(Mg.insert.name,new W(!1,[Ii]));V.set(Mg.update.name,new W(!1,[Oo]));V.set(Mg.upsert.name,new W(!1,[Ii,Oo]));V.set($f.searchByConditions.name,new W(!1,[Hs]));V.set($f.searchByHash.name,new W(!1,[Hs]));V.set($f.searchByValue.name,new W(!1,[Hs]));V.set($f.search.name,new W(!1,[Hs]));V.set(pn.createSchema.name,new W(!0,[]));V.set(pn.createTable.name,new W(!0,[]));V.set(pn.createAttribute.name,new W(!1,[Ii]));V.set(pn.dropSchema.name,new W(!0,[]));V.set(pn.dropTable.name,new W(!0,[]));V.set(pn.dropAttribute.name,new W(!0,[]));V.set(ll.describeSchema.name,new W(!1,[Hs]));V.set(ll.describeTable.name,new W(!1,[Hs]));V.set(Pg.deleteRecord.name,new W(!1,[zv]));V.set(_l.addUser.name,new W(!0,[]));V.set(_l.alterUser.name,new W(!0,[]));V.set(_l.dropUser.name,new W(!0,[]));V.set(_l.listUsersExternal.name,new W(!0,[]));V.set(Yf.listRoles.name,new W(!0,[]));V.set(Yf.addRole.name,new W(!0,[]));V.set(Yf.alterRole.name,new W(!0,[]));V.set(Yf.dropRole.name,new W(!0,[]));V.set(ree.name,new W(!0,[]));V.set(nee.name,new W(!0,[]));V.set(see.name,new W(!0,[]));V.set(iee.name,new W(!0,[]));V.set(oee.name,new W(!0,[]));V.set(aee.name,new W(!0,[]));V.set(Ug.setRoutes.name,new W(!0,[]));V.set(Ug.getRoutes.name,new W(!0,[]));V.set(Ug.deleteRoutes.name,new W(!0,[]));V.set($v.setConfiguration.name,new W(!0,[]));V.set(cee.clusterStatus.name,new W(!0,[]));V.set(uee.name,new W(!0,[]));V.set(vg.getFingerprint.name,new W(!0,[]));V.set(vg.setLicense.name,new W(!0,[]));V.set(Pg.deleteFilesBefore.name,new W(!0,[]));V.set(Pg.deleteAuditLogsBefore.name,new W(!0,[]));V.set(qv.restart.name,new W(!0,[]));V.set(qv.restartService.name,new W(!0,[]));V.set(eee.name,new W(!0,[]));V.set(tee.name,new W(!0,[Hs]));V.set(_ee.systemInformation.name,new W(!0,[]));V.set($v.getConfiguration.name,new W(!0,[]));V.set(Yv.readTransactionLog.name,new W(!0,[]));V.set(Yv.deleteTransactionLogsBefore.name,new W(!0,[]));V.set(Kv.installModules.name,new W(!0,[]));V.set(Kv.auditModules.name,new W(!0,[]));V.set(kv.createTokens.name,new W(!1,[]));V.set(kv.refreshOperationToken.name,new W(!1,[]));V.set(Vv.login.name,new W(!1,[]));V.set(Vv.logout.name,new W(!1,[]));V.set(Xr.customFunctionsStatus.name,new W(!0,[]));V.set(Xr.getCustomFunctions.name,new W(!0,[]));V.set(Xr.getComponents.name,new W(!0,[]));V.set(Xr.getComponentFile.name,new W(!0,[]));V.set(Xr.setComponentFile.name,new W(!0,[]));V.set(Xr.dropComponent.name,new W(!0,[]));V.set(Xr.getCustomFunction.name,new W(!0,[]));V.set(Xr.setCustomFunction.name,new W(!0,[]));V.set(Xr.dropCustomFunction.name,new W(!0,[]));V.set(Xr.addComponent.name,new W(!0,[]));V.set(Xr.dropCustomFunctionProject.name,new W(!0,[]));V.set(Xr.packageComponent.name,new W(!0,[]));V.set(Xr.deployComponent.name,new W(!0,[]));V.set(vg.getRegistrationInfo.name,new W(!1,[]));V.set(_l.userInfo.name,new W(!1,[]));V.set(ll.describeAll.name,new W(!1,[]));V.set(Eee,new W(!1,[]));V.set(hee,new W(!0,[]));V.set(fee,new W(!0,[]));V.set(Kf.CSV_DATA_LOAD,new W(!1,[Ii,Oo]));V.set(Kf.CSV_URL_LOAD,new W(!1,[Ii,Oo]));V.set(Kf.CSV_FILE_LOAD,new W(!1,[Ii,Oo]));V.set(Kf.IMPORT_FROM_S3,new W(!1,[Ii,Oo]));V.set(Xv.EXPORT_TO_S3,new W(!0,[]));V.set(Xv.EXPORT_LOCAL,new W(!0,[]));V.set(mn.VALID_SQL_OPS_ENUM.DELETE,new W(!1,[zv]));V.set(mn.VALID_SQL_OPS_ENUM.SELECT,new W(!1,[Hs]));V.set(mn.VALID_SQL_OPS_ENUM.INSERT,new W(!1,[Ii]));V.set(mn.VALID_SQL_OPS_ENUM.UPDATE,new W(!1,[Oo]));Zv.exports={verifyPerms:See,verifyPermsAst:pee,verifyBulkLoadAttributePerms:gee};function pee(e,t,r){if(xs.isEmptyOrZeroLength(e))throw Dt.info("verify_perms_ast has an empty user parameter"),wr(new Error);if(xs.isEmptyOrZeroLength(t))throw Dt.info("verify_perms_ast has an empty user parameter"),wr(new Error);if(xs.isEmptyOrZeroLength(r))throw Dt.info("verify_perms_ast has a null operation parameter"),wr(new Error);try{let n=new Wv,s=new lee(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Dt.info("No schemas defined in verifyPermsAst(), will not continue."),wr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&Jv[r])throw wr(new Error,Wt.DROP_SYSTEM,cl.FORBIDDEN);if(c&&!u)return null;let _=Fv.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof dee.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let E=s.getTablesBySchemaName(i[d]);E&&o.set(i[d],E)}let l=jv(t,r,o,n);return l||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=s.getAttributesBySchemaTableName(E,d[f]),p=xg(t.role.permission,E,d[f]);Bg(h,p,r,d[f],E,n)}}),n.getPermsResponse())}catch(n){throw wr(n)}}a(pee,"verifyPermsAst");function See(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Dt.info("null required parameter in verifyPerms"),wr(new Error,Wt.DEFAULT_INVALID_REQUEST,cl.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new Wv;if(xs.isEmptyOrZeroLength(e.hdb_user?.role)||xs.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Dt.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Wt.USER_HAS_NO_PERMS(e.hdb_user?.username));let u=!!e.hdb_user?.role?.permission?.super_user,_=e.hdb_user?.role?.permission?.structure_user,l=o.has(mn.SYSTEM_SCHEMA_NAME)||s===mn.SYSTEM_SCHEMA_NAME;if(l&&Jv[r])throw wr(new Error,Wt.DROP_SYSTEM,cl.FORBIDDEN);if(u&&!l||_===!0&&(r===pn.createSchema.name||r===pn.dropSchema.name))return null;if(mee.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=Fv.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=d),r===Hv||r===Gv){if(s===mn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Wt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===Hv&&(!d[s]||!d[s][ul]))return c.handleInvalidItem(Wt.SCHEMA_NOT_FOUND(s));if(r===Gv&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][ul]))return c.handleInvalidItem(Wt.TABLE_NOT_FOUND(s,i))}}let E=jv(e.hdb_user,r,o,c,n);if(E)return E;if(V.get(r)&&V.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&mn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[s].tables[i];S[mn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(A=>A[mn.PERMS_CRUD_ENUM.READ]).forEach(A=>{p.push(A.attribute_name)}):p=global.hdb_schema[s][i].attributes.map(T=>T.attribute),e.get_attributes=p)}let f=Tee(e),h=xg(e.hdb_user?.role?.permission,s,i);return Bg(f,h,r,i,s,c,n),c.getPermsResponse()}a(See,"verifyPerms");function jv(e,t,r,n,s){if(xs.arrayHasEmptyValues([e,t,r]))throw Dt.info("hasPermissions has an invalid parameter"),wr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||V.get(t).requires_su))return null;if(!V.get(t))throw Dt.info(`operation ${t} not found.`),wr(new Error,Wt.OP_NOT_FOUND(t),cl.BAD_REQUEST);if(V.get(t)&&V.get(t).requires_su)return Dt.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Wt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][ul]===!1){n.addInvalidItem(Wt.SCHEMA_NOT_FOUND(u));continue}}catch{n.addInvalidItem(Wt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[ul]===!1)n.addInvalidItem(Wt.TABLE_NOT_FOUND(u,l));else try{let E=[],f=V.get(t).perms;!xs.isEmpty(s)&&f.includes(s)&&(f=[s]);for(let h=0;h<f.length;h++){let p=f[h],S=d[p];(S==null||S===!1)&&(Dt.info(`Required ${p} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),E.push(p))}E.length>0&&n.addUnauthorizedTable(u,l,E)}catch(E){let f=Wt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Dt.error(f),Dt.error(E),wr(Qv.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?n.getPermsResponse():null}a(jv,"hasPermissions");function Bg(e,t,r,n,s,i,o){if(!e||!t)throw Dt.info("no attributes specified in checkAttributePerms."),wr(new Error);let c=V.get(r).perms;if(!c||c==="")throw Dt.info(`no permissions found for ${r} in checkAttributePerms().`),wr(new Error);if(xs.isEmptyOrZeroLength(t))return Dt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[ul]===!1){i.addInvalidItem(Wt.ATTR_NOT_FOUND(s,n,l),s,n);continue}if(c)for(let E of c){if(mn.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==Hs)throw wr(new Error,Wt.SYSTEM_TIMESTAMP_PERMS_ERR,cl.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(Wt.ATTR_NOT_FOUND(s,n,l),s,n)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,s,n,u)}a(Bg,"checkAttributePerms");function Tee(e){let t=new Set;try{if(e.action)return t;if(e.operation===mn.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 n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Dt.info(r)}return t}a(Tee,"getRecordAttributes");function xg(e,t,r){let n=new Map;if(xs.isEmpty(e))return Dt.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Dt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(xg,"getAttributePermissions");function gee(e,t,r,n,s,i,o){let c=new Set(i),u=xg(e,n,s);Bg(c,u,t,s,n,o,r)}a(gee,"verifyBulkLoadAttributePerms")});var zf=g((Hme,s0)=>{"use strict";s0.exports={evaluateSQL:Pee,processAST:n0,convertSQLToAST:r0,checkASTPermissions:t0};var Ree=Fr(),e0=require("util"),Aee=e0.callbackify(Ree.insert),Oee=qr().search,bee=bD().update,yee=e0.callbackify(bee),Nee=ND().convertDelete,wi=require("alasql"),Iee=Wf(),Qf=$(),wee=bd(),Cee=z(),dl=P(),{hdb_errors:Dee,handleHDBError:Hg}=se(),{HTTP_STATUS_CODES:Gg}=Dee;wee(wi);var Lee=403,Mee="There was a problem performing this insert. Please check the logs and try again.",qg=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Pee(e,t){let r=e.parsed_sql_object;if(!r){r=r0(e.sql);let n,s=r.ast.statements[0];if(s instanceof wi.yy.Insert?n=s.into.databaseid:s instanceof wi.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof wi.yy.Update||s instanceof wi.yy.Delete?n=s.table.databaseid:Qf.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof wi.yy.Select)&&Cee.isEmptyOrZeroLength(n))return t("No schema specified",null)}n0(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Pee,"evaluateSQL");function t0(e,t){let r;try{r=Iee.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(t0,"checkASTPermissions");function r0(e){let t=new qg;if(!e)throw Hg(new Error,"The 'sql' parameter is missing from the request body",Gg.BAD_REQUEST);try{let r=e.trim(),n=wi.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
21
|
-
`);throw n[1]?Hg(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Gg.BAD_REQUEST):Hg(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Gg.BAD_REQUEST)}return t}a(r0,"convertSQLToAST");function n0(e,t,r){try{let n=Uee;if(!e.bypass_auth&&!t.permissions_checked){let i=t0(e,t);if(i&&i.length>0)return r(Lee,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case dl.VALID_SQL_OPS_ENUM.SELECT:n=Oee,s=t.ast.statements[0];break;case dl.VALID_SQL_OPS_ENUM.INSERT:n=vee;break;case dl.VALID_SQL_OPS_ENUM.UPDATE:n=yee;break;case dl.VALID_SQL_OPS_ENUM.DELETE:n=Nee;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(n0,"processAST");function Uee(e,t){Qf.info(e),t("unknown sql statement")}a(Uee,"nullFunction");function vee({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=Bee(i,e.values)}catch(o){return r(o)}Aee(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Qf.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(vee,"convertInsert");function Bee(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 n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=wi.compile(`SELECT ${s.toString()} AS [${dl.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Qf.error(r),new Error(Mee)}}a(Bee,"createDataObjects")});var Fg=g((qme,o0)=>{"use strict";var{S3:xee,GetObjectCommand:Hee}=require("@aws-sdk/client-s3");o0.exports={getFileStreamFromS3:Gee,getS3AuthObj:i0};async function Gee(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await i0(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Hee(r))).Body}a(Gee,"getFileStreamFromS3");function i0(e,t,r){return new xee({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(i0,"getS3AuthObj")});var Jf=g((kme,h0)=>{"use strict";var Vg=qr(),qee=zf(),Fee=Fg(),{AsyncParser:kee,Transform:Vee}=require("json2csv"),El=require("stream"),jr=z(),kg=require("fs-extra"),$ee=require("path"),Sn=$(),{promisify:u0}=require("util"),fl=z(),{handleHDBError:bt,hdb_errors:Yee}=se(),{HDB_ERROR_MSGS:Cr,HTTP_STATUS_CODES:yt}=Yee,{streamAsJSON:Kee}=(cm(),ie(Gb)),{Upload:Wee}=require("@aws-sdk/lib-storage"),a0=["search_by_value","search_by_hash","sql","search_by_conditions"],c0=["json","csv"],l0="json",_0="csv",Qee="Successfully exported JSON locally.",zee="Successfully exported CSV locally.",Jee=1e3,Xee=Vg.searchByHash,jee=Vg.searchByValue,Zee=u0(qee.evaluateSQL),ete=u0(El.finished);h0.exports={export_to_s3:ste,export_local:tte,toCsvStream:d0};async function tte(e){Sn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=f0(e);if(!jr.isEmpty(t))throw Sn.error(t),bt(new Error,t,yt.BAD_REQUEST,void 0,void 0,!0);if(jr.isEmpty(e.path))throw Sn.error(Cr.MISSING_VALUE("path")),bt(new Error,Cr.MISSING_VALUE("path"),yt.BAD_REQUEST,void 0,void 0,!0);let r=(jr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith($ee.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=jr.buildFolderPath(e.path,r);await rte(e.path);let s=await E0(e);return await nte(n,e.format,s)}a(tte,"export_local");async function rte(e){if(Sn.trace("in confirmPath"),jr.isEmptyOrZeroLength(e))throw bt(new Error,`Invalid path: ${e}`,yt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await kg.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,Sn.error(n),bt(new Error,n,yt.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 Sn.error(r),bt(new Error,r,yt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(rte,"confirmPath");async function nte(e,t,r){if(Sn.trace("in saveToLocal"),fl.isEmptyOrZeroLength(e))throw bt(new Error,Cr.INVALID_VALUE("file_path"),yt.BAD_REQUEST,void 0,void 0,!0);if(fl.isEmptyOrZeroLength(t))throw bt(new Error,Cr.INVALID_VALUE("Source format"),yt.BAD_REQUEST,void 0,void 0,!0);if(fl.isEmpty(r))throw bt(new Error,Cr.NOT_FOUND("Data"),yt.BAD_REQUEST,void 0,void 0,!0);if(t===l0){let n=kg.createWriteStream(e);return Kee(r).pipe(n),await ete(n),{message:Qee,path:e}}else if(t===_0){let n=kg.createWriteStream(e),s=El.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(l=>({label:l,value:l})));let c={objectMode:!0};return await new kee(i,c).fromInput(s).toOutput(n).promise(!1),{message:zee,path:e}}throw bt(new Error,Cr.INVALID_VALUE("format"),yt.BAD_REQUEST)}a(nte,"saveToLocal");async function ste(e){if(!e.s3||Object.keys(e.s3).length===0)throw bt(new Error,Cr.MISSING_VALUE("S3 object"),yt.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw bt(new Error,Cr.MISSING_VALUE("aws_access_key_id"),yt.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw bt(new Error,Cr.MISSING_VALUE("aws_secret_access_key"),yt.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.bucket))throw bt(new Error,Cr.MISSING_VALUE("bucket"),yt.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.key))throw bt(new Error,Cr.MISSING_VALUE("key"),yt.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.region))throw bt(new Error,Cr.MISSING_VALUE("region"),yt.BAD_REQUEST);let t=f0(e);if(!jr.isEmpty(t))throw bt(new Error,t,yt.BAD_REQUEST);Sn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await E0(e)}catch(u){throw Sn.error(u),u}let n,s=await Fee.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new El.PassThrough;if(e.format===_0){i=e.s3.key+".csv";let u=d0(r,r.getColumns?.());u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===l0){i=e.s3.key+".json";let u=new El.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,E]of r.entries()){let f=d===_-1?JSON.stringify(E):JSON.stringify(E)+",";l+=f,d!==0&&d%Jee===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw bt(new Error,Cr.INVALID_VALUE("format"),yt.BAD_REQUEST);return new Wee({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(ste,"export_to_s3");function d0(e,t){let r=El.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new Vee(n,s);return r.pipe(i)}a(d0,"toCsvStream");function f0(e){if(Sn.trace("in exportCoreValidation"),jr.isEmpty(e.format))return"format missing";if(c0.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${c0.join(", ")}`;let t=e.search_operation.operation;if(jr.isEmpty(t))return"search_operation.operation missing";if(a0.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${a0.join(", ")}`}a(f0,"exportCoreValidation");async function E0(e){Sn.trace("in getRecords");let t,r;if(fl.isEmpty(e.search_operation)||fl.isEmptyOrZeroLength(e.search_operation.operation))throw bt(new Error,Cr.INVALID_VALUE("Search operation"),yt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=jee;break;case"search_by_hash":t=Xee;break;case"search_by_conditions":t=Vg.searchByConditions;break;case"sql":t=Zee;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Sn.error(r),bt(new Error,r,yt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(E0,"getRecords")});var b0={};Fe(b0,{contentTypes:()=>Wg,findBestSerializer:()=>Zf,getDeserializer:()=>yo,registerContentHandlers:()=>Qg,serialize:()=>eE,serializeMessage:()=>Ro});function ite(e){try{return e?.[0]===123?Kg(e):e}catch{return e}}function Qg(e){e.register(ate,{serializers:[{regex:/^application\/json$/,serializer:Lc},{regex:/^application\/cbor$/,serializer:function(t){return new bo.EncoderStream(ml).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?jf.Readable.from((0,_s.encodeIter)(t,ml)):(0,_s.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Xf.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,_s.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,bo.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function Zf(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,E={q:1};for(let h of l){let p=h.indexOf("=");E[h.substring(0,p)]=h.substring(p+1)}d=+E.q;let f=Ft.get(_);if(f){let h=(f.q||1)*d;h>s&&(n=f,i=f.type||_,s=h,o=E)}}if(!n){if(r)throw new T0.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(Ft.keys()).join(", "),406);n=Ft.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function eE(e,t,r){let n=p0&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=Zf(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Gs.createBrotliCompress)({params:{[Gs.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Gs.constants.BROTLI_MODE_TEXT:Gs.constants.BROTLI_MODE_GENERIC,[Gs.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>p0?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Gs.brotliCompress)(s,(c,u)=>{c?o(c):i(u)}))):s}function Ro(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return hl(e);let r=t.serialize;if(r)return r(e);let n=Zf(t);return r=t.serialize=n.serializer.serialize,r(e)}function cte(e){return new Promise((t,r)=>{let n=[];e.on("data",s=>n.push(s)),e.on("end",()=>t(Buffer.concat(n))),e.on("error",r)})}function yo(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Ft.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Ft.get(e)?.deserialize||S0(e,n);return o=>cte(o).then(i)}return e&&Ft.get(e)?.deserialize||S0(e,n)}function S0(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return n=>({contentType:e,data:n.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return Kg(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function ute(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}var Xf,_s,bo,Gs,T0,jf,g0,$g,Yg,R0,A0,hl,Kg,ml,Ft,Wg,m0,O0,ote,ate,p0,Da=Re(()=>{cm();Xf=H(Jf()),_s=require("msgpackr"),bo=require("cbor-x"),Gs=require("zlib"),T0=H(se()),jf=require("stream");lr();g0=require("../index"),$g=H(ee()),Yg=H(P()),R0=H(require("yaml")),A0=$g.default.get(Yg.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,hl=A0?qi:JSON.stringify,Kg=A0?am:JSON.parse,ml={useRecords:!1,useToJSON:!0},Ft=new Map,Wg=Ft;at.contentTypes=Wg;(0,g0._assignPackageExport)("contentTypes",Wg);Ft.set("application/json",{serializeStream:Lc,serialize:hl,deserialize:Kg,q:.8});m0=new bo.Encoder(ml);Ft.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new bo.EncoderStream(ml).end(e)},serialize:m0.encode,deserialize:m0.decode,q:1});Ft.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?jf.Readable.from((0,_s.encodeIter)(e,ml)):(0,_s.pack)(e)},serialize:_s.pack,deserialize:_s.unpack,q:.9});Ft.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,Xf.toCsvStream)(e,e?.getColumns?.())},serialize(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),e&&!e[Symbol.iterator]&&(e=[e.toJSON?e.toJSON():e]),(0,Xf.toCsvStream)(e,e?.getColumns?.())},q:.1});Ft.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.2});Ft.set("text/yaml",{serialize(e){return R0.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Ft.set("text/event-stream",{serializeStream:function(e){return jf.Readable.from(ute(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
19
|
+
`,""):null}catch(E){E.stderr?i[u].npm_error=fv(E.stderr):i[u].npm_error=E.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return Pa.info(`finished installModules with response ${i}`),i}a(p7,"installModules");function fv(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
|
|
20
|
+
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(fv,"parseNPMStdErr");async function S7(e){Pa.info(`starting auditModules for request: ${e}`);let t=hv(e);if(t)throw La(t,t.message,Ma.BAD_REQUEST);let{projects:r}=e;await xf(),await Ev(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Bf.join(gg,o);n[o]={npm_output:null,npm_error:null};try{let u=await il("npm audit --json",c);n[o].npm_output=JSON.parse(u)}catch(u){n[o].npm_error=fv(u.stderr)}}return Pa.info(`finished auditModules with response ${n}`),n}a(S7,"auditModules");async function xf(){try{return await il("npm -v"),!0}catch{throw La(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Ma.BAD_REQUEST,void 0,void 0,!0)}}a(xf,"checkNPMInstalled");async function Ev(e){if(!Array.isArray(e)||e.length===0)throw La(new Error,"projects argument must be an array with at least 1 element",Ma.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Bf.join(gg,i.toString());if(!await lv.pathExists(o)){t.push(i);continue}let u=Bf.join(o,"package.json");await lv.pathExists(u)||r.push(i)}if(t.length>0)throw La(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Ma.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw La(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Ma.BAD_REQUEST,void 0,void 0,!0)}a(Ev,"checkProjectPaths");function hv(e){let t=vf.object({projects:vf.array().min(1).items(vf.string()).required(),dry_run:vf.boolean().default(!1)});return d7.validateBySchema(e,t)}a(hv,"modulesValidator")});var Ag=g((Ame,Rv)=>{"use strict";var Ua=require("fs-extra"),Rg=require("path"),Gf=$(),pv=z(),qf=P(),gv=ee(),T7=hr();Rv.exports=g7;async function g7(){let e=R7(),t=gv.get(qf.CONFIG_PARAMS.ROOTPATH),r=Rg.join(t,"package.json"),n={dependencies:{harperdb:"file:"+qf.PACKAGE_ROOT}},s=Rg.join(t,"node_modules");await Ua.ensureDir(s);let i,o=!0,c=!1;try{i=await Ua.readJson(r)}catch(u){if(pv.isEmptyOrZeroLength(e))return;if(u.code!==qf.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!pv.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await Sv(_);n.dependencies[u]=l+_}if(!o){Gf.notify("Installing components"),await Tv(r,n,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await Sv(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)n.dependencies[u]===void 0&&(Gf.notify("Removing component",u),c=!0);c&&(Gf.notify("Updating components."),await Tv(r,n,i))}a(g7,"installComponents");function R7(){let e=T7.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(R7,"getComponentsConfig");async function Sv(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Rg.extname(e)||await Ua.pathExists(e)?"file:":"github:"}a(Sv,"getPkgPrefix");async function Tv(e,t,r){Gf.trace("npm installing components package.json",t),await Ua.writeFile(e,JSON.stringify(t,null," "));try{await Hf().installAllRootModules(gv.get(qf.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Ua.writeFile(e,JSON.stringify(r,null," ")):await Ua.unlink(e),n}}a(Tv,"installPackages")});var yg=g((yme,yv)=>{"use strict";var $e=require("fs-extra"),Og=require("fast-glob"),ge=require("path"),Ov=require("tar-fs"),bme=require("uuid").v4,bg=require("normalize-path"),us=uv(),Ct=$(),Je=P(),Ot=ee(),ol=hr(),A7=z(),{PACKAGE_ROOT:O7}=P(),{handleHDBError:Gt,hdb_errors:b7}=se(),{basename:y7}=require("path"),N7=Ag(),bv=ee(),I7=P(),{Readable:w7}=require("stream"),{isMainThread:C7}=require("worker_threads"),{HDB_ERROR_MSGS:Ao,HTTP_STATUS_CODES:qt}=b7,D7=ge.join(O7,"application-template"),Av=ge.join(Ot.get(Je.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function L7(){Ct.trace("getting custom api status");let e={};try{e={port:Ot.get(Je.CONFIG_PARAMS.HTTP_PORT),directory:Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Gt(new Error,Ao.FUNCTION_STATUS,qt.INTERNAL_SERVER_ERROR,Ct.ERR,t)}return e}a(L7,"customFunctionsStatus");function M7(){Ct.trace("getting custom api endpoints");let e={},t=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT);try{Og.sync(bg(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:Og.sync(bg(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:Og.sync(bg(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Gt(new Error,Ao.GET_FUNCTIONS,qt.INTERNAL_SERVER_ERROR,Ct.ERR,r)}return e}a(M7,"getCustomFunctions");function P7(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=us.getDropCustomFunctionValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);Ct.trace("getting custom api endpoint file content");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=ge.join(r,n,s,i+".js");try{return $e.readFileSync(o,{encoding:"utf8"})}catch(c){throw Gt(new Error,Ao.GET_FUNCTION,qt.INTERNAL_SERVER_ERROR,Ct.ERR,c)}}a(P7,"getCustomFunction");function U7(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=us.setCustomFunctionValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);Ct.trace("setting custom function file content");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return $e.outputFileSync(ge.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Gt(new Error,Ao.SET_FUNCTION,qt.INTERNAL_SERVER_ERROR,Ct.ERR,c)}}a(U7,"setCustomFunction");function v7(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=us.getDropCustomFunctionValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);Ct.trace("dropping custom function file");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return $e.unlinkSync(ge.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Gt(new Error,Ao.DROP_FUNCTION,qt.INTERNAL_SERVER_ERROR,Ct.ERR,o)}}a(v7,"dropCustomFunction");function B7(e){e.project&&(e.project=ge.parse(e.project).name);let t=us.addComponentValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);Ct.trace("adding component");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=ge.join(r,n);return $e.mkdirSync(s,{recursive:!0}),$e.copySync(D7,s),`Successfully added project: ${n}`}catch(s){throw Gt(new Error,Ao.ADD_FUNCTION,qt.INTERNAL_SERVER_ERROR,Ct.ERR,s)}}a(B7,"addComponent");function x7(e){e.project&&(e.project=ge.parse(e.project).name);let t=us.dropCustomFunctionProjectValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);Ct.trace("dropping custom function project");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Ot.get(Je.CONFIG_PARAMS.APPS);if(!A7.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return ol.updateConfigValue(Je.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=ge.join(r,n);return $e.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Gt(new Error,Ao.DROP_FUNCTION_PROJECT,qt.INTERNAL_SERVER_ERROR,Ct.ERR,i)}}a(x7,"dropCustomFunctionProject");async function H7(e){e.project&&(e.project=ge.parse(e.project).name);let t=us.packageComponentValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Ct.trace("packaging component",n);let s;try{s=await $e.realpath(ge.join(r,n))}catch(u){if(u.code!==Je.NODE_ERROR_CODES.ENOENT)throw u;try{s=await $e.realpath(ge.join(Ot.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Je.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await $e.ensureDir(Av);let i=ge.join(Av,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(ge.join(s,"node_modules"))}),Ov.pack(s,o).pipe($e.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=$e.readFileSync(i,{encoding:"base64"});return await $e.remove(i),{project:n,payload:c}}a(H7,"packageComponent");async function G7(e){e.project&&(e.project=ge.parse(e.project).name);let t=us.deployComponentValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(Ct.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=ge.join(r,n),i="file:"+o,await $e.emptyDir(o);let E=w7.from(Buffer.from(s,"base64"));await new Promise((h,p)=>{E.pipe(Ov.extract(o,{finish:h})).on("error",p)});let f=await $e.readdir(o);f.length===1&&f[0]==="package"&&(await $e.copy(ge.join(o,"package"),o),await $e.remove(ge.join(o,"package")))}if(await ol.addConfig(n,{package:i}),!s){await N7();let E=bv.get(I7.CONFIG_PARAMS.ROOTPATH);o=ge.join(E,"node_modules",n)}if(C7)return;let c=new Map;c.isWorker=!0;let u=(kf(),ie(Ff)),_;u.setErrorReporter(E=>_=E);let l=y7(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return Ct.info("Installed component"),`Successfully deployed: ${n}`}a(G7,"deployComponent");async function q7(){let e=ol.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let u=await $e.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=ge.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let E={name:l,entries:[]};c.entries.push(E),await r(d,E)}else{let E=await $e.stat(d),f={name:ge.basename(l),mtime:E.mtime,size:E.size};c.entries.push(f)}}return c}catch(u){return Ct.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),n=await r(Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{name:Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT).split(ge.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(ge.join(Ot.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(kf(),ie(Ff)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return n}a(q7,"getComponents");async function F7(e){let t=us.getComponentFileValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);let n=ol.getConfigObj()[e.project]||e.project==="harperdb"?ge.join(bv.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules"):Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await $e.stat(ge.join(n,e.project,e.file));return{message:await $e.readFile(ge.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Je.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${ge.join(e.project,e.file)}'`):i}}a(F7,"getComponentFile");async function k7(e){let t=us.setComponentFileValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=ge.join(Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await $e.ensureFile(n),await $e.outputFile(n,e.payload,r)):await $e.ensureDir(n),"Successfully set component: "+e.file}a(k7,"setComponentFile");async function V7(e){let t=us.dropComponentFileValidator(e);if(t)throw Gt(t,t.message,qt.BAD_REQUEST);let r=e.file?ge.join(e.project,e.file):e.project,n=ge.join(Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),r);return await $e.pathExists(n)&&await $e.remove(n),ol.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(V7,"dropComponent");yv.exports={customFunctionsStatus:L7,getCustomFunctions:M7,getCustomFunction:P7,setCustomFunction:U7,dropCustomFunction:v7,addComponent:B7,dropCustomFunctionProject:x7,packageComponent:H7,deployComponent:G7,getComponents:q7,getComponentFile:F7,setComponentFile:k7,dropComponent:V7}});var Ng=g((Ime,Iv)=>{"use strict";var ls=require("joi"),Nv=Xe();Iv.exports={readTransactionLogValidator:$7,deleteTransactionLogsBeforeValidator:Y7};function $7(e){let t=ls.object({schema:ls.string().required(),table:ls.string().required(),from:ls.date().timestamp(),to:ls.date().timestamp(),limit:ls.number().min(1)});return Nv.validateBySchema(e,t)}a($7,"readTransactionLogValidator");function Y7(e){let t=ls.object({schema:ls.string().required(),table:ls.string().required(),timestamp:ls.date().timestamp().required()});return Nv.validateBySchema(e,t)}a(Y7,"deleteTransactionLogsBeforeValidator")});var Vf=g((Cme,Mv)=>{"use strict";var Ig=P(),al=ut(),wv=z(),Cv=ee(),Dv=Os(),{handleHDBError:va,hdb_errors:K7}=se(),{HTTP_STATUS_CODES:Ba}=K7,{readTransactionLogValidator:W7,deleteTransactionLogsBeforeValidator:Q7}=Ng(),Lv="This operation relies on clustering and cannot run with it disable.",z7="Logs successfully deleted from transaction log.",J7="All logs successfully deleted from transaction log.";Mv.exports={readTransactionLog:j7,deleteTransactionLogsBefore:X7};async function*j7(e){let t=W7(e);if(t)throw va(t,t.message,Ba.BAD_REQUEST,void 0,void 0,!0);if(!Cv.get(Ig.CONFIG_PARAMS.CLUSTERING_ENABLED))throw va(new Error,Lv,Ba.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=wv.checkSchemaTableExist(r,n);if(s)throw va(new Error,s,Ba.NOT_FOUND,void 0,void 0,!0);let i=Dv.createNatsTableStreamName(r,n),o=await al.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===Ig.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(j7,"readTransactionLog");async function X7(e){let t=Q7(e);if(t)throw va(t,t.message,Ba.BAD_REQUEST,void 0,void 0,!0);if(!Cv.get(Ig.CONFIG_PARAMS.CLUSTERING_ENABLED))throw va(new Error,Lv,Ba.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=wv.checkSchemaTableExist(r,n);if(i)throw va(new Error,i,Ba.NOT_FOUND,void 0,void 0,!0);let o=Dv.createNatsTableStreamName(r,n),{jsm:c}=await al.getNATSReferences(),u=await al.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let l=z7,d,E=new Date(u.state.last_ts).getTime();return s>E?(d=u.state.last_seq+1,l=J7):d=(await al.viewStream(o,parseInt(s),1))[0].nats_sequence,await al.purgeTableStream(r,n,{seq:d}),l}a(X7,"deleteTransactionLogsBefore")});var Uv=g((Lme,Pv)=>{"use strict";var wg=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};Pv.exports=wg});var Bv=g((Pme,vv)=>{"use strict";var Cg=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};vv.exports=Cg});var Lg=g((vme,Hv)=>{"use strict";var xv=Uv(),Z7=Bv(),{HDB_ERROR_MSGS:eee}=vr(),Dg=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=eee.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,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new xv(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let u=new Z7(c,s[c]);i.push(u)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new xv(r,n,[],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}};Hv.exports=Dg});var Wf=g((xme,e0)=>{"use strict";var Mg=Fr(),$f=qr(),pn=bu(),ll=bs(),Pg=ci(),tee=$S(),ree=qL(),_l=_n(),Yf=ZS(),Dt=$(),nee=rT(),see=af(),iee=vT(),oee=uf(),aee=xT(),cee=HT(),uee=FT(),lee=VT(),Ug=KT(),xs=z(),_ee=HP(),vg=jT(),Fv=ju(),mn=P(),kv=KU(),dee=Ra(),Vv=Du(),$v=(Pf(),ie(tl)),Yv=hr(),jr=yg(),fee=require("alasql"),Kv=Vf(),Wv=Hf(),Qv=Lg(),{handleHDBError:wr,hdb_errors:zv}=se(),{HDB_ERROR_MSGS:Wt,HTTP_STATUS_CODES:cl}=zv,V=new Map,Jv="delete",Ii="insert",Hs="read",Oo="update",ul="describe",Gv=ll.describeSchema.name,qv=ll.describeTable.name,jv={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Eee="catchup",hee="handleGetJob",mee="handleGetJobsByStartDate",Kf={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},pee=[pn.createTable.name,pn.createAttribute.name,pn.dropTable.name,pn.dropAttribute.name],Xv={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},W=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};V.set(Mg.insert.name,new W(!1,[Ii]));V.set(Mg.update.name,new W(!1,[Oo]));V.set(Mg.upsert.name,new W(!1,[Ii,Oo]));V.set($f.searchByConditions.name,new W(!1,[Hs]));V.set($f.searchByHash.name,new W(!1,[Hs]));V.set($f.searchByValue.name,new W(!1,[Hs]));V.set($f.search.name,new W(!1,[Hs]));V.set(pn.createSchema.name,new W(!0,[]));V.set(pn.createTable.name,new W(!0,[]));V.set(pn.createAttribute.name,new W(!1,[Ii]));V.set(pn.dropSchema.name,new W(!0,[]));V.set(pn.dropTable.name,new W(!0,[]));V.set(pn.dropAttribute.name,new W(!0,[]));V.set(ll.describeSchema.name,new W(!1,[Hs]));V.set(ll.describeTable.name,new W(!1,[Hs]));V.set(Pg.deleteRecord.name,new W(!1,[Jv]));V.set(_l.addUser.name,new W(!0,[]));V.set(_l.alterUser.name,new W(!0,[]));V.set(_l.dropUser.name,new W(!0,[]));V.set(_l.listUsersExternal.name,new W(!0,[]));V.set(Yf.listRoles.name,new W(!0,[]));V.set(Yf.addRole.name,new W(!0,[]));V.set(Yf.alterRole.name,new W(!0,[]));V.set(Yf.dropRole.name,new W(!0,[]));V.set(nee.name,new W(!0,[]));V.set(see.name,new W(!0,[]));V.set(iee.name,new W(!0,[]));V.set(oee.name,new W(!0,[]));V.set(aee.name,new W(!0,[]));V.set(cee.name,new W(!0,[]));V.set(Ug.setRoutes.name,new W(!0,[]));V.set(Ug.getRoutes.name,new W(!0,[]));V.set(Ug.deleteRoutes.name,new W(!0,[]));V.set(Yv.setConfiguration.name,new W(!0,[]));V.set(uee.clusterStatus.name,new W(!0,[]));V.set(lee.name,new W(!0,[]));V.set(vg.getFingerprint.name,new W(!0,[]));V.set(vg.setLicense.name,new W(!0,[]));V.set(Pg.deleteFilesBefore.name,new W(!0,[]));V.set(Pg.deleteAuditLogsBefore.name,new W(!0,[]));V.set(Fv.restart.name,new W(!0,[]));V.set(Fv.restartService.name,new W(!0,[]));V.set(tee.name,new W(!0,[]));V.set(ree.name,new W(!0,[Hs]));V.set(dee.systemInformation.name,new W(!0,[]));V.set(Yv.getConfiguration.name,new W(!0,[]));V.set(Kv.readTransactionLog.name,new W(!0,[]));V.set(Kv.deleteTransactionLogsBefore.name,new W(!0,[]));V.set(Wv.installModules.name,new W(!0,[]));V.set(Wv.auditModules.name,new W(!0,[]));V.set(Vv.createTokens.name,new W(!1,[]));V.set(Vv.refreshOperationToken.name,new W(!1,[]));V.set($v.login.name,new W(!1,[]));V.set($v.logout.name,new W(!1,[]));V.set(jr.customFunctionsStatus.name,new W(!0,[]));V.set(jr.getCustomFunctions.name,new W(!0,[]));V.set(jr.getComponents.name,new W(!0,[]));V.set(jr.getComponentFile.name,new W(!0,[]));V.set(jr.setComponentFile.name,new W(!0,[]));V.set(jr.dropComponent.name,new W(!0,[]));V.set(jr.getCustomFunction.name,new W(!0,[]));V.set(jr.setCustomFunction.name,new W(!0,[]));V.set(jr.dropCustomFunction.name,new W(!0,[]));V.set(jr.addComponent.name,new W(!0,[]));V.set(jr.dropCustomFunctionProject.name,new W(!0,[]));V.set(jr.packageComponent.name,new W(!0,[]));V.set(jr.deployComponent.name,new W(!0,[]));V.set(vg.getRegistrationInfo.name,new W(!1,[]));V.set(_l.userInfo.name,new W(!1,[]));V.set(ll.describeAll.name,new W(!1,[]));V.set(hee,new W(!1,[]));V.set(mee,new W(!0,[]));V.set(Eee,new W(!0,[]));V.set(Kf.CSV_DATA_LOAD,new W(!1,[Ii,Oo]));V.set(Kf.CSV_URL_LOAD,new W(!1,[Ii,Oo]));V.set(Kf.CSV_FILE_LOAD,new W(!1,[Ii,Oo]));V.set(Kf.IMPORT_FROM_S3,new W(!1,[Ii,Oo]));V.set(Xv.EXPORT_TO_S3,new W(!0,[]));V.set(Xv.EXPORT_LOCAL,new W(!0,[]));V.set(mn.VALID_SQL_OPS_ENUM.DELETE,new W(!1,[Jv]));V.set(mn.VALID_SQL_OPS_ENUM.SELECT,new W(!1,[Hs]));V.set(mn.VALID_SQL_OPS_ENUM.INSERT,new W(!1,[Ii]));V.set(mn.VALID_SQL_OPS_ENUM.UPDATE,new W(!1,[Oo]));e0.exports={verifyPerms:Tee,verifyPermsAst:See,verifyBulkLoadAttributePerms:Ree};function See(e,t,r){if(xs.isEmptyOrZeroLength(e))throw Dt.info("verify_perms_ast has an empty user parameter"),wr(new Error);if(xs.isEmptyOrZeroLength(t))throw Dt.info("verify_perms_ast has an empty user parameter"),wr(new Error);if(xs.isEmptyOrZeroLength(r))throw Dt.info("verify_perms_ast has a null operation parameter"),wr(new Error);try{let n=new Qv,s=new _ee(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Dt.info("No schemas defined in verifyPermsAst(), will not continue."),wr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&jv[r])throw wr(new Error,Wt.DROP_SYSTEM,cl.FORBIDDEN);if(c&&!u)return null;let _=kv.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof fee.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let E=s.getTablesBySchemaName(i[d]);E&&o.set(i[d],E)}let l=Zv(t,r,o,n);return l||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=s.getAttributesBySchemaTableName(E,d[f]),p=xg(t.role.permission,E,d[f]);Bg(h,p,r,d[f],E,n)}}),n.getPermsResponse())}catch(n){throw wr(n)}}a(See,"verifyPermsAst");function Tee(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Dt.info("null required parameter in verifyPerms"),wr(new Error,Wt.DEFAULT_INVALID_REQUEST,cl.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new Qv;if(xs.isEmptyOrZeroLength(e.hdb_user?.role)||xs.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Dt.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Wt.USER_HAS_NO_PERMS(e.hdb_user?.username));let u=!!e.hdb_user?.role?.permission?.super_user,_=e.hdb_user?.role?.permission?.structure_user,l=o.has(mn.SYSTEM_SCHEMA_NAME)||s===mn.SYSTEM_SCHEMA_NAME;if(l&&jv[r])throw wr(new Error,Wt.DROP_SYSTEM,cl.FORBIDDEN);if(u&&!l||_===!0&&(r===pn.createSchema.name||r===pn.dropSchema.name))return null;if(pee.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=kv.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=d),r===Gv||r===qv){if(s===mn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Wt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===Gv&&(!d[s]||!d[s][ul]))return c.handleInvalidItem(Wt.SCHEMA_NOT_FOUND(s));if(r===qv&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][ul]))return c.handleInvalidItem(Wt.TABLE_NOT_FOUND(s,i))}}let E=Zv(e.hdb_user,r,o,c,n);if(E)return E;if(V.get(r)&&V.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&mn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[s].tables[i];S[mn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(A=>A[mn.PERMS_CRUD_ENUM.READ]).forEach(A=>{p.push(A.attribute_name)}):p=global.hdb_schema[s][i].attributes.map(T=>T.attribute),e.get_attributes=p)}let f=gee(e),h=xg(e.hdb_user?.role?.permission,s,i);return Bg(f,h,r,i,s,c,n),c.getPermsResponse()}a(Tee,"verifyPerms");function Zv(e,t,r,n,s){if(xs.arrayHasEmptyValues([e,t,r]))throw Dt.info("hasPermissions has an invalid parameter"),wr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||V.get(t).requires_su))return null;if(!V.get(t))throw Dt.info(`operation ${t} not found.`),wr(new Error,Wt.OP_NOT_FOUND(t),cl.BAD_REQUEST);if(V.get(t)&&V.get(t).requires_su)return Dt.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Wt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][ul]===!1){n.addInvalidItem(Wt.SCHEMA_NOT_FOUND(u));continue}}catch{n.addInvalidItem(Wt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[ul]===!1)n.addInvalidItem(Wt.TABLE_NOT_FOUND(u,l));else try{let E=[],f=V.get(t).perms;!xs.isEmpty(s)&&f.includes(s)&&(f=[s]);for(let h=0;h<f.length;h++){let p=f[h],S=d[p];(S==null||S===!1)&&(Dt.info(`Required ${p} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),E.push(p))}E.length>0&&n.addUnauthorizedTable(u,l,E)}catch(E){let f=Wt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Dt.error(f),Dt.error(E),wr(zv.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?n.getPermsResponse():null}a(Zv,"hasPermissions");function Bg(e,t,r,n,s,i,o){if(!e||!t)throw Dt.info("no attributes specified in checkAttributePerms."),wr(new Error);let c=V.get(r).perms;if(!c||c==="")throw Dt.info(`no permissions found for ${r} in checkAttributePerms().`),wr(new Error);if(xs.isEmptyOrZeroLength(t))return Dt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[ul]===!1){i.addInvalidItem(Wt.ATTR_NOT_FOUND(s,n,l),s,n);continue}if(c)for(let E of c){if(mn.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==Hs)throw wr(new Error,Wt.SYSTEM_TIMESTAMP_PERMS_ERR,cl.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(Wt.ATTR_NOT_FOUND(s,n,l),s,n)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,s,n,u)}a(Bg,"checkAttributePerms");function gee(e){let t=new Set;try{if(e.action)return t;if(e.operation===mn.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 n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Dt.info(r)}return t}a(gee,"getRecordAttributes");function xg(e,t,r){let n=new Map;if(xs.isEmpty(e))return Dt.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Dt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(xg,"getAttributePermissions");function Ree(e,t,r,n,s,i,o){let c=new Set(i),u=xg(e,n,s);Bg(c,u,t,s,n,o,r)}a(Ree,"verifyBulkLoadAttributePerms")});var zf=g((Gme,i0)=>{"use strict";i0.exports={evaluateSQL:Uee,processAST:s0,convertSQLToAST:n0,checkASTPermissions:r0};var Aee=Fr(),t0=require("util"),Oee=t0.callbackify(Aee.insert),bee=qr().search,yee=bD().update,Nee=t0.callbackify(yee),Iee=ND().convertDelete,wi=require("alasql"),wee=Wf(),Qf=$(),Cee=bd(),Dee=z(),dl=P(),{hdb_errors:Lee,handleHDBError:Hg}=se(),{HTTP_STATUS_CODES:Gg}=Lee;Cee(wi);var Mee=403,Pee="There was a problem performing this insert. Please check the logs and try again.",qg=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Uee(e,t){let r=e.parsed_sql_object;if(!r){r=n0(e.sql);let n,s=r.ast.statements[0];if(s instanceof wi.yy.Insert?n=s.into.databaseid:s instanceof wi.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof wi.yy.Update||s instanceof wi.yy.Delete?n=s.table.databaseid:Qf.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof wi.yy.Select)&&Dee.isEmptyOrZeroLength(n))return t("No schema specified",null)}s0(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Uee,"evaluateSQL");function r0(e,t){let r;try{r=wee.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(r0,"checkASTPermissions");function n0(e){let t=new qg;if(!e)throw Hg(new Error,"The 'sql' parameter is missing from the request body",Gg.BAD_REQUEST);try{let r=e.trim(),n=wi.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
21
|
+
`);throw n[1]?Hg(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Gg.BAD_REQUEST):Hg(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Gg.BAD_REQUEST)}return t}a(n0,"convertSQLToAST");function s0(e,t,r){try{let n=vee;if(!e.bypass_auth&&!t.permissions_checked){let i=r0(e,t);if(i&&i.length>0)return r(Mee,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case dl.VALID_SQL_OPS_ENUM.SELECT:n=bee,s=t.ast.statements[0];break;case dl.VALID_SQL_OPS_ENUM.INSERT:n=Bee;break;case dl.VALID_SQL_OPS_ENUM.UPDATE:n=Nee;break;case dl.VALID_SQL_OPS_ENUM.DELETE:n=Iee;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(s0,"processAST");function vee(e,t){Qf.info(e),t("unknown sql statement")}a(vee,"nullFunction");function Bee({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=xee(i,e.values)}catch(o){return r(o)}Oee(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Qf.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(Bee,"convertInsert");function xee(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 n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=wi.compile(`SELECT ${s.toString()} AS [${dl.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Qf.error(r),new Error(Pee)}}a(xee,"createDataObjects")});var Fg=g((Fme,a0)=>{"use strict";var{S3:Hee,GetObjectCommand:Gee}=require("@aws-sdk/client-s3");a0.exports={getFileStreamFromS3:qee,getS3AuthObj:o0};async function qee(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await o0(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Gee(r))).Body}a(qee,"getFileStreamFromS3");function o0(e,t,r){return new Hee({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(o0,"getS3AuthObj")});var Jf=g((Vme,m0)=>{"use strict";var Vg=qr(),Fee=zf(),kee=Fg(),{AsyncParser:Vee,Transform:$ee}=require("json2csv"),El=require("stream"),Xr=z(),kg=require("fs-extra"),Yee=require("path"),Sn=$(),{promisify:l0}=require("util"),fl=z(),{handleHDBError:bt,hdb_errors:Kee}=se(),{HDB_ERROR_MSGS:Cr,HTTP_STATUS_CODES:yt}=Kee,{streamAsJSON:Wee}=(cm(),ie(Gb)),{Upload:Qee}=require("@aws-sdk/lib-storage"),c0=["search_by_value","search_by_hash","sql","search_by_conditions"],u0=["json","csv"],_0="json",d0="csv",zee="Successfully exported JSON locally.",Jee="Successfully exported CSV locally.",jee=1e3,Xee=Vg.searchByHash,Zee=Vg.searchByValue,ete=l0(Fee.evaluateSQL),tte=l0(El.finished);m0.exports={export_to_s3:ite,export_local:rte,toCsvStream:f0};async function rte(e){Sn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=E0(e);if(!Xr.isEmpty(t))throw Sn.error(t),bt(new Error,t,yt.BAD_REQUEST,void 0,void 0,!0);if(Xr.isEmpty(e.path))throw Sn.error(Cr.MISSING_VALUE("path")),bt(new Error,Cr.MISSING_VALUE("path"),yt.BAD_REQUEST,void 0,void 0,!0);let r=(Xr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Yee.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Xr.buildFolderPath(e.path,r);await nte(e.path);let s=await h0(e);return await ste(n,e.format,s)}a(rte,"export_local");async function nte(e){if(Sn.trace("in confirmPath"),Xr.isEmptyOrZeroLength(e))throw bt(new Error,`Invalid path: ${e}`,yt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await kg.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,Sn.error(n),bt(new Error,n,yt.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 Sn.error(r),bt(new Error,r,yt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(nte,"confirmPath");async function ste(e,t,r){if(Sn.trace("in saveToLocal"),fl.isEmptyOrZeroLength(e))throw bt(new Error,Cr.INVALID_VALUE("file_path"),yt.BAD_REQUEST,void 0,void 0,!0);if(fl.isEmptyOrZeroLength(t))throw bt(new Error,Cr.INVALID_VALUE("Source format"),yt.BAD_REQUEST,void 0,void 0,!0);if(fl.isEmpty(r))throw bt(new Error,Cr.NOT_FOUND("Data"),yt.BAD_REQUEST,void 0,void 0,!0);if(t===_0){let n=kg.createWriteStream(e);return Wee(r).pipe(n),await tte(n),{message:zee,path:e}}else if(t===d0){let n=kg.createWriteStream(e),s=El.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(l=>({label:l,value:l})));let c={objectMode:!0};return await new Vee(i,c).fromInput(s).toOutput(n).promise(!1),{message:Jee,path:e}}throw bt(new Error,Cr.INVALID_VALUE("format"),yt.BAD_REQUEST)}a(ste,"saveToLocal");async function ite(e){if(!e.s3||Object.keys(e.s3).length===0)throw bt(new Error,Cr.MISSING_VALUE("S3 object"),yt.BAD_REQUEST);if(Xr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw bt(new Error,Cr.MISSING_VALUE("aws_access_key_id"),yt.BAD_REQUEST);if(Xr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw bt(new Error,Cr.MISSING_VALUE("aws_secret_access_key"),yt.BAD_REQUEST);if(Xr.isEmptyOrZeroLength(e.s3.bucket))throw bt(new Error,Cr.MISSING_VALUE("bucket"),yt.BAD_REQUEST);if(Xr.isEmptyOrZeroLength(e.s3.key))throw bt(new Error,Cr.MISSING_VALUE("key"),yt.BAD_REQUEST);if(Xr.isEmptyOrZeroLength(e.s3.region))throw bt(new Error,Cr.MISSING_VALUE("region"),yt.BAD_REQUEST);let t=E0(e);if(!Xr.isEmpty(t))throw bt(new Error,t,yt.BAD_REQUEST);Sn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await h0(e)}catch(u){throw Sn.error(u),u}let n,s=await kee.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new El.PassThrough;if(e.format===d0){i=e.s3.key+".csv";let u=f0(r,r.getColumns?.());u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===_0){i=e.s3.key+".json";let u=new El.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,E]of r.entries()){let f=d===_-1?JSON.stringify(E):JSON.stringify(E)+",";l+=f,d!==0&&d%jee===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw bt(new Error,Cr.INVALID_VALUE("format"),yt.BAD_REQUEST);return new Qee({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(ite,"export_to_s3");function f0(e,t){let r=El.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new $ee(n,s);return r.pipe(i)}a(f0,"toCsvStream");function E0(e){if(Sn.trace("in exportCoreValidation"),Xr.isEmpty(e.format))return"format missing";if(u0.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${u0.join(", ")}`;let t=e.search_operation.operation;if(Xr.isEmpty(t))return"search_operation.operation missing";if(c0.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${c0.join(", ")}`}a(E0,"exportCoreValidation");async function h0(e){Sn.trace("in getRecords");let t,r;if(fl.isEmpty(e.search_operation)||fl.isEmptyOrZeroLength(e.search_operation.operation))throw bt(new Error,Cr.INVALID_VALUE("Search operation"),yt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Zee;break;case"search_by_hash":t=Xee;break;case"search_by_conditions":t=Vg.searchByConditions;break;case"sql":t=ete;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Sn.error(r),bt(new Error,r,yt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(h0,"getRecords")});var y0={};Fe(y0,{contentTypes:()=>Wg,findBestSerializer:()=>Zf,getDeserializer:()=>yo,registerContentHandlers:()=>Qg,serialize:()=>eE,serializeMessage:()=>Ro});function ote(e){try{return e?.[0]===123?Kg(e):e}catch{return e}}function Qg(e){e.register(cte,{serializers:[{regex:/^application\/json$/,serializer:Lc},{regex:/^application\/cbor$/,serializer:function(t){return new bo.EncoderStream(ml).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Xf.Readable.from((0,_s.encodeIter)(t,ml)):(0,_s.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,jf.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,_s.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,bo.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function Zf(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,E={q:1};for(let h of l){let p=h.indexOf("=");E[h.substring(0,p)]=h.substring(p+1)}d=+E.q;let f=Ft.get(_);if(f){let h=(f.q||1)*d;h>s&&(n=f,i=f.type||_,s=h,o=E)}}if(!n){if(r)throw new g0.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(Ft.keys()).join(", "),406);n=Ft.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function eE(e,t,r){let n=S0&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=Zf(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Gs.createBrotliCompress)({params:{[Gs.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Gs.constants.BROTLI_MODE_TEXT:Gs.constants.BROTLI_MODE_GENERIC,[Gs.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>S0?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Gs.brotliCompress)(s,(c,u)=>{c?o(c):i(u)}))):s}function Ro(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return hl(e);let r=t.serialize;if(r)return r(e);let n=Zf(t);return r=t.serialize=n.serializer.serialize,r(e)}function ute(e){return new Promise((t,r)=>{let n=[];e.on("data",s=>n.push(s)),e.on("end",()=>t(Buffer.concat(n))),e.on("error",r)})}function yo(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Ft.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Ft.get(e)?.deserialize||T0(e,n);return o=>ute(o).then(i)}return e&&Ft.get(e)?.deserialize||T0(e,n)}function T0(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return n=>({contentType:e,data:n.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return Kg(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function lte(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}var jf,_s,bo,Gs,g0,Xf,R0,$g,Yg,A0,O0,hl,Kg,ml,Ft,Wg,p0,b0,ate,cte,S0,Da=Re(()=>{cm();jf=H(Jf()),_s=require("msgpackr"),bo=require("cbor-x"),Gs=require("zlib"),g0=H(se()),Xf=require("stream");_r();R0=require("../index"),$g=H(ee()),Yg=H(P()),A0=H(require("yaml")),O0=$g.default.get(Yg.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,hl=O0?qi:JSON.stringify,Kg=O0?am:JSON.parse,ml={useRecords:!1,useToJSON:!0},Ft=new Map,Wg=Ft;at.contentTypes=Wg;(0,R0._assignPackageExport)("contentTypes",Wg);Ft.set("application/json",{serializeStream:Lc,serialize:hl,deserialize:Kg,q:.8});p0=new bo.Encoder(ml);Ft.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new bo.EncoderStream(ml).end(e)},serialize:p0.encode,deserialize:p0.decode,q:1});Ft.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Xf.Readable.from((0,_s.encodeIter)(e,ml)):(0,_s.pack)(e)},serialize:_s.pack,deserialize:_s.unpack,q:.9});Ft.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,jf.toCsvStream)(e,e?.getColumns?.())},serialize(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),e&&!e[Symbol.iterator]&&(e=[e.toJSON?e.toJSON():e]),(0,jf.toCsvStream)(e,e?.getColumns?.())},q:.1});Ft.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.2});Ft.set("text/yaml",{serialize(e){return A0.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Ft.set("text/event-stream",{serializeStream:function(e){return Xf.Readable.from(lte(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
22
22
|
`),e.data){let r=e.data;typeof r=="object"&&(r=hl(r)),t+="data: "+r+`
|
|
23
23
|
`}return e.id&&(t+="id: "+e.id+`
|
|
24
24
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
@@ -27,8 +27,8 @@ Database backup has not been removed and can be found here: ${s}`;Wu.error(u),co
|
|
|
27
27
|
|
|
28
28
|
`:`data: ${e}
|
|
29
29
|
|
|
30
|
-
`},compressible:!1,q:.8});Ft.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});O0={type:"application/json",serializeStream:Lc,serialize:hl,deserialize:ite,q:.5};Ft.set("*/*",O0);Ft.set("",O0);a(ite,"tryJSONParse");a(Qg,"registerContentHandlers");ote=require("fastify-plugin"),ate=ote(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Zf(n.raw);s.type(c),s.serializer(function(u){return(o.serializeStream||o.serialize)(u,{headers:{set:(_,l)=>{s.header(_,l)}}})})}),r()},{name:"content-type-negotiation"});a(Zf,"findBestSerializer");p0=$g.default.get(Yg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(eE,"serialize");a(Ro,"serializeMessage");a(cte,"streamToBuffer");a(yo,"getDeserializer");a(S0,"deserializerUnknownType");a(ute,"transformIterable")});function Xg(e,t,r,n,s,i,o,c){let u=e[0];if(t==="or"){let d=_(u);for(let f=1;f<e.length;f++){let h=e[f],p=_(h);d=d.concat(p)}let E=new Set;return d.filter(f=>{let h=f.key??f;return E.has(h)?!1:(E.add(h),!0)})}else{let d=_(u),E=l(e.slice(1),!0,u.estimated_count);return E.length>0?o(d,E):d}function _(d){return d.conditions?Xg(d.conditions,d.operator,r,n,s,i,o,c):Ga(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function l(d,E,f){return d.map((h,p)=>{if(h.conditions){let A=h.operator==="or",b=l(h.conditions,!A,f);return A?(I,B)=>b.some(U=>U(I,B)):(I,B)=>b.every(U=>U(I,B))}let S=(h.attribute||h[0])===r.primaryKey,T=Tl(h,r,i,c,S,f);return E&&p<d.length-1&&f&&(f=Ste(r.primaryStore,h.estimated_count,f)),T}).filter(Boolean)}a(l,"mapConditionsToFilters")}function Ga(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,u=e.comparator;if(Array.isArray(o)){let A=o[0],b=Fs(n.attributes,A);if(b.relationship){if(o.length<2)throw new Zr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let I=b.definition?.tableClass||b.elements?.definition?.tableClass,B=new Map,U=Ga({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,I,s,B);if(b.relationship.to){i[o[0]]=B;let F=!!Fs(I.attributes,b.relationship.to)?.elements;U=Ete(U,b,I.primaryStore,F,B)}if(b.relationship.from){let F=a(M=>Ga({attribute:b.relationship.from,value:M},t,r,n,s,B),"searchEntry");b.elements?(i[o[0]]=B,U=hte(U,b,I.primaryStore,B,F)):U=U.flatMap(F)}return U}else if(o.length===1)o=o[0];else throw new Zr.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,E;c instanceof Date&&(c=c.getTime());let f;switch(jg[u]||u){case"lt":_=!0,l=c;break;case"le":_=!0,l=c,d=!0;break;case"gt":_=c,E=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,l=c.slice(0),l[l.length-1]=ds.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),l=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),l=c[1],l instanceof Date&&(l=l.getTime()),d=!0;break;case"equals":case void 0:_=c,l=c,d=!0;break;case"ne":if(c===null){_=c,E=!0;break}case"sort":case"contains":case"ends_with":_=!0,f=!0;break;default:throw new Zr.ClientError(`Unknown query comparator "${u}"`)}let h,p=o===n.primaryKey||o==null;if(typeof _=="string"&&_.length>Tn.MAX_SEARCH_KEY_LENGTH&&(_=_.slice(0,Tn.MAX_SEARCH_KEY_LENGTH)+Tn.OVERFLOW_MARKER,E=!1,h=Tl(e,n,null,i,p)),typeof l=="string"&&l.length>Tn.MAX_SEARCH_KEY_LENGTH&&(l=l.slice(0,Tn.MAX_SEARCH_KEY_LENGTH)+Tn.OVERFLOW_MARKER,d=!0,h=h??Tl(e,n,null,i,p)),r){let A=_;_=l,l=A,A=!E,E=!d,d=A}let S=p?n.primaryStore:n.indices[o];if(!S||S.isIndexing||f||c===null&&!S.indexNulls){if(s===!1&&!S)throw new Zr.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&f)throw new Zr.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(S?.isIndexing)throw new Zr.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!S.indexNulls)throw new Zr.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(h=h??Tl(e,n,null,i,p),!h)throw new Zr.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:_,end:l,inclusiveEnd:d,exclusiveStart:E,values:!0,versions:p,transaction:t,reverse:r};if(p){let A=S.getRange(T).map(h?function({key:b,value:I}){return this.isSync?I&&h(I)?b:Ci.SKIP:new Promise((B,U)=>setImmediate(()=>{try{B(I&&h(I)?b:Ci.SKIP)}catch(F){U(F)}}))}:b=>b.value==null?Ci.SKIP:b);return A.hasEntries=!0,A}else return S?S.getRange(T).map(h?function({key:A,value:b}){let I;return typeof A=="string"&&A.length>Tn.MAX_SEARCH_KEY_LENGTH?I=n.primaryStore.get(b):I={[o]:A},this.isSync?h(I)?b:Ci.SKIP:new Promise((B,U)=>setImmediate(()=>{try{B(h(I)?b:Ci.SKIP)}catch(F){U(F)}}))}:({value:A})=>A):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:A,value:b}){return this.isSync?b&&h(b)?A:Ci.SKIP:new Promise((I,B)=>setImmediate(()=>{try{I(b&&h(b)?A:Ci.SKIP)}catch(U){B(U)}}))})}function Fs(e,t){if(Array.isArray(t))if(t.length>1){let r=Fs(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Fs(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function Ete(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let u=t.relationship.to,_=a((l,d)=>{let E=l;Array.isArray(l)&&(E=Gn(l),o=!0);let f=s.get(E);f?f.push(d):s.set(E,f=[d]),l!==E&&(f.key=l)},"add_entry");for(let l of e){let d=l.value??r.get(l.key??l),E=d?.[u];if(E!=null&&!s.filters?.some(f=>!f(d)))if(n)for(let f=0;f<E.length;f++)_(E[f],l);else _(E,l)}return i=(o?s:s.keys())[Symbol.iterator](),this.next()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}},return(){if(i?.return)return i.return()}}}})}function hte(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let u;if(o)for(;u=o.next(),!u.done;){let _=Gn(u.value);if(!c.has(_))return c.add(_),u}if(!i){let _=new Map;n.fromRecord=l=>l[t.relationship.from]?.filter?.(d=>_.has(Gn(d)));for(let l of e){if(n.filters){let d=r.get(l);if(n.filters.some(E=>!E(d)))continue}_.set(Gn(l),l)}return i=_.values()[Symbol.iterator](),this.next()}do{let _=i.next();return _.done?_:(o=s(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function Tl(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,u=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let l=c[0],d=Fs(t.attributes,l),E=d.definition?.tableClass||d.elements.definition?.tableClass,f=n?.[l],h=Tl({attribute:c.length>2?c.slice(1):c[1],value:u,comparator:o},E,r,f?.[l]?.joined,c[1]===E.primaryKey,i);if(!h)return;if(f){f.filters||(f.filters=[]),f.filters.push(h);return}let p=t.propertyResolvers?.[l],S,T=a((A,b)=>{let I,B;if(p){if(p.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let F of h.idFilter.idSet)e={attribute:p.from,value:F};S=_(p.from,h.idFilter,!0,!0)}else S=_(p.from,h.idFilter,!1,!0);let U=S(A);return S.idFilter&&(T.idFilter=S.idFilter),U}B=p(A,r,b),I=B?.value}else I=A[l];return I?Array.isArray(I)?I.some(h):h(I,B):!1},"recordFilter");return T}}switch(u instanceof Date&&(u=u.getTime()),jg[o]||o){case Tn.SEARCH_TYPES.EQUALS:case void 0:return _(c,l=>l===u,!0);case"contains":return _(c,l=>l?.toString().includes(u));case"ends_with":return _(c,l=>l?.toString().endsWith(u));case"starts_with":return _(c,l=>typeof l=="string"&&l.startsWith(u),!0);case"prefix":return Array.isArray(u)?u[u.length-1]==null&&(u=u.slice(0,-1)):u=[u],_(c,l=>{if(!Array.isArray(l))return!1;for(let d=0,E=u.length;d<E;d++)if(l[d]!==u[d])return!1;return!0},!0);case"between":return u[0]instanceof Date&&(u[0]=u[0].getTime()),u[1]instanceof Date&&(u[1]=u[1].getTime()),_(c,l=>(0,ds.compareKeys)(l,u[0])>=0&&(0,ds.compareKeys)(l,u[1])<=0,!0);case"gt":return _(c,l=>(0,ds.compareKeys)(l,u)>0);case"ge":return _(c,l=>(0,ds.compareKeys)(l,u)>=0);case"lt":return _(c,l=>(0,ds.compareKeys)(l,u)<0);case"le":return _(c,l=>(0,ds.compareKeys)(l,u)<=0);case"ne":return _(c,l=>(0,ds.compareKeys)(l,u)!==0);case"sort":return()=>!0;default:throw new Zr.ClientError(`Unknown query comparator "${o}"`)}function _(l,d,E,f){let h;E=E&&!s&&t?.indices[l]&&i>3,E&&(e.estimated_count==null&&rE(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(E=!1));let p=0,S=3;function T(A){let b=A[l],I;if(typeof b!="object"||!b||f?I=d(b):Array.isArray(b)?I=b.some(d):b instanceof Date&&(I=d(b.getTime())),E&&(S++,!I&&!T.idFilter&&++p/S*(i-S)>h)){let B=Ga(e,r.transaction.getReadTxn(),!1,t).map(Gn),U=new Set(B);T.idFilter=F=>U.has(Gn(F)),T.idFilter.idSet=U}return I}return a(T,"recordFilter"),s&&(T.idFilter=d),T}a(_,"attributeComparator")}function rE(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/qs(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=jg[n]||n,n===Tn.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=Fs(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=rE(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),u=e.indices[i.relationship.from];r.estimated_count=c+(u?c*qs(e.indices[i.relationship.from])/(qs(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=qs(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=dte*qs(e.primaryStore)+1:n==="between"?r.estimated_count=_te*qs(e.primaryStore)+1:n==="sort"?r.estimated_count=qs(e.primaryStore)+1:r.estimated_count=lte*qs(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function nE(e){if(e)if(Di=e,xa.lastIndex=0,mte.test(e))try{let t=pl(new Ha,"");if(Dr!==Di.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${Dr} in '${Di}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function pl(e,t){let r=xa,n,s,i,o,c,u=decodeURIComponent,_;for(;n=r.exec(Di);){Dr=r.lastIndex;let[,l,d]=n;if(o){if(l)throw new SyntaxError(`expected operator, but encountered '${l}'`);o=!1,c=!1}else c=!0;let E;switch(d){case"=":if(s){if(l.length<=2)i=l;else throw new SyntaxError(`invalid FIQL operator ${l}`);u=zg}else{if(u=decodeURIComponent,i="equals",!l)throw new SyntaxError("attribute must be specified before equality comparator");s=Sl(l)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=fte[d],u=Jg[i]?zg:decodeURIComponent,!l)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=Sl(l);break;case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s,value:u(l)};i==="eq"&&y0(h,l),tE(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Sl(l)),s=void 0;break;case"(":xa.lastIndex=Dr;let f=pl(l?[]:new Ha,")");switch(l){case"":tE(e,_),e.conditions.push(f);break;case"limit":switch(f.length){case 1:e.limit=+f[0];break;case 2:e.offset=+f[0],e.limit=f[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(f[0])&&f.length===1&&!f[0].name?(e.select=f[0],e.select.asArray=!0):f.length===1?e.select=f[0]:f.length===2&&f[1]===""?e.select=f.slice(0,1):e.select=f;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=N0(f);break;default:throw new SyntaxError(`unknown query function call ${l}`)}Di[Dr]===","?r.lastIndex=++Dr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!l)throw new SyntaxError("property sets must have a defined parent property name");xa.lastIndex=Dr,E=pl([],"}"),E.name=l,e.push(E),Di[Dr]===","?r.lastIndex=++Dr:o=!0;break;case"[":xa.lastIndex=Dr,l?(E=pl(new Ha,"]"),E.name=l):E=pl(e.conditions?new Ha:[],"]"),e.conditions?(tE(e,_),e.conditions.push(E),s=null):e.push(E),Di[Dr]===","?r.lastIndex=++Dr:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:u(l)};i==="eq"&&y0(h,l),tE(e,_),e.conditions.push(h)}else if(l)throw new SyntaxError("no attribute or comparison specified")}else(l||e.length>0&&c)&&e.push(Sl(l));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?pte:xa,r.lastIndex=Dr),Dr===Di.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function tE(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function Sl(e){return e.indexOf(".")>-1?e.split(".").map(Sl):decodeURIComponent(e)}function zg(e){if(e==="null")return null;if(e.indexOf("/")>-1){let t=e.split("/"),r=new qa(t.length);for(let n=0,s=t.length;n<s;n++)r[n]=zg(t[n]);return r}if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new Zr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function y0(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Zr.ClientError("wildcard can only be used at the end of a string")}function N0(e){let t=I0(e[0]);return e.length>1&&(t.next=N0(e.slice(1))),t}function I0(e){if(Array.isArray(e)){let t=I0(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}throw new SyntaxError(`Unknown sort type ${e}`)}function Gn(e){return Array.isArray(e)?e.join("\0"):e}function qs(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function Ste(e,t,r){return t*r/qs(e)}var Zr,Tn,ds,Ci,lte,_te,dte,fte,Jg,jg,mte,xa,pte,Dr,Di,Ha,sE=Re(()=>{Zr=H(se()),Tn=H(ft()),ds=require("ordered-binary"),Ci=require("lmdb");cn();lte=.3,_te=.1,dte=.05,fte={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},Jg={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(Xg,"executeConditions");a(Ga,"searchByIndex");a(Fs,"findAttribute");a(Ete,"joinTo");a(hte,"joinFrom");jg={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(Tl,"filterByType");a(rE,"estimateCondition");mte=/[()[\]|!<>.]|(=\w*=)/,xa=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,pte=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(nE,"parseQuery");a(pl,"parseBlock");a(tE,"assignOperator");a(Sl,"decodeProperty");a(zg,"typedDecoding");a(y0,"wildcardDecoding");a(N0,"toSortObject");a(I0,"toSortEntry");Ha=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 n=this.conditions[r];if(n.attribute===t)return n.value}}};a(Gn,"flattenKey");a(qs,"estimatedEntryCount");a(Ste,"intersectionEstimate")});function M0(e){let t={openapi:Tte,info:{title:"HarperDB HTTP REST interface",version:(0,L0.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:u}=n.Resource;if(c=c??"id",!c)continue;let _={},l=[];if(o)for(let{type:b,name:I,elements:B,relationship:U,definition:F}of o){if(U)b==="array"?_[I]={type:"array",items:{$ref:Li+B.type}}:_[I]={$ref:Li+b};else{let M=F??B?.definition;if(M){if(!t.components.schemas[M.type]){let Q={};M.properties.forEach(J=>{Q[J.name]=new rR(Zg[J.type],J.type)}),t.components.schemas[M.type]=new D0(Q)}b==="array"?_[I]={type:"array",items:{$ref:Li+M.type}}:_[I]={$ref:Li+M.type}}else b==="array"?B.type==="Any"||B.type=="ID"?_[I]={type:"array",items:{format:B.type}}:_[I]={type:"array",items:new rR(Zg[B.type],B.type)}:b==="Any"||b=="ID"?_[I]={format:b}:_[I]=new rR(Zg[b],b)}l.push(new nR(I,"query",_[I]))}let d=Object.keys(_),E=new nR(c,"path",{format:"ID"});E.required=!0,E.description="primary key of record";let f=new nR("property","path",{enum:d});f.required=!0,t.components.schemas[i]=new D0(_);let h=u.post!==Resource.prototype.post||u.update,p=typeof u.put=="function",S=typeof u.get=="function",T=typeof u.delete=="function",A="/"+s+"/";h&&(t.paths[A]={},t.paths[A].post=new gte(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[A]||(t.paths[A]={}),t.paths[A].get=new eR(l,r,{200:new tR({$ref:Li+i})},"search for records by the specified property name and value pairs")),T&&(t.paths[A]||(t.paths[A]={}),t.paths[A].delete=new C0(l,r,"delete all the records that match the provided query",{204:new w0})),A="/"+s+"/{"+c+"}",S&&(t.paths[A]={},t.paths[A].get=new eR([E],r,{200:new tR({$ref:Li+i})},"retrieve a record by its primary key")),p&&(t.paths[A]||(t.paths[A]={}),t.paths[A].put=new Rte([E],r,i,"create or update the record with the URL path that maps to the record's primary key")),T&&(t.paths[A]||(t.paths[A]={}),t.paths[A].delete=new C0([E],r,"delete a record with the given primary key",{204:new w0})),S&&f.schema.enum.length>0&&(A="/"+s+"/{"+c+"}.{property}",t.paths[A]={},t.paths[A].get=new eR([E,f],r,{200:new tR({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function gte(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Li+e}}}},this.security=t,this.responses={200:{description:sR,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function eR(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function tR(e){this.description=sR,this.content={"application/json":{schema:e}}}function w0(){this.description="successfully processed request, no content returned to client"}function Rte(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Li+r}}}},this.responses={200:{description:sR}}}function C0(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function D0(e){this.type="object",this.properties=e}function rR(e,t){this.type=e,this.format=t}function nR(e,t,r){this.name=e,this.in=t,this.schema=r}var L0,Tte,Zg,Li,sR,P0=Re(()=>{L0=H(ef()),Tte="3.0.3",Zg={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Li="#/components/schemas/",sR="successful operation";a(M0,"generateJsonApi");a(gte,"Post");a(eR,"Get");a(tR,"Response200");a(w0,"Response204");a(Rte,"Put");a(C0,"Delete");a(D0,"ResourceSchema");a(rR,"Type");a(nR,"Parameter")});var oE={};Fe(oE,{start:()=>bte});async function Ote(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&nE(e);let s=new Ni;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==U0){let h=iE.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let u=r["cache-control"];if(u){u=u.toLowerCase();let h=u.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),u.includes("only-if-cached")&&(e.onlyIfCached=!0),u.includes("no-cache")&&(e.noCache=!0),u.includes("no-store")&&(e.noCacheStore=!0),u.includes("stale-if-error")&&(e.staleIfError=!0),u.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await rt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=yo(r["content-type"],!0)(e.body,e.headers)}catch(h){throw new Fa.ClientError(h,400)}if(e.authorize=!0,i===U0&&n==="GET"){if(e?.user?.role?.permission?.super_user)return M0(iE);throw new Fa.ServerError("Forbidden",403)}switch(n){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,r.destination,e);case"MOVE":return c.move(o,r.destination,e);case"BREW":throw new Fa.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Fa.ServerError(`Method ${n} is not recognized`,501)}}),l=200,d;if(_==null)l=n==="GET"||n==="HEAD"?404:204,iR.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){Ate[0]=d;let h=String.fromCharCode(34,(Qt[0]&63)+62,(Qt[0]>>6)+(Qt[1]<<2&63)+62,(Qt[1]>>4)+(Qt[2]<<4&63)+62,(Qt[2]>>2)+62,(Qt[3]&63)+62,(Qt[3]>>6)+(Qt[4]<<2&63)+62,(Qt[4]>>4)+(Qt[5]<<4&63)+62,(Qt[5]>>2)+62,(Qt[6]&63)+62,(Qt[6]>>6)+(Qt[7]<<2&63)+62,34),p=r["if-none-match"];p&&h==p?(_?.onDone&&_.onDone(),l=304,_=void 0):s.setIfNone("ETag",h),iR.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(l=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let E={status:l,headers:s,body:void 0},f=_?.wasLoadedFromSource?.();return f!==void 0&&(E.wasCacheMiss=f,!f&&d&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(E.body=eE(_,e,E),n==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?No.warn(i):No.info(i):No.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=eE(i.contentType?i:i.toString(),e,o),o}}function bte(e){iR=e,!v0&&(v0=!0,iE=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Ote(t,r)},e),e.server.ws(async(t,r,n)=>{gl++;let s=new In;B0||(B0=!0,mu(u=>{gl>0&&u.push({metric:"ws-connections",connections:gl,byThread:!0})}));let i;t.on("error",u=>{i=!0,No.warn(u)});let o;t.on("message",a(function(_){o||(o=yo(r.requestedContentType??r.headers.asObject["content-type"],!1));let l=o(_);s.push(l)},"message"));let c;t.on("close",()=>{gl--,Qr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let u=r.url.slice(1),_=iE.getMatch(u);if(Qr(!!_,"connection","ws","connect"),_){r.handlerPath=_.path,Sr(h=>({count:h.count,total:gl}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await rt(r,()=>d.connect(l,s,r)))[Symbol.asyncIterator]();let f;for(;!(f=await c.next()).done;){let h=Ro(f.value,r);t.send(h),Sr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(u){t.close(yte[u.statusCode]||1011,u.toString()),t.close("login failed")}t.close()},e))}var No,Fa,Qt,Ate,iR,U0,v0,iE,B0,gl,yte,x0=Re(()=>{Da();Ds();No=H($()),Fa=H(se());sE();Cc();so();el();P0();Qt=new Uint8Array(8),Ate=new Float64Array(Qt.buffer,0,1),iR={},U0="openapi";a(Ote,"http");gl=0;a(bte,"start");yte={401:3e3,403:3003}});var oR=g((ape,G0)=>{var{recordAction:aE,recordActionBinary:H0}=(Ds(),ie(pu)),Nte=require("fastify-plugin"),Ite=200;G0.exports=Nte(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),u=s.request.routeOptions,_,l,d;u.config?.isOperation?(_=n.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),aE(o,"duration",_,d,l),H0(s.raw.statusCode<400,"success",_,d,l),H0(1,"response_"+s.raw.statusCode,_,d,l);let E=Ite;i?.pipe?(i.on("data",S=>{E+=S.length}),i.on("end",()=>{aE(performance.now()-c,"transfer",_,d,l),aE(E,"bytes-sent",_,d,l)})):(E+=i?.length||0,aE(E,"bytes-sent",_,d,l));let f=o.toFixed(3),h=s.getHeader("Server-Timing"),p=`db;dur=${f}`;s.header("Server-Timing",h?`${h}, ${p}`:p)}),r()},{name:"hdb-request-time"})});var dR=g((lpe,V0)=>{var _E=require("clone"),dE=je(),wte=z(),uE=P(),cpe=$(),aR=require("fs"),uR=require("joi"),{string:lE}=uR.types(),{hdb_errors:Cte,handleHDBError:cE}=se(),{HDB_ERROR_MSGS:upe,HTTP_STATUS_CODES:cR}=Cte,{common_validators:ka}=Xn(),q0=" is required",Dte=["insert","update","upsert"],lR={database:{presence:!1,format:ka.schema_format,length:ka.schema_length},schema:{presence:!1,format:ka.schema_format,length:ka.schema_length},table:{presence:!0,format:ka.schema_format,length:ka.schema_length},action:{inclusion:{within:Dte,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Lte={schema:lE.required(),table:lE.required(),action:lE.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Mte,AWS_SECRET:Pte,AWS_BUCKET:Ute,AWS_FILE_KEY:vte,REGION:Bte}=uE.S3_BUCKET_AUTH_KEYS,xte={s3:{presence:!0},[`s3.${Mte}`]:{presence:!0,type:"String"},[`s3.${Pte}`]:{presence:!0,type:"String"},[`s3.${Ute}`]:{presence:!0,type:"String"},[`s3.${vte}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Bte}`]:{presence:!0,type:"String"}},F0=_E(lR);F0.data.presence={message:q0};var k0=_E(lR);k0.file_path.presence={message:q0};var Hte=Object.assign(_E(lR),xte),_R=_E(Lte);_R.csv_url=lE.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();_R.passthrough_headers=uR.object();function Gte(e){let t=dE.validateObject(e,F0);return fE(e,t)}a(Gte,"dataObject");function qte(e){let t=dE.validateBySchema(e,uR.object(_R));return fE(e,t)}a(qte,"urlObject");function Fte(e){let t=dE.validateObject(e,k0);return fE(e,t)}a(Fte,"fileObject");function kte(e){let t=dE.validateObject(e,Hte);return fE(e,t)}a(kte,"s3FileObject");function fE(e,t){if(!t){let r=wte.checkGlobalSchemaTable(e.schema,e.table);if(r)return cE(new Error,r,cR.BAD_REQUEST);if(e.operation===uE.OPERATIONS_ENUM.CSV_FILE_LOAD)try{aR.accessSync(e.file_path,aR.constants.R_OK|aR.constants.F_OK)}catch(n){return n.code===uE.NODE_ERROR_CODES.ENOENT?cE(n,`No such file or directory ${n.path}`,cR.BAD_REQUEST):n.code===uE.NODE_ERROR_CODES.EACCES?cE(n,`Permission denied ${n.path}`,cR.BAD_REQUEST):cE(n)}}return t}a(fE,"postValidateChecks");V0.exports={dataObject:Gte,urlObject:qte,fileObject:Fte,s3FileObject:kte}});var fR=g((dpe,$0)=>{"use strict";var Rl=$(),EE=P();async function Vte(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===EE.OPERATIONS_ENUM.INSERT||t.operation===EE.OPERATIONS_ENUM.UPDATE||t.operation===EE.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===EE.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Rl.info(i.message),i):i.http_resp_msg?(Rl.error(`Error calling operation: ${e.name}`),Rl.error(i.http_resp_msg),i):(Rl.error(`Error calling operation: ${e.name}`),Rl.error(i),i)}}a(Vte,"callOperationFunctionAsAwait");$0.exports={callOperationFunctionAsAwait:Vte}});var K0=g((Epe,Y0)=>{"use strict";var ER=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},hR=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};Y0.exports={BulkLoadFileObject:ER,BulkLoadDataObject:hR}});var Q0=g((mpe,W0)=>{"use strict";var mR=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};W0.exports=mR});var AR=g((Ape,_B)=>{"use strict";var hE=Fr(),pE=dR(),$te=require("needle"),qn=P(),Spe=Ve(),Va=z(),{handleHDBError:lt,hdb_errors:nB}=se(),{HTTP_STATUS_CODES:zt,HDB_ERROR_MSGS:Lt,CHECK_LOGS_WRAPPER:wo}=nB,$a=$(),pR=require("papaparse");Va.promisifyPapaParse();var Fn=require("fs-extra"),Yte=require("path"),{chain:z0}=require("stream-chain"),J0=require("stream-json/streamers/StreamArray"),X0=require("stream-json/utils/Batch"),j0=require("stream-chain/utils/comp"),{finished:Z0}=require("stream"),Kte=ee(),sB=fR(),Wte=Fg(),{BulkLoadFileObject:TR,BulkLoadDataObject:Qte}=K0(),gR=Lg(),{verifyBulkLoadAttributePerms:iB}=Wf(),Tpe=Q0(),gpe=ut(),Rpe=Os(),{databases:zte}=(Ae(),ie(ke)),{coerceType:Jte}=(SE(),ie(OR)),eB="No records parsed from csv file.",Io=`${Kte.get("HDB_ROOT")}/tmp`,{schema_regex:Xte}=Xn(),tB=1024*1024*2,rB=5e3,jte={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};_B.exports={csvDataLoad:Zte,csvURLLoad:ere,csvFileLoad:tre,importFromS3:rre};async function Zte(e,t){let r=pE.dataObject(e);if(r)throw lt(r,r.message,zt.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=cB(e.schema,e.table),i=pR.parse(e.data,{header:!0,skipEmptyLines:!0,transform:SR.bind(null,s),dynamicTyping:!1}),o=new gR;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&iB(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw lt(new Error,c,zt.BAD_REQUEST,void 0,void 0,!0);let u=new Qte(e.action,e.schema,e.table,i.data);return n=await sB.callOperationFunctionAsAwait(uB,u,null),n.message===eB?eB:lB(n.records,n.number_written)}catch(s){throw Co(s)}}a(Zte,"csvDataLoad");async function ere(e){let t=pE.urlObject(e);if(t)throw lt(t,t.message,zt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Io}/${r}`;try{await nre(e,r)}catch(s){throw $a.error(Lt.DOWNLOAD_FILE_ERR(r)+" - "+s),lt(s,wo(Lt.DOWNLOAD_FILE_ERR(r)))}try{let s=new TR(this.job_operation_function.name,e.action,e.schema,e.table,n,qn.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await RR(s);return await mE(n),i}catch(s){throw await mE(n),Co(s)}}a(ere,"csvURLLoad");async function tre(e){let t=pE.fileObject(e);if(t)throw lt(t,t.message,zt.BAD_REQUEST,void 0,void 0,!0);let r=new TR(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,qn.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await RR(r)}catch(n){throw Co(n)}}a(tre,"csvFileLoad");async function rre(e){let t=pE.s3FileObject(e);if(t)throw lt(t,t.message,zt.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Yte.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Io}/${s}`;let i=new TR(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await sre(s,e);let o=await RR(i);return await mE(r),o}catch(n){throw await mE(r),Co(n)}}a(rre,"importFromS3");async function nre(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await $te("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw lt(n,s,n.statusCode,qn.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}ore(r,e.csv_url),await ire(t,r.raw)}a(nre,"downloadCSVFile");async function sre(e,t){try{let r=`${Io}/${e}`;await Fn.mkdirp(Io),await Fn.writeFile(`${Io}/${e}`,"",{flag:"a+"});let n=await Fn.createWriteStream(r),s=await Wte.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){$a.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw $a.error(Lt.S3_DOWNLOAD_ERR+" - "+r),lt(r,wo(Lt.S3_DOWNLOAD_ERR))}}a(sre,"downloadFileFromS3");async function ire(e,t){try{await Fn.mkdirp(Io),await Fn.writeFile(`${Io}/${e}`,t)}catch(r){throw $a.error(Lt.WRITE_TEMP_FILE_ERR),lt(r,wo(Lt.DEFAULT_BULK_LOAD_ERR))}}a(ire,"writeFileToTempFolder");async function mE(e){if(e)try{await Fn.access(e),await Fn.unlink(e)}catch{$a.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(mE,"deleteTempFile");function ore(e,t){if(e.statusCode!==nB.HTTP_STATUS_CODES.OK)throw lt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,zt.BAD_REQUEST);if(!jte[e.headers["content-type"]])throw lt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,zt.BAD_REQUEST);if(!e.raw)throw lt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,zt.BAD_REQUEST)}a(ore,"validateURLResponse");async function RR(e){try{let t;switch(e.file_type){case qn.VALID_S3_FILE_TYPES.CSV:t=await are(e);break;case qn.VALID_S3_FILE_TYPES.JSON:t=await cre(e);break;default:throw lt(new Error,Lt.DEFAULT_BULK_LOAD_ERR,zt.BAD_REQUEST,qn.LOG_LEVELS.ERROR,Lt.INVALID_FILE_EXT_ERR(e))}return lB(t.records,t.number_written)}catch(t){throw Co(t)}}a(RR,"fileLoad");async function oB(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await hE.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&iB(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let u=lt(c);r(u)}}a(oB,"validateChunk");async function aB(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Va.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Va.isEmpty(c)&&!Va.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await sB.callOperationFunctionAsAwait(uB,c,null);t.records+=u.records,t.number_written+=u.number_written,s&&s.resume()}catch(c){let u=lt(c,wo(Lt.INSERT_CSV_ERR),zt.INTERNAL_SERVER_ERROR,qn.LOG_LEVELS.ERROR,Lt.INSERT_CSV_ERR+" - "+c);r(u)}}a(aB,"insertChunk");async function are(e){let t={records:0,number_written:0},r=cB(e.schema,e.table);try{let n=new gR,s=Fn.createReadStream(e.file_path,{highWaterMark:tB});s.setEncoding("utf8"),await pR.parsePromise(s,oB.bind(null,e,n),SR.bind(null,r));let i=n.getPermsResponse();if(i)throw lt(new Error,i,zt.BAD_REQUEST);return s=Fn.createReadStream(e.file_path,{highWaterMark:tB}),s.setEncoding("utf8"),await pR.parsePromise(s,aB.bind(null,e,t),SR.bind(null,r)),s.destroy(),t}catch(n){throw lt(n,wo(Lt.PAPA_PARSE_ERR),zt.INTERNAL_SERVER_ERROR,qn.LOG_LEVELS.ERROR,Lt.PAPA_PARSE_ERR+n)}}a(are,"callPapaParse");function cB(e,t){let r=zte[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>Jte(i,s));return n}a(cB,"createTransformMap");function SR(e,t,r){let n=e.get(r);return n?n(t):Va.autoCast(t)}a(SR,"typeFunction");async function cre(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new gR,s=z0([Fn.createReadStream(e.file_path,{encoding:"utf-8"}),J0.withParser(),c=>c.value,new X0({batchSize:rB}),j0(async c=>{await oB(e,n,r,c)})]);await new Promise((c,u)=>{Z0(s,_=>{_?u(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw lt(new Error,i,zt.BAD_REQUEST);let o=z0([Fn.createReadStream(e.file_path,{encoding:"utf-8"}),J0.withParser(),c=>c.value,new X0({batchSize:rB}),j0(async c=>{await aB(e,t,r,c)})]);return await new Promise((c,u)=>{Z0(o,_=>{_?u(_):c()}),o.resume()}),t}catch(n){throw lt(n,wo(Lt.INSERT_JSON_ERR),zt.INTERNAL_SERVER_ERROR,qn.LOG_LEVELS.ERROR,Lt.INSERT_JSON_ERR+n)}}a(cre,"insertJson");async function uB(e){let t={};try{e.data&&e.data.length>0&&ure(e.data[0])?t=await lre(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",$a.info(t.message))}catch(r){throw Co(r)}return t}a(uB,"callBulkFileLoad");function ure(e){let t=Object.keys(e);for(let r of t)if(!Xte.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(ure,"validateColumnNames");async function lre(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=hE.insert;break;case"update":i=hE.update;break;case"upsert":i=hE.upsert;break;default:throw lt(new Error,Lt.INVALID_ACTION_PARAM_ERR(n),zt.BAD_REQUEST,qn.LOG_LEVELS.ERROR,Lt.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=Va.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Co(o)}}a(lre,"bulkFileLoad");function lB(e,t){return`successfully loaded ${t} of ${e} records`}a(lB,"buildResponseMsg");function Co(e){return lt(e,wo(Lt.DEFAULT_BULK_LOAD_ERR),zt.INTERNAL_SERVER_ERROR,qn.LOG_LEVELS.ERROR,Lt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Co,"buildTopLevelErrMsg")});var fB=g((bpe,dB)=>{"use strict";var bR=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};dB.exports=bR});var mB=g((Npe,hB)=>{"use strict";var _re=P(),EB=require("moment"),dre=require("uuid").v4,yR=class{static{a(this,"JobObject")}constructor(){this.id=dre(),this.type=void 0,this.start_datetime=EB().valueOf(),this.created_datetime=EB().valueOf(),this.end_datetime=void 0,this.status=_re.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};hB.exports=yR});var NR=g((wpe,bB)=>{"use strict";var fre=require("uuid").v4,RB=Fr(),AB=qr(),Ere=rs(),hre=oa(),mre=fB(),Ze=P(),pre=mB(),Sre=Wd(),gn=$(),Tre=Ic(),Ya=z(),{promisify:gre}=require("util"),Do=require("moment"),Rre=zf(),TE=dR(),pB=Xm(),{deleteTransactionLogsBeforeValidator:Are}=Ng(),{handleHDBError:SB,hdb_errors:Ore}=se(),{HTTP_STATUS_CODES:TB}=Ore,gB=AB.searchByValue,bre=AB.searchByHash,yre=RB.insert,Nre=gre(Rre.evaluateSQL),Ire=RB.update;bB.exports={addJob:Dre,updateJob:Mre,handleGetJob:wre,handleGetJobsByStartDate:Cre,getJobById:OB};async function wre(e){try{let t=await OB(e.id);return Ya.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 gn.error("There was an error getting job",t),new Error(r)}}a(wre,"handleGetJob");async function Cre(e){try{let t=await Lre(e);if(gn.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=Do(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Do(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 gn.error(r),new Error(r)}}a(Cre,"handleGetJobsByStartDate");async function Dre(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ya.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return gn.info(l),t.error=l,t}if(!Ze.JOB_TYPE_ENUM[e.operation])return gn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ze.OPERATIONS_ENUM.CSV_FILE_LOAD:n=TE.fileObject(e);break;case Ze.OPERATIONS_ENUM.CSV_URL_LOAD:n=TE.urlObject(e);break;case Ze.OPERATIONS_ENUM.CSV_DATA_LOAD:n=TE.dataObject(e);break;case Ze.OPERATIONS_ENUM.IMPORT_FROM_S3:n=TE.s3FileObject(e);break;case Ze.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ze.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=pB(e,"date");break;case Ze.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=pB(e,"timestamp");break;case Ze.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Are(e);break;case Ze.OPERATIONS_ENUM.RESTART_SERVICE:if(Ze.PROCESS_DESCRIPTORS_VALIDATE[e.service]===void 0)throw SB(new Error,"Invalid service",TB.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw SB(n,n.message,TB.BAD_REQUEST,void 0,void 0,!0);let s=new pre;s.type=e.operation===Ze.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ze.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new Ere(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await gB(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return gn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=fre();try{o=await gB(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return gn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return gn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let u=new Tre(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await yre(u)}catch(l){return gn.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let l=`Created a job with type ${s.type} and id ${s.id}`;t.message=l,t.createdJob=s,t.success=!0,gn.trace(l)}return t}a(Dre,"addJob");async function Lre(e){let t=Do(e.from_date,Do.ISO_8601),r=Do(e.to_date,Do.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 n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new mre(n,e.hdb_user);try{return await Nre(s)}catch(i){throw gn.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(Lre,"getJobsInDateRange");async function OB(e){if(Ya.isEmptyOrZeroLength(e))return Ya.errorizeMessage("Invalid job ID specified.");let t=new hre(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await bre(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return gn.error(n),Ya.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(OB,"getJobById");async function Mre(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ya.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ze.JOB_STATUS_ENUM.COMPLETE||e.status===Ze.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Do().valueOf());let t=new Sre(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Ire(t),r}a(Mre,"updateJob")});var MB=g((Dpe,LB)=>{"use strict";var yB=z(),Mt=P(),Pre=require("moment"),gE=AR(),Al=$(),NB=NR(),IB=Jf(),wB=ci(),CB=Qe(),Ure=Vf(),vre=Xu(),{parentPort:Bre,isMainThread:DB}=require("worker_threads"),{onMessageByType:xre}=Qe(),IR=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Hre(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(yB.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(yB.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Mt.JOB_TYPE_ENUM.csv_file_load:await Es(e,gE.csvFileLoad);break;case Mt.JOB_TYPE_ENUM.csv_url_load:await Es(e,gE.csvURLLoad);break;case Mt.JOB_TYPE_ENUM.csv_data_load:await Es(e,gE.csvDataLoad);break;case Mt.JOB_TYPE_ENUM.import_from_s3:await Es(e,gE.importFromS3);break;case Mt.JOB_TYPE_ENUM.empty_trash:break;case Mt.JOB_TYPE_ENUM.export_local:await Es(e,IB.export_local);break;case Mt.JOB_TYPE_ENUM.export_to_s3:await Es(e,IB.export_to_s3);break;case Mt.JOB_TYPE_ENUM.delete_files_before:case Mt.JOB_TYPE_ENUM.delete_records_before:await Es(e,wB.deleteFilesBefore);break;case Mt.JOB_TYPE_ENUM.delete_audit_logs_before:await Es(e,wB.deleteAuditLogsBefore);break;case Mt.JOB_TYPE_ENUM.delete_transaction_logs_before:await Es(e,Ure.deleteTransactionLogsBefore);break;case Mt.JOB_TYPE_ENUM.restart_service:return await Es(e,vre.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(Hre,"parseMessage");async function Es(e,t){try{e.job.status=Mt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Pre().valueOf(),await NB.updateJob(e.job),await Gre(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):Al.error(`There was an error running ${t.name} job with id ${e.job.id}`),Al.error(n),e.job.message=n,e.job.status=Mt.JOB_STATUS_ENUM.ERROR;try{await NB.updateJob(e.job)}catch(s){throw Al.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Es,"runJob");async function Gre(e){Al.trace("launching job thread:",e),DB?CB.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Mt.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})}):Bre.postMessage({type:Mt.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(Gre,"launchJobThread");DB&&xre(Mt.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{CB.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Mt.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`})})}catch(r){Al.error(r)}});LB.exports={parseMessage:Hre,RunnerMessage:IR}});var UB=g((Mpe,PB)=>{"use strict";var wR=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};PB.exports=wR});var XB=g((Upe,UR)=>{"use strict";var yE=qr(),LR=zf(),RE=AR(),ks=bu(),AE=bs(),bl=ci(),qre=$S(),Ol=_n(),OE=ZS(),Jt=yg(),bE=$(),Fre=rT(),kre=af(),vB=vT(),Vre=uf(),$re=xT(),Yre=HT(),Kre=FT(),Wre=VT(),CR=KT(),BB=Jf(),Qre=Wf(),MR=NR(),k=P(),{hdb_errors:Nl,handleHDBError:yl}=se(),{HTTP_STATUS_CODES:xB}=Nl,DR=XT(),HB=Xu(),WB=require("util"),Ka=Fr(),zre=ys(),Jre=Ra(),GB=MB(),qB=Du(),FB=(Pf(),ie(tl)),kB=Er(),VB=Vf(),$B=Hf(),{setServerUtilities:Xre}=(SE(),ie(OR)),{CONTEXT:jre}=(cn(),ie($p)),{_assignPackageExport:Zre}=require("../index"),{transformReq:ene}=z(),{server:tne}=(lr(),ie(Gi)),or=bE.loggerWithTag("operation"),rne=fR(),YB=yE.searchByHash,nne=yE.searchByValue,sne=WB.promisify(yE.search),ine=WB.promisify(LR.evaluateSQL),one={[k.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[k.OPERATIONS_ENUM.CREATE_TABLE]:!0,[k.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[k.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[k.OPERATIONS_ENUM.DROP_TABLE]:!0,[k.OPERATIONS_ENUM.DROP_SCHEMA]:!0},Y=UB();async function QB(e,t){try{if(e.body.operation!=="read_log"&&(bE.log_level===k.LOG_LEVELS.INFO||bE.log_level===k.LOG_LEVELS.DEBUG||bE.log_level===k.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;or.info(o)}}catch(n){or.error(n)}let r=await rne.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return one[e.body.operation]&&zre.setSchemaDataToGlobal(n=>{n&&or.error(n)}),r}a(QB,"processLocalTransaction");var KB=cne();UR.exports={chooseOperation:zB,getOperationFunction:JB,operation:PR,processLocalTransaction:QB};Xre(UR.exports);tne.operation=PR;function zB(e){let t;try{t=JB(e)}catch(s){throw or.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=LR.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=LR.checkASTPermissions(e,i);if(o)throw or.error(`${xB.FORBIDDEN} from operation ${e.operation}`),or.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),yl(new Error,o,Nl.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==k.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==k.OPERATIONS_ENUM.LOGIN&&e.operation!==k.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=Qre.verifyPerms(i,s);if(o)throw or.error(`${xB.FORBIDDEN} from operation ${e.operation}`),or.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),yl(new Error,o,Nl.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw yl(s,"There was an error when trying to choose an operation path")}return r}a(zB,"chooseOperation");function JB(e){if(or.trace(`getOperationFunction with operation: ${e.operation}`),KB.has(e.operation))return KB.get(e.operation);throw yl(new Error,Nl.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Nl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(JB,"getOperationFunction");Zre("operation",PR);function PR(e,t){e.hdb_user=this[jre]?.user,e.bypass_auth=!t;let r=zB(e);return QB({body:e},r)}a(PR,"operation");async function ane(e){or.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[k.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case k.OPERATIONS_ENUM.INSERT:o=await Ka.insert(i);break;case k.OPERATIONS_ENUM.UPDATE:o=await Ka.update(i);break;case k.OPERATIONS_ENUM.UPSERT:o=await Ka.upsert(i);break;case k.OPERATIONS_ENUM.DELETE:o=await bl.deleteRecord(i);break;default:or.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){or.info("Invalid operation in transaction"),or.error(o)}}a(ane,"catchup");async function kn(e){ene(e);let t,r;try{r=await MR.addJob(e),t=r.createdJob,or.info("addJob result",r);let n=new GB.RunnerMessage(t,e);return{message:await GB.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw or.error(s),yl(n,s)}}a(kn,"executeJob");function cne(){let e=new Map;return e.set(k.OPERATIONS_ENUM.INSERT,new Y(Ka.insert)),e.set(k.OPERATIONS_ENUM.UPDATE,new Y(Ka.update)),e.set(k.OPERATIONS_ENUM.UPSERT,new Y(Ka.upsert)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new Y(yE.searchByConditions)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_HASH,new Y(YB)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_ID,new Y(YB)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_VALUE,new Y(nne)),e.set(k.OPERATIONS_ENUM.SEARCH,new Y(sne)),e.set(k.OPERATIONS_ENUM.SQL,new Y(ine)),e.set(k.OPERATIONS_ENUM.CSV_DATA_LOAD,new Y(kn,RE.csvDataLoad)),e.set(k.OPERATIONS_ENUM.CSV_FILE_LOAD,new Y(kn,RE.csvFileLoad)),e.set(k.OPERATIONS_ENUM.CSV_URL_LOAD,new Y(kn,RE.csvURLLoad)),e.set(k.OPERATIONS_ENUM.IMPORT_FROM_S3,new Y(kn,RE.importFromS3)),e.set(k.OPERATIONS_ENUM.CREATE_SCHEMA,new Y(ks.createSchema)),e.set(k.OPERATIONS_ENUM.CREATE_DATABASE,new Y(ks.createSchema)),e.set(k.OPERATIONS_ENUM.CREATE_TABLE,new Y(ks.createTable)),e.set(k.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new Y(ks.createAttribute)),e.set(k.OPERATIONS_ENUM.DROP_SCHEMA,new Y(ks.dropSchema)),e.set(k.OPERATIONS_ENUM.DROP_DATABASE,new Y(ks.dropSchema)),e.set(k.OPERATIONS_ENUM.DROP_TABLE,new Y(ks.dropTable)),e.set(k.OPERATIONS_ENUM.DROP_ATTRIBUTE,new Y(ks.dropAttribute)),e.set(k.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new Y(AE.describeSchema)),e.set(k.OPERATIONS_ENUM.DESCRIBE_DATABASE,new Y(AE.describeSchema)),e.set(k.OPERATIONS_ENUM.DESCRIBE_TABLE,new Y(AE.describeTable)),e.set(k.OPERATIONS_ENUM.DESCRIBE_ALL,new Y(AE.describeAll)),e.set(k.OPERATIONS_ENUM.DELETE,new Y(bl.deleteRecord)),e.set(k.OPERATIONS_ENUM.ADD_USER,new Y(Ol.addUser)),e.set(k.OPERATIONS_ENUM.ALTER_USER,new Y(Ol.alterUser)),e.set(k.OPERATIONS_ENUM.DROP_USER,new Y(Ol.dropUser)),e.set(k.OPERATIONS_ENUM.LIST_USERS,new Y(Ol.listUsersExternal)),e.set(k.OPERATIONS_ENUM.LIST_ROLES,new Y(OE.listRoles)),e.set(k.OPERATIONS_ENUM.ADD_ROLE,new Y(OE.addRole)),e.set(k.OPERATIONS_ENUM.ALTER_ROLE,new Y(OE.alterRole)),e.set(k.OPERATIONS_ENUM.DROP_ROLE,new Y(OE.dropRole)),e.set(k.OPERATIONS_ENUM.USER_INFO,new Y(Ol.userInfo)),e.set(k.OPERATIONS_ENUM.READ_LOG,new Y(Fre)),e.set(k.OPERATIONS_ENUM.ADD_NODE,new Y(kre)),e.set(k.OPERATIONS_ENUM.UPDATE_NODE,new Y(vB)),e.set(k.OPERATIONS_ENUM.SET_NODE_REPLICATION,new Y(vB)),e.set(k.OPERATIONS_ENUM.REMOVE_NODE,new Y(Vre)),e.set(k.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Y($re)),e.set(k.OPERATIONS_ENUM.PURGE_STREAM,new Y(Yre)),e.set(k.OPERATIONS_ENUM.SET_CONFIGURATION,new Y(kB.setConfiguration)),e.set(k.OPERATIONS_ENUM.CLUSTER_STATUS,new Y(Kre.clusterStatus)),e.set(k.OPERATIONS_ENUM.CLUSTER_NETWORK,new Y(Wre)),e.set(k.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Y(CR.setRoutes)),e.set(k.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Y(CR.getRoutes)),e.set(k.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Y(CR.deleteRoutes)),e.set(k.OPERATIONS_ENUM.EXPORT_TO_S3,new Y(kn,BB.export_to_s3)),e.set(k.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new Y(kn,bl.deleteFilesBefore)),e.set(k.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Y(kn,bl.deleteFilesBefore)),e.set(k.OPERATIONS_ENUM.EXPORT_LOCAL,new Y(kn,BB.export_local)),e.set(k.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new Y(MR.handleGetJobsByStartDate)),e.set(k.OPERATIONS_ENUM.GET_JOB,new Y(MR.handleGetJob)),e.set(k.OPERATIONS_ENUM.GET_FINGERPRINT,new Y(DR.getFingerprint)),e.set(k.OPERATIONS_ENUM.SET_LICENSE,new Y(DR.setLicense)),e.set(k.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Y(DR.getRegistrationInfo)),e.set(k.OPERATIONS_ENUM.RESTART,new Y(HB.restart)),e.set(k.OPERATIONS_ENUM.RESTART_SERVICE,new Y(kn,HB.restartService)),e.set(k.OPERATIONS_ENUM.CATCHUP,new Y(ane)),e.set(k.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Y(Jre.systemInformation)),e.set(k.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Y(kn,bl.deleteAuditLogsBefore)),e.set(k.OPERATIONS_ENUM.READ_AUDIT_LOG,new Y(qre)),e.set(k.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new Y(qB.createTokens)),e.set(k.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new Y(qB.refreshOperationToken)),e.set(k.OPERATIONS_ENUM.LOGIN,new Y(FB.login)),e.set(k.OPERATIONS_ENUM.LOGOUT,new Y(FB.logout)),e.set(k.OPERATIONS_ENUM.GET_CONFIGURATION,new Y(kB.getConfiguration)),e.set(k.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new Y(Jt.customFunctionsStatus)),e.set(k.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new Y(Jt.getCustomFunctions)),e.set(k.OPERATIONS_ENUM.GET_COMPONENT_FILE,new Y(Jt.getComponentFile)),e.set(k.OPERATIONS_ENUM.GET_COMPONENTS,new Y(Jt.getComponents)),e.set(k.OPERATIONS_ENUM.SET_COMPONENT_FILE,new Y(Jt.setComponentFile)),e.set(k.OPERATIONS_ENUM.DROP_COMPONENT,new Y(Jt.dropComponent)),e.set(k.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new Y(Jt.getCustomFunction)),e.set(k.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new Y(Jt.setCustomFunction)),e.set(k.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new Y(Jt.dropCustomFunction)),e.set(k.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new Y(Jt.addComponent)),e.set(k.OPERATIONS_ENUM.ADD_COMPONENT,new Y(Jt.addComponent)),e.set(k.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new Y(Jt.dropCustomFunctionProject)),e.set(k.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Y(Jt.packageComponent)),e.set(k.OPERATIONS_ENUM.PACKAGE_COMPONENT,new Y(Jt.packageComponent)),e.set(k.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Y(Jt.deployComponent)),e.set(k.OPERATIONS_ENUM.DEPLOY_COMPONENT,new Y(Jt.deployComponent)),e.set(k.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new Y(VB.readTransactionLog)),e.set(k.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new Y(kn,VB.deleteTransactionLogsBefore)),e.set(k.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new Y($B.installModules)),e.set(k.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new Y($B.auditModules)),e.set(k.OPERATIONS_ENUM.GET_BACKUP,new Y(ks.getBackup)),e}a(cne,"initializeOperationFunctionMap")});var IE=g((Bpe,ex)=>{"use strict";var vR=P(),une=z(),Il=$(),{handleHDBError:BR,hdb_errors:NE}=se(),{isMainThread:lne}=require("worker_threads"),{Readable:_ne}=require("stream"),jB=require("os"),dne=require("util"),fne=dT(),Ene=dne.promisify(fne.authorize),ZB=XB(),{createGzip:hne,constants:mne}=require("zlib");function pne(e){let t=`Found an uncaught exception with message: ${e.message}. ${jB.EOL}Stack: ${e.stack} ${jB.EOL}Terminating ${lne?"HDB":"thread"}.`;console.error(t),Il.fatal(t),process.exit(1)}a(pne,"handleServerUncaughtException");function Sne(e,t,r){if(Il[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 n=e.statusCode?e.statusCode:NE.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(Sne,"serverErrorHandler");function Tne(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=BR(new Error,"Invalid JSON.",NE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(une.isEmpty(e.body.operation)){let n=BR(new Error,"Request body must include an 'operation' property.",NE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(Tne,"reqBodyValidationHandler");function gne(e,t,r){let n;e.body.operation!==vR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==vR.OPERATIONS_ENUM.LOGIN&&e.body.operation!==vR.OPERATIONS_ENUM.LOGOUT?Ene(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{Il.warn(s),Il.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(BR(s,i,NE.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(gne,"authHandler");async function Rne(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=ZB.chooseOperation(e.body);let s=await ZB.processLocalTransaction(e,n);if(s instanceof _ne&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(hne({level:mne.Z_BEST_SPEED})))}return s}catch(s){throw Il.error(s),s}}a(Rne,"handlePostRequest");ex.exports={authHandler:gne,handlePostRequest:Rne,handleServerUncaughtException:pne,serverErrorHandler:Sne,reqBodyValidationHandler:Tne}});var sx=g((Hpe,nx)=>{"use strict";var Ane=require("fastify-plugin"),{handlePostRequest:tx,authHandler:One,reqBodyValidationHandler:bne}=IE();async function yne(e){e.decorate("hdbCore",{preValidation:[bne,One],request:t=>rx(tx(t,response)),requestWithoutAuthentication:(t,r)=>rx(tx(t,r,!0))})}a(yne,"hdbCore");async function rx(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(rx,"convertAsyncIterators");nx.exports=Ane(yne)});var ax=g((Fpe,ox)=>{"use strict";var qpe=require("fs"),xR=ee();xR.initSync();var{CONFIG_PARAMS:ix}=P(),Nne=1024*1024*1024;function Ine(e){let t=xR.get(ix.HTTP_TIMEOUT),r=xR.get(ix.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Nne,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(Ine,"getServerOptions");ox.exports=Ine});var lx=g((Vpe,ux)=>{"use strict";var HR=ee();HR.initSync();var{CONFIG_PARAMS:cx}=P();function wne(){let e=HR.get(cx.HTTP_CORSACCESSLIST),t=HR.get(cx.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(wne,"getCORSOptions");ux.exports=wne});var fx=g((Ype,dx)=>{"use strict";var _x=ee();_x.initSync();var Cne=P();function Dne(){return _x.get(Cne.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Dne,"getHeaderTimeoutConfig");dx.exports=Dne});var qR={};Fe(qR,{customFunctionsServer:()=>Pne,ready:()=>wx,start:()=>Mne});function Mne(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Vs||(Vs=Ix(t),at.http((await Vs).server));let o=await Vs,c=(0,GR.dirname)(s),u=(0,GR.dirname)(n);if(u.startsWith("/")&&(u=u.slice(1)),!Ex.has(c)){Ex.add(c);try{o.register(vne(c,u))}catch(_){if(_.message==="Root plugin has already booted")Ye.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:wx}}async function Pne(){try{Ye.info("In Custom Functions Fastify server"+process.cwd()),Ye.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ye.debug(`Custom Functions server process ${process.pid} starting up.`),await Une();let e=gx.get(Rx.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Vs=await Ix(e)}catch(r){throw Ye.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ye.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ye.error(`Custom Functions ${process.pid} Error: ${e}`),Ye.error(e),process.exit(1)}}async function Une(){try{Ye.info("Custom Functions starting configuration."),await Ax.setUsersToGlobal(),Ye.info("Custom Functions completed configuration.")}catch(e){Ye.error(e)}}function vne(e,t){return async function(r){try{Ye.info("Custom Functions starting buildRoutes"),Ye.trace("Loading fastify routes folder "+e),(0,hx.existsSync)(e)&&r.register(Tx.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Ye.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Ye.error(s.message):s&&Ye.error(s),o()})}catch(n){Ye.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function Ix(e){Ye.info("Custom Functions starting buildServer.");let t=(0,Ox.default)(e),r=(0,mx.default)(t);r.server.headersTimeout=(0,yx.default)(),r.setErrorHandler(Nx.serverErrorHandler);let n=(0,bx.default)();return n&&r.register(px.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(Sx.default),await r.register(Lne),await r.after(),Qg(r),Ye.info("Custom Functions completed buildServer."),r}function wx(){if(Vs)return Vs.then?Vs.then(e=>e.ready()):Vs.ready()}var GR,hx,mx,px,Sx,Tx,gx,Rx,Ye,Lne,Ax,Ox,bx,yx,Nx,Vs,Ex,Cx=Re(()=>{GR=require("path"),hx=require("fs"),mx=H(require("fastify")),px=H(require("@fastify/cors")),Sx=H(oR()),Tx=H(require("@fastify/autoload")),gx=H(ee()),Rx=H(P()),Ye=H($()),Lne=H(sx()),Ax=H(_n()),Ox=H(ax()),bx=H(lx()),yx=H(fx()),Nx=H(IE());Da();lr();Ex=new Set;a(Mne,"start");a(Pne,"customFunctionsServer");a(Une,"setUp");a(vne,"buildRouteFolder");a(Ix,"buildServer");a(wx,"ready")});var FR={};Fe(FR,{start:()=>Bne});function Bne(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,Ux.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){Lx||(Lx=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=Dx.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,Mx.default)(s,(0,Px.realpathSync)(o))}}return i(s)},{runFirst:!0})),Dx.set(r,n)}}}var Mx,Px,Ux,Dx,Lx,vx=Re(()=>{Mx=H(require("send")),Px=require("fs"),Ux=H(require("serve-static")),Dx=new Map;a(Bne,"start")});function Gne(){let e=(0,Gx.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),VR=setInterval(()=>{DE.notify(e)},Hne).unref())}function qne(e,t=1,r){if(kR++,(0,$s.startWorker)("server/threads/threadServer.js",{name:Xa.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function u(_){_.type===Xa.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",u),o(n))}a(u,"onMessage"),n.on("message",u),n.on("error",c)});xne.push(s),await s,Wa.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=CE.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=Wa.indexOf(n);o>-1&&Wa.splice(o,1)}if(a(i,"removeWorker"),Qa){let o=Qa;Qa=[];for(let c of o)qx[c.localPort](null,c)}}}),r){let n=setInterval(()=>{$R?$R=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,$s.shutdownWorkers)(),kR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function Fx(e=0,t){if(typeof e=="string")try{(0,LE.existsSync)(e)&&(0,LE.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Fne:r=kne(t):r=YR;let n=(0,za.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=qx[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),$R=!0,r(o,(c,u)=>{if(!c){if(Bx){let l=o._socket||new za.Socket({handle:o,writable:!0,readable:!0});Bx.deliverSocket(l,e,u),l.resume()}else kR>0?(Qa.length===0&&setTimeout(()=>{Qa.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),o.localPort=e,Qa.push(o)):(console.log("start up a dynamic thread to handle request"),qne(0));Sr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new za.Socket({handle:o,writable:!0,readable:!0});Kne(l,c,e)}Sr(!0,"socket-routed")})};let s=du();DE.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function YR(e,t){let r,n=0;for(let s of Wa){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=wE)return wE=i,t(r);n=i}wE=0,t(r)}function Fne(e,t){let r={};e.getpeername(r);let n=r.address,s=Ja.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);YR(e,o=>{Ja.set(n,{worker:o,lastUsed:i}),t(o)})}function kne(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new za.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let u=o.toString("latin1").match(t)?.[1],_=Ja.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,s(_.worker);YR(n,d=>{Ja.set(u,{worker:d,lastUsed:l}),s(d,o)})})}a(r,"findByHeaderAffinity")}function $ne(){wE=0;for(let e of Wa)e.expectedIdle=e.recentELU.idle+Vne,e.requests=1;Wa.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Kne(e,t,r){let n=Yne++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),CE.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),CE.delete(n)),s.event=="destroy"&&(e.destroy(),CE.delete(n))})}var $s,za,Xa,DE,LE,Hx,Gx,Wa,Qa,qx,Bx,kR,xne,VR,Hne,$R,wE,xx,Ja,Vne,CE,Yne,kx=Re(()=>{$s=H(Qe()),za=require("net"),Xa=H(P()),DE=H($()),LE=require("fs");Ds();Hx=require("worker_threads"),Gx=H(ji()),Wa=[],Qa=[],qx=[],kR=0,xne=[];Hx.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,$s.onMessageFromWorkers)(e=>{e.type===Xa.ITC_EVENT_TYPES.RESTART&&VR&&(clearInterval(VR),Gne())}));Hne=6e5;a(Gne,"licenseWarning");a(qne,"startHTTPWorker");a(Fx,"startSocketServer");wE=0;a(YR,"findMostIdleWorker");xx=36e5,Ja=new Map;a(Fne,"findByRemoteAddressAffinity");a(kne,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ja)r.lastUsed+xx<e&&Ja.delete(t)},xx).unref();Vne=1e3;a($ne,"updateWorkerIdleness");(0,$s.setMonitorListener)($ne);CE=new Map,Yne=1;a(Kne,"proxySocket")});var zR={};Fe(zR,{Request:()=>KR,createReuseportFd:()=>ME});var Vx,KR,WR,QR,ME,PE=Re(()=>{Vx=require("os"),KR=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new QR(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new WR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},WR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},QR=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,Vx.platform)()!="win32"&&(ME=require("node-unix-socket").createReuseportFd)});var Wx=g((oSe,Kx)=>{"use strict";var Wne=require("cluster"),Lo=ee();Lo.initSync();var Yx=P(),tSe=require("util"),Ys=$(),rSe=require("fs"),Qne=require("fastify"),nSe=du(),zne=require("@fastify/cors"),Jne=require("@fastify/compress"),Xne=require("@fastify/static"),jne=oR(),Zne=require("path"),{PACKAGE_ROOT:ese}=P(),tse=ys(),rse=z(),nse=_n(),sse=ji(),{server:ise}=(lr(),ie(Gi)),{node_request_key:sSe}=(PE(),ie(zR)),{authHandler:ose,handlePostRequest:ase,serverErrorHandler:cse,reqBodyValidationHandler:use}=IE(),iSe=require("net"),{registerContentHandlers:lse}=(Da(),ie(b0)),_se=6e4,dse=1024*1024*1024,fse="TRUE",{CONFIG_PARAMS:wl}=Yx,ja;Kx.exports={hdbServer:$x,start:$x};async function $x(e){try{Ys.info("In Fastify server"+process.cwd()),Ys.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ys.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Wne.isMaster,await Ese();let t=e.securePort>0;ja=hse(t),await ja.ready(),e||(e={}),e.isOperationsServer=!0;try{ise.http(ja.server,e),ja.server.closeIdleConnections||await ja.listen({port:0,host:"::"})}catch(r){throw ja.close(),Ys.error(r),Ys.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Ys.fatal(t),process.exit(1)}}a($x,"operationsServer");async function Ese(){Ys.trace("Configuring HarperDB process."),tse.setSchemaDataToGlobal(),await nse.setUsersToGlobal(),await sse.getLicense()}a(Ese,"setUp");function hse(e){Ys.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=mse(e),r=Qne(t);r.server.headersTimeout=Sse(),r.setErrorHandler(cse);let n=pse();n&&r.register(zne,n),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(jne),r.register(Jne),r.register(Xne,{root:Zne.join(ese,"studio/build-local")}),lse(r);let s=Lo.get(Yx.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!rse.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[use,ose],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),ase(i,o)}),r.get("/health",()=>"HarperDB is running."),Ys.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(hse,"buildServer");function mse(e){let t=Lo.get(wl.OPERATIONSAPI_NETWORK_TIMEOUT),r=Lo.get(wl.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:dse,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(mse,"getServerOptions");function pse(){let e=Lo.get(wl.OPERATIONSAPI_NETWORK_CORS),t=Lo.get(wl.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===fse)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(pse,"getCORSOpts");function Sse(){return Lo.get(wl.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??_se}a(Sse,"getHeaderTimeoutConfig")});var tA={};Fe(tA,{disableNATS:()=>gse,publishToStream:()=>BE,setNATSReplicator:()=>JR,setPublishToStream:()=>Rse,setSubscription:()=>eA,start:()=>Tse});function Tse(){Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Ose()}function gse(e=!0){jx=e}function Rse(e,t){BE=e,eA=t}function Ose(){if(jx||process.env._DISABLE_NATS)return;let e=mr(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];JR(s,r,i)}}rA((r,n)=>{JR(r.tableName,r.databaseName,r),n&&eH(r)}),!Qx&&(Qx=!0)}function JR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends $t{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Me],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Me]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Me],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Me],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Me]})}static defineSchema(i){eH(i)}static subscribe(){let i=new In;return eA(t,e,i),i}static subscribeOnThisThread(i){return i<(Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Ase)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new UE(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=Zx;return i}a(n,"getNATSTransaction")}function eH(e){let t=Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_NODENAME);BE(`${jR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,ZR.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 zx,jR,ZR,Jx,Xx,Cl,Dl,vE,jx,BE,eA,Ase,Zx,Qx,UE,XR,tH=Re(()=>{Ae();cn();zx=H(ut()),jR=H(Ve()),ZR=H(Os());Cc();Jx=H(MS()),Xx=H(Br()),Cl=H(ee()),Dl=H(P()),vE=H($());a(Tse,"start");a(gse,"disableNATS");BE=zx.publishToStream,eA=Jx.setSubscription;a(Rse,"setPublishToStream");Ase=2;a(Ose,"assignReplicationSource");a(JR,"setNATSReplicator");a(eH,"publishSchema");UE=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,E=l.operation=="put"?"upsert":l.operation;u||(vE.trace(`Sending transaction event ${E}`),_=u={operation:E,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,E!=="delete"&&E!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===E?(o.push(l.record),c.push(l.id)):_=_.next={operation:E,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&n.push(BE(`${jR.SUBJECT_PREFIXES.TXN}.${s}.${u.table}`,(0,ZR.createNatsTableStreamName)(s,u.table),void 0,u)?.catch(l=>{throw vE.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(n)}},XR=class extends UE{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,Xx.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};Zx=new XR});var mH=g(Mi=>{"use strict";var{isMainThread:iA,parentPort:Ml,threadId:xE}=require("worker_threads"),{Socket:bse,createServer:yse}=require("net"),{createServer:Nse,IncomingMessage:Ise}=require("http"),{createServer:wse}=require("https"),{readFileSync:Cse,unlinkSync:rH,existsSync:Dse}=require("fs"),Pt=$(),qe=ee(),_t=P(),{server:qE}=(lr(),ie(Gi)),{WebSocketServer:Lse}=require("ws"),{createSecureContext:Mse,createServer:Pse}=require("node:tls"),{getTicketKeys:aH,restartNumber:Use,getWorkerIndex:Pl}=Qe(),{Headers:cH,appendHeader:vse}=(el(),ie(WU)),{recordAction:Ll,recordActionBinary:nH}=(Ds(),ie(pu)),{Request:uH,createReuseportFd:sH}=(PE(),ie(zR)),{checkMemoryLimit:Bse}=ji(),{X509Certificate:xse}=require("crypto"),lH=require("tls"),Hse=lH.createSecureContext,Za;lH.createSecureContext=function(e){return Za||Hse(e)};var _H=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG);if(_H){let e;if(iA)e=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Pt.info("Could not close debugger",t)}});else{let t=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Pl()>=0&&(e=t+Pl())}if(e){let t=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Pt.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&iA)try{require("inspector").open(9229)}catch(e){Use<=1&&Pt.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:fSe,CONFIG_PARAMS:Gse}=_t;qe.initSync();var qse=qe.get(Gse.HTTP_SESSIONAFFINITY),hs={};Mi.registerServer=uA;Mi.httpServer=lA;Mi.deliverSocket=cA;Mi.startServers=dH;Mi.when_components_loaded=null;Mi.createSNICallback=_A;qE.http=lA;qE.request=$se;qE.socket=Yse;qE.ws=Kse;var nA={},HE={},Fse,Ks={},GE={},kse=[],oA=[];function dH(){return Mi.when_components_loaded=dA().loadRootComponents(!0).then(()=>{Ml?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)cA(n,r,s);else if(t.requestId)Vse(t);else if(t.type===_t.ITC_EVENT_TYPES.SHUTDOWN){Pt.trace("received shutdown request",xE);for(let i in hs){let o=hs[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(E=>E.description.includes("connections")),l=0,d=setInterval(()=>{l++;let E=l>=100,f=o[_][E?"all":"idle"]();if(f.length===0){E&&clearInterval(d);return}l===1?Pt.info(`Closing ${f.length} idle connections`):E&&Pt.warn(`Forcefully closing ${f.length} active connections`);for(let h=0,p=f.length;h<p;h++){let S=f[h].socket;S._httpMessage&&!S._httpMessage.finished&&!E||(E?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
|
|
30
|
+
`},compressible:!1,q:.8});Ft.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});b0={type:"application/json",serializeStream:Lc,serialize:hl,deserialize:ote,q:.5};Ft.set("*/*",b0);Ft.set("",b0);a(ote,"tryJSONParse");a(Qg,"registerContentHandlers");ate=require("fastify-plugin"),cte=ate(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Zf(n.raw);s.type(c),s.serializer(function(u){return(o.serializeStream||o.serialize)(u,{headers:{set:(_,l)=>{s.header(_,l)}}})})}),r()},{name:"content-type-negotiation"});a(Zf,"findBestSerializer");S0=$g.default.get(Yg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(eE,"serialize");a(Ro,"serializeMessage");a(ute,"streamToBuffer");a(yo,"getDeserializer");a(T0,"deserializerUnknownType");a(lte,"transformIterable")});function jg(e,t,r,n,s,i,o,c){let u=e[0];if(t==="or"){let d=_(u);for(let f=1;f<e.length;f++){let h=e[f],p=_(h);d=d.concat(p)}let E=new Set;return d.filter(f=>{let h=f.key??f;return E.has(h)?!1:(E.add(h),!0)})}else{let d=_(u),E=l(e.slice(1),!0,u.estimated_count);return E.length>0?o(d,E):d}function _(d){return d.conditions?jg(d.conditions,d.operator,r,n,s,i,o,c):Ga(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function l(d,E,f){return d.map((h,p)=>{if(h.conditions){let A=h.operator==="or",b=l(h.conditions,!A,f);return A?(I,B)=>b.some(U=>U(I,B)):(I,B)=>b.every(U=>U(I,B))}let S=(h.attribute||h[0])===r.primaryKey,T=Tl(h,r,i,c,S,f);return E&&p<d.length-1&&f&&(f=Tte(r.primaryStore,h.estimated_count,f)),T}).filter(Boolean)}a(l,"mapConditionsToFilters")}function Ga(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,u=e.comparator;if(Array.isArray(o)){let A=o[0],b=Fs(n.attributes,A);if(b.relationship){if(o.length<2)throw new Zr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let I=b.definition?.tableClass||b.elements?.definition?.tableClass,B=new Map,U=Ga({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,I,s,B);if(b.relationship.to){i[o[0]]=B;let F=!!Fs(I.attributes,b.relationship.to)?.elements;U=hte(U,b,I.primaryStore,F,B)}if(b.relationship.from){let F=a(M=>Ga({attribute:b.relationship.from,value:M},t,r,n,s,B),"searchEntry");b.elements?(i[o[0]]=B,U=mte(U,b,I.primaryStore,B,F)):U=U.flatMap(F)}return U}else if(o.length===1)o=o[0];else throw new Zr.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,E;c instanceof Date&&(c=c.getTime());let f;switch(Xg[u]||u){case"lt":_=!0,l=c;break;case"le":_=!0,l=c,d=!0;break;case"gt":_=c,E=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,l=c.slice(0),l[l.length-1]=ds.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),l=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),l=c[1],l instanceof Date&&(l=l.getTime()),d=!0;break;case"equals":case void 0:_=c,l=c,d=!0;break;case"ne":if(c===null){_=c,E=!0;break}case"sort":case"contains":case"ends_with":_=!0,f=!0;break;default:throw new Zr.ClientError(`Unknown query comparator "${u}"`)}let h,p=o===n.primaryKey||o==null;if(typeof _=="string"&&_.length>Tn.MAX_SEARCH_KEY_LENGTH&&(_=_.slice(0,Tn.MAX_SEARCH_KEY_LENGTH)+Tn.OVERFLOW_MARKER,E=!1,h=Tl(e,n,null,i,p)),typeof l=="string"&&l.length>Tn.MAX_SEARCH_KEY_LENGTH&&(l=l.slice(0,Tn.MAX_SEARCH_KEY_LENGTH)+Tn.OVERFLOW_MARKER,d=!0,h=h??Tl(e,n,null,i,p)),r){let A=_;_=l,l=A,A=!E,E=!d,d=A}let S=p?n.primaryStore:n.indices[o];if(!S||S.isIndexing||f||c===null&&!S.indexNulls){if(s===!1&&!S)throw new Zr.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&f)throw new Zr.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(S?.isIndexing)throw new Zr.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!S.indexNulls)throw new Zr.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(h=h??Tl(e,n,null,i,p),!h)throw new Zr.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:_,end:l,inclusiveEnd:d,exclusiveStart:E,values:!0,versions:p,transaction:t,reverse:r};if(p){let A=S.getRange(T).map(h?function({key:b,value:I}){return this.isSync?I&&h(I)?b:Ci.SKIP:new Promise((B,U)=>setImmediate(()=>{try{B(I&&h(I)?b:Ci.SKIP)}catch(F){U(F)}}))}:b=>b.value==null?Ci.SKIP:b);return A.hasEntries=!0,A}else return S?S.getRange(T).map(h?function({key:A,value:b}){let I;return typeof A=="string"&&A.length>Tn.MAX_SEARCH_KEY_LENGTH?I=n.primaryStore.get(b):I={[o]:A},this.isSync?h(I)?b:Ci.SKIP:new Promise((B,U)=>setImmediate(()=>{try{B(h(I)?b:Ci.SKIP)}catch(F){U(F)}}))}:({value:A})=>A):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:A,value:b}){return this.isSync?b&&h(b)?A:Ci.SKIP:new Promise((I,B)=>setImmediate(()=>{try{I(b&&h(b)?A:Ci.SKIP)}catch(U){B(U)}}))})}function Fs(e,t){if(Array.isArray(t))if(t.length>1){let r=Fs(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Fs(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function hte(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let u=t.relationship.to,_=a((l,d)=>{let E=l;Array.isArray(l)&&(E=qn(l),o=!0);let f=s.get(E);f?f.push(d):s.set(E,f=[d]),l!==E&&(f.key=l)},"add_entry");for(let l of e){let d=l.value??r.get(l.key??l),E=d?.[u];if(E!=null&&!s.filters?.some(f=>!f(d)))if(n)for(let f=0;f<E.length;f++)_(E[f],l);else _(E,l)}return i=(o?s:s.keys())[Symbol.iterator](),this.next()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}},return(){if(i?.return)return i.return()}}}})}function mte(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let u;if(o)for(;u=o.next(),!u.done;){let _=qn(u.value);if(!c.has(_))return c.add(_),u}if(!i){let _=new Map;n.fromRecord=l=>l[t.relationship.from]?.filter?.(d=>_.has(qn(d)));for(let l of e){if(n.filters){let d=r.get(l);if(n.filters.some(E=>!E(d)))continue}_.set(qn(l),l)}return i=_.values()[Symbol.iterator](),this.next()}do{let _=i.next();return _.done?_:(o=s(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function Tl(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,u=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let l=c[0],d=Fs(t.attributes,l),E=d.definition?.tableClass||d.elements.definition?.tableClass,f=n?.[l],h=Tl({attribute:c.length>2?c.slice(1):c[1],value:u,comparator:o},E,r,f?.[l]?.joined,c[1]===E.primaryKey,i);if(!h)return;if(f){f.filters||(f.filters=[]),f.filters.push(h);return}let p=t.propertyResolvers?.[l],S,T=a((A,b)=>{let I,B;if(p){if(p.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let F of h.idFilter.idSet)e={attribute:p.from,value:F};S=_(p.from,h.idFilter,!0,!0)}else S=_(p.from,h.idFilter,!1,!0);let U=S(A);return S.idFilter&&(T.idFilter=S.idFilter),U}B=p(A,r,b),I=B?.value}else I=A[l];return I?Array.isArray(I)?I.some(h):h(I,B):!1},"recordFilter");return T}}switch(u instanceof Date&&(u=u.getTime()),Xg[o]||o){case Tn.SEARCH_TYPES.EQUALS:case void 0:return _(c,l=>l===u,!0);case"contains":return _(c,l=>l?.toString().includes(u));case"ends_with":return _(c,l=>l?.toString().endsWith(u));case"starts_with":return _(c,l=>typeof l=="string"&&l.startsWith(u),!0);case"prefix":return Array.isArray(u)?u[u.length-1]==null&&(u=u.slice(0,-1)):u=[u],_(c,l=>{if(!Array.isArray(l))return!1;for(let d=0,E=u.length;d<E;d++)if(l[d]!==u[d])return!1;return!0},!0);case"between":return u[0]instanceof Date&&(u[0]=u[0].getTime()),u[1]instanceof Date&&(u[1]=u[1].getTime()),_(c,l=>(0,ds.compareKeys)(l,u[0])>=0&&(0,ds.compareKeys)(l,u[1])<=0,!0);case"gt":return _(c,l=>(0,ds.compareKeys)(l,u)>0);case"ge":return _(c,l=>(0,ds.compareKeys)(l,u)>=0);case"lt":return _(c,l=>(0,ds.compareKeys)(l,u)<0);case"le":return _(c,l=>(0,ds.compareKeys)(l,u)<=0);case"ne":return _(c,l=>(0,ds.compareKeys)(l,u)!==0);case"sort":return()=>!0;default:throw new Zr.ClientError(`Unknown query comparator "${o}"`)}function _(l,d,E,f){let h;E=E&&!s&&t?.indices[l]&&i>3,E&&(e.estimated_count==null&&rE(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(E=!1));let p=0,S=3;function T(A){let b=A[l],I;if(typeof b!="object"||!b||f?I=d(b):Array.isArray(b)?I=b.some(d):b instanceof Date&&(I=d(b.getTime())),E&&(S++,!I&&!T.idFilter&&++p/S*(i-S)>h)){let B=Ga(e,r.transaction.getReadTxn(),!1,t).map(qn),U=new Set(B);T.idFilter=F=>U.has(qn(F)),T.idFilter.idSet=U}return I}return a(T,"recordFilter"),s&&(T.idFilter=d),T}a(_,"attributeComparator")}function rE(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/qs(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=Xg[n]||n,n===Tn.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=Fs(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=rE(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),u=e.indices[i.relationship.from];r.estimated_count=c+(u?c*qs(e.indices[i.relationship.from])/(qs(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=qs(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=fte*qs(e.primaryStore)+1:n==="between"?r.estimated_count=dte*qs(e.primaryStore)+1:n==="sort"?r.estimated_count=qs(e.primaryStore)+1:r.estimated_count=_te*qs(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function nE(e){if(e)if(Di=e,xa.lastIndex=0,pte.test(e))try{let t=pl(new Ha,"");if(Dr!==Di.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${Dr} in '${Di}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function pl(e,t){let r=xa,n,s,i,o,c,u=decodeURIComponent,_;for(;n=r.exec(Di);){Dr=r.lastIndex;let[,l,d]=n;if(o){if(l)throw new SyntaxError(`expected operator, but encountered '${l}'`);o=!1,c=!1}else c=!0;let E;switch(d){case"=":if(s){if(l.length<=2)i=l;else throw new SyntaxError(`invalid FIQL operator ${l}`);u=zg}else{if(u=decodeURIComponent,i="equals",!l)throw new SyntaxError("attribute must be specified before equality comparator");s=Sl(l)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=Ete[d],u=Jg[i]?zg:decodeURIComponent,!l)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=Sl(l);break;case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s,value:u(l)};i==="eq"&&N0(h,l),tE(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Sl(l)),s=void 0;break;case"(":xa.lastIndex=Dr;let f=pl(l?[]:new Ha,")");switch(l){case"":tE(e,_),e.conditions.push(f);break;case"limit":switch(f.length){case 1:e.limit=+f[0];break;case 2:e.offset=+f[0],e.limit=f[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(f[0])&&f.length===1&&!f[0].name?(e.select=f[0],e.select.asArray=!0):f.length===1?e.select=f[0]:f.length===2&&f[1]===""?e.select=f.slice(0,1):e.select=f;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=I0(f);break;default:throw new SyntaxError(`unknown query function call ${l}`)}Di[Dr]===","?r.lastIndex=++Dr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!l)throw new SyntaxError("property sets must have a defined parent property name");xa.lastIndex=Dr,E=pl([],"}"),E.name=l,e.push(E),Di[Dr]===","?r.lastIndex=++Dr:o=!0;break;case"[":xa.lastIndex=Dr,l?(E=pl(new Ha,"]"),E.name=l):E=pl(e.conditions?new Ha:[],"]"),e.conditions?(tE(e,_),e.conditions.push(E),s=null):e.push(E),Di[Dr]===","?r.lastIndex=++Dr:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:u(l)};i==="eq"&&N0(h,l),tE(e,_),e.conditions.push(h)}else if(l)throw new SyntaxError("no attribute or comparison specified")}else(l||e.length>0&&c)&&e.push(Sl(l));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?Ste:xa,r.lastIndex=Dr),Dr===Di.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function tE(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function Sl(e){return e.indexOf(".")>-1?e.split(".").map(Sl):decodeURIComponent(e)}function zg(e){if(e==="null")return null;if(e.indexOf("/")>-1){let t=e.split("/"),r=new qa(t.length);for(let n=0,s=t.length;n<s;n++)r[n]=zg(t[n]);return r}if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new Zr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function N0(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Zr.ClientError("wildcard can only be used at the end of a string")}function I0(e){let t=w0(e[0]);return e.length>1&&(t.next=I0(e.slice(1))),t}function w0(e){if(Array.isArray(e)){let t=w0(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}throw new SyntaxError(`Unknown sort type ${e}`)}function qn(e){return Array.isArray(e)?e.join("\0"):e}function qs(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function Tte(e,t,r){return t*r/qs(e)}var Zr,Tn,ds,Ci,_te,dte,fte,Ete,Jg,Xg,pte,xa,Ste,Dr,Di,Ha,sE=Re(()=>{Zr=H(se()),Tn=H(ft()),ds=require("ordered-binary"),Ci=require("lmdb");cn();_te=.3,dte=.1,fte=.05,Ete={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},Jg={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(jg,"executeConditions");a(Ga,"searchByIndex");a(Fs,"findAttribute");a(hte,"joinTo");a(mte,"joinFrom");Xg={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(Tl,"filterByType");a(rE,"estimateCondition");pte=/[()[\]|!<>.]|(=\w*=)/,xa=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,Ste=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(nE,"parseQuery");a(pl,"parseBlock");a(tE,"assignOperator");a(Sl,"decodeProperty");a(zg,"typedDecoding");a(N0,"wildcardDecoding");a(I0,"toSortObject");a(w0,"toSortEntry");Ha=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 n=this.conditions[r];if(n.attribute===t)return n.value}}};a(qn,"flattenKey");a(qs,"estimatedEntryCount");a(Tte,"intersectionEstimate")});function P0(e){let t={openapi:gte,info:{title:"HarperDB HTTP REST interface",version:(0,M0.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:u}=n.Resource;if(c=c??"id",!c)continue;let _={},l=[];if(o)for(let{type:b,name:I,elements:B,relationship:U,definition:F}of o){if(U)b==="array"?_[I]={type:"array",items:{$ref:Li+B.type}}:_[I]={$ref:Li+b};else{let M=F??B?.definition;if(M){if(!t.components.schemas[M.type]){let Q={};M.properties.forEach(J=>{Q[J.name]=new rR(Zg[J.type],J.type)}),t.components.schemas[M.type]=new L0(Q)}b==="array"?_[I]={type:"array",items:{$ref:Li+M.type}}:_[I]={$ref:Li+M.type}}else b==="array"?B.type==="Any"||B.type=="ID"?_[I]={type:"array",items:{format:B.type}}:_[I]={type:"array",items:new rR(Zg[B.type],B.type)}:b==="Any"||b=="ID"?_[I]={format:b}:_[I]=new rR(Zg[b],b)}l.push(new nR(I,"query",_[I]))}let d=Object.keys(_),E=new nR(c,"path",{format:"ID"});E.required=!0,E.description="primary key of record";let f=new nR("property","path",{enum:d});f.required=!0,t.components.schemas[i]=new L0(_);let h=u.post!==Resource.prototype.post||u.update,p=typeof u.put=="function",S=typeof u.get=="function",T=typeof u.delete=="function",A="/"+s+"/";h&&(t.paths[A]={},t.paths[A].post=new Rte(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[A]||(t.paths[A]={}),t.paths[A].get=new eR(l,r,{200:new tR({$ref:Li+i})},"search for records by the specified property name and value pairs")),T&&(t.paths[A]||(t.paths[A]={}),t.paths[A].delete=new D0(l,r,"delete all the records that match the provided query",{204:new C0})),A="/"+s+"/{"+c+"}",S&&(t.paths[A]={},t.paths[A].get=new eR([E],r,{200:new tR({$ref:Li+i})},"retrieve a record by its primary key")),p&&(t.paths[A]||(t.paths[A]={}),t.paths[A].put=new Ate([E],r,i,"create or update the record with the URL path that maps to the record's primary key")),T&&(t.paths[A]||(t.paths[A]={}),t.paths[A].delete=new D0([E],r,"delete a record with the given primary key",{204:new C0})),S&&f.schema.enum.length>0&&(A="/"+s+"/{"+c+"}.{property}",t.paths[A]={},t.paths[A].get=new eR([E,f],r,{200:new tR({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Rte(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Li+e}}}},this.security=t,this.responses={200:{description:sR,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function eR(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function tR(e){this.description=sR,this.content={"application/json":{schema:e}}}function C0(){this.description="successfully processed request, no content returned to client"}function Ate(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Li+r}}}},this.responses={200:{description:sR}}}function D0(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function L0(e){this.type="object",this.properties=e}function rR(e,t){this.type=e,this.format=t}function nR(e,t,r){this.name=e,this.in=t,this.schema=r}var M0,gte,Zg,Li,sR,U0=Re(()=>{M0=H(ef()),gte="3.0.3",Zg={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Li="#/components/schemas/",sR="successful operation";a(P0,"generateJsonApi");a(Rte,"Post");a(eR,"Get");a(tR,"Response200");a(C0,"Response204");a(Ate,"Put");a(D0,"Delete");a(L0,"ResourceSchema");a(rR,"Type");a(nR,"Parameter")});var oE={};Fe(oE,{start:()=>yte});async function bte(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&nE(e);let s=new Ni;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==v0){let f=iE.getMatch(i);if(!f)return t(e);e.handlerPath=f.path,o={url:f.relativeURL,async:!0},c=f.Resource}if(c.isCaching){let f=r["cache-control"];if(f){f=f.toLowerCase();let h=f.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),f.includes("only-if-cached")&&(e.onlyIfCached=!0),f.includes("no-cache")&&(e.noCache=!0),f.includes("no-store")&&(e.noCacheStore=!0),f.includes("stale-if-error")&&(e.staleIfError=!0),f.includes("must-revalidate")&&(e.mustRevalidate=!0)}}let u=await rt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=yo(r["content-type"],!0)(e.body,e.headers)}catch(f){throw new Fa.ClientError(f,400)}if(e.authorize=!0,i===v0&&n==="GET"){if(e?.user?.role?.permission?.super_user)return P0(iE);throw new Fa.ServerError("Forbidden",403)}switch(n){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,r.destination,e);case"MOVE":return c.move(o,r.destination,e);case"BREW":throw new Fa.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Fa.ServerError(`Method ${n} is not recognized`,501)}}),_=200,l;if(u==null)_=n==="GET"||n==="HEAD"?404:204,iR.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(l=e.lastModified){Ote[0]=l;let f=String.fromCharCode(34,(Qt[0]&63)+62,(Qt[0]>>6)+(Qt[1]<<2&63)+62,(Qt[1]>>4)+(Qt[2]<<4&63)+62,(Qt[2]>>2)+62,(Qt[3]&63)+62,(Qt[3]>>6)+(Qt[4]<<2&63)+62,(Qt[4]>>4)+(Qt[5]<<4&63)+62,(Qt[5]>>2)+62,(Qt[6]&63)+62,(Qt[6]>>6)+(Qt[7]<<2&63)+62,34),h=r["if-none-match"];h&&f==h?(u?.onDone&&u.onDone(),_=304,u=void 0):s.setIfNone("ETag",f),iR.lastModified&&s.setIfNone("Last-Modified",new Date(l).toUTCString())}e.createdResource&&(_=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let d={status:_,headers:s,body:void 0},E=u?.wasLoadedFromSource?.();return E!==void 0&&(d.wasCacheMiss=E,!E&&l&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||l))/1e3))),u!==void 0&&(d.body=eE(u,e,d),n==="HEAD"&&(d.body=void 0)),d}catch(i){i.statusCode?i.statusCode===500?No.warn(i):No.info(i):No.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=eE(i.contentType?i:i.toString(),e,o),o}}function yte(e){iR=e,!B0&&(B0=!0,iE=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return bte(t,r)},e),e.server.ws(async(t,r,n)=>{gl++;let s=new In;x0||(x0=!0,mu(u=>{gl>0&&u.push({metric:"ws-connections",connections:gl,byThread:!0})}));let i;t.on("error",u=>{i=!0,No.warn(u)});let o;t.on("message",a(function(_){o||(o=yo(r.requestedContentType??r.headers.asObject["content-type"],!1));let l=o(_);s.push(l)},"message"));let c;t.on("close",()=>{gl--,Qr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let u=r.url.slice(1),_=iE.getMatch(u);if(Qr(!!_,"connection","ws","connect"),_){r.handlerPath=_.path,Tr(h=>({count:h.count,total:gl}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await rt(r,()=>d.connect(l,s,r)))[Symbol.asyncIterator]();let f;for(;!(f=await c.next()).done;){let h=Ro(f.value,r);t.send(h),Tr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(u){t.close(Nte[u.statusCode]||1011,u.toString()),t.close("login failed")}t.close()},e))}var No,Fa,Qt,Ote,iR,v0,B0,iE,x0,gl,Nte,H0=Re(()=>{Da();Ds();No=H($()),Fa=H(se());sE();Cc();so();el();U0();Qt=new Uint8Array(8),Ote=new Float64Array(Qt.buffer,0,1),iR={},v0="openapi";a(bte,"http");gl=0;a(yte,"start");Nte={401:3e3,403:3003}});var oR=g((cpe,q0)=>{var{recordAction:aE,recordActionBinary:G0}=(Ds(),ie(pu)),Ite=require("fastify-plugin"),wte=200;q0.exports=Ite(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),u=s.request.routeOptions,_,l,d;u.config?.isOperation?(_=n.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),aE(o,"duration",_,d,l),G0(s.raw.statusCode<400,"success",_,d,l),G0(1,"response_"+s.raw.statusCode,_,d,l);let E=wte;i?.pipe?(i.on("data",S=>{E+=S.length}),i.on("end",()=>{aE(performance.now()-c,"transfer",_,d,l),aE(E,"bytes-sent",_,d,l)})):(E+=i?.length||0,aE(E,"bytes-sent",_,d,l));let f=o.toFixed(3),h=s.getHeader("Server-Timing"),p=`db;dur=${f}`;s.header("Server-Timing",h?`${h}, ${p}`:p)}),r()},{name:"hdb-request-time"})});var dR=g((_pe,$0)=>{var _E=require("clone"),dE=Xe(),Cte=z(),uE=P(),upe=$(),aR=require("fs"),uR=require("joi"),{string:lE}=uR.types(),{hdb_errors:Dte,handleHDBError:cE}=se(),{HDB_ERROR_MSGS:lpe,HTTP_STATUS_CODES:cR}=Dte,{common_validators:ka}=Xn(),F0=" is required",Lte=["insert","update","upsert"],lR={database:{presence:!1,format:ka.schema_format,length:ka.schema_length},schema:{presence:!1,format:ka.schema_format,length:ka.schema_length},table:{presence:!0,format:ka.schema_format,length:ka.schema_length},action:{inclusion:{within:Lte,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Mte={schema:lE.required(),table:lE.required(),action:lE.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Pte,AWS_SECRET:Ute,AWS_BUCKET:vte,AWS_FILE_KEY:Bte,REGION:xte}=uE.S3_BUCKET_AUTH_KEYS,Hte={s3:{presence:!0},[`s3.${Pte}`]:{presence:!0,type:"String"},[`s3.${Ute}`]:{presence:!0,type:"String"},[`s3.${vte}`]:{presence:!0,type:"String"},[`s3.${Bte}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${xte}`]:{presence:!0,type:"String"}},k0=_E(lR);k0.data.presence={message:F0};var V0=_E(lR);V0.file_path.presence={message:F0};var Gte=Object.assign(_E(lR),Hte),_R=_E(Mte);_R.csv_url=lE.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();_R.passthrough_headers=uR.object();function qte(e){let t=dE.validateObject(e,k0);return fE(e,t)}a(qte,"dataObject");function Fte(e){let t=dE.validateBySchema(e,uR.object(_R));return fE(e,t)}a(Fte,"urlObject");function kte(e){let t=dE.validateObject(e,V0);return fE(e,t)}a(kte,"fileObject");function Vte(e){let t=dE.validateObject(e,Gte);return fE(e,t)}a(Vte,"s3FileObject");function fE(e,t){if(!t){let r=Cte.checkGlobalSchemaTable(e.schema,e.table);if(r)return cE(new Error,r,cR.BAD_REQUEST);if(e.operation===uE.OPERATIONS_ENUM.CSV_FILE_LOAD)try{aR.accessSync(e.file_path,aR.constants.R_OK|aR.constants.F_OK)}catch(n){return n.code===uE.NODE_ERROR_CODES.ENOENT?cE(n,`No such file or directory ${n.path}`,cR.BAD_REQUEST):n.code===uE.NODE_ERROR_CODES.EACCES?cE(n,`Permission denied ${n.path}`,cR.BAD_REQUEST):cE(n)}}return t}a(fE,"postValidateChecks");$0.exports={dataObject:qte,urlObject:Fte,fileObject:kte,s3FileObject:Vte}});var fR=g((fpe,Y0)=>{"use strict";var Rl=$(),EE=P();async function $te(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===EE.OPERATIONS_ENUM.INSERT||t.operation===EE.OPERATIONS_ENUM.UPDATE||t.operation===EE.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===EE.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Rl.info(i.message),i):i.http_resp_msg?(Rl.error(`Error calling operation: ${e.name}`),Rl.error(i.http_resp_msg),i):(Rl.error(`Error calling operation: ${e.name}`),Rl.error(i),i)}}a($te,"callOperationFunctionAsAwait");Y0.exports={callOperationFunctionAsAwait:$te}});var W0=g((hpe,K0)=>{"use strict";var ER=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},hR=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};K0.exports={BulkLoadFileObject:ER,BulkLoadDataObject:hR}});var z0=g((ppe,Q0)=>{"use strict";var mR=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};Q0.exports=mR});var AR=g((Ope,dB)=>{"use strict";var hE=Fr(),pE=dR(),Yte=require("needle"),Fn=P(),Tpe=Ve(),Va=z(),{handleHDBError:lt,hdb_errors:sB}=se(),{HTTP_STATUS_CODES:zt,HDB_ERROR_MSGS:Lt,CHECK_LOGS_WRAPPER:wo}=sB,$a=$(),pR=require("papaparse");Va.promisifyPapaParse();var kn=require("fs-extra"),Kte=require("path"),{chain:J0}=require("stream-chain"),j0=require("stream-json/streamers/StreamArray"),X0=require("stream-json/utils/Batch"),Z0=require("stream-chain/utils/comp"),{finished:eB}=require("stream"),Wte=ee(),iB=fR(),Qte=Fg(),{BulkLoadFileObject:TR,BulkLoadDataObject:zte}=W0(),gR=Lg(),{verifyBulkLoadAttributePerms:oB}=Wf(),gpe=z0(),Rpe=ut(),Ape=Os(),{databases:Jte}=(Ae(),ie(ke)),{coerceType:jte}=(SE(),ie(OR)),tB="No records parsed from csv file.",Io=`${Wte.get("HDB_ROOT")}/tmp`,{schema_regex:Xte}=Xn(),rB=1024*1024*2,nB=5e3,Zte={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};dB.exports={csvDataLoad:ere,csvURLLoad:tre,csvFileLoad:rre,importFromS3:nre};async function ere(e,t){let r=pE.dataObject(e);if(r)throw lt(r,r.message,zt.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=uB(e.schema,e.table),i=pR.parse(e.data,{header:!0,skipEmptyLines:!0,transform:SR.bind(null,s),dynamicTyping:!1}),o=new gR;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&oB(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 lt(new Error,c,zt.BAD_REQUEST,void 0,void 0,!0);let u=new zte(e.action,e.schema,e.table,i.data);return n=await iB.callOperationFunctionAsAwait(lB,u,null),n.message===tB?tB:_B(n.records,n.number_written)}catch(s){throw Co(s)}}a(ere,"csvDataLoad");async function tre(e){let t=pE.urlObject(e);if(t)throw lt(t,t.message,zt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Io}/${r}`;try{await sre(e,r)}catch(s){throw $a.error(Lt.DOWNLOAD_FILE_ERR(r)+" - "+s),lt(s,wo(Lt.DOWNLOAD_FILE_ERR(r)))}try{let s=new TR(this.job_operation_function.name,e.action,e.schema,e.table,n,Fn.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await RR(s);return await mE(n),i}catch(s){throw await mE(n),Co(s)}}a(tre,"csvURLLoad");async function rre(e){let t=pE.fileObject(e);if(t)throw lt(t,t.message,zt.BAD_REQUEST,void 0,void 0,!0);let r=new TR(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Fn.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await RR(r)}catch(n){throw Co(n)}}a(rre,"csvFileLoad");async function nre(e){let t=pE.s3FileObject(e);if(t)throw lt(t,t.message,zt.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Kte.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Io}/${s}`;let i=new TR(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await ire(s,e);let o=await RR(i);return await mE(r),o}catch(n){throw await mE(r),Co(n)}}a(nre,"importFromS3");async function sre(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Yte("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw lt(n,s,n.statusCode,Fn.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}are(r,e.csv_url),await ore(t,r.raw)}a(sre,"downloadCSVFile");async function ire(e,t){try{let r=`${Io}/${e}`;await kn.mkdirp(Io),await kn.writeFile(`${Io}/${e}`,"",{flag:"a+"});let n=await kn.createWriteStream(r),s=await Qte.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){$a.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw $a.error(Lt.S3_DOWNLOAD_ERR+" - "+r),lt(r,wo(Lt.S3_DOWNLOAD_ERR))}}a(ire,"downloadFileFromS3");async function ore(e,t){try{await kn.mkdirp(Io),await kn.writeFile(`${Io}/${e}`,t)}catch(r){throw $a.error(Lt.WRITE_TEMP_FILE_ERR),lt(r,wo(Lt.DEFAULT_BULK_LOAD_ERR))}}a(ore,"writeFileToTempFolder");async function mE(e){if(e)try{await kn.access(e),await kn.unlink(e)}catch{$a.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(mE,"deleteTempFile");function are(e,t){if(e.statusCode!==sB.HTTP_STATUS_CODES.OK)throw lt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,zt.BAD_REQUEST);if(!Zte[e.headers["content-type"]])throw lt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,zt.BAD_REQUEST);if(!e.raw)throw lt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,zt.BAD_REQUEST)}a(are,"validateURLResponse");async function RR(e){try{let t;switch(e.file_type){case Fn.VALID_S3_FILE_TYPES.CSV:t=await cre(e);break;case Fn.VALID_S3_FILE_TYPES.JSON:t=await ure(e);break;default:throw lt(new Error,Lt.DEFAULT_BULK_LOAD_ERR,zt.BAD_REQUEST,Fn.LOG_LEVELS.ERROR,Lt.INVALID_FILE_EXT_ERR(e))}return _B(t.records,t.number_written)}catch(t){throw Co(t)}}a(RR,"fileLoad");async function aB(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await hE.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&oB(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let u=lt(c);r(u)}}a(aB,"validateChunk");async function cB(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Va.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Va.isEmpty(c)&&!Va.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await iB.callOperationFunctionAsAwait(lB,c,null);t.records+=u.records,t.number_written+=u.number_written,s&&s.resume()}catch(c){let u=lt(c,wo(Lt.INSERT_CSV_ERR),zt.INTERNAL_SERVER_ERROR,Fn.LOG_LEVELS.ERROR,Lt.INSERT_CSV_ERR+" - "+c);r(u)}}a(cB,"insertChunk");async function cre(e){let t={records:0,number_written:0},r=uB(e.schema,e.table);try{let n=new gR,s=kn.createReadStream(e.file_path,{highWaterMark:rB});s.setEncoding("utf8"),await pR.parsePromise(s,aB.bind(null,e,n),SR.bind(null,r));let i=n.getPermsResponse();if(i)throw lt(new Error,i,zt.BAD_REQUEST);return s=kn.createReadStream(e.file_path,{highWaterMark:rB}),s.setEncoding("utf8"),await pR.parsePromise(s,cB.bind(null,e,t),SR.bind(null,r)),s.destroy(),t}catch(n){throw lt(n,wo(Lt.PAPA_PARSE_ERR),zt.INTERNAL_SERVER_ERROR,Fn.LOG_LEVELS.ERROR,Lt.PAPA_PARSE_ERR+n)}}a(cre,"callPapaParse");function uB(e,t){let r=Jte[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>jte(i,s));return n}a(uB,"createTransformMap");function SR(e,t,r){let n=e.get(r);return n?n(t):Va.autoCast(t)}a(SR,"typeFunction");async function ure(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new gR,s=J0([kn.createReadStream(e.file_path,{encoding:"utf-8"}),j0.withParser(),c=>c.value,new X0({batchSize:nB}),Z0(async c=>{await aB(e,n,r,c)})]);await new Promise((c,u)=>{eB(s,_=>{_?u(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw lt(new Error,i,zt.BAD_REQUEST);let o=J0([kn.createReadStream(e.file_path,{encoding:"utf-8"}),j0.withParser(),c=>c.value,new X0({batchSize:nB}),Z0(async c=>{await cB(e,t,r,c)})]);return await new Promise((c,u)=>{eB(o,_=>{_?u(_):c()}),o.resume()}),t}catch(n){throw lt(n,wo(Lt.INSERT_JSON_ERR),zt.INTERNAL_SERVER_ERROR,Fn.LOG_LEVELS.ERROR,Lt.INSERT_JSON_ERR+n)}}a(ure,"insertJson");async function lB(e){let t={};try{e.data&&e.data.length>0&&lre(e.data[0])?t=await _re(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",$a.info(t.message))}catch(r){throw Co(r)}return t}a(lB,"callBulkFileLoad");function lre(e){let t=Object.keys(e);for(let r of t)if(!Xte.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(lre,"validateColumnNames");async function _re(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=hE.insert;break;case"update":i=hE.update;break;case"upsert":i=hE.upsert;break;default:throw lt(new Error,Lt.INVALID_ACTION_PARAM_ERR(n),zt.BAD_REQUEST,Fn.LOG_LEVELS.ERROR,Lt.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=Va.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Co(o)}}a(_re,"bulkFileLoad");function _B(e,t){return`successfully loaded ${t} of ${e} records`}a(_B,"buildResponseMsg");function Co(e){return lt(e,wo(Lt.DEFAULT_BULK_LOAD_ERR),zt.INTERNAL_SERVER_ERROR,Fn.LOG_LEVELS.ERROR,Lt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Co,"buildTopLevelErrMsg")});var EB=g((ype,fB)=>{"use strict";var bR=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};fB.exports=bR});var pB=g((Ipe,mB)=>{"use strict";var dre=P(),hB=require("moment"),fre=require("uuid").v4,yR=class{static{a(this,"JobObject")}constructor(){this.id=fre(),this.type=void 0,this.start_datetime=hB().valueOf(),this.created_datetime=hB().valueOf(),this.end_datetime=void 0,this.status=dre.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};mB.exports=yR});var NR=g((Cpe,yB)=>{"use strict";var Ere=require("uuid").v4,AB=Fr(),OB=qr(),hre=ns(),mre=oa(),pre=EB(),Ze=P(),Sre=pB(),Tre=Wd(),gn=$(),gre=Ic(),Ya=z(),{promisify:Rre}=require("util"),Do=require("moment"),Are=zf(),TE=dR(),SB=jm(),{deleteTransactionLogsBeforeValidator:Ore}=Ng(),{handleHDBError:TB,hdb_errors:bre}=se(),{HTTP_STATUS_CODES:gB}=bre,RB=OB.searchByValue,yre=OB.searchByHash,Nre=AB.insert,Ire=Rre(Are.evaluateSQL),wre=AB.update;yB.exports={addJob:Lre,updateJob:Pre,handleGetJob:Cre,handleGetJobsByStartDate:Dre,getJobById:bB};async function Cre(e){try{let t=await bB(e.id);return Ya.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 gn.error("There was an error getting job",t),new Error(r)}}a(Cre,"handleGetJob");async function Dre(e){try{let t=await Mre(e);if(gn.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=Do(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Do(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 gn.error(r),new Error(r)}}a(Dre,"handleGetJobsByStartDate");async function Lre(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ya.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return gn.info(l),t.error=l,t}if(!Ze.JOB_TYPE_ENUM[e.operation])return gn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ze.OPERATIONS_ENUM.CSV_FILE_LOAD:n=TE.fileObject(e);break;case Ze.OPERATIONS_ENUM.CSV_URL_LOAD:n=TE.urlObject(e);break;case Ze.OPERATIONS_ENUM.CSV_DATA_LOAD:n=TE.dataObject(e);break;case Ze.OPERATIONS_ENUM.IMPORT_FROM_S3:n=TE.s3FileObject(e);break;case Ze.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ze.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=SB(e,"date");break;case Ze.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=SB(e,"timestamp");break;case Ze.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Ore(e);break;case Ze.OPERATIONS_ENUM.RESTART_SERVICE:if(Ze.PROCESS_DESCRIPTORS_VALIDATE[e.service]===void 0)throw TB(new Error,"Invalid service",gB.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw TB(n,n.message,gB.BAD_REQUEST,void 0,void 0,!0);let s=new Sre;s.type=e.operation===Ze.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ze.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new hre(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await RB(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return gn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=Ere();try{o=await RB(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return gn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return gn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let u=new gre(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await Nre(u)}catch(l){return gn.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let l=`Created a job with type ${s.type} and id ${s.id}`;t.message=l,t.createdJob=s,t.success=!0,gn.trace(l)}return t}a(Lre,"addJob");async function Mre(e){let t=Do(e.from_date,Do.ISO_8601),r=Do(e.to_date,Do.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 n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new pre(n,e.hdb_user);try{return await Ire(s)}catch(i){throw gn.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(Mre,"getJobsInDateRange");async function bB(e){if(Ya.isEmptyOrZeroLength(e))return Ya.errorizeMessage("Invalid job ID specified.");let t=new mre(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await yre(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return gn.error(n),Ya.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(bB,"getJobById");async function Pre(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ya.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ze.JOB_STATUS_ENUM.COMPLETE||e.status===Ze.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Do().valueOf());let t=new Tre(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await wre(t),r}a(Pre,"updateJob")});var PB=g((Lpe,MB)=>{"use strict";var NB=z(),Mt=P(),Ure=require("moment"),gE=AR(),Al=$(),IB=NR(),wB=Jf(),CB=ci(),DB=Qe(),vre=Vf(),Bre=ju(),{parentPort:xre,isMainThread:LB}=require("worker_threads"),{onMessageByType:Hre}=Qe(),IR=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Gre(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(NB.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(NB.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Mt.JOB_TYPE_ENUM.csv_file_load:await Es(e,gE.csvFileLoad);break;case Mt.JOB_TYPE_ENUM.csv_url_load:await Es(e,gE.csvURLLoad);break;case Mt.JOB_TYPE_ENUM.csv_data_load:await Es(e,gE.csvDataLoad);break;case Mt.JOB_TYPE_ENUM.import_from_s3:await Es(e,gE.importFromS3);break;case Mt.JOB_TYPE_ENUM.empty_trash:break;case Mt.JOB_TYPE_ENUM.export_local:await Es(e,wB.export_local);break;case Mt.JOB_TYPE_ENUM.export_to_s3:await Es(e,wB.export_to_s3);break;case Mt.JOB_TYPE_ENUM.delete_files_before:case Mt.JOB_TYPE_ENUM.delete_records_before:await Es(e,CB.deleteFilesBefore);break;case Mt.JOB_TYPE_ENUM.delete_audit_logs_before:await Es(e,CB.deleteAuditLogsBefore);break;case Mt.JOB_TYPE_ENUM.delete_transaction_logs_before:await Es(e,vre.deleteTransactionLogsBefore);break;case Mt.JOB_TYPE_ENUM.restart_service:return await Es(e,Bre.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(Gre,"parseMessage");async function Es(e,t){try{e.job.status=Mt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Ure().valueOf(),await IB.updateJob(e.job),await qre(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):Al.error(`There was an error running ${t.name} job with id ${e.job.id}`),Al.error(n),e.job.message=n,e.job.status=Mt.JOB_STATUS_ENUM.ERROR;try{await IB.updateJob(e.job)}catch(s){throw Al.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Es,"runJob");async function qre(e){Al.trace("launching job thread:",e),LB?DB.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Mt.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})}):xre.postMessage({type:Mt.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(qre,"launchJobThread");LB&&Hre(Mt.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{DB.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Mt.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`})})}catch(r){Al.error(r)}});MB.exports={parseMessage:Gre,RunnerMessage:IR}});var vB=g((Ppe,UB)=>{"use strict";var wR=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};UB.exports=wR});var XB=g((vpe,UR)=>{"use strict";var yE=qr(),LR=zf(),RE=AR(),ks=bu(),AE=bs(),bl=ci(),Fre=$S(),Ol=_n(),OE=ZS(),Jt=yg(),bE=$(),kre=rT(),Vre=af(),BB=vT(),$re=uf(),Yre=xT(),Kre=HT(),Wre=FT(),Qre=VT(),CR=KT(),xB=Jf(),zre=Wf(),MR=NR(),k=P(),{hdb_errors:Nl,handleHDBError:yl}=se(),{HTTP_STATUS_CODES:HB}=Nl,DR=jT(),GB=ju(),QB=require("util"),Ka=Fr(),Jre=ys(),jre=Ra(),qB=PB(),FB=Du(),kB=(Pf(),ie(tl)),VB=hr(),$B=Vf(),YB=Hf(),{setServerUtilities:Xre}=(SE(),ie(OR)),{CONTEXT:Zre}=(cn(),ie($p)),{_assignPackageExport:ene}=require("../index"),{transformReq:tne}=z(),{server:rne}=(_r(),ie(Gi)),ar=bE.loggerWithTag("operation"),nne=fR(),KB=yE.searchByHash,sne=yE.searchByValue,ine=QB.promisify(yE.search),one=QB.promisify(LR.evaluateSQL),ane={[k.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[k.OPERATIONS_ENUM.CREATE_TABLE]:!0,[k.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[k.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[k.OPERATIONS_ENUM.DROP_TABLE]:!0,[k.OPERATIONS_ENUM.DROP_SCHEMA]:!0},Y=vB();async function zB(e,t){try{if(e.body.operation!=="read_log"&&(bE.log_level===k.LOG_LEVELS.INFO||bE.log_level===k.LOG_LEVELS.DEBUG||bE.log_level===k.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;ar.info(o)}}catch(n){ar.error(n)}let r=await nne.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return ane[e.body.operation]&&Jre.setSchemaDataToGlobal(n=>{n&&ar.error(n)}),r}a(zB,"processLocalTransaction");var WB=une();UR.exports={chooseOperation:JB,getOperationFunction:jB,operation:PR,processLocalTransaction:zB};Xre(UR.exports);rne.operation=PR;function JB(e){let t;try{t=jB(e)}catch(s){throw ar.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=LR.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=LR.checkASTPermissions(e,i);if(o)throw ar.error(`${HB.FORBIDDEN} from operation ${e.operation}`),ar.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),yl(new Error,o,Nl.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==k.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==k.OPERATIONS_ENUM.LOGIN&&e.operation!==k.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=zre.verifyPerms(i,s);if(o)throw ar.error(`${HB.FORBIDDEN} from operation ${e.operation}`),ar.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),yl(new Error,o,Nl.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw yl(s,"There was an error when trying to choose an operation path")}return r}a(JB,"chooseOperation");function jB(e){if(ar.trace(`getOperationFunction with operation: ${e.operation}`),WB.has(e.operation))return WB.get(e.operation);throw yl(new Error,Nl.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Nl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(jB,"getOperationFunction");ene("operation",PR);function PR(e,t){e.hdb_user=this[Zre]?.user,e.bypass_auth=!t;let r=JB(e);return zB({body:e},r)}a(PR,"operation");async function cne(e){ar.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[k.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case k.OPERATIONS_ENUM.INSERT:o=await Ka.insert(i);break;case k.OPERATIONS_ENUM.UPDATE:o=await Ka.update(i);break;case k.OPERATIONS_ENUM.UPSERT:o=await Ka.upsert(i);break;case k.OPERATIONS_ENUM.DELETE:o=await bl.deleteRecord(i);break;default:ar.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){ar.info("Invalid operation in transaction"),ar.error(o)}}a(cne,"catchup");async function Vn(e){tne(e);let t,r;try{r=await MR.addJob(e),t=r.createdJob,ar.info("addJob result",r);let n=new qB.RunnerMessage(t,e);return{message:await qB.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw ar.error(s),yl(n,s)}}a(Vn,"executeJob");function une(){let e=new Map;return e.set(k.OPERATIONS_ENUM.INSERT,new Y(Ka.insert)),e.set(k.OPERATIONS_ENUM.UPDATE,new Y(Ka.update)),e.set(k.OPERATIONS_ENUM.UPSERT,new Y(Ka.upsert)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new Y(yE.searchByConditions)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_HASH,new Y(KB)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_ID,new Y(KB)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_VALUE,new Y(sne)),e.set(k.OPERATIONS_ENUM.SEARCH,new Y(ine)),e.set(k.OPERATIONS_ENUM.SQL,new Y(one)),e.set(k.OPERATIONS_ENUM.CSV_DATA_LOAD,new Y(Vn,RE.csvDataLoad)),e.set(k.OPERATIONS_ENUM.CSV_FILE_LOAD,new Y(Vn,RE.csvFileLoad)),e.set(k.OPERATIONS_ENUM.CSV_URL_LOAD,new Y(Vn,RE.csvURLLoad)),e.set(k.OPERATIONS_ENUM.IMPORT_FROM_S3,new Y(Vn,RE.importFromS3)),e.set(k.OPERATIONS_ENUM.CREATE_SCHEMA,new Y(ks.createSchema)),e.set(k.OPERATIONS_ENUM.CREATE_DATABASE,new Y(ks.createSchema)),e.set(k.OPERATIONS_ENUM.CREATE_TABLE,new Y(ks.createTable)),e.set(k.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new Y(ks.createAttribute)),e.set(k.OPERATIONS_ENUM.DROP_SCHEMA,new Y(ks.dropSchema)),e.set(k.OPERATIONS_ENUM.DROP_DATABASE,new Y(ks.dropSchema)),e.set(k.OPERATIONS_ENUM.DROP_TABLE,new Y(ks.dropTable)),e.set(k.OPERATIONS_ENUM.DROP_ATTRIBUTE,new Y(ks.dropAttribute)),e.set(k.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new Y(AE.describeSchema)),e.set(k.OPERATIONS_ENUM.DESCRIBE_DATABASE,new Y(AE.describeSchema)),e.set(k.OPERATIONS_ENUM.DESCRIBE_TABLE,new Y(AE.describeTable)),e.set(k.OPERATIONS_ENUM.DESCRIBE_ALL,new Y(AE.describeAll)),e.set(k.OPERATIONS_ENUM.DELETE,new Y(bl.deleteRecord)),e.set(k.OPERATIONS_ENUM.ADD_USER,new Y(Ol.addUser)),e.set(k.OPERATIONS_ENUM.ALTER_USER,new Y(Ol.alterUser)),e.set(k.OPERATIONS_ENUM.DROP_USER,new Y(Ol.dropUser)),e.set(k.OPERATIONS_ENUM.LIST_USERS,new Y(Ol.listUsersExternal)),e.set(k.OPERATIONS_ENUM.LIST_ROLES,new Y(OE.listRoles)),e.set(k.OPERATIONS_ENUM.ADD_ROLE,new Y(OE.addRole)),e.set(k.OPERATIONS_ENUM.ALTER_ROLE,new Y(OE.alterRole)),e.set(k.OPERATIONS_ENUM.DROP_ROLE,new Y(OE.dropRole)),e.set(k.OPERATIONS_ENUM.USER_INFO,new Y(Ol.userInfo)),e.set(k.OPERATIONS_ENUM.READ_LOG,new Y(kre)),e.set(k.OPERATIONS_ENUM.ADD_NODE,new Y(Vre)),e.set(k.OPERATIONS_ENUM.UPDATE_NODE,new Y(BB)),e.set(k.OPERATIONS_ENUM.SET_NODE_REPLICATION,new Y(BB)),e.set(k.OPERATIONS_ENUM.REMOVE_NODE,new Y($re)),e.set(k.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Y(Yre)),e.set(k.OPERATIONS_ENUM.PURGE_STREAM,new Y(Kre)),e.set(k.OPERATIONS_ENUM.SET_CONFIGURATION,new Y(VB.setConfiguration)),e.set(k.OPERATIONS_ENUM.CLUSTER_STATUS,new Y(Wre.clusterStatus)),e.set(k.OPERATIONS_ENUM.CLUSTER_NETWORK,new Y(Qre)),e.set(k.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Y(CR.setRoutes)),e.set(k.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Y(CR.getRoutes)),e.set(k.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Y(CR.deleteRoutes)),e.set(k.OPERATIONS_ENUM.EXPORT_TO_S3,new Y(Vn,xB.export_to_s3)),e.set(k.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new Y(Vn,bl.deleteFilesBefore)),e.set(k.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Y(Vn,bl.deleteFilesBefore)),e.set(k.OPERATIONS_ENUM.EXPORT_LOCAL,new Y(Vn,xB.export_local)),e.set(k.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new Y(MR.handleGetJobsByStartDate)),e.set(k.OPERATIONS_ENUM.GET_JOB,new Y(MR.handleGetJob)),e.set(k.OPERATIONS_ENUM.GET_FINGERPRINT,new Y(DR.getFingerprint)),e.set(k.OPERATIONS_ENUM.SET_LICENSE,new Y(DR.setLicense)),e.set(k.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Y(DR.getRegistrationInfo)),e.set(k.OPERATIONS_ENUM.RESTART,new Y(GB.restart)),e.set(k.OPERATIONS_ENUM.RESTART_SERVICE,new Y(Vn,GB.restartService)),e.set(k.OPERATIONS_ENUM.CATCHUP,new Y(cne)),e.set(k.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Y(jre.systemInformation)),e.set(k.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Y(Vn,bl.deleteAuditLogsBefore)),e.set(k.OPERATIONS_ENUM.READ_AUDIT_LOG,new Y(Fre)),e.set(k.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new Y(FB.createTokens)),e.set(k.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new Y(FB.refreshOperationToken)),e.set(k.OPERATIONS_ENUM.LOGIN,new Y(kB.login)),e.set(k.OPERATIONS_ENUM.LOGOUT,new Y(kB.logout)),e.set(k.OPERATIONS_ENUM.GET_CONFIGURATION,new Y(VB.getConfiguration)),e.set(k.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new Y(Jt.customFunctionsStatus)),e.set(k.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new Y(Jt.getCustomFunctions)),e.set(k.OPERATIONS_ENUM.GET_COMPONENT_FILE,new Y(Jt.getComponentFile)),e.set(k.OPERATIONS_ENUM.GET_COMPONENTS,new Y(Jt.getComponents)),e.set(k.OPERATIONS_ENUM.SET_COMPONENT_FILE,new Y(Jt.setComponentFile)),e.set(k.OPERATIONS_ENUM.DROP_COMPONENT,new Y(Jt.dropComponent)),e.set(k.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new Y(Jt.getCustomFunction)),e.set(k.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new Y(Jt.setCustomFunction)),e.set(k.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new Y(Jt.dropCustomFunction)),e.set(k.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new Y(Jt.addComponent)),e.set(k.OPERATIONS_ENUM.ADD_COMPONENT,new Y(Jt.addComponent)),e.set(k.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new Y(Jt.dropCustomFunctionProject)),e.set(k.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Y(Jt.packageComponent)),e.set(k.OPERATIONS_ENUM.PACKAGE_COMPONENT,new Y(Jt.packageComponent)),e.set(k.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Y(Jt.deployComponent)),e.set(k.OPERATIONS_ENUM.DEPLOY_COMPONENT,new Y(Jt.deployComponent)),e.set(k.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new Y($B.readTransactionLog)),e.set(k.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new Y(Vn,$B.deleteTransactionLogsBefore)),e.set(k.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new Y(YB.installModules)),e.set(k.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new Y(YB.auditModules)),e.set(k.OPERATIONS_ENUM.GET_BACKUP,new Y(ks.getBackup)),e}a(une,"initializeOperationFunctionMap")});var IE=g((xpe,tx)=>{"use strict";var vR=P(),lne=z(),Il=$(),{handleHDBError:BR,hdb_errors:NE}=se(),{isMainThread:_ne}=require("worker_threads"),{Readable:dne}=require("stream"),ZB=require("os"),fne=require("util"),Ene=dT(),hne=fne.promisify(Ene.authorize),ex=XB(),{createGzip:mne,constants:pne}=require("zlib");function Sne(e){let t=`Found an uncaught exception with message: ${e.message}. ${ZB.EOL}Stack: ${e.stack} ${ZB.EOL}Terminating ${_ne?"HDB":"thread"}.`;console.error(t),Il.fatal(t),process.exit(1)}a(Sne,"handleServerUncaughtException");function Tne(e,t,r){if(Il[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 n=e.statusCode?e.statusCode:NE.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(Tne,"serverErrorHandler");function gne(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=BR(new Error,"Invalid JSON.",NE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(lne.isEmpty(e.body.operation)){let n=BR(new Error,"Request body must include an 'operation' property.",NE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(gne,"reqBodyValidationHandler");function Rne(e,t,r){let n;e.body.operation!==vR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==vR.OPERATIONS_ENUM.LOGIN&&e.body.operation!==vR.OPERATIONS_ENUM.LOGOUT?hne(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{Il.warn(s),Il.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(BR(s,i,NE.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(Rne,"authHandler");async function Ane(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=ex.chooseOperation(e.body);let s=await ex.processLocalTransaction(e,n);if(s instanceof dne&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(mne({level:pne.Z_BEST_SPEED})))}return s}catch(s){throw Il.error(s),s}}a(Ane,"handlePostRequest");tx.exports={authHandler:Rne,handlePostRequest:Ane,handleServerUncaughtException:Sne,serverErrorHandler:Tne,reqBodyValidationHandler:gne}});var ix=g((Gpe,sx)=>{"use strict";var One=require("fastify-plugin"),{handlePostRequest:rx,authHandler:bne,reqBodyValidationHandler:yne}=IE();async function Nne(e){e.decorate("hdbCore",{preValidation:[yne,bne],request:t=>nx(rx(t,response)),requestWithoutAuthentication:(t,r)=>nx(rx(t,r,!0))})}a(Nne,"hdbCore");async function nx(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(nx,"convertAsyncIterators");sx.exports=One(Nne)});var cx=g((kpe,ax)=>{"use strict";var Fpe=require("fs"),xR=ee();xR.initSync();var{CONFIG_PARAMS:ox}=P(),Ine=1024*1024*1024;function wne(e){let t=xR.get(ox.HTTP_TIMEOUT),r=xR.get(ox.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Ine,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(wne,"getServerOptions");ax.exports=wne});var _x=g(($pe,lx)=>{"use strict";var HR=ee();HR.initSync();var{CONFIG_PARAMS:ux}=P();function Cne(){let e=HR.get(ux.HTTP_CORSACCESSLIST),t=HR.get(ux.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(Cne,"getCORSOptions");lx.exports=Cne});var Ex=g((Kpe,fx)=>{"use strict";var dx=ee();dx.initSync();var Dne=P();function Lne(){return dx.get(Dne.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Lne,"getHeaderTimeoutConfig");fx.exports=Lne});var qR={};Fe(qR,{customFunctionsServer:()=>Une,ready:()=>Cx,start:()=>Pne});function Pne(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Vs||(Vs=wx(t),at.http((await Vs).server));let o=await Vs,c=(0,GR.dirname)(s),u=(0,GR.dirname)(n);if(u.startsWith("/")&&(u=u.slice(1)),!hx.has(c)){hx.add(c);try{o.register(Bne(c,u))}catch(_){if(_.message==="Root plugin has already booted")Ye.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:Cx}}async function Une(){try{Ye.info("In Custom Functions Fastify server"+process.cwd()),Ye.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ye.debug(`Custom Functions server process ${process.pid} starting up.`),await vne();let e=Rx.get(Ax.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Vs=await wx(e)}catch(r){throw Ye.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ye.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ye.error(`Custom Functions ${process.pid} Error: ${e}`),Ye.error(e),process.exit(1)}}async function vne(){try{Ye.info("Custom Functions starting configuration."),await Ox.setUsersToGlobal(),Ye.info("Custom Functions completed configuration.")}catch(e){Ye.error(e)}}function Bne(e,t){return async function(r){try{Ye.info("Custom Functions starting buildRoutes"),Ye.trace("Loading fastify routes folder "+e),(0,mx.existsSync)(e)&&r.register(gx.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Ye.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Ye.error(s.message):s&&Ye.error(s),o()})}catch(n){Ye.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function wx(e){Ye.info("Custom Functions starting buildServer.");let t=(0,bx.default)(e),r=(0,px.default)(t);r.server.headersTimeout=(0,Nx.default)(),r.setErrorHandler(Ix.serverErrorHandler);let n=(0,yx.default)();return n&&r.register(Sx.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(Tx.default),await r.register(Mne),await r.after(),Qg(r),Ye.info("Custom Functions completed buildServer."),r}function Cx(){if(Vs)return Vs.then?Vs.then(e=>e.ready()):Vs.ready()}var GR,mx,px,Sx,Tx,gx,Rx,Ax,Ye,Mne,Ox,bx,yx,Nx,Ix,Vs,hx,Dx=Re(()=>{GR=require("path"),mx=require("fs"),px=H(require("fastify")),Sx=H(require("@fastify/cors")),Tx=H(oR()),gx=H(require("@fastify/autoload")),Rx=H(ee()),Ax=H(P()),Ye=H($()),Mne=H(ix()),Ox=H(_n()),bx=H(cx()),yx=H(_x()),Nx=H(Ex()),Ix=H(IE());Da();_r();hx=new Set;a(Pne,"start");a(Une,"customFunctionsServer");a(vne,"setUp");a(Bne,"buildRouteFolder");a(wx,"buildServer");a(Cx,"ready")});var FR={};Fe(FR,{start:()=>xne});function xne(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,vx.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){Mx||(Mx=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=Lx.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,Px.default)(s,(0,Ux.realpathSync)(o))}}return i(s)},{runFirst:!0})),Lx.set(r,n)}}}var Px,Ux,vx,Lx,Mx,Bx=Re(()=>{Px=H(require("send")),Ux=require("fs"),vx=H(require("serve-static")),Lx=new Map;a(xne,"start")});function qne(){let e=(0,qx.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),VR=setInterval(()=>{DE.notify(e)},Gne).unref())}function Fne(e,t=1,r){if(kR++,(0,$s.startWorker)("server/threads/threadServer.js",{name:ja.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function u(_){_.type===ja.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",u),o(n))}a(u,"onMessage"),n.on("message",u),n.on("error",c)});Hne.push(s),await s,Wa.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=CE.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=Wa.indexOf(n);o>-1&&Wa.splice(o,1)}if(a(i,"removeWorker"),Qa){let o=Qa;Qa=[];for(let c of o)Fx[c.localPort](null,c)}}}),r){let n=setInterval(()=>{$R?$R=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,$s.shutdownWorkers)(),kR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function kx(e=0,t){if(typeof e=="string")try{(0,LE.existsSync)(e)&&(0,LE.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=kne:r=Vne(t):r=YR;let n=(0,za.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=Fx[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),$R=!0,r(o,(c,u)=>{if(!c){if(xx){let l=o._socket||new za.Socket({handle:o,writable:!0,readable:!0});xx.deliverSocket(l,e,u),l.resume()}else kR>0?(Qa.length===0&&setTimeout(()=>{Qa.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),o.localPort=e,Qa.push(o)):(console.log("start up a dynamic thread to handle request"),Fne(0));Tr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new za.Socket({handle:o,writable:!0,readable:!0});Wne(l,c,e)}Tr(!0,"socket-routed")})};let s=du();DE.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function YR(e,t){let r,n=0;for(let s of Wa){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=wE)return wE=i,t(r);n=i}wE=0,t(r)}function kne(e,t){let r={};e.getpeername(r);let n=r.address,s=Ja.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);YR(e,o=>{Ja.set(n,{worker:o,lastUsed:i}),t(o)})}function Vne(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new za.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let u=o.toString("latin1").match(t)?.[1],_=Ja.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,s(_.worker);YR(n,d=>{Ja.set(u,{worker:d,lastUsed:l}),s(d,o)})})}a(r,"findByHeaderAffinity")}function Yne(){wE=0;for(let e of Wa)e.expectedIdle=e.recentELU.idle+$ne,e.requests=1;Wa.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Wne(e,t,r){let n=Kne++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),CE.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),CE.delete(n)),s.event=="destroy"&&(e.destroy(),CE.delete(n))})}var $s,za,ja,DE,LE,Gx,qx,Wa,Qa,Fx,xx,kR,Hne,VR,Gne,$R,wE,Hx,Ja,$ne,CE,Kne,Vx=Re(()=>{$s=H(Qe()),za=require("net"),ja=H(P()),DE=H($()),LE=require("fs");Ds();Gx=require("worker_threads"),qx=H(Xi()),Wa=[],Qa=[],Fx=[],kR=0,Hne=[];Gx.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,$s.onMessageFromWorkers)(e=>{e.type===ja.ITC_EVENT_TYPES.RESTART&&VR&&(clearInterval(VR),qne())}));Gne=6e5;a(qne,"licenseWarning");a(Fne,"startHTTPWorker");a(kx,"startSocketServer");wE=0;a(YR,"findMostIdleWorker");Hx=36e5,Ja=new Map;a(kne,"findByRemoteAddressAffinity");a(Vne,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ja)r.lastUsed+Hx<e&&Ja.delete(t)},Hx).unref();$ne=1e3;a(Yne,"updateWorkerIdleness");(0,$s.setMonitorListener)(Yne);CE=new Map,Kne=1;a(Wne,"proxySocket")});var zR={};Fe(zR,{Request:()=>KR,createReuseportFd:()=>ME});var $x,KR,WR,QR,ME,PE=Re(()=>{$x=require("os"),KR=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new QR(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new WR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},WR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},QR=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,$x.platform)()!="win32"&&(ME=require("node-unix-socket").createReuseportFd)});var Qx=g((aSe,Wx)=>{"use strict";var Qne=require("cluster"),Lo=ee();Lo.initSync();var Kx=P(),rSe=require("util"),Ys=$(),nSe=require("fs"),zne=require("fastify"),sSe=du(),Jne=require("@fastify/cors"),jne=require("@fastify/compress"),Xne=require("@fastify/static"),Zne=oR(),ese=require("path"),{PACKAGE_ROOT:tse}=P(),rse=ys(),nse=z(),sse=_n(),ise=Xi(),{server:ose}=(_r(),ie(Gi)),{node_request_key:iSe}=(PE(),ie(zR)),{authHandler:ase,handlePostRequest:cse,serverErrorHandler:use,reqBodyValidationHandler:lse}=IE(),oSe=require("net"),{registerContentHandlers:_se}=(Da(),ie(y0)),dse=6e4,fse=1024*1024*1024,Ese="TRUE",{CONFIG_PARAMS:wl}=Kx,Xa;Wx.exports={hdbServer:Yx,start:Yx};async function Yx(e){try{Ys.info("In Fastify server"+process.cwd()),Ys.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ys.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Qne.isMaster,await hse();let t=e.securePort>0;Xa=mse(t),await Xa.ready(),e||(e={}),e.isOperationsServer=!0;try{ose.http(Xa.server,e),Xa.server.closeIdleConnections||await Xa.listen({port:0,host:"::"})}catch(r){throw Xa.close(),Ys.error(r),Ys.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Ys.fatal(t),process.exit(1)}}a(Yx,"operationsServer");async function hse(){Ys.trace("Configuring HarperDB process."),rse.setSchemaDataToGlobal(),await sse.setUsersToGlobal(),await ise.getLicense()}a(hse,"setUp");function mse(e){Ys.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=pse(e),r=zne(t);r.server.headersTimeout=Tse(),r.setErrorHandler(use);let n=Sse();n&&r.register(Jne,n),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Zne),r.register(jne),r.register(Xne,{root:ese.join(tse,"studio/build-local")}),_se(r);let s=Lo.get(Kx.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!nse.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[lse,ase],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),cse(i,o)}),r.get("/health",()=>"HarperDB is running."),Ys.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(mse,"buildServer");function pse(e){let t=Lo.get(wl.OPERATIONSAPI_NETWORK_TIMEOUT),r=Lo.get(wl.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:fse,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(pse,"getServerOptions");function Sse(){let e=Lo.get(wl.OPERATIONSAPI_NETWORK_CORS),t=Lo.get(wl.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Ese)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(Sse,"getCORSOpts");function Tse(){return Lo.get(wl.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??dse}a(Tse,"getHeaderTimeoutConfig")});var tA={};Fe(tA,{disableNATS:()=>Rse,publishToStream:()=>BE,setNATSReplicator:()=>JR,setPublishToStream:()=>Ase,setSubscription:()=>eA,start:()=>gse});function gse(){Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&bse()}function Rse(e=!0){Zx=e}function Ase(e,t){BE=e,eA=t}function bse(){if(Zx||process.env._DISABLE_NATS)return;let e=pr(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];JR(s,r,i)}}rA((r,n)=>{JR(r.tableName,r.databaseName,r),n&&tH(r)}),!zx&&(zx=!0)}function JR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends $t{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Me],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Me]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Me],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Me],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Me]})}static defineSchema(i){tH(i)}static subscribe(){let i=new In;return eA(t,e,i),i}static subscribeOnThisThread(i){return i<(Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Ose)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new UE(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=eH;return i}a(n,"getNATSTransaction")}function tH(e){let t=Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_NODENAME);BE(`${XR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,ZR.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 Jx,XR,ZR,jx,Xx,Cl,Dl,vE,Zx,BE,eA,Ose,eH,zx,UE,jR,rH=Re(()=>{Ae();cn();Jx=H(ut()),XR=H(Ve()),ZR=H(Os());Cc();jx=H(MS()),Xx=H(Br()),Cl=H(ee()),Dl=H(P()),vE=H($());a(gse,"start");a(Rse,"disableNATS");BE=Jx.publishToStream,eA=jx.setSubscription;a(Ase,"setPublishToStream");Ose=2;a(bse,"assignReplicationSource");a(JR,"setNATSReplicator");a(tH,"publishSchema");UE=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,E=l.operation=="put"?"upsert":l.operation;u||(vE.trace(`Sending transaction event ${E}`),_=u={operation:E,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,E!=="delete"&&E!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===E?(o.push(l.record),c.push(l.id)):_=_.next={operation:E,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&n.push(BE(`${XR.SUBJECT_PREFIXES.TXN}.${s}.${u.table}`,(0,ZR.createNatsTableStreamName)(s,u.table),void 0,u)?.catch(l=>{throw vE.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(n)}},jR=class extends UE{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,Xx.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};eH=new jR});var pH=g(Mi=>{"use strict";var{isMainThread:iA,parentPort:Ml,threadId:xE}=require("worker_threads"),{Socket:yse,createServer:Nse}=require("net"),{createServer:Ise,IncomingMessage:wse}=require("http"),{createServer:Cse}=require("https"),{readFileSync:Dse,unlinkSync:nH,existsSync:Lse}=require("fs"),Pt=$(),qe=ee(),_t=P(),{server:qE}=(_r(),ie(Gi)),{WebSocketServer:Mse}=require("ws"),{createSecureContext:Pse,createServer:Use}=require("node:tls"),{getTicketKeys:cH,restartNumber:vse,getWorkerIndex:Pl}=Qe(),{Headers:uH,appendHeader:Bse}=(el(),ie(QU)),{recordAction:Ll,recordActionBinary:sH}=(Ds(),ie(pu)),{Request:lH,createReuseportFd:iH}=(PE(),ie(zR)),{checkMemoryLimit:xse}=Xi(),{X509Certificate:Hse}=require("crypto"),_H=require("tls"),Gse=_H.createSecureContext,Za;_H.createSecureContext=function(e){return Za||Gse(e)};var dH=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG);if(dH){let e;if(iA)e=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Pt.info("Could not close debugger",t)}});else{let t=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Pl()>=0&&(e=t+Pl())}if(e){let t=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Pt.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&iA)try{require("inspector").open(9229)}catch(e){vse<=1&&Pt.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:ESe,CONFIG_PARAMS:qse}=_t;qe.initSync();var Fse=qe.get(qse.HTTP_SESSIONAFFINITY),hs={};Mi.registerServer=uA;Mi.httpServer=lA;Mi.deliverSocket=cA;Mi.startServers=fH;Mi.when_components_loaded=null;Mi.createSNICallback=_A;qE.http=lA;qE.request=Yse;qE.socket=Kse;qE.ws=Wse;var nA={},HE={},kse,Ks={},GE={},Vse=[],oA=[];function fH(){return Mi.when_components_loaded=dA().loadRootComponents(!0).then(()=>{Ml?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)cA(n,r,s);else if(t.requestId)$se(t);else if(t.type===_t.ITC_EVENT_TYPES.SHUTDOWN){Pt.trace("received shutdown request",xE);for(let i in hs){let o=hs[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(E=>E.description.includes("connections")),l=0,d=setInterval(()=>{l++;let E=l>=100,f=o[_][E?"all":"idle"]();if(f.length===0){E&&clearInterval(d);return}l===1?Pt.info(`Closing ${f.length} idle connections`):E&&Pt.warn(`Forcefully closing ${f.length} active connections`);for(let h=0,p=f.length;h<p;h++){let S=f[h].socket;S._httpMessage&&!S._httpMessage.finished&&!E||(E?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
|
|
31
31
|
Connection: close\r
|
|
32
32
|
\r
|
|
33
|
-
`))}},25).unref()}o.close?.(()=>{if(qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Pl()==0)try{
|
|
34
|
-
`)}a(oH,"defaultNotFound");function sA(e){return e.startsWith("-----BEGIN")?e:Cse(e)}a(sA,"readPEM");function _A(e){let t=[];for(let i=0;e[i];i++)t.push(e[i]);t.length||t.push(e);let r=new Map,n,s=!1;for(let i of t){let o=sA(i.privateKey),c=sA(i.certificate),u=i.certificateAuthority&&sA(i.certificateAuthority);if(!o||!c)throw new Error("Missing private key or certificate for secure server");let _={ciphers:i.ciphers,ca:u,ticketKeys:aH()},l=Mse(_);l.options=_,_.instantiatedContext=l,l.context.setCert(c),l.context.setKey(o,void 0),_.cert=c,_.key=o,l.certStart=c.slice(0,100).toString(),n||(n=l);let d=new xse(c),E=i.hostname??i.host??i.hostnames??i.hosts??(d.subjectAltName?d.subjectAltName.split(",").map(f=>{let h=f.indexOf(":");return f.slice(h+1)}):[d.subject.match(/CN=(.*)/)?.[1]]);Array.isArray(E)||(E=[E]);for(let f of E)f?(f[0]==="*"&&(s=!0,f=f.slice(1)),r.has(f)||r.set(f,l)):Pt.error("No hostname found for certificate at",i.certificate)}return(i,o)=>{let c=i;for(;;){let u=r.get(c);if(u)return Pt.debug("Found certificate for",i,u.certStart),o(null,u);if(s&&c){let _=c.indexOf(".",1);_<0?c="":c=c.slice(_)}else break}Pt.debug("No certificate found to match",i,"using the first certificate"),o(null,n)}}a(_A,"createSNICallback")});async function RH({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await fA.get(e,{returnNonexistent:!0});i=new mA(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await fA.get(e);o&&o.delete()}i=new kE(e,t)}return n&&(n.id=e,n.user={username:t?.username},Ul.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function EA(){return FE++,FE>65500&&(FE=1),FE}function hA(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=yi.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return rt(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var SH,Pi,TH,gH,pH,fA,Ul,FE,kE,mA,AH=Re(()=>{Ae();Zu();SH=H(Br()),Pi=H($());so();TH=H(Qe()),gH=H(mH());lr();pH=100,fA=Et({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),Ul=Et({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,TH.getWorkerIndex)()===0&&(async()=>{await gH.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of Ul.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await at.getUser(r.user.username));try{await hA(r,t,r)}catch{(0,Pi.warn)("Failed to publish will",t)}Ul.delete(e.id)}})();a(RH,"getSession");FE=1;a(EA,"getNextMessageId");kE=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),u,_;if(c>-1?(u=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let l=this.subscriptions.find(T=>T.topic===s),d;l?(d=i>0,l.end(),this.subscriptions.splice(this.subscriptions.indexOf(l),1)):d=i===2;let E={search:u,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Pi.trace)("Resuming subscription from",s,"from",o);let f=yi.getMatch(_);if(!f){let T=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}if(E.url=f.relativeURL,E.url.indexOf("+")>-1||E.url.indexOf("#")>-1){let T=E.url.slice(1);if(T.indexOf("#")>-1&&T.indexOf("#")!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(E.isCollection=!0,T.indexOf("+")===T.length-1)E.onlyChildren=!0,E.url="/"+T.slice(0,T.length-1);else{let A=T.split("/"),b;for(let U=0;U<A.length;U++)if(A[U].indexOf("+")>-1)if(A[U]==="+")b=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&b)throw new Error("Filters can not be combined");let I=!0;A[A.length-1]==="#"&&(A.length--,I=!1),b&&(n=a(U=>{let F=U.id;if(!Array.isArray(F)||I&&F.length!==A.length)return!1;for(let M=0;M<A.length;M++)if(A[M]!=="+"&&A[M]!==F[M])return!1;return!0},"filter"));let B=A.indexOf("+");E.url="/"+(B>-1?A.slice(0,B):A).concat("").join("/")}}let h=f.path,p=f.Resource,S=await rt(E,async()=>{let T=this.createContext();T.topic=s,T.retainHandling=i;let A=await p.subscribe(E,T);if(!A)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!A[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let b=(async()=>{for await(let I of A)try{let B;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,B=this.needsAcknowledge(I)):(I.acknowledge?.(),B=EA());let U=I.id;if(Array.isArray(U)&&(U=wa(U)),U==null&&(U=""),await this.listener(h+"/"+U,I.value,B,t)===!1)break;this.awaitingAcks?.size>pH?await new Promise(M=>setTimeout(M,this.awaitingAcks.size-pH)):await new Promise(setImmediate)}catch(B){(0,Pi.warn)(B)}})();return A});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=EA();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return hA(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();rt(r,async()=>{try{if(!t){let n=await Ul.get(this.sessionId);n?.doesExist()&&await hA(n,n.data,r)}}finally{await Ul.delete(this.sessionId)}}).catch(n=>{(0,Pi.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(hA,"publish");mA=class extends kE{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{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,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=EA(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Pi.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,SH.getNextMonotonicTime)()),(0,Pi.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),fA.put(this.sessionRecord)}}});var SA={};Fe(SA,{bypassAuth:()=>Wse,start:()=>Qse});function Wse(){IH=!0}function Qse({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new NH.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c,u=r?.mtls;return n&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){o.events.emit("connection",_),Xt.debug("Received WebSocket connection for MQTT from",_._socket.remoteAddress);let{onMessage:E,onClose:f}=bH(_,h=>{_.send(h)},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",E),_.on("close",f),_.on("error",h=>{Xt.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let l;if(o.events.emit("connection",_),Xt.debug(`Received ${_.getCertificate?"SSL":"TCP"} connection for MQTT from ${_.remoteAddress}`),u){if(_.authorized)try{let f=u.user;if(f!==null){(f===void 0||f==="Common Name"||f==="CN")&&(f=_.getPeerCertificate().subject.CN);try{l=await e.getUser(f,null,null),(0,ec.get)(jt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&$E.notify({username:l?.username,status:jt.AUTH_AUDIT_STATUS.SUCCESS,type:jt.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})}catch(h){throw(0,ec.get)(jt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&$E.error({username:f,status:jt.AUTH_AUDIT_STATUS.FAILURE,type:jt.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:_.remoteAddress}),h}}else Xt.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(f){o.events.emit("error",f,_),Xt.error(f)}else if(u.required)return Xt.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!l&&IH&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,yH.getSuperUser)(),Xt.debug("Auto-authorizing local connection",l?.username));let{onMessage:d,onClose:E}=bH(_,f=>_.write(f),null,l,o);_.on("data",d),_.on("close",E),_.on("error",f=>{Xt.info("Socket error",f)})},{port:t,securePort:s,mtls:u})),c}function bH(e,t,r,n,s){OH||(OH=!0,mu(d=>{VE>0&&d.push({metric:"mqtt-connections",connections:VE,byThread:!0})}));let i;VE++;let o,c={protocolVersion:4},u=(0,YE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){VE--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),Qr(!1,"connection","mqtt","disconnect"),Xt.debug("MQTT connection was closed",e.remoteAddress))}return a(l,"onClose"),u.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;let E=d.topic,f=E?.indexOf("/",1),h=f>0?E.slice(0,f):E;Sr(d.length,"bytes-received",h,S(d),"mqtt");try{switch(o?.receivedPacket?.(),d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await at.getUser(d.username,d.password.toString(),r),(0,ec.get)(jt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&$E.notify({username:n?.username,status:jt.AUTH_AUDIT_STATUS.SUCCESS,type:jt.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(M){return(0,ec.get)(jt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&$E.error({username:d.username,status:jt.AUTH_AUDIT_STATUS.FAILURE,type:jt.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,M),Qr(!1,"connection","mqtt","connect"),p({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),Qr(!1,"connection","mqtt","connect"),p({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let M=e.deserialize||(e.deserialize=yo(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?M(d.will.payload):void 0,delete d.will.payload}o=RH({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(M){return Xt.error(M),s.events.emit("auth-failed",d,e,M),Qr(!1,"connection","mqtt","connect"),p({cmd:"connack",reasonCode:M.code||5,returnCode:M.code||128})}s.events.emit("connected",o,e),Qr(!0,"connection","mqtt","connect"),p({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((M,Q,J,X)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",M);let oe=M.indexOf("/",1),ue=oe>0?M.slice(0,oe):M;p({cmd:"publish",topic:M,payload:T(Q),messageId:J||Math.floor(Math.random()*1e8),qos:X.qos},ue);let le=e._socket??e;return le.writableNeedDrain?new Promise(Be=>le.once("drain",Be)):!le.closed}catch(oe){return Xt.error(oe),o?.disconnect(),s.sessions.delete(o),!1}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let A=[];for(let M of d.subscriptions){let Q;try{Q=(await o.addSubscription(M,M.qos>=1)).qos||0}catch(J){s.events.emit("error",J,e,M,o),Xt.error(J),Q=c.protocolVersion<5?128:J.statusCode===403?135:J.statusCode===404?143:128}A.push(Q)}await o.committed,p({cmd:"suback",granted:A,messageId:d.messageId});break;case"unsubscribe":{let M=[];for(let Q of d.unsubscriptions)M.push(o.removeSubscription(Q)?0:17);p({cmd:"unsuback",granted:M,messageId:d.messageId});break}case"pubrel":p({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let b=d.qos===2?"pubrec":"puback",I=e.deserialize||(e.deserialize=yo(r?.headers.get?.("content-type"))),U=(d.payload?.length||0)>0?I(d.payload):void 0,F;try{F=await o.publish(d,U)}catch(M){s.events.emit("error",M,e,d,o),Xt.warn(M),d.qos>0&&p({cmd:b,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&p({cmd:b,messageId:d.messageId,reasonCode:F===!1?144:0},d.topic);break;case"pubrec":p({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":p({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),Qr(!0,"connection","mqtt","disconnect"),Xt.debug("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(A){s.events.emit("error",A,e,d,o),Xt.error(A),p({cmd:"disconnect"})}function p(A,b){let I=(0,YE.generate)(A,c);t(I),Sr(I.length,"bytes-sent",b,S(A),"mqtt")}a(p,"sendPacket");function S(A){return A.qos>0?A.cmd+",qos="+A.qos:A.cmd}a(S,"packetMethodName");function T(A){return Ro(A,r)}a(T,"serialize")}),u.on("error",d=>{Xt.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:_,onClose:l}}var YE,yH,ec,jt,pA,NH,$E,Xt,IH,OH,VE,wH=Re(()=>{YE=require("mqtt-packet");AH();yH=H(_n());Da();Ds();lr();ec=H(ee()),jt=H(P()),pA=H($()),NH=require("events"),$E=(0,pA.loggerWithTag)("auth-event"),Xt=(0,pA.loggerWithTag)("mqtt"),IH=(0,ec.get)(jt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Wse,"bypassAuth");a(Qse,"start");VE=0;a(bH,"onSocket")});var Ff={};Fe(Ff,{component_errors:()=>rc,loadComponent:()=>KE,loadComponentDirectories:()=>xH,setErrorReporter:()=>jse});function xH(e,t){t&&(gA=t),e&&(RA=e);let r=[];if((0,et.existsSync)(TA)){let s=(0,et.readdirSync)(TA,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,st.join)(TA,o);r.push(KE(c,gA,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(KE(n,gA,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{BH=!0})}function jse(e){vl=e}async function KE(e,t,r,n,s,i){let o=(0,et.realpathSync)(e);if(!DH.has(o)){DH.set(o,!0),s&&(RA=s);try{let c;n&&(rc=new Map);let u=(0,st.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,et.existsSync)(u)?c=n?(0,vH.getConfigObj)():(0,LH.parseDocument)((0,et.readFileSync)(u,"utf8"),{simpleKeys:!0}).toJSON():c=AA;let _=(0,st.join)(e,"node_modules","harperdb");try{Mo.isMainThread&&(n||(0,et.existsSync)(_)&&(0,et.realpathSync)(sc.PACKAGE_ROOT)!==(0,et.realpathSync)(_))&&((0,et.rmSync)(_,{recursive:!0,force:!0}),(0,et.existsSync)((0,st.join)(e,"node_modules"))||(0,et.mkdirSync)((0,st.join)(e,"node_modules")),(0,et.symlinkSync)(sc.PACKAGE_ROOT,_,"dir"))}catch(E){tc.default.error("Error symlinking harperdb module",E)}let l=[],d=n;for(let E in c){let f=c[E];if(rc.set(n?E:(0,st.basename)(e),!1),!f)continue;let h,p=f.package;try{if(p){let I=e,B;for(;!(0,et.existsSync)(B=(0,st.join)(I,"node_modules",E));)if(I=(0,st.dirname)(I),I.length<(0,UH.getHdbBasePath)().length){B=null;break}if(B)h=await KE(B,t,r,!1),d=!0;else throw new Error(`Unable to find package ${E}:${p}`)}else h=Xse[E];if(!h)continue;l.push(h);let S=a(I=>(I.origin=r,Et(I)),"ensureTable"),T=f.network||(f.port||f.securePort)&&f,A=T?.securePort||T?.https&&T.port,b=!T?.https&&T?.port;if(Mo.isMainThread&&(h=await h.startOnMainThread?.({server:at,ensureTable:S,port:b,securePort:A,resources:t,...f})||h,n&&T))for(let I of[b,A])try{if(+I&&!CH.includes(I)){let B=OA.get(sc.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);B&&tc.default.warn("Session affinity is not recommended and may cause memory leaks"),(B||!ME)&&(CH.push(I),Fx(I,B))}}catch(B){console.error("Error listening on socket",I,B,E)}if(t.isWorker&&(h=await h.start?.({server:at,ensureTable:S,port:b,securePort:A,resources:t,...f})||h),RA.set(h,!0),(h.handleFile||h.handleDirectory)&&f.files){if(f.files.includes(".."))throw(0,PH.handleHDBError)("Can not reference parent directories");let I=(0,st.join)(e,f.files).replace(/\\/g,"/"),B=I.indexOf("/*");if(B>-1&&f.files!==AA[E]?.files&&!(0,et.existsSync)(I.slice(0,B)))throw new Error(`The path '${I.slice(0,B)}' does not exist and cannot be used as the base of the resolved 'files' path value '${f.files}'`);let U=(0,st.basename)(e),F=f.path||"/";F=F.startsWith("/")?F:F.startsWith("./")?"/"+U+F.slice(2):F==="."?"/"+U:"/"+U+"/"+F;let M,Q,J;if(f.root){let oe=f.root;oe.startsWith("/")&&(oe=oe.slice(1)),oe.endsWith("/")&&(oe=oe.slice(0,-1)),oe+="/",Q=(0,st.join)(e,oe)}else(J=I.indexOf("/*"))>-1&&(Q=I.slice(0,J+1),M=(0,st.relative)(e,Q));let X=!1;if(Mo.isMainThread&&h.setupDirectory&&(X=await h.setupDirectory?.(F,Q,t)),t.isWorker&&h.handleDirectory&&(X=await h.handleDirectory?.(F,Q,t)),X)continue;for(let oe of await(0,MH.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:ue,dirent:le}=oe;d=!0;let Be=(0,st.relative)(e,ue).replace(/\\/g,"/");if(M)if(Be.startsWith(M))Be=Be.slice(M.length+1);else throw new Error(`The root path '${f.root}' does not reference a valid part of the file path '${Be}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ne=F+(F.endsWith("/")?"":"/")+Be;try{if(le.isFile()){let xe=await Jse(ue);Mo.isMainThread&&await h.setupFile?.(xe,Ne,ue,t),t.isWorker&&await h.handleFile?.(xe,Ne,ue,t)}else Mo.isMainThread&&await h.setupDirectory?.(Ne,ue,t),t.isWorker&&await h.handleDirectory?.(Ne,ue,t)}catch(xe){xe.message=`Could not load ${le.isFile()?"file":"directory"} '${ue}'${f.module?" using '"+f.module+"'":""} for application '${e}' due to: ${xe.message}`,vl?.(xe),((0,nc.getWorkerIndex)()===0?console:tc.default).error(xe),t.set(f.path||"/",new Bl(xe)),rc.set(n?E:(0,st.basename)(e),xe.message)}}}}catch(S){S.message=`Could not load component '${E}' for application '${(0,st.basename)(e)}' due to: ${S.message}`,vl?.(S),((0,nc.getWorkerIndex)()===0?console:tc.default).error(S),t.set(f.path||"/",new Bl(S),null,!0),rc.set(n?E:(0,st.basename)(e),S.message)}}if(Mo.isMainThread&&!BH&&i&&(0,nc.watchDir)(e,async()=>xH()),c.extensionModule)return await b_((0,st.join)(e,c.extensionModule));if(!d&&t.isWorker){let E=`${e} did not load any modules, resources, or files, is this a valid component?`;vl?.(new Error(E)),((0,nc.getWorkerIndex)()===0?console:tc.default).error(E),rc.set((0,st.basename)(e),E)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,vl?.(c),t.set("",new Bl(c))}}}var et,st,Mo,LH,OA,sc,MH,nc,tc,PH,UH,zse,vH,Jse,TA,RA,BH,gA,rc,Xse,AA,CH,DH,vl,Bl,kf=Re(()=>{et=require("fs"),st=require("path"),Mo=require("worker_threads"),LH=require("yaml"),OA=H(ee()),sc=H(P());Ib();Lb();Mb();x0();Cx();vx();MH=H(require("fast-glob")),nc=H(Qe()),tc=H($());tm();lr();PH=H(se());cn();Ae();kx();UH=H(ee()),zse=H(Wx());Pf();tH();wH();vH=H(Er());PE();({readFile:Jse}=et.promises),TA=OA.get(sc.CONFIG_PARAMS.COMPONENTSROOT),RA=new Map,rc=new Map;a(xH,"loadComponentDirectories");Xse={REST:oE,rest:oE,graphqlSchema:em,jsResource:nm,fastifyRoutes:qR,login:im,static:FR,operationsApi:zse,customFunctions:{},http:{},clustering:tA,authentication:tl,mqtt:SA},AA={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(AA,"static",{value:{files:"web/**"}});CH=[],DH=new Map;a(jse,"setErrorReporter");a(KE,"loadComponent");Bl=class extends $t{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 dA=g((BSe,GH)=>{var{isMainThread:HH}=require("worker_threads"),{getTables:Zse}=(Ae(),ie(ke)),{loadComponentDirectories:eie,loadComponent:tie}=(kf(),ie(Ff)),{resetResources:rie}=(Zu(),ie(KU)),nie=Ag(),sie=Er(),{dirname:iie}=require("path"),{getConnection:oie}=ut(),aie=ee(),cie=P(),bA=new Map;async function uie(e=!1){!HH&&aie.get(cie.CONFIG_PARAMS.CLUSTERING_ENABLED)&&oie();try{HH&&await nie()}catch(n){console.error(n)}let t=rie();Zse(),t.isWorker=e,await tie(iie(sie.getConfigFilePath()),t,"hdb",!0,bA),await eie(bA,t);let r=[];for(let[n]of bA)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(uie,"loadRootComponents");GH.exports.loadRootComponents=uie});var Qe=g((HSe,vi)=>{"use strict";var{Worker:lie,MessageChannel:_ie,parentPort:ms,isMainThread:CA,threadId:die,workerData:Ws}=require("worker_threads"),{PACKAGE_ROOT:fie}=P(),{join:VH,isAbsolute:Eie,extname:hie}=require("path"),{server:$H}=(lr(),ie(Gi)),{watch:mie,readdir:pie}=require("fs/promises"),{totalmem:qH}=require("os"),xl=P(),YH=ee(),Qs=$(),{randomBytes:Sie}=require("crypto"),{_assignPackageExport:Tie}=require("../index"),gie=P(),FH=1024*1024,Ui=[],Rn=[],Rie=50,DA=1e4,Aie="restart",KH="request_thread_info",WH="resource_report",QH="thread_info",zH="added-port",Oie="ack",yA;Tie("threads",Rn);vi.exports={startWorker:NA,restartWorkers:MA,shutdownWorkers:wie,workers:Ui,setMonitorListener:Bie,onMessageFromWorkers:Cie,onMessageByType:rG,broadcast:Lie,broadcastWithAcknowledgement:Pie,setChildListenerByType:Iie,getWorkerIndex:JH,getWorkerCount:XH,getTicketKeys:ZH,setMainIsWorker:yie,setTerminateTimeout:bie,restartNumber:Ws?.restartNumber||1};Rn.onMessageByType=rG;Rn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Rn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var LA;function bie(e){DA=e}a(bie,"setTerminateTimeout");function JH(){return Ws?Ws.workerIndex:LA?0:void 0}a(JH,"getWorkerIndex");function XH(){return Ws?Ws.workerCount:LA?1:void 0}a(XH,"getWorkerCount");function yie(e){LA=e}a(yie,"setMainIsWorker");var jH=1,WE;function ZH(){return WE||(WE=CA?Sie(48):Ws.ticketKeys,WE)}a(ZH,"getTicketKeys");Object.defineProperty($H,"workerIndex",{get(){return JH()}});Object.defineProperty($H,"workerCount",{get(){return XH()}});var eG={[KH](e,t){Uie(t)},[WH](e,t){vie(t,e)}};function NA(e,t={}){let r=process.constrainedMemory?.()||qH();r=Math.min(r,qH(),2e4*FH);let n=YH.get(xl.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/FH/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of Rn){let _=new _ie;_.existingPort=u,i.push(_),o.push(_.port2)}hie(e)||(e+=".js");let c=new lie(Eie(e)?e:VH(fie,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:jH=t.threadCount,name:t.name,restartNumber:vi.exports.restartNumber,ticketKeys:ZH()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:zH,port:u,threadId:c.threadId},[u]);return zE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>NA(e,t),c.on("error",u=>{Qs.error(`Worker index ${t.workerIndex} error:`,u)}),c.on("exit",u=>{Ui.splice(Ui.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Rie?(t.unexpectedRestarts=c.unexpectedRestarts+1,NA(e,t)):Qs.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{eG[u.type]?.(u,c)}),Ui.push(c),Hie(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(NA,"startWorker");var Nie=[xl.THREAD_TYPES.HTTP];async function MA(e=null,t=Math.max(jH>3,1),r=!0){if(CA){if(r){let{loadRootComponents:o}=dA();await o()}vi.exports.restartNumber++,t<1&&(t=t*Ui.length);let n=[],s=[];for(let o of Ui.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Qs.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:vi.exports.restartNumber,type:xl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Nie.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),DA*2).unref();o.on("exit",()=>{clearTimeout(l),n.splice(n.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(n.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let E=a(f=>{f.type===gie.ITC_EVENT_TYPES.CHILD_STARTED&&(Qs.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(l)),_.off("message",E))},"startListener");Qs.trace("Waiting for worker to start",_.threadId),_.on("message",E)});s.push(l),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=Xu();r&&(e==="http"||!e)&&YH.get(xl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else ms.postMessage({type:Aie,workerType:e})}a(MA,"restartWorkers");function Iie(e,t){eG[e]=t}a(Iie,"setChildListenerByType");function wie(e){return MA(e,1/0,!1)}a(wie,"shutdownWorkers");var tG=[];function Cie(e){tG.push(e)}a(Cie,"onMessageFromWorkers");var IA=new Map;function rG(e,t){let r=IA.get(e);r||IA.set(e,r=[]),r.push(t)}a(rG,"onMessageByType");var Die=10;async function Lie(e){let t=0;for(let r of Rn)try{r.postMessage(e),t++>Die&&(t=0,await new Promise(setImmediate))}catch(n){Qs.error("Unable to send message to worker",n)}}a(Lie,"broadcast");var QE=new Map,Mie=1;function Pie(e){return new Promise(t=>{let r=0;for(let n of Rn)try{let s=Mie++,i=a(()=>{QE.delete(s),--r===0&&t(),n!==ms&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,QE.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of QE)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Qs.error("Unable to send message to worker",s)}r===0&&t()})}a(Pie,"broadcastWithAcknowledgement");function Uie(e){e.postMessage({type:QH,workers:nG()})}a(Uie,"sendThreadInfo");function nG(){let e=Date.now();return Ui.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(nG,"getChildWorkerInfo");function vie(e,t){e.resources=t,e.resources.updated=Date.now()}a(vie,"recordResourceReport");var wA;function Bie(e){wA=e}a(Bie,"setMonitorListener");var xie=1e3,kH=!1;function Hie(){kH||(kH=!0,setInterval(()=>{for(let e of Ui){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}wA&&wA()},xie).unref())}a(Hie,"startMonitoring");var Gie=1e3;if(ms){zE(ms);for(let e=0,t=Ws.addPorts.length;e<t;e++){let r=Ws.addPorts[e];r.threadId=Ws.addThreadIds[e],zE(r)}setInterval(()=>{let e=process.memoryUsage();ms.postMessage({type:WH,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Gie).unref(),yA=a(()=>new Promise((e,t)=>{ms.on("message",r),ms.postMessage({type:KH});function r(n){n.type===QH&&(ms.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else yA=nG;vi.exports.getThreadInfo=yA;function zE(e,t){Rn.push(e),e.on("message",r=>{if(r.type===zH)r.port.threadId=r.threadId,zE(r.port);else if(r.type===Oie){let n=QE.get(r.id);n&&n()}else{for(let s of tG)s(r,e);let n=IA.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Qs.error(i)}}}).on("close",()=>{Rn.splice(Rn.indexOf(e),1)}).on("exit",()=>{Rn.splice(Rn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(zE,"addPort");if(CA){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await pie(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(VH(s,o.name));try{for await(let{filename:o}of mie(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await MA(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watch_dir");vi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else ms.on("message",async e=>{let{type:t}=e;t===xl.ITC_EVENT_TYPES.SHUTDOWN&&(vi.exports.restartNumber=e.restartNumber,ms.unref(),setTimeout(()=>{Qs.warn("Thread did not voluntarily terminate",die),process.exit(0)},DA).unref())})});var BC={};Fe(BC,{AUDIT_STORE_OPTIONS:()=>yf,createAuditEntry:()=>C_,openAuditStore:()=>ZE,readAuditEntry:()=>vt,setAuditRetention:()=>Fie,transactionKeyEncoder:()=>dG});function ZE(e){let t=e.auditStore=e.openDB(uG.AUDIT_STORE_NAME,yf);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=JE){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let o=0,c;try{for(let{key:u,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-PA})){if((_[0]&15)===BA){let l=vt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=qie){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,PA/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,jE.getWorkerIndex)()===(0,jE.getWorkerCount)()-1&&s(JE),t}function Fie(e,t=JE){PA=e,JE=t}function C_(e,t,r,n,s,i,o){let c=fG[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;n&&(n>1?ic.setFloat64(0,n):An.set(Rm),u=9),E(0),E(t),d(r),ic.setFloat64(u,e),u+=8,s?d(s):An[u++]=0,An[n?8:0]=c;let l=An.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(f){let h=u;u+=1,u=(0,oc.writeKey)(f,An,u);let p=u-h-1;p>127?p>16383?(HA.error("Key or username was too large for audit entry",f),u=h+1,An[h]=0):(An.copyWithin(h+2,h+1,u),ic.setUint16(h,p|32768),u++):An[h]=p}function E(f){f<128?An[u++]=f:f<16384?(ic.setUint16(u,f|32768),u+=2):f<1056964608?(ic.setUint32(u,f|3221225472),u+=4):(An[u]=255,ic.setUint32(u+1,f),u+=5)}}function vt(e){try{let t=e.dataView||(e.dataView=new xA(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:fG[n&7],tableId:i,get recordId(){return cG(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?cG(e,l,d):void 0},getValue(E,f,h){if(n&UA||n&vA&&!f)return E.decoder.decode(e.subarray(t.position));if(n&vA&&h)return GA(E.getEntry(this.recordId),h,E)}}}catch(t){return HA.error("Reading audit entry error",t,e),{}}}function cG(e,t,r){let n=e.subarray(t,r);return(0,oc.readKey)(n,0,r-t)}var oc,XE,uG,lG,jE,_G,HA,An,ic,dG,yf,PA,qie,JE,UA,vA,sG,BA,iG,oG,aG,fG,xA,ni=Re(()=>{oc=require("ordered-binary"),XE=H(ee()),uG=H(ft()),lG=H(P()),jE=H(Qe()),_G=H(z());Bc();HA=H($());eh();(0,XE.initSync)();An=Buffer.alloc(1024),ic=new DataView(An.buffer,An.byteOffset,1024),dG={writeKey(e,t,r){return e===vc?(t.set(vc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,oc.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,oc.readKey)(e,t,r)}},yf={encoding:"binary",keyEncoder:dG},PA=(0,_G.convertToMS)((0,XE.get)(lG.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,qie=1e3,JE=1e4;a(ZE,"openAuditStore");a(Fie,"setAuditRetention");UA=16,vA=32,sG=1,BA=2,iG=3,oG=4,aG=5,fG={put:sG|UA,[sG]:"put",delete:BA,[BA]:"delete",message:iG|UA,[iG]:"message",invalidate:oG,[oG]:"invalidate",patch:aG|vA,[aG]:"patch"};a(C_,"createAuditEntry");a(vt,"readAuditEntry");xA=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(cG,"readKeySafely")});var qA={};Fe(qA,{add:()=>th,applyReverse:()=>EG,getRecordAtTime:()=>GA,rebuildUpdateBefore:()=>rh});function th(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function rh(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,th(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function EG(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=kie[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=hG}}function GA(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=n.get(i),_=vt(u);switch(_.type){case"put":s=_.getValue(r);break;case"patch":EG(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let u in s)s[u]===hG&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=n.get(i),_=vt(u),l;switch(_.type){case"put":l=_.getValue(r);break;case"patch":l=_.getValue(r);break}for(let d in l)o[d]&&(s[d]=l[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let u in o)s[u]=null;return s}var kie,hG,eh=Re(()=>{ni();a(th,"add");th.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};kie={add:th};a(rh,"rebuildUpdateBefore");a(EG,"applyReverse");hG={};a(GA,"getRecordAtTime")});function en(e){return e[Nt]||(e[Nt]=Object.create(null))}function ah(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,u,_;if(o.resolve)_={get(){return o.resolve(this,this[ye])},set(l){return o.set(this,l)},configurable:!0};else{switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a string, attempt to assign ${l}`);en(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a string, attempt to assign ${l}`);en(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){let d=l?.__op__?l.value:l;if(!(typeof d=="number"||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a number, attempt to assign ${d}`);en(this)[c]=l},"set");break;case"Int":u=a(function(l){let d=l?.__op__?l.value:l;if(!(d>>0===d||l==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs((d>>0)-d)<=1)d=Math.round(d),l?.__op__?l.value=d:l=d;else throw new On.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);en(this)[c]=l},"set");break;case"Long":u=a(function(l){let d=l?.__op__?l.value:l;if(!(Math.round(d)===l&&Math.abs(d)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs(d)<=9007199254740992)d=Math.round(d),l?.__op__?l.value=d:l=d;else throw new On.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);en(this)[c]=l},"set");break;case"BigInt":u=a(function(l){let d=l?.__op__?l.value:l;if(!(typeof d=="bigint"||l==null&&o.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=BigInt(d),l?.__op__?l.value=d:l=d;else throw new On.ClientError(`${c} must be a number, attempt to assign ${l}`);en(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a boolean, attempt to assign ${l}`);en(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new On.ClientError(`${c} must be a Date, attempt to assign ${l}`);en(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);en(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){en(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be an object, attempt to assign ${l}`);en(this)[c]=l},"set")}_={get(){let l=this[Nt];if(l&&c in l){let E=l[c];if(E?.__op__){let f=this[Ee]?.[c];return E.update(f)}return E}let d=this[Ee]?.[c];if(d&&typeof d=="object"){let E=pG(d,o);if(E)return l||(l=this[Nt]=Object.create(null)),l[c]=E}return d},set:u,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let u=this[Nt];return u?.[o]!==void 0?u[o]:this[Ee]?.[o]}),i("set",function(o,c){let u=n[o];if(u)return u.set.call(this,c);if(t.sealed)throw new On.ClientError("Can not add a property to a sealed table schema");en(this)[o]=c}),i("deleteProperty",function(o){en(this)[o]=void 0}),i("toJSON",function(){let o=this[Nt],c;for(let _ in o){c||(c=Object.assign({},this[Ee]));let l=o[_];if(l?.__op__){let d=c[_];l=l.update(d)}c[_]=l}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Ee])),Object.assign(c,this)),c||this[Ee]}),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 pG(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[Ee])throw new Error("Can not track an already tracked object, check for circular references");this[Ee]=s}},ah(r,t)),new r(e)):new nh(e);case Array:let n=new ih(e.length);n[Ee]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=pG(o,t?.elements)),n[s]=o}return n;default:return e}}function Rd(e){let t=e[Nt],r;for(let s in t){r||(r=Object.assign({},e[Ee]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=Rd(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Ee])),Object.assign(r,e)),r||e[Ee]}function Uo(e,t=e[Nt]){let r;if(mG.call(e,Ee)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Uo(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[Ee]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=qA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Uo(s);r[n]=s}return r?Object.freeze(r):mG.call(e,Ee)?e[Ee]:e}function sh(e){let t=e[Ee];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Po]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.[Ee]===s){if(sh(i))return!0}else return!0}}else{let r=e[Nt];if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s[Ee]===i){if(sh(s))return!0}else return!0}else return!0}}return!1}var On,Nt,nh,mG,Po,ih,oh,Ad=Re(()=>{cn();On=H(se());eh();Nt=Symbol("own-data");a(en,"getChanges");a(ah,"assignTrackedAccessors");a(pG,"trackObject");nh=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[Ee])throw new Error("Can not track an already tracked object, check for circular references");this[Ee]=t}};ah(nh,{});a(Rd,"collapseData");mG=Object.prototype.hasOwnProperty;a(Uo,"deepFreeze");a(sh,"hasChanges");Po=Symbol.for("has-array-changes"),ih=class extends Array{static{a(this,"TrackedArray")}[Po];constructor(t){super(t)}splice(...t){return this[Po]=!0,super.splice(...t)}push(...t){return this[Po]=!0,super.push(...t)}pop(){return this[Po]=!0,super.pop()}unshift(...t){return this[Po]=!0,super.unshift(...t)}shift(){return this[Po]=!0,super.shift()}};ih.prototype.constructor=Array;oh=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var $p={};Fe($p,{CONTEXT:()=>ye,ID_PROPERTY:()=>Me,IS_COLLECTION:()=>Vn,MultiPartId:()=>qa,RECORD_PROPERTY:()=>Ee,Resource:()=>$t,snake_case:()=>$ie,transformForSelect:()=>uh});function $ie(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function SG(e,t){if(Hl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(Hl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new qa;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Hl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function tn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,u,_,l;if(r?(o?(l=i,o=o[ye]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(l=s,c=l[this.primaryKey]??null,o=i[ye]||i):l=i:(l=s,c=l[Me]??l[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[ye]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(u=s,s[Symbol.iterator]){c=[],_=!0;for(let f of s){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let f=c.indexOf("?");if(f>-1){let p=this.parseQuery(c.slice(f+1));u?u=Object.assign(p,u):u=p,c=c.slice(0,f)}let h=this.parsePath(c,o,u);h?.id!==void 0?(h.query&&(u?u=Object.assign(h.query,u):u=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(u?.ensureLoaded!=null||u?.async||_?(d=Object.assign({},t),u?.ensureLoaded!=null&&(d.ensureLoaded=u.ensureLoaded),u?.async&&(d.async=u.async),_&&(d.isCollection=!0)):d=t,o.transaction){let f=this.getResource(c,o,d);return f.then?f.then(E):E(f)}else return rt(o,()=>{let f=this.getResource(c,o,d);return f.then?f.then(E):E(f)},d);function E(f){if(o.authorize){o.authorize=!1;let h=t.type==="read"?f.allowRead(o.user,u,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,l,o):f.allowUpdate(o.user,l,o):t.type==="create"?f.allowCreate(o.user,l,o):f.allowDelete(o.user,u,o);if(h?.then)return h.then(p=>{if(!p)throw new ch(o.user);return typeof l?.then=="function"?l.then(S=>e(f,u,o,S)):e(f,u,o,l)});if(!h)throw new ch(o.user)}return typeof l?.then=="function"?l.then(h=>e(f,u,o,h)):e(f,u,o,l)}a(E,"authorizeActionOnResource")}}function rn(e,t){let r=new RG.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function FA(e,t,r){let n=e[Ee];if(n){let s=e[Nt];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function uh(e,t){let r=t?.propertyResolvers,n=t[ye],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):FA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(c);let _=[],l=i(FA(u,r,n));for(let d of e)_.push(l(d));return _},"transform");let o=e.forceNulls;return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(E=>E&&typeof E=="object"?c(E):E);let _={},l=i(FA(u,r,n)),d;for(let E of e){let f=l(E);f===void 0&&o&&(f=null),f?.then?(d||(d=[]),d.push(f.then(h=>_[E.name||E]=h))):_[E.name||E]=f}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let u=s[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=s[c.name]=uh(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var TG,gG,RG,ye,Me,Vn,Ee,Vie,$t,ch,Hl,qa,cn=Re(()=>{TG=require("crypto");Cc();gG=require("../index"),RG=H(se());Ad();so();sE();ye=Symbol.for("context"),Me=Symbol.for("primary-key"),Vn=Symbol("is-collection"),Ee=Symbol("stored-record"),Vie={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},$t=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Me]=t;let n=r?.[ye];this[ye]=n!==void 0?n:r||null}static get=tn(function(t,r,n,s){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&&!c.selectApplied){let _=uh(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=tn(function(t,r,n,s){if(Array.isArray(s)&&t[Vn]){let i=[],o=n.authorize;for(let c of s){let u=t.constructor,_=u.getResource(c[u.primaryKey],n,{async:!0});_.then?i.push(_.then(l=>l.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):rn(t,"put")},{hasContent:!0,type:"update"});static patch=tn(function(t,r,n,s){return t.patch?t.patch(s,r):rn(t,"patch")},{hasContent:!0,type:"update"});static delete=tn(function(t,r,n,s){return t.delete?t.delete(r):rn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,TG.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),n||(n={}),rt(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):rn(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=tn(function(t,r,n,s){return t.invalidate?t.invalidate(r):rn(t,"delete")},{hasContent:!1,type:"update"});static post=tn(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=tn(function(t,r,n,s){return t.connect?t.connect(s,r):rn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=tn(function(t,r,n,s){return t.subscribe?t.subscribe(r):rn(t,"subscribe")},{type:"read"});static publish=tn(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.publish?t.publish(s,r):rn(t,"publish")},{hasContent:!0,type:"create"});static search=tn(function(t,r,n,s){let i=t.search?t.search(r):rn(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=uh(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=tn(function(t,r,n,s){return t.search?t.search(s,r):rn(t,"search")},{hasContent:!0,type:"read"});static copy=tn(function(t,r,n,s){return t.copy?t.copy(s,r):rn(t,"copy")},{type:"create"});static move=tn(function(t,r,n,s){return t.move?t.move(s,r):rn(t,"move")},{type:"delete"});post(t){if(this[Vn])return this.constructor.create(this[Me],t,this[ye]);rn(this,"post")}static isCollection(t){return t?.[Vn]}static coerceId(t){return t}static parseQuery(t){return nE(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&Vie[o];if(c)r.requestedContentType=c;else if(n)n.property=o;else return{query:{property:o},id:SG(t,this),isCollection:Hl}}let i=SG(t,this);return Hl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[ye],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(s=_?.find(l=>l.constructor===c),s)return s;_||u.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=u.find(_=>_[Me]===t&&_.constructor===c),s)return s;if(u.push(s=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Me],E=_.get(d);E?E.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[Vn]=!0),s}subscribe(t){return new In}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new In}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[Me]}getContext(){return this[ye]}};$t.prototype[ye]=null;(0,gG._assignPackageExport)("Resource",$t);a($ie,"snake_case");ch=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(SG,"pathToId");qa=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(tn,"transactional");a(rn,"missingMethod");a(FA,"selectFromObject");a(uh,"transformForSelect")});function bG(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=OG,Yie(e.primaryStore,e.auditStore)):(c=AG,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{yG(AG[i])})));let u=c[i]||(c[i]=[]);u.auditStore=e.auditStore,u.lastTxnTime==null&&(u.lastTxnTime=Date.now());let _=u[o];_||(_=u[o]=new Map,_.envs=u,_.tableId=o,_.store=e.primaryStore),t=wa(t);let l=new VA(r);l.startTime=n;let d=_.get(t);return d?d.push(l):(_.set(t,d=[l]),d.tables=_,d.key=t),l.subscriptions=d,l}function yG(e){if(!e)return;let t=e.auditStore;try{t.resetReadTxn()}catch(n){throw n.message+=" in "+path,n}let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=vt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,u,_=wa(i.recordId),l=0;do{let d=o.get(_);if(d){for(let f of d)if(!(l>0&&!(f.includeDescendants&&!(f.onlyChildren&&l>1)))){if(f.startTime>=n){(0,kA.info)("omitting",c,f.startTime,n);continue}try{let h;f.supportsTransactions&&f.txnInProgress!==i.version&&(h=!0,f.txnInProgress||(r?r.push(f):r=[f]),f.txnInProgress=i.version),f.listener(c,i,n,h)}catch(h){console.error(h),(0,kA.info)(h)}}}if(_==null)break;let E=_.lastIndexOf?.("/",_.length-2);E>-1?_=_.slice(0,E):_=null,l++}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function Yie(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let u=OG[s];if(!u)return;let _=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),u.txnTime=r.threadLocalWrites[0]||Date.now(),yG(u),r.threadLocalWrites[0]=u.lastTxnTime,r.unlock("thread-local-writes")},"acquiredLock");r.attemptLock("thread-local-writes",_)&&_()})}}var kA,AG,OG,VA,NG=Re(()=>{kA=H($());Cc();Zu();ni();AG=Object.create(null),OG=Object.create(null);a(bG,"addSubscription");VA=class extends In{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 n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(yG,"notifyFromTransactionData");a(Yie,"listenToCommits")});var OR={};Fe(OR,{coerceType:()=>lh,makeTable:()=>fh,setServerUtilities:()=>eoe,updateResource:()=>_h});function fh(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l,sealed:d}=e,{expirationMS:E,evictionMS:f,audit:h,trackDeletes:p}=e,{attributes:S}=e;S||(S=[]);let T=bm(i,n,u),A=0,b,I,B={},U=Promise.resolve(),F,M,Q;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(F=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(M=K),K.expiresAt&&(Q=K),K.isPrimaryKey&&(B=K);let J,X=[],oe=[],ue=1,le=2,Be={},Ne={},xe=864e5,n_,s_,Xs,lO=!1,Ch,Dh,Mq=i.getRange({start:!1,end:!1}).constructor,Pq=10,Uq=6;h&&fO();class Ke extends $t{static name=s;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=F;static updatedTimeProperty=M;static propertyResolvers;static sources=[];static get expirationMS(){return E}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,R){R&&(this.sourceOptions=R,(R.expiration||R.eviction||R.scanInterval)&&this.setTTLExpiration(R)),R?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),I=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let D=a(L=>{let y=this.sources.slice(0,-1);if(y=y.filter(v=>v[L]&&(!v[L].reliesOnPrototype||v.prototype[L])),y.length>0)if(y.length===1){let v=y[0];return(q,C,G)=>{if(q?.source!==v)return v[L](C,G,q)}}else return(v,q,C)=>{let G=[];for(let x of y){if(v?.source===x)break;G.push(x[L](q,C,v))}return Promise.all(G)}},"getApplyToIntermediateSource"),O=this.sources[this.sources.length-1],N=a(L=>{if(O[L]&&(!O[L].reliesOnPrototype||O.prototype[L]))return(y,v,q)=>{if(!y?.source)return O[L](v,q,y)}},"getApplyToCanonicalSource");return Be={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish")},Ne={put:D("put"),patch:D("patch"),delete:D("delete"),publish:D("publish"),invalidate:D("invalidate")},(async()=>{let L=!1,y=a(async(v,q)=>{let C=v.value,G=v.table?ct[c][v.table]:Ke;if(c===Yn.SYSTEM_SCHEMA_NAME&&(v.table===Yn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||v.table===Yn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),v.id===void 0&&(v.id=C[G.primaryKey],v.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(v));v.source=m;let x=await G.getResource(v.id,q,ac);switch(v.type){case"put":return x._writeUpdate(C,!0,ac);case"patch":return x._writeUpdate(C,!1,ac);case"delete":return x._writeDelete(ac);case"publish":return x._writePublish(C,ac);case"invalidate":return x.invalidate(ac);default:it.error("Unknown operation",v.type,v.id)}},"writeUpdate");try{let v=m.subscribe;v&&p==null&&(p=!0);let q=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Bo.getWorkerIndex)()):(0,Bo.getWorkerIndex)()===0,C=v&&q&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let G;for await(let x of C)try{if(!(x.type==="transaction"?x.writes[0]:x)){it.error("Bad subscription event",x);continue}if(x.source=m,G)if(x.beginTxn)G.resolve();else{y(x,G);continue}if(x.type==="end_txn")continue;let _e=rt(x,()=>{if(x.type==="transaction"){let ne=[];for(let Ue of x.writes)try{ne.push(y(Ue,x))}catch(ce){throw ce.message+=" writing "+JSON.stringify(Ue)+" of event "+JSON.stringify(x),ce}return Promise.all(ne)}else if(x.type==="define_schema"){let ne=this.attributes.slice(0),Ue;for(let ce of x.attributes)ne.find(De=>De.name===ce.name)||(ne.push(ce),Ue=!0);Ue&&(Et({table:s,database:c,attributes:ne,origin:"cluster"}),Yl.signalSchemaChange(new Kl.SchemaEventMsg(process.pid,Yn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return x.beginTxn?(G=x,y(x,x),new Promise(ne=>{G.resolve=ne})):y(x,x)});L&&(await _e,Yl.signalUserChange(new Kl.UserEventMsg(process.pid))),x.onCommit&&(_e?.then?_e.then(x.onCommit):x.onCommit())}catch(Z){it.error("error in subscription handler",Z)}}}catch(v){it.error(v)}})(),this}static getResource(m,R,D){let O=super.getResource(m,R,D);if(m!=null){dc(m);try{if(O.hasOwnProperty(Ee))return O;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let N=!D?.async||i.cache?.get(m),L=yn(R),y=L.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Lh(m,R,{transaction:y},N,v=>{if(v?_h(O,v):O[Ee]=null,R.onlyIfCached&&R.noCacheStore){if(!O.doesExist())throw new Mr.ServerError("Entry is not cached",504)}else if(D?.ensureLoaded){let q=Mh(m,v,R,O);if(q)return L?.disregardReadTxn(),O[$A]=!0,KA(q,C=>(_h(O,C),O))}return O})}catch(N){throw N.message.includes("Unable to serialize object")&&(N.message+=": "+JSON.stringify(m)),N}}return O}ensureLoaded(){let m=Mh(this[Me],this[Lr],this[ye]);if(m)return this[$A]=!0,KA(m,R=>{this[Lr]=R,this[Ee]=R.value,this[Vl]=R.version})}static setTTLExpiration(m){if(typeof m=="number")E=m*1e3,f||(f=0);else if(m&&typeof m=="object")E=m.expiration*1e3,f=(m.eviction||0)*1e3,xe=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(E<0)throw new Error("Expiration can not be negative");xe=xe||(E+f)/4,a_()}static enableAuditing(m=!0){h=m,m&&fO(),Ke.audit=m}static coerceId(m){return m===""?null:lh(m,B)}static async dropTable(){if(delete ct[c][s],c===o){for(let m of S)l.remove(Ke.tableName+"/"+m.name),r[m.name]?.drop();l.remove(Ke.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Yl.signalSchemaChange(new Kl.SchemaEventMsg(process.pid,Yn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[Vn])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let R=Ke.getRecordCount();return{recordCount:R.recordCount,estimatedRecordRange:R.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[ye]?.returnNonexistent)return this}allowRead(m,R){let D=o_(m);if(D?.read){if(D.isSuperUser)return!0;let O=D.attribute_permissions,N=R?.select;if(O?.length>0||lO&&N){if(R||(R={}),N){let L=O?.length>0&&YA(O,"read");R.select=N.map(y=>{let v=y.name||y;if(!L||L[v]){let q=Xs[v]?.definition?.tableClass;if(q){if(y.name||(y={name:y}),!q.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else R.select=O.filter(L=>L.read&&!Xs[L.attribute_name]).map(L=>L.attribute_name);return R}else return!0}}allowUpdate(m,R){let D=o_(m);if(D?.update){let O=D.attribute_permissions;if(O?.length>0){let N=YA(O,"update");for(let L in R)if(!N[L])return!1;for(let L of O){let y=L.attribute_name;!L.update&&!(y in R)&&(R[y]=this.getProperty(y))}}return!0}}allowCreate(m,R){if(this[Vn]){let D=o_(m);if(D?.insert){let O=D.attribute_permissions;if(O?.length>0){let N=YA(O,"insert");for(let L in R)if(!N[L])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return o_(m)?.delete}update(m,R){if(!yn(this[ye]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let O;return typeof m=="object"&&m&&(R?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[Ee]={},this[Nt]=m):(O=this[Nt],O&&(m=Object.assign(O,m)),this[Nt]=O=m)),this._writeUpdate(this[Nt],R),this}addTo(m,R){if(typeof R=="number"||typeof R=="bigint")this[Gl]===wG?this.set(m,(+this.getProperty(m)||0)+R):(this[Gl]||this.update(),this.set(m,new oh(R)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,R){if(typeof R=="number")return this.addTo(m,-R);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this[Lr]}invalidate(m){let R=this[ye],D=this[Me];dc(D),yn(this[ye]).addWrite({key:D,store:i,invalidated:!0,entry:this[Lr],nodeName:this[ye]?.nodeName,before:Be.invalidate?.bind(this,R,D),beforeIntermediate:Ne.invalidate?.bind(this,R,D),commit:(N,L)=>{if(L?.version>N)return;let y=null;for(let v in r)y||(y={}),y[v]=this.getProperty(v);T(D,y,this[Lr],N,ql,h,this[ye],0,"invalidate")}})}static evict(m,R,D){let O=this.Source,N;if(!((I||h)&&(!R||(N=i.getEntry(m),!N||!R)||N.version!==D))){if(I){if(i.hasLock(m,N.version))return;let L;for(let y in r)L||(L={}),L[y]=R[y];if(L)return T(m,L,N,D,Fl,null,null,0,null,!0)}return i.ifVersion(m,D,()=>{i_(m,R,null)}),h?T(m,null,N,D,Fl,null,null,0,null,!0):i.remove(m,D)}}lock(){throw new Error("Not yet implemented")}static operation(m,R){return m.table||=s,m.schema||=c,BG.operation(m,R)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,R,D){let O=this[ye],N=yn(O),L=this[Me];dc(L);let y=this[Lr];this[Gl]=R?wG:Xie;let v={key:L,store:i,entry:y,nodeName:O?.nodeName,validate:q=>{m||(m=this[Nt]),R||m&&sh(this[Nt]===m?this:m)?O?.source||(N.checkOverloaded(),this.validate(m,!R),M&&(m[M.name]=M.type==="Date"?new Date(q):M.type==="String"?new Date(q).toISOString():q),R&&(t&&m[t]!==L&&(m[t]=L),F&&(y?.value?m[F.name]=y?.value[F.name]:m[F.name]=F.type==="Date"?new Date(q):F.type==="String"?new Date(q).toISOString():q),m=Uo(m))):N.removeWrite(v)},before:R?Be.put?()=>Be.put(O,L,m):null:Be.patch?()=>Be.patch(O,L,m):Be.put?()=>Be.put(O,L,Uo(this)):null,beforeIntermediate:R?Ne.put?()=>Ne.put(O,L,m):null:Ne.patch?()=>Ne.patch(O,L,m):Ne.put?()=>Ne.put(O,L,Uo(this)):null,commit:(q,C,G)=>{if(G){if(O&&C?.version>(O.lastModified||0)&&(O.lastModified=C.version),this[Lr]=C,C?.value?.[Ee])throw new Error("Can not assign a record to a record, check for circular references");R||(this[Ee]=C?.value??null)}this[Nt]=void 0,this[Vl]=q;let x=C?.value,Z=m;if(this[Gl]=0,C?.version>=q)if(h){let ce=C.localTime,De=C.version;for(;Z&&(ce>q||De>=q&&ce>0);){let re=u.get(ce);if(!re)break;let j=vt(re);if(De=j.version,De>q){if(j.type==="patch"){let Se=j.getValue(i);Z=rh(Z,Se)}else if(j.type==="put"||j.type==="delete")return}else if(De===q)return;ce=j.previousLocalTime}}else{if(R)return;Z=rh(Z,x)}let _e;if(R?_e=Z:(this[Ee]=x,_e=R?Z:Uo(this,Z)),this[Ee]=_e,_e?.[Ee])throw new Error("Can not assign a record to a record, check for circular references");let ne;R||(ne=m),i_(L,x,_e);let Ue=R?"put":"patch";T(L,_e,C,q,0,h,O,O.expiresAt||(E?E+Date.now():0),Ue,!1,ne),O.expiresAt&&a_()}};N.addWrite(v)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[Vn]){for await(let R of this.search(m))(await Ke.getResource(R[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Ee]?this._writeDelete(m):!1}_writeDelete(m){let R=yn(this[ye]),D=this[Me];dc(D);let O=this[ye];return R.addWrite({key:D,store:i,resource:this,nodeName:O?.nodeName,before:Be.delete?.bind(this,O,D),beforeIntermediate:Ne.delete?.bind(this,O,D),commit:(N,L,y)=>{let v=L?.value;y&&(O&&L?.version>(O.lastModified||0)&&(O.lastModified=L.version),_h(this,L)),!(L?.version>N)&&(i_(this[Me],v),it.trace("Write delete entry",D,N),h||p?(T(D,null,this[Lr],N,0,h,this[ye],0,"delete"),h||a_()):i.remove(this[Me]))}}),!0}search(m){let R=this[ye],D=yn(R);if(!m)throw new Error("No query provided");let O=m.conditions;O?O.length===void 0&&(O=O[Symbol.iterator]?Array.from(O):[O]):O=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(O=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(O));let N,L={};function y(j,Se){let He;switch(Se){case"and":case void 0:if(j.length<1)throw new Error('An "and" operator requires at least one condition');He=!0;break;case"or":if(j.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Se)}let Kn=He&&{},js;for(let We of j){if(We.conditions){We.conditions=y(We.conditions,We.operator);continue}let kt=We[0]??We.attribute,on=kt==null?B:Fs(S,kt);if(on){if(He){let Wn=Gn(kt),Vt=Kn[Wn];Vt?(Vt.push(We),js=!0):Kn[Wn]=[We]}(on.type||Jg[We.comparator])&&(We[1]===void 0?We.value=q(We.value,on):We[1]=q(We[1],on))}else if(kt!=null)throw(0,Mr.handleHDBError)(new Error,`${kt} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return j;if(js)for(let We in Kn){let kt=Kn[We],on=kt.length;if(on>1)for(let Wn=0;Wn<on;Wn++){let Vt=kt[Wn];if(Vt.comparator==="ge"||Vt.comparator==="greater_than_equal")for(let Zs=0;Zs<on;Zs++){let Fo=kt[Zs];(Fo.comparator==="le"||Fo.comparator==="less_than_equal")&&(Vt.comparator="between",Vt.value=[Vt.value,Fo.value],j.splice(j.indexOf(Fo),1))}if(Vt.comparator==="equals"||!Vt.comparator){for(let Zs=0;Zs<on;Zs++)if(Zs!==Wn){let Fo=kt[Zs];j.splice(j.indexOf(Fo),1)}break}}}return j}a(y,"prepareConditions");function v(j,Se){if(m.enforceExecutionOrder)return j;for(let He of j)He.conditions&&(He.conditions=v(He.conditions,He.operator));return j.length>1&&Se!=="or"?(0,UG.sortBy)(j,rE(Ke)):j}a(v,"orderConditions");function q(j,Se){return Array.isArray(j)?j.map(He=>lh(He,Se)):lh(j,Se)}a(q,"coerceTypedValues");let C=m.operator;(O.length>0||C)&&(O=y(O,C));let G=typeof m.sort=="object"&&m.sort,x;if(G&&C!=="or"){let j=G.attribute;if(j==null)throw new Mr.ClientError("Sort requires an attribute");if(N=O.find(Se=>Gn(Se.attribute)===Gn(j)),!N){let Se=Fs(S,j);if(!Se)throw(0,Mr.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not a defined attribute`,404);if(Se.indexed)N={attribute:j,comparator:"sort"},O.push(N);else if(O.length===0&&!m.allowFullScan)throw(0,Mr.handleHDBError)(new Error,`${Array.isArray(j)?j.join("."):j} is not indexed and not combined with any other conditions`,404)}N&&(N.descending=!!G.descending)}O=v(O,C),G&&(N&&O[0]===N?G.next&&(x={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(N&&O.splice(O.indexOf(N),1),x=G));let Z=m.select;if(O.length===0&&(O=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:O,operator:C,postOrdering:x,selectApplied:!!Z};let _e=D.useReadTxn(),ne=Xg(O,C,Ke,_e,m,R,(j,Se)=>_O(j,Z,R,_e,Se),L),Ue=m.ensureLoaded!==!1;x||(ne=re(ne));let ce=Ke.transformEntryForSelect(Z,R,_e,L,Ue,!0),De=Ke.transformToOrderedSelect(ne,Z,x,_e,R,ce);function re(j){return m.offset||m.limit!==void 0?j.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):j}return a(re,"applyOffset"),x&&(De=re(De)),De.onDone=()=>{De.onDone=null,D.doneReadTxn()},De.selectApplied=!0,De.getColumns=()=>{if(Z){let j=[];for(let Se of Z)Se==="*"?j.push(...S.map(He=>He.name)):j.push(Se.name||Se);return j}return S.map(j=>j.name)},De}static transformToOrderedSelect(m,R,D,O,N,L){let y=new Mq;if(D){m=_O(m,R,O,N,null);let v;y.iterate=function(){let C,G=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),x,Z=D.dbOrderedAttribute,_e,ne,Ue=!0;function ce(re){let j=re.next&&ce(re.next),Se=re.descending;return(He,Kn)=>{let js=Ph(He,re.attribute,O),We=Ph(Kn,re.attribute,O),kt=Se?(0,xo.compareKeys)(We,js):(0,xo.compareKeys)(js,We);return kt===0?j?.(He,Kn)||0:kt}}a(ce,"createComparator");let De=ce(D);return{async next(){let re;if(C)if(re=C.next(),re.done){if(x)return y.onDone&&y.onDone(),re}else return{value:await L.call(this,re.value)};v=[],_e&&v.push(_e);do if(re=await G.next(),re.done){if(x=!0,v.length)break;return y.onDone&&y.onDone(),re}else{let j=re.value;if(j?.then&&(j=await j),Z){let Se=Ph(j,Z,O);if(Ue)Ue=!1,ne=Se;else if(Se!==ne){ne=Se,_e=j;break}}v.push(j)}while(!0);return D.isGrouped,v.sort(De),C=v[Symbol.iterator](),re=C.next(),re.done?(y.onDone&&y.onDone(),re):{value:await L.call(this,re.value)}},return(){y.onDone&&y.onDone(),G.return()},throw(){y.onDone&&y.onDone(),G.throw()}}};let q=a(C=>{if(typeof R=="object"&&Array.isArray(C.attribute))for(let G=0;G<R.length;G++){let x=R[G],Z;if(x.name===C.attribute[0]){for(Z=x.sort||(x.sort={});Z.next;)Z=Z.next;Z.attribute=C.attribute.slice(1),Z.descending=C.descending}else x===C.attribute[0]&&(R[G]=Z={name:x,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&q(C.next)},"applySortingOnSelect");q(D)}else y.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),y=y.map(L);return y}static transformEntryForSelect(m,R,D,O,N,L){if(m&&(m===t||m?.length===1&&m[0]===t)){let C=a(G=>(R?.transaction?.stale&&(R.transaction.stale=!1),G?.key??G),"transform");return m===t?C:m.asArray?G=>[C(G)]:G=>({[t]:C(G)})}let y;N&&I&&!m?.every(C=>{let G;return typeof C=="object"?G=C.name:G=C,r[G]||G===t})&&(y=!0);let v,q=a(function(C){let G;if(R?.transaction?.stale&&(R.transaction.stale=!1),C!=null){if(Ch=C,G=C.value||C.deref?.(),!G&&(C.key===void 0||C.deref)){if(C=Lh(C.key??C,R,{transaction:D,lazy:m?.length<4},this?.isSync,x=>x),C?.then)return C.then(q.bind(this));G=C?.value}if(y&&C?.metadataFlags&(ql|Fl)||C?.expiresAt&&C?.expiresAt<Date.now()){if(R.onlyIfCached&&R.noCacheStore)return{[t]:C.key,message:"This entry has expired"};let x=Mh(C.key??C,C,R);if(x?.then)return x.then(q)}}if(G==null)return L?vo.SKIP:G;if(m&&!(m[0]==="*"&&m.length===1)){let x,Z=a((ne,Ue)=>{let ce;typeof ne=="object"?ce=ne.name:ce=ne;let De=Xs?.[ce],re;if(De){let j=O?.[ce];if(j)if(j.hasMappings){let He=De.from?G[De.from]:Gn(C.key);re=j.get(He),re||(re=[])}else re=j.fromRecord?.(G);else re=De(G,R,C);let Se=a(He=>{if(He&&typeof He=="object"){let Kn=De.definition?.tableClass||Ke;v||(v={});let js=v[ce]||(v[ce]=Kn.transformEntryForSelect(ce===ne?null:ne.select||(Array.isArray(ne)?ne:null),R,D,j,N));if(Array.isArray(He)){let We=[],kt=Kn.transformToOrderedSelect(He,ne.select,typeof ne.sort=="object"&&ne.sort,R,D,js)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),on=a(Vt=>{for(;!Vt.done;){if(Vt?.then)return Vt.then(on);We.push(Vt.value),Vt=kt.next()}Ue(We,ce)},"nextValue"),Wn=on(kt.next());Wn&&(x||(x=[]),x.push(Wn));return}else if(He=js.call(this,He),He?.then){x||(x=[]),x.push(He.then(We=>Ue(We,ce)));return}}Ue(He,ce)},"handleResolvedValue");re?.then?(x||(x=[]),x.push(re.then(Se))):Se(re);return}else re=G[ce],re&&typeof re=="object"&&ce!==ne&&(re=Ke.transformEntryForSelect(ne.select||ne,R,D,null)({value:re}));Ue(re,ce)},"selectAttribute"),_e;if(typeof m=="string")Z(m,ne=>{_e=ne});else if(Array.isArray(m))if(m.asArray)_e=[],m.forEach((ne,Ue)=>{ne==="*"?m[Ue]=G:Z(ne,ce=>_e[Ue]=ce)});else{_e={};let ne=m.forceNulls;for(let Ue of m)if(Ue==="*")for(let ce in G)_e[ce]=G[ce];else Z(Ue,(ce,De)=>{ce===void 0&&ne&&(ce=null),_e[De]=ce})}else throw new Mr.ClientError("Invalid select"+m);return x?Promise.all(x).then(()=>_e):_e}return G},"transform");return q}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");h||Et({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),m||(m={});let R=!m.rawEvents,D=[],O=bG(Ke,this[Me]??null,function(L,y,v,q){try{let C=y.getValue?.(i,R);if(!C&&y.type==="patch"&&R){let x=i.getEntry(L);x?.version===y.version?C=x.value:C=y.getValue?.(i,!0,v),y.type="put"}let G={id:L,timestamp:v,value:C,version:y.version,type:y.type,beginTxn:q};D?D.push(G):this.send(G)}catch(C){it.error(C)}},m.startTime||0,m),N=(async()=>{this[Vn]&&(O.includeDescendants=!0,m.onlyChildren&&(O.onlyChildren=!0)),m.supportsTransactions&&(O.supportsTransactions=!0);let L=this[Me],y=m.previousCount;y>1e3&&(y=1e3);let v=m.startTime;if(this[Vn]){if(v){if(y)throw new Mr.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:q,value:C}of u.getRange({start:v,exclusiveStart:!0,snapshot:!1})){let G=vt(C);if(G.tableId!==n)continue;let x=G.recordId;if(L==null||MG(L,x)){let Z=G.getValue(i,R,q);if(O.send({id:x,timestamp:q,value:Z,version:G.version,type:G.type}),O.queue?.length>DG&&await O.waitForDrain()===!1)return}O.startTime=q}}else if(y){let q=[];for(let{key:C,value:G}of u.getRange({start:"z",end:!1,reverse:!0}))try{let x=vt(G);if(x.tableId!==n)continue;let Z=x.recordId;if(L==null||MG(L,Z)){let _e=x.getValue(i,R,C);if(q.push({id:Z,timestamp:C,value:_e,version:x.version,type:x.type}),--y<=0)break}}catch(x){it.error("Error getting history entry",C,x)}for(let C=q.length;C>0;)O.send(q[--C]);q[0]&&(O.startTime=q[0].timestamp)}else if(!m.omitCurrent){for(let{key:q,value:C,version:G,localTime:x}of i.getRange({start:L??!1,end:L==null?void 0:[L,xo.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(C&&(O.send({id:q,timestamp:x,value:C,version:G,type:"put"}),O.queue?.length>DG&&await O.waitForDrain()===!1))return}}else{y&&!v&&(v=0);let q=this[Lr]?.localTime;if(q===Om&&(i.cache?.delete(L),this[Lr]=i.getEntry(L),it.trace("re-retrieved record",q,this[Lr]?.localTime),q=this[Lr]?.localTime),it.trace("Subscription from",v,"from",L,q),v<q){let C=[],G=q;do{let x=u.get(G);if(x){m.omitCurrent=!0;let Z=vt(x),_e=Z.getValue(i,R,G);R&&(Z.type="put"),C.push({id:L,value:_e,timestamp:G,...Z}),G=Z.previousLocalTime}else break;y&&y--}while(G>v&&y!==0);for(let x=C.length;x>0;)O.send(C[--x]);O.startTime=q}!m.omitCurrent&&this.doesExist()&&O.send({id:L,timestamp:q,value:this[Ee],version:this[Vl],type:"put"})}for(let q of D)O.send(q);D=null})();return m.listener&&O.on("data",m.listener),O}doesExist(){return!!(this[Ee]||this[Gl])}publish(m,R){this._writePublish(m,R)}_writePublish(m,R){let D=yn(this[ye]),O=this[Me]||null;dc(O);let N=this[ye];D.addWrite({key:O,store:i,entry:this[Lr],nodeName:N?.nodeName,validate:()=>{N?.source||(D.checkOverloaded(),this.validate(m))},before:Be.publish?.bind(this,N,O,m),beforeIntermediate:Ne.publish?.bind(this,N,O,m),commit:(L,y,v)=>{y===void 0&&p&&!h&&a_(),T(O,y?.value??null,y,y?.version||L,0,!0,N,y?.expiresAt,"message",!1,m)}})}validate(m,R){let D,O=a((N,L,y)=>{if(L.type&&N!=null)if(R&&N.__op__&&(N=N.value),L.properties){typeof N!="object"&&(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be an object${L.type?" ("+L.type+")":""}`);let v=L.properties;for(let q=0,C=v.length;q<C;q++){let G=v[q],x=O(N[G.name],G,y+"."+G.name);x&&(N[G.name]=x)}if(L.sealed&&N!=null&&typeof N=="object")for(let q in N)v.find(C=>C.name===q)||(D||(D=[])).push(`Property ${q} is not allowed within object in property ${y}`)}else switch(L.type){case"Int":(typeof N!="number"||N>>0!==N)&&(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof N!="number"||!(Math.floor(N)===N&&Math.abs(N)<=9007199254740992))&&(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof N!="number"&&(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be a number`);break;case"ID":typeof N=="string"||N?.length>0&&N.every?.(v=>typeof v=="string")||(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof N!="string"&&(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be a string`);break;case"Boolean":typeof N!="boolean"&&(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be a boolean`);break;case"Date":if(!(N instanceof Date)){if(typeof N=="string"||typeof N=="number")return new Date(N);(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof N!="bigint"){if(typeof N=="string"||typeof N=="number")return BigInt(N);(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be a bigint`)}break;case"Bytes":N instanceof Uint8Array||(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(N)){if(L.elements)for(let v=0,q=N.length;v<q;v++){let C=N[v],G=O(C,L.elements,y+"[*]");G&&(N[v]=G)}}else(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be a Buffer or Uint8Array`);break}L.nullable===!1&&N==null&&(D||(D=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let N=0,L=S.length;N<L;N++){let y=S[N];if(!y.relationship&&(!R||y.name in m)){let v=O(m[y.name],y,y.name);v&&(m[y.name]=v)}}if(d)for(let N in m)S.find(L=>L.name===N)||(D||(D=[])).push(`Property ${N} is not allowed`);if(D)throw new Mr.ClientError(D.join(". "))}getUpdatedTime(){return this[Vl]}wasLoadedFromSource(){return I?!!this[$A]:void 0}static async addAttributes(m){let R=S.slice(0);for(let D of m){if(!D.name)throw new Mr.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Mr.ClientError("Attribute names cannot include backticks or forward slashes");(0,vG.validateAttribute)(D.name),R.push(D)}return Et({table:s,database:c,schemaDefined:_,attributes:R}),Ke.indexingOperation}static async removeAttributes(m){let R=S.filter(D=>!m.includes(D.name));return Et({table:s,database:c,schemaDefined:_,attributes:R}),Ke.indexingOperation}static getRecordCount(m){let R=i.getStats().entryCount,D=1e3/2,O=performance.now(),N=Math.floor(R/2),L=m?.exactCount,y=0,v=0,q;for(let{value:C}of i.getRange({start:!0,lazy:!0}))if(C!=null&&y++,v++,!L&&v<N&&performance.now()-O>D){q=v;break}if(q){let C=y;y=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:q}))re!=null&&y++;let G=q*2,x=(y+C)/G,Z=Math.pow((y-C+1)/q/2,2)+x*(1-x)/G,_e=Math.max(Math.sqrt(Z)*R,1),ne=Math.round(x*R),Ue=Math.max(ne-1.96*_e,y+C),ce=Math.min(ne+1.96*_e,R),De=Math.pow(10,Math.round(Math.log10(_e)));return De>ne&&(De=De/10),y=Math.round(ne/De)*De,{recordCount:y,estimatedRange:[Math.round(Ue),Math.round(ce)]}}return{recordCount:y}}static updatedAttributes(){Xs=this.propertyResolvers={$id:(m,R,D)=>({value:D.key}),$updatedtime:(m,R,D)=>D.version,$record:(m,R,D)=>D?{value:m}:m};for(let m of this.attributes){m.resolve=null;let R=m.relationship;if(R)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),lO=!0,R.to)m.elements?.definition?(Xs[m.name]=m.resolve=(D,O,N)=>{let L=D[R.from?R.from:t],y=m.elements.definition.tableClass;return N?Ga({attribute:R.to,value:L},yn(O).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:R.to,value:L}],O).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,R.from&&(m.resolve.from=R.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(R.from){let D=m.definition||m.elements?.definition;D?(Xs[m.name]=m.resolve=(O,N,L)=>{let y=O[R.from];if(y!==void 0){if(m.elements){let v,q=y.map(C=>{let G=L?D.tableClass.primaryStore.getEntry(C,{transaction:yn(N).getReadTxn()}):D.tableClass.get(C,N);return G?.then&&(v=!0),G});return R.filterMissing?v?Promise.all(q).then(C=>C.filter(PG)):q.filter(PG):v?Promise.all(q):q}return L?D.tableClass.primaryStore.getEntry(y,{transaction:yn(N).getReadTxn()}):D.tableClass.get(y,N)}},m.set=(O,N)=>{if(Array.isArray(N)){let L=N.map(y=>y[Me]||y[D.tableClass.primaryKey]);O[R.from]=L}else{let L=N[Me]||N[D.tableClass.primaryKey];O[R.from]=L}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=R.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}ah(this,this)}static async deleteHistory(m=0){let R;for(let{key:D,value:O}of u.getRange({start:0,end:m}))await kl(),vt(O).tableId===n&&(R=u.remove(D));await R}static async*getHistory(m=0,R=1/0){for(let{key:D,value:O}of u.getRange({start:m,end:R})){await kl();let N=vt(O);N.tableId===n&&(yield{id:N.recordId,localTime:D,version:N.version,type:N.type,value:N.getValue(i,!0,D),user:N.user})}}static async getHistoryOfRecord(m){let R=[];if(m==null)throw new Error("An id is required");let D=i.getEntry(m);if(!D)return R;let O=D.localTime;if(!O)throw new Error("The entry does not have a local audit time");let N=0;do{await kl();let L=u.get(O);if(L){let y=vt(L);R.push({id:y.recordId,localTime:O,version:y.version,type:y.type,value:y.getValue(i,!0,O),user:y.user}),O=y.previousLocalTime}else break}while(N<1e3&&O);return R.reverse()}static cleanup(){J?.remove()}}Ke.updatedAttributes();let vq=Ke.prototype;return vq[Jie]=!0,E&&Ke.setTTLExpiration(E/1e3),Q&&Bq(),Ke;function i_(K,m,R){let D;for(let O in r){let N=r[O],L=N.isIndexing,y=R?.[O],v=m?.[O];if(y===v&&!L)continue;D=!0;let q=N.indexNulls,C=(0,$l.getIndexedValues)(y,q),G=(0,$l.getIndexedValues)(v,q);if(G?.length>0){let x=new Set(G);if(C=C?C.filter(Z=>{if(x.has(Z))x.delete(Z);else return!0}):[],G=Array.from(x),(G.length>0||C.length>0)&&IG){let Z=G.concat(C).map(_e=>({key:_e,value:K}));N.prefetch(Z,LG)}for(let Z=0,_e=G.length;Z<_e;Z++)N.remove(G[Z],K)}else C?.length>0&&IG&&N.prefetch(C.map(x=>({key:x,value:K})),LG);if(C)for(let x=0,Z=C.length;x<Z;x++)N.put(C[x],K)}return D}a(i_,"updateIndices");function dc(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>CG)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)return!0;break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,xo.writeKey)(K,jie,0)>CG)throw new Error("Primary key size is too large: "+K.length);return!0}a(dc,"checkValidId");function Lh(K,m,R,D,O){let N=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),R.transaction?.isDone)return O(null,K);let L=i.getEntry(K,R);return L&&m&&(L?.version>(m.lastModified||0)&&(m.lastModified=L.version),L?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=L.localTime)),O(L,K)},"whenPrefetched");return D?N():ue>0?(ue--,N()):new Promise((L,y)=>{ue===0?(ue--,i.prefetch([K],()=>{v(),q()})):(X.push(K),oe.push(q),X.length>Uq&&(ue--,v()));function v(){if(X.length>0){let C=oe;i.prefetch(X,()=>{ue===-1?v():ue++;for(let G of C)G()}),X=[],oe=[],le>2&&le--}else ue=le,le<Pq&&le++}a(v,"prefetch");function q(){try{L(N())}catch(C){y(C)}}a(q,"load")})}a(Lh,"loadLocalRecord");function o_(K){if(!K?.role)return;let m=K.role.permission;if(m.super_user)return Zie;let R=m[c],D,O=R?.tables;if(O)return O[s];if(c==="data"&&(D=m[s])&&!D.tables)return D}a(o_,"getTablePermissions");function Mh(K,m,R,D){if(I){let O;if(R.noCache?O=!0:(m?(!m.value||m.metadataFlags&(ql|Fl)||m.expiresAt&&m.expiresAt<Date.now())&&(O=!0):O=!0,Qr(!O,"cache-hit",s)),O){let N=dO(K,m,R).then(L=>(L?.value?.[Ee]&&it.error("Can not assign a record with a record property"),R&&(L?.version>(R.lastModified||0)&&(R.lastModified=L.version),R.lastRefreshed=Date.now()),L));if(R?.onlyIfCached||m?.value&&D?.allowStaleWhileRevalidate?.(m,K)){if(N.catch(L=>it.warn(L)),R?.onlyIfCached&&!D.doesExist())throw new Mr.ServerError("Entry is not cached",504);return}else return N}}else if(m?.value&&m.expiresAt&&m.expiresAt<Date.now())return Ke.evict(m.key,m.value,m.version),m.value=null,{then(O){return O(m)}}}a(Mh,"ensureLoadedFromSource");function yn(K){let m=K?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let R=m.next;if(!R)return m=m.next=new no,m.lmdbDb=i,m;m=R}while(!0)}else return new Td}a(yn,"txnForContext");function Ph(K,m,R){if(!K)return;Ch=K;let D=K.value||K.deref?.()||(Ch=i.getEntry(K.key))?.value;if(typeof m=="object"){let N=Xs,L=D;for(let y=0,v=m.length;y<v;y++){let q=m[y],C=N?.[q];L=C&&L?C(L,R,!0)?.value:L?.[q],N=C?.definition?.tableClass?.propertyResolvers}return L}let O=Xs[m];return O?O(D,R):D[m]}a(Ph,"getAttributeValue");function _O(K,m,R,D,O){let N=O?.length,L={transaction:D,lazy:N>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},y;function v(q,C){let G=q?.value;if(!G)return vo.SKIP;for(let x=0;x<N;x++)if(!y?.includes(x)&&!O[x](G,q))return vo.SKIP;return C!==void 0&&(q.key=C),q}if(a(v,"processEntry"),N>0||!K.hasEntries){let q=K.map(C=>{if(y=null,typeof C=="object"&&C?.key!==void 0)return N>0?v(C):C;if(C==null)return vo.SKIP;for(let G=0;G<N;G++){let Z=O[G].idFilter;if(Z){if(!Z(C))return vo.SKIP;y||(y=[]),y.push(G)}}return Lh(C,R,L,!1,v)});return Array.isArray(K)&&(q=q.filter(C=>C!==vo.SKIP)),q.hasEntries=!0,q}return K}a(_O,"transformToEntries");async function dO(K,m,R){let D=m?.metadataFlags,O=m?.version,N,L;if(!i.attemptLock(K,O,()=>{clearTimeout(L);let C=i.getEntry(K);!C||!C.value||C.metadataFlags&(ql|Fl)?N(dO(K,i.getEntry(K),R)):N(C)}))return new Promise(C=>{N=C,L=setTimeout(()=>{i.unlock(K,O)},zie)});let y=m?.value,v={requestContext:R,replacingRecord:y,replacingVersion:O,noCacheStore:!1,source:null,resourceCache:R?.resourceCache},q=R?.responseHeaders;return new Promise((C,G)=>{let x;KA(rt(v,async Z=>{let _e=performance.now(),ne,Ue,ce;try{for(let Se of Ke.sources)if(Se.get&&(!Se.get.reliesOnPrototype||Se.prototype.get)&&(v.source=Se,ne=await Se.get(K,v),ne))break;ce=D&ql;let re=v.lastModified||ce&&O;Ue=ce||re>O||!y,re||(re=(0,$l.getNextMonotonicTime)());let j=performance.now()-_e;if(Sr(j,"cache-resolution",s),q&&Tg(q,"Server-Timing",`cache-resolve;dur=${j.toFixed(2)}`,!0),Z.timestamp=re,E&&!v.expiresAt&&(v.expiresAt=Date.now()+E),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==K&&(ne[t]=K)}x=!0,C({version:re,value:ne})}catch(re){re.message+=` while resolving record ${K} for ${s}`,y&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!R?.mustRevalidate||R?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(C({version:O,value:y}),it.trace(re.message,"(returned stale record)")):G(re),v.transaction.abort();return}if(R?.noCacheStore||v.noCacheStore){v.transaction.abort();return}yn(v).addWrite({key:K,store:i,entry:m,nodeName:"source",commit:(re,j)=>{if(j?.version!==O)return;let Se=i_(K,y,ne);ne?(Ne.put?.(v,K,ne),T(K,ne,j,re,0,h&&Ue||null,v,v.expiresAt,"put",!!ce)):(Ne.delete?.(v,K),h||p?T(K,null,j,re,0,h&&Ue||null,v,0,"delete",!!ce):i.remove(K,O))}})}),()=>{i.unlock(K,O)},Z=>{i.unlock(K,O),x&&it.error("Error committing cache update",Z)})})}a(dO,"getFromSource");function a_(){if(xe!==n_&&(n_=xe,(0,Bo.getWorkerIndex)()===(0,Bo.getWorkerCount)()-1)){if(s_&&clearTimeout(s_),!xe)return;let K=new Date;K.setMonth(0),K.setDate(1),K.setHours(0),K.setMinutes(0),K.setSeconds(0);let m=Math.ceil((Date.now()-K.getTime())/xe)*xe+K.getTime(),R=a(D=>{it.trace(`Scheduled next cleanup scan at ${new Date(D)}ms`),s_=setTimeout(()=>U=U.then(async()=>{if(R(Math.max(D+xe,Date.now())),i.rootStore.status!=="open"){clearTimeout(s_);return}let O=50,N=new Array(O),L=0;it.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:v,value:q,version:C,expiresAt:G}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let x;q===null&&!h&&C+Qie<Date.now()?x=i.remove(v,C):G&&G+f<Date.now()&&(x=Ke.evict(v,q,C),y++),x&&(await N[L],N[L]=x.catch(Z=>{it.error("Cleanup error",Z)}),++L>=O&&(L=0)),await kl()}it.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){it.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");R(m)}}a(a_,"scheduleCleanup");function fO(){J=u?.addDeleteRemovalCallback(n,K=>{let m=i.getEntry(K);m?.value===null&&i.remove(K,m.version)})}a(fO,"addDeleteRemoval");function Bq(){(0,Bo.getWorkerIndex)()===0&&setInterval(async()=>{if(!Dh){Dh=!0;try{let K=Q.name,m=r[K];if(!m)throw new Error(`expiresAt attribute ${Q} must be indexed`);for(let R of m.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let D of m.getValues(R)){let O=i.getEntry(D);O?.value?O.value[K]<Date.now()&&Ke.evict(D,O.value,O.version):i.ifVersion(D,O?.version,()=>m.remove(R,D))}await kl()}}catch(K){it.error("Error in evicting old records",K)}finally{Dh=!1}}},Wie).unref()}a(Bq,"runRecordExpirationEviction")}function YA(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function LG(){}function eoe(e){BG=e}function lh(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;switch(r){case"Int":case"Long":return e==="null"?null:parseInt(e);case"Float":return e==="null"?null:parseFloat(e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":return isNaN(e)?e==="null"?null:(toe.test(e)||(e+="Z"),new Date(e)):new Date(+e);case void 0:case"Any":return(0,dh.autoCast)(e);default:return e}}function MG(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 n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function KA(e,t,r){return e?.then?e.then(t,r):t(e)}function _h(e,t){e[Lr]=t,e[Ee]=t?.value??null,e[Vl]=t?.version}function PG(e){return e!=null}function $n(e){try{return JSON.stringify(e)}catch{return e}}var Yn,vo,$l,UG,vG,Wl,Mr,Yl,Kl,it,xo,Bo,dh,Kie,BG,Wie,Qie,IG,zie,Vl,Jie,Lr,Gl,wG,Xie,$A,ac,ql,Fl,jie,CG,DG,Zie,ATe,toe,kl,SE=Re(()=>{Yn=H(P()),vo=require("lmdb"),$l=H(Br()),UG=require("lodash"),vG=H(wc());cn();_S();Wl=H(ee());NG();Mr=H(se()),Yl=H(Ns()),Kl=H(Pn());Ae();sE();it=H($());Ad();so();xo=require("ordered-binary"),Bo=H(Qe());ni();dh=H(z());Bc();Ds();eh();el();Kie=new Uint8Array(9);Kie[8]=192;Wie=6e4,Qie=864e5;Wl.initSync();IG=Wl.get(Yn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),zie=1e4,Vl=Symbol.for("version"),Jie=Symbol.for("incremental-update"),Lr=Symbol("entry"),Gl=Symbol("is-saving"),wG=1,Xie=2,$A=Symbol("loaded-from-source"),ac={isNotification:!0,ensureLoaded:!1},ql=1,Fl=8,jie=Buffer.allocUnsafeSlow(8192),CG=1978,DG=100,Zie={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},ATe=(0,dh.convertToMS)(Wl.get(Yn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(fh,"makeTable");a(YA,"attributesAsObject");a(LG,"noop");a(eoe,"setServerUtilities");toe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(lh,"coerceType");a(MG,"isDescendantId");kl=a(()=>new Promise(setImmediate),"rest");a(KA,"when");a(_h,"updateResource");a(PG,"exists");a($n,"stringify")});var ke={};Fe(ke,{database:()=>ua,databases:()=>ct,dropDatabase:()=>mS,dropTableMeta:()=>ooe,getDatabases:()=>mr,getDefaultCompression:()=>Nf,getTables:()=>roe,onUpdatedTable:()=>rA,readMetaDb:()=>Ql,resetDatabases:()=>Ku,table:()=>Et,tables:()=>xr});function roe(){return Sh||mr(),xr||{}}function mr(){if(Sh)return ct;Sh=!0,lc=new Map;let e=(0,St.getHdbBasePath)()&&(0,ot.join)((0,St.getHdbBasePath)(),Ut.DATABASES_DIR_NAME),t=(0,St.get)(Ut.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,nn.existsSync)(e)?e:(0,ot.join)((0,St.getHdbBasePath)(),Ut.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,nn.existsSync)(e))for(let r of(0,nn.readdirSync)(e,{withFileTypes:!0})){let n=(0,ot.basename)(r.name,".mdb");r.isFile()&&(0,ot.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Ql((0,ot.join)(e,r.name),null,n)}if((0,nn.existsSync)((0,uc.getBaseSchemaPath)())){for(let r of(0,nn.readdirSync)((0,uc.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,ot.join)((0,uc.getBaseSchemaPath)(),r.name),s=(0,ot.join)((0,uc.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,nn.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,ot.extname)(i.name).toLowerCase()===".mdb"){let o=(0,ot.join)(s,i.name);Ql((0,ot.join)(n,i.name),(0,ot.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,nn.existsSync)(s))for(let o of(0,nn.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,ot.extname)(o.name).toLowerCase()===".mdb"&&Ql((0,ot.join)(s,o.name),(0,ot.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,ot.join)(c.path,(0,ot.basename)(o+".mdb"));(0,nn.existsSync)(u)&&Ql(u,o,r,null,!0)}}for(let r in ct){let n=lc.get(r);if(n){let s=ct[r];r.includes("delete")&&bn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(bn.trace(`delete table class ${i}`),delete s[i])}else if(delete ct[r],r==="data"){for(let s in xr)delete xr[s];delete xr[Th]}}return lc=null,ct}}function Ku(){Sh=!1;for(let[,e]of Bi)e.needsDeletion=!0;mr();for(let[e,t]of Bi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Bi.delete(e));return ct}function Ql(e,t,r=zA,n,s){let i=new WA.default(e,!1);try{let o=Bi.get(e);o?o.needsDeletion=!1:(o=(0,hh.open)(i),Bi.set(e,o));let c=new Ho.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Eh.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,nn.existsSync)(n)&&(i.path=n,_=(0,hh.open)(i),_.isLegacy=!0):_=ZE(o));let l=qG(r),d=l[Th],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[p,S]=f.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let T=E.get(p);T||E.set(p,T={attributes:[]}),(S==null||h.is_hash_attribute)&&(T.primary=h),S!=null&&T.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){bn.warn(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(p)}`);continue}}let T=l[f],A={},b=[],I,B,U=typeof S.audit=="boolean"?S.audit:(0,St.get)(Ut.CONFIG_PARAMS.LOGGING_AUDITLOG),F=S.trackDeletes,M=S.expiration,Q=S.eviction,J=S.sealed;if(T)A=T.indices,b=T.attributes,T.schemaVersion++;else{I=S.tableId,I?I>=(u.get(cc)||0)&&u.putSync(cc,I+1):(S.tableId=I=u.get(cc),I||(I=1),u.putSync(cc,I+1),u.putSync(S.key,S));let X=new Ho.default(!S.is_hash_attribute,S.is_hash_attribute);if(X.compression=S.compression,X.compression){let oe=(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||GG;X.compression.threshold=oe}B=D_(o.openDB(S.key,X)),B.rootStore=o,B.tableId=I}for(let X of p){X.attribute=X.name;try{if(!X.is_hash_attribute&&(X.indexed||X.attribute&&!X.name)){if(!A[X.name]){let ue=new Ho.default(!X.is_hash_attribute,X.is_hash_attribute);A[X.name]=o.openDB(X.key,ue),A[X.name].indexNulls=X.indexNulls}let oe=b.find(ue=>ue.name===X.name);oe?b.splice(b.indexOf(oe),1,X):b.push(X)}}catch(oe){bn.error("Error trying to update attribute",X,b,A,oe)}}if(!T){T=FG(l,f,fh({primaryStore:B,auditStore:_,audit:U,sealed:J,expirationMS:M&&M*1e3,evictionMS:Q&&Q*1e3,trackDeletes:F,tableName:f,tableId:I,primaryKey:S.name,databasePath:s?r+"/"+f:r,databaseName:r,indices:A,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),T.schemaVersion=1;for(let X of JA)X(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function qG(e){let t=ct[e];if(t||(e==="data"?t=ct[e]=xr:e==="system"?Object.defineProperty(ct,"system",{value:t=Object.create(null),configurable:!0}):t=ct[e]=Object.create(null)),lc&&!lc.has(e)){let r=new Set;t[Th]=r,lc.set(e,r)}return t}function FG(e,t,r){return e[t]=r,r}function ua({database:e,table:t}){e||(e=zA),mr();let r=qG(e),n=(0,ot.join)((0,St.getHdbBasePath)(),Ut.DATABASES_DIR_NAME),s=(0,St.get)(Ut.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_PATH)||((0,nn.existsSync)(n)?n:(0,ot.join)((0,St.getHdbBasePath)(),Ut.LEGACY_DATABASES_DIR_NAME));let o=(0,ot.join)(n,(i?t:e)+".mdb"),c=Bi.get(o);if(!c){let u=new WA.default(o,!1);c=(0,hh.open)(u),Bi.set(o,c)}return c}async function mS(e){if(!ct[e])throw new Error("Schema does not exist");let t=ct[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Bi.delete(r.path),r.status==="open"&&(await r.close(),await zl.remove(r.path));if(r||(r=ua({database:e,table:null}),r.status==="open"&&(await r.close(),await zl.remove(r.path))),e==="data"){for(let n in xr)delete xr[n];delete xr[Th]}delete ct[e]}function Et({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:u,schemaDefined:_,origin:l}){t||(t=zA);let d=ua({database:t,table:e}),E=ct[t],f=E?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,p,S,T;_==null&&(_=!0);let A=new Ho.default(!1);for(let M of i)M.attribute&&!M.name?(M.name=M.attribute,M.indexed=!0):M.attribute=M.name,M.expiresAt&&(M.indexed=!0);let b,I;if(f){if(h=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let M=d.auditStore;M||(M=ZE(d)),p=i.find(oe=>oe.isPrimaryKey)||{},h=p.name,p.is_hash_attribute=p.isPrimaryKey=!0,p.schemaDefined=_,p.compression=Nf(),u&&(p.trackDeletes=!0),o=p.audit=typeof o=="boolean"?o:(0,St.get)(Ut.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(p.expiration=r),n&&(p.eviction=n),typeof c=="boolean"&&(p.sealed=c),l&&(p.origins?p.origins.includes(l)||p.origins.push(l):p.origins=[l]),bn.trace(`${e} table loading, opening primary store`);let Q=new Ho.default(!1,!0);Q.compression=p.compression;let J=e+"/",X=D_(d.openDB(J,Q));X.rootStore=d,T=d.dbisDb=d.openDB(Eh.INTERNAL_DBIS_NAME,A),X.tableId=T.get(cc),X.tableId||(X.tableId=1),T.putSync(cc,X.tableId+1),p.tableId=X.tableId,f=FG(E,e,fh({primaryStore:X,auditStore:M,audit:o,sealed:c,trackDeletes:u,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:X.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:T})),f.schemaVersion=1,b=!0,F(),T.put(J,p)}S=f.indices,T=T||(d.dbisDb=d.openDB(Eh.INTERNAL_DBIS_NAME,A)),f.dbisDB=T;let B=[];for(let{key:M,value:Q}of T.getRange({start:!0})){let[J,X]=M.toString().split("/");if(X===""&&(X=Q.name),X){if(J!==e)continue}else continue;let oe=i.find(le=>le.name===X),ue=!oe?.indexed&&Q.indexed&&!Q.isPrimaryKey;if((!oe||ue)&&(F(),b=!0,oe||T.remove(M),ue)){let le=f.indices[J];le&&B.push(le)}}let U=[];try{for(let M of i||[]){if(M.relationship)continue;let Q=e+"/"+(M.name||"");Object.defineProperty(M,"key",{value:Q,configurable:!0});let J=T.get(Q);if(M.isPrimaryKey){if(J=J||T.get(Q=e+"/")||{},o!==f.audit||c!==c||(+r||void 0)!==(+J.expiration||void 0)||(+n||void 0)!==(+J.eviction||void 0)){let oe=Object.assign({},J);typeof o=="boolean"&&(o&&f.enableAuditing(o),oe.audit=o),r&&(oe.expiration=+r),n&&(oe.eviction=+n),c!==void 0&&(oe.sealed=c),b=!0,F(),T.put(Q,oe)}continue}J?.attribute&&!J.name&&(J.indexed=!0);let X=!J||J.type!==M.type||J.indexed!==M.indexed||J.nullable!==M.nullable||JSON.stringify(J.attributes)!==JSON.stringify(M.attributes)||JSON.stringify(J.elements)!==JSON.stringify(M.elements);if(M.indexed){let oe=new Ho.default(!0,!1),ue=d.openDB(Q,oe);(X||J.indexingPID&&J.indexingPID!==process.pid||J.restartNumber<Jl.workerData?.restartNumber)&&(b=!0,F(),J=T.get(Q),(X||J.indexingPID&&J.indexingPID!==process.pid||J.restartNumber<Jl.workerData?.restartNumber)&&(b=!0,M.indexNulls===void 0&&(M.indexNulls=!0),f.primaryStore.getStats().entryCount>0&&(M.lastIndexedKey=J?.lastIndexedKey||!1,M.indexingPID=process.pid,ue.isIndexing=!0,Object.defineProperty(M,"dbi",{value:ue}),U.push(M))),T.put(Q,M)),J?.indexNulls&&M.indexNulls===void 0&&(M.indexNulls=!0),ue.indexNulls=M.indexNulls,S[M.name]=ue}else X&&(b=!0,F(),T.put(Q,M))}}finally{I&&I()}if(b&&(f.schemaVersion++,f.updatedAttributes()),bn.trace(`${e} table loading, running index`),U.length>0||B.length>0?f.indexingOperation=ioe(f,U,B):b&&mh.signalSchemaChange(new ph.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=l,b)for(let M of JA)M(f,l!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),bn.trace(`${e} table loaded`),f;function F(){I||d.transactionSync(()=>({then(M){I=M}}))}a(F,"startTxn")}async function ioe(e,t,r){try{let n=e.schemaVersion;await mh.signalSchemaChange(new ph.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,s=e.primaryStore.ifVersion(_,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,p=(0,xG.getIndexedValues)(l[h]);if(p)for(let S=0,T=p.length;S<T;S++)f.dbi.put(p[S],_)}}),s.then(()=>u--,E=>{u--,bn.error(E)}),Jl.workerData&&Jl.workerData.restartNumber!==HG.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=_,e.dbisDB.put(E.key,E);if(i)return}u>noe?await s:u>soe&&await new Promise(E=>setImmediate(E))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await mh.signalSchemaChange(new ph.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){bn.error("Error in indexing",n)}}function ooe({table:e,database:t}){let r=ua({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function rA(e){JA.push(e)}function Nf(){let e=(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||GG,n={startingOffset:32};return t&&(n.dictionary=zl.readFileSync(t)),r&&(n.threshold=r),e&&n}var St,Eh,hh,ot,nn,uc,Ho,WA,Ut,zl,QA,xG,mh,ph,Jl,bn,HG,zA,Th,GG,xr,ct,cc,JA,Sh,Bi,lc,noe,soe,Ae=Re(()=>{St=H(ee()),Eh=H(ft()),hh=require("lmdb"),ot=require("path"),nn=require("fs"),uc=H(Xe());SE();Ho=H(xc()),WA=H(Hc()),Ut=H(P()),zl=H(require("fs-extra")),QA=require("../index"),xG=H(Br()),mh=H(Ns()),ph=H(Pn()),Jl=require("worker_threads"),bn=H($()),HG=H(Qe());ni();Bc();zA="data",Th=Symbol("defined-tables"),GG=((0,St.get)(Ut.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,St.initSync)();xr=Object.create(null),ct=Object.create(null);(0,QA._assignPackageExport)("databases",ct);(0,QA._assignPackageExport)("tables",xr);cc=Symbol.for("next-table-id"),JA=[],Bi=new Map;a(roe,"getTables");a(mr,"getDatabases");a(Ku,"resetDatabases");a(Ql,"readMetaDb");a(qG,"ensureDB");a(FG,"setTable");a(ua,"database");a(mS,"dropDatabase");a(Et,"table");noe=1e3,soe=10;a(ioe,"runIndexing");a(ooe,"dropTableMeta");a(rA,"onUpdatedTable");a(Nf,"getDefaultCompression")});var z=g((LTe,tq)=>{"use strict";var xi=require("path"),KG=require("fs-extra"),Pr=$(),kG=require("fs-extra"),gh=require("os"),aoe=require("net"),coe=require("recursive-iterator"),dt=P(),uoe=KO(),VG=require("papaparse"),Rh=require("moment"),{inspect:loe}=require("util"),$G=require("is-number"),DTe=require("lodash"),_oe=require("minimist"),doe=require("https"),foe=require("http"),{hdb_errors:Ah}=se(),Eoe=/^((\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)))$/,WG=require("util").promisify(setTimeout),hoe=100,moe=5,poe="",Soe=4,YG={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};tq.exports={isEmpty:sn,isEmptyOrZeroLength:ps,arrayHasEmptyValues:Roe,arrayHasEmptyOrZeroLengthValues:Aoe,buildFolderPath:Ooe,isBoolean:QG,errorizeMessage:Toe,stripFileExtension:yoe,autoCast:Noe,autoCastJSON:zG,autoCastJSONDeep:jA,removeDir:Ioe,compareVersions:woe,isCompatibleDataVersion:Coe,escapeRawValue:Doe,unescapeValue:Loe,stringifyProps:Moe,timeoutPromise:Uoe,isClusterOperation:Boe,getClusterUser:Hoe,checkGlobalSchemaTable:xoe,getHomeDir:XG,getPropsFilePath:Poe,promisifyPapaParse:Goe,removeBOM:jG,createEventPromise:qoe,checkProcessRunning:Foe,checkSchemaTableExist:koe,checkSchemaExists:ZG,checkTableExists:eq,getStartOfTomorrowInSeconds:Voe,getLimitKey:$oe,isObject:boe,isNotEmptyAndHasValue:goe,autoCasterIsNumberCheck:JG,backtickASTSchemaItems:Yoe,isPortTaken:voe,createForkArgs:Koe,autoCastBoolean:Woe,async_set_timeout:WG,getTableHashAttribute:Qoe,doesSchemaExist:zoe,doesTableExist:Joe,stringifyObj:Xoe,ms_to_time:joe,changeExtension:Zoe,getEnvCliRootPath:ZA,noBootFile:eae,httpRequest:tae,transformReq:rae,convertToMS:nae,PACKAGE_ROOT:dt.PACKAGE_ROOT};function Toe(e){return e instanceof Error?e:new Error(e)}a(Toe,"errorizeMessage");function sn(e){return e==null}a(sn,"isEmpty");function goe(e){return!sn(e)&&(e||e===0||e===""||QG(e))}a(goe,"isNotEmptyAndHasValue");function ps(e){return sn(e)||e.length===0||e.size===0}a(ps,"isEmptyOrZeroLength");function Roe(e){if(sn(e))return!0;for(let t=0;t<e.length;t++)if(sn(e[t]))return!0;return!1}a(Roe,"arrayHasEmptyValues");function Aoe(e){if(ps(e))return!0;for(let t=0;t<e.length;t++)if(ps(e[t]))return!0;return!1}a(Aoe,"arrayHasEmptyOrZeroLengthValues");function Ooe(...e){try{return e.join(xi.sep)}catch{console.error(e)}}a(Ooe,"buildFolderPath");function QG(e){return sn(e)?!1:e===!0||e===!1}a(QG,"isBoolean");function boe(e){return sn(e)?!1:typeof e=="object"}a(boe,"isObject");function yoe(e){return ps(e)?poe:e.slice(0,-Soe)}a(yoe,"stripFileExtension");function Noe(e){return sn(e)||e===""||typeof e!="string"?e:YG[e]!==void 0?YG[e]:JG(e)===!0?Number(e):Eoe.test(e)?new Date(e):e}a(Noe,"autoCast");function zG(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(zG,"autoCastJSON");function jA(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=jA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=jA(r);n!==r&&(e[t]=n)}return e}else return zG(e)}a(jA,"autoCastJSONDeep");function JG(e){if(e.startsWith("0.")&&$G(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&$G(e))}a(JG,"autoCasterIsNumberCheck");async function Ioe(e){if(ps(e))throw new Error(`Directory path: ${e} does not exist`);try{await kG.emptyDir(e),await kG.remove(e)}catch(t){throw Pr.error(`Error removing files in ${e} -- ${t}`),t}}a(Ioe,"removeDir");function woe(e,t){if(ps(e)){Pr.info("Invalid current version sent as parameter.");return}if(ps(t)){Pr.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(woe,"compareVersions");function Coe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(Coe,"isCompatibleDataVersion");function Doe(e){if(sn(e))return e;let t=String(e);return t==="."?dt.UNICODE_PERIOD:t===".."?dt.UNICODE_PERIOD+dt.UNICODE_PERIOD:t.replace(dt.FORWARD_SLASH_REGEX,dt.UNICODE_FORWARD_SLASH)}a(Doe,"escapeRawValue");function Loe(e){if(sn(e))return e;let t=String(e);return t===dt.UNICODE_PERIOD?".":t===dt.UNICODE_PERIOD+dt.UNICODE_PERIOD?"..":String(e).replace(dt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Loe,"unescapeValue");function Moe(e,t){if(sn(e))return Pr.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+gh.EOL}!ps(n)&&n[0]===";"?r+=" "+n+s+gh.EOL:ps(n)||(r+=n+"="+s+gh.EOL)}catch{Pr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Moe,"stringifyProps");function XG(){let e;try{e=gh.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(XG,"getHomeDir");function Poe(){let e=xi.join(XG(),dt.HDB_HOME_DIR_NAME,dt.BOOT_PROPS_FILE_NAME);return KG.existsSync(e)||(e=xi.join(__dirname,"../","hdb_boot_properties.file")),e}a(Poe,"getPropsFilePath");function Uoe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(Uoe,"timeoutPromise");async function voe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=aoe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(voe,"isPortTaken");function Boe(e){try{return dt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Pr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Boe,"isClusterOperation");function xoe(e,t){let r=(Ae(),ie(ke)).getDatabases();if(!r[e])return Ah.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Ah.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(xoe,"checkGlobalSchemaTable");function Hoe(e,t){if(sn(t)){Pr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(sn(e)||ps(e)){Pr.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){Pr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Pr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Hoe,"getClusterUser");function Goe(){VG.parsePromise=function(e,t,r){return new Promise(function(n,s){VG.parse(e,{header:!0,transformHeader:jG,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Goe,"promisifyPapaParse");function jG(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(jG,"removeBOM");function qoe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Pr.info(`Got cluster status event response: ${loe(s)}`);try{i.cancel()}catch{Pr.error("Error trying to cancel timeout.")}n(s)})})}a(qoe,"createEventPromise");async function Foe(e){let t=!0,r=0;do await WG(hoe*r++),(await uoe.findPs(e)).length>0&&(t=!1);while(t&&r<moe);if(t)throw new Error(`process ${e} was not started`)}a(Foe,"checkProcessRunning");function koe(e,t){let r=ZG(e);if(r)return r;let n=eq(e,t);if(n)return n}a(koe,"checkSchemaTableExist");function ZG(e){let{getDatabases:t}=(Ae(),ie(ke));if(!t()[e])return Ah.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(ZG,"checkSchemaExists");function eq(e,t){let{getDatabases:r}=(Ae(),ie(ke));if(!r()[e][t])return Ah.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(eq,"checkTableExists");function Voe(){let e=Rh().utc().add(1,dt.MOMENT_DAYS_TAG).startOf(dt.MOMENT_DAYS_TAG).unix(),t=Rh().utc().unix();return e-t}a(Voe,"getStartOfTomorrowInSeconds");function $oe(){return Rh().utc().format("DD-MM-YYYY")}a($oe,"getLimitKey");function Yoe(e){try{let t=new coe(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){Pr.error("Got an error back ticking items."),Pr.error(t)}}a(Yoe,"backtickASTSchemaItems");function Koe(e){return[e]}a(Koe,"createForkArgs");function Woe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Woe,"autoCastBoolean");function Qoe(e,t){let{getDatabases:r}=(Ae(),ie(ke)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(Qoe,"getTableHashAttribute");function zoe(e){let{getDatabases:t}=(Ae(),ie(ke));return t()[e]!==void 0}a(zoe,"doesSchemaExist");function Joe(e,t){let{getDatabases:r}=(Ae(),ie(ke));return r()[e]?.[t]!==void 0}a(Joe,"doesTableExist");function Xoe(e){try{return JSON.stringify(e)}catch{return e}}a(Xoe,"stringifyObj");function joe(e){let t=Rh.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(joe,"ms_to_time");function Zoe(e,t){let r=xi.basename(e,xi.extname(e));return xi.join(xi.dirname(e),r+t)}a(Zoe,"changeExtension");function ZA(){if(process.env[dt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[dt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=_oe(process.argv);if(e[dt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[dt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(ZA,"getEnvCliRootPath");var XA;function eae(){if(XA)return XA;let e=ZA();if(ZA()&&KG.pathExistsSync(xi.join(e,dt.HDB_CONFIG_FILE)))return XA=!0,!0}a(eae,"noBootFile");function tae(e,t){let r;return e.protocol==="http:"?r=foe:r=doe,new Promise((n,s)=>{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",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(tae,"httpRequest");function rae(e){if(!e.schema&&!e.database){e.schema=dt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(rae,"transformReq");function nae(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(nae,"convertToMS")});var ee=g((PTe,oq)=>{"use strict";var eO=require("fs-extra"),Go=require("path"),rq=require("os"),sae=require("properties-reader"),jl=$(),Xl=z(),de=P(),Oh=Er(),iae="Error initializing environment manager",bh="BOOT_PROPS_FILE_PATH",nq=!1,oae={[de.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},zs={};oq.exports={BOOT_PROPS_FILE_PATH:bh,getHdbBasePath:aae,setHdbBasePath:cae,get:sq,initSync:lae,setProperty:Pe,initTestEnvironment:dae,setCloneVar:_ae};function aae(){return zs[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(aae,"getHdbBasePath");function cae(e){zs[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(cae,"setHdbBasePath");function sq(e){let t=Oh.getConfigValue(e);return t===void 0?zs[e]:t}a(sq,"get");function Pe(e,t){oae[e]&&(zs[e]=t),Oh.updateConfigObject(e,t)}a(Pe,"setProperty");function uae(){let e;try{e=Xl.getPropsFilePath(),eO.accessSync(e,eO.constants.F_OK|eO.constants.R_OK),nq=!0;let t=sae(e);return zs[de.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(de.HDB_SETTINGS_NAMES.INSTALL_USER),zs[de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),zs[bh]=e,!0}catch{return jl.trace(`Environment manager found no properties file at ${e}`),!1}}a(uae,"doesPropFileExist");function lae(e=!1){try{(nq||uae()||Xl.noBootFile())&&!iq&&(Oh.initConfig(e),zs[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Oh.getConfigValue(de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){jl.error(iae),jl.error(t),console.error(t),process.exit(1)}}a(lae,"initSync");var iq=!1;function _ae(e){iq=e}a(_ae,"setCloneVar");function dae(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Go.join(__dirname,"../../","unitTests");zs[bh]=Go.join(u,"hdb_boot_properties.file"),Pe(de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Go.join(u,"settings.test")),Pe(de.HDB_SETTINGS_NAMES.INSTALL_USER,rq.userInfo()?rq.userInfo().username:void 0),Pe(de.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Pe(de.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Go.join(u,"envDir","log")),Pe(de.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Pe(de.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Pe(de.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Pe(de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Go.join(u,"envDir")),Pe(de.CONFIG_PARAMS.STORAGE_PATH,Go.join(u,"envDir")),s&&(Pe(de.CONFIG_PARAMS.HTTP_SECUREPORT,sq(de.CONFIG_PARAMS.HTTP_PORT)),Pe(de.CONFIG_PARAMS.HTTP_PORT,null)),Pe(de.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Pe(de.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Pe(de.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Xl.isEmpty(i)?!1:i),Pe(de.CONFIG_PARAMS.HTTP_CORS,Xl.isEmpty(i)?!1:i),Pe(de.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Pe(de.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Go.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Pe(de.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Xl.isEmpty(c)?!1:c),o&&(Pe("CORS_ACCESSLIST",o),Pe(de.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Pe(de.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Pe(de.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Pe(de.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${bh}. Please check your boot props and settings files`;jl.fatal(r),jl.error(t)}}a(dae,"initTestEnvironment")});var _q=g((vTe,lq)=>{"use strict";var uq=require("joi"),{string:Zl,boolean:aq,array:fae}=uq.types(),cq=P(),Eae=je();lq.exports=hae;function hae(e){let t=uq.object({operation:Zl.valid(cq.OPERATIONS_ENUM.ADD_NODE,cq.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:Zl.required(),subscriptions:fae.items({schema:Zl.required(),table:Zl.optional(),hash_attribute:Zl.optional(),subscribe:aq.required(),publish:aq.required()}).min(1).required()});return Eae.validateBySchema(e,t)}a(hae,"updateRemoteSourceValidator")});var e_=g((xTe,dq)=>{"use strict";var tO=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,n=void 0){this.status=t,this.message=r,this.system_info=n}};dq.exports=tO});var mq=g((GTe,hq)=>{"use strict";var mae=_q(),Js=$(),rO=Ve(),pae=P(),nO=fn(),qo=ut(),fq=bu(),Sae=md(),{Node:Tae,NodeSubscription:Eq}=Ti(),sO=e_(),iO=z(),gae=ee(),{cloneDeep:Rae}=require("lodash"),{broadcast:Aae}=Qe();hq.exports=Oae;async function Oae(e){try{let t=mae(e);if(t)return Js.error(`Validation error in updateRemoteSource: ${t.message}`),new sO(rO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:n,system_info:s}=e,i=[],o=Rae(await nO.getNodeRecord(n)),c=!iO.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&Js.trace(`Existing record found for ${n}, updating records subscriptions`);for(let _=0,l=r.length;_<l;_++){let d=r[_],E=d.schema,f=d.table;if(!iO.doesSchemaExist(E)){Js.trace(`updateRemoteSource creating schema: ${E}`);try{await fq.createSchema({operation:"create_schema",schema:E})}catch(h){Js.error(h)}}if(f&&!iO.doesTableExist(E,f)){let h=new Sae(E,f,d.hash_attribute);d.attributes&&(h.attributes=d.attributes),Js.trace(`updateRemoteSource creating table: ${f} in schema: ${E} with attributes: ${JSON.stringify(d.attributes)}`);try{await fq.createTable(h)}catch(p){Js.error(p)}}if(Js.trace(`Creating local stream for ${E}.${f}`),await qo.createLocalTableStream(E,f),c?(await qo.updateConsumerIterator(E,f,n,"stop"),await qo.updateRemoteConsumer(d,n),d.subscribe===!0&&await qo.updateConsumerIterator(E,f,n,"start")):(await qo.updateRemoteConsumer(d,n),d.subscribe===!0?await qo.updateConsumerIterator(E,f,n,"start"):await qo.updateConsumerIterator(E,f,n,"stop")),c){let h=!1;for(let p=0,S=o.subscriptions.length;p<S;p++){let T=o.subscriptions[p];if(T.schema===E&&T.table===f){T.publish=d.publish,T.subscribe=d.subscribe,h=!0;break}}h||o.subscriptions.push(new Eq(E,f,d.publish,d.subscribe))}else i.push(new Eq(E,f,d.publish,d.subscribe))}c||(o=new Tae(n,i,void 0),Js.trace(`No record found for ${n}, creating a new one`));let u=Object.create({});return Object.assign(u,o),u.system_info=s,await nO.upsertNodeRecord(u),Aae({type:"nats_update"}),new sO(rO.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${gae.get(pae.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await nO.getSystemInfo())}catch(t){Js.error(t);let r=t.message?t.message:t;return new sO(rO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Oae,"updateRemoteSource")});var gq=g((FTe,Tq)=>{"use strict";var Sq=require("joi"),{string:pq}=Sq.types(),bae=P(),yae=je();Tq.exports=Nae;function Nae(e){let t=Sq.object({operation:pq.valid(bae.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:pq.required()});return yae.validateBySchema(e,t)}a(Nae,"removeRemoteSourceValidator")});var Oq=g((VTe,Aq)=>{"use strict";var Iae=gq(),yh=$(),Nh=Ve(),oO=P(),wae=fn(),Cae=z(),Rq=ut(),Dae=ee(),Ih=e_(),{NodeSubscription:Lae}=Ti(),Mae=aa(),Pae=ci(),{broadcast:Uae}=Qe(),vae=Dae.get(oO.CONFIG_PARAMS.CLUSTERING_NODENAME);Aq.exports=Bae;async function Bae(e){try{let t=Iae(e);if(t)return yh.error(`Validation error in removeRemoteSource: ${t.message}`),new Ih(Nh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,n=await wae.getNodeRecord(r);if(Cae.isEmptyOrZeroLength(n)){let i=`No record found for node '${r}'`;return yh.error(i),new Ih(Nh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}n=n[0];for(let i=0,o=n.subscriptions.length;i<o;i++){let c=n.subscriptions[i];yh.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let u=new Lae(c.schema,c.table,!1,!1);await Rq.updateConsumerIterator(c.schema,c.table,r,"stop"),await Rq.updateRemoteConsumer(u,r)}let s=new Mae(oO.SYSTEM_SCHEMA_NAME,oO.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Pae.deleteRecord(s),Uae({type:"nats_update"}),new Ih(Nh.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${vae} successfully removed node '${r}'.`)}catch(t){yh.error(t);let r=t.message?t.message:t;return new Ih(Nh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Bae,"removeRemoteSource")});var Iq=g((YTe,Nq)=>{"use strict";var wh=$(),t_=P(),bq=Ve(),aO=ee(),xae=z(),yq=e_(),Hae=fn(),Gae=Wd(),qae=Fr();Nq.exports=Fae;async function Fae(e){try{wh.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=xae.ms_to_time(t),n=new kae(aO.get(t_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),aO.get(t_.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)??aO.get(t_.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT),r,await Hae.getSystemInfo());try{let s={name:e.node_name,system_info:e.system_info},i=new Gae(t_.SYSTEM_SCHEMA_NAME,t_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[s]);await qae.update(i)}catch(s){wh.error("Get remote config encountered an error updating system info for node:",e.node_name,s)}return wh.trace("getRemoteSourceConfig response:",n),new yq(bq.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,n)}catch(t){wh.error(t);let r=t.message?t.message:t;return new yq(bq.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Fae,"getRemoteSourceConfig");function kae(e,t,r,n){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=n}a(kae,"ConfigResponseObject")});var Lq=g((WTe,Dq)=>{"use strict";var wq=ee();wq.initSync();var Cq=ut(),r_=$(),_c=P(),cO=Ve(),Vae=mq(),$ae=Oq(),Yae=Iq(),Kae=e_(),{encode:Wae,decode:Qae}=require("msgpackr"),zae=ys(),Jae=bs(),Xae=require("util"),jae=P(),{isMainThread:Zae,parentPort:ece}=require("worker_threads");Qe();var tce=Xae.promisify(zae.setSchemaDataToGlobal),uO=wq.get(_c.CONFIG_PARAMS.CLUSTERING_NODENAME);Dq.exports=rce;async function rce(){try{r_.notify("Starting reply service."),await tce();let e=await Cq.getConnection(),t=`${uO}.__request__`,r=e.subscribe(t,{queue:uO});await nce(r)}catch(e){r_.error(e)}}a(rce,"initialize");async function nce(e){for await(let t of e){let r=Qae(t.data),n;switch(r.operation){case _c.OPERATIONS_ENUM.ADD_NODE:case _c.OPERATIONS_ENUM.UPDATE_NODE:n=await Vae(r);break;case _c.OPERATIONS_ENUM.REMOVE_NODE:n=await $ae(r);break;case _c.OPERATIONS_ENUM.CLUSTER_STATUS:n=await Yae(r);break;case _c.OPERATIONS_ENUM.DESCRIBE_ALL:n=await sce();break;default:let s=`node '${uO}' reply service received unrecognized request operation`;r_.error(s),n=new Kae(cO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,s)}r_.trace(n),t.respond(Wae(n))}}a(nce,"handleRequest");async function sce(){try{return{status:cO.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await Jae.describeAll({bypass_auth:!0})}}catch(e){return r_.error(e),{status:cO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(sce,"getRemoteDescribeAll");Zae||ece.on("message",async e=>{let{type:t}=e;t===jae.ITC_EVENT_TYPES.SHUTDOWN&&Cq.closeConnection()})});var ice=Lq();(async()=>{try{await ice()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|
|
33
|
+
`))}},25).unref()}o.close?.(()=>{if(qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Pl()==0)try{nH(qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,xE),o.cantCleanupProperly||Pt.warn("Had to forcefully exit the thread",xE),process.exit(0)},5e3).unref()})}if(dH||process.env.DEV_MODE)try{require("inspector").close()}catch(i){Pt.info("Could not close debugger",i)}}}).ref();let e=[];if(iH&&!Fse)for(let t in hs){let r=hs[t];if(isNaN(t)&&Pl()==0){Lse(t)&&nH(t),e.push(new Promise((i,o)=>{r.listen({path:t},()=>{i(),Pt.info("Domain socket listening on "+t)}).on("error",o)}));continue}let n=qe.get(_t.CONFIG_PARAMS.HTTP_THREADRANGE);if(n){let i=typeof n=="string"?n.split("-"):n,o=Pl();if(o<i[0]||o>i[1])continue}let s;try{s=iH(+t,"::")}catch(i){console.error(`Unable to bind to port ${t}`,i);continue}e.push(new Promise((i,o)=>{r.listen({fd:s},()=>{i(),Pt.trace("Listening on port "+t,xE)}).on("error",o)}))}Promise.all(e).then(()=>{Ml?.postMessage({type:_t.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(fH,"startServers");iA||fH();function cA(e,t,r){let n=e?.read?e:new yse({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=hs[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=hs[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Pt.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(cA,"deliverSocket");var oH=new Map;function $se(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=oH.get(s),r){case"connection":i=cA(void 0,t),oH.set(s,i),i.write=(c,u,_)=>(Ml.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(Ml.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Ml.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a($se,"proxyRequest");function uA(e,t,r=!0){!+t&&t!==qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(qe.get(_t.CONFIG_PARAMS.HTTP_PORT),10));let n=hs[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",aH),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else hs[t]=e;e.on("unhandled",aH)}a(uA,"registerServer");function EH(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],qe.get(_t.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:qe.get(_t.CONFIG_PARAMS.HTTP_PORT),secure:qe.get(_t.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),qe.get(_t.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:qe.get(_t.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(EH,"getPorts");function lA(e,t){for(let{port:r,secure:n}of EH(t))hH(r,n,t?.isOperationsServer),typeof e=="function"?oA[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,uA(e,r,!1)),GE[r]=aA(oA,r),kse=aA(Vse,r)}a(lA,"httpServer");function hH(e,t,r){if(!Ks[e]){let n=r?"operationsApi_network":"http",s={noDelay:!0,keepAliveTimeout:qe.get(n+"_keepAliveTimeout"),headersTimeout:qe.get(n+"_headersTimeout"),requestTimeout:qe.get(n+"_timeout")},i=qe.get(n+"_mtls"),o=qe.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let u=qe.get(n+"tls");Object.assign(s,{allowHTTP1:!0,rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:cH(),maxHeaderSize:qe.get(_t.CONFIG_PARAMS.HTTP_MAXHEADERSIZE),SNICallback:_A(u)})}let c=xse();Ks[e]=(t?Cse:Ise)(s,async(u,_)=>{try{let d=performance.now(),E=new lH(u,_);r&&(E.isOperationsServer=!0);let f=await GE[e](E);if(!f){if(E._nodeResponse.statusCode)return;f=mH(E)}if(c?f.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):f.headers?.set?.("Server","HarperDB"),f.status===-1){for(let B of f.headers||[])_.setHeader(B[0],B[1]);return u.baseRequest=E,_.baseResponse=f,Ks[e].emit("unhandled",u,_)}let h=f.status||200,p=performance.now(),S=p-d,T=f.body,A;if(!f.handlesHeaders){let B=f.headers||new uH;T?T.length>=0&&(typeof T=="string"?B.set("Content-Length",Buffer.byteLength(T)):B.set("Content-Length",T.length),A=!0):(B.set("Content-Length","0"),A=!0);let U=`hdb;dur=${S.toFixed(2)}`;f.wasCacheMiss&&(U+=", miss"),Bse(B,"Server-Timing",U,!0),_.writeHead(h,B&&(B[Symbol.iterator]?Array.from(B):B)),A&&_.end(T)}let b=E.handlerPath,I=E.method;if(Ll(S,"duration",b,I,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),sH(h<400,"success",b,I),sH(1,"response_"+h,b,I),!A)if(T?.pipe){T.pipe(_),T.destroy&&_.on("close",()=>{T.destroy()});let B=0;T.on("data",U=>{B+=U.length}),T.on("end",()=>{Ll(performance.now()-p,"transfer",b,I),Ll(B,"bytes-sent",b,I)})}else T?.then?T.then(B=>{_.end(B)},l):_.end(T)}catch(d){l(d)}function l(d){let E=d.headers;_.writeHead(d.statusCode||500,E&&(E[Symbol.iterator]?Array.from(E):E)),_.end(d.toString()),d.statusCode?d.statusCode===500?Pt.warn(d):Pt.info(d):Pt.error(d)}a(l,"onError")}),i&&(Ks[e].mtlsConfig=i),t&&(Ks[e].on("secureConnection",u=>{u._parent.startTime&&Ll(performance.now()-u._parent.startTime,"tls-handshake",e),Ll(u.isSessionReused(),"tls-reused",e)}),Ks[e].isSecure=!0,s.SNICallback(null,(u,_)=>{try{Za=_,_&&Ks[e].setSecureContext(_.options)}finally{Za=null}})),uA(Ks[e],e)}return Ks[e]}a(hH,"getHTTPServer");function aA(e,t){let r=mH;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a(c=>s(c,o),"next_callback")}}return r}a(aA,"makeCallbackChain");function mH(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new uH}}a(mH,"unhandled");function Yse(e,t){lA(e,{requestOnly:!0,...t})}a(Yse,"onRequest");function Kse(e,t){let r;if(t.securePort){let n=Object.assign({},qe.get("tls"));t.mtls?.certificateAuthority&&(n.certificateAuthority=t.mtls.certificateAuthority);let s={noDelay:!0,rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,SNICallback:_A(n)};r=Use(s,e),s.SNICallback(null,(i,o)=>{try{Za=o,o&&r.setSecureContext(o.options)}finally{Za=null}}),hs[t.securePort]=r}return t.port&&(r=Nse({noDelay:!0},e),hs[t.port]=r),r}a(Kse,"onSocket");Object.defineProperty(wse.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.includes("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Wse(e,t){let r;for(let{port:n,secure:s}of EH(t)){HE[n]||(HE[n]=new Mse({server:r=hH(n,s)}),HE[n].on("connection",async(c,u)=>{try{let _=new lH(u);_.isWebSocket=!0;let l=GE[n](_),d=u.headers["sec-websocket-protocol"]||"",E=nA[n];if(d){let f;for(let h=0;h<E.length;h++){let p=E[h];p.protocol===d&&(f=!0,p.listener(c,_,l))}if(f)return}for(let f=0;f<E.length;f++){let h=E[f];h.protocol||h.listener(c,_,l)}}catch(_){Pt.warn("Error handling WebSocket connection",_)}}),HE[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=nA[n];o||(o=nA[n]=[]),o.push({listener:e,protocol:i}),GE[n]=aA(oA,n)}return r}a(Wse,"onWebSocket");function aH(e,t){t.writeHead(404),t.end(`Not found
|
|
34
|
+
`)}a(aH,"defaultNotFound");function sA(e){return e.startsWith("-----BEGIN")?e:Dse(e)}a(sA,"readPEM");function _A(e){let t=[];for(let i=0;e[i];i++)t.push(e[i]);t.length||t.push(e);let r=new Map,n,s=!1;for(let i of t){let o=sA(i.privateKey),c=sA(i.certificate),u=i.certificateAuthority&&sA(i.certificateAuthority);if(!o||!c)throw new Error("Missing private key or certificate for secure server");let _={ciphers:i.ciphers,ca:u,ticketKeys:cH()},l=Pse(_);l.options=_,_.instantiatedContext=l,l.context.setCert(c),l.context.setKey(o,void 0),_.cert=c,_.key=o,l.certStart=c.slice(0,100).toString(),n||(n=l);let d=new Hse(c),E=i.hostname??i.host??i.hostnames??i.hosts??(d.subjectAltName?d.subjectAltName.split(",").map(f=>{let h=f.indexOf(":");return f.slice(h+1)}):[d.subject.match(/CN=(.*)/)?.[1]]);Array.isArray(E)||(E=[E]);for(let f of E)f?(f[0]==="*"&&(s=!0,f=f.slice(1)),r.has(f)||r.set(f,l)):Pt.error("No hostname found for certificate at",i.certificate)}return(i,o)=>{let c=i;for(;;){let u=r.get(c);if(u)return Pt.debug("Found certificate for",i,u.certStart),o(null,u);if(s&&c){let _=c.indexOf(".",1);_<0?c="":c=c.slice(_)}else break}Pt.debug("No certificate found to match",i,"using the first certificate"),o(null,n)}}a(_A,"createSNICallback")});async function AH({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await fA.get(e,{returnNonexistent:!0});i=new mA(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await fA.get(e);o&&o.delete()}i=new kE(e,t)}return n&&(n.id=e,n.user={username:t?.username},Ul.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function EA(){return FE++,FE>65500&&(FE=1),FE}function hA(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=yi.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return rt(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var TH,Pi,gH,RH,SH,fA,Ul,FE,kE,mA,OH=Re(()=>{Ae();Zu();TH=H(Br()),Pi=H($());so();gH=H(Qe()),RH=H(pH());_r();SH=100,fA=Et({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),Ul=Et({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,gH.getWorkerIndex)()===0&&(async()=>{await RH.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of Ul.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await at.getUser(r.user.username));try{await hA(r,t,r)}catch{(0,Pi.warn)("Failed to publish will",t)}Ul.delete(e.id)}})();a(AH,"getSession");FE=1;a(EA,"getNextMessageId");kE=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),u,_;if(c>-1?(u=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let l=this.subscriptions.find(T=>T.topic===s),d;l?(d=i>0,l.end(),this.subscriptions.splice(this.subscriptions.indexOf(l),1)):d=i===2;let E={search:u,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Pi.trace)("Resuming subscription from",s,"from",o);let f=yi.getMatch(_);if(!f){let T=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}if(E.url=f.relativeURL,E.url.indexOf("+")>-1||E.url.indexOf("#")>-1){let T=E.url.slice(1);if(T.indexOf("#")>-1&&T.indexOf("#")!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(E.isCollection=!0,T.indexOf("+")===T.length-1)E.onlyChildren=!0,E.url="/"+T.slice(0,T.length-1);else{let A=T.split("/"),b;for(let U=0;U<A.length;U++)if(A[U].indexOf("+")>-1)if(A[U]==="+")b=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&b)throw new Error("Filters can not be combined");let I=!0;A[A.length-1]==="#"&&(A.length--,I=!1),b&&(n=a(U=>{let F=U.id;if(!Array.isArray(F)||I&&F.length!==A.length)return!1;for(let M=0;M<A.length;M++)if(A[M]!=="+"&&A[M]!==F[M])return!1;return!0},"filter"));let B=A.indexOf("+");E.url="/"+(B>-1?A.slice(0,B):A).concat("").join("/")}}let h=f.path,p=f.Resource,S=await rt(E,async()=>{let T=this.createContext();T.topic=s,T.retainHandling=i;let A=await p.subscribe(E,T);if(!A)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!A[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let b=(async()=>{for await(let I of A)try{let B;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,B=this.needsAcknowledge(I)):(I.acknowledge?.(),B=EA());let U=I.id;if(Array.isArray(U)&&(U=wa(U)),U==null&&(U=""),await this.listener(h+"/"+U,I.value,B,t)===!1)break;this.awaitingAcks?.size>SH?await new Promise(M=>setTimeout(M,this.awaitingAcks.size-SH)):await new Promise(setImmediate)}catch(B){(0,Pi.warn)(B)}})();return A});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=EA();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return hA(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();rt(r,async()=>{try{if(!t){let n=await Ul.get(this.sessionId);n?.doesExist()&&await hA(n,n.data,r)}}finally{await Ul.delete(this.sessionId)}}).catch(n=>{(0,Pi.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(hA,"publish");mA=class extends kE{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{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,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=EA(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Pi.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,TH.getNextMonotonicTime)()),(0,Pi.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),fA.put(this.sessionRecord)}}});var SA={};Fe(SA,{bypassAuth:()=>Qse,start:()=>zse});function Qse(){wH=!0}function zse({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new IH.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c,u=r?.mtls;return n&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){o.events.emit("connection",_),jt.debug("Received WebSocket connection for MQTT from",_._socket.remoteAddress);let{onMessage:E,onClose:f}=yH(_,h=>{_.send(h)},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",E),_.on("close",f),_.on("error",h=>{jt.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let l;if(o.events.emit("connection",_),jt.debug(`Received ${_.getCertificate?"SSL":"TCP"} connection for MQTT from ${_.remoteAddress}`),u){if(_.authorized)try{let f=u.user;if(f!==null){(f===void 0||f==="Common Name"||f==="CN")&&(f=_.getPeerCertificate().subject.CN);try{l=await e.getUser(f,null,null),(0,ec.get)(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&$E.notify({username:l?.username,status:Xt.AUTH_AUDIT_STATUS.SUCCESS,type:Xt.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})}catch(h){throw(0,ec.get)(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&$E.error({username:f,status:Xt.AUTH_AUDIT_STATUS.FAILURE,type:Xt.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:_.remoteAddress}),h}}else jt.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(f){o.events.emit("error",f,_),jt.error(f)}else if(u.required)return jt.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!l&&wH&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,NH.getSuperUser)(),jt.debug("Auto-authorizing local connection",l?.username));let{onMessage:d,onClose:E}=yH(_,f=>_.write(f),null,l,o);_.on("data",d),_.on("close",E),_.on("error",f=>{jt.info("Socket error",f)})},{port:t,securePort:s,mtls:u})),c}function yH(e,t,r,n,s){bH||(bH=!0,mu(d=>{VE>0&&d.push({metric:"mqtt-connections",connections:VE,byThread:!0})}));let i;VE++;let o,c={protocolVersion:4},u=(0,YE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){VE--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),Qr(!1,"connection","mqtt","disconnect"),jt.debug("MQTT connection was closed",e.remoteAddress))}return a(l,"onClose"),u.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;let E=d.topic,f=E?.indexOf("/",1),h=f>0?E.slice(0,f):E;Tr(d.length,"bytes-received",h,S(d),"mqtt");try{switch(o?.receivedPacket?.(),d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await at.getUser(d.username,d.password.toString(),r),(0,ec.get)(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&$E.notify({username:n?.username,status:Xt.AUTH_AUDIT_STATUS.SUCCESS,type:Xt.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(M){return(0,ec.get)(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&$E.error({username:d.username,status:Xt.AUTH_AUDIT_STATUS.FAILURE,type:Xt.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,M),Qr(!1,"connection","mqtt","connect"),p({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),Qr(!1,"connection","mqtt","connect"),p({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let M=e.deserialize||(e.deserialize=yo(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?M(d.will.payload):void 0,delete d.will.payload}o=AH({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(M){return jt.error(M),s.events.emit("auth-failed",d,e,M),Qr(!1,"connection","mqtt","connect"),p({cmd:"connack",reasonCode:M.code||5,returnCode:M.code||128})}s.events.emit("connected",o,e),Qr(!0,"connection","mqtt","connect"),p({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((M,Q,J,j)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",M);let oe=M.indexOf("/",1),ue=oe>0?M.slice(0,oe):M;p({cmd:"publish",topic:M,payload:T(Q),messageId:J||Math.floor(Math.random()*1e8),qos:j.qos},ue);let le=e._socket??e;return le.writableNeedDrain?new Promise(Be=>le.once("drain",Be)):!le.closed}catch(oe){return jt.error(oe),o?.disconnect(),s.sessions.delete(o),!1}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let A=[];for(let M of d.subscriptions){let Q;try{Q=(await o.addSubscription(M,M.qos>=1)).qos||0}catch(J){s.events.emit("error",J,e,M,o),jt.error(J),Q=c.protocolVersion<5?128:J.statusCode===403?135:J.statusCode===404?143:128}A.push(Q)}await o.committed,p({cmd:"suback",granted:A,messageId:d.messageId});break;case"unsubscribe":{let M=[];for(let Q of d.unsubscriptions)M.push(o.removeSubscription(Q)?0:17);p({cmd:"unsuback",granted:M,messageId:d.messageId});break}case"pubrel":p({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let b=d.qos===2?"pubrec":"puback",I=e.deserialize||(e.deserialize=yo(r?.headers.get?.("content-type"))),U=(d.payload?.length||0)>0?I(d.payload):void 0,F;try{F=await o.publish(d,U)}catch(M){s.events.emit("error",M,e,d,o),jt.warn(M),d.qos>0&&p({cmd:b,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&p({cmd:b,messageId:d.messageId,reasonCode:F===!1?144:0},d.topic);break;case"pubrec":p({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":p({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),Qr(!0,"connection","mqtt","disconnect"),jt.debug("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(A){s.events.emit("error",A,e,d,o),jt.error(A),p({cmd:"disconnect"})}function p(A,b){let I=(0,YE.generate)(A,c);t(I),Tr(I.length,"bytes-sent",b,S(A),"mqtt")}a(p,"sendPacket");function S(A){return A.qos>0?A.cmd+",qos="+A.qos:A.cmd}a(S,"packetMethodName");function T(A){return Ro(A,r)}a(T,"serialize")}),u.on("error",d=>{jt.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:_,onClose:l}}var YE,NH,ec,Xt,pA,IH,$E,jt,wH,bH,VE,CH=Re(()=>{YE=require("mqtt-packet");OH();NH=H(_n());Da();Ds();_r();ec=H(ee()),Xt=H(P()),pA=H($()),IH=require("events"),$E=(0,pA.loggerWithTag)("auth-event"),jt=(0,pA.loggerWithTag)("mqtt"),wH=(0,ec.get)(Xt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Qse,"bypassAuth");a(zse,"start");VE=0;a(yH,"onSocket")});var Ff={};Fe(Ff,{component_errors:()=>rc,loadComponent:()=>KE,loadComponentDirectories:()=>HH,setErrorReporter:()=>Zse});function HH(e,t){t&&(gA=t),e&&(RA=e);let r=[];if((0,et.existsSync)(TA)){let s=(0,et.readdirSync)(TA,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,st.join)(TA,o);r.push(KE(c,gA,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(KE(n,gA,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{xH=!0})}function Zse(e){vl=e}async function KE(e,t,r,n,s,i){let o=(0,et.realpathSync)(e);if(!LH.has(o)){LH.set(o,!0),s&&(RA=s);try{let c;n&&(rc=new Map);let u=(0,st.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,et.existsSync)(u)?c=n?(0,BH.getConfigObj)():(0,MH.parseDocument)((0,et.readFileSync)(u,"utf8"),{simpleKeys:!0}).toJSON():c=AA;let _=(0,st.join)(e,"node_modules","harperdb");try{Mo.isMainThread&&(n||(0,et.existsSync)(_)&&(0,et.realpathSync)(sc.PACKAGE_ROOT)!==(0,et.realpathSync)(_))&&((0,et.rmSync)(_,{recursive:!0,force:!0}),(0,et.existsSync)((0,st.join)(e,"node_modules"))||(0,et.mkdirSync)((0,st.join)(e,"node_modules")),(0,et.symlinkSync)(sc.PACKAGE_ROOT,_,"dir"))}catch(E){tc.default.error("Error symlinking harperdb module",E)}let l=[],d=n;for(let E in c){let f=c[E];if(rc.set(n?E:(0,st.basename)(e),!1),!f)continue;let h,p=f.package;try{if(p){let I=e,B;for(;!(0,et.existsSync)(B=(0,st.join)(I,"node_modules",E));)if(I=(0,st.dirname)(I),I.length<(0,vH.getHdbBasePath)().length){B=null;break}if(B)h=await KE(B,t,r,!1),d=!0;else throw new Error(`Unable to find package ${E}:${p}`)}else h=Xse[E];if(!h)continue;l.push(h);let S=a(I=>(I.origin=r,Et(I)),"ensureTable"),T=f.network||(f.port||f.securePort)&&f,A=T?.securePort||T?.https&&T.port,b=!T?.https&&T?.port;if(Mo.isMainThread&&(h=await h.startOnMainThread?.({server:at,ensureTable:S,port:b,securePort:A,resources:t,...f})||h,n&&T))for(let I of[b,A])try{if(+I&&!DH.includes(I)){let B=OA.get(sc.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);B&&tc.default.warn("Session affinity is not recommended and may cause memory leaks"),(B||!ME)&&(DH.push(I),kx(I,B))}}catch(B){console.error("Error listening on socket",I,B,E)}if(t.isWorker&&(h=await h.start?.({server:at,ensureTable:S,port:b,securePort:A,resources:t,...f})||h),RA.set(h,!0),(h.handleFile||h.handleDirectory)&&f.files){if(f.files.includes(".."))throw(0,UH.handleHDBError)("Can not reference parent directories");let I=(0,st.join)(e,f.files).replace(/\\/g,"/"),B=I.indexOf("/*");if(B>-1&&f.files!==AA[E]?.files&&!(0,et.existsSync)(I.slice(0,B)))throw new Error(`The path '${I.slice(0,B)}' does not exist and cannot be used as the base of the resolved 'files' path value '${f.files}'`);let U=(0,st.basename)(e),F=f.path||"/";F=F.startsWith("/")?F:F.startsWith("./")?"/"+U+F.slice(2):F==="."?"/"+U:"/"+U+"/"+F;let M,Q,J;if(f.root){let oe=f.root;oe.startsWith("/")&&(oe=oe.slice(1)),oe.endsWith("/")&&(oe=oe.slice(0,-1)),oe+="/",Q=(0,st.join)(e,oe)}else(J=I.indexOf("/*"))>-1&&(Q=I.slice(0,J+1),M=(0,st.relative)(e,Q));let j=!1;if(Mo.isMainThread&&h.setupDirectory&&(j=await h.setupDirectory?.(F,Q,t)),t.isWorker&&h.handleDirectory&&(j=await h.handleDirectory?.(F,Q,t)),j)continue;for(let oe of await(0,PH.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:ue,dirent:le}=oe;d=!0;let Be=(0,st.relative)(e,ue).replace(/\\/g,"/");if(M)if(Be.startsWith(M))Be=Be.slice(M.length+1);else throw new Error(`The root path '${f.root}' does not reference a valid part of the file path '${Be}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ne=F+(F.endsWith("/")?"":"/")+Be;try{if(le.isFile()){let xe=await jse(ue);Mo.isMainThread&&await h.setupFile?.(xe,Ne,ue,t),t.isWorker&&await h.handleFile?.(xe,Ne,ue,t)}else Mo.isMainThread&&await h.setupDirectory?.(Ne,ue,t),t.isWorker&&await h.handleDirectory?.(Ne,ue,t)}catch(xe){xe.message=`Could not load ${le.isFile()?"file":"directory"} '${ue}'${f.module?" using '"+f.module+"'":""} for application '${e}' due to: ${xe.message}`,vl?.(xe),((0,nc.getWorkerIndex)()===0?console:tc.default).error(xe),t.set(f.path||"/",new Bl(xe)),rc.set(n?E:(0,st.basename)(e),xe.message)}}}}catch(S){S.message=`Could not load component '${E}' for application '${(0,st.basename)(e)}' due to: ${S.message}`,vl?.(S),((0,nc.getWorkerIndex)()===0?console:tc.default).error(S),t.set(f.path||"/",new Bl(S),null,!0),rc.set(n?E:(0,st.basename)(e),S.message)}}if(Mo.isMainThread&&!xH&&i&&(0,nc.watchDir)(e,async()=>HH()),c.extensionModule)return await b_((0,st.join)(e,c.extensionModule));if(!d&&t.isWorker){let E=`${e} did not load any modules, resources, or files, is this a valid component?`;vl?.(new Error(E)),((0,nc.getWorkerIndex)()===0?console:tc.default).error(E),rc.set((0,st.basename)(e),E)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,vl?.(c),t.set("",new Bl(c))}}}var et,st,Mo,MH,OA,sc,PH,nc,tc,UH,vH,Jse,BH,jse,TA,RA,xH,gA,rc,Xse,AA,DH,LH,vl,Bl,kf=Re(()=>{et=require("fs"),st=require("path"),Mo=require("worker_threads"),MH=require("yaml"),OA=H(ee()),sc=H(P());Ib();Lb();Mb();H0();Dx();Bx();PH=H(require("fast-glob")),nc=H(Qe()),tc=H($());tm();_r();UH=H(se());cn();Ae();Vx();vH=H(ee()),Jse=H(Qx());Pf();rH();CH();BH=H(hr());PE();({readFile:jse}=et.promises),TA=OA.get(sc.CONFIG_PARAMS.COMPONENTSROOT),RA=new Map,rc=new Map;a(HH,"loadComponentDirectories");Xse={REST:oE,rest:oE,graphqlSchema:em,jsResource:nm,fastifyRoutes:qR,login:im,static:FR,operationsApi:Jse,customFunctions:{},http:{},clustering:tA,authentication:tl,mqtt:SA},AA={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(AA,"static",{value:{files:"web/**"}});DH=[],LH=new Map;a(Zse,"setErrorReporter");a(KE,"loadComponent");Bl=class extends $t{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 dA=g((xSe,qH)=>{var{isMainThread:GH}=require("worker_threads"),{getTables:eie}=(Ae(),ie(ke)),{loadComponentDirectories:tie,loadComponent:rie}=(kf(),ie(Ff)),{resetResources:nie}=(Zu(),ie(WU)),sie=Ag(),iie=hr(),{dirname:oie}=require("path"),{getConnection:aie}=ut(),cie=ee(),uie=P(),bA=new Map;async function lie(e=!1){!GH&&cie.get(uie.CONFIG_PARAMS.CLUSTERING_ENABLED)&&aie();try{GH&&await sie()}catch(n){console.error(n)}let t=nie();eie(),t.isWorker=e,await rie(oie(iie.getConfigFilePath()),t,"hdb",!0,bA),await tie(bA,t);let r=[];for(let[n]of bA)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(lie,"loadRootComponents");qH.exports.loadRootComponents=lie});var Qe=g((GSe,vi)=>{"use strict";var{Worker:_ie,MessageChannel:die,parentPort:ms,isMainThread:CA,threadId:fie,workerData:Ws}=require("worker_threads"),{PACKAGE_ROOT:Eie}=P(),{join:$H,isAbsolute:hie,extname:mie}=require("path"),{server:YH}=(_r(),ie(Gi)),{watch:pie,readdir:Sie}=require("fs/promises"),{totalmem:FH}=require("os"),xl=P(),KH=ee(),Qs=$(),{randomBytes:Tie}=require("crypto"),{_assignPackageExport:gie}=require("../index"),Rie=P(),kH=1024*1024,Ui=[],Rn=[],Aie=50,DA=1e4,Oie="restart",WH="request_thread_info",QH="resource_report",zH="thread_info",JH="added-port",bie="ack",yA;gie("threads",Rn);vi.exports={startWorker:NA,restartWorkers:MA,shutdownWorkers:Cie,workers:Ui,setMonitorListener:xie,onMessageFromWorkers:Die,onMessageByType:nG,broadcast:Mie,broadcastWithAcknowledgement:Uie,setChildListenerByType:wie,getWorkerIndex:jH,getWorkerCount:XH,getTicketKeys:eG,setMainIsWorker:Nie,setTerminateTimeout:yie,restartNumber:Ws?.restartNumber||1};Rn.onMessageByType=nG;Rn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Rn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var LA;function yie(e){DA=e}a(yie,"setTerminateTimeout");function jH(){return Ws?Ws.workerIndex:LA?0:void 0}a(jH,"getWorkerIndex");function XH(){return Ws?Ws.workerCount:LA?1:void 0}a(XH,"getWorkerCount");function Nie(e){LA=e}a(Nie,"setMainIsWorker");var ZH=1,WE;function eG(){return WE||(WE=CA?Tie(48):Ws.ticketKeys,WE)}a(eG,"getTicketKeys");Object.defineProperty(YH,"workerIndex",{get(){return jH()}});Object.defineProperty(YH,"workerCount",{get(){return XH()}});var tG={[WH](e,t){vie(t)},[QH](e,t){Bie(t,e)}};function NA(e,t={}){let r=process.constrainedMemory?.()||FH();r=Math.min(r,FH(),2e4*kH);let n=KH.get(xl.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/kH/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of Rn){let _=new die;_.existingPort=u,i.push(_),o.push(_.port2)}mie(e)||(e+=".js");let c=new _ie(hie(e)?e:$H(Eie,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:ZH=t.threadCount,name:t.name,restartNumber:vi.exports.restartNumber,ticketKeys:eG()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:JH,port:u,threadId:c.threadId},[u]);return zE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>NA(e,t),c.on("error",u=>{Qs.error(`Worker index ${t.workerIndex} error:`,u)}),c.on("exit",u=>{Ui.splice(Ui.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Aie?(t.unexpectedRestarts=c.unexpectedRestarts+1,NA(e,t)):Qs.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{tG[u.type]?.(u,c)}),Ui.push(c),Gie(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(NA,"startWorker");var Iie=[xl.THREAD_TYPES.HTTP];async function MA(e=null,t=Math.max(ZH>3,1),r=!0){if(CA){if(r){let{loadRootComponents:o}=dA();await o()}vi.exports.restartNumber++,t<1&&(t=t*Ui.length);let n=[],s=[];for(let o of Ui.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Qs.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:vi.exports.restartNumber,type:xl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Iie.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),DA*2).unref();o.on("exit",()=>{clearTimeout(l),n.splice(n.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(n.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let E=a(f=>{f.type===Rie.ITC_EVENT_TYPES.CHILD_STARTED&&(Qs.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(l)),_.off("message",E))},"startListener");Qs.trace("Waiting for worker to start",_.threadId),_.on("message",E)});s.push(l),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=ju();r&&(e==="http"||!e)&&KH.get(xl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else ms.postMessage({type:Oie,workerType:e})}a(MA,"restartWorkers");function wie(e,t){tG[e]=t}a(wie,"setChildListenerByType");function Cie(e){return MA(e,1/0,!1)}a(Cie,"shutdownWorkers");var rG=[];function Die(e){rG.push(e)}a(Die,"onMessageFromWorkers");var IA=new Map;function nG(e,t){let r=IA.get(e);r||IA.set(e,r=[]),r.push(t)}a(nG,"onMessageByType");var Lie=10;async function Mie(e){let t=0;for(let r of Rn)try{r.postMessage(e),t++>Lie&&(t=0,await new Promise(setImmediate))}catch(n){Qs.error("Unable to send message to worker",n)}}a(Mie,"broadcast");var QE=new Map,Pie=1;function Uie(e){return new Promise(t=>{let r=0;for(let n of Rn)try{let s=Pie++,i=a(()=>{QE.delete(s),--r===0&&t(),n!==ms&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,QE.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of QE)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Qs.error("Unable to send message to worker",s)}r===0&&t()})}a(Uie,"broadcastWithAcknowledgement");function vie(e){e.postMessage({type:zH,workers:sG()})}a(vie,"sendThreadInfo");function sG(){let e=Date.now();return Ui.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(sG,"getChildWorkerInfo");function Bie(e,t){e.resources=t,e.resources.updated=Date.now()}a(Bie,"recordResourceReport");var wA;function xie(e){wA=e}a(xie,"setMonitorListener");var Hie=1e3,VH=!1;function Gie(){VH||(VH=!0,setInterval(()=>{for(let e of Ui){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}wA&&wA()},Hie).unref())}a(Gie,"startMonitoring");var qie=1e3;if(ms){zE(ms);for(let e=0,t=Ws.addPorts.length;e<t;e++){let r=Ws.addPorts[e];r.threadId=Ws.addThreadIds[e],zE(r)}setInterval(()=>{let e=process.memoryUsage();ms.postMessage({type:QH,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},qie).unref(),yA=a(()=>new Promise((e,t)=>{ms.on("message",r),ms.postMessage({type:WH});function r(n){n.type===zH&&(ms.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else yA=sG;vi.exports.getThreadInfo=yA;function zE(e,t){Rn.push(e),e.on("message",r=>{if(r.type===JH)r.port.threadId=r.threadId,zE(r.port);else if(r.type===bie){let n=QE.get(r.id);n&&n()}else{for(let s of rG)s(r,e);let n=IA.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Qs.error(i)}}}).on("close",()=>{Rn.splice(Rn.indexOf(e),1)}).on("exit",()=>{Rn.splice(Rn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(zE,"addPort");if(CA){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await Sie(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n($H(s,o.name));try{for await(let{filename:o}of pie(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await MA(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watch_dir");vi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else ms.on("message",async e=>{let{type:t}=e;t===xl.ITC_EVENT_TYPES.SHUTDOWN&&(vi.exports.restartNumber=e.restartNumber,ms.unref(),setTimeout(()=>{Qs.warn("Thread did not voluntarily terminate",fie),process.exit(0)},DA).unref())})});var BC={};Fe(BC,{AUDIT_STORE_OPTIONS:()=>yf,createAuditEntry:()=>C_,openAuditStore:()=>ZE,readAuditEntry:()=>vt,setAuditRetention:()=>kie,transactionKeyEncoder:()=>fG});function ZE(e){let t=e.auditStore=e.openDB(lG.AUDIT_STORE_NAME,yf);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=JE){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let o=0,c;try{for(let{key:u,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-PA})){if((_[0]&15)===BA){let l=vt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=Fie){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,PA/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,XE.getWorkerIndex)()===(0,XE.getWorkerCount)()-1&&s(JE),t}function kie(e,t=JE){PA=e,JE=t}function C_(e,t,r,n,s,i,o){let c=EG[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;n&&(n>1?ic.setFloat64(0,n):An.set(Rm),u=9),E(0),E(t),d(r),ic.setFloat64(u,e),u+=8,s?d(s):An[u++]=0,An[n?8:0]=c;let l=An.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(f){let h=u;u+=1,u=(0,oc.writeKey)(f,An,u);let p=u-h-1;p>127?p>16383?(HA.error("Key or username was too large for audit entry",f),u=h+1,An[h]=0):(An.copyWithin(h+2,h+1,u),ic.setUint16(h,p|32768),u++):An[h]=p}function E(f){f<128?An[u++]=f:f<16384?(ic.setUint16(u,f|32768),u+=2):f<1056964608?(ic.setUint32(u,f|3221225472),u+=4):(An[u]=255,ic.setUint32(u+1,f),u+=5)}}function vt(e){try{let t=e.dataView||(e.dataView=new xA(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:EG[n&7],tableId:i,get recordId(){return uG(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?uG(e,l,d):void 0},getValue(E,f,h){if(n&UA||n&vA&&!f)return E.decoder.decode(e.subarray(t.position));if(n&vA&&h)return GA(E.getEntry(this.recordId),h,E)}}}catch(t){return HA.error("Reading audit entry error",t,e),{}}}function uG(e,t,r){let n=e.subarray(t,r);return(0,oc.readKey)(n,0,r-t)}var oc,jE,lG,_G,XE,dG,HA,An,ic,fG,yf,PA,Fie,JE,UA,vA,iG,BA,oG,aG,cG,EG,xA,ni=Re(()=>{oc=require("ordered-binary"),jE=H(ee()),lG=H(ft()),_G=H(P()),XE=H(Qe()),dG=H(z());Bc();HA=H($());eh();(0,jE.initSync)();An=Buffer.alloc(1024),ic=new DataView(An.buffer,An.byteOffset,1024),fG={writeKey(e,t,r){return e===vc?(t.set(vc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,oc.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,oc.readKey)(e,t,r)}},yf={encoding:"binary",keyEncoder:fG},PA=(0,dG.convertToMS)((0,jE.get)(_G.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Fie=1e3,JE=1e4;a(ZE,"openAuditStore");a(kie,"setAuditRetention");UA=16,vA=32,iG=1,BA=2,oG=3,aG=4,cG=5,EG={put:iG|UA,[iG]:"put",delete:BA,[BA]:"delete",message:oG|UA,[oG]:"message",invalidate:aG,[aG]:"invalidate",patch:cG|vA,[cG]:"patch"};a(C_,"createAuditEntry");a(vt,"readAuditEntry");xA=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(uG,"readKeySafely")});var qA={};Fe(qA,{add:()=>th,applyReverse:()=>hG,getRecordAtTime:()=>GA,rebuildUpdateBefore:()=>rh});function th(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function rh(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,th(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function hG(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Vie[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=mG}}function GA(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=n.get(i),_=vt(u);switch(_.type){case"put":s=_.getValue(r);break;case"patch":hG(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let u in s)s[u]===mG&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=n.get(i),_=vt(u),l;switch(_.type){case"put":l=_.getValue(r);break;case"patch":l=_.getValue(r);break}for(let d in l)o[d]&&(s[d]=l[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let u in o)s[u]=null;return s}var Vie,mG,eh=Re(()=>{ni();a(th,"add");th.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};Vie={add:th};a(rh,"rebuildUpdateBefore");a(hG,"applyReverse");mG={};a(GA,"getRecordAtTime")});function en(e){return e[Nt]||(e[Nt]=Object.create(null))}function ah(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,u,_;if(o.resolve)_={get(){return o.resolve(this,this[ye])},set(l){return o.set(this,l)},configurable:!0};else{switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a string, attempt to assign ${l}`);en(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a string, attempt to assign ${l}`);en(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){let d=l?.__op__?l.value:l;if(!(typeof d=="number"||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a number, attempt to assign ${d}`);en(this)[c]=l},"set");break;case"Int":u=a(function(l){let d=l?.__op__?l.value:l;if(!(d>>0===d||l==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs((d>>0)-d)<=1)d=Math.round(d),l?.__op__?l.value=d:l=d;else throw new On.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);en(this)[c]=l},"set");break;case"Long":u=a(function(l){let d=l?.__op__?l.value:l;if(!(Math.round(d)===l&&Math.abs(d)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs(d)<=9007199254740992)d=Math.round(d),l?.__op__?l.value=d:l=d;else throw new On.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);en(this)[c]=l},"set");break;case"BigInt":u=a(function(l){let d=l?.__op__?l.value:l;if(!(typeof d=="bigint"||l==null&&o.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=BigInt(d),l?.__op__?l.value=d:l=d;else throw new On.ClientError(`${c} must be a number, attempt to assign ${l}`);en(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a boolean, attempt to assign ${l}`);en(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new On.ClientError(`${c} must be a Date, attempt to assign ${l}`);en(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);en(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){en(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be an object, attempt to assign ${l}`);en(this)[c]=l},"set")}_={get(){let l=this[Nt];if(l&&c in l){let E=l[c];if(E?.__op__){let f=this[Ee]?.[c];return E.update(f)}return E}let d=this[Ee]?.[c];if(d&&typeof d=="object"){let E=SG(d,o);if(E)return l||(l=this[Nt]=Object.create(null)),l[c]=E}return d},set:u,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let u=this[Nt];return u?.[o]!==void 0?u[o]:this[Ee]?.[o]}),i("set",function(o,c){let u=n[o];if(u)return u.set.call(this,c);if(t.sealed)throw new On.ClientError("Can not add a property to a sealed table schema");en(this)[o]=c}),i("deleteProperty",function(o){en(this)[o]=void 0}),i("toJSON",function(){let o=this[Nt],c;for(let _ in o){c||(c=Object.assign({},this[Ee]));let l=o[_];if(l?.__op__){let d=c[_];l=l.update(d)}c[_]=l}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Ee])),Object.assign(c,this)),c||this[Ee]}),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(s){if(s?.[Ee])throw new Error("Can not track an already tracked object, check for circular references");this[Ee]=s}},ah(r,t)),new r(e)):new nh(e);case Array:let n=new ih(e.length);n[Ee]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=SG(o,t?.elements)),n[s]=o}return n;default:return e}}function Rd(e){let t=e[Nt],r;for(let s in t){r||(r=Object.assign({},e[Ee]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=Rd(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Ee])),Object.assign(r,e)),r||e[Ee]}function Uo(e,t=e[Nt]){let r;if(pG.call(e,Ee)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Uo(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[Ee]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=qA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Uo(s);r[n]=s}return r?Object.freeze(r):pG.call(e,Ee)?e[Ee]:e}function sh(e){let t=e[Ee];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Po]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.[Ee]===s){if(sh(i))return!0}else return!0}}else{let r=e[Nt];if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s[Ee]===i){if(sh(s))return!0}else return!0}else return!0}}return!1}var On,Nt,nh,pG,Po,ih,oh,Ad=Re(()=>{cn();On=H(se());eh();Nt=Symbol("own-data");a(en,"getChanges");a(ah,"assignTrackedAccessors");a(SG,"trackObject");nh=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[Ee])throw new Error("Can not track an already tracked object, check for circular references");this[Ee]=t}};ah(nh,{});a(Rd,"collapseData");pG=Object.prototype.hasOwnProperty;a(Uo,"deepFreeze");a(sh,"hasChanges");Po=Symbol.for("has-array-changes"),ih=class extends Array{static{a(this,"TrackedArray")}[Po];constructor(t){super(t)}splice(...t){return this[Po]=!0,super.splice(...t)}push(...t){return this[Po]=!0,super.push(...t)}pop(){return this[Po]=!0,super.pop()}unshift(...t){return this[Po]=!0,super.unshift(...t)}shift(){return this[Po]=!0,super.shift()}};ih.prototype.constructor=Array;oh=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var $p={};Fe($p,{CONTEXT:()=>ye,ID_PROPERTY:()=>Me,IS_COLLECTION:()=>$n,MultiPartId:()=>qa,RECORD_PROPERTY:()=>Ee,Resource:()=>$t,snake_case:()=>Yie,transformForSelect:()=>uh});function Yie(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function TG(e,t){if(Hl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(Hl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new qa;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Hl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function tn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,u,_,l;if(r?(o?(l=i,o=o[ye]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(l=s,c=l[this.primaryKey]??null,o=i[ye]||i):l=i:(l=s,c=l[Me]??l[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[ye]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(u=s,s[Symbol.iterator]){c=[],_=!0;for(let f of s){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let f=c.indexOf("?");if(f>-1){let p=this.parseQuery(c.slice(f+1));u?u=Object.assign(p,u):u=p,c=c.slice(0,f)}let h=this.parsePath(c,o,u);h?.id!==void 0?(h.query&&(u?u=Object.assign(h.query,u):u=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(u?.ensureLoaded!=null||u?.async||_?(d=Object.assign({},t),u?.ensureLoaded!=null&&(d.ensureLoaded=u.ensureLoaded),u?.async&&(d.async=u.async),_&&(d.isCollection=!0)):d=t,o.transaction){let f=this.getResource(c,o,d);return f.then?f.then(E):E(f)}else return rt(o,()=>{let f=this.getResource(c,o,d);return f.then?f.then(E):E(f)},d);function E(f){if(o.authorize){o.authorize=!1;let h=t.type==="read"?f.allowRead(o.user,u,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,l,o):f.allowUpdate(o.user,l,o):t.type==="create"?f.allowCreate(o.user,l,o):f.allowDelete(o.user,u,o);if(h?.then)return h.then(p=>{if(!p)throw new ch(o.user);return typeof l?.then=="function"?l.then(S=>e(f,u,o,S)):e(f,u,o,l)});if(!h)throw new ch(o.user)}return typeof l?.then=="function"?l.then(h=>e(f,u,o,h)):e(f,u,o,l)}a(E,"authorizeActionOnResource")}}function rn(e,t){let r=new AG.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function FA(e,t,r){let n=e[Ee];if(n){let s=e[Nt];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function uh(e,t){let r=t?.propertyResolvers,n=t[ye],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):FA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(c);let _=[],l=i(FA(u,r,n));for(let d of e)_.push(l(d));return _},"transform");let o=e.forceNulls;return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(E=>E&&typeof E=="object"?c(E):E);let _={},l=i(FA(u,r,n)),d;for(let E of e){let f=l(E);f===void 0&&o&&(f=null),f?.then?(d||(d=[]),d.push(f.then(h=>_[E.name||E]=h))):_[E.name||E]=f}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let u=s[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=s[c.name]=uh(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var gG,RG,AG,ye,Me,$n,Ee,$ie,$t,ch,Hl,qa,cn=Re(()=>{gG=require("crypto");Cc();RG=require("../index"),AG=H(se());Ad();so();sE();ye=Symbol.for("context"),Me=Symbol.for("primary-key"),$n=Symbol("is-collection"),Ee=Symbol("stored-record"),$ie={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},$t=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Me]=t;let n=r?.[ye];this[ye]=n!==void 0?n:r||null}static get=tn(function(t,r,n,s){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&&!c.selectApplied){let _=uh(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=tn(function(t,r,n,s){if(Array.isArray(s)&&t[$n]){let i=[],o=n.authorize;for(let c of s){let u=t.constructor,_=u.getResource(c[u.primaryKey],n,{async:!0});_.then?i.push(_.then(l=>l.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):rn(t,"put")},{hasContent:!0,type:"update"});static patch=tn(function(t,r,n,s){return t.patch?t.patch(s,r):rn(t,"patch")},{hasContent:!0,type:"update"});static delete=tn(function(t,r,n,s){return t.delete?t.delete(r):rn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,gG.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),n||(n={}),rt(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):rn(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=tn(function(t,r,n,s){return t.invalidate?t.invalidate(r):rn(t,"delete")},{hasContent:!1,type:"update"});static post=tn(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=tn(function(t,r,n,s){return t.connect?t.connect(s,r):rn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=tn(function(t,r,n,s){return t.subscribe?t.subscribe(r):rn(t,"subscribe")},{type:"read"});static publish=tn(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.publish?t.publish(s,r):rn(t,"publish")},{hasContent:!0,type:"create"});static search=tn(function(t,r,n,s){let i=t.search?t.search(r):rn(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=uh(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=tn(function(t,r,n,s){return t.search?t.search(s,r):rn(t,"search")},{hasContent:!0,type:"read"});static copy=tn(function(t,r,n,s){return t.copy?t.copy(s,r):rn(t,"copy")},{type:"create"});static move=tn(function(t,r,n,s){return t.move?t.move(s,r):rn(t,"move")},{type:"delete"});post(t){if(this[$n])return this.constructor.create(this[Me],t,this[ye]);rn(this,"post")}static isCollection(t){return t?.[$n]}static coerceId(t){return t}static parseQuery(t){return nE(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&$ie[o];if(c)r.requestedContentType=c;else if(n)n.property=o;else return{query:{property:o},id:TG(t,this),isCollection:Hl}}let i=TG(t,this);return Hl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[ye],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(s=_?.find(l=>l.constructor===c),s)return s;_||u.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=u.find(_=>_[Me]===t&&_.constructor===c),s)return s;if(u.push(s=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Me],E=_.get(d);E?E.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[$n]=!0),s}subscribe(t){return new In}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new In}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[Me]}getContext(){return this[ye]}};$t.prototype[ye]=null;(0,RG._assignPackageExport)("Resource",$t);a(Yie,"snake_case");ch=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(TG,"pathToId");qa=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(tn,"transactional");a(rn,"missingMethod");a(FA,"selectFromObject");a(uh,"transformForSelect")});function yG(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=bG,Kie(e.primaryStore,e.auditStore)):(c=OG,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{NG(OG[i])})));let u=c[i]||(c[i]=[]);u.auditStore=e.auditStore,u.lastTxnTime==null&&(u.lastTxnTime=Date.now());let _=u[o];_||(_=u[o]=new Map,_.envs=u,_.tableId=o,_.store=e.primaryStore),t=wa(t);let l=new VA(r);l.startTime=n;let d=_.get(t);return d?d.push(l):(_.set(t,d=[l]),d.tables=_,d.key=t),l.subscriptions=d,l}function NG(e){if(!e)return;let t=e.auditStore;try{t.resetReadTxn()}catch(n){throw n.message+=" in "+path,n}let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=vt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,u,_=wa(i.recordId),l=0;do{let d=o.get(_);if(d){for(let f of d)if(!(l>0&&!(f.includeDescendants&&!(f.onlyChildren&&l>1)))){if(f.startTime>=n){(0,kA.info)("omitting",c,f.startTime,n);continue}try{let h;f.supportsTransactions&&f.txnInProgress!==i.version&&(h=!0,f.txnInProgress||(r?r.push(f):r=[f]),f.txnInProgress=i.version),f.listener(c,i,n,h)}catch(h){console.error(h),(0,kA.info)(h)}}}if(_==null)break;let E=_.lastIndexOf?.("/",_.length-2);E>-1?_=_.slice(0,E):_=null,l++}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function Kie(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let u=bG[s];if(!u)return;let _=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),u.txnTime=r.threadLocalWrites[0]||Date.now(),NG(u),r.threadLocalWrites[0]=u.lastTxnTime,r.unlock("thread-local-writes")},"acquiredLock");r.attemptLock("thread-local-writes",_)&&_()})}}var kA,OG,bG,VA,IG=Re(()=>{kA=H($());Cc();Zu();ni();OG=Object.create(null),bG=Object.create(null);a(yG,"addSubscription");VA=class extends In{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 n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(NG,"notifyFromTransactionData");a(Kie,"listenToCommits")});var OR={};Fe(OR,{coerceType:()=>lh,makeTable:()=>fh,setServerUtilities:()=>toe,updateResource:()=>_h});function fh(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l,sealed:d}=e,{expirationMS:E,evictionMS:f,audit:h,trackDeletes:p}=e,{attributes:S}=e;S||(S=[]);let T=bm(i,n,u),A=0,b,I,B={},U=Promise.resolve(),F,M,Q;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(F=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(M=K),K.expiresAt&&(Q=K),K.isPrimaryKey&&(B=K);let J,j=[],oe=[],ue=1,le=2,Be={},Ne={},xe=864e5,n_,s_,js,lO=!1,Ch,Dh,Pq=i.getRange({start:!1,end:!1}).constructor,Uq=10,vq=6;h&&fO();class Ke extends $t{static name=s;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=F;static updatedTimeProperty=M;static propertyResolvers;static sources=[];static get expirationMS(){return E}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,R){R&&(this.sourceOptions=R,(R.expiration||R.eviction||R.scanInterval)&&this.setTTLExpiration(R)),R?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),I=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let D=a(L=>{let y=this.sources.slice(0,-1);if(y=y.filter(v=>v[L]&&(!v[L].reliesOnPrototype||v.prototype[L])),y.length>0)if(y.length===1){let v=y[0];return(q,C,G)=>{if(q?.source!==v)return v[L](C,G,q)}}else return(v,q,C)=>{let G=[];for(let x of y){if(v?.source===x)break;G.push(x[L](q,C,v))}return Promise.all(G)}},"getApplyToIntermediateSource"),O=this.sources[this.sources.length-1],N=a(L=>{if(O[L]&&(!O[L].reliesOnPrototype||O.prototype[L]))return(y,v,q)=>{if(!y?.source)return O[L](v,q,y)}},"getApplyToCanonicalSource");return Be={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish")},Ne={put:D("put"),patch:D("patch"),delete:D("delete"),publish:D("publish"),invalidate:D("invalidate")},(async()=>{let L=!1,y=a(async(v,q)=>{let C=v.value,G=v.table?ct[c][v.table]:Ke;if(c===Kn.SYSTEM_SCHEMA_NAME&&(v.table===Kn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||v.table===Kn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),v.id===void 0&&(v.id=C[G.primaryKey],v.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(v));v.source=m;let x=await G.getResource(v.id,q,ac);switch(v.type){case"put":return x._writeUpdate(C,!0,ac);case"patch":return x._writeUpdate(C,!1,ac);case"delete":return x._writeDelete(ac);case"publish":return x._writePublish(C,ac);case"invalidate":return x.invalidate(ac);default:it.error("Unknown operation",v.type,v.id)}},"writeUpdate");try{let v=m.subscribe;v&&p==null&&(p=!0);let q=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Bo.getWorkerIndex)()):(0,Bo.getWorkerIndex)()===0,C=v&&q&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let G;for await(let x of C)try{if(!(x.type==="transaction"?x.writes[0]:x)){it.error("Bad subscription event",x);continue}if(x.source=m,G)if(x.beginTxn)G.resolve();else{y(x,G);continue}if(x.type==="end_txn")continue;let _e=rt(x,()=>{if(x.type==="transaction"){let ne=[];for(let Ue of x.writes)try{ne.push(y(Ue,x))}catch(ce){throw ce.message+=" writing "+JSON.stringify(Ue)+" of event "+JSON.stringify(x),ce}return Promise.all(ne)}else if(x.type==="define_schema"){let ne=this.attributes.slice(0),Ue;for(let ce of x.attributes)ne.find(De=>De.name===ce.name)||(ne.push(ce),Ue=!0);Ue&&(Et({table:s,database:c,attributes:ne,origin:"cluster"}),Yl.signalSchemaChange(new Kl.SchemaEventMsg(process.pid,Kn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return x.beginTxn?(G=x,y(x,x),new Promise(ne=>{G.resolve=ne})):y(x,x)});L&&(await _e,Yl.signalUserChange(new Kl.UserEventMsg(process.pid))),x.onCommit&&(_e?.then?_e.then(x.onCommit):x.onCommit())}catch(Z){it.error("error in subscription handler",Z)}}}catch(v){it.error(v)}})(),this}static get isCaching(){return I}static getResource(m,R,D){let O=super.getResource(m,R,D);if(m!=null){dc(m);try{if(O.hasOwnProperty(Ee))return O;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let N=!D?.async||i.cache?.get(m),L=yn(R),y=L.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Lh(m,R,{transaction:y},N,v=>{if(v?_h(O,v):O[Ee]=null,R.onlyIfCached&&R.noCacheStore){if(!O.doesExist())throw new Mr.ServerError("Entry is not cached",504)}else if(D?.ensureLoaded){let q=Mh(m,v,R,O);if(q)return L?.disregardReadTxn(),O[$A]=!0,KA(q,C=>(_h(O,C),O))}return O})}catch(N){throw N.message.includes("Unable to serialize object")&&(N.message+=": "+JSON.stringify(m)),N}}return O}ensureLoaded(){let m=Mh(this[Me],this[Lr],this[ye]);if(m)return this[$A]=!0,KA(m,R=>{this[Lr]=R,this[Ee]=R.value,this[Vl]=R.version})}static setTTLExpiration(m){if(typeof m=="number")E=m*1e3,f||(f=0);else if(m&&typeof m=="object")E=m.expiration*1e3,f=(m.eviction||0)*1e3,xe=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(E<0)throw new Error("Expiration can not be negative");xe=xe||(E+f)/4,a_()}static enableAuditing(m=!0){h=m,m&&fO(),Ke.audit=m}static coerceId(m){return m===""?null:lh(m,B)}static async dropTable(){if(delete ct[c][s],c===o){for(let m of S)l.remove(Ke.tableName+"/"+m.name),r[m.name]?.drop();l.remove(Ke.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Yl.signalSchemaChange(new Kl.SchemaEventMsg(process.pid,Kn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[$n])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let R=Ke.getRecordCount();return{recordCount:R.recordCount,estimatedRecordRange:R.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[ye]?.returnNonexistent)return this}allowRead(m,R){let D=o_(m);if(D?.read){if(D.isSuperUser)return!0;let O=D.attribute_permissions,N=R?.select;if(O?.length>0||lO&&N){if(R||(R={}),N){let L=O?.length>0&&YA(O,"read");R.select=N.map(y=>{let v=y.name||y;if(!L||L[v]){let q=js[v]?.definition?.tableClass;if(q){if(y.name||(y={name:y}),!q.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else R.select=O.filter(L=>L.read&&!js[L.attribute_name]).map(L=>L.attribute_name);return R}else return!0}}allowUpdate(m,R){let D=o_(m);if(D?.update){let O=D.attribute_permissions;if(O?.length>0){let N=YA(O,"update");for(let L in R)if(!N[L])return!1;for(let L of O){let y=L.attribute_name;!L.update&&!(y in R)&&(R[y]=this.getProperty(y))}}return!0}}allowCreate(m,R){if(this[$n]){let D=o_(m);if(D?.insert){let O=D.attribute_permissions;if(O?.length>0){let N=YA(O,"insert");for(let L in R)if(!N[L])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return o_(m)?.delete}update(m,R){if(!yn(this[ye]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let O;return typeof m=="object"&&m&&(R?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[Ee]={},this[Nt]=m):(O=this[Nt],O&&(m=Object.assign(O,m)),this[Nt]=O=m)),this._writeUpdate(this[Nt],R),this}addTo(m,R){if(typeof R=="number"||typeof R=="bigint")this[Gl]===CG?this.set(m,(+this.getProperty(m)||0)+R):(this[Gl]||this.update(),this.set(m,new oh(R)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,R){if(typeof R=="number")return this.addTo(m,-R);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this[Lr]}invalidate(m){let R=this[ye],D=this[Me];dc(D),yn(this[ye]).addWrite({key:D,store:i,invalidated:!0,entry:this[Lr],nodeName:this[ye]?.nodeName,before:Be.invalidate?.bind(this,R,D),beforeIntermediate:Ne.invalidate?.bind(this,R,D),commit:(N,L)=>{if(L?.version>N)return;let y=null;for(let v in r)y||(y={}),y[v]=this.getProperty(v);T(D,y,this[Lr],N,ql,h,this[ye],0,"invalidate")}})}static evict(m,R,D){let O=this.Source,N;if(!((I||h)&&(!R||(N=i.getEntry(m),!N||!R)||N.version!==D))){if(I){if(i.hasLock(m,N.version))return;let L;for(let y in r)L||(L={}),L[y]=R[y];if(L)return T(m,L,N,D,Fl,null,null,0,null,!0)}return i.ifVersion(m,D,()=>{i_(m,R,null)}),h?T(m,null,N,D,Fl,null,null,0,null,!0):i.remove(m,D)}}lock(){throw new Error("Not yet implemented")}static operation(m,R){return m.table||=s,m.schema||=c,xG.operation(m,R)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,R,D){let O=this[ye],N=yn(O),L=this[Me];dc(L);let y=this[Lr];this[Gl]=R?CG:Xie;let v={key:L,store:i,entry:y,nodeName:O?.nodeName,validate:q=>{m||(m=this[Nt]),R||m&&sh(this[Nt]===m?this:m)?O?.source||(N.checkOverloaded(),this.validate(m,!R),M&&(m[M.name]=M.type==="Date"?new Date(q):M.type==="String"?new Date(q).toISOString():q),R&&(t&&m[t]!==L&&(m[t]=L),F&&(y?.value?m[F.name]=y?.value[F.name]:m[F.name]=F.type==="Date"?new Date(q):F.type==="String"?new Date(q).toISOString():q),m=Uo(m))):N.removeWrite(v)},before:R?Be.put?()=>Be.put(O,L,m):null:Be.patch?()=>Be.patch(O,L,m):Be.put?()=>Be.put(O,L,Uo(this)):null,beforeIntermediate:R?Ne.put?()=>Ne.put(O,L,m):null:Ne.patch?()=>Ne.patch(O,L,m):Ne.put?()=>Ne.put(O,L,Uo(this)):null,commit:(q,C,G)=>{if(G){if(O&&C?.version>(O.lastModified||0)&&(O.lastModified=C.version),this[Lr]=C,C?.value?.[Ee])throw new Error("Can not assign a record to a record, check for circular references");R||(this[Ee]=C?.value??null)}this[Nt]=void 0,this[Vl]=q;let x=C?.value,Z=m;if(this[Gl]=0,C?.version>=q)if(h){let ce=C.localTime,De=C.version;for(;Z&&(ce>q||De>=q&&ce>0);){let re=u.get(ce);if(!re)break;let X=vt(re);if(De=X.version,De>q){if(X.type==="patch"){let Se=X.getValue(i);Z=rh(Z,Se)}else if(X.type==="put"||X.type==="delete")return}else if(De===q)return;ce=X.previousLocalTime}}else{if(R)return;Z=rh(Z,x)}let _e;if(R?_e=Z:(this[Ee]=x,_e=R?Z:Uo(this,Z)),this[Ee]=_e,_e?.[Ee])throw new Error("Can not assign a record to a record, check for circular references");let ne;R||(ne=m),i_(L,x,_e);let Ue=R?"put":"patch";T(L,_e,C,q,0,h,O,O.expiresAt||(E?E+Date.now():0),Ue,!1,ne),O.expiresAt&&a_()}};N.addWrite(v)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[$n]){for await(let R of this.search(m))(await Ke.getResource(R[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Ee]?this._writeDelete(m):!1}_writeDelete(m){let R=yn(this[ye]),D=this[Me];dc(D);let O=this[ye];return R.addWrite({key:D,store:i,resource:this,nodeName:O?.nodeName,before:Be.delete?.bind(this,O,D),beforeIntermediate:Ne.delete?.bind(this,O,D),commit:(N,L,y)=>{let v=L?.value;y&&(O&&L?.version>(O.lastModified||0)&&(O.lastModified=L.version),_h(this,L)),!(L?.version>N)&&(i_(this[Me],v),it.trace("Write delete entry",D,N),h||p?(T(D,null,this[Lr],N,0,h,this[ye],0,"delete"),h||a_()):i.remove(this[Me]))}}),!0}search(m){let R=this[ye],D=yn(R);if(!m)throw new Error("No query provided");let O=m.conditions;O?O.length===void 0&&(O=O[Symbol.iterator]?Array.from(O):[O]):O=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(O=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(O));let N,L={};function y(X,Se){let He;switch(Se){case"and":case void 0:if(X.length<1)throw new Error('An "and" operator requires at least one condition');He=!0;break;case"or":if(X.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Se)}let Wn=He&&{},Xs;for(let We of X){if(We.conditions){We.conditions=y(We.conditions,We.operator);continue}let kt=We[0]??We.attribute,on=kt==null?B:Fs(S,kt);if(on){if(He){let Qn=qn(kt),Vt=Wn[Qn];Vt?(Vt.push(We),Xs=!0):Wn[Qn]=[We]}(on.type||Jg[We.comparator])&&(We[1]===void 0?We.value=q(We.value,on):We[1]=q(We[1],on))}else if(kt!=null)throw(0,Mr.handleHDBError)(new Error,`${kt} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return X;if(Xs)for(let We in Wn){let kt=Wn[We],on=kt.length;if(on>1)for(let Qn=0;Qn<on;Qn++){let Vt=kt[Qn];if(Vt.comparator==="ge"||Vt.comparator==="greater_than_equal")for(let Zs=0;Zs<on;Zs++){let Fo=kt[Zs];(Fo.comparator==="le"||Fo.comparator==="less_than_equal")&&(Vt.comparator="between",Vt.value=[Vt.value,Fo.value],X.splice(X.indexOf(Fo),1))}if(Vt.comparator==="equals"||!Vt.comparator){for(let Zs=0;Zs<on;Zs++)if(Zs!==Qn){let Fo=kt[Zs];X.splice(X.indexOf(Fo),1)}break}}}return X}a(y,"prepareConditions");function v(X,Se){if(m.enforceExecutionOrder)return X;for(let He of X)He.conditions&&(He.conditions=v(He.conditions,He.operator));return X.length>1&&Se!=="or"?(0,vG.sortBy)(X,rE(Ke)):X}a(v,"orderConditions");function q(X,Se){return Array.isArray(X)?X.map(He=>lh(He,Se)):lh(X,Se)}a(q,"coerceTypedValues");let C=m.operator;(O.length>0||C)&&(O=y(O,C));let G=typeof m.sort=="object"&&m.sort,x;if(G&&C!=="or"){let X=G.attribute;if(X==null)throw new Mr.ClientError("Sort requires an attribute");if(N=O.find(Se=>qn(Se.attribute)===qn(X)),!N){let Se=Fs(S,X);if(!Se)throw(0,Mr.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not a defined attribute`,404);if(Se.indexed)N={attribute:X,comparator:"sort"},O.push(N);else if(O.length===0&&!m.allowFullScan)throw(0,Mr.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not indexed and not combined with any other conditions`,404)}N&&(N.descending=!!G.descending)}O=v(O,C),G&&(N&&O[0]===N?G.next&&(x={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(N&&O.splice(O.indexOf(N),1),x=G));let Z=m.select;if(O.length===0&&(O=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:O,operator:C,postOrdering:x,selectApplied:!!Z};let _e=D.useReadTxn(),ne=jg(O,C,Ke,_e,m,R,(X,Se)=>_O(X,Z,R,_e,Se),L),Ue=m.ensureLoaded!==!1;x||(ne=re(ne));let ce=Ke.transformEntryForSelect(Z,R,_e,L,Ue,!0),De=Ke.transformToOrderedSelect(ne,Z,x,_e,R,ce);function re(X){return m.offset||m.limit!==void 0?X.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):X}return a(re,"applyOffset"),x&&(De=re(De)),De.onDone=()=>{De.onDone=null,D.doneReadTxn()},De.selectApplied=!0,De.getColumns=()=>{if(Z){let X=[];for(let Se of Z)Se==="*"?X.push(...S.map(He=>He.name)):X.push(Se.name||Se);return X}return S.map(X=>X.name)},De}static transformToOrderedSelect(m,R,D,O,N,L){let y=new Pq;if(D){m=_O(m,R,O,N,null);let v;y.iterate=function(){let C,G=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),x,Z=D.dbOrderedAttribute,_e,ne,Ue=!0;function ce(re){let X=re.next&&ce(re.next),Se=re.descending;return(He,Wn)=>{let Xs=Ph(He,re.attribute,O),We=Ph(Wn,re.attribute,O),kt=Se?(0,xo.compareKeys)(We,Xs):(0,xo.compareKeys)(Xs,We);return kt===0?X?.(He,Wn)||0:kt}}a(ce,"createComparator");let De=ce(D);return{async next(){let re;if(C)if(re=C.next(),re.done){if(x)return y.onDone&&y.onDone(),re}else return{value:await L.call(this,re.value)};v=[],_e&&v.push(_e);do if(re=await G.next(),re.done){if(x=!0,v.length)break;return y.onDone&&y.onDone(),re}else{let X=re.value;if(X?.then&&(X=await X),Z){let Se=Ph(X,Z,O);if(Ue)Ue=!1,ne=Se;else if(Se!==ne){ne=Se,_e=X;break}}v.push(X)}while(!0);return D.isGrouped,v.sort(De),C=v[Symbol.iterator](),re=C.next(),re.done?(y.onDone&&y.onDone(),re):{value:await L.call(this,re.value)}},return(){y.onDone&&y.onDone(),G.return()},throw(){y.onDone&&y.onDone(),G.throw()}}};let q=a(C=>{if(typeof R=="object"&&Array.isArray(C.attribute))for(let G=0;G<R.length;G++){let x=R[G],Z;if(x.name===C.attribute[0]){for(Z=x.sort||(x.sort={});Z.next;)Z=Z.next;Z.attribute=C.attribute.slice(1),Z.descending=C.descending}else x===C.attribute[0]&&(R[G]=Z={name:x,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&q(C.next)},"applySortingOnSelect");q(D)}else y.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),y=y.map(L);return y}static transformEntryForSelect(m,R,D,O,N,L){if(m&&(m===t||m?.length===1&&m[0]===t)){let C=a(G=>(R?.transaction?.stale&&(R.transaction.stale=!1),G?.key??G),"transform");return m===t?C:m.asArray?G=>[C(G)]:G=>({[t]:C(G)})}let y;N&&I&&!m?.every(C=>{let G;return typeof C=="object"?G=C.name:G=C,r[G]||G===t})&&(y=!0);let v,q=a(function(C){let G;if(R?.transaction?.stale&&(R.transaction.stale=!1),C!=null){if(Ch=C,G=C.value||C.deref?.(),!G&&(C.key===void 0||C.deref)){if(C=Lh(C.key??C,R,{transaction:D,lazy:m?.length<4},this?.isSync,x=>x),C?.then)return C.then(q.bind(this));G=C?.value}if(y&&C?.metadataFlags&(ql|Fl)||C?.expiresAt&&C?.expiresAt<Date.now()){if(R.onlyIfCached&&R.noCacheStore)return{[t]:C.key,message:"This entry has expired"};let x=Mh(C.key??C,C,R);if(x?.then)return x.then(q)}}if(G==null)return L?vo.SKIP:G;if(m&&!(m[0]==="*"&&m.length===1)){let x,Z=a((ne,Ue)=>{let ce;typeof ne=="object"?ce=ne.name:ce=ne;let De=js?.[ce],re;if(De){let X=O?.[ce];if(X)if(X.hasMappings){let He=De.from?G[De.from]:qn(C.key);re=X.get(He),re||(re=[])}else re=X.fromRecord?.(G);else re=De(G,R,C);let Se=a(He=>{if(He&&typeof He=="object"){let Wn=De.definition?.tableClass||Ke;v||(v={});let Xs=v[ce]||(v[ce]=Wn.transformEntryForSelect(ce===ne?null:ne.select||(Array.isArray(ne)?ne:null),R,D,X,N));if(Array.isArray(He)){let We=[],kt=Wn.transformToOrderedSelect(He,ne.select,typeof ne.sort=="object"&&ne.sort,R,D,Xs)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),on=a(Vt=>{for(;!Vt.done;){if(Vt?.then)return Vt.then(on);We.push(Vt.value),Vt=kt.next()}Ue(We,ce)},"nextValue"),Qn=on(kt.next());Qn&&(x||(x=[]),x.push(Qn));return}else if(He=Xs.call(this,He),He?.then){x||(x=[]),x.push(He.then(We=>Ue(We,ce)));return}}Ue(He,ce)},"handleResolvedValue");re?.then?(x||(x=[]),x.push(re.then(Se))):Se(re);return}else re=G[ce],re&&typeof re=="object"&&ce!==ne&&(re=Ke.transformEntryForSelect(ne.select||ne,R,D,null)({value:re}));Ue(re,ce)},"selectAttribute"),_e;if(typeof m=="string")Z(m,ne=>{_e=ne});else if(Array.isArray(m))if(m.asArray)_e=[],m.forEach((ne,Ue)=>{ne==="*"?m[Ue]=G:Z(ne,ce=>_e[Ue]=ce)});else{_e={};let ne=m.forceNulls;for(let Ue of m)if(Ue==="*")for(let ce in G)_e[ce]=G[ce];else Z(Ue,(ce,De)=>{ce===void 0&&ne&&(ce=null),_e[De]=ce})}else throw new Mr.ClientError("Invalid select"+m);return x?Promise.all(x).then(()=>_e):_e}return G},"transform");return q}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");h||Et({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),m||(m={});let R=!m.rawEvents,D=[],O=yG(Ke,this[Me]??null,function(L,y,v,q){try{let C=y.getValue?.(i,R);if(!C&&y.type==="patch"&&R){let x=i.getEntry(L);x?.version===y.version?C=x.value:C=y.getValue?.(i,!0,v),y.type="put"}let G={id:L,timestamp:v,value:C,version:y.version,type:y.type,beginTxn:q};D?D.push(G):this.send(G)}catch(C){it.error(C)}},m.startTime||0,m),N=(async()=>{this[$n]&&(O.includeDescendants=!0,m.onlyChildren&&(O.onlyChildren=!0)),m.supportsTransactions&&(O.supportsTransactions=!0);let L=this[Me],y=m.previousCount;y>1e3&&(y=1e3);let v=m.startTime;if(this[$n]){if(v){if(y)throw new Mr.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:q,value:C}of u.getRange({start:v,exclusiveStart:!0,snapshot:!1})){let G=vt(C);if(G.tableId!==n)continue;let x=G.recordId;if(L==null||PG(L,x)){let Z=G.getValue(i,R,q);if(O.send({id:x,timestamp:q,value:Z,version:G.version,type:G.type}),O.queue?.length>LG&&await O.waitForDrain()===!1)return}O.startTime=q}}else if(y){let q=[];for(let{key:C,value:G}of u.getRange({start:"z",end:!1,reverse:!0}))try{let x=vt(G);if(x.tableId!==n)continue;let Z=x.recordId;if(L==null||PG(L,Z)){let _e=x.getValue(i,R,C);if(q.push({id:Z,timestamp:C,value:_e,version:x.version,type:x.type}),--y<=0)break}}catch(x){it.error("Error getting history entry",C,x)}for(let C=q.length;C>0;)O.send(q[--C]);q[0]&&(O.startTime=q[0].timestamp)}else if(!m.omitCurrent){for(let{key:q,value:C,version:G,localTime:x}of i.getRange({start:L??!1,end:L==null?void 0:[L,xo.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(C&&(O.send({id:q,timestamp:x,value:C,version:G,type:"put"}),O.queue?.length>LG&&await O.waitForDrain()===!1))return}}else{y&&!v&&(v=0);let q=this[Lr]?.localTime;if(q===Om&&(i.cache?.delete(L),this[Lr]=i.getEntry(L),it.trace("re-retrieved record",q,this[Lr]?.localTime),q=this[Lr]?.localTime),it.trace("Subscription from",v,"from",L,q),v<q){let C=[],G=q;do{let x=u.get(G);if(x){m.omitCurrent=!0;let Z=vt(x),_e=Z.getValue(i,R,G);R&&(Z.type="put"),C.push({id:L,value:_e,timestamp:G,...Z}),G=Z.previousLocalTime}else break;y&&y--}while(G>v&&y!==0);for(let x=C.length;x>0;)O.send(C[--x]);O.startTime=q}!m.omitCurrent&&this.doesExist()&&O.send({id:L,timestamp:q,value:this[Ee],version:this[Vl],type:"put"})}for(let q of D)O.send(q);D=null})();return m.listener&&O.on("data",m.listener),O}doesExist(){return!!(this[Ee]||this[Gl])}publish(m,R){this._writePublish(m,R)}_writePublish(m,R){let D=yn(this[ye]),O=this[Me]||null;dc(O);let N=this[ye];D.addWrite({key:O,store:i,entry:this[Lr],nodeName:N?.nodeName,validate:()=>{N?.source||(D.checkOverloaded(),this.validate(m))},before:Be.publish?.bind(this,N,O,m),beforeIntermediate:Ne.publish?.bind(this,N,O,m),commit:(L,y,v)=>{y===void 0&&p&&!h&&a_(),T(O,y?.value??null,y,y?.version||L,0,!0,N,y?.expiresAt,"message",!1,m)}})}validate(m,R){let D,O=a((N,L,y)=>{if(L.type&&N!=null)if(R&&N.__op__&&(N=N.value),L.properties){typeof N!="object"&&(D||(D=[])).push(`Value ${Yn(N)} in property ${y} must be an object${L.type?" ("+L.type+")":""}`);let v=L.properties;for(let q=0,C=v.length;q<C;q++){let G=v[q],x=O(N[G.name],G,y+"."+G.name);x&&(N[G.name]=x)}if(L.sealed&&N!=null&&typeof N=="object")for(let q in N)v.find(C=>C.name===q)||(D||(D=[])).push(`Property ${q} is not allowed within object in property ${y}`)}else switch(L.type){case"Int":(typeof N!="number"||N>>0!==N)&&(D||(D=[])).push(`Value ${Yn(N)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof N!="number"||!(Math.floor(N)===N&&Math.abs(N)<=9007199254740992))&&(D||(D=[])).push(`Value ${Yn(N)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof N!="number"&&(D||(D=[])).push(`Value ${Yn(N)} in property ${y} must be a number`);break;case"ID":typeof N=="string"||N?.length>0&&N.every?.(v=>typeof v=="string")||(D||(D=[])).push(`Value ${Yn(N)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof N!="string"&&(D||(D=[])).push(`Value ${Yn(N)} in property ${y} must be a string`);break;case"Boolean":typeof N!="boolean"&&(D||(D=[])).push(`Value ${Yn(N)} in property ${y} must be a boolean`);break;case"Date":if(!(N instanceof Date)){if(typeof N=="string"||typeof N=="number")return new Date(N);(D||(D=[])).push(`Value ${Yn(N)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof N!="bigint"){if(typeof N=="string"||typeof N=="number")return BigInt(N);(D||(D=[])).push(`Value ${Yn(N)} in property ${y} must be a bigint`)}break;case"Bytes":N instanceof Uint8Array||(D||(D=[])).push(`Value ${Yn(N)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(N)){if(L.elements)for(let v=0,q=N.length;v<q;v++){let C=N[v],G=O(C,L.elements,y+"[*]");G&&(N[v]=G)}}else(D||(D=[])).push(`Value ${Yn(N)} in property ${y} must be a Buffer or Uint8Array`);break}L.nullable===!1&&N==null&&(D||(D=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let N=0,L=S.length;N<L;N++){let y=S[N];if(!y.relationship&&(!R||y.name in m)){let v=O(m[y.name],y,y.name);v&&(m[y.name]=v)}}if(d)for(let N in m)S.find(L=>L.name===N)||(D||(D=[])).push(`Property ${N} is not allowed`);if(D)throw new Mr.ClientError(D.join(". "))}getUpdatedTime(){return this[Vl]}wasLoadedFromSource(){return I?!!this[$A]:void 0}static async addAttributes(m){let R=S.slice(0);for(let D of m){if(!D.name)throw new Mr.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Mr.ClientError("Attribute names cannot include backticks or forward slashes");(0,BG.validateAttribute)(D.name),R.push(D)}return Et({table:s,database:c,schemaDefined:_,attributes:R}),Ke.indexingOperation}static async removeAttributes(m){let R=S.filter(D=>!m.includes(D.name));return Et({table:s,database:c,schemaDefined:_,attributes:R}),Ke.indexingOperation}static getRecordCount(m){let R=i.getStats().entryCount,D=1e3/2,O=performance.now(),N=Math.floor(R/2),L=m?.exactCount,y=0,v=0,q;for(let{value:C}of i.getRange({start:!0,lazy:!0}))if(C!=null&&y++,v++,!L&&v<N&&performance.now()-O>D){q=v;break}if(q){let C=y;y=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:q}))re!=null&&y++;let G=q*2,x=(y+C)/G,Z=Math.pow((y-C+1)/q/2,2)+x*(1-x)/G,_e=Math.max(Math.sqrt(Z)*R,1),ne=Math.round(x*R),Ue=Math.max(ne-1.96*_e,y+C),ce=Math.min(ne+1.96*_e,R),De=Math.pow(10,Math.round(Math.log10(_e)));return De>ne&&(De=De/10),y=Math.round(ne/De)*De,{recordCount:y,estimatedRange:[Math.round(Ue),Math.round(ce)]}}return{recordCount:y}}static updatedAttributes(){js=this.propertyResolvers={$id:(m,R,D)=>({value:D.key}),$updatedtime:(m,R,D)=>D.version,$record:(m,R,D)=>D?{value:m}:m};for(let m of this.attributes){m.resolve=null;let R=m.relationship;if(R)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),lO=!0,R.to)m.elements?.definition?(js[m.name]=m.resolve=(D,O,N)=>{let L=D[R.from?R.from:t],y=m.elements.definition.tableClass;return N?Ga({attribute:R.to,value:L},yn(O).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:R.to,value:L}],O).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,R.from&&(m.resolve.from=R.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(R.from){let D=m.definition||m.elements?.definition;D?(js[m.name]=m.resolve=(O,N,L)=>{let y=O[R.from];if(y!==void 0){if(m.elements){let v,q=y.map(C=>{let G=L?D.tableClass.primaryStore.getEntry(C,{transaction:yn(N).getReadTxn()}):D.tableClass.get(C,N);return G?.then&&(v=!0),G});return R.filterMissing?v?Promise.all(q).then(C=>C.filter(UG)):q.filter(UG):v?Promise.all(q):q}return L?D.tableClass.primaryStore.getEntry(y,{transaction:yn(N).getReadTxn()}):D.tableClass.get(y,N)}},m.set=(O,N)=>{if(Array.isArray(N)){let L=N.map(y=>y[Me]||y[D.tableClass.primaryKey]);O[R.from]=L}else{let L=N[Me]||N[D.tableClass.primaryKey];O[R.from]=L}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=R.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}ah(this,this)}static async deleteHistory(m=0){let R;for(let{key:D,value:O}of u.getRange({start:0,end:m}))await kl(),vt(O).tableId===n&&(R=u.remove(D));await R}static async*getHistory(m=0,R=1/0){for(let{key:D,value:O}of u.getRange({start:m,end:R})){await kl();let N=vt(O);N.tableId===n&&(yield{id:N.recordId,localTime:D,version:N.version,type:N.type,value:N.getValue(i,!0,D),user:N.user})}}static async getHistoryOfRecord(m){let R=[];if(m==null)throw new Error("An id is required");let D=i.getEntry(m);if(!D)return R;let O=D.localTime;if(!O)throw new Error("The entry does not have a local audit time");let N=0;do{await kl();let L=u.get(O);if(L){let y=vt(L);R.push({id:y.recordId,localTime:O,version:y.version,type:y.type,value:y.getValue(i,!0,O),user:y.user}),O=y.previousLocalTime}else break}while(N<1e3&&O);return R.reverse()}static cleanup(){J?.remove()}}Ke.updatedAttributes();let Bq=Ke.prototype;return Bq[jie]=!0,E&&Ke.setTTLExpiration(E/1e3),Q&&xq(),Ke;function i_(K,m,R){let D;for(let O in r){let N=r[O],L=N.isIndexing,y=R?.[O],v=m?.[O];if(y===v&&!L)continue;D=!0;let q=N.indexNulls,C=(0,$l.getIndexedValues)(y,q),G=(0,$l.getIndexedValues)(v,q);if(G?.length>0){let x=new Set(G);if(C=C?C.filter(Z=>{if(x.has(Z))x.delete(Z);else return!0}):[],G=Array.from(x),(G.length>0||C.length>0)&&wG){let Z=G.concat(C).map(_e=>({key:_e,value:K}));N.prefetch(Z,MG)}for(let Z=0,_e=G.length;Z<_e;Z++)N.remove(G[Z],K)}else C?.length>0&&wG&&N.prefetch(C.map(x=>({key:x,value:K})),MG);if(C)for(let x=0,Z=C.length;x<Z;x++)N.put(C[x],K)}return D}a(i_,"updateIndices");function dc(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>DG)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)return!0;break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,xo.writeKey)(K,Zie,0)>DG)throw new Error("Primary key size is too large: "+K.length);return!0}a(dc,"checkValidId");function Lh(K,m,R,D,O){let N=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),R.transaction?.isDone)return O(null,K);let L=i.getEntry(K,R);return L&&m&&(L?.version>(m.lastModified||0)&&(m.lastModified=L.version),L?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=L.localTime)),O(L,K)},"whenPrefetched");return D?N():ue>0?(ue--,N()):new Promise((L,y)=>{ue===0?(ue--,i.prefetch([K],()=>{v(),q()})):(j.push(K),oe.push(q),j.length>vq&&(ue--,v()));function v(){if(j.length>0){let C=oe;i.prefetch(j,()=>{ue===-1?v():ue++;for(let G of C)G()}),j=[],oe=[],le>2&&le--}else ue=le,le<Uq&&le++}a(v,"prefetch");function q(){try{L(N())}catch(C){y(C)}}a(q,"load")})}a(Lh,"loadLocalRecord");function o_(K){if(!K?.role)return;let m=K.role.permission;if(m.super_user)return eoe;let R=m[c],D,O=R?.tables;if(O)return O[s];if(c==="data"&&(D=m[s])&&!D.tables)return D}a(o_,"getTablePermissions");function Mh(K,m,R,D){if(I){let O;if(R.noCache?O=!0:(m?(!m.value||m.metadataFlags&(ql|Fl)||m.expiresAt&&m.expiresAt<Date.now())&&(O=!0):O=!0,Qr(!O,"cache-hit",s)),O){let N=dO(K,m,R).then(L=>(L?.value?.[Ee]&&it.error("Can not assign a record with a record property"),R&&(L?.version>(R.lastModified||0)&&(R.lastModified=L.version),R.lastRefreshed=Date.now()),L));if(R?.onlyIfCached||m?.value&&D?.allowStaleWhileRevalidate?.(m,K)){if(N.catch(L=>it.warn(L)),R?.onlyIfCached&&!D.doesExist())throw new Mr.ServerError("Entry is not cached",504);return}else return N}}else if(m?.value&&m.expiresAt&&m.expiresAt<Date.now())return Ke.evict(m.key,m.value,m.version),m.value=null,{then(O){return O(m)}}}a(Mh,"ensureLoadedFromSource");function yn(K){let m=K?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let R=m.next;if(!R)return m=m.next=new no,m.lmdbDb=i,m;m=R}while(!0)}else return new Td}a(yn,"txnForContext");function Ph(K,m,R){if(!K)return;Ch=K;let D=K.value||K.deref?.()||(Ch=i.getEntry(K.key))?.value;if(typeof m=="object"){let N=js,L=D;for(let y=0,v=m.length;y<v;y++){let q=m[y],C=N?.[q];L=C&&L?C(L,R,!0)?.value:L?.[q],N=C?.definition?.tableClass?.propertyResolvers}return L}let O=js[m];return O?O(D,R):D[m]}a(Ph,"getAttributeValue");function _O(K,m,R,D,O){let N=O?.length,L={transaction:D,lazy:N>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},y;function v(q,C){let G=q?.value;if(!G)return vo.SKIP;for(let x=0;x<N;x++)if(!y?.includes(x)&&!O[x](G,q))return vo.SKIP;return C!==void 0&&(q.key=C),q}if(a(v,"processEntry"),N>0||!K.hasEntries){let q=K.map(C=>{if(y=null,typeof C=="object"&&C?.key!==void 0)return N>0?v(C):C;if(C==null)return vo.SKIP;for(let G=0;G<N;G++){let Z=O[G].idFilter;if(Z){if(!Z(C))return vo.SKIP;y||(y=[]),y.push(G)}}return Lh(C,R,L,!1,v)});return Array.isArray(K)&&(q=q.filter(C=>C!==vo.SKIP)),q.hasEntries=!0,q}return K}a(_O,"transformToEntries");async function dO(K,m,R){let D=m?.metadataFlags,O=m?.version,N,L;if(!i.attemptLock(K,O,()=>{clearTimeout(L);let C=i.getEntry(K);!C||!C.value||C.metadataFlags&(ql|Fl)?N(dO(K,i.getEntry(K),R)):N(C)}))return new Promise(C=>{N=C,L=setTimeout(()=>{i.unlock(K,O)},Jie)});let y=m?.value,v={requestContext:R,replacingRecord:y,replacingVersion:O,noCacheStore:!1,source:null,resourceCache:R?.resourceCache},q=R?.responseHeaders;return new Promise((C,G)=>{let x;KA(rt(v,async Z=>{let _e=performance.now(),ne,Ue,ce;try{for(let Se of Ke.sources)if(Se.get&&(!Se.get.reliesOnPrototype||Se.prototype.get)&&(v.source=Se,ne=await Se.get(K,v),ne))break;ce=D&ql;let re=v.lastModified||ce&&O;Ue=ce||re>O||!y,re||(re=(0,$l.getNextMonotonicTime)());let X=performance.now()-_e;if(Tr(X,"cache-resolution",s),q&&Tg(q,"Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`,!0),Z.timestamp=re,E&&!v.expiresAt&&(v.expiresAt=Date.now()+E),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==K&&(ne[t]=K)}x=!0,C({version:re,value:ne})}catch(re){re.message+=` while resolving record ${K} for ${s}`,y&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!R?.mustRevalidate||R?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(C({version:O,value:y}),it.trace(re.message,"(returned stale record)")):G(re),v.transaction.abort();return}if(R?.noCacheStore||v.noCacheStore){v.transaction.abort();return}yn(v).addWrite({key:K,store:i,entry:m,nodeName:"source",commit:(re,X)=>{if(X?.version!==O)return;let Se=i_(K,y,ne);ne?(Ne.put?.(v,K,ne),T(K,ne,X,re,0,h&&Ue||null,v,v.expiresAt,"put",!!ce)):(Ne.delete?.(v,K),h||p?T(K,null,X,re,0,h&&Ue||null,v,0,"delete",!!ce):i.remove(K,O))}})}),()=>{i.unlock(K,O)},Z=>{i.unlock(K,O),x&&it.error("Error committing cache update",Z)})})}a(dO,"getFromSource");function a_(){if(xe!==n_&&(n_=xe,(0,Bo.getWorkerIndex)()===(0,Bo.getWorkerCount)()-1)){if(s_&&clearTimeout(s_),!xe)return;let K=new Date;K.setMonth(0),K.setDate(1),K.setHours(0),K.setMinutes(0),K.setSeconds(0);let m=Math.ceil((Date.now()-K.getTime())/xe)*xe+K.getTime(),R=a(D=>{it.trace(`Scheduled next cleanup scan at ${new Date(D)}ms`),s_=setTimeout(()=>U=U.then(async()=>{if(R(Math.max(D+xe,Date.now())),i.rootStore.status!=="open"){clearTimeout(s_);return}let O=50,N=new Array(O),L=0;it.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:v,value:q,version:C,expiresAt:G}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let x;q===null&&!h&&C+zie<Date.now()?x=i.remove(v,C):G&&G+f<Date.now()&&(x=Ke.evict(v,q,C),y++),x&&(await N[L],N[L]=x.catch(Z=>{it.error("Cleanup error",Z)}),++L>=O&&(L=0)),await kl()}it.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){it.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");R(m)}}a(a_,"scheduleCleanup");function fO(){J=u?.addDeleteRemovalCallback(n,K=>{let m=i.getEntry(K);m?.value===null&&i.remove(K,m.version)})}a(fO,"addDeleteRemoval");function xq(){(0,Bo.getWorkerIndex)()===0&&setInterval(async()=>{if(!Dh){Dh=!0;try{let K=Q.name,m=r[K];if(!m)throw new Error(`expiresAt attribute ${Q} must be indexed`);for(let R of m.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let D of m.getValues(R)){let O=i.getEntry(D);O?.value?O.value[K]<Date.now()&&Ke.evict(D,O.value,O.version):i.ifVersion(D,O?.version,()=>m.remove(R,D))}await kl()}}catch(K){it.error("Error in evicting old records",K)}finally{Dh=!1}}},Qie).unref()}a(xq,"runRecordExpirationEviction")}function YA(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function MG(){}function toe(e){xG=e}function lh(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;switch(r){case"Int":case"Long":return e==="null"?null:parseInt(e);case"Float":return e==="null"?null:parseFloat(e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":return isNaN(e)?e==="null"?null:(roe.test(e)||(e+="Z"),new Date(e)):new Date(+e);case void 0:case"Any":return(0,dh.autoCast)(e);default:return e}}function PG(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 n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function KA(e,t,r){return e?.then?e.then(t,r):t(e)}function _h(e,t){e[Lr]=t,e[Ee]=t?.value??null,e[Vl]=t?.version}function UG(e){return e!=null}function Yn(e){try{return JSON.stringify(e)}catch{return e}}var Kn,vo,$l,vG,BG,Wl,Mr,Yl,Kl,it,xo,Bo,dh,Wie,xG,Qie,zie,wG,Jie,Vl,jie,Lr,Gl,CG,Xie,$A,ac,ql,Fl,Zie,DG,LG,eoe,OTe,roe,kl,SE=Re(()=>{Kn=H(P()),vo=require("lmdb"),$l=H(Br()),vG=require("lodash"),BG=H(wc());cn();_S();Wl=H(ee());IG();Mr=H(se()),Yl=H(Ns()),Kl=H(Pn());Ae();sE();it=H($());Ad();so();xo=require("ordered-binary"),Bo=H(Qe());ni();dh=H(z());Bc();Ds();eh();el();Wie=new Uint8Array(9);Wie[8]=192;Qie=6e4,zie=864e5;Wl.initSync();wG=Wl.get(Kn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Jie=1e4,Vl=Symbol.for("version"),jie=Symbol.for("incremental-update"),Lr=Symbol("entry"),Gl=Symbol("is-saving"),CG=1,Xie=2,$A=Symbol("loaded-from-source"),ac={isNotification:!0,ensureLoaded:!1},ql=1,Fl=8,Zie=Buffer.allocUnsafeSlow(8192),DG=1978,LG=100,eoe={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},OTe=(0,dh.convertToMS)(Wl.get(Kn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(fh,"makeTable");a(YA,"attributesAsObject");a(MG,"noop");a(toe,"setServerUtilities");roe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(lh,"coerceType");a(PG,"isDescendantId");kl=a(()=>new Promise(setImmediate),"rest");a(KA,"when");a(_h,"updateResource");a(UG,"exists");a(Yn,"stringify")});var ke={};Fe(ke,{database:()=>ua,databases:()=>ct,dropDatabase:()=>mS,dropTableMeta:()=>aoe,getDatabases:()=>pr,getDefaultCompression:()=>Nf,getTables:()=>noe,onUpdatedTable:()=>rA,readMetaDb:()=>Ql,resetDatabases:()=>Ku,table:()=>Et,tables:()=>xr});function noe(){return Sh||pr(),xr||{}}function pr(){if(Sh)return ct;Sh=!0,lc=new Map;let e=(0,St.getHdbBasePath)()&&(0,ot.join)((0,St.getHdbBasePath)(),Ut.DATABASES_DIR_NAME),t=(0,St.get)(Ut.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,nn.existsSync)(e)?e:(0,ot.join)((0,St.getHdbBasePath)(),Ut.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,nn.existsSync)(e))for(let r of(0,nn.readdirSync)(e,{withFileTypes:!0})){let n=(0,ot.basename)(r.name,".mdb");r.isFile()&&(0,ot.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Ql((0,ot.join)(e,r.name),null,n)}if((0,nn.existsSync)((0,uc.getBaseSchemaPath)())){for(let r of(0,nn.readdirSync)((0,uc.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,ot.join)((0,uc.getBaseSchemaPath)(),r.name),s=(0,ot.join)((0,uc.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,nn.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,ot.extname)(i.name).toLowerCase()===".mdb"){let o=(0,ot.join)(s,i.name);Ql((0,ot.join)(n,i.name),(0,ot.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,nn.existsSync)(s))for(let o of(0,nn.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,ot.extname)(o.name).toLowerCase()===".mdb"&&Ql((0,ot.join)(s,o.name),(0,ot.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,ot.join)(c.path,(0,ot.basename)(o+".mdb"));(0,nn.existsSync)(u)&&Ql(u,o,r,null,!0)}}for(let r in ct){let n=lc.get(r);if(n){let s=ct[r];r.includes("delete")&&bn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(bn.trace(`delete table class ${i}`),delete s[i])}else if(delete ct[r],r==="data"){for(let s in xr)delete xr[s];delete xr[Th]}}return lc=null,ct}}function Ku(){Sh=!1;for(let[,e]of Bi)e.needsDeletion=!0;pr();for(let[e,t]of Bi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Bi.delete(e));return ct}function Ql(e,t,r=zA,n,s){let i=new WA.default(e,!1);try{let o=Bi.get(e);o?o.needsDeletion=!1:(o=(0,hh.open)(i),Bi.set(e,o));let c=new Ho.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Eh.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,nn.existsSync)(n)&&(i.path=n,_=(0,hh.open)(i),_.isLegacy=!0):_=ZE(o));let l=FG(r),d=l[Th],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[p,S]=f.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let T=E.get(p);T||E.set(p,T={attributes:[]}),(S==null||h.is_hash_attribute)&&(T.primary=h),S!=null&&T.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 j of p)if(j.is_hash_attribute||j.isPrimaryKey){S=j;break}if(!S){bn.warn(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(p)}`);continue}}let T=l[f],A={},b=[],I,B,U=typeof S.audit=="boolean"?S.audit:(0,St.get)(Ut.CONFIG_PARAMS.LOGGING_AUDITLOG),F=S.trackDeletes,M=S.expiration,Q=S.eviction,J=S.sealed;if(T)A=T.indices,b=T.attributes,T.schemaVersion++;else{I=S.tableId,I?I>=(u.get(cc)||0)&&u.putSync(cc,I+1):(S.tableId=I=u.get(cc),I||(I=1),u.putSync(cc,I+1),u.putSync(S.key,S));let j=new Ho.default(!S.is_hash_attribute,S.is_hash_attribute);if(j.compression=S.compression,j.compression){let oe=(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||qG;j.compression.threshold=oe}B=D_(o.openDB(S.key,j)),B.rootStore=o,B.tableId=I}for(let j of p){j.attribute=j.name;try{if(!j.is_hash_attribute&&(j.indexed||j.attribute&&!j.name)){if(!A[j.name]){let ue=new Ho.default(!j.is_hash_attribute,j.is_hash_attribute);A[j.name]=o.openDB(j.key,ue),A[j.name].indexNulls=j.indexNulls}let oe=b.find(ue=>ue.name===j.name);oe?b.splice(b.indexOf(oe),1,j):b.push(j)}}catch(oe){bn.error("Error trying to update attribute",j,b,A,oe)}}if(!T){T=kG(l,f,fh({primaryStore:B,auditStore:_,audit:U,sealed:J,expirationMS:M&&M*1e3,evictionMS:Q&&Q*1e3,trackDeletes:F,tableName:f,tableId:I,primaryKey:S.name,databasePath:s?r+"/"+f:r,databaseName:r,indices:A,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),T.schemaVersion=1;for(let j of JA)j(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function FG(e){let t=ct[e];if(t||(e==="data"?t=ct[e]=xr:e==="system"?Object.defineProperty(ct,"system",{value:t=Object.create(null),configurable:!0}):t=ct[e]=Object.create(null)),lc&&!lc.has(e)){let r=new Set;t[Th]=r,lc.set(e,r)}return t}function kG(e,t,r){return e[t]=r,r}function ua({database:e,table:t}){e||(e=zA),pr();let r=FG(e),n=(0,ot.join)((0,St.getHdbBasePath)(),Ut.DATABASES_DIR_NAME),s=(0,St.get)(Ut.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_PATH)||((0,nn.existsSync)(n)?n:(0,ot.join)((0,St.getHdbBasePath)(),Ut.LEGACY_DATABASES_DIR_NAME));let o=(0,ot.join)(n,(i?t:e)+".mdb"),c=Bi.get(o);if(!c){let u=new WA.default(o,!1);c=(0,hh.open)(u),Bi.set(o,c)}return c}async function mS(e){if(!ct[e])throw new Error("Schema does not exist");let t=ct[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Bi.delete(r.path),r.status==="open"&&(await r.close(),await zl.remove(r.path));if(r||(r=ua({database:e,table:null}),r.status==="open"&&(await r.close(),await zl.remove(r.path))),e==="data"){for(let n in xr)delete xr[n];delete xr[Th]}delete ct[e]}function Et({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:u,schemaDefined:_,origin:l}){t||(t=zA);let d=ua({database:t,table:e}),E=ct[t],f=E?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,p,S,T;_==null&&(_=!0);let A=new Ho.default(!1);for(let M of i)M.attribute&&!M.name?(M.name=M.attribute,M.indexed=!0):M.attribute=M.name,M.expiresAt&&(M.indexed=!0);let b,I;if(f){if(h=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let M=d.auditStore;M||(M=ZE(d)),p=i.find(oe=>oe.isPrimaryKey)||{},h=p.name,p.is_hash_attribute=p.isPrimaryKey=!0,p.schemaDefined=_,p.compression=Nf(),u&&(p.trackDeletes=!0),o=p.audit=typeof o=="boolean"?o:(0,St.get)(Ut.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(p.expiration=r),n&&(p.eviction=n),typeof c=="boolean"&&(p.sealed=c),l&&(p.origins?p.origins.includes(l)||p.origins.push(l):p.origins=[l]),bn.trace(`${e} table loading, opening primary store`);let Q=new Ho.default(!1,!0);Q.compression=p.compression;let J=e+"/",j=D_(d.openDB(J,Q));j.rootStore=d,T=d.dbisDb=d.openDB(Eh.INTERNAL_DBIS_NAME,A),j.tableId=T.get(cc),j.tableId||(j.tableId=1),T.putSync(cc,j.tableId+1),p.tableId=j.tableId,f=kG(E,e,fh({primaryStore:j,auditStore:M,audit:o,sealed:c,trackDeletes:u,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:j.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:T})),f.schemaVersion=1,b=!0,F(),T.put(J,p)}S=f.indices,T=T||(d.dbisDb=d.openDB(Eh.INTERNAL_DBIS_NAME,A)),f.dbisDB=T;let B=[];for(let{key:M,value:Q}of T.getRange({start:!0})){let[J,j]=M.toString().split("/");if(j===""&&(j=Q.name),j){if(J!==e)continue}else continue;let oe=i.find(le=>le.name===j),ue=!oe?.indexed&&Q.indexed&&!Q.isPrimaryKey;if((!oe||ue)&&(F(),b=!0,oe||T.remove(M),ue)){let le=f.indices[J];le&&B.push(le)}}let U=[];try{for(let M of i||[]){if(M.relationship)continue;let Q=e+"/"+(M.name||"");Object.defineProperty(M,"key",{value:Q,configurable:!0});let J=T.get(Q);if(M.isPrimaryKey){if(J=J||T.get(Q=e+"/")||{},o!==f.audit||c!==c||(+r||void 0)!==(+J.expiration||void 0)||(+n||void 0)!==(+J.eviction||void 0)){let oe=Object.assign({},J);typeof o=="boolean"&&(o&&f.enableAuditing(o),oe.audit=o),r&&(oe.expiration=+r),n&&(oe.eviction=+n),c!==void 0&&(oe.sealed=c),b=!0,F(),T.put(Q,oe)}continue}J?.attribute&&!J.name&&(J.indexed=!0);let j=!J||J.type!==M.type||J.indexed!==M.indexed||J.nullable!==M.nullable||JSON.stringify(J.attributes)!==JSON.stringify(M.attributes)||JSON.stringify(J.elements)!==JSON.stringify(M.elements);if(M.indexed){let oe=new Ho.default(!0,!1),ue=d.openDB(Q,oe);(j||J.indexingPID&&J.indexingPID!==process.pid||J.restartNumber<Jl.workerData?.restartNumber)&&(b=!0,F(),J=T.get(Q),(j||J.indexingPID&&J.indexingPID!==process.pid||J.restartNumber<Jl.workerData?.restartNumber)&&(b=!0,M.indexNulls===void 0&&(M.indexNulls=!0),f.primaryStore.getStats().entryCount>0&&(M.lastIndexedKey=J?.lastIndexedKey||!1,M.indexingPID=process.pid,ue.isIndexing=!0,Object.defineProperty(M,"dbi",{value:ue}),U.push(M))),T.put(Q,M)),J?.indexNulls&&M.indexNulls===void 0&&(M.indexNulls=!0),ue.indexNulls=M.indexNulls,S[M.name]=ue}else j&&(b=!0,F(),T.put(Q,M))}}finally{I&&I()}if(b&&(f.schemaVersion++,f.updatedAttributes()),bn.trace(`${e} table loading, running index`),U.length>0||B.length>0?f.indexingOperation=ooe(f,U,B):b&&mh.signalSchemaChange(new ph.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=l,b)for(let M of JA)M(f,l!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),bn.trace(`${e} table loaded`),f;function F(){I||d.transactionSync(()=>({then(M){I=M}}))}a(F,"startTxn")}async function ooe(e,t,r){try{let n=e.schemaVersion;await mh.signalSchemaChange(new ph.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,s=e.primaryStore.ifVersion(_,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,p=(0,HG.getIndexedValues)(l[h]);if(p)for(let S=0,T=p.length;S<T;S++)f.dbi.put(p[S],_)}}),s.then(()=>u--,E=>{u--,bn.error(E)}),Jl.workerData&&Jl.workerData.restartNumber!==GG.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=_,e.dbisDB.put(E.key,E);if(i)return}u>soe?await s:u>ioe&&await new Promise(E=>setImmediate(E))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await mh.signalSchemaChange(new ph.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){bn.error("Error in indexing",n)}}function aoe({table:e,database:t}){let r=ua({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function rA(e){JA.push(e)}function Nf(){let e=(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||qG,n={startingOffset:32};return t&&(n.dictionary=zl.readFileSync(t)),r&&(n.threshold=r),e&&n}var St,Eh,hh,ot,nn,uc,Ho,WA,Ut,zl,QA,HG,mh,ph,Jl,bn,GG,zA,Th,qG,xr,ct,cc,JA,Sh,Bi,lc,soe,ioe,Ae=Re(()=>{St=H(ee()),Eh=H(ft()),hh=require("lmdb"),ot=require("path"),nn=require("fs"),uc=H(je());SE();Ho=H(xc()),WA=H(Hc()),Ut=H(P()),zl=H(require("fs-extra")),QA=require("../index"),HG=H(Br()),mh=H(Ns()),ph=H(Pn()),Jl=require("worker_threads"),bn=H($()),GG=H(Qe());ni();Bc();zA="data",Th=Symbol("defined-tables"),qG=((0,St.get)(Ut.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,St.initSync)();xr=Object.create(null),ct=Object.create(null);(0,QA._assignPackageExport)("databases",ct);(0,QA._assignPackageExport)("tables",xr);cc=Symbol.for("next-table-id"),JA=[],Bi=new Map;a(noe,"getTables");a(pr,"getDatabases");a(Ku,"resetDatabases");a(Ql,"readMetaDb");a(FG,"ensureDB");a(kG,"setTable");a(ua,"database");a(mS,"dropDatabase");a(Et,"table");soe=1e3,ioe=10;a(ooe,"runIndexing");a(aoe,"dropTableMeta");a(rA,"onUpdatedTable");a(Nf,"getDefaultCompression")});var z=g((MTe,rq)=>{"use strict";var xi=require("path"),WG=require("fs-extra"),Pr=$(),VG=require("fs-extra"),gh=require("os"),coe=require("net"),uoe=require("recursive-iterator"),dt=P(),loe=KO(),$G=require("papaparse"),Rh=require("moment"),{inspect:_oe}=require("util"),YG=require("is-number"),LTe=require("lodash"),doe=require("minimist"),foe=require("https"),Eoe=require("http"),{hdb_errors:Ah}=se(),hoe=/^((\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)))$/,QG=require("util").promisify(setTimeout),moe=100,poe=5,Soe="",Toe=4,KG={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};rq.exports={isEmpty:sn,isEmptyOrZeroLength:ps,arrayHasEmptyValues:Aoe,arrayHasEmptyOrZeroLengthValues:Ooe,buildFolderPath:boe,isBoolean:zG,errorizeMessage:goe,stripFileExtension:Noe,autoCast:Ioe,autoCastJSON:JG,autoCastJSONDeep:XA,removeDir:woe,compareVersions:Coe,isCompatibleDataVersion:Doe,escapeRawValue:Loe,unescapeValue:Moe,stringifyProps:Poe,timeoutPromise:voe,isClusterOperation:xoe,getClusterUser:Goe,checkGlobalSchemaTable:Hoe,getHomeDir:XG,getPropsFilePath:Uoe,promisifyPapaParse:qoe,removeBOM:ZG,createEventPromise:Foe,checkProcessRunning:koe,checkSchemaTableExist:Voe,checkSchemaExists:eq,checkTableExists:tq,getStartOfTomorrowInSeconds:$oe,getLimitKey:Yoe,isObject:yoe,isNotEmptyAndHasValue:Roe,autoCasterIsNumberCheck:jG,backtickASTSchemaItems:Koe,isPortTaken:Boe,createForkArgs:Woe,autoCastBoolean:Qoe,async_set_timeout:QG,getTableHashAttribute:zoe,doesSchemaExist:Joe,doesTableExist:joe,stringifyObj:Xoe,ms_to_time:Zoe,changeExtension:eae,getEnvCliRootPath:ZA,noBootFile:tae,httpRequest:rae,transformReq:nae,convertToMS:sae,PACKAGE_ROOT:dt.PACKAGE_ROOT};function goe(e){return e instanceof Error?e:new Error(e)}a(goe,"errorizeMessage");function sn(e){return e==null}a(sn,"isEmpty");function Roe(e){return!sn(e)&&(e||e===0||e===""||zG(e))}a(Roe,"isNotEmptyAndHasValue");function ps(e){return sn(e)||e.length===0||e.size===0}a(ps,"isEmptyOrZeroLength");function Aoe(e){if(sn(e))return!0;for(let t=0;t<e.length;t++)if(sn(e[t]))return!0;return!1}a(Aoe,"arrayHasEmptyValues");function Ooe(e){if(ps(e))return!0;for(let t=0;t<e.length;t++)if(ps(e[t]))return!0;return!1}a(Ooe,"arrayHasEmptyOrZeroLengthValues");function boe(...e){try{return e.join(xi.sep)}catch{console.error(e)}}a(boe,"buildFolderPath");function zG(e){return sn(e)?!1:e===!0||e===!1}a(zG,"isBoolean");function yoe(e){return sn(e)?!1:typeof e=="object"}a(yoe,"isObject");function Noe(e){return ps(e)?Soe:e.slice(0,-Toe)}a(Noe,"stripFileExtension");function Ioe(e){return sn(e)||e===""||typeof e!="string"?e:KG[e]!==void 0?KG[e]:jG(e)===!0?Number(e):hoe.test(e)?new Date(e):e}a(Ioe,"autoCast");function JG(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(JG,"autoCastJSON");function XA(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=XA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=XA(r);n!==r&&(e[t]=n)}return e}else return JG(e)}a(XA,"autoCastJSONDeep");function jG(e){if(e.startsWith("0.")&&YG(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&YG(e))}a(jG,"autoCasterIsNumberCheck");async function woe(e){if(ps(e))throw new Error(`Directory path: ${e} does not exist`);try{await VG.emptyDir(e),await VG.remove(e)}catch(t){throw Pr.error(`Error removing files in ${e} -- ${t}`),t}}a(woe,"removeDir");function Coe(e,t){if(ps(e)){Pr.info("Invalid current version sent as parameter.");return}if(ps(t)){Pr.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(Coe,"compareVersions");function Doe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(Doe,"isCompatibleDataVersion");function Loe(e){if(sn(e))return e;let t=String(e);return t==="."?dt.UNICODE_PERIOD:t===".."?dt.UNICODE_PERIOD+dt.UNICODE_PERIOD:t.replace(dt.FORWARD_SLASH_REGEX,dt.UNICODE_FORWARD_SLASH)}a(Loe,"escapeRawValue");function Moe(e){if(sn(e))return e;let t=String(e);return t===dt.UNICODE_PERIOD?".":t===dt.UNICODE_PERIOD+dt.UNICODE_PERIOD?"..":String(e).replace(dt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Moe,"unescapeValue");function Poe(e,t){if(sn(e))return Pr.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+gh.EOL}!ps(n)&&n[0]===";"?r+=" "+n+s+gh.EOL:ps(n)||(r+=n+"="+s+gh.EOL)}catch{Pr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Poe,"stringifyProps");function XG(){let e;try{e=gh.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(XG,"getHomeDir");function Uoe(){let e=xi.join(XG(),dt.HDB_HOME_DIR_NAME,dt.BOOT_PROPS_FILE_NAME);return WG.existsSync(e)||(e=xi.join(__dirname,"../","hdb_boot_properties.file")),e}a(Uoe,"getPropsFilePath");function voe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(voe,"timeoutPromise");async function Boe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=coe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(Boe,"isPortTaken");function xoe(e){try{return dt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Pr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(xoe,"isClusterOperation");function Hoe(e,t){let r=(Ae(),ie(ke)).getDatabases();if(!r[e])return Ah.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Ah.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Hoe,"checkGlobalSchemaTable");function Goe(e,t){if(sn(t)){Pr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(sn(e)||ps(e)){Pr.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){Pr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Pr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Goe,"getClusterUser");function qoe(){$G.parsePromise=function(e,t,r){return new Promise(function(n,s){$G.parse(e,{header:!0,transformHeader:ZG,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(qoe,"promisifyPapaParse");function ZG(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(ZG,"removeBOM");function Foe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Pr.info(`Got cluster status event response: ${_oe(s)}`);try{i.cancel()}catch{Pr.error("Error trying to cancel timeout.")}n(s)})})}a(Foe,"createEventPromise");async function koe(e){let t=!0,r=0;do await QG(moe*r++),(await loe.findPs(e)).length>0&&(t=!1);while(t&&r<poe);if(t)throw new Error(`process ${e} was not started`)}a(koe,"checkProcessRunning");function Voe(e,t){let r=eq(e);if(r)return r;let n=tq(e,t);if(n)return n}a(Voe,"checkSchemaTableExist");function eq(e){let{getDatabases:t}=(Ae(),ie(ke));if(!t()[e])return Ah.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(eq,"checkSchemaExists");function tq(e,t){let{getDatabases:r}=(Ae(),ie(ke));if(!r()[e][t])return Ah.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(tq,"checkTableExists");function $oe(){let e=Rh().utc().add(1,dt.MOMENT_DAYS_TAG).startOf(dt.MOMENT_DAYS_TAG).unix(),t=Rh().utc().unix();return e-t}a($oe,"getStartOfTomorrowInSeconds");function Yoe(){return Rh().utc().format("DD-MM-YYYY")}a(Yoe,"getLimitKey");function Koe(e){try{let t=new uoe(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){Pr.error("Got an error back ticking items."),Pr.error(t)}}a(Koe,"backtickASTSchemaItems");function Woe(e){return[e]}a(Woe,"createForkArgs");function Qoe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Qoe,"autoCastBoolean");function zoe(e,t){let{getDatabases:r}=(Ae(),ie(ke)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(zoe,"getTableHashAttribute");function Joe(e){let{getDatabases:t}=(Ae(),ie(ke));return t()[e]!==void 0}a(Joe,"doesSchemaExist");function joe(e,t){let{getDatabases:r}=(Ae(),ie(ke));return r()[e]?.[t]!==void 0}a(joe,"doesTableExist");function Xoe(e){try{return JSON.stringify(e)}catch{return e}}a(Xoe,"stringifyObj");function Zoe(e){let t=Rh.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(Zoe,"ms_to_time");function eae(e,t){let r=xi.basename(e,xi.extname(e));return xi.join(xi.dirname(e),r+t)}a(eae,"changeExtension");function ZA(){if(process.env[dt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[dt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=doe(process.argv);if(e[dt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[dt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(ZA,"getEnvCliRootPath");var jA;function tae(){if(jA)return jA;let e=ZA();if(ZA()&&WG.pathExistsSync(xi.join(e,dt.HDB_CONFIG_FILE)))return jA=!0,!0}a(tae,"noBootFile");function rae(e,t){let r;return e.protocol==="http:"?r=Eoe:r=foe,new Promise((n,s)=>{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",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(rae,"httpRequest");function nae(e){if(!e.schema&&!e.database){e.schema=dt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(nae,"transformReq");function sae(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(sae,"convertToMS")});var ee=g((UTe,aq)=>{"use strict";var eO=require("fs-extra"),Go=require("path"),nq=require("os"),iae=require("properties-reader"),Xl=$(),jl=z(),de=P(),Oh=hr(),oae="Error initializing environment manager",bh="BOOT_PROPS_FILE_PATH",sq=!1,aae={[de.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},zs={};aq.exports={BOOT_PROPS_FILE_PATH:bh,getHdbBasePath:cae,setHdbBasePath:uae,get:iq,initSync:_ae,setProperty:Pe,initTestEnvironment:fae,setCloneVar:dae};function cae(){return zs[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(cae,"getHdbBasePath");function uae(e){zs[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(uae,"setHdbBasePath");function iq(e){let t=Oh.getConfigValue(e);return t===void 0?zs[e]:t}a(iq,"get");function Pe(e,t){aae[e]&&(zs[e]=t),Oh.updateConfigObject(e,t)}a(Pe,"setProperty");function lae(){let e;try{e=jl.getPropsFilePath(),eO.accessSync(e,eO.constants.F_OK|eO.constants.R_OK),sq=!0;let t=iae(e);return zs[de.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(de.HDB_SETTINGS_NAMES.INSTALL_USER),zs[de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),zs[bh]=e,!0}catch{return Xl.trace(`Environment manager found no properties file at ${e}`),!1}}a(lae,"doesPropFileExist");function _ae(e=!1){try{(sq||lae()||jl.noBootFile())&&!oq&&(Oh.initConfig(e),zs[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Oh.getConfigValue(de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Xl.error(oae),Xl.error(t),console.error(t),process.exit(1)}}a(_ae,"initSync");var oq=!1;function dae(e){oq=e}a(dae,"setCloneVar");function fae(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Go.join(__dirname,"../../","unitTests");zs[bh]=Go.join(u,"hdb_boot_properties.file"),Pe(de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Go.join(u,"settings.test")),Pe(de.HDB_SETTINGS_NAMES.INSTALL_USER,nq.userInfo()?nq.userInfo().username:void 0),Pe(de.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Pe(de.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Go.join(u,"envDir","log")),Pe(de.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Pe(de.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Pe(de.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Pe(de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Go.join(u,"envDir")),Pe(de.CONFIG_PARAMS.STORAGE_PATH,Go.join(u,"envDir")),s&&(Pe(de.CONFIG_PARAMS.HTTP_SECUREPORT,iq(de.CONFIG_PARAMS.HTTP_PORT)),Pe(de.CONFIG_PARAMS.HTTP_PORT,null)),Pe(de.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Pe(de.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Pe(de.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,jl.isEmpty(i)?!1:i),Pe(de.CONFIG_PARAMS.HTTP_CORS,jl.isEmpty(i)?!1:i),Pe(de.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Pe(de.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Go.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Pe(de.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,jl.isEmpty(c)?!1:c),o&&(Pe("CORS_ACCESSLIST",o),Pe(de.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Pe(de.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Pe(de.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Pe(de.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${bh}. Please check your boot props and settings files`;Xl.fatal(r),Xl.error(t)}}a(fae,"initTestEnvironment")});var dq=g((BTe,_q)=>{"use strict";var lq=require("joi"),{string:Zl,boolean:cq,array:Eae}=lq.types(),uq=P(),hae=Xe();_q.exports=mae;function mae(e){let t=lq.object({operation:Zl.valid(uq.OPERATIONS_ENUM.ADD_NODE,uq.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:Zl.required(),subscriptions:Eae.items({schema:Zl.required(),table:Zl.optional(),hash_attribute:Zl.optional(),subscribe:cq.required(),publish:cq.required()}).min(1).required()});return hae.validateBySchema(e,t)}a(mae,"updateRemoteSourceValidator")});var e_=g((HTe,fq)=>{"use strict";var tO=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,n=void 0){this.status=t,this.message=r,this.system_info=n}};fq.exports=tO});var pq=g((qTe,mq)=>{"use strict";var pae=dq(),Js=$(),rO=Ve(),Sae=P(),nO=fn(),qo=ut(),Eq=bu(),Tae=md(),{Node:gae,NodeSubscription:hq}=Ti(),sO=e_(),iO=z(),Rae=ee(),{cloneDeep:Aae}=require("lodash"),{broadcast:Oae}=Qe();mq.exports=bae;async function bae(e){try{let t=pae(e);if(t)return Js.error(`Validation error in updateRemoteSource: ${t.message}`),new sO(rO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:n,system_info:s}=e,i=[],o=Aae(await nO.getNodeRecord(n)),c=!iO.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&Js.trace(`Existing record found for ${n}, updating records subscriptions`);for(let _=0,l=r.length;_<l;_++){let d=r[_],E=d.schema,f=d.table;if(!iO.doesSchemaExist(E)){Js.trace(`updateRemoteSource creating schema: ${E}`);try{await Eq.createSchema({operation:"create_schema",schema:E})}catch(h){Js.error(h)}}if(f&&!iO.doesTableExist(E,f)){let h=new Tae(E,f,d.hash_attribute);d.attributes&&(h.attributes=d.attributes),Js.trace(`updateRemoteSource creating table: ${f} in schema: ${E} with attributes: ${JSON.stringify(d.attributes)}`);try{await Eq.createTable(h)}catch(p){Js.error(p)}}if(Js.trace(`Creating local stream for ${E}.${f}`),await qo.createLocalTableStream(E,f),c?(await qo.updateConsumerIterator(E,f,n,"stop"),await qo.updateRemoteConsumer(d,n),d.subscribe===!0&&await qo.updateConsumerIterator(E,f,n,"start")):(await qo.updateRemoteConsumer(d,n),d.subscribe===!0?await qo.updateConsumerIterator(E,f,n,"start"):await qo.updateConsumerIterator(E,f,n,"stop")),c){let h=!1;for(let p=0,S=o.subscriptions.length;p<S;p++){let T=o.subscriptions[p];if(T.schema===E&&T.table===f){T.publish=d.publish,T.subscribe=d.subscribe,h=!0;break}}h||o.subscriptions.push(new hq(E,f,d.publish,d.subscribe))}else i.push(new hq(E,f,d.publish,d.subscribe))}c||(o=new gae(n,i,void 0),Js.trace(`No record found for ${n}, creating a new one`));let u=Object.create({});return Object.assign(u,o),u.system_info=s,await nO.upsertNodeRecord(u),Oae({type:"nats_update"}),new sO(rO.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${Rae.get(Sae.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await nO.getSystemInfo())}catch(t){Js.error(t);let r=t.message?t.message:t;return new sO(rO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(bae,"updateRemoteSource")});var Rq=g((kTe,gq)=>{"use strict";var Tq=require("joi"),{string:Sq}=Tq.types(),yae=P(),Nae=Xe();gq.exports=Iae;function Iae(e){let t=Tq.object({operation:Sq.valid(yae.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:Sq.required()});return Nae.validateBySchema(e,t)}a(Iae,"removeRemoteSourceValidator")});var bq=g(($Te,Oq)=>{"use strict";var wae=Rq(),yh=$(),Nh=Ve(),oO=P(),Cae=fn(),Dae=z(),Aq=ut(),Lae=ee(),Ih=e_(),{NodeSubscription:Mae}=Ti(),Pae=aa(),Uae=ci(),{broadcast:vae}=Qe(),Bae=Lae.get(oO.CONFIG_PARAMS.CLUSTERING_NODENAME);Oq.exports=xae;async function xae(e){try{let t=wae(e);if(t)return yh.error(`Validation error in removeRemoteSource: ${t.message}`),new Ih(Nh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,n=await Cae.getNodeRecord(r);if(Dae.isEmptyOrZeroLength(n)){let i=`No record found for node '${r}'`;return yh.error(i),new Ih(Nh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}n=n[0];for(let i=0,o=n.subscriptions.length;i<o;i++){let c=n.subscriptions[i];yh.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let u=new Mae(c.schema,c.table,!1,!1);await Aq.updateConsumerIterator(c.schema,c.table,r,"stop"),await Aq.updateRemoteConsumer(u,r)}let s=new Pae(oO.SYSTEM_SCHEMA_NAME,oO.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Uae.deleteRecord(s),vae({type:"nats_update"}),new Ih(Nh.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${Bae} successfully removed node '${r}'.`)}catch(t){yh.error(t);let r=t.message?t.message:t;return new Ih(Nh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(xae,"removeRemoteSource")});var wq=g((KTe,Iq)=>{"use strict";var wh=$(),t_=P(),yq=Ve(),aO=ee(),Hae=z(),Nq=e_(),Gae=fn(),qae=Wd(),Fae=Fr();Iq.exports=kae;async function kae(e){try{wh.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=Hae.ms_to_time(t),n=new Vae(aO.get(t_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),aO.get(t_.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)??aO.get(t_.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT),r,await Gae.getSystemInfo());try{let s={name:e.node_name,system_info:e.system_info},i=new qae(t_.SYSTEM_SCHEMA_NAME,t_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[s]);await Fae.update(i)}catch(s){wh.error("Get remote config encountered an error updating system info for node:",e.node_name,s)}return wh.trace("getRemoteSourceConfig response:",n),new Nq(yq.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,n)}catch(t){wh.error(t);let r=t.message?t.message:t;return new Nq(yq.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(kae,"getRemoteSourceConfig");function Vae(e,t,r,n){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=n}a(Vae,"ConfigResponseObject")});var Mq=g((QTe,Lq)=>{"use strict";var Cq=ee();Cq.initSync();var Dq=ut(),r_=$(),_c=P(),cO=Ve(),$ae=pq(),Yae=bq(),Kae=wq(),Wae=e_(),{encode:Qae,decode:zae}=require("msgpackr"),Jae=ys(),jae=bs(),Xae=require("util"),Zae=P(),{isMainThread:ece,parentPort:tce}=require("worker_threads");Qe();var rce=Xae.promisify(Jae.setSchemaDataToGlobal),uO=Cq.get(_c.CONFIG_PARAMS.CLUSTERING_NODENAME);Lq.exports=nce;async function nce(){try{r_.notify("Starting reply service."),await rce();let e=await Dq.getConnection(),t=`${uO}.__request__`,r=e.subscribe(t,{queue:uO});await sce(r)}catch(e){r_.error(e)}}a(nce,"initialize");async function sce(e){for await(let t of e){let r=zae(t.data),n;switch(r.operation){case _c.OPERATIONS_ENUM.ADD_NODE:case _c.OPERATIONS_ENUM.UPDATE_NODE:n=await $ae(r);break;case _c.OPERATIONS_ENUM.REMOVE_NODE:n=await Yae(r);break;case _c.OPERATIONS_ENUM.CLUSTER_STATUS:n=await Kae(r);break;case _c.OPERATIONS_ENUM.DESCRIBE_ALL:n=await ice();break;default:let s=`node '${uO}' reply service received unrecognized request operation`;r_.error(s),n=new Wae(cO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,s)}r_.trace(n),t.respond(Qae(n))}}a(sce,"handleRequest");async function ice(){try{return{status:cO.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await jae.describeAll({bypass_auth:!0})}}catch(e){return r_.error(e),{status:cO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(ice,"getRemoteDescribeAll");ece||tce.on("message",async e=>{let{type:t}=e;t===Zae.ITC_EVENT_TYPES.SHUTDOWN&&Dq.closeConnection()})});var oce=Mq();(async()=>{try{await oce()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|