harperdb 4.7.0-beta.5 → 4.7.0-beta.6
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 +17 -17
- package/bin/lite.js +19 -19
- package/launchServiceScripts/launchNatsIngestService.js +19 -19
- package/launchServiceScripts/launchNatsReplyService.js +18 -18
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +19 -19
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/server/jobs/jobProcess.js +19 -19
- package/server/threads/threadServer.js +18 -18
- package/studio/web/assets/index-BHCj3ttK.js +479 -0
- package/studio/web/assets/{index-BODQIm2Z.css → index-BsZVQRYM.css} +1 -1
- package/studio/web/assets/{index-C5zXmwvJ.js → index-DBRBB9ES.js} +1 -1
- package/studio/web/assets/{profiler-B2XrTgsp.js → profiler-BYMsO1hL.js} +1 -1
- package/studio/web/assets/{startRecording-C9rqY6n9.js → startRecording-zNVxK0tn.js} +1 -1
- package/studio/web/index.html +2 -2
- package/utility/scripts/restartHdb.js +20 -20
- package/studio/web/assets/index-CYLGqlDa.js +0 -453
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var X6=Object.create;var Tm=Object.defineProperty;var Z6=Object.getOwnPropertyDescriptor;var e5=Object.getOwnPropertyNames;var t5=Object.getPrototypeOf,r5=Object.prototype.hasOwnProperty;var a=(e,t)=>Tm(e,"name",{value:t,configurable:!0});var ne=(e,t)=>()=>(e&&(t=e(e=0)),t);var v=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ye=(e,t)=>{for(var r in t)Tm(e,r,{get:t[r],enumerable:!0})},Wv=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of e5(t))!r5.call(e,s)&&s!==r&&Tm(e,s,{get:()=>t[s],enumerable:!(n=Z6(t,s))||n.enumerable});return e};var b=(e,t,r)=>(r=e!=null?X6(t5(e)):{},Wv(t||!e||!e.__esModule?Tm(r,"default",{value:e,enumerable:!0}):r,e)),M=e=>Wv(Tm({},"__esModule",{value:!0}),e);var Rt=v((AOe,Qv)=>{var{join:n5,dirname:zv}=require("node:path"),{existsSync:s5,readFileSync:i5}=require("node:fs");function o5(){let t=__dirname,r,n=0;for(;!s5(r=n5(t,"package.json"));)if(t===(t=zv(t))||n++>10)throw new Error("Could not find package root");return r}a(o5,"findPackageJson");var jv=o5(),a5=JSON.parse(i5(jv,"utf8")),c5=zv(jv);Qv.exports={packageJson:a5,PACKAGE_ROOT:c5}});var E_=v((wOe,Jv)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n,basename:s}=require("node:path"),{existsSync:i,statSync:o,readFileSync:c,writeFileSync:l,unlinkSync:u}=require("node:fs"),{isMainThread:d}=require("node:worker_threads"),{spawnSync:f,spawn:m}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:p}=Rt(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],E="ts-build";if(d){let S=!1,y=!1;if(y=i(n(p,E))){let N=new Set;e.sync(h.map(I=>`${I}/**/*.ts`),{cwd:p}).forEach(I=>{let $=0,ee=0;try{N.add(I),$=o(n(p,I)).mtimeMs-5e3,ee=o(n(p,E,I.replace(/.ts$/,".js"))).mtimeMs}catch{}$>ee&&(S=!0)}),e.sync(h.map(I=>`${I}/**/*.js`),{cwd:n(p,E)}).forEach(I=>{if(!N.has(I.replace(/.js$/,".ts")))try{u(n(p,E,I))}catch{}})}else S=!0;if(S){console.log("Compiling TypeScript...");let N=f("npx",["tsc"],{cwd:p});if(N.stdout?.length&&console.log(N.stdout.toString()),N.stderr?.length&&console.log(N.stderr.toString()),y){let I=n(t(),"harperdb-tsc.pid"),$=!1;if(i(I))try{process.kill(+c(I,"utf8"),0),$=!0}catch{}if(!$){console.log("Starting background TypeScript compilation...");let ee=m("npx",["tsc","--watch"],{detached:!0,cwd:p,stdio:"ignore"});ee.on("error",q=>{console.error("Error trying to compile TypeScript",q)}),ee.pid&&l(I,String(ee.pid),"utf-8"),ee.unref()}}}}let g=Jv.constructor,R=g._findPath;g._findPath=function(S,y,N){if(S.startsWith(".")&&!N&&y.length===1&&y[0].startsWith(p)&&!y[0].includes("node_modules")){let I=r(p,y[0]),$;I.startsWith(E)?$=n(p,r(E,I)):$=n(p,E,I),(S.endsWith(".js")||S.endsWith(".ts"))&&(S=S.slice(0,-3));let ee=n($,S),q=ee+".js";if(i(q))return q;if(s(ee).includes(".")&&i(ee))return ee}return R(S,y,N)}}});var W={};ye(W,{AUTH_AUDIT_STATUS:()=>ci,AUTH_AUDIT_TYPES:()=>ka,BOOT_PROPS_FILE_NAME:()=>L5,BOOT_PROP_PARAMS:()=>eU,CLUSTERING_FLAG:()=>jb,CLUSTERING_PROCESSES:()=>g5,CLUSTER_MESSAGE_TYPE_ENUM:()=>zb,CLUSTER_OPERATIONS:()=>W5,CONFIG_PARAMS:()=>F,CONFIG_PARAM_MAP:()=>tU,DATABASES_DIR_NAME:()=>Zc,DATABASES_PARAM_CONFIG:()=>J5,DEFAULT_DATABASE_NAME:()=>T5,ESCAPED_FORWARD_SLASH_REGEX:()=>O5,FORWARD_SLASH_REGEX:()=>N5,FUNC_VAL:()=>c8,GEO_CONVERSION_ENUM:()=>j5,HDB_COMPONENT_CONFIG_FILE:()=>d5,HDB_CONFIG_FILE:()=>l5,HDB_DEFAULT_CONFIG_FILE:()=>u5,HDB_FILE_PERMISSIONS:()=>M5,HDB_HOME_DIR_NAME:()=>P5,HDB_PID_FILE:()=>S5,HDB_PROCESS_SERVICES:()=>_5,HDB_PROC_NAME:()=>f5,HDB_RESTART_SCRIPT:()=>m5,HDB_ROOT_DIR_NAME:()=>Vb,HDB_SETTINGS_NAMES:()=>bm,HDB_SUPPORT_ADDRESS:()=>Zv,INFO_TABLE_HASH_ATTRIBUTE:()=>k5,INSERT_MAX_CHARACTER_SIZE:()=>B5,INSTALL_PROMPTS:()=>x5,ITC_EVENT_TYPES:()=>R_,JOB_STATUS_ENUM:()=>$5,JOB_TYPE_ENUM:()=>X5,JWT_ENUM:()=>Am,LAUNCH_SERVICE_SCRIPTS:()=>R5,LEGACY_CONFIG_PARAMS:()=>Q5,LEGACY_DATABASES_DIR_NAME:()=>S_,LICENSE_FILE_NAME:()=>G5,LICENSE_KEY_DIR_NAME:()=>Wb,LICENSE_VALUES:()=>Z5,LOG_LEVELS:()=>ym,LOG_NAMES:()=>y5,METADATA_PROPERTY:()=>r8,NODE_ERROR_CODES:()=>t8,OPERATIONS_ENUM:()=>V,PERMS_CRUD_ENUM:()=>o8,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>i8,PRE_4_0_0_VERSION:()=>l8,PROCESS_DESCRIPTORS:()=>E5,PROCESS_NAME_ENV_PROP:()=>U5,RAM_ALLOCATION_ENUM:()=>e8,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>y_,REG_KEY_FILE_NAME:()=>q5,RESTART_TIMEOUT_MS:()=>D5,ROLE_TYPES_ENUM:()=>b5,S3_BUCKET_AUTH_KEYS:()=>K5,SEARCH_NOT_FOUND_MESSAGE:()=>I5,SEARCH_WILDCARDS:()=>a8,SERVICE_ACTIONS_ENUM:()=>z5,SUPPORT_HELP_MSG:()=>A5,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>H5,SYSTEM_SCHEMA_NAME:()=>Rm,SYSTEM_TABLE_NAMES:()=>Uu,THREAD_TYPES:()=>Jb,TIME_STAMP_NAMES:()=>s8,TIME_STAMP_NAMES_ENUM:()=>n8,TRANSACTIONS_DIR_NAME:()=>v5,UNICODE_FORWARD_SLASH:()=>C5,UNICODE_PERIOD:()=>w5,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>F5,VALID_S3_FILE_TYPES:()=>V5,VALID_SQL_OPS_ENUM:()=>Y5,VALUE_SEARCH_COMPARATORS:()=>T_,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>Qb});var __,g_,l5,u5,Vb,d5,f5,m5,Xv,$b,Kb,Yb,p5,h5,E5,_5,g5,S5,T5,y5,ym,R5,b5,Zv,A5,I5,w5,N5,C5,O5,Rm,P5,Wb,L5,D5,M5,Zc,S_,v5,U5,eU,x5,B5,F5,Uu,k5,H5,q5,G5,$5,V,V5,K5,Y5,W5,z5,j5,bm,Q5,F,tU,J5,X5,zb,Z5,e8,t8,r8,jb,rU,nU,n8,s8,i8,T_,Qb,o8,a8,c8,y_,Am,R_,Jb,l8,ci,ka,H=ne(()=>{__=require("node:path"),g_=b(Rt()),l5="harperdb-config.yaml",u5="defaultConfig.yaml",Vb="hdb",d5="config.yaml",f5="harperdb.js",m5="restartHdb.js",Xv="HarperDB",$b="Custom Functions",Kb="Clustering Hub",Yb="Clustering Leaf",p5="Clustering Ingest Service",h5="Clustering Reply Service",E5={HDB:Xv,CLUSTERING_HUB:Kb,CLUSTERING_LEAF:Yb,CLUSTERING_INGEST_SERVICE:p5,CLUSTERING_REPLY_SERVICE:h5,CUSTOM_FUNCTIONS:$b,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"},_5={harperdb:Xv,"clustering hub":Kb,"clustering leaf":Yb,"custom functions":$b,custom_functions:$b,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},g5={CLUSTERING_HUB_PROC_DESCRIPTOR:Kb,CLUSTERING_LEAF_PROC_DESCRIPTOR:Yb},S5="hdb.pid",T5="data",y5={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},ym={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},R5={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,__.join)(g_.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,__.join)(g_.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,__.join)(g_.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},b5={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Zv="support@harperdb.io",A5=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${Zv}`,I5="None of the specified records were found.",w5="U+002E",N5=/\//g,C5="U+002F",O5=/U\+002F/g,Rm="system",P5=".harperdb",Wb="keys",L5="hdb_boot_properties.file",D5=6e4,M5=448,Zc="database",S_="schema",v5="transactions",U5="PROCESS_NAME",eU={SETTINGS_PATH_KEY:"settings_path"},x5={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",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",DEFAULTS_MODE:"DEFAULTS_MODE",REPLICATION_HOSTNAME:"REPLICATION_HOSTNAME",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},B5=250,F5={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Uu={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"},k5="info_id",H5={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"},q5="060493.ks",G5=".license",$5={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},V={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",DESCRIBE_METRIC:"describe_metric",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_REGISTRATION_INFO:"registration_info",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",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",CLEANUP_ORPHAN_BLOBS:"cleanup_orphan_blobs",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status",INSTALL_USAGE_LICENSE:"install_usage_license",GET_USAGE_LICENSES:"get_usage_licenses"},V5={CSV:".csv",JSON:".json"},K5={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Y5={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},W5={[V.INSERT]:V.INSERT,[V.UPDATE]:V.UPDATE,[V.UPSERT]:V.UPSERT,[V.DELETE]:V.DELETE},z5={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},j5={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},bm={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"},Q5={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"},F={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",ANALYTICS_REPLICATE:"analytics_replicate",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",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_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",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_MTLS_CERTIFICATEVERIFICATION:"http_mtls_certificateVerification",HTTP_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"http_mtls_certificateVerification_failureMode",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL:"http_mtls_certificateVerification_crl",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_TIMEOUT:"http_mtls_certificateVerification_crl_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_CACHETTL:"http_mtls_certificateVerification_crl_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_FAILUREMODE:"http_mtls_certificateVerification_crl_failureMode",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_GRACEPERIOD:"http_mtls_certificateVerification_crl_gracePeriod",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP:"http_mtls_certificateVerification_ocsp",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_TIMEOUT:"http_mtls_certificateVerification_ocsp_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_CACHETTL:"http_mtls_certificateVerification_ocsp_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_ERRORCACHETTL:"http_mtls_certificateVerification_ocsp_errorCacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_FAILUREMODE:"http_mtls_certificateVerification_ocsp_failureMode",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_REQUESTQUEUELIMIT:"http_requestQueueLimit",HTTP_HTTP2:"http_http2",LICENSE_MODE:"license_mode",LICENSE_REGION:"license_region",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",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_ROTATION_RETENTION:"logging_rotation_retention",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_NETWORK_HTTP2:"operationsApi_network_http2",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",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_MTLS_CERTIFICATEVERIFICATION:"replication_mtls_certificateVerification",REPLICATION_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"replication_mtls_certificateVerification_failureMode",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL:"replication_mtls_certificateVerification_crl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_TIMEOUT:"replication_mtls_certificateVerification_crl_timeout",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_CACHETTL:"replication_mtls_certificateVerification_crl_cacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_FAILUREMODE:"replication_mtls_certificateVerification_crl_failureMode",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_GRACEPERIOD:"replication_mtls_certificateVerification_crl_gracePeriod",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP:"replication_mtls_certificateVerification_ocsp",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_TIMEOUT:"replication_mtls_certificateVerification_ocsp_timeout",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_CACHETTL:"replication_mtls_certificateVerification_ocsp_cacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_ERRORCACHETTL:"replication_mtls_certificateVerification_ocsp_errorCacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_FAILUREMODE:"replication_mtls_certificateVerification_ocsp_failureMode",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",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_BLOBPATHS:"storage_blobPaths",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",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",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"},tU={settings_path:eU.SETTINGS_PATH_KEY,hdb_root_key:F.ROOTPATH,hdb_root:F.ROOTPATH,rootpath:F.ROOTPATH,server_port_key:F.OPERATIONSAPI_NETWORK_PORT,server_port:F.OPERATIONSAPI_NETWORK_PORT,cert_key:F.TLS_CERTIFICATE,certificate:F.TLS_CERTIFICATE,private_key_key:F.TLS_PRIVATEKEY,private_key:F.TLS_PRIVATEKEY,http_secure_enabled_key:F.OPERATIONSAPI_NETWORK_HTTPS,https_on:F.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:F.OPERATIONSAPI_NETWORK_CORS,cors_on:F.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:F.LOGGING_LEVEL,log_level:F.LOGGING_LEVEL,log_path_key:F.LOGGING_ROOT,log_path:F.LOGGING_ROOT,clustering_node_name_key:F.CLUSTERING_NODENAME,node_name:F.CLUSTERING_NODENAME,clustering_enabled_key:F.CLUSTERING_ENABLED,clustering:F.CLUSTERING_ENABLED,max_http_threads:F.THREADS_COUNT,max_hdb_processes:F.THREADS_COUNT,server_timeout_key:F.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:F.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:F.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:F.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:F.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:F.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:F.LOGGING_AUDITLOG,disable_transaction_log:F.LOGGING_AUDITLOG,operation_token_timeout_key:F.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:F.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:F.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:F.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:F.HTTP_PORT,custom_functions_port:F.HTTP_PORT,custom_functions_directory_key:F.COMPONENTSROOT,custom_functions_directory:F.COMPONENTSROOT,max_custom_function_processes:F.THREADS_COUNT,logging_console:F.LOGGING_CONSOLE,log_to_file:F.LOGGING_FILE,log_to_stdstreams:F.LOGGING_STDSTREAMS,local_studio_on:F.LOCALSTUDIO_ENABLED,clustering_port:F.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:F.CLUSTERING_USER,customfunctions_network_port:F.HTTP_PORT,customfunctions_tls_certificate:F.TLS_CERTIFICATE,customfunctions_network_cors:F.HTTP_CORS,customfunctions_network_corsaccesslist:F.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:F.HTTP_HEADERSTIMEOUT,customfunctions_network_https:F.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:F.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:F.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:F.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:F.HTTP_TIMEOUT,customfunctions_tls:F.TLS,http_threads:F.THREADS_COUNT,threads:F.THREADS_COUNT,threads_count:F.THREADS_COUNT,customfunctions_processes:F.THREADS_COUNT,customfunctions_root:F.COMPONENTSROOT,operationsapi_root:F.ROOTPATH};for(let e in F){let t=F[e];tU[t.toLowerCase()]=t}J5={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},X5={csv_file_load:"csv_file_load",csv_data_load:V.CSV_DATA_LOAD,csv_url_load:V.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"},zb={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"},Z5={VERSION_DEFAULT:"2.2.0"},e8={DEVELOPMENT:8192,DEFAULT:512},t8={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},r8=Symbol("metadata"),jb="__clustering__",rU="__createdtime__",nU="__updatedtime__",n8={CREATED_TIME:rU,UPDATED_TIME:nU},s8=[rU,nU],i8=15984864e5,T_={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Qb={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},o8={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},a8=["*","%"],c8="func_val",y_={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Am={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},R_={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",COMPONENT_STATUS_REQUEST:"component_status_request",COMPONENT_STATUS_RESPONSE:"component_status_response"},Jb={HTTP:"http"},l8="3.x.x",ci={SUCCESS:"success",FAILURE:"failure"},ka={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var el=v((NOe,oU)=>{"use strict";var sU=require("minimist");oU.exports=u8;function u8(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=iU(process.env),n=iU(sU(process.argv))):(r=process.env,n=sU(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(u8,"assignCMDENVVariables");function iU(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(iU,"objKeysToLowerCase")});var li=v(ts=>{"use strict";global.Resource=ts.Resource=void 0;global.tables=ts.tables={};global.databases=ts.databases={};global.getUser=ts.getUser=void 0;global.authenticateUser=ts.authenticateUser=void 0;global.server=ts.server={};global.contentTypes=ts.contentTypes=null;global.threads=ts.threads=[];global.logger={};global.RequestTarget=ts.RequestTarget=void 0;global.operation=ts.operation=void 0;ts._assignPackageExport=(e,t)=>{global[e]=ts[e]=t}});var Im={};ye(Im,{server:()=>Be});var aU,Be,Hr=ne(()=>{aU=b(li()),Be={};(0,aU._assignPackageExport)("server",Be)});var Wt=v((POe,lU)=>{"use strict";var d8="__dbis__",f8="__txns__",m8="__environment_name__",p8="__dbi_defintion__",h8={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"},E8=["__createdtime__","__updatedtime__"],_8="\uFFFF",cU={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},g8=Object.values(cU);lU.exports={AUDIT_STORE_NAME:f8,INTERNAL_DBIS_NAME:d8,DBI_DEFINITION_NAME:p8,SEARCH_TYPES:h8,TIMESTAMP_NAMES:E8,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:m8,TRANSACTIONS_DBI_NAMES_ENUM:cU,TRANSACTIONS_DBIS:g8,OVERFLOW_MARKER:_8}});var Jr=v((LOe,gU)=>{"use strict";var uU=(H(),M(W)),dU=Wt(),fU={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},mU=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),pU={500:mU("There was an error processing your request."),400:"Invalid request"},S8=pU[fU.INTERNAL_SERVER_ERROR],T8={OP_NOT_SUPPORTED_FOR_FS:a(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:a(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:a(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:a(e=>`${e} not found.`,"NOT_FOUND")},y8={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},R8={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:a(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),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:a(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:a(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:a((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:a(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},b8={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:"value is required",SEARCH_VALUE_TOO_LARGE:"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 ${dU.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${dU.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"},A8={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${uU.INSERT_MAX_CHARACTER_SIZE} bytes.`,"ATTR_NAME_LENGTH_ERR"),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 ${uU.INSERT_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"},hU={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"},I8={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:a(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:a(e=>`Operation '${e}' not found`,"OP_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:a((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:a(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},w8={ATTR_PERM_MISSING:a((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:a((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_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:a(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:a(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:a(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:a(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:a(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),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:a(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:a(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:a((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:a(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:a(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:a(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:a(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:a(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},N8={ATTR_NOT_FOUND:a((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:a((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:a(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:a(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:a(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:a((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:a((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},C8={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},O8={ALTER_USER_DUP_ROLES:a(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:a(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:a(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:a(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:a(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:a(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},EU={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:a(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},_U={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:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},P8={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.",BAD_SSH_KEY_NAME:"SSH key name can only contain alphanumeric, dash and underscore characters"},L8={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},D8={...hU,...R8,...T8,...I8,...w8,...N8,...C8,...O8,...A8,...EU,..._U,...P8,...L8,...y8};gU.exports={CHECK_LOGS_WRAPPER:mU,HDB_ERROR_MSGS:D8,DEFAULT_ERROR_MSGS:pU,DEFAULT_ERROR_RESP:S8,HTTP_STATUS_CODES:fU,LMDB_ERRORS_ENUM:b8,AUTHENTICATION_ERROR_MSGS:hU,VALIDATION_ERROR_MSGS:EU,ITC_ERRORS:_U}});var oe=v(Ae=>{"use strict";var Ha=require("path"),bU=require("fs-extra"),vn=J(),SU=require("fs-extra"),b_=require("os"),M8=require("net"),v8=require("recursive-iterator"),Ir=(H(),M(W)),{PACKAGE_ROOT:U8}=Rt(),TU=require("papaparse"),A_=require("moment"),{inspect:x8}=require("util"),yU=require("is-number"),B8=require("minimist"),F8=require("https"),k8=require("http"),H8=/^((\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)))$/,q8=require("util").promisify(setTimeout),G8="",$8=4,RU={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ae.isEmpty=rs;Ae.isEmptyOrZeroLength=Vi;Ae.arrayHasEmptyValues=Y8;Ae.arrayHasEmptyOrZeroLengthValues=W8;Ae.buildFolderPath=z8;Ae.isBoolean=AU;Ae.errorizeMessage=V8;Ae.stripFileExtension=Q8;Ae.autoCast=J8;Ae.autoCastJSON=IU;Ae.autoCastJSONDeep=Zb;Ae.removeDir=X8;Ae.compareVersions=Z8;Ae.isCompatibleDataVersion=eZ;Ae.escapeRawValue=tZ;Ae.unescapeValue=rZ;Ae.stringifyProps=nZ;Ae.timeoutPromise=iZ;Ae.isClusterOperation=aZ;Ae.getClusterUser=lZ;Ae.checkGlobalSchemaTable=cZ;Ae.getHomeDir=NU;Ae.getPropsFilePath=sZ;Ae.promisifyPapaParse=uZ;Ae.removeBOM=CU;Ae.createEventPromise=dZ;Ae.checkSchemaTableExist=fZ;Ae.checkSchemaExists=OU;Ae.checkTableExists=PU;Ae.getStartOfTomorrowInSeconds=mZ;Ae.getLimitKey=pZ;Ae.isObject=j8;Ae.isNotEmptyAndHasValue=K8;Ae.autoCasterIsNumberCheck=wU;Ae.backtickASTSchemaItems=hZ;Ae.isPortTaken=oZ;Ae.createForkArgs=EZ;Ae.autoCastBoolean=_Z;Ae.asyncSetTimeout=q8;Ae.getTableHashAttribute=gZ;Ae.doesSchemaExist=SZ;Ae.doesTableExist=TZ;Ae.stringifyObj=yZ;Ae.ms_to_time=RZ;Ae.changeExtension=bZ;Ae.getEnvCliRootPath=eA;Ae.noBootFile=AZ;Ae.httpRequest=IZ;Ae.transformReq=wZ;Ae.convertToMS=NZ;Ae.PACKAGE_ROOT=U8;function V8(e){return e instanceof Error?e:new Error(e)}a(V8,"errorizeMessage");function rs(e){return e==null}a(rs,"isEmpty");function K8(e){return!rs(e)&&(e||e===0||e===""||AU(e))}a(K8,"isNotEmptyAndHasValue");function Vi(e){return rs(e)||e.length===0||e.size===0}a(Vi,"isEmptyOrZeroLength");function Y8(e){if(rs(e))return!0;for(let t=0;t<e.length;t++)if(rs(e[t]))return!0;return!1}a(Y8,"arrayHasEmptyValues");function W8(e){if(Vi(e))return!0;for(let t=0;t<e.length;t++)if(Vi(e[t]))return!0;return!1}a(W8,"arrayHasEmptyOrZeroLengthValues");function z8(...e){try{return e.join(Ha.sep)}catch{console.error(e)}}a(z8,"buildFolderPath");function AU(e){return rs(e)?!1:e===!0||e===!1}a(AU,"isBoolean");function j8(e){return rs(e)?!1:typeof e=="object"}a(j8,"isObject");function Q8(e){return Vi(e)?G8:e.slice(0,-$8)}a(Q8,"stripFileExtension");function J8(e){return rs(e)||e===""||typeof e!="string"?e:RU[e]!==void 0?RU[e]:wU(e)===!0?Number(e):H8.test(e)?new Date(e):e}a(J8,"autoCast");function IU(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(IU,"autoCastJSON");function Zb(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=Zb(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=Zb(r);n!==r&&(e[t]=n)}return e}else return IU(e)}a(Zb,"autoCastJSONDeep");function wU(e){if(e.startsWith("0.")&&yU(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&yU(e))}a(wU,"autoCasterIsNumberCheck");async function X8(e){if(Vi(e))throw new Error(`Directory path: ${e} does not exist`);try{await SU.emptyDir(e),await SU.remove(e)}catch(t){throw vn.error(`Error removing files in ${e} -- ${t}`),t}}a(X8,"removeDir");function Z8(e,t){if(Vi(e)){vn.info("Invalid current version sent as parameter.");return}if(Vi(t)){vn.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("."),l=Math.min(o.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(Z8,"compareVersions");function eZ(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(eZ,"isCompatibleDataVersion");function tZ(e){if(rs(e))return e;let t=String(e);return t==="."?Ir.UNICODE_PERIOD:t===".."?Ir.UNICODE_PERIOD+Ir.UNICODE_PERIOD:t.replace(Ir.FORWARD_SLASH_REGEX,Ir.UNICODE_FORWARD_SLASH)}a(tZ,"escapeRawValue");function rZ(e){if(rs(e))return e;let t=String(e);return t===Ir.UNICODE_PERIOD?".":t===Ir.UNICODE_PERIOD+Ir.UNICODE_PERIOD?"..":String(e).replace(Ir.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(rZ,"unescapeValue");function nZ(e,t){if(rs(e))return vn.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+b_.EOL}!Vi(n)&&n[0]===";"?r+=" "+n+s+b_.EOL:Vi(n)||(r+=n+"="+s+b_.EOL)}catch{vn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(nZ,"stringifyProps");function NU(){let e;try{e=b_.homedir()}catch{e=process.env.HOME}return e}a(NU,"getHomeDir");function sZ(){let e=Ha.join(NU(),Ir.HDB_HOME_DIR_NAME,Ir.BOOT_PROPS_FILE_NAME);return bU.existsSync(e)||(e=Ha.join(__dirname,"../","hdb_boot_properties.file")),e}a(sZ,"getPropsFilePath");function iZ(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:a(function(){clearTimeout(r)},"cancel")}}a(iZ,"timeoutPromise");async function oZ(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=M8.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(oZ,"isPortTaken");function aZ(e){try{return Ir.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){vn.error(`Error checking operation against cluster ops ${t}`)}return!1}a(aZ,"isClusterOperation");function cZ(e,t){let r=(we(),M(mt)).getDatabases();if(!r[e])return I_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return I_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(cZ,"checkGlobalSchemaTable");function lZ(e,t){if(rs(t)){vn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(rs(e)||Vi(e)){vn.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){vn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){vn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(lZ,"getClusterUser");function uZ(){TU.parsePromise=function(e,t,r){return new Promise(function(n,s){TU.parse(e,{header:!0,transformHeader:CU,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(uZ,"promisifyPapaParse");function CU(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(CU,"removeBOM");function dZ(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;vn.info(`Got cluster status event response: ${x8(s)}`);try{i.cancel()}catch{vn.error("Error trying to cancel timeout.")}n(s)})})}a(dZ,"createEventPromise");function fZ(e,t){let r=OU(e);if(r)return r;let n=PU(e,t);if(n)return n}a(fZ,"checkSchemaTableExist");function OU(e){let{getDatabases:t}=(we(),M(mt));if(!t()[e])return I_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(OU,"checkSchemaExists");function PU(e,t){let{getDatabases:r}=(we(),M(mt));if(!r()[e][t])return I_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(PU,"checkTableExists");function mZ(){let e=A_().utc().add(1,"d").startOf("d").unix(),t=A_().utc().unix();return e-t}a(mZ,"getStartOfTomorrowInSeconds");function pZ(){return A_().utc().format("DD-MM-YYYY")}a(pZ,"getLimitKey");function hZ(e){try{let t=new v8(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){vn.error("Got an error back ticking items."),vn.error(t)}}a(hZ,"backtickASTSchemaItems");function EZ(e){return[e]}a(EZ,"createForkArgs");function _Z(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(_Z,"autoCastBoolean");function gZ(e,t){let{getDatabases:r}=(we(),M(mt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(gZ,"getTableHashAttribute");function SZ(e){let{getDatabases:t}=(we(),M(mt));return t()[e]!==void 0}a(SZ,"doesSchemaExist");function TZ(e,t){let{getDatabases:r}=(we(),M(mt));return r()[e]?.[t]!==void 0}a(TZ,"doesTableExist");function yZ(e){try{return JSON.stringify(e)}catch{return e}}a(yZ,"stringifyObj");function RZ(e){let t=A_.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(RZ,"ms_to_time");function bZ(e,t){let r=Ha.basename(e,Ha.extname(e));return Ha.join(Ha.dirname(e),r+t)}a(bZ,"changeExtension");function eA(){if(process.env[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=B8(process.argv);if(e[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(eA,"getEnvCliRootPath");var Xb;function AZ(){if(Xb)return Xb;let e=eA();if(eA()&&bU.pathExistsSync(Ha.join(e,Ir.HDB_CONFIG_FILE)))return Xb=!0,!0}a(AZ,"noBootFile");function IZ(e,t){let r;return e.protocol==="http:"?r=k8:r=F8,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8"),o.body="",o.on("data",c=>{o.body+=c}),o.on("end",()=>{n(o)})});i.on("error",o=>{s(o)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}a(IZ,"httpRequest");function wZ(e){if(!e.schema&&!e.database){e.schema=Ir.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(wZ,"transformReq");function NZ(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(NZ,"convertToMS");var I_=Jr()});var bt=v((UOe,BU)=>{"use strict";var Pm=(H(),M(W)),CZ=oe(),Un=ae(),Lm=require("path"),OZ=require("minimist"),LU=require("fs-extra"),DU=require("lodash");Un.initSync();var{CONFIG_PARAMS:qa,DATABASES_PARAM_CONFIG:wm,SYSTEM_SCHEMA_NAME:w_}=Pm,Nm,Cm,Om;function MU(){if(Nm!==void 0)return Nm;if(Un.getHdbBasePath()!==void 0)return Nm=Un.get(qa.STORAGE_PATH)||Lm.join(Un.getHdbBasePath(),Pm.DATABASES_DIR_NAME),Nm}a(MU,"getBaseSchemaPath");function vU(){if(Cm!==void 0)return Cm;if(Un.getHdbBasePath()!==void 0)return Cm=xU(w_),Cm}a(vU,"getSystemSchemaPath");function UU(){if(Om!==void 0)return Om;if(Un.getHdbBasePath()!==void 0)return Om=Un.get(Pm.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Lm.join(Un.getHdbBasePath(),Pm.TRANSACTIONS_DIR_NAME),Om}a(UU,"getTransactionAuditStoreBasePath");function PZ(e,t){let r=Un.get(qa.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Lm.join(UU(),e.toString())}a(PZ,"getTransactionAuditStorePath");function xU(e,t){e=e.toString(),t=t&&t.toString();let r=Un.get(Pm.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Lm.join(MU(),e)}a(xU,"getSchemaPath");function LZ(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,OZ(process.argv));let n=r[qa.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!CZ.isObject(n))throw o;i=n}for(let o of i){let c=o[w_];if(!c)continue;let l=Un.get(qa.DATABASES);l=l??{};let u=c?.tables?.[t]?.[wm.PATH];if(u)return DU.set(l,[w_,wm.TABLES,t,wm.PATH],u),Un.setProperty(qa.DATABASES,l),u;let d=c?.[wm.PATH];if(d)return DU.set(l,[w_,wm.PATH],d),Un.setProperty(qa.DATABASES,l),d}}let s=r[qa.STORAGE_PATH.toUpperCase()];if(s){if(!LU.pathExistsSync(s))throw new Error(s+" does not exist");let i=Lm.join(s,e);return LU.mkdirsSync(i),Un.setProperty(qa.STORAGE_PATH,s),i}return vU()}a(LZ,"initSystemSchemaPaths");function DZ(){Nm=void 0,Cm=void 0,Om=void 0}a(DZ,"resetPaths");BU.exports={getBaseSchemaPath:MU,getSystemSchemaPath:vU,getTransactionAuditStorePath:PZ,getTransactionAuditStoreBasePath:UU,getSchemaPath:xU,initSystemSchemaPaths:LZ,resetPaths:DZ}});var xn=v((kOe,GU)=>{"use strict";var MZ=Jr().LMDB_ERRORS_ENUM,BOe=require("lmdb"),vZ=Wt(),FOe=require("buffer").Buffer,{OVERFLOW_MARKER:FU,MAX_SEARCH_KEY_LENGTH:N_}=vZ,kU=["number","string","symbol","boolean","bigint"];function UZ(e){if(e=e?.primaryStore||e,!e)throw new Error(MZ.ENV_REQUIRED)}a(UZ,"validateEnv");function xZ(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(xZ,"stringifyData");function BZ(e){return e instanceof Date?e.valueOf():e}a(BZ,"convertKeyValueToWrite");function FZ(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(kU.includes(typeof e))return e.length>N_?[e.slice(0,N_)+FU]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(kU.includes(typeof i))i.length>N_?r.push(i.slice(0,N_)+FU):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(FZ,"getIndexedValues");var C_=0,HU=0;function qU(){HU=Date.now()-performance.now()}a(qU,"adjustStartTime");qU();var kZ=6e4;setInterval(qU,kZ).unref();function HZ(){let e=performance.now()+HU;return e>C_?(C_=e,e):(C_+=488e-6,C_)}a(HZ,"getNextMonotonicTime");GU.exports={validateEnv:UZ,stringifyData:xZ,convertKeyValueToWrite:BZ,getNextMonotonicTime:HZ,getIndexedValues:FZ}});var Dm=v((qOe,$U)=>{"use strict";var qZ=(H(),M(W)).OPERATIONS_ENUM,tA=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=qZ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};$U.exports=tA});var _e=v(($Oe,YU)=>{"use strict";var xu=Jr(),GZ=(H(),M(W)),O_=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,VU),this.statusCode=n||xu.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(xu.DEFAULT_ERROR_MSGS[n]?xu.DEFAULT_ERROR_MSGS[n]:xu.DEFAULT_ERROR_MSGS[xu.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&&J()[s](i)}},rA=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}},nA=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function VU(e,t,r,n=GZ.LOG_LEVELS.ERROR,s=null,i=!1){if(KU(e))return e;let o=new O_(e,t,r,n,s);return i&&delete o.stack,o}a(VU,"handleHDBError");function Bu(e){this.message=e}a(Bu,"Violation");Bu.prototype=Object.create(Error.prototype);Bu.prototype.constructor=Bu;Bu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var sA=class extends Bu{static{a(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function KU(e){return e.__proto__.constructor.name===O_.name}a(KU,"isHDBError");YU.exports={isHDBError:KU,handleHDBError:VU,ClientError:rA,ServerError:nA,AccessViolation:sA,Violation:Bu,hdbErrors:xu}});var Mm=v((YOe,QU)=>{"use strict";var KOe=Dm(),P_=(H(),M(W)),iA=oe(),WU=J(),$Z=require("uuid"),{handleHDBError:L_,hdbErrors:VZ}=_e(),{HDB_ERROR_MSGS:D_,HTTP_STATUS_CODES:M_}=VZ;QU.exports=zU;function zU(e,t,r){for(let s=0;s<t.length;s++)jU(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];KZ(i,r,e.operation)}}a(zU,"processRows");zU.validateAttribute=jU;function jU(e){if(Buffer.byteLength(String(e))>P_.INSERT_MAX_CHARACTER_SIZE)throw L_(new Error,D_.ATTR_NAME_LENGTH_ERR(e),M_.BAD_REQUEST,void 0,void 0,!0);if(iA.isEmptyOrZeroLength(e)||iA.isEmpty(e.trim()))throw L_(new Error,D_.ATTR_NAME_NULLISH_ERR,M_.BAD_REQUEST,void 0,void 0,!0)}a(jU,"validateAttribute");function KZ(e,t,r){if(!e.hasOwnProperty(t)||iA.isEmptyOrZeroLength(e[t])){if(r===P_.OPERATIONS_ENUM.INSERT||r===P_.OPERATIONS_ENUM.UPSERT){e[t]=$Z.v4();return}throw WU.error("Update transaction aborted due to record with no hash value:",e),L_(new Error,D_.RECORD_MISSING_HASH_ERR,M_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>P_.INSERT_MAX_CHARACTER_SIZE)throw WU.error(e),L_(new Error,D_.HASH_VAL_LENGTH_ERR,M_.BAD_REQUEST,void 0,void 0,!0)}a(KZ,"validateHash")});function nx(e){aA=e}function jZ(){zZ=setInterval(function(){for(let e of oA)if(e.stale){let t=e.getContext()?.url;ex.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},WZ).unref()}var cA,ZU,ex,tx,rx,JU,oA,YZ,Mo,vm,XU,aA,vo,v_,WZ,zZ,Um=ne(()=>{cA=b(xn()),ZU=b(_e()),ex=b(J()),tx=b(ae());H();rx=b(oe()),JU=100,oA=new Set,YZ=(0,rx.convertToMS)(tx.get(F.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Mo={CLOSED:0,OPEN:1,LINGERING:2};a(nx,"replicationConfirmation");vo=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=Mo.OPEN;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===Mo.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),oA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(oA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(vm&&!this.overloadChecked&&performance.now()-XU>YZ)throw new ZU.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===Mo.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Mo.LINGERING){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,cA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let p=f;p<this.validated;p++)this.writes[p]?.validate?.(this.timestamp);let m;for(let p=f;p<this.validated;p++){let h=this.writes[p];h&&(h.before||h.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let p=0;p<2;p++){let h;for(let E=f;E<this.validated;E++){let g=this.writes[E];if(!g)continue;let R=g[p===0?"before":"beforeIntermediate"];if(R){let S=R();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(p){throw this.abort(),p}return this.commit(t)})()}catch(f){throw this.abort(),f}n||this.doneReadTxn(),this.open=t?.doneWriting?Mo.LINGERING:Mo.OPEN;let s,i=[],o=0;this.writes=this.writes.filter(f=>f);let c=a(f=>{f.commit(r,f.entry,n)},"doWrite"),l=a(()=>{let f=this.writes[o++];if(f)if(f.key){(n>0||!f.entry)&&(f.entry=f.store.getEntry(f.key));let m=f.store.ifVersion(f.key,f.entry?.version??null,l);s=s||m}else l();else for(let m of this.writes)c(m)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<JU>>n?l():s=this.writes[0].store.transaction(()=>{for(let f of this.writes)f.entry=f.store.getEntry(f.key),c(f);return!0})),s)return vm||(vm=s,XU=performance.now(),vm.then(()=>{vm=null})),s.then(f=>{if(f){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let m=this.writes[0].store.rootStore.databaseName,p=this.writes[this.writes.length-1];aA&&p&&i.push(aA(m,p.store.getEntry(p.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+JU/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let f=this.next?.commit(t);if(f?.then)return f?.then(m=>({txnTime:r,next:m}));d.next=f}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=Mo.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},v_=class extends vo{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,cA.getNextMonotonicTime)())}getReadTxn(){}},WZ=3e4;a(jZ,"startMonitoringTxns");jZ()});var sx,ns,lA,Fu=ne(()=>{sx=require("events"),ns=class extends sx.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new lA;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)}},lA=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function At(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Mo.OPEN&&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 vo;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(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 l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var ix,Ga=ne(()=>{ix=b(li());Um();a(At,"transaction");(0,ix._assignPackageExport)("transaction",At);At.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};At.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var dA={};ye(dA,{add:()=>U_,applyReverse:()=>ox,getRecordAtTime:()=>uA,rebuildUpdateBefore:()=>x_});function U_(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 x_(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let o=e[s];if(o?.__op__)if(o.__op__===i.__op__)n||(n={}),n[s]=o;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=o,U_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function ox(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=QZ[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=ax}}function uA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=It(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":ox(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===ax&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=It(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)o[f]&&(s[f]=d[f],o[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var QZ,ax,B_=ne(()=>{Ki();a(U_,"add");U_.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)};QZ={add:U_};a(x_,"rebuildUpdateBefore");a(ox,"applyReverse");ax={};a(uA,"getRecordAtTime")});var wr=v(k_=>{var F_=J();for(let e of["trace","debug","info","warn","error","fatal","notify"])F_.logsAtLevel(e)&&(k_[e]=F_[e]);k_.loggerWithTag=e=>F_.loggerWithTag(e,!0);k_.setLogLevel=F_.setLogLevel});var px={};ye(px,{parse:()=>pA,streamAsJSON:()=>Bm,stringify:()=>tl});function Bm(e){return new fA({value:e})}function cx(e){return console.error(e),JSON.stringify(xm(e))}function lx(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function tl(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===fx)return mx(e);if(t.resolution)return t.resolution.then(()=>tl(e));throw t}}function mx(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+=mx(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+tl(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function pA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),ZZ.test(e)?JZ.parse(e):JSON.parse(e)):null}var ux,mA,dx,JZ,XZ,fx,xm,fA,ZZ,hA=ne(()=>{ux=require("stream"),mA=b(J()),dx=b(require("json-bigint-fixes")),JZ=(0,dx.default)({useNativeBigInt:!0}),XZ=1e4,fx={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw fx};({errorToString:xm}=mA);a(Bm,"streamAsJSON");fA=class extends ux.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(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(mA.warn("Error serializing in stream",c),o={done:!1,value:{error:xm(c)}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:xm(c)}},i={next:a(()=>({done:!0}),"next")}}if(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),cx)}catch(s){yield cx(s)}else yield tl(t)}else yield tl(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);lx(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(xm(t)),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>XZ?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 lx(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(xm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(cx,"handleError");a(lx,"when");a(tl,"stringify");a(mx,"jsStringify");ZZ=/[[,:]\s*-?\d{16,}/;a(pA,"parse")});var Ax={};ye(Ax,{asyncSerialization:()=>TA,contentTypes:()=>SA,findBestSerializer:()=>q_,getDeserializer:()=>Fo,hasAsyncSerialization:()=>yA,registerContentHandlers:()=>Hm,serialize:()=>qm,serializeMessage:()=>Bo,toCsvStream:()=>H_});function e9(e){try{return e?.[0]===123?gA(e):e}catch{return e}}function Hm(e){e.register(t9,{serializers:[{regex:/^application\/json$/,serializer:Bm},{regex:/^application\/cbor$/,serializer:a(function(t){return new rl.EncoderStream(km).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?nl.Readable.from((0,Yi.encodeIter)(t,km)):(0,Yi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),H_(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Yi.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,rl.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function q_(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 l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let h of d){let E=h.indexOf("=");m[h.substring(0,E)]=h.substring(E+1)}f=+m.q;let p=hn.get(u);if(p){let h=(p.q||1)*f;h>s&&(n=p,i=p.type||u,s=h,o=m)}}if(!n){if(r)throw new _x.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(hn.keys()).join(", "),406);n=hn.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function qm(e,t,r){let n=Ex&&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||e instanceof vs)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=q_(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&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){if(e.mapError){let c=e.getColumns;e=e.mapError(l=>(l.toJSON=()=>({error:l.name,message:l.message,...l.partialObject}),_A.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,xo.createBrotliCompress)({params:{[xo.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?xo.constants.BROTLI_MODE_TEXT:xo.constants.BROTLI_MODE_GENERIC,[xo.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>Ex?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,xo.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function Bo(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;Uo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=q_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=Fm(e);return Uo?.length>0?(Uo.length===1?Uo[0]:Promise.all(Uo)).then(()=>Bo(e,t,!0)):n}finally{Uo=void 0}}function TA(e){if(Uo)Uo.push(e);else throw new Error("Unable to serialize asynchronously")}function yA(){return!!Uo}function r9(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 s9(e){return n9.includes(e)}function i9(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,o]=s.split("=");r[i.trim()]=o.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Fo(e="",t=!1){let r=i9(e),n=r.type&&hn.get(r.type)?.deserialize||o9(r);return t?s=>r9(s).then(n):n}function o9(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!s9(e.parameters.charset)&&_A.default.info(`Unknown Buffer encoding ${e.parameters.charset} in content-type. Proceeding anyways.`),t=>({contentType:e.type,data:t.toString(e.parameters?.charset||"utf-8")})):e.type==="application/octet-stream"?t=>t:t=>{if(e.type==="")try{if(t?.[0]===123)return gA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function a9(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)}}}}}function H_(e,t){let r=nl.default.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 Tx.Transform(n,s);return r.pipe(i)}var Yi,rl,xo,_x,nl,gx,EA,Sx,_A,Tx,yx,Rx,Fm,gA,km,hn,SA,hx,bx,t9,Ex,Uo,n9,ko=ne(()=>{hA();Yi=require("msgpackr"),rl=require("cbor-x"),xo=require("zlib"),_x=b(_e()),nl=b(require("stream"));Hr();gx=b(li()),EA=b(ae());H();Sx=b(require("yaml")),_A=b(wr());ss();Tx=require("json2csv"),yx=b(require("fastify-plugin")),Rx=EA.default.get(F.SERIALIZATION_BIGINT)!==!1,Fm=Rx?tl:JSON.stringify,gA=Rx?pA:JSON.parse,km={useRecords:!1,useToJSON:!0},hn=new Map,SA=hn;Be.contentTypes=SA;(0,gx._assignPackageExport)("contentTypes",SA);hn.set("application/json",{serializeStream:Bm,serialize:Fm,deserialize(e){return gA(e)},q:.8});hx=new rl.Encoder(km);hn.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new rl.EncoderStream(km).end(e)},serialize:hx.encode,deserialize:hx.decode,q:1});hn.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?nl.Readable.from((0,Yi.encodeIter)(e,km)):(0,Yi.pack)(e)},serialize:Yi.pack,deserialize:Yi.unpack,q:.9});hn.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),H_(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]),H_(e,e?.getColumns?.())},q:.1});hn.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return nl.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});hn.set("text/yaml",{serialize(e){return Sx.stringify(e,{aliasDuplicateObjects:!1})},q:.7});hn.set("text/event-stream",{serializeStream:a(function(e){return nl.Readable.from(a9(e,this.serialize))},"serializeStream"),serialize:a(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+`
|
|
1
|
+
"use strict";var X6=Object.create;var Tm=Object.defineProperty;var Z6=Object.getOwnPropertyDescriptor;var e5=Object.getOwnPropertyNames;var t5=Object.getPrototypeOf,r5=Object.prototype.hasOwnProperty;var a=(e,t)=>Tm(e,"name",{value:t,configurable:!0});var se=(e,t)=>()=>(e&&(t=e(e=0)),t);var v=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ye=(e,t)=>{for(var r in t)Tm(e,r,{get:t[r],enumerable:!0})},Wv=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of e5(t))!r5.call(e,s)&&s!==r&&Tm(e,s,{get:()=>t[s],enumerable:!(n=Z6(t,s))||n.enumerable});return e};var b=(e,t,r)=>(r=e!=null?X6(t5(e)):{},Wv(t||!e||!e.__esModule?Tm(r,"default",{value:e,enumerable:!0}):r,e)),M=e=>Wv(Tm({},"__esModule",{value:!0}),e);var Rt=v((AOe,Qv)=>{var{join:n5,dirname:zv}=require("node:path"),{existsSync:s5,readFileSync:i5}=require("node:fs");function o5(){let t=__dirname,r,n=0;for(;!s5(r=n5(t,"package.json"));)if(t===(t=zv(t))||n++>10)throw new Error("Could not find package root");return r}a(o5,"findPackageJson");var jv=o5(),a5=JSON.parse(i5(jv,"utf8")),c5=zv(jv);Qv.exports={packageJson:a5,PACKAGE_ROOT:c5}});var E_=v((wOe,Jv)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n,basename:s}=require("node:path"),{existsSync:i,statSync:o,readFileSync:c,writeFileSync:l,unlinkSync:u}=require("node:fs"),{isMainThread:d}=require("node:worker_threads"),{spawnSync:f,spawn:m}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:p}=Rt(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],E="ts-build";if(d){let S=!1,y=!1;if(y=i(n(p,E))){let N=new Set;e.sync(h.map(I=>`${I}/**/*.ts`),{cwd:p}).forEach(I=>{let $=0,ee=0;try{N.add(I),$=o(n(p,I)).mtimeMs-5e3,ee=o(n(p,E,I.replace(/.ts$/,".js"))).mtimeMs}catch{}$>ee&&(S=!0)}),e.sync(h.map(I=>`${I}/**/*.js`),{cwd:n(p,E)}).forEach(I=>{if(!N.has(I.replace(/.js$/,".ts")))try{u(n(p,E,I))}catch{}})}else S=!0;if(S){console.log("Compiling TypeScript...");let N=f("npx",["tsc"],{cwd:p});if(N.stdout?.length&&console.log(N.stdout.toString()),N.stderr?.length&&console.log(N.stderr.toString()),y){let I=n(t(),"harperdb-tsc.pid"),$=!1;if(i(I))try{process.kill(+c(I,"utf8"),0),$=!0}catch{}if(!$){console.log("Starting background TypeScript compilation...");let ee=m("npx",["tsc","--watch"],{detached:!0,cwd:p,stdio:"ignore"});ee.on("error",q=>{console.error("Error trying to compile TypeScript",q)}),ee.pid&&l(I,String(ee.pid),"utf-8"),ee.unref()}}}}let g=Jv.constructor,R=g._findPath;g._findPath=function(S,y,N){if(S.startsWith(".")&&!N&&y.length===1&&y[0].startsWith(p)&&!y[0].includes("node_modules")){let I=r(p,y[0]),$;I.startsWith(E)?$=n(p,r(E,I)):$=n(p,E,I),(S.endsWith(".js")||S.endsWith(".ts"))&&(S=S.slice(0,-3));let ee=n($,S),q=ee+".js";if(i(q))return q;if(s(ee).includes(".")&&i(ee))return ee}return R(S,y,N)}}});var W={};ye(W,{AUTH_AUDIT_STATUS:()=>ci,AUTH_AUDIT_TYPES:()=>ka,BOOT_PROPS_FILE_NAME:()=>L5,BOOT_PROP_PARAMS:()=>eU,CLUSTERING_FLAG:()=>jb,CLUSTERING_PROCESSES:()=>g5,CLUSTER_MESSAGE_TYPE_ENUM:()=>zb,CLUSTER_OPERATIONS:()=>W5,CONFIG_PARAMS:()=>F,CONFIG_PARAM_MAP:()=>tU,DATABASES_DIR_NAME:()=>Zc,DATABASES_PARAM_CONFIG:()=>J5,DEFAULT_DATABASE_NAME:()=>T5,ESCAPED_FORWARD_SLASH_REGEX:()=>O5,FORWARD_SLASH_REGEX:()=>N5,FUNC_VAL:()=>c8,GEO_CONVERSION_ENUM:()=>j5,HDB_COMPONENT_CONFIG_FILE:()=>d5,HDB_CONFIG_FILE:()=>l5,HDB_DEFAULT_CONFIG_FILE:()=>u5,HDB_FILE_PERMISSIONS:()=>M5,HDB_HOME_DIR_NAME:()=>P5,HDB_PID_FILE:()=>S5,HDB_PROCESS_SERVICES:()=>_5,HDB_PROC_NAME:()=>f5,HDB_RESTART_SCRIPT:()=>m5,HDB_ROOT_DIR_NAME:()=>Vb,HDB_SETTINGS_NAMES:()=>bm,HDB_SUPPORT_ADDRESS:()=>Zv,INFO_TABLE_HASH_ATTRIBUTE:()=>k5,INSERT_MAX_CHARACTER_SIZE:()=>B5,INSTALL_PROMPTS:()=>x5,ITC_EVENT_TYPES:()=>R_,JOB_STATUS_ENUM:()=>$5,JOB_TYPE_ENUM:()=>X5,JWT_ENUM:()=>Am,LAUNCH_SERVICE_SCRIPTS:()=>R5,LEGACY_CONFIG_PARAMS:()=>Q5,LEGACY_DATABASES_DIR_NAME:()=>S_,LICENSE_FILE_NAME:()=>G5,LICENSE_KEY_DIR_NAME:()=>Wb,LICENSE_VALUES:()=>Z5,LOG_LEVELS:()=>ym,LOG_NAMES:()=>y5,METADATA_PROPERTY:()=>r8,NODE_ERROR_CODES:()=>t8,OPERATIONS_ENUM:()=>V,PERMS_CRUD_ENUM:()=>o8,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>i8,PRE_4_0_0_VERSION:()=>l8,PROCESS_DESCRIPTORS:()=>E5,PROCESS_NAME_ENV_PROP:()=>U5,RAM_ALLOCATION_ENUM:()=>e8,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>y_,REG_KEY_FILE_NAME:()=>q5,RESTART_TIMEOUT_MS:()=>D5,ROLE_TYPES_ENUM:()=>b5,S3_BUCKET_AUTH_KEYS:()=>K5,SEARCH_NOT_FOUND_MESSAGE:()=>I5,SEARCH_WILDCARDS:()=>a8,SERVICE_ACTIONS_ENUM:()=>z5,SUPPORT_HELP_MSG:()=>A5,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>H5,SYSTEM_SCHEMA_NAME:()=>Rm,SYSTEM_TABLE_NAMES:()=>Uu,THREAD_TYPES:()=>Jb,TIME_STAMP_NAMES:()=>s8,TIME_STAMP_NAMES_ENUM:()=>n8,TRANSACTIONS_DIR_NAME:()=>v5,UNICODE_FORWARD_SLASH:()=>C5,UNICODE_PERIOD:()=>w5,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>F5,VALID_S3_FILE_TYPES:()=>V5,VALID_SQL_OPS_ENUM:()=>Y5,VALUE_SEARCH_COMPARATORS:()=>T_,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>Qb});var __,g_,l5,u5,Vb,d5,f5,m5,Xv,$b,Kb,Yb,p5,h5,E5,_5,g5,S5,T5,y5,ym,R5,b5,Zv,A5,I5,w5,N5,C5,O5,Rm,P5,Wb,L5,D5,M5,Zc,S_,v5,U5,eU,x5,B5,F5,Uu,k5,H5,q5,G5,$5,V,V5,K5,Y5,W5,z5,j5,bm,Q5,F,tU,J5,X5,zb,Z5,e8,t8,r8,jb,rU,nU,n8,s8,i8,T_,Qb,o8,a8,c8,y_,Am,R_,Jb,l8,ci,ka,H=se(()=>{__=require("node:path"),g_=b(Rt()),l5="harperdb-config.yaml",u5="defaultConfig.yaml",Vb="hdb",d5="config.yaml",f5="harperdb.js",m5="restartHdb.js",Xv="HarperDB",$b="Custom Functions",Kb="Clustering Hub",Yb="Clustering Leaf",p5="Clustering Ingest Service",h5="Clustering Reply Service",E5={HDB:Xv,CLUSTERING_HUB:Kb,CLUSTERING_LEAF:Yb,CLUSTERING_INGEST_SERVICE:p5,CLUSTERING_REPLY_SERVICE:h5,CUSTOM_FUNCTIONS:$b,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"},_5={harperdb:Xv,"clustering hub":Kb,"clustering leaf":Yb,"custom functions":$b,custom_functions:$b,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},g5={CLUSTERING_HUB_PROC_DESCRIPTOR:Kb,CLUSTERING_LEAF_PROC_DESCRIPTOR:Yb},S5="hdb.pid",T5="data",y5={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},ym={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},R5={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,__.join)(g_.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,__.join)(g_.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,__.join)(g_.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},b5={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Zv="support@harperdb.io",A5=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${Zv}`,I5="None of the specified records were found.",w5="U+002E",N5=/\//g,C5="U+002F",O5=/U\+002F/g,Rm="system",P5=".harperdb",Wb="keys",L5="hdb_boot_properties.file",D5=6e4,M5=448,Zc="database",S_="schema",v5="transactions",U5="PROCESS_NAME",eU={SETTINGS_PATH_KEY:"settings_path"},x5={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",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",DEFAULTS_MODE:"DEFAULTS_MODE",REPLICATION_HOSTNAME:"REPLICATION_HOSTNAME",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},B5=250,F5={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Uu={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"},k5="info_id",H5={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"},q5="060493.ks",G5=".license",$5={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},V={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",DESCRIBE_METRIC:"describe_metric",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_REGISTRATION_INFO:"registration_info",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",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",CLEANUP_ORPHAN_BLOBS:"cleanup_orphan_blobs",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status",INSTALL_USAGE_LICENSE:"install_usage_license",GET_USAGE_LICENSES:"get_usage_licenses"},V5={CSV:".csv",JSON:".json"},K5={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Y5={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},W5={[V.INSERT]:V.INSERT,[V.UPDATE]:V.UPDATE,[V.UPSERT]:V.UPSERT,[V.DELETE]:V.DELETE},z5={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},j5={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},bm={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"},Q5={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"},F={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",ANALYTICS_REPLICATE:"analytics_replicate",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",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_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",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_MTLS_CERTIFICATEVERIFICATION:"http_mtls_certificateVerification",HTTP_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"http_mtls_certificateVerification_failureMode",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL:"http_mtls_certificateVerification_crl",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_TIMEOUT:"http_mtls_certificateVerification_crl_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_CACHETTL:"http_mtls_certificateVerification_crl_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_FAILUREMODE:"http_mtls_certificateVerification_crl_failureMode",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_GRACEPERIOD:"http_mtls_certificateVerification_crl_gracePeriod",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP:"http_mtls_certificateVerification_ocsp",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_TIMEOUT:"http_mtls_certificateVerification_ocsp_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_CACHETTL:"http_mtls_certificateVerification_ocsp_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_ERRORCACHETTL:"http_mtls_certificateVerification_ocsp_errorCacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_FAILUREMODE:"http_mtls_certificateVerification_ocsp_failureMode",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_REQUESTQUEUELIMIT:"http_requestQueueLimit",HTTP_HTTP2:"http_http2",LICENSE_MODE:"license_mode",LICENSE_REGION:"license_region",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",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_ROTATION_RETENTION:"logging_rotation_retention",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_NETWORK_HTTP2:"operationsApi_network_http2",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",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_MTLS_CERTIFICATEVERIFICATION:"replication_mtls_certificateVerification",REPLICATION_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"replication_mtls_certificateVerification_failureMode",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL:"replication_mtls_certificateVerification_crl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_TIMEOUT:"replication_mtls_certificateVerification_crl_timeout",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_CACHETTL:"replication_mtls_certificateVerification_crl_cacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_FAILUREMODE:"replication_mtls_certificateVerification_crl_failureMode",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_GRACEPERIOD:"replication_mtls_certificateVerification_crl_gracePeriod",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP:"replication_mtls_certificateVerification_ocsp",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_TIMEOUT:"replication_mtls_certificateVerification_ocsp_timeout",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_CACHETTL:"replication_mtls_certificateVerification_ocsp_cacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_ERRORCACHETTL:"replication_mtls_certificateVerification_ocsp_errorCacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_FAILUREMODE:"replication_mtls_certificateVerification_ocsp_failureMode",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",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_BLOBPATHS:"storage_blobPaths",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",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",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"},tU={settings_path:eU.SETTINGS_PATH_KEY,hdb_root_key:F.ROOTPATH,hdb_root:F.ROOTPATH,rootpath:F.ROOTPATH,server_port_key:F.OPERATIONSAPI_NETWORK_PORT,server_port:F.OPERATIONSAPI_NETWORK_PORT,cert_key:F.TLS_CERTIFICATE,certificate:F.TLS_CERTIFICATE,private_key_key:F.TLS_PRIVATEKEY,private_key:F.TLS_PRIVATEKEY,http_secure_enabled_key:F.OPERATIONSAPI_NETWORK_HTTPS,https_on:F.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:F.OPERATIONSAPI_NETWORK_CORS,cors_on:F.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:F.LOGGING_LEVEL,log_level:F.LOGGING_LEVEL,log_path_key:F.LOGGING_ROOT,log_path:F.LOGGING_ROOT,clustering_node_name_key:F.CLUSTERING_NODENAME,node_name:F.CLUSTERING_NODENAME,clustering_enabled_key:F.CLUSTERING_ENABLED,clustering:F.CLUSTERING_ENABLED,max_http_threads:F.THREADS_COUNT,max_hdb_processes:F.THREADS_COUNT,server_timeout_key:F.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:F.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:F.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:F.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:F.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:F.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:F.LOGGING_AUDITLOG,disable_transaction_log:F.LOGGING_AUDITLOG,operation_token_timeout_key:F.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:F.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:F.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:F.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:F.HTTP_PORT,custom_functions_port:F.HTTP_PORT,custom_functions_directory_key:F.COMPONENTSROOT,custom_functions_directory:F.COMPONENTSROOT,max_custom_function_processes:F.THREADS_COUNT,logging_console:F.LOGGING_CONSOLE,log_to_file:F.LOGGING_FILE,log_to_stdstreams:F.LOGGING_STDSTREAMS,local_studio_on:F.LOCALSTUDIO_ENABLED,clustering_port:F.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:F.CLUSTERING_USER,customfunctions_network_port:F.HTTP_PORT,customfunctions_tls_certificate:F.TLS_CERTIFICATE,customfunctions_network_cors:F.HTTP_CORS,customfunctions_network_corsaccesslist:F.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:F.HTTP_HEADERSTIMEOUT,customfunctions_network_https:F.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:F.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:F.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:F.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:F.HTTP_TIMEOUT,customfunctions_tls:F.TLS,http_threads:F.THREADS_COUNT,threads:F.THREADS_COUNT,threads_count:F.THREADS_COUNT,customfunctions_processes:F.THREADS_COUNT,customfunctions_root:F.COMPONENTSROOT,operationsapi_root:F.ROOTPATH};for(let e in F){let t=F[e];tU[t.toLowerCase()]=t}J5={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},X5={csv_file_load:"csv_file_load",csv_data_load:V.CSV_DATA_LOAD,csv_url_load:V.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"},zb={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"},Z5={VERSION_DEFAULT:"2.2.0"},e8={DEVELOPMENT:8192,DEFAULT:512},t8={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},r8=Symbol("metadata"),jb="__clustering__",rU="__createdtime__",nU="__updatedtime__",n8={CREATED_TIME:rU,UPDATED_TIME:nU},s8=[rU,nU],i8=15984864e5,T_={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Qb={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},o8={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},a8=["*","%"],c8="func_val",y_={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Am={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},R_={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",COMPONENT_STATUS_REQUEST:"component_status_request",COMPONENT_STATUS_RESPONSE:"component_status_response"},Jb={HTTP:"http"},l8="3.x.x",ci={SUCCESS:"success",FAILURE:"failure"},ka={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var el=v((NOe,oU)=>{"use strict";var sU=require("minimist");oU.exports=u8;function u8(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=iU(process.env),n=iU(sU(process.argv))):(r=process.env,n=sU(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(u8,"assignCMDENVVariables");function iU(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(iU,"objKeysToLowerCase")});var li=v(ts=>{"use strict";global.Resource=ts.Resource=void 0;global.tables=ts.tables={};global.databases=ts.databases={};global.getUser=ts.getUser=void 0;global.authenticateUser=ts.authenticateUser=void 0;global.server=ts.server={};global.contentTypes=ts.contentTypes=null;global.threads=ts.threads=[];global.logger={};global.RequestTarget=ts.RequestTarget=void 0;global.operation=ts.operation=void 0;ts._assignPackageExport=(e,t)=>{global[e]=ts[e]=t}});var Im={};ye(Im,{server:()=>Be});var aU,Be,Hr=se(()=>{aU=b(li()),Be={};(0,aU._assignPackageExport)("server",Be)});var Wt=v((POe,lU)=>{"use strict";var d8="__dbis__",f8="__txns__",m8="__environment_name__",p8="__dbi_defintion__",h8={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"},E8=["__createdtime__","__updatedtime__"],_8="\uFFFF",cU={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},g8=Object.values(cU);lU.exports={AUDIT_STORE_NAME:f8,INTERNAL_DBIS_NAME:d8,DBI_DEFINITION_NAME:p8,SEARCH_TYPES:h8,TIMESTAMP_NAMES:E8,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:m8,TRANSACTIONS_DBI_NAMES_ENUM:cU,TRANSACTIONS_DBIS:g8,OVERFLOW_MARKER:_8}});var Jr=v((LOe,gU)=>{"use strict";var uU=(H(),M(W)),dU=Wt(),fU={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},mU=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),pU={500:mU("There was an error processing your request."),400:"Invalid request"},S8=pU[fU.INTERNAL_SERVER_ERROR],T8={OP_NOT_SUPPORTED_FOR_FS:a(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:a(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:a(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:a(e=>`${e} not found.`,"NOT_FOUND")},y8={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},R8={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:a(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),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:a(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:a(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:a((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:a(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},b8={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:"value is required",SEARCH_VALUE_TOO_LARGE:"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 ${dU.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${dU.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"},A8={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${uU.INSERT_MAX_CHARACTER_SIZE} bytes.`,"ATTR_NAME_LENGTH_ERR"),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 ${uU.INSERT_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"},hU={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"},I8={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:a(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:a(e=>`Operation '${e}' not found`,"OP_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:a((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:a(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},w8={ATTR_PERM_MISSING:a((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:a((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_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:a(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:a(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:a(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:a(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:a(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),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:a(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:a(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:a((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:a(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:a(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:a(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:a(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:a(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},N8={ATTR_NOT_FOUND:a((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:a((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:a(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:a(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:a(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:a((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:a((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},C8={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},O8={ALTER_USER_DUP_ROLES:a(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:a(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:a(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:a(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:a(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:a(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},EU={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:a(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},_U={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:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},P8={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.",BAD_SSH_KEY_NAME:"SSH key name can only contain alphanumeric, dash and underscore characters"},L8={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},D8={...hU,...R8,...T8,...I8,...w8,...N8,...C8,...O8,...A8,...EU,..._U,...P8,...L8,...y8};gU.exports={CHECK_LOGS_WRAPPER:mU,HDB_ERROR_MSGS:D8,DEFAULT_ERROR_MSGS:pU,DEFAULT_ERROR_RESP:S8,HTTP_STATUS_CODES:fU,LMDB_ERRORS_ENUM:b8,AUTHENTICATION_ERROR_MSGS:hU,VALIDATION_ERROR_MSGS:EU,ITC_ERRORS:_U}});var oe=v(Ae=>{"use strict";var Ha=require("path"),bU=require("fs-extra"),vn=J(),SU=require("fs-extra"),b_=require("os"),M8=require("net"),v8=require("recursive-iterator"),Ir=(H(),M(W)),{PACKAGE_ROOT:U8}=Rt(),TU=require("papaparse"),A_=require("moment"),{inspect:x8}=require("util"),yU=require("is-number"),B8=require("minimist"),F8=require("https"),k8=require("http"),H8=/^((\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)))$/,q8=require("util").promisify(setTimeout),G8="",$8=4,RU={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ae.isEmpty=rs;Ae.isEmptyOrZeroLength=Vi;Ae.arrayHasEmptyValues=Y8;Ae.arrayHasEmptyOrZeroLengthValues=W8;Ae.buildFolderPath=z8;Ae.isBoolean=AU;Ae.errorizeMessage=V8;Ae.stripFileExtension=Q8;Ae.autoCast=J8;Ae.autoCastJSON=IU;Ae.autoCastJSONDeep=Zb;Ae.removeDir=X8;Ae.compareVersions=Z8;Ae.isCompatibleDataVersion=eZ;Ae.escapeRawValue=tZ;Ae.unescapeValue=rZ;Ae.stringifyProps=nZ;Ae.timeoutPromise=iZ;Ae.isClusterOperation=aZ;Ae.getClusterUser=lZ;Ae.checkGlobalSchemaTable=cZ;Ae.getHomeDir=NU;Ae.getPropsFilePath=sZ;Ae.promisifyPapaParse=uZ;Ae.removeBOM=CU;Ae.createEventPromise=dZ;Ae.checkSchemaTableExist=fZ;Ae.checkSchemaExists=OU;Ae.checkTableExists=PU;Ae.getStartOfTomorrowInSeconds=mZ;Ae.getLimitKey=pZ;Ae.isObject=j8;Ae.isNotEmptyAndHasValue=K8;Ae.autoCasterIsNumberCheck=wU;Ae.backtickASTSchemaItems=hZ;Ae.isPortTaken=oZ;Ae.createForkArgs=EZ;Ae.autoCastBoolean=_Z;Ae.asyncSetTimeout=q8;Ae.getTableHashAttribute=gZ;Ae.doesSchemaExist=SZ;Ae.doesTableExist=TZ;Ae.stringifyObj=yZ;Ae.ms_to_time=RZ;Ae.changeExtension=bZ;Ae.getEnvCliRootPath=eA;Ae.noBootFile=AZ;Ae.httpRequest=IZ;Ae.transformReq=wZ;Ae.convertToMS=NZ;Ae.PACKAGE_ROOT=U8;function V8(e){return e instanceof Error?e:new Error(e)}a(V8,"errorizeMessage");function rs(e){return e==null}a(rs,"isEmpty");function K8(e){return!rs(e)&&(e||e===0||e===""||AU(e))}a(K8,"isNotEmptyAndHasValue");function Vi(e){return rs(e)||e.length===0||e.size===0}a(Vi,"isEmptyOrZeroLength");function Y8(e){if(rs(e))return!0;for(let t=0;t<e.length;t++)if(rs(e[t]))return!0;return!1}a(Y8,"arrayHasEmptyValues");function W8(e){if(Vi(e))return!0;for(let t=0;t<e.length;t++)if(Vi(e[t]))return!0;return!1}a(W8,"arrayHasEmptyOrZeroLengthValues");function z8(...e){try{return e.join(Ha.sep)}catch{console.error(e)}}a(z8,"buildFolderPath");function AU(e){return rs(e)?!1:e===!0||e===!1}a(AU,"isBoolean");function j8(e){return rs(e)?!1:typeof e=="object"}a(j8,"isObject");function Q8(e){return Vi(e)?G8:e.slice(0,-$8)}a(Q8,"stripFileExtension");function J8(e){return rs(e)||e===""||typeof e!="string"?e:RU[e]!==void 0?RU[e]:wU(e)===!0?Number(e):H8.test(e)?new Date(e):e}a(J8,"autoCast");function IU(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(IU,"autoCastJSON");function Zb(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=Zb(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=Zb(r);n!==r&&(e[t]=n)}return e}else return IU(e)}a(Zb,"autoCastJSONDeep");function wU(e){if(e.startsWith("0.")&&yU(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&yU(e))}a(wU,"autoCasterIsNumberCheck");async function X8(e){if(Vi(e))throw new Error(`Directory path: ${e} does not exist`);try{await SU.emptyDir(e),await SU.remove(e)}catch(t){throw vn.error(`Error removing files in ${e} -- ${t}`),t}}a(X8,"removeDir");function Z8(e,t){if(Vi(e)){vn.info("Invalid current version sent as parameter.");return}if(Vi(t)){vn.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("."),l=Math.min(o.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(Z8,"compareVersions");function eZ(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(eZ,"isCompatibleDataVersion");function tZ(e){if(rs(e))return e;let t=String(e);return t==="."?Ir.UNICODE_PERIOD:t===".."?Ir.UNICODE_PERIOD+Ir.UNICODE_PERIOD:t.replace(Ir.FORWARD_SLASH_REGEX,Ir.UNICODE_FORWARD_SLASH)}a(tZ,"escapeRawValue");function rZ(e){if(rs(e))return e;let t=String(e);return t===Ir.UNICODE_PERIOD?".":t===Ir.UNICODE_PERIOD+Ir.UNICODE_PERIOD?"..":String(e).replace(Ir.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(rZ,"unescapeValue");function nZ(e,t){if(rs(e))return vn.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+b_.EOL}!Vi(n)&&n[0]===";"?r+=" "+n+s+b_.EOL:Vi(n)||(r+=n+"="+s+b_.EOL)}catch{vn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(nZ,"stringifyProps");function NU(){let e;try{e=b_.homedir()}catch{e=process.env.HOME}return e}a(NU,"getHomeDir");function sZ(){let e=Ha.join(NU(),Ir.HDB_HOME_DIR_NAME,Ir.BOOT_PROPS_FILE_NAME);return bU.existsSync(e)||(e=Ha.join(__dirname,"../","hdb_boot_properties.file")),e}a(sZ,"getPropsFilePath");function iZ(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:a(function(){clearTimeout(r)},"cancel")}}a(iZ,"timeoutPromise");async function oZ(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=M8.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(oZ,"isPortTaken");function aZ(e){try{return Ir.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){vn.error(`Error checking operation against cluster ops ${t}`)}return!1}a(aZ,"isClusterOperation");function cZ(e,t){let r=(we(),M(mt)).getDatabases();if(!r[e])return I_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return I_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(cZ,"checkGlobalSchemaTable");function lZ(e,t){if(rs(t)){vn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(rs(e)||Vi(e)){vn.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){vn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){vn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(lZ,"getClusterUser");function uZ(){TU.parsePromise=function(e,t,r){return new Promise(function(n,s){TU.parse(e,{header:!0,transformHeader:CU,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(uZ,"promisifyPapaParse");function CU(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(CU,"removeBOM");function dZ(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;vn.info(`Got cluster status event response: ${x8(s)}`);try{i.cancel()}catch{vn.error("Error trying to cancel timeout.")}n(s)})})}a(dZ,"createEventPromise");function fZ(e,t){let r=OU(e);if(r)return r;let n=PU(e,t);if(n)return n}a(fZ,"checkSchemaTableExist");function OU(e){let{getDatabases:t}=(we(),M(mt));if(!t()[e])return I_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(OU,"checkSchemaExists");function PU(e,t){let{getDatabases:r}=(we(),M(mt));if(!r()[e][t])return I_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(PU,"checkTableExists");function mZ(){let e=A_().utc().add(1,"d").startOf("d").unix(),t=A_().utc().unix();return e-t}a(mZ,"getStartOfTomorrowInSeconds");function pZ(){return A_().utc().format("DD-MM-YYYY")}a(pZ,"getLimitKey");function hZ(e){try{let t=new v8(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){vn.error("Got an error back ticking items."),vn.error(t)}}a(hZ,"backtickASTSchemaItems");function EZ(e){return[e]}a(EZ,"createForkArgs");function _Z(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(_Z,"autoCastBoolean");function gZ(e,t){let{getDatabases:r}=(we(),M(mt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(gZ,"getTableHashAttribute");function SZ(e){let{getDatabases:t}=(we(),M(mt));return t()[e]!==void 0}a(SZ,"doesSchemaExist");function TZ(e,t){let{getDatabases:r}=(we(),M(mt));return r()[e]?.[t]!==void 0}a(TZ,"doesTableExist");function yZ(e){try{return JSON.stringify(e)}catch{return e}}a(yZ,"stringifyObj");function RZ(e){let t=A_.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(RZ,"ms_to_time");function bZ(e,t){let r=Ha.basename(e,Ha.extname(e));return Ha.join(Ha.dirname(e),r+t)}a(bZ,"changeExtension");function eA(){if(process.env[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=B8(process.argv);if(e[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(eA,"getEnvCliRootPath");var Xb;function AZ(){if(Xb)return Xb;let e=eA();if(eA()&&bU.pathExistsSync(Ha.join(e,Ir.HDB_CONFIG_FILE)))return Xb=!0,!0}a(AZ,"noBootFile");function IZ(e,t){let r;return e.protocol==="http:"?r=k8:r=F8,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8"),o.body="",o.on("data",c=>{o.body+=c}),o.on("end",()=>{n(o)})});i.on("error",o=>{s(o)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}a(IZ,"httpRequest");function wZ(e){if(!e.schema&&!e.database){e.schema=Ir.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(wZ,"transformReq");function NZ(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(NZ,"convertToMS");var I_=Jr()});var bt=v((UOe,BU)=>{"use strict";var Pm=(H(),M(W)),CZ=oe(),Un=ae(),Lm=require("path"),OZ=require("minimist"),LU=require("fs-extra"),DU=require("lodash");Un.initSync();var{CONFIG_PARAMS:qa,DATABASES_PARAM_CONFIG:wm,SYSTEM_SCHEMA_NAME:w_}=Pm,Nm,Cm,Om;function MU(){if(Nm!==void 0)return Nm;if(Un.getHdbBasePath()!==void 0)return Nm=Un.get(qa.STORAGE_PATH)||Lm.join(Un.getHdbBasePath(),Pm.DATABASES_DIR_NAME),Nm}a(MU,"getBaseSchemaPath");function vU(){if(Cm!==void 0)return Cm;if(Un.getHdbBasePath()!==void 0)return Cm=xU(w_),Cm}a(vU,"getSystemSchemaPath");function UU(){if(Om!==void 0)return Om;if(Un.getHdbBasePath()!==void 0)return Om=Un.get(Pm.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Lm.join(Un.getHdbBasePath(),Pm.TRANSACTIONS_DIR_NAME),Om}a(UU,"getTransactionAuditStoreBasePath");function PZ(e,t){let r=Un.get(qa.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Lm.join(UU(),e.toString())}a(PZ,"getTransactionAuditStorePath");function xU(e,t){e=e.toString(),t=t&&t.toString();let r=Un.get(Pm.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Lm.join(MU(),e)}a(xU,"getSchemaPath");function LZ(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,OZ(process.argv));let n=r[qa.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!CZ.isObject(n))throw o;i=n}for(let o of i){let c=o[w_];if(!c)continue;let l=Un.get(qa.DATABASES);l=l??{};let u=c?.tables?.[t]?.[wm.PATH];if(u)return DU.set(l,[w_,wm.TABLES,t,wm.PATH],u),Un.setProperty(qa.DATABASES,l),u;let d=c?.[wm.PATH];if(d)return DU.set(l,[w_,wm.PATH],d),Un.setProperty(qa.DATABASES,l),d}}let s=r[qa.STORAGE_PATH.toUpperCase()];if(s){if(!LU.pathExistsSync(s))throw new Error(s+" does not exist");let i=Lm.join(s,e);return LU.mkdirsSync(i),Un.setProperty(qa.STORAGE_PATH,s),i}return vU()}a(LZ,"initSystemSchemaPaths");function DZ(){Nm=void 0,Cm=void 0,Om=void 0}a(DZ,"resetPaths");BU.exports={getBaseSchemaPath:MU,getSystemSchemaPath:vU,getTransactionAuditStorePath:PZ,getTransactionAuditStoreBasePath:UU,getSchemaPath:xU,initSystemSchemaPaths:LZ,resetPaths:DZ}});var xn=v((kOe,GU)=>{"use strict";var MZ=Jr().LMDB_ERRORS_ENUM,BOe=require("lmdb"),vZ=Wt(),FOe=require("buffer").Buffer,{OVERFLOW_MARKER:FU,MAX_SEARCH_KEY_LENGTH:N_}=vZ,kU=["number","string","symbol","boolean","bigint"];function UZ(e){if(e=e?.primaryStore||e,!e)throw new Error(MZ.ENV_REQUIRED)}a(UZ,"validateEnv");function xZ(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(xZ,"stringifyData");function BZ(e){return e instanceof Date?e.valueOf():e}a(BZ,"convertKeyValueToWrite");function FZ(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(kU.includes(typeof e))return e.length>N_?[e.slice(0,N_)+FU]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(kU.includes(typeof i))i.length>N_?r.push(i.slice(0,N_)+FU):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(FZ,"getIndexedValues");var C_=0,HU=0;function qU(){HU=Date.now()-performance.now()}a(qU,"adjustStartTime");qU();var kZ=6e4;setInterval(qU,kZ).unref();function HZ(){let e=performance.now()+HU;return e>C_?(C_=e,e):(C_+=488e-6,C_)}a(HZ,"getNextMonotonicTime");GU.exports={validateEnv:UZ,stringifyData:xZ,convertKeyValueToWrite:BZ,getNextMonotonicTime:HZ,getIndexedValues:FZ}});var Dm=v((qOe,$U)=>{"use strict";var qZ=(H(),M(W)).OPERATIONS_ENUM,tA=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=qZ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};$U.exports=tA});var _e=v(($Oe,YU)=>{"use strict";var xu=Jr(),GZ=(H(),M(W)),O_=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,VU),this.statusCode=n||xu.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(xu.DEFAULT_ERROR_MSGS[n]?xu.DEFAULT_ERROR_MSGS[n]:xu.DEFAULT_ERROR_MSGS[xu.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&&J()[s](i)}},rA=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}},nA=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function VU(e,t,r,n=GZ.LOG_LEVELS.ERROR,s=null,i=!1){if(KU(e))return e;let o=new O_(e,t,r,n,s);return i&&delete o.stack,o}a(VU,"handleHDBError");function Bu(e){this.message=e}a(Bu,"Violation");Bu.prototype=Object.create(Error.prototype);Bu.prototype.constructor=Bu;Bu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var sA=class extends Bu{static{a(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function KU(e){return e.__proto__.constructor.name===O_.name}a(KU,"isHDBError");YU.exports={isHDBError:KU,handleHDBError:VU,ClientError:rA,ServerError:nA,AccessViolation:sA,Violation:Bu,hdbErrors:xu}});var Mm=v((YOe,QU)=>{"use strict";var KOe=Dm(),P_=(H(),M(W)),iA=oe(),WU=J(),$Z=require("uuid"),{handleHDBError:L_,hdbErrors:VZ}=_e(),{HDB_ERROR_MSGS:D_,HTTP_STATUS_CODES:M_}=VZ;QU.exports=zU;function zU(e,t,r){for(let s=0;s<t.length;s++)jU(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];KZ(i,r,e.operation)}}a(zU,"processRows");zU.validateAttribute=jU;function jU(e){if(Buffer.byteLength(String(e))>P_.INSERT_MAX_CHARACTER_SIZE)throw L_(new Error,D_.ATTR_NAME_LENGTH_ERR(e),M_.BAD_REQUEST,void 0,void 0,!0);if(iA.isEmptyOrZeroLength(e)||iA.isEmpty(e.trim()))throw L_(new Error,D_.ATTR_NAME_NULLISH_ERR,M_.BAD_REQUEST,void 0,void 0,!0)}a(jU,"validateAttribute");function KZ(e,t,r){if(!e.hasOwnProperty(t)||iA.isEmptyOrZeroLength(e[t])){if(r===P_.OPERATIONS_ENUM.INSERT||r===P_.OPERATIONS_ENUM.UPSERT){e[t]=$Z.v4();return}throw WU.error("Update transaction aborted due to record with no hash value:",e),L_(new Error,D_.RECORD_MISSING_HASH_ERR,M_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>P_.INSERT_MAX_CHARACTER_SIZE)throw WU.error(e),L_(new Error,D_.HASH_VAL_LENGTH_ERR,M_.BAD_REQUEST,void 0,void 0,!0)}a(KZ,"validateHash")});function nx(e){aA=e}function jZ(){zZ=setInterval(function(){for(let e of oA)if(e.stale){let t=e.getContext()?.url;ex.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},WZ).unref()}var cA,ZU,ex,tx,rx,JU,oA,YZ,Mo,vm,XU,aA,vo,v_,WZ,zZ,Um=se(()=>{cA=b(xn()),ZU=b(_e()),ex=b(J()),tx=b(ae());H();rx=b(oe()),JU=100,oA=new Set,YZ=(0,rx.convertToMS)(tx.get(F.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Mo={CLOSED:0,OPEN:1,LINGERING:2};a(nx,"replicationConfirmation");vo=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=Mo.OPEN;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===Mo.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),oA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(oA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(vm&&!this.overloadChecked&&performance.now()-XU>YZ)throw new ZU.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===Mo.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Mo.LINGERING){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,cA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let p=f;p<this.validated;p++)this.writes[p]?.validate?.(this.timestamp);let m;for(let p=f;p<this.validated;p++){let h=this.writes[p];h&&(h.before||h.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let p=0;p<2;p++){let h;for(let E=f;E<this.validated;E++){let g=this.writes[E];if(!g)continue;let R=g[p===0?"before":"beforeIntermediate"];if(R){let S=R();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(p){throw this.abort(),p}return this.commit(t)})()}catch(f){throw this.abort(),f}n||this.doneReadTxn(),this.open=t?.doneWriting?Mo.LINGERING:Mo.OPEN;let s,i=[],o=0;this.writes=this.writes.filter(f=>f);let c=a(f=>{f.commit(r,f.entry,n)},"doWrite"),l=a(()=>{let f=this.writes[o++];if(f)if(f.key){(n>0||!f.entry)&&(f.entry=f.store.getEntry(f.key));let m=f.store.ifVersion(f.key,f.entry?.version??null,l);s=s||m}else l();else for(let m of this.writes)c(m)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<JU>>n?l():s=this.writes[0].store.transaction(()=>{for(let f of this.writes)f.entry=f.store.getEntry(f.key),c(f);return!0})),s)return vm||(vm=s,XU=performance.now(),vm.then(()=>{vm=null})),s.then(f=>{if(f){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let m=this.writes[0].store.rootStore.databaseName,p=this.writes[this.writes.length-1];aA&&p&&i.push(aA(m,p.store.getEntry(p.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+JU/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let f=this.next?.commit(t);if(f?.then)return f?.then(m=>({txnTime:r,next:m}));d.next=f}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=Mo.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},v_=class extends vo{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,cA.getNextMonotonicTime)())}getReadTxn(){}},WZ=3e4;a(jZ,"startMonitoringTxns");jZ()});var sx,ns,lA,Fu=se(()=>{sx=require("events"),ns=class extends sx.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new lA;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)}},lA=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function At(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Mo.OPEN&&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 vo;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(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 l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var ix,Ga=se(()=>{ix=b(li());Um();a(At,"transaction");(0,ix._assignPackageExport)("transaction",At);At.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};At.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var dA={};ye(dA,{add:()=>U_,applyReverse:()=>ox,getRecordAtTime:()=>uA,rebuildUpdateBefore:()=>x_});function U_(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 x_(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let o=e[s];if(o?.__op__)if(o.__op__===i.__op__)n||(n={}),n[s]=o;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=o,U_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function ox(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=QZ[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=ax}}function uA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=It(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":ox(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===ax&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=It(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)o[f]&&(s[f]=d[f],o[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var QZ,ax,B_=se(()=>{Ki();a(U_,"add");U_.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)};QZ={add:U_};a(x_,"rebuildUpdateBefore");a(ox,"applyReverse");ax={};a(uA,"getRecordAtTime")});var wr=v(k_=>{var F_=J();for(let e of["trace","debug","info","warn","error","fatal","notify"])F_.logsAtLevel(e)&&(k_[e]=F_[e]);k_.loggerWithTag=e=>F_.loggerWithTag(e,!0);k_.setLogLevel=F_.setLogLevel});var px={};ye(px,{parse:()=>pA,streamAsJSON:()=>Bm,stringify:()=>tl});function Bm(e){return new fA({value:e})}function cx(e){return console.error(e),JSON.stringify(xm(e))}function lx(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function tl(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===fx)return mx(e);if(t.resolution)return t.resolution.then(()=>tl(e));throw t}}function mx(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+=mx(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+tl(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function pA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),ZZ.test(e)?JZ.parse(e):JSON.parse(e)):null}var ux,mA,dx,JZ,XZ,fx,xm,fA,ZZ,hA=se(()=>{ux=require("stream"),mA=b(J()),dx=b(require("json-bigint-fixes")),JZ=(0,dx.default)({useNativeBigInt:!0}),XZ=1e4,fx={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw fx};({errorToString:xm}=mA);a(Bm,"streamAsJSON");fA=class extends ux.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(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(mA.warn("Error serializing in stream",c),o={done:!1,value:{error:xm(c)}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:xm(c)}},i={next:a(()=>({done:!0}),"next")}}if(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),cx)}catch(s){yield cx(s)}else yield tl(t)}else yield tl(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);lx(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(xm(t)),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>XZ?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 lx(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(xm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(cx,"handleError");a(lx,"when");a(tl,"stringify");a(mx,"jsStringify");ZZ=/[[,:]\s*-?\d{16,}/;a(pA,"parse")});var Ax={};ye(Ax,{asyncSerialization:()=>TA,contentTypes:()=>SA,findBestSerializer:()=>q_,getDeserializer:()=>Fo,hasAsyncSerialization:()=>yA,registerContentHandlers:()=>Hm,serialize:()=>qm,serializeMessage:()=>Bo,toCsvStream:()=>H_});function e9(e){try{return e?.[0]===123?gA(e):e}catch{return e}}function Hm(e){e.register(t9,{serializers:[{regex:/^application\/json$/,serializer:Bm},{regex:/^application\/cbor$/,serializer:a(function(t){return new rl.EncoderStream(km).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?nl.Readable.from((0,Yi.encodeIter)(t,km)):(0,Yi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),H_(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Yi.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,rl.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function q_(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 l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let h of d){let E=h.indexOf("=");m[h.substring(0,E)]=h.substring(E+1)}f=+m.q;let p=hn.get(u);if(p){let h=(p.q||1)*f;h>s&&(n=p,i=p.type||u,s=h,o=m)}}if(!n){if(r)throw new _x.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(hn.keys()).join(", "),406);n=hn.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function qm(e,t,r){let n=Ex&&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||e instanceof vs)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=q_(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&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){if(e.mapError){let c=e.getColumns;e=e.mapError(l=>(l.toJSON=()=>({error:l.name,message:l.message,...l.partialObject}),_A.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,xo.createBrotliCompress)({params:{[xo.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?xo.constants.BROTLI_MODE_TEXT:xo.constants.BROTLI_MODE_GENERIC,[xo.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>Ex?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,xo.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function Bo(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;Uo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=q_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=Fm(e);return Uo?.length>0?(Uo.length===1?Uo[0]:Promise.all(Uo)).then(()=>Bo(e,t,!0)):n}finally{Uo=void 0}}function TA(e){if(Uo)Uo.push(e);else throw new Error("Unable to serialize asynchronously")}function yA(){return!!Uo}function r9(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 s9(e){return n9.includes(e)}function i9(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,o]=s.split("=");r[i.trim()]=o.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Fo(e="",t=!1){let r=i9(e),n=r.type&&hn.get(r.type)?.deserialize||o9(r);return t?s=>r9(s).then(n):n}function o9(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!s9(e.parameters.charset)&&_A.default.info(`Unknown Buffer encoding ${e.parameters.charset} in content-type. Proceeding anyways.`),t=>({contentType:e.type,data:t.toString(e.parameters?.charset||"utf-8")})):e.type==="application/octet-stream"?t=>t:t=>{if(e.type==="")try{if(t?.[0]===123)return gA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function a9(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)}}}}}function H_(e,t){let r=nl.default.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 Tx.Transform(n,s);return r.pipe(i)}var Yi,rl,xo,_x,nl,gx,EA,Sx,_A,Tx,yx,Rx,Fm,gA,km,hn,SA,hx,bx,t9,Ex,Uo,n9,ko=se(()=>{hA();Yi=require("msgpackr"),rl=require("cbor-x"),xo=require("zlib"),_x=b(_e()),nl=b(require("stream"));Hr();gx=b(li()),EA=b(ae());H();Sx=b(require("yaml")),_A=b(wr());ss();Tx=require("json2csv"),yx=b(require("fastify-plugin")),Rx=EA.default.get(F.SERIALIZATION_BIGINT)!==!1,Fm=Rx?tl:JSON.stringify,gA=Rx?pA:JSON.parse,km={useRecords:!1,useToJSON:!0},hn=new Map,SA=hn;Be.contentTypes=SA;(0,gx._assignPackageExport)("contentTypes",SA);hn.set("application/json",{serializeStream:Bm,serialize:Fm,deserialize(e){return gA(e)},q:.8});hx=new rl.Encoder(km);hn.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new rl.EncoderStream(km).end(e)},serialize:hx.encode,deserialize:hx.decode,q:1});hn.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?nl.Readable.from((0,Yi.encodeIter)(e,km)):(0,Yi.pack)(e)},serialize:Yi.pack,deserialize:Yi.unpack,q:.9});hn.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),H_(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]),H_(e,e?.getColumns?.())},q:.1});hn.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return nl.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});hn.set("text/yaml",{serialize(e){return Sx.stringify(e,{aliasDuplicateObjects:!1})},q:.7});hn.set("text/event-stream",{serializeStream:a(function(e){return nl.Readable.from(a9(e,this.serialize))},"serializeStream"),serialize:a(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+`
|
|
2
2
|
`),e.data){let r=e.data;typeof r=="object"&&(r=Fm(r)),t+="data: "+r+`
|
|
3
3
|
`}return e.id&&(t+="id: "+e.id+`
|
|
4
4
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
@@ -7,18 +7,18 @@
|
|
|
7
7
|
|
|
8
8
|
`:`data: ${e}
|
|
9
9
|
|
|
10
|
-
`},"serialize"),compressible:!1,q:.8});hn.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});bx={type:"application/json",serializeStream:Bm,serialize:Fm,deserialize:e9,q:.5};hn.set("*/*",bx);hn.set("",bx);a(e9,"tryJSONParse");a(Hm,"registerContentHandlers");t9=(0,yx.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=q_(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&o.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});a(q_,"findBestSerializer");Ex=EA.default.get(F.HTTP_COMPRESSIONTHRESHOLD);a(qm,"serialize");a(Bo,"serializeMessage");a(TA,"asyncSerialization");a(yA,"hasAsyncSerialization");a(r9,"streamToBuffer");n9=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(s9,"isBufferEncoding");a(i9,"parseContentType");a(Fo,"getDeserializer");a(o9,"deserializerUnknownType");a(a9,"transformIterable");a(H_,"toCsvStream")});var Q_={};ye(Q_,{Blob:()=>vs,blobsWereEncoded:()=>il,cleanupOrphans:()=>y9,databasePaths:()=>bA,decodeBlobsWithWrites:()=>j_,decodeFromDatabase:()=>qo,decodeWithBlobCallback:()=>Vm,deleteBlob:()=>Y_,deleteBlobsInObject:()=>Va,deleteRootBlobPathsForDB:()=>wA,encodeBlobsAsBuffers:()=>g9,encodeBlobsWithFilePath:()=>z_,findBlobsInObject:()=>sl,getFileId:()=>W_,getFilePathForBlob:()=>vx,getRootBlobPathsForDB:()=>Gu,isSaving:()=>f9,saveBlob:()=>$m,setDeletionDelay:()=>d9,startPreCommitBlobsForRecord:()=>NA});function Dx(){}function Y_(e){let t=vx(e);t&&setTimeout(()=>{(0,ze.unlink)(t,r=>{r&&Bt.default.debug?.("Error trying to remove blob file",r)})},Mx)}function d9(e){Mx=e}function $m(e,t=!1){let r=qr.get(e);if(!r)r={storageIndex:0,fileId:null,store:Bn},qr.set(e,r);else{if(r.fileId)return r;r.store=Bn}return r.deleteOnFailure=t,p9(r),r.source?RA(e,r.source,r):r.contentBuffer?m9(e,r):RA(e,$a.Readable.from(e.stream()),r),r}function RA(e,t,r){let{filePath:n,fileId:s,store:i,compress:o,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,ze.createWriteStream)(n,{autoClose:!1,flags:"w"}),m=!1;e.size!==void 0&&(f.write(h(e.size)),m=!0);let p;o?(m||f.write(l9),p=(0,V_.createDeflate)(),(0,$a.pipeline)(t,p,f,E)):(m||f.write(c9),(0,$a.pipeline)(t,f,E));function h(g){let R=BigInt(g),S=new Uint8Array(Nr),y=new DataView(S.buffer);return R|=BigInt(o?IA:Lx)<<48n,y.setBigInt64(0,R),S}a(h,"createHeader");function E(g){let R=f.fd;if(g){if(i.unlock(d,0),R&&((0,ze.close)(R),f.fd=null),r.deleteOnFailure)(0,ze.unlink)(n,S=>{S&&Bt.default.debug?.("Error while deleting aborted blob file",S)});else try{if((0,ze.statSync)(n).size===0){let S=Buffer.from(g.toString());(0,ze.writeFile)(n,Buffer.concat([h(BigInt(S.length)+0xff000000000000n),S]),y=>{y&&Bt.default.debug?.("Error write error message to blob file",y)})}}catch(S){Bt.default.debug?.("Error checking blob file after abort",S)}u(g)}else{if(!m){m=!0;let S=p?p.bytesWritten:f.bytesWritten-Nr;e.size=S,(0,ze.write)(R,h(S),0,Nr,0,E);return}i.unlock(d,0),c?(0,ze.fdatasync)(R,S=>{S&&u(S),l(),(0,ze.close)(R),f.fd=null}):(l(),(0,ze.close)(R),f.fd=null)}}a(E,"finished")}),e}function W_(e){return qr.get(e)?.fileId}function f9(e){return qr.get(e)?.saving}function vx(e){let t=qr.get(e);return t?.fileId&&qu(t)}function Gu(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=bA.get(e);if(!t){if(!e.databaseName)return Bt.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,K_.get)(F.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,zi.join)(n,e.databaseName)):t=[(0,zi.join)((0,K_.getHdbBasePath)(),"blobs",e.databaseName)],bA.set(e,t)}return t}async function wA(e){let t=Gu(e);t&&await Promise.all(t.map(r=>Ux(r)))}async function Ux(e){if((0,ze.existsSync)(e)){for(let t of await(0,Fn.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await Ux((0,zi.join)(e,t.name));else try{await(0,Fn.unlink)((0,zi.join)(e,t.name))}catch(r){Bt.default.warn?.("Error deleting file",r)}try{await(0,Fn.rmdir)(e)}catch(t){Bt.default.warn?.("Error deleting directory",t)}}}function qu({storageIndex:e,fileId:t,store:r}){let n=Gu(r);return(0,zi.join)(n[e],t.slice(-9,-6)||"0",t.slice(-6,-3)||"0",t.length<=9?t.slice(-3):t.slice(0,-9)+t.slice(-3))}function m9(e,t){let r=t.contentBuffer,n=r.length;if(!(n<Px))return e.size=n,RA(e,$a.Readable.from([r]),t)}function p9(e){let t=Gu(e.store),r=h9(),n=t?.length>1?E9(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=qu(e),o=(0,zi.dirname)(i);(0,ze.existsSync)(o)||(0,AA.ensureDirSync)(o),e.filePath=i}function h9(){let e=Cx.get(Bn);if(!e){let t=0,r=Gu(Bn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let o=0;if((0,ze.existsSync)(n))for(let c of(0,ze.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>o&&(o=l)}s+=o,n=(0,zi.join)(n,o.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(Bn.getUserSharedBuffer("blob-file-id",e.buffer)),Cx.set(Bn,e)}return Number(Atomics.add(e,0,1n))}function E9(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array($_);for(let i=0;i<s.length;i++)s[i]=i%e.length;e.frequencyTable=s}return(e.lastUpdated??0)+6e4<r&&(e.lastUpdated=r,_9(e)),e.frequencyTable[t%$_]}async function _9(e){if(!Fn.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let o;try{o=await(0,Fn.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,AA.ensureDirSync)(s),o=await(0,Fn.statfs)(s)}let c=o.bavail*o.bsize;return Math.pow(c,.8)})),r=new Array($_),n=t.map(s=>1/s);for(let s=0;s<$_;s++){let i=1/0,o=0;for(let c=0;c<n.length;c++)n[c]<i&&(o=c,i=n[c]);n[o]+=1/t[o],r[s]=o}e.frequencyTable=r}function z_(e,t,r){ku=t,Bn=r,il=!1;try{return e()}finally{ku=void 0,Bn=void 0}}function g9(e){Xr=[];let t;try{t=e()}catch(n){throw Xr=void 0,n}let r=Xr.length<2?Xr[0]:Promise.all(Xr);return Xr=void 0,r?r.then(()=>e()):t}function j_(e,t,r){try{Xr=[],Ho=r,Bn=t,e()}catch(s){throw Ho=void 0,Xr=void 0,s}Ho=void 0;let n=Xr.length<2?Xr[0]:Promise.all(Xr);return Xr=void 0,n}function Vm(e,t,r){Bn=r;try{return Ho=t,e()}finally{Ho=void 0}}function qo(e,t){return Bn=t,e()}function Va(e){sl(e,t=>{Y_(t)})}function sl(e,t){if(e instanceof vs)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&sl(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&sl(e[r],t)}}function NA(e,t){let r;for(let n in e){let s=e[n];if(s instanceof Hu&&s.saveBeforeCommit){Bn=t;let i=$m(s,!0).saving??Promise.resolve();r=r?Promise.all(r,i):i}}return r}function T9(){return class{static{a(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}async function y9(e){let t,r,n=0;for(let u in e){let d=e[u];if(t=d.primaryStore.rootStore,r=d.auditStore,r)break}let s=new Set,i=Gu(t);if(i)for(let u of i)await o(u);return await c(),n;async function o(u){try{if(!(0,ze.existsSync)(u))return;for(let d of await(0,Fn.readdir)(u,{withFileTypes:!0})){let f=(0,zi.join)(u,d.name);if(d.isDirectory())await o(f);else if(s.size%1e6===0&&Bt.default.info?.("Finding all blobs for orphan check, paths accumulated",s.size),s.add(f),s.size%2===0){let m=(0,Ox.getHeapStatistics)();m.used_heap_size>m.heap_size_limit*.8&&await c()}}}catch(d){Bt.default.error?.("Error searching path for blobs",u,d)}}a(o,"searchPath");async function c(){for(let u in e){Bt.default.warn?.("Checking for references to potential orphaned blobs in table",u);let d=e[u];for(let f of d.primaryStore.getRange({versions:!0,snapshot:!1,lazy:!0}))try{f.metadataFlags&Zr&&f.value&&l(f.value),await new Promise(setImmediate)}catch(m){Bt.default.error?.("Error searching table",u," for references to potential orphaned blobs failed",m)}}Bt.default.warn?.("Checking for references to potential orphaned blobs in the audit log");for(let{value:u}of r.getRange({start:1,snapshot:!1,lazy:!0}))try{let d=It(u),f=r.tableStores[d.tableId],m=f?.getEntry(d.recordId);(!m||m.version!==d.version||!m.value)&&l(d.getValue(f))}catch(d){Bt.default.error?.("Error searching audit log for references to potential orphaned blobs failed",d)}Bt.default.warn?.("Deleting",s.size,"orphaned blobs"),n+=s.size;for(let u of s)try{await(0,Fn.unlink)(u)}catch(d){Bt.default.warn?.("Error deleting file",d)}Bt.default.warn?.("Finished deleting",s.size,"orphaned blobs"),s.clear()}a(c,"removePathsThatAreNotReferenced");function l(u){sl(u,d=>{if(d instanceof Hu){let f=qr.get(d);if(f.fileId!=null){let m=qu(f);s.has(m)&&s.delete(m)}}})}a(l,"checkObjectForReferences")}var Wi,Fn,ze,V_,$a,AA,K_,zi,Bt,Ox,Px,Nr,Lx,IA,Ix,c9,l9,wx,qr,Ho,vs,ku,Xr,Bn,il,Gm,G_,u9,Nx,Hu,Mx,bA,Cx,$_,S9,ss=ne(()=>{Wi=require("msgpackr"),Fn=require("node:fs/promises"),ze=require("node:fs"),V_=require("node:zlib"),$a=require("node:stream"),AA=require("fs-extra"),K_=b(ae());H();zi=require("path"),Bt=b(wr());ko();Ki();Ox=require("node:v8"),Px=8192,Nr=8,Lx=0,IA=1,Ix=255,c9=new Uint8Array([0,Lx,255,255,255,255,255,255]),l9=new Uint8Array([0,IA,255,255,255,255,255,255]),wx=0xffffffffffff,qr=new WeakMap,vs=global.Blob||T9(),il=!1,Gm=new Uint8Array(8),G_=new DataView(Gm.buffer),u9=6e4;a(Dx,"InstanceOfBlobWithNoConstructor");Dx.prototype=vs.prototype;Nx=!1,Hu=class e extends Dx{static{a(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size),t?.saveBeforeCommit!=null&&(this.saveBeforeCommit=t.saveBeforeCommit)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=qr.get(this),{start:r,end:n,contentBuffer:s,asString:i}=t;return i||(s&&(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),s?(t.asString=s.toString(),t.asString):(yA()&&TA(this.bytes().then(o=>t.contentBuffer=o)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=qr.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=qu(t),o,c=a(async()=>{let l,u=Nr;try{if(l=await(0,Fn.readFile)(i),l.length>=Nr){l.copy(Gm,0,0,Nr);let f=G_.getBigUint64(0);if(Number(f>>48n)===Ix)throw new Error("Error in blob: "+l.subarray(Nr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<wx&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,p=t.fileId+":blob";if(o)throw new Error(`Incomplete blob for ${i}`);return new Promise((h,E)=>{if(m.attemptLock(p,0,()=>(o=!0,h(c()))))return o=!0,m.unlock(p,0),h(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return a(d,"checkCompletion"),l[1]===IA?new Promise((f,m)=>{(0,V_.deflate)(l.subarray(Nr),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(Nr))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=qr.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(E){E.enqueue(r),E.close()}});let i=qu(t),o,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,g=a((R,S)=>{(0,ze.open)(i,"r",(y,N)=>{if(y){if(y.code==="ENOENT"&&f!==!1&&(Bt.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),g(R,S)},20).unref();S(y),p.#e?.forEach(I=>I(y))}else o=N,R(N)})},"openFile");return new Promise(g)},pull:a(E=>{let g=0,R=100;return new Promise(a(function S(y,N){function I(ee){(0,ze.close)(o),clearTimeout(d),u&&u.close(),N(ee),p.#e?.forEach(q=>q(ee))}a(I,"onError");let $=Buffer.allocUnsafe(262144);(0,ze.read)(o,$,0,$.length,c,(ee,q,k)=>{if(l+=q,ee)return I(ee);if(c===0){if(q<Nr){R-- >0&&f!==!1?(h(),Bt.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>S(y,N),20).unref()):(Bt.default.debug?.("File was empty, throwing error",i,R),I(new Error(`Blob ${t.fileId} was empty`)));return}k.copy(Gm,0,0,Nr);let j=G_.getBigUint64(0);if(Number(j>>48n)===Ix)return I(new Error("Error in blob: "+k.subarray(Nr,q)));if(g=Number(j&0xffffffffffffn),g<wx&&p.size!==g&&(p.size=g,p.#t))for(let Y of p.#t)Y(g);k=k.subarray(Nr,q),l-=Nr}else if(q===0){let j=Buffer.allocUnsafe(8);return(0,ze.read)(o,j,0,Nr,0,Y=>{if(Y)return I(Y);if(Gm.set(j),g=Number(G_.getBigUint64(0)&0xffffffffffffn),g>l){h()?u?d=setTimeout(()=>{I(new Error(`File read timed out reading from ${i}`))},u9).unref():(u=(0,ze.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(y,N))}),S(y,N)):m?I(new Error("Blob is incomplete")):(m=!0,S(y,N));return}(0,ze.close)(o),E.close(),y()})}else k=k.subarray(0,q);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=q,S(y,N);s&&l>=s&&(l>s&&(k=k.subarray(0,s-c)),l=g=s),n&&n>c&&(k=k.subarray(n-c))}c+=q;try{E.enqueue(k)}catch(j){return Bt.default.debug?.("Error enqueuing chunk",j),y()}l===g&&((0,ze.close)(o),E.close()),y()})},"readMore"))},"pull"),cancel(){(0,ze.close)(o),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,g=t.fileId+":blob";f=!E.attemptLock(g,0,()=>{f=!1}),f||E.unlock(g,0)}return f}}slice(t,r,n){let s=qr.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};qr.set(i,o),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let o={...s,contentBuffer:s.contentBuffer.subarray(t,r)};qr.set(i,o),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(){return Nx||(Nx=!0,Bt.default.warn?.("save() method on Blob is deprecated, use the 'saveBeforeCommit' flag on the Blob constructor instead")),this.saveBeforeCommit=!0,Promise.resolve()}get written(){return qr.get(this)?.saving??Promise.resolve()}},Mx=500;a(Y_,"deleteBlob");a(d9,"setDeletionDelay");global.createBlob=function(e,t){let r=new Hu(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(qr.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof $a.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=$a.Readable.from(e);else throw new Error("Invalid source type");return r};a($m,"saveBlob");a(RA,"writeBlobWithStream");a(W_,"getFileId");a(f9,"isSaving");a(vx,"getFilePathForBlob");bA=new Map;a(Gu,"getRootBlobPathsForDB");a(wA,"deleteRootBlobPathsForDB");a(Ux,"rimrafSteadily");a(qu,"getFilePath");a(m9,"writeBlobWithBuffer");a(p9,"generateFilePath");Cx=new Map;a(h9,"getNextFileId");$_=128;a(E9,"getNextStorageIndex");a(_9,"createFrequencyTableForStoragePaths");a(z_,"encodeBlobsWithFilePath");a(g9,"encodeBlobsAsBuffers");a(j_,"decodeBlobsWithWrites");a(Vm,"decodeWithBlobCallback");a(qo,"decodeFromDatabase");a(Va,"deleteBlobsInObject");a(sl,"findBlobsInObject");a(NA,"startPreCommitBlobsForRecord");S9=new Wi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Wi.addExtension)({Class:vs,type:11,unpack:a(function(e){let t=S9.unpack(e),r=new Hu;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(qr.set(r,{storageIndex:t[1],fileId:t[2],store:Bn}),Ho)return Ho(r)??r;if(!Bn)throw new Error("No store specified, cannot load blob from storage")}else qr.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:a(function(e){let t=qr.get(e);if(ku!==void 0&&(il=!0,t?.recordId!==void 0&&t.recordId!==ku))throw new Error("Cannot use the same blob in two different records");let r={...e};if(e.type&&(r.type=e.type),e.size!==void 0&&(r.size=e.size),t){if(t.storageBuffer)return t.storageBuffer;if(t.contentBuffer?.length<Px)return r.size=t.contentBuffer.length,(0,Wi.pack)([r,t.contentBuffer])}if(ku!==void 0){if(t=$m(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=ku,(0,Wi.pack)([r,t.storageIndex,t.fileId])}if(t){if(Ho)return Ho(e),(0,Wi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,ze.readFileSync)(qu(t));if(n.length>=Nr&&(n.copy(Gm,0,0,Nr),Number(G_.getBigUint64(0)&0xffffffffffffn)===n.length-Nr))return Buffer.concat([(0,Wi.pack)([r]),n]);if(Xr)Xr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Xr)return Xr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Wi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a(T9,"polyfillBlob");a(y9,"cleanupOrphans")});var Hx={};ye(Hx,{onStorageReclamation:()=>Km,runReclamationHandlers:()=>LA,setAvailableSpaceRatioGetter:()=>b9});function Km(e,t,r){(r||(0,X_.getWorkerIndex)()===(0,X_.getWorkerCount)()-1)&&(J_.has(e)||J_.set(e,[]),J_.get(e).push({priority:0,handler:t}),PA||(PA=setTimeout(LA,Bx).unref()))}async function LA(){for(let[e,t]of J_)try{let r=await kx(e),n=R9/r;for(let s of t){let{priority:i,handler:o}=s;if(s.priority=n,n>1||i>1){let c=o(n>1?n:0);c&&(OA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){OA.default.error?.("Error running storage reclamation handlers",r)}PA=setTimeout(LA,Bx).unref()}function b9(e){kx=e??Fx}var CA,X_,OA,Z_,xx,J_,R9,Bx,PA,Fx,kx,eg=ne(()=>{CA=require("node:fs/promises"),X_=b(tt()),OA=b(wr());H();Z_=b(ae()),xx=b(oe());Z_.default.initSync();J_=new Map,R9=Z_.default.get(F.STORAGE_RECLAMATION_THRESHOLD)??.4,Bx=(0,xx.convertToMS)(Z_.default.get(F.STORAGE_RECLAMATION_INTERVAL))||36e5;a(Km,"onStorageReclamation");Fx=a(async e=>{if(CA.statfs){let t=await(0,CA.statfs)(e);return t.bavail/t.blocks}else return new Promise((t,r)=>{import("hdd-space").then(n=>{n.default(s=>{for(let i of s.parts)if(e.startsWith(i.place))return t(i.free/i.size);return t(1)})})})},"defaultGetAvailableSpaceRatio"),kx=Fx;a(LA,"runReclamationHandlers");a(b9,"setAvailableSpaceRatioGetter")});var Zx={};ye(Zx,{ACTION_32_BIT:()=>ig,ACTION_64_BIT:()=>N9,AUDIT_STORE_OPTIONS:()=>zm,Decoder:()=>al,HAS_BLOBS:()=>Zr,HAS_CURRENT_RESIDENCY_ID:()=>cl,HAS_EXPIRATION_EXTENDED_TYPE:()=>Jm,HAS_ORIGINATING_OPERATION:()=>Qm,HAS_PREVIOUS_RESIDENCY_ID:()=>ll,REMOTE_SEQUENCE_UPDATE:()=>og,createAuditEntry:()=>ul,getLastRemoved:()=>I9,openAuditStore:()=>ng,readAuditEntry:()=>It,removeAuditEntry:()=>sg,setAuditRetention:()=>w9,transactionKeyEncoder:()=>jx});function ng(e){let t=e.auditStore=e.openDB(DA.AUDIT_STORE_NAME,{create:!1,...zm});t||(t=e.auditStore=e.openDB(DA.AUDIT_STORE_NAME,zm),Gx(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,o=vA;Km(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(o=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,p;try{for(let{key:h,value:E}of t.getRange({start:1,snapshot:!1,end:Date.now()-MA/(1+i*i)})){try{m=sg(t,h,E)}catch(g){$u.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=A9){o=10;break}}await m}finally{f===0?o=Math.min(o<<1,MA/10):(Gx(t,p),o>100&&(o=o>>1)),d(void 0),c()}},o).unref()});return u}if(a(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Wm.getWorkerIndex)()===(0,Wm.getWorkerCount)()-1&&c(),(0,Wm.getWorkerIndex)()===0&&!qx)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(qx=!0,$u.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function sg(e,t,r){let n=C9(r),s;if(n&Zr){s=It(r);let i=e.tableStores[s.tableId];if(i){let o=s.type==="message"?null:i?.getEntry(s.recordId);(!o||o.version!==s.version||!o.value)&&qo(()=>Va(s.getValue(i)),i.rootStore)}}if((n&15)===UA){s=s||It(r);let i=s.tableId;e.tableStores[s.tableId]?.getEntry(s.recordId)?.version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function Gx(e,t){xA[0]=t,e.put(Symbol.for("last-removed"),Qx)}function I9(e){let t=e.get(Symbol.for("last-removed"));if(t)return Qx.set(t),xA[0]}function w9(e,t=vA){MA=e,vA=t}function ul(e,t,r,n,s,i,o,c,l,u,d,f,m){let p=Jx[o];if(!p)throw new Error(`Invalid audit entry type ${o}`);let h=1;if(n&&(n>1?Ka.setFloat64(0,n):Us.set(BA),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}R(s),R(t),g(r),Ka.setFloat64(h,e),h+=8,l&cl&&R(u),l&ll&&R(d),l&Jm&&(Ka.setFloat64(h,f),h+=8),l&Qm&&R(Xx[m]),i?g(i):Us[h++]=0,l?Ka.setUint32(n?8:0,p|l|3221225472):Us[n?8:0]=p;let E=Us.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function g(S){let y=h;h+=1,h=(0,ol.writeKey)(S,Us,h);let N=h-y-1;N>127?N>16383?($u.error("Key or username was too large for audit entry",S),h=y+1,Us[y]=0):(Us.copyWithin(y+2,y+1,h),Ka.setUint16(y,N|32768),h++):Us[y]=N}function R(S){S<128?Us[h++]=S:S<16384?(Ka.setUint16(h,S|32768),h+=2):S<1056964608?(Ka.setUint32(h,S|3221225472),h+=4):(Us[h]=255,Ka.setUint32(h+1,S),h+=5)}}function C9(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new al(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function It(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new al(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),o=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&cl&&(m=n.readInt()),i&ll&&(p=n.readInt()),i&Jm&&(h=n.readFloat64()),i&Qm){let y=n.readInt();E=Xx[y]}l=n.readInt();let g=n.position,R=n.position+=l,S;return{type:Jx[i&7],tableId:c,nodeId:o,get recordId(){return(0,ol.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return R>g?(0,ol.readKey)(e,g,R):void 0},get encoded(){return t?e.subarray(t,r):e},get size(){return t!==void 0&&r!==void 0?r-t:e.byteLength},getValue(y,N,I){if(i&tg||i&Ym&&!N)return S||(S=qo(()=>y.decoder.decode(e.subarray(n.position,r)),y.rootStore)),S;if(i&Ym&&I)return uA(y.getEntry(this.recordId),I,y)},getBinaryValue(){return i&(tg|Ym)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return $u.error("Reading audit entry error",n,e),{}}}var ol,rg,DA,Wm,zx,$u,Us,Ka,jx,zm,MA,A9,xA,Qx,vA,qx,tg,Ym,$x,UA,Vx,Kx,Yx,Wx,ig,N9,og,cl,ll,Qm,Jm,Zr,Jx,Xx,al,Ki=ne(()=>{ol=require("ordered-binary"),rg=b(ae()),DA=b(Wt());H();Wm=b(tt()),zx=b(oe());dl();$u=b(J());B_();ss();eg();(0,rg.initSync)();Us=Buffer.alloc(2816),Ka=new DataView(Us.buffer,Us.byteOffset,2816),jx={writeKey(e,t,r){return e===jm?(t.set(jm,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,ol.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,ol.readKey)(e,t,r)}},zm={encoding:"binary",keyEncoder:jx},MA=(0,zx.convertToMS)((0,rg.get)(F.LOGGING_AUDITRETENTION))||86400*3,A9=1e3,xA=new Float64Array(1),Qx=new Uint8Array(xA.buffer),vA=1e4,qx=!1;a(ng,"openAuditStore");a(sg,"removeAuditEntry");a(Gx,"updateLastRemoved");a(I9,"getLastRemoved");a(w9,"setAuditRetention");tg=16,Ym=32,$x=1,UA=2,Vx=3,Kx=4,Yx=5,Wx=6,ig=14,N9=15,og=11,cl=512,ll=1024,Qm=2048,Jm=4096,Zr=8192,Jx={put:$x|tg,[$x]:"put",delete:UA,[UA]:"delete",message:Vx|tg,[Vx]:"message",invalidate:Kx|Ym,[Kx]:"invalidate",patch:Yx|Ym,[Yx]:"patch",relocate:Wx,[Wx]:"relocate"},Xx={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(ul,"createAuditEntry");a(C9,"readAction");a(It,"readAuditEntry");al=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),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(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function ag(){return FA||(FA=Xe({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),FA}function P9(e){return e=e.replace(O9,t=>{let[r,n,s,i]=t.split(".").map(o=>parseInt(o));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function L9(e){if(e.length!==4)throw new Error(`nodeHash must be exactly 4 bytes (32 bits); got ${e.length} bytes`);return e[0]<<24|e[1]<<16|e[2]<<8|e[3]}function HA(e){let t=e0.default.createHash("shake128",{outputLength:4}),r;return(0,t0.isIPv6)(e)?r=P9(e):r=e.toLowerCase(),L9(Uint8Array.from(t.update(r).digest()))}var e0,t0,kA,FA,O9,qA=ne(()=>{we();e0=b(require("crypto")),t0=require("node:net"),kA=new Map;a(ag,"getAnalyticsHostnameTable");O9=/(\d{1,3}\.){3}\d{1,3}$/;a(P9,"normalizeIPv6");a(L9,"nodeHashToNumber");a(HA,"stableNodeId")});var Go,GA=ne(()=>{Go={TABLE_SIZE:"table-size",DATABASE_SIZE:"database-size",STORAGE_VOLUME:"storage-volume",MAIN_THREAD_UTILIZATION:"main-thread-utilization",RESOURCE_USAGE:"resource-usage",UTILIZATION:"utilization"}});var c0={};ye(c0,{profile:()=>a0,userCodeFolders:()=>ug});async function a0(){let e=(0,lg.pathToFileURL)(s0.PACKAGE_ROOT).toString(),t=new Map,r=100,n=o0/1e6,s=0,i=0;try{let{profile:u}=await Vu.post("Profiler.stop");for(let d of u.nodes)t.set(d.id,d);for(let d of u.nodes)o(d);Ve(i*n,"cpu-usage","harper"),Ve(s*n,"cpu-usage","user")}catch(u){i0.error?.("analytics profiler error:",u)}finally{await Vu.post("Profiler.start")}function o(u){if(u.unassignedCount!==void 0)return u.unassignedCount;let d=u.hitCount;if(u.children)for(let f of u.children)d+=o(t.get(f));return l(u)?(s+=d,d>r&&Ve(d*n,"cpu-usage",u.callFrame.url),u.unassignedCount=0,0):c(u)?(i+=d,d>r&&Ve(d*n,"cpu-usage",u.callFrame.url),u.unassignedCount=0,0):(u.unassignedCount=d,d)}a(o,"getUserHitCount");function c(u){return u.callFrame?.url.startsWith(e)}a(c,"isHarperCode");function l(u){if(ug.some(d=>u.callFrame?.url.startsWith(d)))return!0}a(l,"isUserCode")}var n0,cg,s0,lg,i0,r0,ug,o0,Vu,l0=ne(()=>{n0=require("node:inspector/promises");is();cg=b(ae());H();s0=b(Rt()),lg=require("node:url"),i0=b(J()),r0=(0,cg.getHdbBasePath)(),ug=r0?[(0,lg.pathToFileURL)(r0).toString()]:[];process.env.RUN_HDB_APP&&ug.push((0,lg.pathToFileURL)(process.env.RUN_HDB_APP).toString());o0=1e3,Vu=new n0.Session;Vu.connect();(async()=>{if(ug.length===0)return;await Vu.post("Profiler.enable"),await Vu.post("Profiler.setSamplingInterval",{interval:o0}),await Vu.post("Profiler.start");let e=(0,cg.get)(F.ANALYTICS_AGGREGATEPERIOD)*1e3;setInterval(()=>{a0()},e).unref()})();a(a0,"profile")});var mg={};ye(mg,{addAnalyticsListener:()=>tp,analyticsDelay:()=>YA,calculateCPUUtilization:()=>N0,diffResourceUsage:()=>C0,onAnalyticsAggregate:()=>jA,recordAction:()=>Ve,recordActionBinary:()=>tn,recordHostname:()=>WA,setAnalyticsEnabled:()=>v9});function v9(e){R0=e,clearTimeout(Zm),Zm=null}function U9(e,t){if(typeof e=="number"){let r=t.values,n=r.index++;if(n>=r.length){let s=r;t.values=r=new Float32Array(n*2),r.set(s),r.index=n+1}r[n]=e,t.total+=e}else if(typeof e=="boolean")e&&t.total++,t.count++;else if(typeof e=="function")t.count++;else throw new TypeError("Invalid metric value type "+typeof e)}function x9(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},fg.set(e,o)}function Ve(e,t,r,n,s){if(!R0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=fg.get(i);o?U9(e,o):x9(i,e,t,r,n,s),Zm||B9()}function tn(e,t,r,n,s){Ve(!!e,t,r,n,s)}function tp(e){A0.push(e)}function B9(){$A||=performance.now(),Zm=setTimeout(async()=>{Zm=null;let e=performance.now()-$A;$A=0;let t=[],r={time:Date.now(),period:e,threadId:fl.threadId,metrics:t};for(let[s,i]of fg){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let f of w0){let m=Math.floor(c*f),p=o[m-1];if(m>l){let h=m-l;if(p===d){let E=u[u.length-1];typeof E=="number"?u[u.length-1]={value:E,count:1+h}:E.count+=h}else u.push(h>1?{value:p,count:h}:p),d=p;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,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 O0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:fl.threadId,byThread:!0,...n});for(let s of A0)s(t);fg=new Map,fl.parentPort?fl.parentPort.postMessage({type:b0,report:r}):D0({report:r})},YA).unref()}async function WA(){let e=Be.hostname;en.trace?.("recordHostname server.hostname:",e);let t=HA(e);en.trace?.("recordHostname nodeId:",t);let r=ag();if(!await r.get(t)){let s={id:t,hostname:e};en.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function Ku(e,t){let r=Be.hostname,n=kA.get(r);n?en.trace?.("storeMetric cached nodeId:",n):(n=HA(r),en.trace?.("storeMetric new nodeId:",n),kA.set(r,n));let s={id:[(0,KA.getNextMonotonicTime)(),n],...t};en.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function N0(e,t){let r=e.userCPUTime+e.systemCPUTime;return en.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function C0(e,t){return{userCPUTime:t.userCPUTime-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function F9(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={metric:Go.TABLE_SIZE,database:t,table:s,size:c};en.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),Ku(e,l),n+=c}return n}function u0(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=y0.statSync(s.primaryStore.env.path).size,c=F9(e,r,n),l=o-c,u={metric:Go.DATABASE_SIZE,database:r,size:o,used:c,free:l,audit:i};Ku(e,u),en.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){en.warn?.("Error getting DB size metrics",s)}}function d0(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let o={metric:Go.STORAGE_VOLUME,database:r,...i};Ku(e,o),en.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){en.warn?.("Error getting DB volume metrics",s)}}async function k9(e,t=6e4){let r=zA(),n=P0(),s=new Promise(y=>{let N=performance.now();setImmediate(()=>{let I=performance.now();I-N>5e3&&en.warn?.("Unusually high event queue latency on the main thread of "+Math.round(I-N)+"ms"),N=performance.now()}),n.primaryStore.prefetch([1],()=>{let I=performance.now();I-N>5e3&&en.warn?.("Unusually high task queue latency on the main thread of "+Math.round(I-N)+"ms"),y(I-N)})}),i;for(let y of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(y.value?.time){i=y.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],d;for(let{key:y,value:N}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!N)continue;if(o){if(y>o+t)break}else o=y;d=y;let{metrics:I,threadId:$}=N;for(let ee of I||[]){let{path:q,method:k,type:j,metric:Y,count:le,total:fe,distribution:te,threads:ge,...be}=ee;le||(le=1);let Ye=Y+(q?"-"+q:"");k!==void 0&&(Ye+="-"+k),j!==void 0&&(Ye+="-"+j);let Ge=c.get(Ye);if(Ge){if(Ge.threads){let tr=Ge.threads[$];if(tr)Ge=tr;else{Ge.threads[$]={...be};continue}}Ge.count||(Ge.count=1);let Ar=Ge.count;for(let tr in be){let Qr=be[tr];typeof Qr=="number"&&(Ge[tr]=(Ge[tr]*Ar+Qr*le)/(Ar+le))}Ge.count+=le,fe>=0&&(Ge.total+=fe,Ge.ratio=Ge.total/Ge.count)}else Ge={period:t,...ee},delete Ge.distribution,c.set(Ye,Ge),Ge.byThread&&(Ge.threads=[],Ge.threads[$]={...be},u.push(Ge));if(te){te=te.map(tr=>typeof tr=="number"?{value:tr,count:1}:tr);let Ar=l.get(Ye);Ar?Ar.push(...te):l.set(Ye,te)}}await O0()}for(let y of u){let{path:N,method:I,type:$,metric:ee,count:q,total:k,distribution:j,threads:Y,...le}=y;Y=Y.filter(fe=>fe);for(let fe in le){if(typeof y[fe]!="number")continue;let te=0;for(let ge of Y){let be=ge[fe];typeof be=="number"&&(te+=be)}y[fe]=te}y.count=Y.length,delete y.threads,delete y.byThread}for(let[y,N]of l){let I=c.get(y);N.sort((tr,Qr)=>tr.value>Qr.value?1:-1);let $=I.count-1,ee=[],q=0,k=0,j;for(let tr of w0){let Qr=$*tr;for(;q<Qr;)j=N[k++],q+=j.count,k===1&&q--;let xr=N[k>1?k-2:0];j||(j=N[0]),ee.push(j.value-(j.value-xr.value)*(q-Qr)/j.count)}let[Y,le,fe,te,ge,be,Ye,Ge,Ar]=ee;Object.assign(I,{p1:Y,p10:le,p25:fe,median:te,p75:ge,p90:be,p95:Ye,p99:Ge,p999:Ar})}let f;for(let[,y]of c)y.time=d,Ku(n,y),f=!0;if(f)for(let y of I0)y(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let y={metric:Go.MAIN_THREAD_UTILIZATION,idle:p-f0,active:h-m0,taskQueueLatency:await s,time:m,...process.memoryUsage()};Ku(n,y)}f0=p,m0=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,en.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let g=C0(dg,E);en.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=dg.time?m-dg.time:t,g.cpuUtilization=N0(g,g.period);let R={metric:Go.RESOURCE_USAGE,...g};Ku(n,R),dg=E;let S=lt();u0(n,S),u0(n,{system:S.system}),d0(n,S),d0(n,{system:S.system})}async function p0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function zA(){return h0||(h0=Xe({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function P0(){return E0||(E0=Xe({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function G9(){L0=!0;let e=(0,ep.get)(F.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await k9(YA,e),await p0(zA(),H9),await p0(P0(),q9)},Math.min(e/2,2147483647)).unref()}function D0(e,t){let r=e.report;r.threadId=t?.threadId||fl.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(_0+=n.mean*n.count);r.totalBytesProcessed=_0,t&&(r.metrics.push({metric:Go.UTILIZATION,...t.performance.eventLoopUtilization(g0.get(t))}),g0.set(t,t.performance.eventLoopUtilization())),r.id=(0,KA.getNextMonotonicTime)(),zA().primaryStore.put(r.id,r),L0||G9(),$9&&(M0=K9(r))}async function K9(e){if(await M0,!Ya){let r=(0,Xm.dirname)(D9());try{Ya=await(0,VA.open)((0,Xm.join)(r,"analytics.log"),"r+")}catch{Ya=await(0,VA.open)((0,Xm.join)(r,"analytics.log"),"w+")}}let t=(await Ya.stat()).size;if(t>V9){let r=Buffer.alloc(t);await Ya.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Ya.write(r,{position:0}),await Ya.truncate(r.length),t=r.length}await Ya.write(JSON.stringify(e)+`
|
|
11
|
-
`,t)}function jA(e){e&&I0.push(e)}var fl,S0,T0,Xm,VA,KA,ep,y0,D9,M9,en,fg,R0,Zm,$A,YA,b0,A0,I0,w0,f0,m0,dg,O0,H9,q9,h0,E0,L0,_0,g0,$9,M0,Ya,V9,is=ne(()=>{fl=require("worker_threads"),S0=b(tt());we();T0=b(J()),Xm=require("path"),VA=require("fs/promises"),KA=b(xn()),ep=b(ae());H();Hr();y0=b(require("node:fs"));qA();GA();({getLogFilePath:D9,forComponent:M9}=T0.default);setTimeout(()=>{Promise.resolve().then(()=>l0())},1e3);en=M9("analytics").conditional;(0,ep.initSync)();fg=new Map,R0=(0,ep.get)(F.ANALYTICS_AGGREGATEPERIOD)>-1;a(v9,"setAnalyticsEnabled");a(U9,"recordExistingAction");a(x9,"recordNewAction");a(Ve,"recordAction");Be.recordAnalytics=Ve;a(tn,"recordActionBinary");$A=0,YA=1e3,b0="analytics-report",A0=[],I0=[];a(tp,"addAnalyticsListener");w0=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(B9,"sendAnalytics");a(WA,"recordHostname");a(Ku,"storeMetric");a(N0,"calculateCPUUtilization");a(C0,"diffResourceUsage");a(F9,"storeTableSizeMetrics");a(u0,"storeDBSizeMetrics");a(d0,"storeVolumeMetrics");a(k9,"aggregation");f0=0,m0=0,dg={userCPUTime:0,systemCPUTime:0},O0=a(()=>new Promise(setImmediate),"rest");a(p0,"cleanup");H9=36e5,q9=31536e6;a(zA,"getRawAnalyticsTable");a(P0,"getAnalyticsTable");(0,S0.setChildListenerByType)(b0,D0);a(G9,"startScheduledTasks");_0=0,g0=new Map,$9=!1;a(D0,"recordAnalytics");V9=1e6;a(K9,"logAnalytics");a(jA,"onAnalyticsAggregate")});var F0={};ye(F0,{ENTRY:()=>W9,HAS_EXPIRATION:()=>Eg,HAS_RESIDENCY_ID:()=>tI,HAS_STRUCTURE_UPDATE:()=>_g,LAST_TIMESTAMP_PLACEHOLDER:()=>jm,LOCAL_TIMESTAMP:()=>Y9,METADATA:()=>zu,NEW_TIMESTAMP_PLACEHOLDER:()=>U0,NO_TIMESTAMP:()=>QA,PENDING_LOCAL_TIME:()=>rI,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>BA,RecordEncoder:()=>eI,TIMESTAMP_ASSIGN_LAST:()=>j9,TIMESTAMP_ASSIGN_NEW:()=>x0,TIMESTAMP_ASSIGN_PREVIOUS:()=>B0,TIMESTAMP_PLACEHOLDER:()=>pg,TIMESTAMP_RECORD_PREVIOUS:()=>JA,entryMap:()=>Wa,handleLocalTimeForGets:()=>gg,lastMetadata:()=>ut,recordUpdater:()=>nI,removeEntry:()=>pl});function X9(){return np[0]=np[0]^64,z9.getFloat64(0)}function gg(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(o,c){e.readCount++,ut=null;let l=r.call(this,o,c);return l&&(ut&&(l.metadataFlags=ut[zu],l.localTime=ut.localTime,l.residencyId=ut.residencyId,l.size=ut.size,ut.expiresAt>=0&&(l.expiresAt=ut.expiresAt),ut=null),l.value&&Wa.set(l.value,l),l.key=o),l};let n=e.get;e.get=function(o,c){ut=null;let l=n.call(this,o,c);return ut&&l&&(Wa.set(l,ut),ut=null),l};let s=e.getRange;e.getRange=function(o){let c=s.call(this,o);return o.valuesForKey?c.map(l=>l?.value):o.values===!1||o.onlyCount?c:c.map(l=>(ut&&(l.metadataFlags=ut[zu],l.localTime=ut.localTime,l.residencyId=ut.residencyId,ut.expiresAt>=0&&(l.expiresAt=ut.expiresAt),ut=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let o=i.constructor,c=i.use,l=i.done;o.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,ml.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<ml.length;u++){let d=ml[u].deref();(!d||d.isDone||d.isCommitted)&&ml.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function nI(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",f,m){f||l==null?Wu=i?.localTime?JA|B0:QA:Wu=l?i?.localTime?JA|16384:x0|16384:QA;let p=u?.expiresAt;if(p>=0&&(c|=Eg),rp=c,XA=p,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Wu>0},E,g=0;try{let R=i?.residencyId,S=u?.residencyId;S&&(ZA=S,rp|=tI,g|=cl),R!==S&&(g|=ll,R||(R=0)),c&Eg&&(g|=Jm),u?.originatingOperation&&(g|=Qm),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&d!=="message"&&i.metadataFlags&Zr&&(r.getBinaryFast(i.localTime)||Va(i.value));let y;if(s!==void 0&&(y=z_(()=>e.put(n,s,h),n,e.rootStore),il&&(g|=Zr)),l){let N=u?.user?.username;if(m&&(z_(()=>e.encoder.encode(m),n,e.rootStore),il&&(g|=Zr)),e.encoder.hasStructureUpdate&&(g|=_g,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let I=i?.localTime,$=r.get(I);if($){let ee=It($).previousLocalTime;return y=r.put(I,ul(o,t,n,ee,u?.nodeId??server.replication.getThisNodeId(r)??0,N,d,Yu,g,S,R,p),{ifVersion:E}),y}}y=r.put(s===void 0?U0:jm,ul(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,d,Yu,g,S,R,p,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&Q9.has(d)&&Ve(Yu?.length??1,"db-write",u.tableToTrack,null),y}catch(R){throw R.message+=" id: "+n+" options: "+h,R}}}function pl(e,t,r){if(t)return t.value&&t.metadataFlags&Zr&&!e.auditStore?.getBinaryFast(t.localTime)&&Va(t.value),e.remove(t.key,r)}var v0,hg,pg,jm,BA,U0,Y9,zu,W9,np,z9,QA,x0,j9,B0,JA,Eg,tI,rI,_g,Q9,Wa,J9,Yu,Wu,rp,XA,ZA,ut,eI,ml,dl=ne(()=>{v0=require("msgpackr");Ki();hg=b(J());ss();ss();is();pg=new Uint8Array([1,1,1,1,4,64,0,0]),jm=new Uint8Array([1,1,1,1,1,0,0,0]),BA=new Uint8Array([1,1,1,1,3,64,0,0]),U0=new Uint8Array([1,1,1,1,0,64,0,0]),Y9=Symbol("local-timestamp"),zu=Symbol("metadata"),W9=Symbol("entry"),np=new Uint8Array(8),z9=new DataView(np.buffer,0,8),QA=0,x0=0,j9=1,B0=3,JA=4,Eg=16,tI=32,rI=1,_g=256,Q9=new Set(["put","patch","delete","message","publish"]),Wa=new WeakMap,Wu=0,rp=-1,XA=-1,ZA=0,ut=null,eI=class extends v0.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{a(this,"RecordObject")}getUpdatedTime(){return Wa.get(this)?.version}getExpiresAt(){return Wa.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,o){if(Wu||rp>=0){let c=0,l=Wu;l&&(c+=8,Wu=0);let u=rp,d=XA,f=ZA;u>=0&&(c+=4,rp=-1,d>=0&&(c+=8,XA=-1),f&&(c+=4,ZA=0));let m=J9=n.call(this,i,o|2048|c);Yu=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(pg[4]=l,pg[5]=l>>8,m.set(pg,p),p+=8),il&&(u|=Zr),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|ig<<24),p+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(p,d),p+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,f)),m}else return Yu=n.call(this,i,o),Yu};let s=this.saveStructures;this.saveStructures=function(i,o){let c=s.call(this,i,o);return this.hasStructureUpdate=!0,c}}decode(t,r){ut=null;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,l;if(i===2){if(t.copy)t.copy(np,0,c),c+=8;else for(let m=0;m<8;m++)np[m]=t[c++];l=X9(),i=t[c]}let u,d;i<32&&(i===ig?(o=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(o=i|t[c+1]<<5,c+=2),o&Eg&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&tI&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=qo(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ut={localTime:l,[zu]:o,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:qo(()=>super.decode(t,r),this.rootStore)}catch(c){return hg.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(X9,"getTimestamp");a(gg,"handleLocalTimeForGets");ml=[];setInterval(()=>{for(let e=0;e<ml.length;e++){let t=ml[e].deref();!t||t.isDone||t.isCommitted?ml.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(hg.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):hg.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(nI,"recordUpdater");a(pl,"removeEntry")});function oI(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let f=u(l);for(let p=1;p<e.length;p++){let h=e[p],E=u(h);f=f.concat(E)}let m=new Set;return f.filter(p=>{let h=p.key??p;return m.has(h)?!1:(m.add(h),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?o(f,m):f}function u(f){return f.conditions?oI(f.conditions,f.operator,r,n,s,i,o,c):Xu(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}a(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",y=d(h.conditions,!S,p);return S?(N,I)=>y.some($=>$(N,I)):(N,I)=>y.every($=>$(N,I))}let g=(h.attribute||h[0])===r.primaryKey,R=ip(h,r,i,c,g,p);return m&&E<f.length-1&&p&&(p=a7(r.primaryStore,h.estimated_count,p)),R}).filter(Boolean)}a(d,"mapConditionsToFilters")}function Xu(e,t,r,n,s,i,o){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new rn.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let y=c[0],N=Qi(n.attributes,y);if(N.relationship){if(c.length<2)throw new rn.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let I=N.definition?.tableClass||N.elements?.definition?.tableClass,$=new Map,ee=Xu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,I,s,$);if(N.relationship.to){i[c[0]]=$;let q=!!Qi(I.attributes,N.relationship.to)?.elements;ee=n7(ee,N,I.primaryStore,q,$)}if(N.relationship.from){let q=a(k=>(k?.key!==void 0&&(k=k.key),Xu({attribute:N.relationship.from,value:k},t,r,n,s,$)),"searchEntry");N.elements?(i[c[0]]=$,ee=s7(ee,N,I.primaryStore,$,q)):ee=ee.flatMap(q)}return ee}else if(c.length===1)c=c[0];else throw new rn.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let g;switch(aI[u]||u){case"lt":m=!0,p=l;break;case"le":m=!0,p=l,h=!0;break;case"gt":m=l,E=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,p=l.slice(0),p[p.length-1]=ji.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new rn.ClientError(`Unknown query comparator "${u}"`)}let R;if(typeof m=="string"&&m.length>xs.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,xs.MAX_SEARCH_KEY_LENGTH)+xs.OVERFLOW_MARKER,E=!1,R=ip(e,n,null,i,d)),typeof p=="string"&&p.length>xs.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,xs.MAX_SEARCH_KEY_LENGTH)+xs.OVERFLOW_MARKER,h=!0,R=R??ip(e,n,null,i,d)),r){let y=m;m=p,p=y,y=!E,E=!h,h=y}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new rn.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new rn.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new rn.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new rn.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(R=R??ip(e,n,null,i,d),!R)throw new rn.ClientError(`Unknown search operator ${e.comparator}`)}let S={start:m,end:p,inclusiveEnd:h,exclusiveStart:E,values:!0,versions:d,transaction:t,reverse:r};if(d){let y=f.getRange(S).map(R?function({key:N,value:I}){return this?.isSync?I&&R(I)?N:za.SKIP:new Promise(($,ee)=>setImmediate(()=>{try{$(I&&R(I)?N:za.SKIP)}catch(q){ee(q)}}))}:N=>N.value==null&&!(N.metadataFlags&(kn|hl))?za.SKIP:(o?._freezeRecords&&Object.freeze(N.value),N));return y.hasEntries=!0,y}else return f?f.customIndex?f.customIndex.search(e,o).map(y=>{if(typeof y=="object"&&y){let{key:N,...I}=y,$=n.primaryStore.getEntry(N);return o?._freezeRecords&&Object.freeze($?.value),{...I,...$}}return y}):f.getRange(S).map(R?function({key:y,value:N}){let I;return typeof y=="string"&&y.length>xs.MAX_SEARCH_KEY_LENGTH?I=n.primaryStore.get(N):I={[c]:y},this.isSync?R(I)?N:za.SKIP:new Promise(($,ee)=>setImmediate(()=>{try{$(R(I)?N:za.SKIP)}catch(q){ee(q)}}))}:({value:y})=>y):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:y,value:N}){return this.isSync?N&&R(N)?y:za.SKIP:new Promise((I,$)=>setImmediate(()=>{try{I(N&&R(N)?y:za.SKIP)}catch(ee){$(ee)}}))})}function Qi(e,t){if(Array.isArray(t))if(t.length>1){let r=Qi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Qi(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 n7(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=a((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let o=i.next();return o.done?o:{value:o.value}},return(){if(i?.return)return i.return()}}}})}function s7(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(o=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function ip(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=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 d=c[0],f=Qi(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=ip({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let g,R=a((y,N)=>{let I,$;return E?E.returnDirect?(I=E(y,r,N),$=ut):($=E(y,r,N,!0),Array.isArray($)?(I=$.map(ee=>ee.value),$=null):I=$?.value):I=y[d],{subObject:I,subEntry:$}},"getSubObject"),S=a((y,N)=>{if(E&&h.idFilter){if(!g)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:k};g=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else g=u(E.from??t.primaryKey,h.idFilter,!1,!0);let q=g(y);return g.idFilter&&(S.idFilter=g.idFilter),q}let{subObject:I,subEntry:$}=R(y,N);return I?Array.isArray(I)?(!n?.[d]&&n&&(n[d]={fromRecord(q){let k=R(q).subObject;return Array.isArray(k)?k.filter(h).map(j=>j[m.primaryKey]):k}}),I.some(h)):h(I,$):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),aI[o]||o){case xs.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,ji.compareKeys)(d,l[0])>=0&&(0,ji.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,ji.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,ji.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,ji.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,ji.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,ji.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new rn.ClientError(`Unknown query comparator "${o}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&Tg(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,g=3;function R(S){let y=S[d],N;if(typeof y!="object"||!y||p?N=f(y):Array.isArray(y)?N=y.some(f):y instanceof Date&&(N=f(y.getTime())),m&&(g++,!N&&!R.idFilter&&++E/g*i>h)){let I=Xu(e,r.transaction.getReadTxn(),!1,t),$;R.to?$=I.flatMap(q=>t.primaryStore.get(q)[R.to]):$=I.map(Zu);let ee=new Set($);R.idFilter=q=>ee.has(Zu(q)),R.idFilter.idSet=ee}return N}return a(R,"recordFilter"),s&&(R.idFilter=f),R}a(u,"attributeComparator")}function Tg(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/$o(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=aI[n]||n,n===xs.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=Qi(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=Tg(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*$o(e.indices[i.relationship.from])/($o(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=$o(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=t7*$o(e.primaryStore)+1;else if(n==="between")r.estimated_count=e7*$o(e.primaryStore)+1;else if(n==="sort"){let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCountAsSort?r.estimated_count=i.customIndex.estimateCountAsSort(r):r.estimated_count=$o(e.primaryStore)+1}else{let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCount?r.estimated_count=i.customIndex.estimateCount(r.value):r.estimated_count=Z9*$o(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function yg(e,t){if(e)if(Vo=e,ju.lastIndex=0,i7.test(e))try{if(t&&(t.conditions=[]),ui=t??new Ju,sp(ui,""),Gr!==Vo.length&&zt("Unable to parse query, unexpected end of query"),ui.parseErrorMessage&&(ui.parseError=new sI(t.parseErrorMessage),!t))throw ui.parseError;return ui}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${Gr} in '${Vo}'`,ui.parseErrorMessage&&(r.message+=", "+ui.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function zt(e){let t=`${e} at position ${Gr}`;ui.parseErrorMessage=ui.parseErrorMessage?ui.parseErrorMessage+", "+t:t}function sp(e,t){let r=ju,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(Vo);){Gr=r.lastIndex;let[,d,f]=n;o?(d&&zt(`expected operator, but encountered '${d}'`),o=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:zt(`invalid FIQL operator ${d}`),l=k0):(l=decodeURIComponent,i="equals",d||zt("attribute must be specified before equality comparator"),s=Qu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=r7[f],l=iI[i]?k0:decodeURIComponent,d||zt(`attribute must be specified before comparator ${f}`),s=Qu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&zt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),zt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||zt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&H0(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else Sg(e,u),e.conditions.push(h)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?zt("conditions/comparisons are not allowed in a property list"):e.push(Qu(d)),s=void 0;break;case"(":ju.lastIndex=Gr;let p=sp(d?[]:new Ju,")");switch(d){case"":Sg(e,u),e.conditions.push(p);break;case"limit":switch(p.length){case 1:e.limit=+p[0];break;case 2:e.offset=+p[0],e.limit=p[1]-e.offset;break;default:zt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(p[0])&&p.length===1&&!p[0].name?(e.select=p[0],e.select.asArray=!0):p.length===1?e.select=p[0]:p.length===2&&p[1]===""?e.select=p.slice(0,1):e.select=p;break;case"group-by":zt("group by is not implemented yet");case"sort":e.sort=q0(p);break;default:zt(`unknown query function call ${d}`)}Vo[Gr]===","?r.lastIndex=++Gr:o=!0,s=null;break;case"{":e.conditions&&zt("property sets are not allowed in a queries"),d||zt("property sets must have a defined parent property name"),ju.lastIndex=Gr,m=sp([],"}"),m.name=d,e.push(m),Vo[Gr]===","?r.lastIndex=++Gr:o=!0;break;case"[":if(ju.lastIndex=Gr,d?(m=sp(new Ju,"]"),m.name=d):m=sp(e.conditions?new Ju:[],"]"),e.conditions)if(Sg(e,u),Vo[Gr]==="="){l=decodeURIComponent,i="equals",s=Qu(d),r.lastIndex=++Gr;break}else e.conditions.push(m),s=null;else e.push(m);Vo[Gr]===","?r.lastIndex=++Gr:o=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&H0(h,d),Sg(e,u),e.conditions.push(h)}else d&&zt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Qu(d));return e}else zt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:zt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?o7:ju,r.lastIndex=Gr),Gr===Vo.length)return e}t&&zt(`expected '${t}', but encountered end of string`)}function Sg(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&zt("Can not mix operators within a condition grouping"):e.operator=t)}function Qu(e){return e.indexOf(".")>-1?e.split(".").map(Qu):decodeURIComponent(e)}function k0(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+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 rn.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function H0(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new rn.ClientError("wildcard can only be used at the end of a string")}function q0(e){let t=G0(e[0]);return e.length>1&&(t.next=q0(e.slice(1))),t}function G0(e){if(Array.isArray(e)){let t=G0(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}}zt(`Unknown sort type ${e}`)}function Zu(e){return Array.isArray(e)?e.join("\0"):e}function $o(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function a7(e,t,r){return t*r/$o(e)}var rn,xs,ji,za,Z9,e7,t7,r7,iI,aI,sI,i7,ju,o7,Gr,ui,Vo,Ju,Rg=ne(()=>{rn=b(_e()),xs=b(Wt()),ji=require("ordered-binary"),za=require("lmdb");bg();dl();Z9=.3,e7=.1,t7=.05,r7={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},iI={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(oI,"executeConditions");a(Xu,"searchByIndex");a(Qi,"findAttribute");a(n7,"joinTo");a(s7,"joinFrom");aI={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(ip,"filterByType");a(Tg,"estimateCondition");sI=class extends rn.Violation{static{a(this,"SyntaxViolation")}},i7=/[()[\]|!<>.]|(=\w*=)/,ju=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,o7=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(yg,"parseQuery");a(zt,"recordError");a(sp,"parseBlock");a(Sg,"assignOperator");a(Qu,"decodeProperty");a(k0,"typedDecoding");a(H0,"wildcardDecoding");a(q0,"toSortObject");a(G0,"toSortEntry");Ju=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}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};a(Zu,"flattenKey");a($o,"estimatedEntryCount");a(a7,"intersectionEstimate")});var $0,di,Ag=ne(()=>{$0=b(li()),di=class extends URLSearchParams{static{a(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,$0._assignPackageExport)("Resource",Resource)});var z0={};ye(z0,{MultiPartId:()=>Ig,Resource:()=>ur,contextStorage:()=>td,snakeCase:()=>l7,transformForSelect:()=>rd});function l7(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function V0(e,t){if(El=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(El=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new Ig;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){El=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return El=!0,null;e[e.length-1]==="/"&&(El=!0)}return t.coerceId(decodeURIComponent(e))}function Hn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,d;if(r){if(o)d=i,o=o.getContext?.()||o;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,o=i.getContext?.()||i):i?.transaction instanceof vo?o=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new ed.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?o?(d=i,o=o.getContext?.()||o):o=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let g=this.parsePath(c,o,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new di,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new di,l.id=c,c==null&&(u=!0);l||(l=new di,l.id=c),u&&(l.isCollection=!0);let f;o||(o=td.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,p=h;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(p=a(E=>td.run(o,()=>h(E)),"runAction")),o?.transaction){let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)}else return At(o,()=>{let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)},f);function h(E){if(m!==!1&&o.authorize){o.authorize=!1;let g=t.type==="read"?E.allowRead(o.user,l,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,d,o):E.allowUpdate(o.user,d,o):t.type==="create"?E.allowCreate(o.user,d,o):E.allowDelete(o.user,l,o);if(g?.then)return g.then(R=>{if(!R)throw new ed.AccessViolation(o.user);return typeof d?.then=="function"?d.then(S=>e(E,l,o,S)):e(E,l,o,d)});if(!g)throw new ed.AccessViolation(o.user)}return typeof d?.then=="function"?d.then(g=>e(E,l,o,g)):e(E,l,o,d)}a(h,"authorizeActionOnResource")}}function os(e,t){let r=new ed.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 cI(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();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 rd(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):cI(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(cI(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(cI(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&o&&(p=null),p?.then?(f||(f=[]),f.push(p.then(h=>u[m.name||m]=h))):u[m.name||m]=p}return f?Promise.all(f).then(()=>u):u},"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 l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=rd(c.select||c,d)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var K0,Y0,ed,W0,td,c7,ur,El,Ig,Ko=ne(()=>{K0=require("crypto");Um();Fu();Y0=b(li()),ed=b(_e());Ga();Rg();W0=require("async_hooks");Ag();td=new W0.AsyncLocalStorage,c7={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},ur=class{static{a(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=Hn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=rd(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Hn(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let o of s){let c=t.constructor,l=o[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(o,n))):i.push(u.put(o,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):os(t,"put")},{hasContent:!0,type:"update"});static patch=Hn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):os(t,"patch")},{hasContent:!0,type:"update"});static delete=Hn(function(t,r,n,s){return t.delete?t.delete(r):os(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,K0.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=td.getStore()??{};let s;return this.loadAsInstance===!1?s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),At(n,async()=>{let i=new this(s,n),o=await i.create?i.create(s,r):os(i,"create");return n.newLocation=s??o?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?o:i})}static invalidate=Hn(function(t,r,n,s){return t.invalidate?t.invalidate(r):os(t,"delete")},{hasContent:!1,type:"update"});static post=Hn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create"});static update=Hn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update"});static connect=Hn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):os(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Hn(function(t,r,n,s){return t.subscribe?t.subscribe(r):os(t,"subscribe")},{type:"read"});static publish=Hn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):os(t,"publish")},{hasContent:!0,type:"create"});static search=Hn(function(t,r,n){let s=t.search?t.search(r):os(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let o=rd(i,t.constructor);return s.map(o)}return s},{type:"read"});static query=Hn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):os(t,"search")},{hasContent:!0,type:"read"});static copy=Hn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):os(t,"copy")},{hasContent:!0,type:"create"});static move=Hn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):os(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;os(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return yg(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1),c=r?.headers&&c7[o];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===o))if(t=t.slice(0,s),n)n.property=o;else return{query:{property:o},id:V0(t,this),isCollection:El}}let i=V0(t,this);return El?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),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 l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s.#r=!0),s}subscribe(t){return new ns}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new ns}allowRead(t,r){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,Y0._assignPackageExport)("Resource",ur);a(l7,"snakeCase");a(V0,"pathToId");Ig=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(Hn,"transactional");a(os,"missingMethod");a(cI,"selectFromObject");a(rd,"transformForSelect")});var _l,lI=ne(()=>{_l=class{static{a(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}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 uI={};ye(uI,{Resources:()=>nd,keyArrayToString:()=>sd,resetResources:()=>u7,resources:()=>Bs});function u7(){return Bs=new nd,Be.resources=Bs,Bs}function sd(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var j0,Q0,nd,Bs,ja=ne(()=>{Ga();lI();j0=b(J()),Q0=b(_e());Hr();nd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;allTypes=new Map;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,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new Q0.ServerError(`Conflicting paths for ${t}`);j0.default.error(c),i.Resource=new _l(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,o=t.length;for(;n<o;){s=n,n=t.indexOf("/",n),n===-1&&(n=o);let u=n===o?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===o&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}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 At(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(u7,"resetResources");a(sd,"keyArrayToString")});function mI(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=X0,d7(e.primaryStore,e.auditStore)):(c=J0,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{Z0(J0[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=sd(t);let d=new fI(r);d.startTime=n;let f=u.get(t);return f?f.push(d):(u.set(t,f=[d]),f.tables=u,f.key=t),d.subscriptions=f,d}function Z0(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),eB(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=It(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=sd(c),u=0;do{let d=o.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,dI.info)("omitting",c,m.startTime,n);continue}try{let p;m.supportsTransactions&&m.txnInProgress!==i.version&&(p=!0,m.txnInProgress||(r?r.push(m):r=[m]),m.txnInProgress=i.version),m.listener(c,i,n,p)}catch(p){console.error(p),(0,dI.info)(p)}}}if(l==null)break;let f=l.lastIndexOf?.("/",l.length-2);f!==l.length-1&&u++,f>-1?l=l.slice(0,f+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function d7(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 l=X0[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{Z0(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function eB(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function tB(e){return e.nextTransaction||(mI({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),eB(e)),e.nextTransaction}var dI,J0,X0,fI,pI=ne(()=>{dI=b(J());Fu();ja();Ki();J0=Object.create(null),X0=Object.create(null);a(mI,"addSubscription");fI=class extends ns{static{a(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;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;if(t){let 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(Z0,"notifyFromTransactionData");a(d7,"listenToCommits");a(eB,"nextTransaction");a(tB,"whenNextTransaction")});var nB=v((mLe,rB)=>{"use strict";var hI=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};rB.exports=hI});var iB=v((hLe,sB)=>{"use strict";var EI=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};sB.exports=EI});var op=v(aB=>{"use strict";var oB=ae(),f7=(H(),M(W)),{RecordEncoder:m7}=(dl(),M(F0));oB.initSync();var p7=oB.get(f7.CONFIG_PARAMS.STORAGE_CACHING)!==!1,_I=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=p7&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:m7})}};aB.OpenDBIObject=_I});var ap=v((SLe,cB)=>{"use strict";var as=ae(),Fs=(H(),M(W));as.initSync();var wg=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=as.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||as.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||as.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",as.get(Fs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=as.get(Fs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),as.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=as.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),as.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=as.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),as.get(Fs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=as.get(Fs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=as.get(Fs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};cB.exports=wg;wg.MAX_DBS=1e4});var _t=v((yLe,gB)=>{"use strict";var SI=require("lmdb"),fi=require("fs-extra"),cs=require("path"),Ng=xn(),dB=J(),qn=Jr().LMDB_ERRORS_ENUM,Cg=iB(),{OpenDBIObject:TI}=op(),fB=ap(),Qa=Wt(),lB=(H(),M(W)),{table:h7,resetDatabases:E7}=(we(),M(mt)),uB=ae(),mi=Qa.INTERNAL_DBIS_NAME,mB=Qa.DBI_DEFINITION_NAME,_7="data.mdb",g7="lock.mdb",cp=".mdb",S7="-lock",gI=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ks(t,r),this.key_type=this.dbi[Qa.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Qa.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new SI.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Og(e,t){if(e===void 0)throw new Error(qn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(qn.ENV_NAME_REQUIRED)}a(Og,"pathEnvNameValidation");async function yI(e,t,r=!0){try{await fi.access(e)}catch(n){throw n.code==="ENOENT"?new Error(qn.INVALID_BASE_PATH):n}try{let n=cs.join(e,t+cp);return await fi.access(n,fi.constants.R_OK|fi.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await fi.access(cs.join(e,t,_7),fi.constants.R_OK|fi.constants.F_OK),cs.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(qn.INVALID_ENVIRONMENT)}else throw new Error(qn.INVALID_ENVIRONMENT);throw n}}a(yI,"validateEnvironmentPath");function Pg(e,t){if(Ng.validateEnv(e),t===void 0)throw new Error(qn.DBI_NAME_REQUIRED)}a(Pg,"validateEnvDBIName");async function T7(e,t,r=!1,n=!1){Og(e,t);let s=cs.basename(e);t=t.toString();let i=uB.get(lB.CONFIG_PARAMS.DATABASES);i||uB.setProperty(lB.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await yI(e,t,n),pB(e,t,r)}catch(o){if(o.message===qn.INVALID_ENVIRONMENT){let c=cs.join(e,t);await fi.mkdirp(n?c:e);let l=new fB(n?c:c+cp,!1),u=SI.open(l);u.dbis=Object.create(null);let d=new TI(!1);u.openDB(mi,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=RI(e,t,r);return u[Qa.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw o}}a(T7,"createEnvironment");async function y7(e,t,r,n=!0){Og(e,t),t=t.toString();let s=cs.join(e,t);return h7({table:t,database:cs.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(y7,"copyEnvironment");async function pB(e,t,r=!1){Og(e,t),t=t.toString();let n=RI(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 yI(e,t),i=cs.join(e,t+cp),o=s!=i,c=new fB(s,o),l=SI.open(c);l.dbis=Object.create(null);let u=EB(l);for(let d=0;d<u.length;d++)ks(l,u[d]);return l[Qa.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(pB,"openEnvironment");async function R7(e,t,r=!1){Og(e,t),t=t.toString();let n=cs.join(e,t+cp),s=await yI(e,t);if(global.lmdb_map!==void 0){let i=RI(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await hB(o),delete global.lmdb_map[i]}}await fi.remove(s),await fi.remove(s===n?s+S7:cs.join(cs.dirname(s),g7))}a(R7,"deleteEnvironment");async function hB(e){Ng.validateEnv(e);let t=e[Qa.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(hB,"closeEnvironment");function RI(e,t,r=!1){let s=`${cs.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(RI,"getCachedEnvironmentName");function b7(e){Ng.validateEnv(e);let t=Object.create(null),r=ks(e,mi);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==mi)try{t[n]=Object.assign(new Cg,s)}catch{dB.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(b7,"listDBIDefinitions");function EB(e){Ng.validateEnv(e);let t=[],r=ks(e,mi);for(let{key:n}of r.getRange({start:!1}))n!==mi&&t.push(n);return t}a(EB,"listDBIs");function A7(e,t){let n=ks(e,mi).getEntry(t),s=new Cg;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{dB.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(A7,"getDBIDefinition");function _B(e,t,r,n=!r){if(Pg(e,t),t=t.toString(),t===mi)throw new Error(qn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ks(e,t)}catch(s){if(s.message===qn.DBI_DOES_NOT_EXIST){let i=new TI(r,n===!0),o=e.openDB(t,i),c=new Cg(r===!0,n);return o[mB]=c,ks(e,mi).putSync(t,c),e.dbis[t]=o,o}throw s}}a(_B,"createDBI");function ks(e,t){if(Pg(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==mi?r=A7(e,t):r=new Cg,r===void 0)throw new Error(qn.DBI_DOES_NOT_EXIST);let n;try{let s=new TI(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(qn.DBI_DOES_NOT_EXIST):s}return n[mB]=r,e.dbis[t]=n,n}a(ks,"openDBI");function I7(e,t){Pg(e,t),t=t.toString();let r=ks(e,t),n=r.getStats();return r[Qa.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(I7,"statDBI");async function w7(e,t){try{let r=cs.join(e,t+cp);return(await fi.stat(r)).size}catch{throw new Error(qn.INVALID_ENVIRONMENT)}}a(w7,"environmentDataSize");function N7(e,t){if(Pg(e,t),t=t.toString(),t===mi)throw new Error(qn.CANNOT_DROP_INTERNAL_DBIS_NAME);ks(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ks(e,mi).removeSync(t)}a(N7,"dropDBI");function C7(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ks(e,i)}catch(o){if(o.message===qn.DBI_DOES_NOT_EXIST)_B(e,i,i!==t,i===t),n=!0;else throw o}}n&&E7()}a(C7,"initializeDBIs");gB.exports={openDBI:ks,openEnvironment:pB,createEnvironment:T7,listDBIs:EB,listDBIDefinitions:b7,createDBI:_B,dropDBI:N7,statDBI:I7,deleteEnvironment:R7,initializeDBIs:C7,TransactionCursor:gI,environmentDataSize:w7,copyEnvironment:y7,closeEnvironment:hB}});var yB=v((bLe,TB)=>{"use strict";var bI=_t(),O7=J(),SB=Jr().LMDB_ERRORS_ENUM;TB.exports=P7;async function P7(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 bI.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==SB.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await bI.closeEnvironment(global.lmdb_map[n]),await bI.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==SB.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){O7.error(t)}}a(P7,"cleanLMDBMap")});var Xi=v((ILe,bB)=>{"use strict";var RB=oe(),L7=(H(),M(W)),id=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ji=require("joi"),Ja={schema_format:{pattern:id,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},D7=Ji.alternatives(Ji.string().min(1).max(Ja.schema_length.maximum).pattern(id).messages({"string.pattern.base":"{:#label} "+Ja.schema_format.message}),Ji.number(),Ji.array()).required(),M7=Ji.alternatives(Ji.string().min(1).max(Ja.schema_length.maximum).pattern(id).messages({"string.pattern.base":"{:#label} "+Ja.schema_format.message}),Ji.number()),v7=Ji.alternatives(Ji.string().min(1).max(Ja.schema_length.maximum).pattern(id).messages({"string.pattern.base":"{:#label} "+Ja.schema_format.message}),Ji.number()).required();function U7(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>Ja.schema_length.maximum?`'${property_name}' maximum of 250 characters`:id.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}a(U7,"checkValidTable");function x7(e,t){return RB.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(x7,"validateSchemaExists");function B7(e,t){let r=t.state.ancestors[0].schema;return RB.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(B7,"validateTableExists");function F7(e,t){return e.toLowerCase()===L7.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(F7,"validateSchemaName");bB.exports={commonValidators:Ja,schemaRegex:id,hdbSchemaTable:D7,validateSchemaExists:x7,validateTableExists:B7,validateSchemaName:F7,checkValidTable:U7,hdbDatabase:M7,hdbTable:v7}});var ot=v((NLe,AB)=>{"use strict";var Gn=require("validate.js");Gn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Gn.validators.type.checks[t](e)?null:` must be a '${t}' value`};Gn.validators.type.checks={Object:a(function(e){return Gn.isObject(e)&&!Gn.isArray(e)},"Object"),Array:Gn.isArray,Integer:Gn.isInteger,Number:Gn.isNumber,String:Gn.isString,Date:Gn.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};Gn.validators.hasValidFileExt=function(e,t){return Gn.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};AB.exports={validateObject:k7,validateObjectAsync:H7,validateBySchema:q7};function k7(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Gn(e,t,{format:"flat"});return r?new Error(r):null}a(k7,"validateObject");async function H7(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Gn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(H7,"validateObjectAsync");function q7(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(q7,"validateBySchema")});var II=v((OLe,wB)=>{var{hdbTable:G7,hdbDatabase:IB}=Xi(),$7=ot(),AI=require("joi"),V7={undefined:"undefined",null:"null"},K7=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||V7[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"customRecordsVal"),Y7=AI.object({database:IB,schema:IB,table:G7,records:AI.array().items(AI.object().custom(K7)).required()});wB.exports=function(e){return $7.validateBySchema(e,Y7)}});var CB=v((LLe,NB)=>{"use strict";var wI=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")}};NB.exports=wI});var PB=v((MLe,OB)=>{"use strict";var NI=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};OB.exports=NI});var DB=v((ULe,LB)=>{"use strict";var CI=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}};LB.exports=CI});var vB=v((BLe,MB)=>{"use strict";var OI=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};MB.exports=OI});var Sl=v((GLe,BB)=>{"use strict";var W7=_t(),z7=PB(),j7=DB(),Q7=vB(),Zi=xn(),lp=Jr().LMDB_ERRORS_ENUM,J7=Wt(),Yo=(H(),M(W)),X7=oe(),Z7=require("uuid"),kLe=require("lmdb"),{handleHDBError:eee,hdbErrors:tee}=_e(),{OVERFLOW_MARKER:HLe,MAX_SEARCH_KEY_LENGTH:qLe}=J7,UB=ae();UB.initSync();var Lg=UB.get(Yo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),PI=Yo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,gl=Yo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function ree(e,t,r,n,s=Zi.getNextMonotonicTime()){vI(e,t,r,n),LI(e,t,r);let i=new z7,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];xB(u,!0,s);let d=nee(e,t,r,u),f=u[t];o.push(d),c.push(f)}return DI(o,c,n,i,s)}a(ree,"insertRecords");function nee(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 d=c([[{}]]);Array.isArray(d)&&(c=d[0][Yo.FUNC_VAL],n[o]=c)}let l=Zi.getIndexedValues(c),u=e.dbis[o];if(l){Lg&&u.prefetch(l.map(d=>({key:d,value:s})),Dg);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}Lg&&e.dbis[t].prefetch([s],Dg),e.dbis[t].put(s,n,n[gl])})}a(nee,"insertRecord");function see(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(see,"removeSkippedRecords");function xB(e,t,r){let n=r>0;(n||!Number.isInteger(e[gl]))&&(e[gl]=r||(r=Zi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[PI]))&&(e[PI]=r||Zi.getNextMonotonicTime()):delete e[PI]}a(xB,"setTimestamps");function LI(e,t,r){r.indexOf(Yo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Yo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Yo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Yo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),W7.initializeDBIs(e,t,r)}a(LI,"initializeTransaction");async function iee(e,t,r,n,s=Zi.getNextMonotonicTime()){vI(e,t,r,n),LI(e,t,r);let i=new j7,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=MI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),o.push(u);continue}c.push(m),l.push(f)}return DI(c,l,n,i,s,o)}a(iee,"updateRecords");async function oee(e,t,r,n,s=Zi.getNextMonotonicTime()){try{vI(e,t,r,n)}catch(l){throw eee(l,l.message,tee.HTTP_STATUS_CODES.BAD_REQUEST)}LI(e,t,r);let i=new Q7,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;X7.isEmpty(u[t])?(d=Z7.v4(),u[t]=d):d=u[t];let f=MI(e,t,u,d,i,!1,s);o.push(f),c.push(d)}return DI(o,c,n,i,s)}a(oee,"upsertRecords");async function DI(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Zi.getNextMonotonicTime(),see(r,i),n}a(DI,"finalizeWrite");function MI(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(xB(r,!d,o),Number.isInteger(r[gl])&&u[gl]>r[gl])return!1;d&&s.original_records.push(u);let f,m=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let E=r[h],g=e.dbis[h];if(g===void 0)continue;let R=u[h];if(typeof E=="function"){let y=E([[u]]);Array.isArray(y)&&(E=y[0][Yo.FUNC_VAL],r[h]=E)}if(E===R)continue;let S=Zi.getIndexedValues(R);if(S){Lg&&g.prefetch(S.map(y=>({key:y,value:n})),Dg);for(let y=0,N=S.length;y<N;y++)g.remove(S[y],n)}if(S=Zi.getIndexedValues(E),S){Lg&&g.prefetch(S.map(y=>({key:y,value:n})),Dg);for(let y=0,N=S.length;y<N;y++)g.put(S[y],n)}}let p={...u,...r};c.put(n,p,p[gl])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:MI(e,t,r,n,s,i,o))}a(MI,"updateUpsertRecord");function aee(e,t,r){if(Zi.validateEnv(e),t===void 0)throw new Error(lp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(lp.WRITE_ATTRIBUTES_REQUIRED):new Error(lp.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(aee,"validateBasic");function vI(e,t,r,n){if(aee(e,t,r),!Array.isArray(n))throw n===void 0?new Error(lp.RECORDS_REQUIRED):new Error(lp.RECORDS_MUST_BE_ARRAY)}a(vI,"validateWrite");function Dg(){}a(Dg,"noop");BB.exports={insertRecords:ree,updateRecords:iee,upsertRecords:oee}});var eo=v((VLe,cee)=>{cee.exports={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:"hash_function"},{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:"id",table:"hdb_license",database:"system",audit:!0,attributes:[{attribute:"id"},{name:"level"},{name:"region",indexed:!0},{name:"reads"},{name:"writes"},{name:"readBytes"},{name:"writeBytes"},{name:"realTimeMessages"},{name:"realTimeBytes"},{name:"cpuTime"},{name:"storage"},{name:"usedReads"},{name:"usedWrites"},{name:"usedReadBytes"},{name:"usedWriteBytes"},{name:"usedRealTimeMessages"},{name:"usedRealTimeBytes"},{name:"usedCpuTime"},{name:"usedStorage"},{name:"expiration"},{name:"autoRenew"},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]},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:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",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"}]},hdb_certificate_cache:{hash_attribute:"certificate_id",name:"hdb_certificate_cache",schema:"system",attributes:[{attribute:"certificate_id"}]},hdb_crl_cache:{hash_attribute:"distribution_point",name:"hdb_crl_cache",schema:"system",attributes:[{attribute:"distribution_point"}]},hdb_revoked_certificates:{hash_attribute:"composite_id",name:"hdb_revoked_certificates",schema:"system",attributes:[{attribute:"composite_id"}]}}});var kB=v((KLe,FB)=>{"use strict";var lee=require("uuid"),UI=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||lee.v4(),this.schema_table=`${this.schema}.${this.table}`}};FB.exports=UI});var Mg=v((WLe,HB)=>{"use strict";var uee=kB(),xI=class extends uee{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}};HB.exports=xI});var GB=v((jLe,qB)=>{"use strict";qB.exports=fee;var dee="inserted";function fee(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===dee?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(fee,"returnObject")});var vg=v((XLe,VB)=>{"use strict";var mee=(H(),M(W)),BI=_t(),pee=Sl(),{getSystemSchemaPath:hee,getSchemaPath:Eee}=bt(),JLe=eo(),{validateBySchema:_ee}=ot(),up=require("joi"),gee=Mg(),See=GB(),{handleHDBError:Tee,hdbErrors:yee,ClientError:Ree}=_e(),$B=oe(),{HTTP_STATUS_CODES:bee}=yee,Aee="inserted";VB.exports=Iee;async function Iee(e){let t=_ee(e,up.object({database:up.string(),schema:up.string(),table:up.string().required(),attribute:up.string().required()}));if(t)throw new Ree(t.message);let r=!e.skip_table_check&&$B.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Tee(new Error,r,bee.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=$B.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 gee(e.schema,e.table,e.attribute,e.id);try{let i=await BI.openEnvironment(Eee(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${create_attribute_obj.attribute}' already exists in ${e.schema}.${e.table}`);BI.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await BI.openEnvironment(hee(),mee.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await pee.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return See(Aee,c,{records:[s]},l)}catch(i){throw i}}a(Iee,"lmdbCreateAttribute")});var dp=v((tDe,YB)=>{"use strict";var Wo=oe(),KB=J(),eDe=II(),{getDatabases:wee}=(we(),M(mt)),{ClientError:Tl}=_e();YB.exports=Nee;function Nee(e){if(Wo.isEmpty(e))throw new Tl("invalid update parameters defined.");if(Wo.isEmptyOrZeroLength(e.schema))throw new Tl("invalid schema specified.");if(Wo.isEmptyOrZeroLength(e.table))throw new Tl("invalid table specified.");if(!Array.isArray(e.records))throw new Tl("records must be an array");let t=wee()[e.schema]?.[e.table];if(Wo.isEmpty(t))throw new Tl(`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&&Wo.isEmptyOrZeroLength(o[r]))throw KB.error("a valid hash attribute must be provided with update record:",o),new Tl("a valid hash attribute must be provided with update record, check log for more info");if(!Wo.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw KB.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Tl(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Wo.isEmpty(o[r])&&o[r]!==""&&n.has(Wo.autoCast(o[r]))&&(o.skip=!0),n.add(Wo.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(Nee,"insertUpdateValidate")});var Ug=v((nDe,zB)=>{"use strict";var WB=oe(),Cee=(H(),M(W)),Oee=J(),Pee=vg(),Lee=Mg(),Dee=zo(),{SchemaEventMsg:Mee}=ls(),vee="already exists in";zB.exports=Uee;async function Uee(e,t,r){if(WB.isEmptyOrZeroLength(r))return r;let n=[];WB.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 xee(e,t.schema,t.name,i)})),s}a(Uee,"lmdbCheckForNewAttributes");async function xee(e,t,r,n){let s=new Lee(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await Bee(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(vee))Oee.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(xee,"createNewAttribute");async function Bee(e){let t;return t=await Pee(e),Dee.signalSchemaChange(new Mee(process.pid,Cee.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(Bee,"createAttribute")});var od=v((iDe,jB)=>{"use strict";var FI=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}};jB.exports=FI});var JB=v((aDe,QB)=>{"use strict";var Fee=od(),kee=(H(),M(W)).OPERATIONS_ENUM,kI=class extends Fee{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(kee.INSERT,r,n,s,i),this.records=t}};QB.exports=kI});var ZB=v((lDe,XB)=>{"use strict";var Hee=od(),qee=(H(),M(W)).OPERATIONS_ENUM,HI=class extends Hee{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(qee.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};XB.exports=HI});var tF=v((dDe,eF)=>{"use strict";var Gee=od(),$ee=(H(),M(W)).OPERATIONS_ENUM,qI=class extends Gee{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super($ee.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};eF.exports=qI});var nF=v((mDe,rF)=>{"use strict";var Vee=od(),Kee=(H(),M(W)).OPERATIONS_ENUM,GI=class extends Vee{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(Kee.DELETE,n,s,t,i),this.original_records=r}};rF.exports=GI});var fp=v((EDe,aF)=>{"use strict";var hDe=require("path"),sF=_t(),Yee=JB(),Wee=ZB(),zee=tF(),jee=nF(),ad=Wt(),iF=oe(),{CONFIG_PARAMS:Qee}=(H(),M(W)),oF=ae();oF.initSync();var xg=(H(),M(W)).OPERATIONS_ENUM,{getTransactionAuditStorePath:Jee}=bt();aF.exports=Xee;async function Xee(e,t){if(oF.get(Qee.LOGGING_AUDITLOG)===!1)return;let r=Jee(e.schema,e.table),n=await sF.openEnvironment(r,e.table,!0),s=Zee(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){sF.initializeDBIs(n,ad.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ad.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[ad.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[ad.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),iF.isEmpty(s.user_name)||n.dbis[ad.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[ad.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(Xee,"writeTransaction");function Zee(e,t){let r=iF.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===xg.INSERT)return new Yee(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===xg.UPDATE)return new Wee(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===xg.UPSERT)return new zee(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===xg.DELETE)return new jee(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Zee,"createTransactionObject")});var $I=v((SDe,cF)=>{"use strict";var ete=dp(),gDe=Dm(),mp=(H(),M(W)),tte=Mm(),rte=Sl().insertRecords,nte=_t(),ste=J(),ite=Ug(),{getSchemaPath:ote}=bt(),ate=fp();cF.exports=cte;async function cte(e){try{let{schemaTable:t,attributes:r}=ete(e);tte(e,r,t.hash_attribute),e.schema!==mp.SYSTEM_SCHEMA_NAME&&(r.includes(mp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(mp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(mp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(mp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await ite(e.hdb_auth_header,t,r),s=ote(e.schema,e.table),i=await nte.openEnvironment(s,e.table),o=await rte(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await ate(e,o)}catch(c){ste.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(cte,"lmdbCreateRecords")});var dF=v((yDe,uF)=>{"use strict";var lF=(H(),M(W)),lte=$I(),ute=Dm(),dte=require("fs-extra"),{getSchemaPath:fte}=bt();uF.exports=mte;async function mte(e){let t=[{name:e.schema,createddate:Date.now()}],r=new ute(lF.SYSTEM_SCHEMA_NAME,lF.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await lte(r),await dte.mkdirp(fte(e.schema))}a(mte,"lmdbCreateSchema")});var mF=v((bDe,fF)=>{"use strict";var VI=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}};fF.exports=VI});var _F=v((CDe,EF)=>{"use strict";var pF=_t(),KI=xn(),YI=Jr().LMDB_ERRORS_ENUM,pte=Wt(),hF=J(),IDe=oe(),hte=require("lmdb"),Ete=mF(),_te=(H(),M(W)),{OVERFLOW_MARKER:wDe,MAX_SEARCH_KEY_LENGTH:NDe}=pte,gte=_te.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Ste(e,t,r,n){if(KI.validateEnv(e),t===void 0)throw new Error(YI.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(YI.IDS_REQUIRED):new Error(YI.IDS_MUST_BE_ITERABLE);try{let s=pF.listDBIs(e);pF.initializeDBIs(e,t,s);let i=new Ete,o,c=[],l=[];for(let m=0,p=r.length;m<p;m++)try{o=r[m];let h=e.dbis[t].get(o);if(!h||n&&h[gte]>n){i.skipped.push(o);continue}let E=e.dbis[t].ifVersion(o,hte.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<s.length;g++){let R=s[g];if(!h.hasOwnProperty(R)||R===t)continue;let S=e.dbis[R],y=h[R];if(y!=null)try{let N=KI.getIndexedValues(y);if(N)for(let I=0,$=N.length;I<$;I++)S.remove(N[I],o)}catch{hF.warn(`cannot delete from attribute: ${R}, ${y}:${o}`)}}});c.push(E),l.push(o),i.original_records.push(h)}catch(h){hF.warn(h),i.skipped.push(o)}let u=[],d=await Promise.all(c);for(let m=0,p=d.length;m<p;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let p=u[m];i.original_records.splice(p-f,1),f++}return i.txn_time=KI.getNextMonotonicTime(),i}catch(s){throw s}}a(Ste,"deleteRecords");EF.exports={deleteRecords:Ste}});var pp=v((PDe,SF)=>{"use strict";var cd=oe(),Tte=_F(),yte=_t(),{getSchemaPath:Rte}=bt(),bte=fp(),Ate=J();SF.exports=Ite;async function Ite(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(cd.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(cd.isEmptyOrZeroLength(e.hash_values)&&!cd.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];cd.isEmpty(l)||e.hash_values.push(l)}}if(cd.isEmptyOrZeroLength(e.hash_values))return gF([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(cd.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=Rte(e.schema,e.table),i=await yte.openEnvironment(s,e.table),o=await Tte.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await bte(e,o)}catch(c){Ate.error(`unable to write transaction due to ${c.message}`)}return gF(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(Ite,"lmdbDeleteRecords");function gF(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(gF,"createDeleteResponse")});var zI=v((MDe,TF)=>{"use strict";var wte=(H(),M(W)),DDe=xn();function WI(e,t){let r=Object.create(null);if(t.length===1&&wte.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(WI,"parseRow");function Nte(e,t,r,n){let s=WI(r,e);n.push(s)}a(Nte,"searchAll");function Cte(e,t,r,n){let s=WI(r,e);n[t]=s}a(Cte,"searchAllToMap");function Ote(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Ote,"iterateDBI");function yl(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(yl,"pushResults");function Pte(e,t,r,n,s,i){t.toString().endsWith(e)&&yl(t,r,n,s,i)}a(Pte,"endsWith");function Lte(e,t,r,n,s,i){t.toString().includes(e)&&yl(t,r,n,s,i)}a(Lte,"contains");function Dte(e,t,r,n,s,i){t>e&&yl(t,r,n,s,i)}a(Dte,"greaterThanCompare");function Mte(e,t,r,n,s,i){t>=e&&yl(t,r,n,s,i)}a(Mte,"greaterThanEqualCompare");function vte(e,t,r,n,s,i){t<e&&yl(t,r,n,s,i)}a(vte,"lessThanCompare");function Ute(e,t,r,n,s,i){t<=e&&yl(t,r,n,s,i)}a(Ute,"lessThanEqualCompare");TF.exports={parseRow:WI,searchAll:Nte,searchAllToMap:Cte,iterateDBI:Ote,endsWith:Pte,contains:Lte,greaterThanCompare:Dte,greaterThanEqualCompare:Mte,lessThanCompare:vte,lessThanEqualCompare:Ute,pushResults:yl}});var ld=v((FDe,NF)=>{"use strict";var Xa=_t(),UDe=J(),us=xn(),Bg=Wt(),nr=Jr().LMDB_ERRORS_ENUM,xDe=oe(),xte=(H(),M(W)),Fg=zI(),{parseRow:Bte}=Fg,BDe=require("lmdb"),{OVERFLOW_MARKER:yF,MAX_SEARCH_KEY_LENGTH:Fte}=Bg;function RF(e,t,r,n=!1,s=void 0,i=void 0){return Rl(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(RF,"iterateFullIndex");function hp(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return Rl(e,t,r,(d,f,m,p)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return p===r?(S.values=!1,f.getRange(S).map(y=>({value:y}))):f.getRange(S)})}a(hp,"iterateRangeBetween");function Rl(e,t,r,n){let s=e.database||e,i=Xa.openDBI(s,r);i[Bg.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Xa.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(Rl,"setupTransaction");function bF(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(yF)){if(!s)if(r)s=Xa.openDBI(e,r);else{let l=Xa.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Xa.openDBI(e,l[u]),!s[Bg.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(bF,"getOverflowCheck");function kte(e,t,r,n=!1,s=void 0,i=void 0){if(us.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);return Rl(e,t,t,(o,c,l)=>(kg(r),r=Ep(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>Bte(u.value,r))))}a(kte,"searchAll");function Hte(e,t,r,n=!1,s=void 0,i=void 0){if(us.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);kg(r),r=Ep(e.database||e,r);let o=new Map;for(let{key:c,value:l}of RF(e,t,t,n,s,i))o.set(c,Fg.parseRow(l,r));return o}a(Hte,"searchAllToMap");function qte(e,t,r=!1,n=void 0,s=void 0){if(us.validateEnv(e),t===void 0)throw new Error(nr.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=RF(e,void 0,t,r,n,s),c=o.transaction,l=bF(c.database,c,void 0,t);for(let{key:u,value:d}of o){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}a(qte,"iterateDBI");function Gte(e,t){if(us.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);return Xa.statDBI(e,t).entryCount}a(Gte,"countAll");function $te(e,t,r,n,s=!1,i=void 0,o=void 0){return Za(e,r,n),Rl(e,t,r,(c,l,u,d)=>(n=us.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(f=>({key:n,value:f}))))}a($te,"equals");function Vte(e,t,r){return Za(e,t,r),Xa.openDBI(e,t).getValuesCount(r)}a(Vte,"count");function Kte(e,t,r,n,s=!1,i=void 0,o=void 0){return Za(e,r,n),Rl(e,null,r,(c,l)=>{n=us.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(o)?o++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:o}).map(m=>{let{key:p}=m;if(p!==f){if(p.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}a(Kte,"startsWith");function Yte(e,t,r,n,s=!1,i=void 0,o=void 0){return AF(e,t,r,n,s,i,o,!0)}a(Yte,"endsWith");function AF(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Za(e,r,n),Rl(e,null,r,(l,u,d,f)=>{let m=bF(d,l,f,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(p=>{let h=p.toString();return h.endsWith(yF)?u.getValues(p,{transaction:l}).map(E=>{let g=m(p,E);if(c?g.endsWith(n):g.includes(n))return{key:g,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[Bg.DBI_DEFINITION_NAME].is_hash_attribute?{key:p,value:p}:u.getValues(p,{transaction:l}).map(E=>({key:p,value:E})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(AF,"contains");function Wte(e,t,r,n,s=!1,i=void 0,o=void 0){Za(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),hp(e,t,r,n,l,s,i,o,!0,!1)}a(Wte,"greaterThan");function zte(e,t,r,n,s=!1,i=void 0,o=void 0){Za(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),hp(e,t,r,n,l,s,i,o,!1,!1)}a(zte,"greaterThanEqual");function jte(e,t,r,n,s=!1,i=void 0,o=void 0){Za(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),hp(e,t,r,l,n,s,i,o,!1,!0)}a(jte,"lessThan");function Qte(e,t,r,n,s=!1,i=void 0,o=void 0){Za(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),hp(e,t,r,l,n,s,i,o,!1,!1)}a(Qte,"lessThanEqual");function Jte(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(us.validateEnv(e),r===void 0)throw new Error(nr.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(nr.START_VALUE_REQUIRED);if(s===void 0)throw new Error(nr.END_VALUE_REQUIRED);if(n=us.convertKeyValueToWrite(n),s=us.convertKeyValueToWrite(s),n>s)throw new Error(nr.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return hp(e,t,r,n,s,i,o,c)}a(Jte,"between");function Xte(e,t,r,n){us.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);if(kg(r),r=Ep(s,r),n===void 0)throw new Error(nr.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Fg.parseRow(c,r)),o}a(Xte,"searchByHash");function Zte(e,t,r){us.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(nr.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Zte,"checkHashExists");function ere(e,t,r,n,s=[]){return wF(e,t,r,n,s),IF(e,t,r,n,s).map(i=>i[1])}a(ere,"batchSearchByHash");function tre(e,t,r,n,s=[]){wF(e,t,r,n,s);let i=new Map;for(let[o,c]of IF(e,t,r,n,s))i.set(o,c);return i}a(tre,"batchSearchByHashToMap");function IF(e,t,r,n,s=[]){return Rl(e,t,t,(i,o,c)=>{r=Ep(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,Fg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(IF,"batchHashSearch");function wF(e,t,r,n,s){if(us.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);if(kg(r),n==null)throw new Error(nr.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(nr.IDS_MUST_BE_ITERABLE)}a(wF,"initializeBatchSearchByHash");function kg(e){if(!Array.isArray(e))throw e===void 0?new Error(nr.FETCH_ATTRIBUTES_REQUIRED):new Error(nr.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(kg,"validateFetchAttributes");function Za(e,t,r){if(us.validateEnv(e),t===void 0)throw new Error(nr.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(nr.SEARCH_VALUE_REQUIRED);if(r?.length>Fte)throw new Error(nr.SEARCH_VALUE_TOO_LARGE)}a(Za,"validateComparisonFunctions");function Ep(e,t){return t.length===1&&xte.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Xa.listDBIs(e)),t}a(Ep,"setGetWholeRowAttributes");NF.exports={searchAll:kte,searchAllToMap:Hte,count:Vte,countAll:Gte,equals:$te,startsWith:Kte,endsWith:Yte,contains:AF,searchByHash:Xte,setGetWholeRowAttributes:Ep,batchSearchByHash:ere,batchSearchByHashToMap:tre,checkHashExists:Zte,iterateDBI:qte,greaterThan:Wte,greaterThanEqual:zte,lessThan:jte,lessThanEqual:Qte,between:Jte}});var ud=v((HDe,DF)=>{var CF=require("lodash"),OF=ot(),je=require("joi"),rre=oe(),{hdbSchemaTable:_p,checkValidTable:PF,hdbTable:LF,hdbDatabase:Hg}=Xi(),{handleHDBError:nre,hdbErrors:sre}=_e(),{getDatabases:ire}=(we(),M(mt)),{HTTP_STATUS_CODES:ore}=sre,are=je.object({database:Hg,schema:Hg,table:LF,attribute:_p,value:je.any().required(),get_attributes:je.array().min(1).items(je.alternatives(_p,je.object())).optional(),desc:je.bool(),limit:je.number().integer().min(1),offset:je.number().integer().min(0)}),cre=je.object({database:Hg,schema:Hg,table:LF,operator:je.string().valid("and","or").default("and").lowercase(),offset:je.number().integer().min(0),limit:je.number().integer().min(1),get_attributes:je.array().min(1).items(je.alternatives(_p,je.object())).optional(),sort:je.object({attribute:je.alternatives(_p,je.array().min(1)),descending:je.bool().optional()}).optional(),conditions:je.array().min(1).items(je.alternatives(je.object({operator:je.string().valid("and","or").default("and").lowercase(),conditions:je.array()}),je.object({attribute:je.alternatives(_p,je.array().min(1)),comparator:je.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:je.when("comparator",{switch:[{is:"equals",then:je.any()},{is:"between",then:je.array().items(je.alternatives([je.string(),je.number()])).length(2)}],otherwise:je.alternatives(je.string(),je.number())}).required()}))).required()});DF.exports=function(e,t){let r=null;switch(t){case"value":r=OF.validateBySchema(e,are);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(PF("database",e.schema)),i(PF("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=OF.validateBySchema(e,cre);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=rre.checkGlobalSchemaTable(e.schema,e.table);if(s)return nre(new Error,s,ore.NOT_FOUND);let o=ire()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.attribute);let l=a(d=>{for(let f of d.conditions)f.conditions?l(f):c.push(f.attribute)},"addConditions");t==="conditions"&&l(e);let u=CF.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!CF.some(o,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var jI=v((GDe,MF)=>{"use strict";var lre=_t(),ure=ud(),{getSchemaPath:dre}=bt();MF.exports=fre;function fre(e){let t=ure(e,"hashes");if(t)throw t;let r=dre(e.schema,e.table);return lre.openEnvironment(r,e.table)}a(fre,"initialize")});var QI=v((VDe,vF)=>{"use strict";var mre=ld(),pre=jI();vF.exports=hre;async function hre(e){let t=await pre(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return mre.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(hre,"lmdbGetDataByHash")});var dd=v((YDe,UF)=>{"use strict";var JI=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};UF.exports=JI});var BF=v((jDe,xF)=>{"use strict";var zDe=dd(),Ere=ld(),_re=jI();xF.exports=gre;async function gre(e){let t=await _re(e),r=global.hdb_schema[e.schema][e.table];return Ere.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(gre,"lmdbSearchByHash")});var pi=v((JDe,FF)=>{"use strict";var XI=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.attribute=n,this.value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};FF.exports=XI});var qg=v((ZDe,VF)=>{"use strict";var En=ld(),Sre=_t(),Tre=oe(),Qe=Wt(),bl=(H(),M(W)),yre=eo(),kF=Jr().LMDB_ERRORS_ENUM,{getSchemaPath:Rre}=bt(),jo=bl.SEARCH_WILDCARDS;async function bre(e,t,r){let n;e.schema===bl.SYSTEM_SCHEMA_NAME?n=yre[e.table]:n=global.hdb_schema[e.schema][e.table];let s=$F(e,n.hash_attribute,r,t);return qF(e,s,n.hash_attribute,r)}a(bre,"prepSearch");async function qF(e,t,r,n){let s=Rre(e.schema,e.table),i=await Sre.openEnvironment(s,e.table),o=GF(i,e,t,r),c=o.transaction||i;if([Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Qe.SEARCH_TYPES.SEARCH_ALL,Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Are(e,r)===!1){let d=e.attribute;if(d===r)return n?HF(o,()=>!0):o.map(m=>({[r]:m.key}));let f=a(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?HF(o,f):o.map(f)}let u=e.attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?En.batchSearchByHashToMap(c,r,e.get_attributes,u):En.batchSearchByHash(c,r,e.get_attributes,u)}a(qF,"executeSearch");function GF(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Qe.SEARCH_TYPES.EQUALS:s=En.equals(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.CONTAINS:s=En.contains(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.ENDS_WITH:case Qe.SEARCH_TYPES._ENDS_WITH:s=En.endsWith(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.STARTS_WITH:case Qe.SEARCH_TYPES._STARTS_WITH:s=En.startsWith(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return En.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return En.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case Qe.SEARCH_TYPES.SEARCH_ALL:return En.searchAll(e,n,t.get_attributes,o,c,l);case Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return En.searchAllToMap(e,n,t.get_attributes,o,c,l);case Qe.SEARCH_TYPES.BETWEEN:s=En.between(e,i,t.attribute,t.value,t.end_value,o,c,l);break;case Qe.SEARCH_TYPES.GREATER_THAN:case Qe.SEARCH_TYPES._GREATER_THAN:s=En.greaterThan(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.GREATER_THAN_EQUAL:case Qe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=En.greaterThanEqual(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.LESS_THAN:case Qe.SEARCH_TYPES._LESS_THAN:s=En.lessThan(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.LESS_THAN_EQUAL:case Qe.SEARCH_TYPES._LESS_THAN_EQUAL:s=En.lessThanEqual(e,i,t.attribute,t.value,o,c,l);break;default:return Object.create(null)}return s}a(GF,"searchByType");function HF(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(HF,"createMapFromIterable");function Are(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.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(Are,"checkToFetchMore");function $F(e,t,r,n){if(Tre.isEmpty(n)){let s=e.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.attribute===t&&(c=!0),jo.indexOf(s)>-1)return r===!0?Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Qe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(jo[0])<0&&s.indexOf(jo[1])<0)return c===!0?r===!0?Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Qe.SEARCH_TYPES.EQUALS;if(jo.indexOf(i)>=0&&jo.indexOf(o)>=0)return e.value=e.value.slice(1,-1),Qe.SEARCH_TYPES.CONTAINS;if(jo.indexOf(i)>=0)return e.value=e.value.substr(1),Qe.SEARCH_TYPES.ENDS_WITH;if(jo.indexOf(o)>=0)return e.value=e.value.slice(0,-1),Qe.SEARCH_TYPES.STARTS_WITH;if(s.includes(jo[0])||s.includes(jo[1]))return Qe.SEARCH_TYPES.EQUALS;throw new Error(kF.UNKNOWN_SEARCH_TYPE)}else switch(n){case bl.VALUE_SEARCH_COMPARATORS.BETWEEN:return Qe.SEARCH_TYPES.BETWEEN;case bl.VALUE_SEARCH_COMPARATORS.GREATER:return Qe.SEARCH_TYPES.GREATER_THAN;case bl.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Qe.SEARCH_TYPES.GREATER_THAN_EQUAL;case bl.VALUE_SEARCH_COMPARATORS.LESS:return Qe.SEARCH_TYPES.LESS_THAN;case bl.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Qe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(kF.UNKNOWN_SEARCH_TYPE)}}a($F,"createSearchTypeFromSearchObject");VF.exports={executeSearch:qF,createSearchTypeFromSearchObject:$F,prepSearch:bre,searchByType:GF}});var YF=v((rMe,KF)=>{"use strict";var tMe=pi(),Ire=ud(),wre=oe(),Nre=(H(),M(W)),Cre=qg();KF.exports=Ore;function Ore(e,t){if(!wre.isEmpty(t)&&Nre.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Ire(e,"value");if(n)throw n;return Cre.prepSearch(e,t,!0)}a(Ore,"lmdbGetDataByValue")});var gp=v((iMe,WF)=>{"use strict";var sMe=pi(),Pre=ud(),Lre=oe(),Dre=(H(),M(W)),Mre=qg();WF.exports=vre;async function vre(e,t){if(!Lre.isEmpty(t)&&Dre.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Pre(e,"value");if(n)throw n;return Mre.prepSearch(e,t,!1)}a(vre,"lmdbSearchByValue")});var jF=v((cMe,zF)=>{"use strict";var aMe=Wt(),ZI=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}},ew=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},tw=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};zF.exports={SearchByConditionsObject:ZI,SearchCondition:ew,SortAttribute:tw}});var ek=v((mMe,ZF)=>{"use strict";var{SearchByConditionsObject:uMe,SearchCondition:dMe}=jF(),Ure=pi(),xre=ud(),rw=ld(),Gg=Wt(),{Resource:fMe}=(Ko(),M(z0)),XF=qg(),Bre=zI(),Fre=require("lodash"),{getSchemaPath:kre}=bt(),QF=_t(),{handleHDBError:Hre,hdbErrors:qre}=_e(),{HTTP_STATUS_CODES:Gre}=qre,$re=1e8;ZF.exports=Vre;async function Vre(e){let t=xre(e,"conditions");if(t)throw Hre(t,t.message,Gre.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=kre(e.schema,e.table),n=await QF.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)QF.openDBI(n,u.attribute);let i=Fre.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===Gg.SEARCH_TYPES.EQUALS?u.estimated_count=rw.count(n,u.attribute,u.value):d===Gg.SEARCH_TYPES.CONTAINS||d===Gg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=$re}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await JF(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(XF.filterByType),f=d.length,m=rw.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(p=>u.get(p,{transaction:o,lazy:!0})),f>0&&(l=l.filter(p=>{for(let h=0;h<f;h++)if(!d[h](p))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(p=>Bre.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await JF(o,e,m,s.hash_attribute);c=c.concat(p)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=rw.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(Vre,"lmdbSearchByConditions");async function JF(e,t,r,n){let s=new Ure(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===Gg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,XF.searchByType(e,s,i,n).map(o=>o.value)}a(JF,"executeConditionSearch")});var fd=v((hMe,tk)=>{"use strict";var Kre=(H(),M(W)).OPERATIONS_ENUM,nw=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=Kre.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};tk.exports=nw});var sw=v((_Me,lk)=>{"use strict";var ik=pi(),ok=fd(),ak=gp(),ck=pp(),$n=(H(),M(W)),rk=oe(),nk=_t(),{getTransactionAuditStorePath:Yre,getSchemaPath:Wre}=bt(),sk=J();lk.exports=zre;async function zre(e){try{if(rk.isEmpty(global.hdb_schema[e.schema])||rk.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await jre(e),await Qre(e);let t=Wre(e.schema,e.table);try{await nk.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")sk.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Yre(e.schema,e.table);await nk.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")sk.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(zre,"lmdbDropTable");async function jre(e){let t=new ik($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,$n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[$n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await ak(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 ok($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await ck(s)}a(jre,"deleteAttributesFromSystem");async function Qre(e){let t=new ik($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,$n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[$n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,$n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,$n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await ak(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 ok($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await ck(s)}catch(i){throw i}}a(Qre,"dropTableFromSystem")});var dk=v((SMe,uk)=>{"use strict";var Jre=require("fs-extra"),Xre=pi(),Zre=dd(),ene=fd(),tne=sw(),rne=pp(),nne=QI(),sne=gp(),Qo=(H(),M(W)),{getSchemaPath:ine}=bt(),{handleHDBError:one,hdbErrors:ane}=_e(),{HDB_ERROR_MSGS:cne,HTTP_STATUS_CODES:lne}=ane;uk.exports=une;async function une(e){let t;try{t=await dne(e.schema);let r=new Xre(Qo.SYSTEM_SCHEMA_NAME,Qo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await sne(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await tne(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new ene(Qo.SYSTEM_SCHEMA_NAME,Qo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await rne(s);let i=ine(t);await Jre.remove(i)}catch(r){throw r}}a(une,"lmdbDropSchema");async function dne(e){let t=new Zre(Qo.SYSTEM_SCHEMA_NAME,Qo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await nne(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw one(new Error,cne.SCHEMA_NOT_FOUND(e),lne.NOT_FOUND,void 0,void 0,!0);return n}a(dne,"validateDropSchema")});var md=v((yMe,fk)=>{"use strict";var iw=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};fk.exports=iw});var aw=v((AMe,mk)=>{"use strict";var fne=require("fs-extra"),$g=_t(),{getTransactionAuditStorePath:mne}=bt(),ow=Wt(),bMe=md();mk.exports=pne;async function pne(e){let t;try{let r=mne(e.schema,e.table);await fne.mkdirp(r),t=await $g.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{$g.createDBI(t,ow.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),$g.createDBI(t,ow.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),$g.createDBI(t,ow.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(pne,"createTransactionsAuditEnvironment")});var Ek=v((NMe,hk)=>{"use strict";var cw=(H(),M(W)),pk=_t(),hne=Sl(),{getSystemSchemaPath:Ene,getSchemaPath:_ne}=bt(),wMe=eo(),gne=vg(),lw=Mg(),Sne=J(),Tne=aw();hk.exports=yne;async function yne(e,t){let r=_ne(t.schema,t.table),n=new lw(t.schema,t.table,cw.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new lw(t.schema,t.table,cw.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new lw(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await pk.createEnvironment(r,t.table),e!==void 0){let o=await pk.openEnvironment(Ene(),cw.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await hne.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await uw(n),await uw(s),await uw(i)}await Tne(t)}catch(o){throw o}}a(yne,"lmdbCreateTable");async function uw(e){try{await gne(e)}catch(t){Sne.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(uw,"createAttribute")});var gk=v((OMe,_k)=>{"use strict";var Rne=dp(),bne=Mm(),Ane=Ug(),Sp=(H(),M(W)),Ine=Sl().updateRecords,wne=_t(),{getSchemaPath:Nne}=bt(),Cne=fp(),One=J();_k.exports=Pne;async function Pne(e){try{let{schemaTable:t,attributes:r}=Rne(e);bne(e,r,t.hash_attribute),e.schema!==Sp.SYSTEM_SCHEMA_NAME&&(r.includes(Sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Ane(e.hdb_auth_header,t,r),s=Nne(e.schema,e.table),i=await wne.openEnvironment(s,e.table),o=await Ine(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Cne(e,o)}catch(c){One.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(Pne,"lmdbUpdateRecords")});var Tk=v((LMe,Sk)=>{"use strict";var Lne=(H(),M(W)).OPERATIONS_ENUM,dw=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Lne.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Sk.exports=dw});var Rk=v((vMe,yk)=>{"use strict";var MMe=Tk(),Dne=dp(),Mne=Mm(),vne=Ug(),Tp=(H(),M(W)),Une=Sl().upsertRecords,xne=_t(),{getSchemaPath:Bne}=bt(),Fne=fp(),kne=J(),{handleHDBError:Hne,hdbErrors:qne}=_e();yk.exports=Gne;async function Gne(e){let t;try{t=Dne(e)}catch(l){throw Hne(l,l.message,qne.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;Mne(e,n,r.hash_attribute),e.schema!==Tp.SYSTEM_SCHEMA_NAME&&(n.includes(Tp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Tp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Tp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Tp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await vne(e.hdb_auth_header,r,n),i=Bne(e.schema,e.table),o=await xne.openEnvironment(i,e.table),c=await Une(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Fne(e,c)}catch(l){kne.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}a(Gne,"lmdbUpsertRecords")});var Ak=v((xMe,bk)=>{"use strict";var fw=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};bk.exports=fw});var wk=v((FMe,Ik)=>{"use strict";var mw=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}};Ik.exports=mw});var Ok=v((qMe,Ck)=>{"use strict";var pw=_t(),{getTransactionAuditStorePath:$ne}=bt(),HMe=Ak(),yp=Wt(),Vne=oe(),Nk=wk(),Kne=require("util").promisify,Yne=Kne(setTimeout),Wne=1e4,zne=100;Ck.exports=jne;async function jne(e){let t=$ne(e.schema,e.table),r=await pw.openEnvironment(t,e.table,!0),n=pw.listDBIs(r);pw.initializeDBIs(r,yp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new Nk;do s=await Qne(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 Yne(zne);while(s.transactions_deleted>0);return i}a(jne,"deleteAuditLogsBefore");async function Qne(e,t){let r=new Nk;try{let n=e.dbis[yp.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[yp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Vne.isEmpty(c)||(s=e.dbis[yp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[yp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Wne)break}return await s,r}catch(n){throw n}}a(Qne,"deleteTransactions")});var Lk=v(($Me,Pk)=>{"use strict";var hw=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};Pk.exports=hw});var Mk=v((YMe,Dk)=>{"use strict";var Jne=pi(),Xne=fd(),KMe=Lk(),to=(H(),M(W)),Zne=oe(),Ew=_t(),ese=eo(),tse=gp(),rse=pp(),{getSchemaPath:nse}=bt();Dk.exports=sse;async function sse(e,t=!0){let r;e.schema===to.SYSTEM_SCHEMA_NAME?r=ese[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await ose(e),s=nse(e.schema,e.table),i=await Ew.openEnvironment(s,e.table);return t===!0&&await ise(e,i,r.hash_attribute),Ew.dropDBI(i,e.attribute),n}a(sse,"lmdbDropAttribute");async function ise(e,t,r){let n=Ew.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(o,u,l)}await s}a(ise,"removeAttributeFromAllObjects");async function ose(e){let t=new Jne(to.SYSTEM_SCHEMA_NAME,to.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,to.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[to.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,to.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await tse(t)).filter(o=>o[to.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Zne.isEmptyOrZeroLength(n))throw new Error(`Attribute '${drop_attribute_obj.attribute}' was not found in '${drop_attribute_obj.schema}.${drop_attribute_obj.table}'`);let s=n.map(o=>o[to.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Xne(to.SYSTEM_SCHEMA_NAME,to.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return rse(i)}a(ose,"dropAttributeFromSystem")});var kk=v((jMe,Fk)=>{"use strict";var _w=_t(),pd=Wt(),zMe=xn(),gw=(H(),M(W)),vk=oe(),{getTransactionAuditStorePath:ase}=bt(),cse=ld(),Vg=od(),lse=J();Fk.exports=use;async function use(e){let t=ase(e.schema,e.table),r=await _w.openEnvironment(t,e.table,!0),n=_w.listDBIs(r);_w.initializeDBIs(r,pd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case gw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Uk(r,e.search_values);case gw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,fse(r,e.search_values,s);case gw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return dse(r,e.search_values);default:return Uk(r)}}a(use,"readAuditLog");function Uk(e,t=[0,Date.now()]){vk.isEmpty(t[0])&&(t[0]=0),vk.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[pd.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 Vg,s))}a(Uk,"searchTransactionsByTimestamp");function dse(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[pd.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,Bk(e,i))}return Object.fromEntries(r)}a(dse,"searchTransactionsByUsername");function fse(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=cse.equals(e,pd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,pd.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:f}of d){let m=Number(f);n.has(m)?n.get(m).push(u.toString()):n.set(m,[u.toString()])}}let s=Array.from(n.keys()),i=Bk(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);xk(l,"records",r,d,o),xk(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(fse,"searchTransactionsByHashValues");function xk(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],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let f=new Vg(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new Vg(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(xk,"loopRecords");function Bk(e,t){let r=[];try{let n=e.dbis[pd.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 Vg,i);r.push(o)}}catch(i){lse.warn(i)}return r}catch(n){throw n}}a(Bk,"batchSearchTransactions")});var qk=v((ZMe,Hk)=>{"use strict";var{getSchemaPath:JMe}=bt(),XMe=_t(),{database:mse}=(we(),M(mt));Hk.exports={writeTransaction:pse};async function pse(e,t,r){return mse({database:e,table:t}).transaction(r)}a(pse,"writeTransaction")});var Kk=v((tve,Vk)=>{"use strict";var{getSchemaPath:Gk}=bt(),$k=_t();Vk.exports={flush:hse,resetReadTxn:Ese};async function hse(e,t){return(await $k.openEnvironment(Gk(e,t),t.toString())).flushed}a(hse,"flush");async function Ese(e,t){try{(await $k.openEnvironment(Gk(e,t),t.toString())).resetReadTxn()}catch{}}a(Ese,"resetReadTxn")});var jk=v((nve,zk)=>{"use strict";var{Readable:_se}=require("stream"),{getDatabases:gse}=(we(),M(mt)),{readSync:Sse,openSync:Tse,createReadStream:Yk}=require("fs"),{open:yse}=require("lmdb"),{OpenDBIObject:Wk}=op(),Rse=ap(),{AUDIT_STORE_OPTIONS:bse}=(Ki(),M(Zx)),{INTERNAL_DBIS_NAME:Ase,AUDIT_STORE_NAME:Ise}=Wt();zk.exports=Nse;var Sw=32768,wse=100;async function Nse(e){let t=e.database||e.schema||"data",r=gse()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,f=yse({noSync:!0,maxDbs:Rse.MAX_DBS}),m,p=f.openDB(Ase,new Wk(!1)),h=d.useReadTransaction(),E=0,g=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let N=f.openDB(S,y),I=d.openDB(S,y);for(let{key:$,version:ee,value:q}of I.getRange({start:null,transaction:h,versions:I.useVersions}))m=N.put($,q,ee),E++%wse===0&&(await new Promise(k=>setTimeout(k,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(N=>S.startsWith?.(N+"/"))){p.put(S,y);let[,N]=S.split("/"),I=!N,$=new Wk(!I,I);await g(S,$)}e.include_audit&&await g(Ise,{...bse}),await m;let R=Yk(f.path);return R.headers=l(),R.on("close",()=>{h.done(),f.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=Tse(o.path);return o.transaction(()=>{let u=Buffer.alloc(Sw);Sse(c,u,0,Sw),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let f=Yk(null,{fd:c,start:Sw}),m=new _se.from((async function*(){yield u;for await(let p of f)d.openTimer&&(d.openTimer=0),yield p;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(Nse,"getBackup")});var Xk=v((ive,Jk)=>{"use strict";var Cse=J(),{handleHDBError:Ose}=_e(),Pse=CB(),Lse=vg(),Dse=$I(),Mse=dF(),vse=pp(),Use=QI(),xse=BF(),Bse=YF(),Fse=gp(),kse=ek(),Hse=dk(),qse=Ek(),Gse=gk(),$se=Rk(),Vse=Ok(),Kse=sw(),Yse=Mk(),Wse=kk(),zse=qk(),Qk=Kk(),jse=jk(),Tw=class extends Pse{static{a(this,"LMDBBridge")}async searchByConditions(t){return kse(t)}async getDataByHash(t){return await Use(t)}async searchByHash(t){return await xse(t)}async getDataByValue(t,r){return await Bse(t,r)}async searchByValue(t){return await Fse(t)}async createSchema(t){return await Mse(t)}async dropSchema(t){return await Hse(t)}async createTable(t,r){return await qse(t,r)}async dropTable(t){return await Kse(t)}async createAttribute(t){return await Lse(t)}async createRecords(t){return await Dse(t)}async updateRecords(t){return await Gse(t)}async upsertRecords(t){try{return await $se(t)}catch(r){throw Ose(r,null,null,Cse.ERR,r)}}async deleteRecords(t){return await vse(t)}async dropAttribute(t){return await Yse(t)}async deleteAuditLogsBefore(t){return await Vse(t)}async readAuditLog(t){return await Wse(t)}writeTransaction(t,r,n){return zse.writeTransaction(t,r,n)}flush(t,r){return Qk.flush(t,r)}resetReadTxn(t,r){return Qk.resetReadTxn(t,r)}getBackup(t){return jse(t)}};Jk.exports=Tw});function Vn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function bp(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=a(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a string, attempt to assign ${m}`);Vn(this)[u]=m},"set");break;case"ID":d=a(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a string, attempt to assign ${m}`);Vn(this)[u]=m},"set");break;case"Float":case"Number":d=a(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a number, attempt to assign ${p}`);Vn(this)[u]=m},"set");break;case"Int":d=a(function(m){let p=m?.__op__?m.value:m;if(!(p>>0===p||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs((p>>0)-p)<=1)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);Vn(this)[u]=m},"set");break;case"Long":d=a(function(m){let p=m?.__op__?m.value:m;if(!(Math.round(p)===m&&Math.abs(p)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs(p)<=9007199254740992)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);Vn(this)[u]=m},"set");break;case"BigInt":d=a(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="bigint"||m==null&&l.nullable!==!1))if(typeof p=="string"||typeof p=="number")p=BigInt(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be a number, attempt to assign ${m}`);Vn(this)[u]=m},"set");break;case"Boolean":d=a(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a boolean, attempt to assign ${m}`);Vn(this)[u]=m},"set");break;case"Date":d=a(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new ds.ClientError(`${u} must be a Date, attempt to assign ${m}`);Vn(this)[u]=m},"set");break;case"Bytes":d=a(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);Vn(this)[u]=m},"set");break;case"Blob":d=a(function(m){if(!(m instanceof vs||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a Blob, attempt to assign ${m}`);Vn(this)[u]=m},"set");break;case"Any":case void 0:d=a(function(m){Vn(this)[u]=m},"set");break;default:d=a(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be an object, attempt to assign ${m}`);Vn(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let h=m[u];if(h?.__op__){let E=this.getRecord()?.[u];return h.update(E)}return h}let p=this.getRecord()?.[u];if(p&&typeof p=="object"){let h=yw(p,l);if(h)return m||this._setChanges(m=Object.create(null)),m[u]=h}return p},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}o("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),o("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new ds.ClientError("Can not add a property to a sealed table schema");Vn(this)[l]=u}),o("deleteProperty",function(l){Vn(this)[l]=void 0}),o("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let p=u[f];m=m.update(p)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||o("get",n.getProperty),n.delete||o("delete",n.deleteProperty),n.then||o("then",null);function o(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}a(o,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?tH:eH);break}c=l}while(c&&c!==eH&&c!==tH)}function rH(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(Zk[t])return Zk[t];let n=r.getChanges?.();if(n&&t in n)return n[t];let s=r.getRecord?.()?.[t];if(s&&typeof s=="object"){let i=yw(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function Qse(e,t,r,n){if(typeof t=="string"){let s=n.getChanges?.();s||(s={},n._setChanges(s)),s[t]=r}else Object.defineProperty(n,t,{value:r,configurable:!0,writable:!0});return!0}function yw(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends Il{static{a(this,"TrackedObject")}},bp(r,t)),new r(e)):new Il(e);case Array:let n=new Yg(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=yw(o,t?.elements)),n[s]=o}return n;default:return e}}function Wg(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=Wg(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function wl(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&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=wl(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={...e.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=dA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=wl(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)Jse.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Kg(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Al]||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?.getRecord?.()===s){if(Kg(i))return!0}else return!0}}else{let r=e.getChanges?.();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.getRecord?.()===i){if(Kg(s))return!0}else return!0}else return!0}}return!1}var ds,Zk,eH,tH,Il,Jse,Al,Yg,Rp,Rw=ne(()=>{ds=b(_e());B_();ss();a(Vn,"getChanges");a(bp,"assignTrackedAccessors");Zk=Object.prototype,eH=new Proxy({},{get:rH}),tH=new Proxy({},{get:rH,set:Qse});a(rH,"getProxiedProperty");a(Qse,"setProxiedProperty");a(yw,"trackObject");Il=class{static{a(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};bp(Il,{},!0);a(Wg,"collapseData");Jse=Object.prototype.hasOwnProperty;a(wl,"updateAndFreeze");a(Kg,"hasChanges");Al=Symbol.for("has-array-changes"),Yg=class extends Array{static{a(this,"TrackedArray")}#e;[Al];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Al]=!0,super.splice(...t)}push(...t){return this[Al]=!0,super.push(...t)}pop(){return this[Al]=!0,super.pop()}unshift(...t){return this[Al]=!0,super.unshift(...t)}shift(){return this[Al]=!0,super.shift()}};Yg.prototype.constructor=Array;Rp=class{static{a(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var uH={};ye(uH,{ResourceBridge:()=>Iw});function ww({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 nH(e,t){let r=ro(e),n=ww(e,r);if(!r)throw new hi.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,replicateFrom:e.replicateFrom},o;At(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&Wg(d)}catch(f){d={message:(0,lH.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function ro(e){let t=e.database||e.schema||Zse,r=lt()[t];if(!r)throw(0,hi.handleHDBError)(new Error,Xse.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function sH(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*iH(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var oH,zg,hi,aH,bw,Aw,cH,lH,Xse,Zse,eie,tie,Iw,dH=ne(()=>{oH=b(Xk()),zg=b(ud()),hi=b(_e());we();aH=b(dp());H();bw=b(zo()),Aw=b(ls()),cH=b(oe());Ga();Rw();lH=b(J()),{HDB_ERROR_MSGS:Xse}=hi.hdbErrors,Zse="data",eie=1e4,tie=10,Iw=class extends oH.default{static{a(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=ro(t);if(!r)throw new hi.ClientError(`Table ${t.table} not found`);t.conditions=t.conditions.map(n);function n(i){if("conditions"in i&&i.conditions)return i.conditions=i.conditions.map(n),i;{let o=i;return{attribute:o.attribute??o.search_attribute,comparator:o.comparator??o.search_type,value:o.value!==void 0?o.value:o.search_value}}}a(n,"mapCondition");let s=(0,zg.default)(t,"conditions");if(s)throw(0,hi.handleHDBError)(s,s.message,400,void 0,void 0,!0);return r.search({conditions:t.conditions,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:ww(t,r),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}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 hi.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}]}Xe({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await ro(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=ro(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(o);return i(o,d,f)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return ro(t).dropTable()}createSchema(t){return hd({database:t.schema,table:null}),bw.signalSchemaChange(new Aw.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Nw(t.schema),bw.signalSchemaChange(new Aw.SchemaEventMsg(process.pid,V.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{schemaTable:r,attributes:n}=(0,aH.default)(t),s,i=lt()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),At(o,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,o);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=Wg(m));for(let p in d)if(Object.prototype.hasOwnProperty.call(d,p)){let h=d[p];if(typeof h=="function")try{let E=h([[m]]);Array.isArray(E)&&(h=E[0].func_val,d[p]=h)}catch(E){throw E.message+="Trying to set key "+p+" on object"+JSON.stringify(d),E}}if(m)for(let p in m)Object.prototype.hasOwnProperty.call(d,p)||(d[p]=m[p]);await(f==null?i.create(d,o):i.put(d,o)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=lt()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),At(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return sH(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=lt()[t.schema][t.table];if(!r.createdTimeProperty)throw new hi.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:T_.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),o.push(...d.skipped_hashes),await(0,cH.asyncSetTimeout)(tie),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%eie===0&&await u();return l.length>0&&await u(),s?sH(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,zg.default)(t,"hashes");if(r)throw r;return nH(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of nH(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Qb[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.search_attribute!==void 0&&(t.attribute=t.search_attribute),t.search_value!==void 0&&(t.value=t.search_value);let n=(0,zg.default)(t,"value");if(n)throw n;let s=ro(t);if(!s)throw new hi.ClientError(`Table ${t.table} not found`);let i=t.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===T_.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.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:ww(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=ro(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){ro({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return ro(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=ro(t),n={};switch(t.search_type){case y_.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let o=i.operation??i.type;return o==="put"&&(o="upsert"),{operation:o,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case y_.USERNAME:{let s=t.search_values;for await(let i of iH(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return iH(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(ww,"getSelect");a(nH,"getRecords");a(ro,"getTable");a(sH,"createDeleteResponse");a(iH,"groupRecordsInHistory")});var fs=v((Eve,fH)=>{"use strict";var{ResourceBridge:rie}=(dH(),M(uH)),nie=ae();nie.initSync();var jg;function sie(){return jg||(jg=new rie,jg)}a(sie,"getBridge");fH.exports=sie()});var Ei=v((gve,hH)=>{var iie=eo(),{promisify:oie}=require("util"),{getDatabases:pH}=(we(),M(mt));hH.exports={setSchemaDataToGlobal:mH,getTableSchema:aie,getSystemSchema:cie,setSchemaDataToGlobalAsync:oie(mH)};function mH(e){global.hdb_schema=pH(),e&&e()}a(mH,"setSchemaDataToGlobal");function aie(e,t,r){let n=pH()[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(aie,"getTableSchema");function cie(){return iie}a(cie,"getSystemSchema")});var _n=v((Tve,SH)=>{"use strict";var Jg=II(),nn=oe(),lie=require("util"),Xg=fs(),uie=Ei(),EH=J(),{handleHDBError:Nl,hdbErrors:die}=_e(),{HTTP_STATUS_CODES:Cl}=die,fie=lie.promisify(uie.getTableSchema),mie="updated",_H="inserted",gH="upserted";SH.exports={insert:hie,update:Eie,upsert:_ie,validation:pie,flush:gie};async function pie(e){if(nn.isEmpty(e))throw new Error("invalid update parameters defined.");if(nn.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(nn.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await fie(e.schema,e.table),r=Jg(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&&nn.isEmptyOrZeroLength(c[n]))throw EH.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(!nn.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw EH.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!nn.isEmpty(c[n])&&c[n]!==""&&s.has(nn.autoCast(c[n]))&&(c.skip=!0),s.add(nn.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(pie,"validation");async function hie(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Jg(e);if(t)throw Nl(new Error,t.message,Cl.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw Nl(new Error,r,Cl.BAD_REQUEST);let n=await Xg.createRecords(e);return Qg(_H,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(hie,"insertData");async function Eie(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Jg(e);if(t)throw Nl(new Error,t.message,Cl.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw Nl(new Error,r,Cl.BAD_REQUEST);let n=await Xg.updateRecords(e);return nn.isEmpty(n.existing_rows)?Qg(mie,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Qg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Eie,"updateData");async function _ie(e){if(e.operation!=="upsert")throw Nl(new Error,"invalid operation, must be upsert",Cl.INTERNAL_SERVER_ERROR);let t=Jg(e);if(t)throw Nl(new Error,t.message,Cl.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw Nl(new Error,r,Cl.BAD_REQUEST);let n=await Xg.upsertRecords(e);return Qg(gH,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(_ie,"upsertData");function Qg(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===_H?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===gH?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Qg,"returnObject");function gie(e){return nn.transformReq(e),Xg.flush(e.schema,e.table)}a(gie,"flush")});var Ow=v((Rve,RH)=>{var Sie=ot(),Cw=require("joi"),{hdbTable:Tie,hdbDatabase:TH}=Xi(),yH={schema:TH,database:TH,table:Tie},yie={date:Cw.date().iso().required()},Rie={timestamp:Cw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};RH.exports=function(e,t){let r=t==="timestamp"?{...yH,...Rie}:{...yH,...yie},n=Cw.object(r);return Sie.validateBySchema(e,n)}});var IH=v((bve,AH)=>{var bie=ot(),Pw=require("joi"),{hdbTable:Aie,hdbDatabase:bH}=Xi(),Iie=Pw.object({schema:bH,database:bH,table:Aie,hash_values:Pw.array().required(),ids:Pw.array()});AH.exports=function(e){return bie.validateBySchema(e,Iie)}});var vw=v((Ave,wH)=>{"use strict";var Lw=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}},Dw=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.attribute=n,this.hash_attribute=s,this.get_attributes=i,this.value=o}},Mw=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};wH.exports={InsertObject:Lw,NoSQLSeachObject:Dw,DeleteResponseObject:Mw}});var rc=v((wve,LH)=>{"use strict";var CH=Ow(),wie=IH(),Ol=oe(),NH=require("moment"),OH=J(),{promisify:Nie,callbackify:Cie}=require("util"),Pl=(H(),M(W)),Oie=Ei(),Uw=Nie(Oie.getTableSchema),xw=fs(),{DeleteResponseObject:Pie}=vw(),{handleHDBError:ec,hdbErrors:Lie}=_e(),{HDB_ERROR_MSGS:Zg,HTTP_STATUS_CODES:tc}=Lie,Die="records successfully deleted",Mie=Cie(PH);LH.exports={delete:Mie,deleteRecord:PH,deleteFilesBefore:vie,deleteAuditLogsBefore:Uie};async function vie(e){let t=CH(e,"date");if(t)throw ec(t,t.message,tc.BAD_REQUEST,void 0,void 0,!0);if(Ol.transformReq(e),!NH(e.date,NH.ISO_8601).isValid())throw ec(new Error,Zg.INVALID_DATE,tc.BAD_REQUEST,Pl.LOG_LEVELS.ERROR,Zg.INVALID_DATE,!0);let n=Ol.checkSchemaTableExist(e.schema,e.table);if(n)throw ec(new Error,n,tc.NOT_FOUND,Pl.LOG_LEVELS.ERROR,n,!0);let s=await xw.deleteRecordsBefore(e);if(await Uw(e.schema,e.table),OH.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(vie,"deleteFilesBefore");async function Uie(e){let t=CH(e,"timestamp");if(t)throw ec(t,t.message,tc.BAD_REQUEST,void 0,void 0,!0);if(Ol.transformReq(e),isNaN(e.timestamp))throw ec(new Error,Zg.INVALID_VALUE("Timestamp"),tc.BAD_REQUEST,Pl.LOG_LEVELS.ERROR,Zg.INVALID_VALUE("Timestamp"),!0);let r=Ol.checkSchemaTableExist(e.schema,e.table);if(r)throw ec(new Error,r,tc.NOT_FOUND,Pl.LOG_LEVELS.ERROR,r,!0);let n=await xw.deleteAuditLogsBefore(e);return await Uw(e.schema,e.table),OH.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(Uie,"deleteAuditLogsBefore");async function PH(e){e.ids&&(e.hash_values=e.ids);let t=wie(e);if(t)throw ec(t,t.message,tc.BAD_REQUEST,void 0,void 0,!0);Ol.transformReq(e);let r=Ol.checkSchemaTableExist(e.schema,e.table);if(r)throw ec(new Error,r,tc.NOT_FOUND,Pl.LOG_LEVELS.ERROR,r,!0);try{await Uw(e.schema,e.table);let n=await xw.deleteRecords(e);return Ol.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Die}`),n}catch(n){if(n.message===Pl.SEARCH_NOT_FOUND_MESSAGE){let s=new Pie;return s.message=Pl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(PH,"deleteRecord")});var qw={};ye(qw,{HASH_FUNCTION:()=>$r,hash:()=>kw,validate:()=>Hw});function Bw(e=Ip){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Ap.randomBytes(e)).map(r=>t[r%t.length]).join("")}function kw(e,t=$r[MH?.toUpperCase()]??$r.SHA256){return Fw[t](e)}function Hw(e,t,r=$r[MH?.toUpperCase()]??$r.SHA256){return e?xie[r](e,t):!1}var Ap,Ed,DH,MH,Ip,vH,$r,Fw,xie,Gw=ne(()=>{Ap=b(require("node:crypto")),Ed=b(require("argon2")),DH=b(ae());H();MH=(0,DH.get)(F.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Ip=16,vH=9,$r={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};a(Bw,"generateSalt");Fw={[$r.MD5]:(e,t=void 0)=>{t=t??Bw(vH);let r=Ap.createHash($r.MD5).update(e+t).digest("hex");return t+r},[$r.SHA256]:(e,t=void 0)=>{t=t??Bw(Ip);let r=Ap.createHash($r.SHA256).update(e+t).digest("hex");return t+r},[$r.ARGON2ID]:async e=>{let t=Bw(Ip),r=await Ed.hash(e,{type:Ed.argon2id,salt:Buffer.from(t)});return t+r}},xie={[$r.MD5]:(e,t)=>{let r=e.slice(0,vH);return e===Fw[$r.MD5](t,r)},[$r.SHA256]:(e,t)=>{let r=e.slice(0,Ip);return e===Fw[$r.SHA256](t,r)},[$r.ARGON2ID]:async(e,t)=>await Ed.verify(e.slice(Ip),t)};a(kw,"hash");a(Hw,"validate")});var xH=v((Pve,UH)=>{var $w=ot(),gn={username:{presence:!0,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 Bie(e){return gn.password.presence=!0,gn.username.presence=!0,gn.role.presence=!0,gn.active.presence=!0,$w.validateObject(e,gn)}a(Bie,"addUserValidation");function Fie(e){return gn.password.presence=!1,gn.username.presence=!0,gn.role.presence=!1,gn.active.presence=!1,$w.validateObject(e,gn)}a(Fie,"alterUserValidation");function kie(e){return gn.password.presence=!1,gn.username.presence=!0,gn.role.presence=!1,gn.active.presence=!1,$w.validateObject(e,gn)}a(kie,"dropUserValidation");UH.exports={addUserValidation:Bie,alterUserValidation:Fie,dropUserValidation:kie}});var jH=v((Mve,zH)=>{"use strict";var Vw=require("recursive-iterator"),Hie=require("alasql"),Kw=require("clone"),BH=oe(),{handleHDBError:FH,hdbErrors:qie}=_e(),{HDB_ERROR_MSGS:kH,HTTP_STATUS_CODES:HH}=qie,{getDatabases:Gie}=(we(),M(mt)),$ie=["DISTINCT_ARRAY"],qH=Symbol("validateTables"),Yw=Symbol("validateTable"),Dve=Symbol("getAllColumns"),GH=Symbol("validateAllColumns"),eS=Symbol("findColumn"),$H=Symbol("validateOrderBy"),wp=Symbol("validateSegment"),Ww=Symbol("validateColumn"),VH=Symbol("setColumnsForTable"),KH=Symbol("checkColumnsForAsterisk"),YH=Symbol("validateGroupBy"),WH=Symbol("hasColumns"),zw=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[qH](),this[KH](),this[GH]()}[qH](){if(this[WH]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Yw](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Yw](t.table)})}}[WH](){let t=!1,r=new Vw(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Yw](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Gie();if(!r[t.databaseid])throw FH(new Error,kH.SCHEMA_NOT_FOUND(t.databaseid),HH.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw FH(new Error,kH.TABLE_NOT_FOUND(t.databaseid,t.tableid),HH.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Kw(s);i.table=Kw(t),this.attributes.push(i)})}[eS](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)}[KH](){let t=new Vw(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[VH](r.tableid)}[VH](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new Hie.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[GH](){this[wp](this.statement.columns,!1),this[wp](this.statement.joins,!1),this[wp](this.statement.where,!1),this[YH](this.statement.group,!1),this[wp](this.statement.order,!0)}[wp](t,r){if(!t)return;let n=new Vw(t),s=[];for(let{node:i,path:o}of n)!BH.isEmpty(i)&&!BH.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[$H](i):s.push(this[Ww](i)));return s}[YH](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&$ie.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Kw(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[eS](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[eS](n);if(!i||i.length===0)throw`unknown column '${group_column.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${group_column.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 '${group_column.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`}[$H](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[Ww](t)}[Ww](t){let r=this[eS](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]}};zH.exports=zw});var ZH=v((Uve,XH)=>{"use strict";var QH=require("lodash"),Np=require("mathjs"),Vie=require("jsonata"),JH=oe();XH.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?QH.uniqWith(e,QH.isEqual):e,"distinct_array"),searchJSON:Kie,mad:Cp.bind(null,Np.mad),mean:Cp.bind(null,Np.mean),mode:Cp.bind(null,Np.mode),prod:Cp.bind(null,Np.prod),median:Cp.bind(null,Np.median)};function Cp(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(Cp,"aggregateFunction");function Kie(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(JH.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),JH.isEmpty(this.__ala__.res[r])){let n=Vie(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(Kie,"searchJSON")});var tq=v((Bve,eq)=>{"use strict";var dr=require("moment"),jw="YYYY-MM-DDTHH:mm:ss.SSSZZ";dr.suppressDeprecationWarnings=!0;eq.exports={current_date:a(()=>dr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>dr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return dr(e).utc().format("YYYY");case"month":return dr(e).utc().format("MM");case"day":return dr(e).utc().format("DD");case"hour":return dr(e).utc().format("HH");case"minute":return dr(e).utc().format("mm");case"second":return dr(e).utc().format("ss");case"millisecond":return dr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>dr(e).utc().format(jw),"date"),date_format:a((e,t)=>dr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>dr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>dr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=dr(e).utc(),s=dr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>dr().utc().valueOf(),"now"),get_server_time:a(()=>dr().format(jw),"get_server_time"),offset_utc:a((e,t)=>dr(e).utc().utcOffset(t).format(jw),"offset_utc")}});var iq=v((kve,sq)=>{"use strict";var Yie=require("@turf/area"),Wie=require("@turf/length"),zie=require("@turf/circle"),jie=require("@turf/difference"),Qie=require("@turf/distance"),Jie=require("@turf/boolean-contains"),Xie=require("@turf/boolean-equal"),Zie=require("@turf/boolean-disjoint"),eoe=require("@turf/helpers"),rq=(H(),M(W)),Ze=oe(),Jo=J();sq.exports={geoArea:toe,geoLength:roe,geoCircle:noe,geoDifference:soe,geoDistance:nq,geoNear:ioe,geoContains:ooe,geoEqual:aoe,geoCrosses:coe,geoConvert:loe};function toe(e){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return Yie.default(e)}catch(t){return Jo.trace(t,e),NaN}}a(toe,"geoArea");function roe(e,t){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return Wie.default(e,{units:t||"kilometers"})}catch(r){return Jo.trace(r,e),NaN}}a(roe,"geoLength");function noe(e,t,r){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return zie.default(e,t,{units:r||"kilometers"})}catch(n){return Jo.trace(n,e,t),NaN}}a(noe,"geoCircle");function soe(e,t){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return jie(e,t)}catch(r){return Jo.trace(r,e,t),NaN}}a(soe,"geoDifference");function nq(e,t,r){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return Qie.default(e,t,{units:r||"kilometers"})}catch(n){return Jo.trace(n,e,t),NaN}}a(nq,"geoDistance");function ioe(e,t,r,n){if(Ze.isEmpty(e)||Ze.isEmpty(t))return!1;if(Ze.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return nq(e,t,n)<=r}catch(s){return Jo.trace(s,e,t),!1}}a(ioe,"geoNear");function ooe(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return Jie.default(e,t)}catch(r){return Jo.trace(r,e,t),!1}}a(ooe,"geoContains");function aoe(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return Xie.default(e,t)}catch(r){return Jo.trace(r,e,t),!1}}a(aoe,"geoEqual");function coe(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return!Zie.default(e,t)}catch(r){return Jo.trace(r,e,t),!1}}a(coe,"geoCrosses");function loe(e,t,r){if(Ze.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ze.isEmpty(t))throw new Error("geo_type is required");if(Ze.isEmpty(rq.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(rq.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ze.autoCastJSON(e)),eoe[t](e,r)}a(loe,"geoConvert")});var tS=v((qve,oq)=>{var Ll=ZH(),ms=tq(),no=iq();oq.exports=e=>{e.aggr.mad=e.aggr.MAD=Ll.mad,e.aggr.mean=e.aggr.MEAN=Ll.mean,e.aggr.mode=e.aggr.MODE=Ll.mode,e.aggr.prod=e.aggr.PROD=Ll.prod,e.aggr.median=e.aggr.MEDIAN=Ll.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ll.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ll.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ms.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ms.current_time,e.fn.extract=e.fn.EXTRACT=ms.extract,e.fn.date=e.fn.DATE=ms.date,e.fn.date_format=e.fn.DATE_FORMAT=ms.date_format,e.fn.date_add=e.fn.DATE_ADD=ms.date_add,e.fn.date_sub=e.fn.DATE_SUB=ms.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ms.date_diff,e.fn.now=e.fn.NOW=ms.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ms.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ms.get_server_time,e.fn.getdate=e.fn.GETDATE=ms.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ms.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=no.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=no.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=no.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=no.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=no.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=no.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=no.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=no.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=no.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=no.geoNear}});var uq=v((Gve,lq)=>{"use strict";var Op=require("lodash"),Kn=require("alasql");Kn.options.cache=!1;var uoe=tS(),aq=require("clone"),rS=require("recursive-iterator"),Ke=J(),st=oe(),_d=fs(),doe=(H(),M(W)),{hdbErrors:foe}=_e(),{getDatabases:cq}=(we(),M(mt)),moe="IS NULL",_i="There was a problem performing this search. Please check the logs and try again.";uoe(Kn);var Qw=class{static{a(this,"SQLSearch")}constructor(t,r){if(st.isEmpty(t))throw Ke.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(),st.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!st.isEmptyOrZeroLength(n))return Ke.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ke.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ke.error(n),new Error(_i)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ke.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ke.error(n),new Error(_i)}if(Object.keys(this.data).length===0)return Ke.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ke.error("Error thrown from processJoins in SQLSearch class method search."),Ke.error(n),new Error(_i)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ke.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ke.error(n),new Error(_i)}try{return t=await this._finalSQL(),t}catch(n){throw Ke.error("Error thrown from finalSQL in SQLSearch class method search."),Ke.error(n),new Error(_i)}}_getColumns(){let t=new rS(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(aq(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Op.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].__hashName=cq()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(st.isEmpty(this.statement.where)){Ke.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new rS(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!st.isEmpty(r)&&r.right)if(st.isNotEmptyAndHasValue(r.right.value)){let n=st.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Kn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=st.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Kn.yy.LogicValue({value:i}):n instanceof Kn.yy.StringValue&&st.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Kn.yy.NumValue({value:i}))});if(t){Ke.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new rS(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(!st.isEmpty(doe.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(st.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(st.isEmptyOrZeroLength(r.left.columnid)||st.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,value:r.right.value})}continue}if(st.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"=":!st.isEmpty(r.right.value)||!st.isEmpty(r.left.value)?n.add(st.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[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(st.isEmptyOrZeroLength(this.all_table_attributes)&&st.isEmptyOrZeroLength(this.statement.from)&&st.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&&Op.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(st.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);st.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(st.isEmptyOrZeroLength(this.all_table_attributes)&&!st.isEmptyOrZeroLength(this.columns.columns))return t;if(st.isEmptyOrZeroLength(this.all_table_attributes)&&st.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Kn.promise(r)}catch(r){throw Ke.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ke.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(aq(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__mergedAttributes.push(r),this.data[t].__mergedAttrMap[r]=this.data[t].__mergedAttributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__mergedData[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__mergedAttrMap[n];this.data[t].__mergedData[r].splice(i,1,s)}async _getFetchAttributeValues(){if(st.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(moe)>-1&&this.tables.forEach(s=>{let i={columnid:cq()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Op.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].__hashName;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].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!st.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!st.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await _d.getDataByHash(c);for(let f of c.hash_values)d.get(f)&&!this.data[i].__mergedData[f]&&(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f))}catch(d){throw Ke.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ke.error(d),new Error(_i)}else try{c.attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.value=d;let m=await _d.getDataByValue(f);for(let[p,h]of m)this.data[i].__mergedData[p]?this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]):(this.data[i].__mergedData[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,p))}))}catch(d){throw Ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ke.error(d),new Error(_i)}else if(!st.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!st.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let p=d[f];c.attribute=p.attribute,c.value=p.value;let h=await _d.getDataByValue(c,p.operation);if(l)for(let[E]of h)this.data[i].__mergedData[E]||(this.data[i].__mergedData[E]=[...n[i]],this._setMergedHashAttribute(i,E));else for(let[E,g]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw Ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ke.error(d),new Error(_i)}else try{c.attribute=s.attribute,c.value="*";let d=await _d.getDataByValue(c);if(l)for(let[f]of d)this.data[i].__mergedData[f]||(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f));else for(let[f,m]of d)this.data[i].__mergedData[f]?this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]):(this.data[i].__mergedData[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,f))}catch(d){throw Ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ke.error(d),new Error(_i)}}}_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 Kn.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 Kn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Kn.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 Kn.yy.FuncValue:new Kn.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}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(p=>{p.joinmode&&p.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(p.table);let h=p.joinmode+" JOIN ? AS "+(p.as?p.as:p.table.tableid);p.on&&(h+=" ON "+p.on.toString()),i.push(h),t.push(Object.values(this.data[`${p.table.databaseid_orig}_${p.table.as?p.table.as_orig:p.table.tableid_orig}`].__mergedData))});let o=[],c={};s.forEach(p=>{let h=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__hashName,E=p.as?p.as_orig:p.tableid_orig;o.push({key:`'${E}.${h}'`,schema:p.databaseid_orig,table:p.as?p.as_orig:p.tableid_orig,keys:new Set}),r.push(`${p.as?p.as:p.tableid}.\`${h}\` AS "${E}.${h}"`),c[p.as?p.as_orig:p.tableid_orig]=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(p=>{p.is_func?r.push(p.initial_select_column.toString()):p.initial_select_column.tableid?r.push(`${p.initial_select_column.tableid}.${p.initial_select_column.columnid} AS ${p.expression.columnid}`):r.push(`${p.initial_select_column.columnid} AS ${p.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let p=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,h=this._convertColumnsToIndexes(p,s);m=await Kn.promise(h,t),t=null}catch(p){throw Ke.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ke.error(p),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let p=0,h=m.length;p<h;p++){let E=m[p];o.forEach(g=>{E[g.key]!==null&&E[g.key]!==void 0&&g.keys.add(E[g.key])})}o.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=Op.difference(h,[...p.keys].map(g=>g.toString()));for(let g=0,R=E.length;g<R;g++){let S=E[g];delete this.data[`${p.schema}_${p.table}`].__mergedData[S]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new rS(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=Op.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 Ke.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ke.error(i),new Error(_i)}}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].__mergedData,o=[];for(let d in i)o.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await _d.getDataByHash(c),u=s.columns.length;for(let d=0,f=o.length;d<f;d++){let m=o[d],p=l.get(m);for(let h=0;h<u;h++){let E=s.columns[h],g=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(g)}}}}catch(r){throw Ke.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ke.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}`].__mergedData)),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}`].__mergedData)),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,l=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===l}).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();Ke.trace(`Final SQL: ${s}`),n=await Kn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ke.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ke.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ke.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 Ke.error(foe.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ke.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].__mergedAttributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,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.attribute=n.attribute,i.value="*";let o=await _d.getDataByValue(i);for(let[c,l]of o)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ke.error("There was an error when processing this SQL operation. Check your logs"),Ke.error(o),new Error(_i)}}return Object.values(Object.values(this.data)[0].__mergedData)}};lq.exports=Qw});var Sn=v((Vve,dq)=>{"use strict";dq.exports={searchByConditions:poe,searchByHash:hoe,searchByValue:Eoe,search:_oe};var Jw=fs(),{transformReq:Xw}=oe();async function poe(e){return Xw(e),Jw.searchByConditions(e)}a(poe,"searchByConditions");async function hoe(e){Xw(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Jw.searchByHash(e))r&&t.push(r);return t}a(hoe,"searchByHash");async function Eoe(e){Xw(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Jw.searchByValue(e))t.push(r);return t}a(Eoe,"searchByValue");function _oe(e,t){try{let r=jH(),n=uq(),s=new r(e);s.validate(),new n(s.statement,s.attributes).search().then(o=>{t(null,o)}).catch(o=>{t(o,null)})}catch(r){return t(r)}}a(_oe,"search")});var so=v((Yve,hq)=>{"use strict";var Pp=require("crypto"),goe=ae(),{CONFIG_PARAMS:Soe}=(H(),M(W)),mq="aes-256-cbc",Toe=32,yoe=16,Zw=64,pq=32,Roe=Zw+pq,fq=new Map;hq.exports={encrypt:boe,decrypt:Aoe,createNatsTableStreamName:Ioe};function boe(e){let t=Pp.randomBytes(Toe),r=Pp.randomBytes(yoe),n=Pp.createCipheriv(mq,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(boe,"encrypt");function Aoe(e){let t=e.substr(0,Zw),r=e.substr(Zw,pq),n=e.substr(Roe,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Pp.createDecipheriv(mq,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Aoe,"decrypt");function Ioe(e,t){let r=goe.get(Soe.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=fq.get(r);return n||(n=Pp.createHash("md5").update(r).digest("hex"),fq.set(r,n)),n}a(Ioe,"createNatsTableStreamName")});var pt=v((jve,_q)=>{"use strict";var{platform:zve}=require("os"),woe="nats-server.zip",eN="nats-server",Noe=process.platform==="win32"?`${eN}.exe`:eN,Coe=/^[^\s.,*>]+$/,Eq="__request__",Ooe=a(e=>`${e}.${Eq}`,"REQUEST_SUBJECT"),Poe={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Loe={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Doe={HUB:"hub.pid",LEAF:"leaf.pid"},Moe={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},voe={SUCCESS:"success",ERROR:"error"},Uoe={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},xoe={TXN:"txn",MSGID:"msgid"},gd={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Boe={[gd.ERR]:1,[gd.WRN]:2,[gd.INF]:3,[gd.DBG]:4,[gd.TRC]:5},Foe={debug:"-D",trace:"-DVV"};_q.exports={NATS_SERVER_ZIP:woe,NATS_SERVER_NAME:eN,NATS_BINARY_NAME:Noe,PID_FILES:Doe,NATS_CONFIG_FILES:Loe,SERVER_SUFFIX:Moe,NATS_TERM_CONSTRAINTS_RX:Coe,REQUEST_SUFFIX:Eq,UPDATE_REMOTE_RESPONSE_STATUSES:voe,CLUSTER_STATUS_STATUSES:Uoe,REQUEST_SUBJECT:Ooe,SUBJECT_PREFIXES:xoe,MSG_HEADERS:Poe,LOG_LEVELS:gd,LOG_LEVEL_FLAGS:Foe,LOG_LEVEL_HIERARCHY:Boe}});var tN=v(Tn=>{"use strict";var koe={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
|
|
10
|
+
`},"serialize"),compressible:!1,q:.8});hn.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});bx={type:"application/json",serializeStream:Bm,serialize:Fm,deserialize:e9,q:.5};hn.set("*/*",bx);hn.set("",bx);a(e9,"tryJSONParse");a(Hm,"registerContentHandlers");t9=(0,yx.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=q_(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&o.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});a(q_,"findBestSerializer");Ex=EA.default.get(F.HTTP_COMPRESSIONTHRESHOLD);a(qm,"serialize");a(Bo,"serializeMessage");a(TA,"asyncSerialization");a(yA,"hasAsyncSerialization");a(r9,"streamToBuffer");n9=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(s9,"isBufferEncoding");a(i9,"parseContentType");a(Fo,"getDeserializer");a(o9,"deserializerUnknownType");a(a9,"transformIterable");a(H_,"toCsvStream")});var Q_={};ye(Q_,{Blob:()=>vs,blobsWereEncoded:()=>il,cleanupOrphans:()=>y9,databasePaths:()=>bA,decodeBlobsWithWrites:()=>j_,decodeFromDatabase:()=>qo,decodeWithBlobCallback:()=>Vm,deleteBlob:()=>Y_,deleteBlobsInObject:()=>Va,deleteRootBlobPathsForDB:()=>wA,encodeBlobsAsBuffers:()=>g9,encodeBlobsWithFilePath:()=>z_,findBlobsInObject:()=>sl,getFileId:()=>W_,getFilePathForBlob:()=>vx,getRootBlobPathsForDB:()=>Gu,isSaving:()=>f9,saveBlob:()=>$m,setDeletionDelay:()=>d9,startPreCommitBlobsForRecord:()=>NA});function Dx(){}function Y_(e){let t=vx(e);t&&setTimeout(()=>{(0,ze.unlink)(t,r=>{r&&Bt.default.debug?.("Error trying to remove blob file",r)})},Mx)}function d9(e){Mx=e}function $m(e,t=!1){let r=qr.get(e);if(!r)r={storageIndex:0,fileId:null,store:Bn},qr.set(e,r);else{if(r.fileId)return r;r.store=Bn}return r.deleteOnFailure=t,p9(r),r.source?RA(e,r.source,r):r.contentBuffer?m9(e,r):RA(e,$a.Readable.from(e.stream()),r),r}function RA(e,t,r){let{filePath:n,fileId:s,store:i,compress:o,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,ze.createWriteStream)(n,{autoClose:!1,flags:"w"}),m=!1;e.size!==void 0&&(f.write(h(e.size)),m=!0);let p;o?(m||f.write(l9),p=(0,V_.createDeflate)(),(0,$a.pipeline)(t,p,f,E)):(m||f.write(c9),(0,$a.pipeline)(t,f,E));function h(g){let R=BigInt(g),S=new Uint8Array(Nr),y=new DataView(S.buffer);return R|=BigInt(o?IA:Lx)<<48n,y.setBigInt64(0,R),S}a(h,"createHeader");function E(g){let R=f.fd;if(g){if(i.unlock(d,0),R&&((0,ze.close)(R),f.fd=null),r.deleteOnFailure)(0,ze.unlink)(n,S=>{S&&Bt.default.debug?.("Error while deleting aborted blob file",S)});else try{if((0,ze.statSync)(n).size===0){let S=Buffer.from(g.toString());(0,ze.writeFile)(n,Buffer.concat([h(BigInt(S.length)+0xff000000000000n),S]),y=>{y&&Bt.default.debug?.("Error write error message to blob file",y)})}}catch(S){Bt.default.debug?.("Error checking blob file after abort",S)}u(g)}else{if(!m){m=!0;let S=p?p.bytesWritten:f.bytesWritten-Nr;e.size=S,(0,ze.write)(R,h(S),0,Nr,0,E);return}i.unlock(d,0),c?(0,ze.fdatasync)(R,S=>{S&&u(S),l(),(0,ze.close)(R),f.fd=null}):(l(),(0,ze.close)(R),f.fd=null)}}a(E,"finished")}),e}function W_(e){return qr.get(e)?.fileId}function f9(e){return qr.get(e)?.saving}function vx(e){let t=qr.get(e);return t?.fileId&&qu(t)}function Gu(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=bA.get(e);if(!t){if(!e.databaseName)return Bt.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,K_.get)(F.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,zi.join)(n,e.databaseName)):t=[(0,zi.join)((0,K_.getHdbBasePath)(),"blobs",e.databaseName)],bA.set(e,t)}return t}async function wA(e){let t=Gu(e);t&&await Promise.all(t.map(r=>Ux(r)))}async function Ux(e){if((0,ze.existsSync)(e)){for(let t of await(0,Fn.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await Ux((0,zi.join)(e,t.name));else try{await(0,Fn.unlink)((0,zi.join)(e,t.name))}catch(r){Bt.default.warn?.("Error deleting file",r)}try{await(0,Fn.rmdir)(e)}catch(t){Bt.default.warn?.("Error deleting directory",t)}}}function qu({storageIndex:e,fileId:t,store:r}){let n=Gu(r);return(0,zi.join)(n[e],t.slice(-9,-6)||"0",t.slice(-6,-3)||"0",t.length<=9?t.slice(-3):t.slice(0,-9)+t.slice(-3))}function m9(e,t){let r=t.contentBuffer,n=r.length;if(!(n<Px))return e.size=n,RA(e,$a.Readable.from([r]),t)}function p9(e){let t=Gu(e.store),r=h9(),n=t?.length>1?E9(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=qu(e),o=(0,zi.dirname)(i);(0,ze.existsSync)(o)||(0,AA.ensureDirSync)(o),e.filePath=i}function h9(){let e=Cx.get(Bn);if(!e){let t=0,r=Gu(Bn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let o=0;if((0,ze.existsSync)(n))for(let c of(0,ze.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>o&&(o=l)}s+=o,n=(0,zi.join)(n,o.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(Bn.getUserSharedBuffer("blob-file-id",e.buffer)),Cx.set(Bn,e)}return Number(Atomics.add(e,0,1n))}function E9(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array($_);for(let i=0;i<s.length;i++)s[i]=i%e.length;e.frequencyTable=s}return(e.lastUpdated??0)+6e4<r&&(e.lastUpdated=r,_9(e)),e.frequencyTable[t%$_]}async function _9(e){if(!Fn.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let o;try{o=await(0,Fn.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,AA.ensureDirSync)(s),o=await(0,Fn.statfs)(s)}let c=o.bavail*o.bsize;return Math.pow(c,.8)})),r=new Array($_),n=t.map(s=>1/s);for(let s=0;s<$_;s++){let i=1/0,o=0;for(let c=0;c<n.length;c++)n[c]<i&&(o=c,i=n[c]);n[o]+=1/t[o],r[s]=o}e.frequencyTable=r}function z_(e,t,r){ku=t,Bn=r,il=!1;try{return e()}finally{ku=void 0,Bn=void 0}}function g9(e){Xr=[];let t;try{t=e()}catch(n){throw Xr=void 0,n}let r=Xr.length<2?Xr[0]:Promise.all(Xr);return Xr=void 0,r?r.then(()=>e()):t}function j_(e,t,r){try{Xr=[],Ho=r,Bn=t,e()}catch(s){throw Ho=void 0,Xr=void 0,s}Ho=void 0;let n=Xr.length<2?Xr[0]:Promise.all(Xr);return Xr=void 0,n}function Vm(e,t,r){Bn=r;try{return Ho=t,e()}finally{Ho=void 0}}function qo(e,t){return Bn=t,e()}function Va(e){sl(e,t=>{Y_(t)})}function sl(e,t){if(e instanceof vs)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&sl(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&sl(e[r],t)}}function NA(e,t){let r;for(let n in e){let s=e[n];if(s instanceof Hu&&s.saveBeforeCommit){Bn=t;let i=$m(s,!0).saving??Promise.resolve();r=r?Promise.all(r,i):i}}return r}function T9(){return class{static{a(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}async function y9(e){let t,r,n=0;for(let u in e){let d=e[u];if(t=d.primaryStore.rootStore,r=d.auditStore,r)break}let s=new Set,i=Gu(t);if(i)for(let u of i)await o(u);return await c(),n;async function o(u){try{if(!(0,ze.existsSync)(u))return;for(let d of await(0,Fn.readdir)(u,{withFileTypes:!0})){let f=(0,zi.join)(u,d.name);if(d.isDirectory())await o(f);else if(s.size%1e6===0&&Bt.default.info?.("Finding all blobs for orphan check, paths accumulated",s.size),s.add(f),s.size%2===0){let m=(0,Ox.getHeapStatistics)();m.used_heap_size>m.heap_size_limit*.8&&await c()}}}catch(d){Bt.default.error?.("Error searching path for blobs",u,d)}}a(o,"searchPath");async function c(){for(let u in e){Bt.default.warn?.("Checking for references to potential orphaned blobs in table",u);let d=e[u];for(let f of d.primaryStore.getRange({versions:!0,snapshot:!1,lazy:!0}))try{f.metadataFlags&Zr&&f.value&&l(f.value),await new Promise(setImmediate)}catch(m){Bt.default.error?.("Error searching table",u," for references to potential orphaned blobs failed",m)}}Bt.default.warn?.("Checking for references to potential orphaned blobs in the audit log");for(let{value:u}of r.getRange({start:1,snapshot:!1,lazy:!0}))try{let d=It(u),f=r.tableStores[d.tableId],m=f?.getEntry(d.recordId);(!m||m.version!==d.version||!m.value)&&l(d.getValue(f))}catch(d){Bt.default.error?.("Error searching audit log for references to potential orphaned blobs failed",d)}Bt.default.warn?.("Deleting",s.size,"orphaned blobs"),n+=s.size;for(let u of s)try{await(0,Fn.unlink)(u)}catch(d){Bt.default.warn?.("Error deleting file",d)}Bt.default.warn?.("Finished deleting",s.size,"orphaned blobs"),s.clear()}a(c,"removePathsThatAreNotReferenced");function l(u){sl(u,d=>{if(d instanceof Hu){let f=qr.get(d);if(f.fileId!=null){let m=qu(f);s.has(m)&&s.delete(m)}}})}a(l,"checkObjectForReferences")}var Wi,Fn,ze,V_,$a,AA,K_,zi,Bt,Ox,Px,Nr,Lx,IA,Ix,c9,l9,wx,qr,Ho,vs,ku,Xr,Bn,il,Gm,G_,u9,Nx,Hu,Mx,bA,Cx,$_,S9,ss=se(()=>{Wi=require("msgpackr"),Fn=require("node:fs/promises"),ze=require("node:fs"),V_=require("node:zlib"),$a=require("node:stream"),AA=require("fs-extra"),K_=b(ae());H();zi=require("path"),Bt=b(wr());ko();Ki();Ox=require("node:v8"),Px=8192,Nr=8,Lx=0,IA=1,Ix=255,c9=new Uint8Array([0,Lx,255,255,255,255,255,255]),l9=new Uint8Array([0,IA,255,255,255,255,255,255]),wx=0xffffffffffff,qr=new WeakMap,vs=global.Blob||T9(),il=!1,Gm=new Uint8Array(8),G_=new DataView(Gm.buffer),u9=6e4;a(Dx,"InstanceOfBlobWithNoConstructor");Dx.prototype=vs.prototype;Nx=!1,Hu=class e extends Dx{static{a(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size),t?.saveBeforeCommit!=null&&(this.saveBeforeCommit=t.saveBeforeCommit)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=qr.get(this),{start:r,end:n,contentBuffer:s,asString:i}=t;return i||(s&&(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),s?(t.asString=s.toString(),t.asString):(yA()&&TA(this.bytes().then(o=>t.contentBuffer=o)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=qr.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=qu(t),o,c=a(async()=>{let l,u=Nr;try{if(l=await(0,Fn.readFile)(i),l.length>=Nr){l.copy(Gm,0,0,Nr);let f=G_.getBigUint64(0);if(Number(f>>48n)===Ix)throw new Error("Error in blob: "+l.subarray(Nr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<wx&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,p=t.fileId+":blob";if(o)throw new Error(`Incomplete blob for ${i}`);return new Promise((h,E)=>{if(m.attemptLock(p,0,()=>(o=!0,h(c()))))return o=!0,m.unlock(p,0),h(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return a(d,"checkCompletion"),l[1]===IA?new Promise((f,m)=>{(0,V_.deflate)(l.subarray(Nr),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(Nr))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=qr.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(E){E.enqueue(r),E.close()}});let i=qu(t),o,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,g=a((R,S)=>{(0,ze.open)(i,"r",(y,N)=>{if(y){if(y.code==="ENOENT"&&f!==!1&&(Bt.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),g(R,S)},20).unref();S(y),p.#e?.forEach(I=>I(y))}else o=N,R(N)})},"openFile");return new Promise(g)},pull:a(E=>{let g=0,R=100;return new Promise(a(function S(y,N){function I(ee){(0,ze.close)(o),clearTimeout(d),u&&u.close(),N(ee),p.#e?.forEach(q=>q(ee))}a(I,"onError");let $=Buffer.allocUnsafe(262144);(0,ze.read)(o,$,0,$.length,c,(ee,q,k)=>{if(l+=q,ee)return I(ee);if(c===0){if(q<Nr){R-- >0&&f!==!1?(h(),Bt.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>S(y,N),20).unref()):(Bt.default.debug?.("File was empty, throwing error",i,R),I(new Error(`Blob ${t.fileId} was empty`)));return}k.copy(Gm,0,0,Nr);let j=G_.getBigUint64(0);if(Number(j>>48n)===Ix)return I(new Error("Error in blob: "+k.subarray(Nr,q)));if(g=Number(j&0xffffffffffffn),g<wx&&p.size!==g&&(p.size=g,p.#t))for(let Y of p.#t)Y(g);k=k.subarray(Nr,q),l-=Nr}else if(q===0){let j=Buffer.allocUnsafe(8);return(0,ze.read)(o,j,0,Nr,0,Y=>{if(Y)return I(Y);if(Gm.set(j),g=Number(G_.getBigUint64(0)&0xffffffffffffn),g>l){h()?u?d=setTimeout(()=>{I(new Error(`File read timed out reading from ${i}`))},u9).unref():(u=(0,ze.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(y,N))}),S(y,N)):m?I(new Error("Blob is incomplete")):(m=!0,S(y,N));return}(0,ze.close)(o),E.close(),y()})}else k=k.subarray(0,q);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=q,S(y,N);s&&l>=s&&(l>s&&(k=k.subarray(0,s-c)),l=g=s),n&&n>c&&(k=k.subarray(n-c))}c+=q;try{E.enqueue(k)}catch(j){return Bt.default.debug?.("Error enqueuing chunk",j),y()}l===g&&((0,ze.close)(o),E.close()),y()})},"readMore"))},"pull"),cancel(){(0,ze.close)(o),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,g=t.fileId+":blob";f=!E.attemptLock(g,0,()=>{f=!1}),f||E.unlock(g,0)}return f}}slice(t,r,n){let s=qr.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};qr.set(i,o),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let o={...s,contentBuffer:s.contentBuffer.subarray(t,r)};qr.set(i,o),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(){return Nx||(Nx=!0,Bt.default.warn?.("save() method on Blob is deprecated, use the 'saveBeforeCommit' flag on the Blob constructor instead")),this.saveBeforeCommit=!0,Promise.resolve()}get written(){return qr.get(this)?.saving??Promise.resolve()}},Mx=500;a(Y_,"deleteBlob");a(d9,"setDeletionDelay");global.createBlob=function(e,t){let r=new Hu(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(qr.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof $a.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=$a.Readable.from(e);else throw new Error("Invalid source type");return r};a($m,"saveBlob");a(RA,"writeBlobWithStream");a(W_,"getFileId");a(f9,"isSaving");a(vx,"getFilePathForBlob");bA=new Map;a(Gu,"getRootBlobPathsForDB");a(wA,"deleteRootBlobPathsForDB");a(Ux,"rimrafSteadily");a(qu,"getFilePath");a(m9,"writeBlobWithBuffer");a(p9,"generateFilePath");Cx=new Map;a(h9,"getNextFileId");$_=128;a(E9,"getNextStorageIndex");a(_9,"createFrequencyTableForStoragePaths");a(z_,"encodeBlobsWithFilePath");a(g9,"encodeBlobsAsBuffers");a(j_,"decodeBlobsWithWrites");a(Vm,"decodeWithBlobCallback");a(qo,"decodeFromDatabase");a(Va,"deleteBlobsInObject");a(sl,"findBlobsInObject");a(NA,"startPreCommitBlobsForRecord");S9=new Wi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Wi.addExtension)({Class:vs,type:11,unpack:a(function(e){let t=S9.unpack(e),r=new Hu;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(qr.set(r,{storageIndex:t[1],fileId:t[2],store:Bn}),Ho)return Ho(r)??r;if(!Bn)throw new Error("No store specified, cannot load blob from storage")}else qr.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:a(function(e){let t=qr.get(e);if(ku!==void 0&&(il=!0,t?.recordId!==void 0&&t.recordId!==ku))throw new Error("Cannot use the same blob in two different records");let r={...e};if(e.type&&(r.type=e.type),e.size!==void 0&&(r.size=e.size),t){if(t.storageBuffer)return t.storageBuffer;if(t.contentBuffer?.length<Px)return r.size=t.contentBuffer.length,(0,Wi.pack)([r,t.contentBuffer])}if(ku!==void 0){if(t=$m(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=ku,(0,Wi.pack)([r,t.storageIndex,t.fileId])}if(t){if(Ho)return Ho(e),(0,Wi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,ze.readFileSync)(qu(t));if(n.length>=Nr&&(n.copy(Gm,0,0,Nr),Number(G_.getBigUint64(0)&0xffffffffffffn)===n.length-Nr))return Buffer.concat([(0,Wi.pack)([r]),n]);if(Xr)Xr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Xr)return Xr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Wi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a(T9,"polyfillBlob");a(y9,"cleanupOrphans")});var Hx={};ye(Hx,{onStorageReclamation:()=>Km,runReclamationHandlers:()=>LA,setAvailableSpaceRatioGetter:()=>b9});function Km(e,t,r){(r||(0,X_.getWorkerIndex)()===(0,X_.getWorkerCount)()-1)&&(J_.has(e)||J_.set(e,[]),J_.get(e).push({priority:0,handler:t}),PA||(PA=setTimeout(LA,Bx).unref()))}async function LA(){for(let[e,t]of J_)try{let r=await kx(e),n=R9/r;for(let s of t){let{priority:i,handler:o}=s;if(s.priority=n,n>1||i>1){let c=o(n>1?n:0);c&&(OA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){OA.default.error?.("Error running storage reclamation handlers",r)}PA=setTimeout(LA,Bx).unref()}function b9(e){kx=e??Fx}var CA,X_,OA,Z_,xx,J_,R9,Bx,PA,Fx,kx,eg=se(()=>{CA=require("node:fs/promises"),X_=b(tt()),OA=b(wr());H();Z_=b(ae()),xx=b(oe());Z_.default.initSync();J_=new Map,R9=Z_.default.get(F.STORAGE_RECLAMATION_THRESHOLD)??.4,Bx=(0,xx.convertToMS)(Z_.default.get(F.STORAGE_RECLAMATION_INTERVAL))||36e5;a(Km,"onStorageReclamation");Fx=a(async e=>{if(CA.statfs){let t=await(0,CA.statfs)(e);return t.bavail/t.blocks}else return new Promise((t,r)=>{import("hdd-space").then(n=>{n.default(s=>{for(let i of s.parts)if(e.startsWith(i.place))return t(i.free/i.size);return t(1)})})})},"defaultGetAvailableSpaceRatio"),kx=Fx;a(LA,"runReclamationHandlers");a(b9,"setAvailableSpaceRatioGetter")});var Zx={};ye(Zx,{ACTION_32_BIT:()=>ig,ACTION_64_BIT:()=>N9,AUDIT_STORE_OPTIONS:()=>zm,Decoder:()=>al,HAS_BLOBS:()=>Zr,HAS_CURRENT_RESIDENCY_ID:()=>cl,HAS_EXPIRATION_EXTENDED_TYPE:()=>Jm,HAS_ORIGINATING_OPERATION:()=>Qm,HAS_PREVIOUS_RESIDENCY_ID:()=>ll,REMOTE_SEQUENCE_UPDATE:()=>og,createAuditEntry:()=>ul,getLastRemoved:()=>I9,openAuditStore:()=>ng,readAuditEntry:()=>It,removeAuditEntry:()=>sg,setAuditRetention:()=>w9,transactionKeyEncoder:()=>jx});function ng(e){let t=e.auditStore=e.openDB(DA.AUDIT_STORE_NAME,{create:!1,...zm});t||(t=e.auditStore=e.openDB(DA.AUDIT_STORE_NAME,zm),Gx(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,o=vA;Km(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(o=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,p;try{for(let{key:h,value:E}of t.getRange({start:1,snapshot:!1,end:Date.now()-MA/(1+i*i)})){try{m=sg(t,h,E)}catch(g){$u.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=A9){o=10;break}}await m}finally{f===0?o=Math.min(o<<1,MA/10):(Gx(t,p),o>100&&(o=o>>1)),d(void 0),c()}},o).unref()});return u}if(a(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Wm.getWorkerIndex)()===(0,Wm.getWorkerCount)()-1&&c(),(0,Wm.getWorkerIndex)()===0&&!qx)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(qx=!0,$u.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function sg(e,t,r){let n=C9(r),s;if(n&Zr){s=It(r);let i=e.tableStores[s.tableId];if(i){let o=s.type==="message"?null:i?.getEntry(s.recordId);(!o||o.version!==s.version||!o.value)&&qo(()=>Va(s.getValue(i)),i.rootStore)}}if((n&15)===UA){s=s||It(r);let i=s.tableId;e.tableStores[s.tableId]?.getEntry(s.recordId)?.version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function Gx(e,t){xA[0]=t,e.put(Symbol.for("last-removed"),Qx)}function I9(e){let t=e.get(Symbol.for("last-removed"));if(t)return Qx.set(t),xA[0]}function w9(e,t=vA){MA=e,vA=t}function ul(e,t,r,n,s,i,o,c,l,u,d,f,m){let p=Jx[o];if(!p)throw new Error(`Invalid audit entry type ${o}`);let h=1;if(n&&(n>1?Ka.setFloat64(0,n):Us.set(BA),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}R(s),R(t),g(r),Ka.setFloat64(h,e),h+=8,l&cl&&R(u),l&ll&&R(d),l&Jm&&(Ka.setFloat64(h,f),h+=8),l&Qm&&R(Xx[m]),i?g(i):Us[h++]=0,l?Ka.setUint32(n?8:0,p|l|3221225472):Us[n?8:0]=p;let E=Us.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function g(S){let y=h;h+=1,h=(0,ol.writeKey)(S,Us,h);let N=h-y-1;N>127?N>16383?($u.error("Key or username was too large for audit entry",S),h=y+1,Us[y]=0):(Us.copyWithin(y+2,y+1,h),Ka.setUint16(y,N|32768),h++):Us[y]=N}function R(S){S<128?Us[h++]=S:S<16384?(Ka.setUint16(h,S|32768),h+=2):S<1056964608?(Ka.setUint32(h,S|3221225472),h+=4):(Us[h]=255,Ka.setUint32(h+1,S),h+=5)}}function C9(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new al(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function It(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new al(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),o=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&cl&&(m=n.readInt()),i&ll&&(p=n.readInt()),i&Jm&&(h=n.readFloat64()),i&Qm){let y=n.readInt();E=Xx[y]}l=n.readInt();let g=n.position,R=n.position+=l,S;return{type:Jx[i&7],tableId:c,nodeId:o,get recordId(){return(0,ol.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return R>g?(0,ol.readKey)(e,g,R):void 0},get encoded(){return t?e.subarray(t,r):e},get size(){return t!==void 0&&r!==void 0?r-t:e.byteLength},getValue(y,N,I){if(i&tg||i&Ym&&!N)return S||(S=qo(()=>y.decoder.decode(e.subarray(n.position,r)),y.rootStore)),S;if(i&Ym&&I)return uA(y.getEntry(this.recordId),I,y)},getBinaryValue(){return i&(tg|Ym)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return $u.error("Reading audit entry error",n,e),{}}}var ol,rg,DA,Wm,zx,$u,Us,Ka,jx,zm,MA,A9,xA,Qx,vA,qx,tg,Ym,$x,UA,Vx,Kx,Yx,Wx,ig,N9,og,cl,ll,Qm,Jm,Zr,Jx,Xx,al,Ki=se(()=>{ol=require("ordered-binary"),rg=b(ae()),DA=b(Wt());H();Wm=b(tt()),zx=b(oe());dl();$u=b(J());B_();ss();eg();(0,rg.initSync)();Us=Buffer.alloc(2816),Ka=new DataView(Us.buffer,Us.byteOffset,2816),jx={writeKey(e,t,r){return e===jm?(t.set(jm,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,ol.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,ol.readKey)(e,t,r)}},zm={encoding:"binary",keyEncoder:jx},MA=(0,zx.convertToMS)((0,rg.get)(F.LOGGING_AUDITRETENTION))||86400*3,A9=1e3,xA=new Float64Array(1),Qx=new Uint8Array(xA.buffer),vA=1e4,qx=!1;a(ng,"openAuditStore");a(sg,"removeAuditEntry");a(Gx,"updateLastRemoved");a(I9,"getLastRemoved");a(w9,"setAuditRetention");tg=16,Ym=32,$x=1,UA=2,Vx=3,Kx=4,Yx=5,Wx=6,ig=14,N9=15,og=11,cl=512,ll=1024,Qm=2048,Jm=4096,Zr=8192,Jx={put:$x|tg,[$x]:"put",delete:UA,[UA]:"delete",message:Vx|tg,[Vx]:"message",invalidate:Kx|Ym,[Kx]:"invalidate",patch:Yx|Ym,[Yx]:"patch",relocate:Wx,[Wx]:"relocate"},Xx={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(ul,"createAuditEntry");a(C9,"readAction");a(It,"readAuditEntry");al=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),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(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function ag(){return FA||(FA=Xe({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),FA}function P9(e){return e=e.replace(O9,t=>{let[r,n,s,i]=t.split(".").map(o=>parseInt(o));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function L9(e){if(e.length!==4)throw new Error(`nodeHash must be exactly 4 bytes (32 bits); got ${e.length} bytes`);return e[0]<<24|e[1]<<16|e[2]<<8|e[3]}function HA(e){let t=e0.default.createHash("shake128",{outputLength:4}),r;return(0,t0.isIPv6)(e)?r=P9(e):r=e.toLowerCase(),L9(Uint8Array.from(t.update(r).digest()))}var e0,t0,kA,FA,O9,qA=se(()=>{we();e0=b(require("crypto")),t0=require("node:net"),kA=new Map;a(ag,"getAnalyticsHostnameTable");O9=/(\d{1,3}\.){3}\d{1,3}$/;a(P9,"normalizeIPv6");a(L9,"nodeHashToNumber");a(HA,"stableNodeId")});var Go,GA=se(()=>{Go={TABLE_SIZE:"table-size",DATABASE_SIZE:"database-size",STORAGE_VOLUME:"storage-volume",MAIN_THREAD_UTILIZATION:"main-thread-utilization",RESOURCE_USAGE:"resource-usage",UTILIZATION:"utilization"}});var c0={};ye(c0,{profile:()=>a0,userCodeFolders:()=>ug});async function a0(){let e=(0,lg.pathToFileURL)(s0.PACKAGE_ROOT).toString(),t=new Map,r=100,n=o0/1e6,s=0,i=0;try{let{profile:u}=await Vu.post("Profiler.stop");for(let d of u.nodes)t.set(d.id,d);for(let d of u.nodes)o(d);Ve(i*n,"cpu-usage","harper"),Ve(s*n,"cpu-usage","user")}catch(u){i0.error?.("analytics profiler error:",u)}finally{await Vu.post("Profiler.start")}function o(u){if(u.unassignedCount!==void 0)return u.unassignedCount;let d=u.hitCount;if(u.children)for(let f of u.children)d+=o(t.get(f));return l(u)?(s+=d,d>r&&Ve(d*n,"cpu-usage",u.callFrame.url),u.unassignedCount=0,0):c(u)?(i+=d,d>r&&Ve(d*n,"cpu-usage",u.callFrame.url),u.unassignedCount=0,0):(u.unassignedCount=d,d)}a(o,"getUserHitCount");function c(u){return u.callFrame?.url.startsWith(e)}a(c,"isHarperCode");function l(u){if(ug.some(d=>u.callFrame?.url.startsWith(d)))return!0}a(l,"isUserCode")}var n0,cg,s0,lg,i0,r0,ug,o0,Vu,l0=se(()=>{n0=require("node:inspector/promises");is();cg=b(ae());H();s0=b(Rt()),lg=require("node:url"),i0=b(J()),r0=(0,cg.getHdbBasePath)(),ug=r0?[(0,lg.pathToFileURL)(r0).toString()]:[];process.env.RUN_HDB_APP&&ug.push((0,lg.pathToFileURL)(process.env.RUN_HDB_APP).toString());o0=1e3,Vu=new n0.Session;Vu.connect();(async()=>{if(ug.length===0)return;await Vu.post("Profiler.enable"),await Vu.post("Profiler.setSamplingInterval",{interval:o0}),await Vu.post("Profiler.start");let e=(0,cg.get)(F.ANALYTICS_AGGREGATEPERIOD)*1e3;setInterval(()=>{a0()},e).unref()})();a(a0,"profile")});var mg={};ye(mg,{addAnalyticsListener:()=>tp,analyticsDelay:()=>YA,calculateCPUUtilization:()=>N0,diffResourceUsage:()=>C0,onAnalyticsAggregate:()=>jA,recordAction:()=>Ve,recordActionBinary:()=>tn,recordHostname:()=>WA,setAnalyticsEnabled:()=>v9});function v9(e){R0=e,clearTimeout(Zm),Zm=null}function U9(e,t){if(typeof e=="number"){let r=t.values,n=r.index++;if(n>=r.length){let s=r;t.values=r=new Float32Array(n*2),r.set(s),r.index=n+1}r[n]=e,t.total+=e}else if(typeof e=="boolean")e&&t.total++,t.count++;else if(typeof e=="function")t.count++;else throw new TypeError("Invalid metric value type "+typeof e)}function x9(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},fg.set(e,o)}function Ve(e,t,r,n,s){if(!R0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=fg.get(i);o?U9(e,o):x9(i,e,t,r,n,s),Zm||B9()}function tn(e,t,r,n,s){Ve(!!e,t,r,n,s)}function tp(e){A0.push(e)}function B9(){$A||=performance.now(),Zm=setTimeout(async()=>{Zm=null;let e=performance.now()-$A;$A=0;let t=[],r={time:Date.now(),period:e,threadId:fl.threadId,metrics:t};for(let[s,i]of fg){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let f of w0){let m=Math.floor(c*f),p=o[m-1];if(m>l){let h=m-l;if(p===d){let E=u[u.length-1];typeof E=="number"?u[u.length-1]={value:E,count:1+h}:E.count+=h}else u.push(h>1?{value:p,count:h}:p),d=p;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,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 O0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:fl.threadId,byThread:!0,...n});for(let s of A0)s(t);fg=new Map,fl.parentPort?fl.parentPort.postMessage({type:b0,report:r}):D0({report:r})},YA).unref()}async function WA(){let e=Be.hostname;en.trace?.("recordHostname server.hostname:",e);let t=HA(e);en.trace?.("recordHostname nodeId:",t);let r=ag();if(!await r.get(t)){let s={id:t,hostname:e};en.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function Ku(e,t){let r=Be.hostname,n=kA.get(r);n?en.trace?.("storeMetric cached nodeId:",n):(n=HA(r),en.trace?.("storeMetric new nodeId:",n),kA.set(r,n));let s={id:[(0,KA.getNextMonotonicTime)(),n],...t};en.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function N0(e,t){let r=e.userCPUTime+e.systemCPUTime;return en.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function C0(e,t){return{userCPUTime:t.userCPUTime-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function F9(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={metric:Go.TABLE_SIZE,database:t,table:s,size:c};en.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),Ku(e,l),n+=c}return n}function u0(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=y0.statSync(s.primaryStore.env.path).size,c=F9(e,r,n),l=o-c,u={metric:Go.DATABASE_SIZE,database:r,size:o,used:c,free:l,audit:i};Ku(e,u),en.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){en.warn?.("Error getting DB size metrics",s)}}function d0(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let o={metric:Go.STORAGE_VOLUME,database:r,...i};Ku(e,o),en.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){en.warn?.("Error getting DB volume metrics",s)}}async function k9(e,t=6e4){let r=zA(),n=P0(),s=new Promise(y=>{let N=performance.now();setImmediate(()=>{let I=performance.now();I-N>5e3&&en.warn?.("Unusually high event queue latency on the main thread of "+Math.round(I-N)+"ms"),N=performance.now()}),n.primaryStore.prefetch([1],()=>{let I=performance.now();I-N>5e3&&en.warn?.("Unusually high task queue latency on the main thread of "+Math.round(I-N)+"ms"),y(I-N)})}),i;for(let y of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(y.value?.time){i=y.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],d;for(let{key:y,value:N}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!N)continue;if(o){if(y>o+t)break}else o=y;d=y;let{metrics:I,threadId:$}=N;for(let ee of I||[]){let{path:q,method:k,type:j,metric:Y,count:le,total:fe,distribution:te,threads:ge,...be}=ee;le||(le=1);let Ye=Y+(q?"-"+q:"");k!==void 0&&(Ye+="-"+k),j!==void 0&&(Ye+="-"+j);let Ge=c.get(Ye);if(Ge){if(Ge.threads){let tr=Ge.threads[$];if(tr)Ge=tr;else{Ge.threads[$]={...be};continue}}Ge.count||(Ge.count=1);let Ar=Ge.count;for(let tr in be){let Qr=be[tr];typeof Qr=="number"&&(Ge[tr]=(Ge[tr]*Ar+Qr*le)/(Ar+le))}Ge.count+=le,fe>=0&&(Ge.total+=fe,Ge.ratio=Ge.total/Ge.count)}else Ge={period:t,...ee},delete Ge.distribution,c.set(Ye,Ge),Ge.byThread&&(Ge.threads=[],Ge.threads[$]={...be},u.push(Ge));if(te){te=te.map(tr=>typeof tr=="number"?{value:tr,count:1}:tr);let Ar=l.get(Ye);Ar?Ar.push(...te):l.set(Ye,te)}}await O0()}for(let y of u){let{path:N,method:I,type:$,metric:ee,count:q,total:k,distribution:j,threads:Y,...le}=y;Y=Y.filter(fe=>fe);for(let fe in le){if(typeof y[fe]!="number")continue;let te=0;for(let ge of Y){let be=ge[fe];typeof be=="number"&&(te+=be)}y[fe]=te}y.count=Y.length,delete y.threads,delete y.byThread}for(let[y,N]of l){let I=c.get(y);N.sort((tr,Qr)=>tr.value>Qr.value?1:-1);let $=I.count-1,ee=[],q=0,k=0,j;for(let tr of w0){let Qr=$*tr;for(;q<Qr;)j=N[k++],q+=j.count,k===1&&q--;let xr=N[k>1?k-2:0];j||(j=N[0]),ee.push(j.value-(j.value-xr.value)*(q-Qr)/j.count)}let[Y,le,fe,te,ge,be,Ye,Ge,Ar]=ee;Object.assign(I,{p1:Y,p10:le,p25:fe,median:te,p75:ge,p90:be,p95:Ye,p99:Ge,p999:Ar})}let f;for(let[,y]of c)y.time=d,Ku(n,y),f=!0;if(f)for(let y of I0)y(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let y={metric:Go.MAIN_THREAD_UTILIZATION,idle:p-f0,active:h-m0,taskQueueLatency:await s,time:m,...process.memoryUsage()};Ku(n,y)}f0=p,m0=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,en.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let g=C0(dg,E);en.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=dg.time?m-dg.time:t,g.cpuUtilization=N0(g,g.period);let R={metric:Go.RESOURCE_USAGE,...g};Ku(n,R),dg=E;let S=lt();u0(n,S),u0(n,{system:S.system}),d0(n,S),d0(n,{system:S.system})}async function p0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function zA(){return h0||(h0=Xe({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function P0(){return E0||(E0=Xe({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function G9(){L0=!0;let e=(0,ep.get)(F.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await k9(YA,e),await p0(zA(),H9),await p0(P0(),q9)},Math.min(e/2,2147483647)).unref()}function D0(e,t){let r=e.report;r.threadId=t?.threadId||fl.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(_0+=n.mean*n.count);r.totalBytesProcessed=_0,t&&(r.metrics.push({metric:Go.UTILIZATION,...t.performance.eventLoopUtilization(g0.get(t))}),g0.set(t,t.performance.eventLoopUtilization())),r.id=(0,KA.getNextMonotonicTime)(),zA().primaryStore.put(r.id,r),L0||G9(),$9&&(M0=K9(r))}async function K9(e){if(await M0,!Ya){let r=(0,Xm.dirname)(D9());try{Ya=await(0,VA.open)((0,Xm.join)(r,"analytics.log"),"r+")}catch{Ya=await(0,VA.open)((0,Xm.join)(r,"analytics.log"),"w+")}}let t=(await Ya.stat()).size;if(t>V9){let r=Buffer.alloc(t);await Ya.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Ya.write(r,{position:0}),await Ya.truncate(r.length),t=r.length}await Ya.write(JSON.stringify(e)+`
|
|
11
|
+
`,t)}function jA(e){e&&I0.push(e)}var fl,S0,T0,Xm,VA,KA,ep,y0,D9,M9,en,fg,R0,Zm,$A,YA,b0,A0,I0,w0,f0,m0,dg,O0,H9,q9,h0,E0,L0,_0,g0,$9,M0,Ya,V9,is=se(()=>{fl=require("worker_threads"),S0=b(tt());we();T0=b(J()),Xm=require("path"),VA=require("fs/promises"),KA=b(xn()),ep=b(ae());H();Hr();y0=b(require("node:fs"));qA();GA();({getLogFilePath:D9,forComponent:M9}=T0.default);setTimeout(()=>{Promise.resolve().then(()=>l0())},1e3);en=M9("analytics").conditional;(0,ep.initSync)();fg=new Map,R0=(0,ep.get)(F.ANALYTICS_AGGREGATEPERIOD)>-1;a(v9,"setAnalyticsEnabled");a(U9,"recordExistingAction");a(x9,"recordNewAction");a(Ve,"recordAction");Be.recordAnalytics=Ve;a(tn,"recordActionBinary");$A=0,YA=1e3,b0="analytics-report",A0=[],I0=[];a(tp,"addAnalyticsListener");w0=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(B9,"sendAnalytics");a(WA,"recordHostname");a(Ku,"storeMetric");a(N0,"calculateCPUUtilization");a(C0,"diffResourceUsage");a(F9,"storeTableSizeMetrics");a(u0,"storeDBSizeMetrics");a(d0,"storeVolumeMetrics");a(k9,"aggregation");f0=0,m0=0,dg={userCPUTime:0,systemCPUTime:0},O0=a(()=>new Promise(setImmediate),"rest");a(p0,"cleanup");H9=36e5,q9=31536e6;a(zA,"getRawAnalyticsTable");a(P0,"getAnalyticsTable");(0,S0.setChildListenerByType)(b0,D0);a(G9,"startScheduledTasks");_0=0,g0=new Map,$9=!1;a(D0,"recordAnalytics");V9=1e6;a(K9,"logAnalytics");a(jA,"onAnalyticsAggregate")});var F0={};ye(F0,{ENTRY:()=>W9,HAS_EXPIRATION:()=>Eg,HAS_RESIDENCY_ID:()=>tI,HAS_STRUCTURE_UPDATE:()=>_g,LAST_TIMESTAMP_PLACEHOLDER:()=>jm,LOCAL_TIMESTAMP:()=>Y9,METADATA:()=>zu,NEW_TIMESTAMP_PLACEHOLDER:()=>U0,NO_TIMESTAMP:()=>QA,PENDING_LOCAL_TIME:()=>rI,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>BA,RecordEncoder:()=>eI,TIMESTAMP_ASSIGN_LAST:()=>j9,TIMESTAMP_ASSIGN_NEW:()=>x0,TIMESTAMP_ASSIGN_PREVIOUS:()=>B0,TIMESTAMP_PLACEHOLDER:()=>pg,TIMESTAMP_RECORD_PREVIOUS:()=>JA,entryMap:()=>Wa,handleLocalTimeForGets:()=>gg,lastMetadata:()=>ut,recordUpdater:()=>nI,removeEntry:()=>pl});function X9(){return np[0]=np[0]^64,z9.getFloat64(0)}function gg(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(o,c){e.readCount++,ut=null;let l=r.call(this,o,c);return l&&(ut&&(l.metadataFlags=ut[zu],l.localTime=ut.localTime,l.residencyId=ut.residencyId,l.size=ut.size,ut.expiresAt>=0&&(l.expiresAt=ut.expiresAt),ut=null),l.value&&Wa.set(l.value,l),l.key=o),l};let n=e.get;e.get=function(o,c){ut=null;let l=n.call(this,o,c);return ut&&l&&(Wa.set(l,ut),ut=null),l};let s=e.getRange;e.getRange=function(o){let c=s.call(this,o);return o.valuesForKey?c.map(l=>l?.value):o.values===!1||o.onlyCount?c:c.map(l=>(ut&&(l.metadataFlags=ut[zu],l.localTime=ut.localTime,l.residencyId=ut.residencyId,ut.expiresAt>=0&&(l.expiresAt=ut.expiresAt),ut=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let o=i.constructor,c=i.use,l=i.done;o.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,ml.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<ml.length;u++){let d=ml[u].deref();(!d||d.isDone||d.isCommitted)&&ml.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function nI(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",f,m){f||l==null?Wu=i?.localTime?JA|B0:QA:Wu=l?i?.localTime?JA|16384:x0|16384:QA;let p=u?.expiresAt;if(p>=0&&(c|=Eg),rp=c,XA=p,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Wu>0},E,g=0;try{let R=i?.residencyId,S=u?.residencyId;S&&(ZA=S,rp|=tI,g|=cl),R!==S&&(g|=ll,R||(R=0)),c&Eg&&(g|=Jm),u?.originatingOperation&&(g|=Qm),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&d!=="message"&&i.metadataFlags&Zr&&(r.getBinaryFast(i.localTime)||Va(i.value));let y;if(s!==void 0&&(y=z_(()=>e.put(n,s,h),n,e.rootStore),il&&(g|=Zr)),l){let N=u?.user?.username;if(m&&(z_(()=>e.encoder.encode(m),n,e.rootStore),il&&(g|=Zr)),e.encoder.hasStructureUpdate&&(g|=_g,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let I=i?.localTime,$=r.get(I);if($){let ee=It($).previousLocalTime;return y=r.put(I,ul(o,t,n,ee,u?.nodeId??server.replication.getThisNodeId(r)??0,N,d,Yu,g,S,R,p),{ifVersion:E}),y}}y=r.put(s===void 0?U0:jm,ul(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,d,Yu,g,S,R,p,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&Q9.has(d)&&Ve(Yu?.length??1,"db-write",u.tableToTrack,null),y}catch(R){throw R.message+=" id: "+n+" options: "+h,R}}}function pl(e,t,r){if(t)return t.value&&t.metadataFlags&Zr&&!e.auditStore?.getBinaryFast(t.localTime)&&Va(t.value),e.remove(t.key,r)}var v0,hg,pg,jm,BA,U0,Y9,zu,W9,np,z9,QA,x0,j9,B0,JA,Eg,tI,rI,_g,Q9,Wa,J9,Yu,Wu,rp,XA,ZA,ut,eI,ml,dl=se(()=>{v0=require("msgpackr");Ki();hg=b(J());ss();ss();is();pg=new Uint8Array([1,1,1,1,4,64,0,0]),jm=new Uint8Array([1,1,1,1,1,0,0,0]),BA=new Uint8Array([1,1,1,1,3,64,0,0]),U0=new Uint8Array([1,1,1,1,0,64,0,0]),Y9=Symbol("local-timestamp"),zu=Symbol("metadata"),W9=Symbol("entry"),np=new Uint8Array(8),z9=new DataView(np.buffer,0,8),QA=0,x0=0,j9=1,B0=3,JA=4,Eg=16,tI=32,rI=1,_g=256,Q9=new Set(["put","patch","delete","message","publish"]),Wa=new WeakMap,Wu=0,rp=-1,XA=-1,ZA=0,ut=null,eI=class extends v0.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{a(this,"RecordObject")}getUpdatedTime(){return Wa.get(this)?.version}getExpiresAt(){return Wa.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,o){if(Wu||rp>=0){let c=0,l=Wu;l&&(c+=8,Wu=0);let u=rp,d=XA,f=ZA;u>=0&&(c+=4,rp=-1,d>=0&&(c+=8,XA=-1),f&&(c+=4,ZA=0));let m=J9=n.call(this,i,o|2048|c);Yu=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(pg[4]=l,pg[5]=l>>8,m.set(pg,p),p+=8),il&&(u|=Zr),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|ig<<24),p+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(p,d),p+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,f)),m}else return Yu=n.call(this,i,o),Yu};let s=this.saveStructures;this.saveStructures=function(i,o){let c=s.call(this,i,o);return this.hasStructureUpdate=!0,c}}decode(t,r){ut=null;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,l;if(i===2){if(t.copy)t.copy(np,0,c),c+=8;else for(let m=0;m<8;m++)np[m]=t[c++];l=X9(),i=t[c]}let u,d;i<32&&(i===ig?(o=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(o=i|t[c+1]<<5,c+=2),o&Eg&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&tI&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=qo(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ut={localTime:l,[zu]:o,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:qo(()=>super.decode(t,r),this.rootStore)}catch(c){return hg.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(X9,"getTimestamp");a(gg,"handleLocalTimeForGets");ml=[];setInterval(()=>{for(let e=0;e<ml.length;e++){let t=ml[e].deref();!t||t.isDone||t.isCommitted?ml.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(hg.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):hg.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(nI,"recordUpdater");a(pl,"removeEntry")});function oI(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let f=u(l);for(let p=1;p<e.length;p++){let h=e[p],E=u(h);f=f.concat(E)}let m=new Set;return f.filter(p=>{let h=p.key??p;return m.has(h)?!1:(m.add(h),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?o(f,m):f}function u(f){return f.conditions?oI(f.conditions,f.operator,r,n,s,i,o,c):Xu(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}a(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",y=d(h.conditions,!S,p);return S?(N,I)=>y.some($=>$(N,I)):(N,I)=>y.every($=>$(N,I))}let g=(h.attribute||h[0])===r.primaryKey,R=ip(h,r,i,c,g,p);return m&&E<f.length-1&&p&&(p=a7(r.primaryStore,h.estimated_count,p)),R}).filter(Boolean)}a(d,"mapConditionsToFilters")}function Xu(e,t,r,n,s,i,o){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new rn.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let y=c[0],N=Qi(n.attributes,y);if(N.relationship){if(c.length<2)throw new rn.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let I=N.definition?.tableClass||N.elements?.definition?.tableClass,$=new Map,ee=Xu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,I,s,$);if(N.relationship.to){i[c[0]]=$;let q=!!Qi(I.attributes,N.relationship.to)?.elements;ee=n7(ee,N,I.primaryStore,q,$)}if(N.relationship.from){let q=a(k=>(k?.key!==void 0&&(k=k.key),Xu({attribute:N.relationship.from,value:k},t,r,n,s,$)),"searchEntry");N.elements?(i[c[0]]=$,ee=s7(ee,N,I.primaryStore,$,q)):ee=ee.flatMap(q)}return ee}else if(c.length===1)c=c[0];else throw new rn.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let g;switch(aI[u]||u){case"lt":m=!0,p=l;break;case"le":m=!0,p=l,h=!0;break;case"gt":m=l,E=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,p=l.slice(0),p[p.length-1]=ji.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new rn.ClientError(`Unknown query comparator "${u}"`)}let R;if(typeof m=="string"&&m.length>xs.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,xs.MAX_SEARCH_KEY_LENGTH)+xs.OVERFLOW_MARKER,E=!1,R=ip(e,n,null,i,d)),typeof p=="string"&&p.length>xs.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,xs.MAX_SEARCH_KEY_LENGTH)+xs.OVERFLOW_MARKER,h=!0,R=R??ip(e,n,null,i,d)),r){let y=m;m=p,p=y,y=!E,E=!h,h=y}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new rn.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new rn.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new rn.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new rn.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(R=R??ip(e,n,null,i,d),!R)throw new rn.ClientError(`Unknown search operator ${e.comparator}`)}let S={start:m,end:p,inclusiveEnd:h,exclusiveStart:E,values:!0,versions:d,transaction:t,reverse:r};if(d){let y=f.getRange(S).map(R?function({key:N,value:I}){return this?.isSync?I&&R(I)?N:za.SKIP:new Promise(($,ee)=>setImmediate(()=>{try{$(I&&R(I)?N:za.SKIP)}catch(q){ee(q)}}))}:N=>N.value==null&&!(N.metadataFlags&(kn|hl))?za.SKIP:(o?._freezeRecords&&Object.freeze(N.value),N));return y.hasEntries=!0,y}else return f?f.customIndex?f.customIndex.search(e,o).map(y=>{if(typeof y=="object"&&y){let{key:N,...I}=y,$=n.primaryStore.getEntry(N);return o?._freezeRecords&&Object.freeze($?.value),{...I,...$}}return y}):f.getRange(S).map(R?function({key:y,value:N}){let I;return typeof y=="string"&&y.length>xs.MAX_SEARCH_KEY_LENGTH?I=n.primaryStore.get(N):I={[c]:y},this.isSync?R(I)?N:za.SKIP:new Promise(($,ee)=>setImmediate(()=>{try{$(R(I)?N:za.SKIP)}catch(q){ee(q)}}))}:({value:y})=>y):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:y,value:N}){return this.isSync?N&&R(N)?y:za.SKIP:new Promise((I,$)=>setImmediate(()=>{try{I(N&&R(N)?y:za.SKIP)}catch(ee){$(ee)}}))})}function Qi(e,t){if(Array.isArray(t))if(t.length>1){let r=Qi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Qi(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 n7(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=a((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let o=i.next();return o.done?o:{value:o.value}},return(){if(i?.return)return i.return()}}}})}function s7(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(o=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function ip(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=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 d=c[0],f=Qi(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=ip({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let g,R=a((y,N)=>{let I,$;return E?E.returnDirect?(I=E(y,r,N),$=ut):($=E(y,r,N,!0),Array.isArray($)?(I=$.map(ee=>ee.value),$=null):I=$?.value):I=y[d],{subObject:I,subEntry:$}},"getSubObject"),S=a((y,N)=>{if(E&&h.idFilter){if(!g)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:k};g=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else g=u(E.from??t.primaryKey,h.idFilter,!1,!0);let q=g(y);return g.idFilter&&(S.idFilter=g.idFilter),q}let{subObject:I,subEntry:$}=R(y,N);return I?Array.isArray(I)?(!n?.[d]&&n&&(n[d]={fromRecord(q){let k=R(q).subObject;return Array.isArray(k)?k.filter(h).map(j=>j[m.primaryKey]):k}}),I.some(h)):h(I,$):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),aI[o]||o){case xs.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,ji.compareKeys)(d,l[0])>=0&&(0,ji.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,ji.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,ji.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,ji.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,ji.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,ji.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new rn.ClientError(`Unknown query comparator "${o}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&Tg(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,g=3;function R(S){let y=S[d],N;if(typeof y!="object"||!y||p?N=f(y):Array.isArray(y)?N=y.some(f):y instanceof Date&&(N=f(y.getTime())),m&&(g++,!N&&!R.idFilter&&++E/g*i>h)){let I=Xu(e,r.transaction.getReadTxn(),!1,t),$;R.to?$=I.flatMap(q=>t.primaryStore.get(q)[R.to]):$=I.map(Zu);let ee=new Set($);R.idFilter=q=>ee.has(Zu(q)),R.idFilter.idSet=ee}return N}return a(R,"recordFilter"),s&&(R.idFilter=f),R}a(u,"attributeComparator")}function Tg(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/$o(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=aI[n]||n,n===xs.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=Qi(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=Tg(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*$o(e.indices[i.relationship.from])/($o(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=$o(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=t7*$o(e.primaryStore)+1;else if(n==="between")r.estimated_count=e7*$o(e.primaryStore)+1;else if(n==="sort"){let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCountAsSort?r.estimated_count=i.customIndex.estimateCountAsSort(r):r.estimated_count=$o(e.primaryStore)+1}else{let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCount?r.estimated_count=i.customIndex.estimateCount(r.value):r.estimated_count=Z9*$o(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function yg(e,t){if(e)if(Vo=e,ju.lastIndex=0,i7.test(e))try{if(t&&(t.conditions=[]),ui=t??new Ju,sp(ui,""),Gr!==Vo.length&&zt("Unable to parse query, unexpected end of query"),ui.parseErrorMessage&&(ui.parseError=new sI(t.parseErrorMessage),!t))throw ui.parseError;return ui}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${Gr} in '${Vo}'`,ui.parseErrorMessage&&(r.message+=", "+ui.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function zt(e){let t=`${e} at position ${Gr}`;ui.parseErrorMessage=ui.parseErrorMessage?ui.parseErrorMessage+", "+t:t}function sp(e,t){let r=ju,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(Vo);){Gr=r.lastIndex;let[,d,f]=n;o?(d&&zt(`expected operator, but encountered '${d}'`),o=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:zt(`invalid FIQL operator ${d}`),l=k0):(l=decodeURIComponent,i="equals",d||zt("attribute must be specified before equality comparator"),s=Qu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=r7[f],l=iI[i]?k0:decodeURIComponent,d||zt(`attribute must be specified before comparator ${f}`),s=Qu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&zt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),zt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||zt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&H0(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else Sg(e,u),e.conditions.push(h)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?zt("conditions/comparisons are not allowed in a property list"):e.push(Qu(d)),s=void 0;break;case"(":ju.lastIndex=Gr;let p=sp(d?[]:new Ju,")");switch(d){case"":Sg(e,u),e.conditions.push(p);break;case"limit":switch(p.length){case 1:e.limit=+p[0];break;case 2:e.offset=+p[0],e.limit=p[1]-e.offset;break;default:zt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(p[0])&&p.length===1&&!p[0].name?(e.select=p[0],e.select.asArray=!0):p.length===1?e.select=p[0]:p.length===2&&p[1]===""?e.select=p.slice(0,1):e.select=p;break;case"group-by":zt("group by is not implemented yet");case"sort":e.sort=q0(p);break;default:zt(`unknown query function call ${d}`)}Vo[Gr]===","?r.lastIndex=++Gr:o=!0,s=null;break;case"{":e.conditions&&zt("property sets are not allowed in a queries"),d||zt("property sets must have a defined parent property name"),ju.lastIndex=Gr,m=sp([],"}"),m.name=d,e.push(m),Vo[Gr]===","?r.lastIndex=++Gr:o=!0;break;case"[":if(ju.lastIndex=Gr,d?(m=sp(new Ju,"]"),m.name=d):m=sp(e.conditions?new Ju:[],"]"),e.conditions)if(Sg(e,u),Vo[Gr]==="="){l=decodeURIComponent,i="equals",s=Qu(d),r.lastIndex=++Gr;break}else e.conditions.push(m),s=null;else e.push(m);Vo[Gr]===","?r.lastIndex=++Gr:o=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&H0(h,d),Sg(e,u),e.conditions.push(h)}else d&&zt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Qu(d));return e}else zt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:zt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?o7:ju,r.lastIndex=Gr),Gr===Vo.length)return e}t&&zt(`expected '${t}', but encountered end of string`)}function Sg(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&zt("Can not mix operators within a condition grouping"):e.operator=t)}function Qu(e){return e.indexOf(".")>-1?e.split(".").map(Qu):decodeURIComponent(e)}function k0(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+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 rn.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function H0(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new rn.ClientError("wildcard can only be used at the end of a string")}function q0(e){let t=G0(e[0]);return e.length>1&&(t.next=q0(e.slice(1))),t}function G0(e){if(Array.isArray(e)){let t=G0(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}}zt(`Unknown sort type ${e}`)}function Zu(e){return Array.isArray(e)?e.join("\0"):e}function $o(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function a7(e,t,r){return t*r/$o(e)}var rn,xs,ji,za,Z9,e7,t7,r7,iI,aI,sI,i7,ju,o7,Gr,ui,Vo,Ju,Rg=se(()=>{rn=b(_e()),xs=b(Wt()),ji=require("ordered-binary"),za=require("lmdb");bg();dl();Z9=.3,e7=.1,t7=.05,r7={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},iI={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(oI,"executeConditions");a(Xu,"searchByIndex");a(Qi,"findAttribute");a(n7,"joinTo");a(s7,"joinFrom");aI={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(ip,"filterByType");a(Tg,"estimateCondition");sI=class extends rn.Violation{static{a(this,"SyntaxViolation")}},i7=/[()[\]|!<>.]|(=\w*=)/,ju=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,o7=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(yg,"parseQuery");a(zt,"recordError");a(sp,"parseBlock");a(Sg,"assignOperator");a(Qu,"decodeProperty");a(k0,"typedDecoding");a(H0,"wildcardDecoding");a(q0,"toSortObject");a(G0,"toSortEntry");Ju=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}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};a(Zu,"flattenKey");a($o,"estimatedEntryCount");a(a7,"intersectionEstimate")});var $0,di,Ag=se(()=>{$0=b(li()),di=class extends URLSearchParams{static{a(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,$0._assignPackageExport)("Resource",Resource)});var z0={};ye(z0,{MultiPartId:()=>Ig,Resource:()=>ur,contextStorage:()=>td,snakeCase:()=>l7,transformForSelect:()=>rd});function l7(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function V0(e,t){if(El=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(El=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new Ig;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){El=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return El=!0,null;e[e.length-1]==="/"&&(El=!0)}return t.coerceId(decodeURIComponent(e))}function Hn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,d;if(r){if(o)d=i,o=o.getContext?.()||o;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,o=i.getContext?.()||i):i?.transaction instanceof vo?o=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new ed.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?o?(d=i,o=o.getContext?.()||o):o=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let g=this.parsePath(c,o,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new di,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new di,l.id=c,c==null&&(u=!0);l||(l=new di,l.id=c),u&&(l.isCollection=!0);let f;o||(o=td.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,p=h;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(p=a(E=>td.run(o,()=>h(E)),"runAction")),o?.transaction){let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)}else return At(o,()=>{let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)},f);function h(E){if(m!==!1&&o.authorize){o.authorize=!1;let g=t.type==="read"?E.allowRead(o.user,l,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,d,o):E.allowUpdate(o.user,d,o):t.type==="create"?E.allowCreate(o.user,d,o):E.allowDelete(o.user,l,o);if(g?.then)return g.then(R=>{if(!R)throw new ed.AccessViolation(o.user);return typeof d?.then=="function"?d.then(S=>e(E,l,o,S)):e(E,l,o,d)});if(!g)throw new ed.AccessViolation(o.user)}return typeof d?.then=="function"?d.then(g=>e(E,l,o,g)):e(E,l,o,d)}a(h,"authorizeActionOnResource")}}function os(e,t){let r=new ed.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 cI(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();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 rd(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):cI(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(cI(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(cI(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&o&&(p=null),p?.then?(f||(f=[]),f.push(p.then(h=>u[m.name||m]=h))):u[m.name||m]=p}return f?Promise.all(f).then(()=>u):u},"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 l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=rd(c.select||c,d)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var K0,Y0,ed,W0,td,c7,ur,El,Ig,Ko=se(()=>{K0=require("crypto");Um();Fu();Y0=b(li()),ed=b(_e());Ga();Rg();W0=require("async_hooks");Ag();td=new W0.AsyncLocalStorage,c7={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},ur=class{static{a(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=Hn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=rd(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Hn(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let o of s){let c=t.constructor,l=o[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(o,n))):i.push(u.put(o,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):os(t,"put")},{hasContent:!0,type:"update"});static patch=Hn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):os(t,"patch")},{hasContent:!0,type:"update"});static delete=Hn(function(t,r,n,s){return t.delete?t.delete(r):os(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,K0.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=td.getStore()??{};let s;return this.loadAsInstance===!1?s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),At(n,async()=>{let i=new this(s,n),o=await i.create?i.create(s,r):os(i,"create");return n.newLocation=s??o?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?o:i})}static invalidate=Hn(function(t,r,n,s){return t.invalidate?t.invalidate(r):os(t,"delete")},{hasContent:!1,type:"update"});static post=Hn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create"});static update=Hn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update"});static connect=Hn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):os(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Hn(function(t,r,n,s){return t.subscribe?t.subscribe(r):os(t,"subscribe")},{type:"read"});static publish=Hn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):os(t,"publish")},{hasContent:!0,type:"create"});static search=Hn(function(t,r,n){let s=t.search?t.search(r):os(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let o=rd(i,t.constructor);return s.map(o)}return s},{type:"read"});static query=Hn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):os(t,"search")},{hasContent:!0,type:"read"});static copy=Hn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):os(t,"copy")},{hasContent:!0,type:"create"});static move=Hn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):os(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;os(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return yg(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1),c=r?.headers&&c7[o];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===o))if(t=t.slice(0,s),n)n.property=o;else return{query:{property:o},id:V0(t,this),isCollection:El}}let i=V0(t,this);return El?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),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 l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s.#r=!0),s}subscribe(t){return new ns}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new ns}allowRead(t,r){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,Y0._assignPackageExport)("Resource",ur);a(l7,"snakeCase");a(V0,"pathToId");Ig=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(Hn,"transactional");a(os,"missingMethod");a(cI,"selectFromObject");a(rd,"transformForSelect")});var _l,lI=se(()=>{_l=class{static{a(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}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 uI={};ye(uI,{Resources:()=>nd,keyArrayToString:()=>sd,resetResources:()=>u7,resources:()=>Bs});function u7(){return Bs=new nd,Be.resources=Bs,Bs}function sd(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var j0,Q0,nd,Bs,ja=se(()=>{Ga();lI();j0=b(J()),Q0=b(_e());Hr();nd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;allTypes=new Map;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,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new Q0.ServerError(`Conflicting paths for ${t}`);j0.default.error(c),i.Resource=new _l(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,o=t.length;for(;n<o;){s=n,n=t.indexOf("/",n),n===-1&&(n=o);let u=n===o?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===o&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}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 At(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(u7,"resetResources");a(sd,"keyArrayToString")});function mI(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=X0,d7(e.primaryStore,e.auditStore)):(c=J0,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{Z0(J0[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=sd(t);let d=new fI(r);d.startTime=n;let f=u.get(t);return f?f.push(d):(u.set(t,f=[d]),f.tables=u,f.key=t),d.subscriptions=f,d}function Z0(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),eB(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=It(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=sd(c),u=0;do{let d=o.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,dI.info)("omitting",c,m.startTime,n);continue}try{let p;m.supportsTransactions&&m.txnInProgress!==i.version&&(p=!0,m.txnInProgress||(r?r.push(m):r=[m]),m.txnInProgress=i.version),m.listener(c,i,n,p)}catch(p){console.error(p),(0,dI.info)(p)}}}if(l==null)break;let f=l.lastIndexOf?.("/",l.length-2);f!==l.length-1&&u++,f>-1?l=l.slice(0,f+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function d7(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 l=X0[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{Z0(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function eB(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function tB(e){return e.nextTransaction||(mI({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),eB(e)),e.nextTransaction}var dI,J0,X0,fI,pI=se(()=>{dI=b(J());Fu();ja();Ki();J0=Object.create(null),X0=Object.create(null);a(mI,"addSubscription");fI=class extends ns{static{a(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;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;if(t){let 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(Z0,"notifyFromTransactionData");a(d7,"listenToCommits");a(eB,"nextTransaction");a(tB,"whenNextTransaction")});var nB=v((mLe,rB)=>{"use strict";var hI=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};rB.exports=hI});var iB=v((hLe,sB)=>{"use strict";var EI=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};sB.exports=EI});var op=v(aB=>{"use strict";var oB=ae(),f7=(H(),M(W)),{RecordEncoder:m7}=(dl(),M(F0));oB.initSync();var p7=oB.get(f7.CONFIG_PARAMS.STORAGE_CACHING)!==!1,_I=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=p7&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:m7})}};aB.OpenDBIObject=_I});var ap=v((SLe,cB)=>{"use strict";var as=ae(),Fs=(H(),M(W));as.initSync();var wg=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=as.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||as.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||as.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",as.get(Fs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=as.get(Fs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),as.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=as.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),as.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=as.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),as.get(Fs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=as.get(Fs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=as.get(Fs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};cB.exports=wg;wg.MAX_DBS=1e4});var _t=v((yLe,gB)=>{"use strict";var SI=require("lmdb"),fi=require("fs-extra"),cs=require("path"),Ng=xn(),dB=J(),qn=Jr().LMDB_ERRORS_ENUM,Cg=iB(),{OpenDBIObject:TI}=op(),fB=ap(),Qa=Wt(),lB=(H(),M(W)),{table:h7,resetDatabases:E7}=(we(),M(mt)),uB=ae(),mi=Qa.INTERNAL_DBIS_NAME,mB=Qa.DBI_DEFINITION_NAME,_7="data.mdb",g7="lock.mdb",cp=".mdb",S7="-lock",gI=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ks(t,r),this.key_type=this.dbi[Qa.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Qa.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new SI.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Og(e,t){if(e===void 0)throw new Error(qn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(qn.ENV_NAME_REQUIRED)}a(Og,"pathEnvNameValidation");async function yI(e,t,r=!0){try{await fi.access(e)}catch(n){throw n.code==="ENOENT"?new Error(qn.INVALID_BASE_PATH):n}try{let n=cs.join(e,t+cp);return await fi.access(n,fi.constants.R_OK|fi.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await fi.access(cs.join(e,t,_7),fi.constants.R_OK|fi.constants.F_OK),cs.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(qn.INVALID_ENVIRONMENT)}else throw new Error(qn.INVALID_ENVIRONMENT);throw n}}a(yI,"validateEnvironmentPath");function Pg(e,t){if(Ng.validateEnv(e),t===void 0)throw new Error(qn.DBI_NAME_REQUIRED)}a(Pg,"validateEnvDBIName");async function T7(e,t,r=!1,n=!1){Og(e,t);let s=cs.basename(e);t=t.toString();let i=uB.get(lB.CONFIG_PARAMS.DATABASES);i||uB.setProperty(lB.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await yI(e,t,n),pB(e,t,r)}catch(o){if(o.message===qn.INVALID_ENVIRONMENT){let c=cs.join(e,t);await fi.mkdirp(n?c:e);let l=new fB(n?c:c+cp,!1),u=SI.open(l);u.dbis=Object.create(null);let d=new TI(!1);u.openDB(mi,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=RI(e,t,r);return u[Qa.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw o}}a(T7,"createEnvironment");async function y7(e,t,r,n=!0){Og(e,t),t=t.toString();let s=cs.join(e,t);return h7({table:t,database:cs.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(y7,"copyEnvironment");async function pB(e,t,r=!1){Og(e,t),t=t.toString();let n=RI(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 yI(e,t),i=cs.join(e,t+cp),o=s!=i,c=new fB(s,o),l=SI.open(c);l.dbis=Object.create(null);let u=EB(l);for(let d=0;d<u.length;d++)ks(l,u[d]);return l[Qa.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(pB,"openEnvironment");async function R7(e,t,r=!1){Og(e,t),t=t.toString();let n=cs.join(e,t+cp),s=await yI(e,t);if(global.lmdb_map!==void 0){let i=RI(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await hB(o),delete global.lmdb_map[i]}}await fi.remove(s),await fi.remove(s===n?s+S7:cs.join(cs.dirname(s),g7))}a(R7,"deleteEnvironment");async function hB(e){Ng.validateEnv(e);let t=e[Qa.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(hB,"closeEnvironment");function RI(e,t,r=!1){let s=`${cs.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(RI,"getCachedEnvironmentName");function b7(e){Ng.validateEnv(e);let t=Object.create(null),r=ks(e,mi);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==mi)try{t[n]=Object.assign(new Cg,s)}catch{dB.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(b7,"listDBIDefinitions");function EB(e){Ng.validateEnv(e);let t=[],r=ks(e,mi);for(let{key:n}of r.getRange({start:!1}))n!==mi&&t.push(n);return t}a(EB,"listDBIs");function A7(e,t){let n=ks(e,mi).getEntry(t),s=new Cg;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{dB.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(A7,"getDBIDefinition");function _B(e,t,r,n=!r){if(Pg(e,t),t=t.toString(),t===mi)throw new Error(qn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ks(e,t)}catch(s){if(s.message===qn.DBI_DOES_NOT_EXIST){let i=new TI(r,n===!0),o=e.openDB(t,i),c=new Cg(r===!0,n);return o[mB]=c,ks(e,mi).putSync(t,c),e.dbis[t]=o,o}throw s}}a(_B,"createDBI");function ks(e,t){if(Pg(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==mi?r=A7(e,t):r=new Cg,r===void 0)throw new Error(qn.DBI_DOES_NOT_EXIST);let n;try{let s=new TI(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(qn.DBI_DOES_NOT_EXIST):s}return n[mB]=r,e.dbis[t]=n,n}a(ks,"openDBI");function I7(e,t){Pg(e,t),t=t.toString();let r=ks(e,t),n=r.getStats();return r[Qa.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(I7,"statDBI");async function w7(e,t){try{let r=cs.join(e,t+cp);return(await fi.stat(r)).size}catch{throw new Error(qn.INVALID_ENVIRONMENT)}}a(w7,"environmentDataSize");function N7(e,t){if(Pg(e,t),t=t.toString(),t===mi)throw new Error(qn.CANNOT_DROP_INTERNAL_DBIS_NAME);ks(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ks(e,mi).removeSync(t)}a(N7,"dropDBI");function C7(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ks(e,i)}catch(o){if(o.message===qn.DBI_DOES_NOT_EXIST)_B(e,i,i!==t,i===t),n=!0;else throw o}}n&&E7()}a(C7,"initializeDBIs");gB.exports={openDBI:ks,openEnvironment:pB,createEnvironment:T7,listDBIs:EB,listDBIDefinitions:b7,createDBI:_B,dropDBI:N7,statDBI:I7,deleteEnvironment:R7,initializeDBIs:C7,TransactionCursor:gI,environmentDataSize:w7,copyEnvironment:y7,closeEnvironment:hB}});var yB=v((bLe,TB)=>{"use strict";var bI=_t(),O7=J(),SB=Jr().LMDB_ERRORS_ENUM;TB.exports=P7;async function P7(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 bI.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==SB.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await bI.closeEnvironment(global.lmdb_map[n]),await bI.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==SB.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){O7.error(t)}}a(P7,"cleanLMDBMap")});var Xi=v((ILe,bB)=>{"use strict";var RB=oe(),L7=(H(),M(W)),id=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ji=require("joi"),Ja={schema_format:{pattern:id,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},D7=Ji.alternatives(Ji.string().min(1).max(Ja.schema_length.maximum).pattern(id).messages({"string.pattern.base":"{:#label} "+Ja.schema_format.message}),Ji.number(),Ji.array()).required(),M7=Ji.alternatives(Ji.string().min(1).max(Ja.schema_length.maximum).pattern(id).messages({"string.pattern.base":"{:#label} "+Ja.schema_format.message}),Ji.number()),v7=Ji.alternatives(Ji.string().min(1).max(Ja.schema_length.maximum).pattern(id).messages({"string.pattern.base":"{:#label} "+Ja.schema_format.message}),Ji.number()).required();function U7(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>Ja.schema_length.maximum?`'${property_name}' maximum of 250 characters`:id.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}a(U7,"checkValidTable");function x7(e,t){return RB.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(x7,"validateSchemaExists");function B7(e,t){let r=t.state.ancestors[0].schema;return RB.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(B7,"validateTableExists");function F7(e,t){return e.toLowerCase()===L7.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(F7,"validateSchemaName");bB.exports={commonValidators:Ja,schemaRegex:id,hdbSchemaTable:D7,validateSchemaExists:x7,validateTableExists:B7,validateSchemaName:F7,checkValidTable:U7,hdbDatabase:M7,hdbTable:v7}});var ot=v((NLe,AB)=>{"use strict";var Gn=require("validate.js");Gn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Gn.validators.type.checks[t](e)?null:` must be a '${t}' value`};Gn.validators.type.checks={Object:a(function(e){return Gn.isObject(e)&&!Gn.isArray(e)},"Object"),Array:Gn.isArray,Integer:Gn.isInteger,Number:Gn.isNumber,String:Gn.isString,Date:Gn.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};Gn.validators.hasValidFileExt=function(e,t){return Gn.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};AB.exports={validateObject:k7,validateObjectAsync:H7,validateBySchema:q7};function k7(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Gn(e,t,{format:"flat"});return r?new Error(r):null}a(k7,"validateObject");async function H7(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Gn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(H7,"validateObjectAsync");function q7(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(q7,"validateBySchema")});var II=v((OLe,wB)=>{var{hdbTable:G7,hdbDatabase:IB}=Xi(),$7=ot(),AI=require("joi"),V7={undefined:"undefined",null:"null"},K7=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||V7[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"customRecordsVal"),Y7=AI.object({database:IB,schema:IB,table:G7,records:AI.array().items(AI.object().custom(K7)).required()});wB.exports=function(e){return $7.validateBySchema(e,Y7)}});var CB=v((LLe,NB)=>{"use strict";var wI=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")}};NB.exports=wI});var PB=v((MLe,OB)=>{"use strict";var NI=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};OB.exports=NI});var DB=v((ULe,LB)=>{"use strict";var CI=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}};LB.exports=CI});var vB=v((BLe,MB)=>{"use strict";var OI=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};MB.exports=OI});var Sl=v((GLe,BB)=>{"use strict";var W7=_t(),z7=PB(),j7=DB(),Q7=vB(),Zi=xn(),lp=Jr().LMDB_ERRORS_ENUM,J7=Wt(),Yo=(H(),M(W)),X7=oe(),Z7=require("uuid"),kLe=require("lmdb"),{handleHDBError:eee,hdbErrors:tee}=_e(),{OVERFLOW_MARKER:HLe,MAX_SEARCH_KEY_LENGTH:qLe}=J7,UB=ae();UB.initSync();var Lg=UB.get(Yo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),PI=Yo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,gl=Yo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function ree(e,t,r,n,s=Zi.getNextMonotonicTime()){vI(e,t,r,n),LI(e,t,r);let i=new z7,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];xB(u,!0,s);let d=nee(e,t,r,u),f=u[t];o.push(d),c.push(f)}return DI(o,c,n,i,s)}a(ree,"insertRecords");function nee(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 d=c([[{}]]);Array.isArray(d)&&(c=d[0][Yo.FUNC_VAL],n[o]=c)}let l=Zi.getIndexedValues(c),u=e.dbis[o];if(l){Lg&&u.prefetch(l.map(d=>({key:d,value:s})),Dg);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}Lg&&e.dbis[t].prefetch([s],Dg),e.dbis[t].put(s,n,n[gl])})}a(nee,"insertRecord");function see(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(see,"removeSkippedRecords");function xB(e,t,r){let n=r>0;(n||!Number.isInteger(e[gl]))&&(e[gl]=r||(r=Zi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[PI]))&&(e[PI]=r||Zi.getNextMonotonicTime()):delete e[PI]}a(xB,"setTimestamps");function LI(e,t,r){r.indexOf(Yo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Yo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Yo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Yo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),W7.initializeDBIs(e,t,r)}a(LI,"initializeTransaction");async function iee(e,t,r,n,s=Zi.getNextMonotonicTime()){vI(e,t,r,n),LI(e,t,r);let i=new j7,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=MI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),o.push(u);continue}c.push(m),l.push(f)}return DI(c,l,n,i,s,o)}a(iee,"updateRecords");async function oee(e,t,r,n,s=Zi.getNextMonotonicTime()){try{vI(e,t,r,n)}catch(l){throw eee(l,l.message,tee.HTTP_STATUS_CODES.BAD_REQUEST)}LI(e,t,r);let i=new Q7,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;X7.isEmpty(u[t])?(d=Z7.v4(),u[t]=d):d=u[t];let f=MI(e,t,u,d,i,!1,s);o.push(f),c.push(d)}return DI(o,c,n,i,s)}a(oee,"upsertRecords");async function DI(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Zi.getNextMonotonicTime(),see(r,i),n}a(DI,"finalizeWrite");function MI(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(xB(r,!d,o),Number.isInteger(r[gl])&&u[gl]>r[gl])return!1;d&&s.original_records.push(u);let f,m=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let E=r[h],g=e.dbis[h];if(g===void 0)continue;let R=u[h];if(typeof E=="function"){let y=E([[u]]);Array.isArray(y)&&(E=y[0][Yo.FUNC_VAL],r[h]=E)}if(E===R)continue;let S=Zi.getIndexedValues(R);if(S){Lg&&g.prefetch(S.map(y=>({key:y,value:n})),Dg);for(let y=0,N=S.length;y<N;y++)g.remove(S[y],n)}if(S=Zi.getIndexedValues(E),S){Lg&&g.prefetch(S.map(y=>({key:y,value:n})),Dg);for(let y=0,N=S.length;y<N;y++)g.put(S[y],n)}}let p={...u,...r};c.put(n,p,p[gl])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:MI(e,t,r,n,s,i,o))}a(MI,"updateUpsertRecord");function aee(e,t,r){if(Zi.validateEnv(e),t===void 0)throw new Error(lp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(lp.WRITE_ATTRIBUTES_REQUIRED):new Error(lp.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(aee,"validateBasic");function vI(e,t,r,n){if(aee(e,t,r),!Array.isArray(n))throw n===void 0?new Error(lp.RECORDS_REQUIRED):new Error(lp.RECORDS_MUST_BE_ARRAY)}a(vI,"validateWrite");function Dg(){}a(Dg,"noop");BB.exports={insertRecords:ree,updateRecords:iee,upsertRecords:oee}});var eo=v((VLe,cee)=>{cee.exports={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:"hash_function"},{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:"id",table:"hdb_license",database:"system",audit:!0,attributes:[{attribute:"id"},{name:"level"},{name:"region",indexed:!0},{name:"reads"},{name:"writes"},{name:"readBytes"},{name:"writeBytes"},{name:"realTimeMessages"},{name:"realTimeBytes"},{name:"cpuTime"},{name:"storage"},{name:"usedReads"},{name:"usedWrites"},{name:"usedReadBytes"},{name:"usedWriteBytes"},{name:"usedRealTimeMessages"},{name:"usedRealTimeBytes"},{name:"usedCpuTime"},{name:"usedStorage"},{name:"expiration"},{name:"autoRenew"},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]},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:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",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"}]},hdb_certificate_cache:{hash_attribute:"certificate_id",name:"hdb_certificate_cache",schema:"system",attributes:[{attribute:"certificate_id"}]},hdb_crl_cache:{hash_attribute:"distribution_point",name:"hdb_crl_cache",schema:"system",attributes:[{attribute:"distribution_point"}]},hdb_revoked_certificates:{hash_attribute:"composite_id",name:"hdb_revoked_certificates",schema:"system",attributes:[{attribute:"composite_id"}]}}});var kB=v((KLe,FB)=>{"use strict";var lee=require("uuid"),UI=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||lee.v4(),this.schema_table=`${this.schema}.${this.table}`}};FB.exports=UI});var Mg=v((WLe,HB)=>{"use strict";var uee=kB(),xI=class extends uee{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}};HB.exports=xI});var GB=v((jLe,qB)=>{"use strict";qB.exports=fee;var dee="inserted";function fee(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===dee?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(fee,"returnObject")});var vg=v((XLe,VB)=>{"use strict";var mee=(H(),M(W)),BI=_t(),pee=Sl(),{getSystemSchemaPath:hee,getSchemaPath:Eee}=bt(),JLe=eo(),{validateBySchema:_ee}=ot(),up=require("joi"),gee=Mg(),See=GB(),{handleHDBError:Tee,hdbErrors:yee,ClientError:Ree}=_e(),$B=oe(),{HTTP_STATUS_CODES:bee}=yee,Aee="inserted";VB.exports=Iee;async function Iee(e){let t=_ee(e,up.object({database:up.string(),schema:up.string(),table:up.string().required(),attribute:up.string().required()}));if(t)throw new Ree(t.message);let r=!e.skip_table_check&&$B.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Tee(new Error,r,bee.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=$B.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 gee(e.schema,e.table,e.attribute,e.id);try{let i=await BI.openEnvironment(Eee(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${create_attribute_obj.attribute}' already exists in ${e.schema}.${e.table}`);BI.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await BI.openEnvironment(hee(),mee.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await pee.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return See(Aee,c,{records:[s]},l)}catch(i){throw i}}a(Iee,"lmdbCreateAttribute")});var dp=v((tDe,YB)=>{"use strict";var Wo=oe(),KB=J(),eDe=II(),{getDatabases:wee}=(we(),M(mt)),{ClientError:Tl}=_e();YB.exports=Nee;function Nee(e){if(Wo.isEmpty(e))throw new Tl("invalid update parameters defined.");if(Wo.isEmptyOrZeroLength(e.schema))throw new Tl("invalid schema specified.");if(Wo.isEmptyOrZeroLength(e.table))throw new Tl("invalid table specified.");if(!Array.isArray(e.records))throw new Tl("records must be an array");let t=wee()[e.schema]?.[e.table];if(Wo.isEmpty(t))throw new Tl(`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&&Wo.isEmptyOrZeroLength(o[r]))throw KB.error("a valid hash attribute must be provided with update record:",o),new Tl("a valid hash attribute must be provided with update record, check log for more info");if(!Wo.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw KB.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Tl(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Wo.isEmpty(o[r])&&o[r]!==""&&n.has(Wo.autoCast(o[r]))&&(o.skip=!0),n.add(Wo.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(Nee,"insertUpdateValidate")});var Ug=v((nDe,zB)=>{"use strict";var WB=oe(),Cee=(H(),M(W)),Oee=J(),Pee=vg(),Lee=Mg(),Dee=zo(),{SchemaEventMsg:Mee}=ls(),vee="already exists in";zB.exports=Uee;async function Uee(e,t,r){if(WB.isEmptyOrZeroLength(r))return r;let n=[];WB.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 xee(e,t.schema,t.name,i)})),s}a(Uee,"lmdbCheckForNewAttributes");async function xee(e,t,r,n){let s=new Lee(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await Bee(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(vee))Oee.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(xee,"createNewAttribute");async function Bee(e){let t;return t=await Pee(e),Dee.signalSchemaChange(new Mee(process.pid,Cee.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(Bee,"createAttribute")});var od=v((iDe,jB)=>{"use strict";var FI=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}};jB.exports=FI});var JB=v((aDe,QB)=>{"use strict";var Fee=od(),kee=(H(),M(W)).OPERATIONS_ENUM,kI=class extends Fee{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(kee.INSERT,r,n,s,i),this.records=t}};QB.exports=kI});var ZB=v((lDe,XB)=>{"use strict";var Hee=od(),qee=(H(),M(W)).OPERATIONS_ENUM,HI=class extends Hee{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(qee.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};XB.exports=HI});var tF=v((dDe,eF)=>{"use strict";var Gee=od(),$ee=(H(),M(W)).OPERATIONS_ENUM,qI=class extends Gee{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super($ee.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};eF.exports=qI});var nF=v((mDe,rF)=>{"use strict";var Vee=od(),Kee=(H(),M(W)).OPERATIONS_ENUM,GI=class extends Vee{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(Kee.DELETE,n,s,t,i),this.original_records=r}};rF.exports=GI});var fp=v((EDe,aF)=>{"use strict";var hDe=require("path"),sF=_t(),Yee=JB(),Wee=ZB(),zee=tF(),jee=nF(),ad=Wt(),iF=oe(),{CONFIG_PARAMS:Qee}=(H(),M(W)),oF=ae();oF.initSync();var xg=(H(),M(W)).OPERATIONS_ENUM,{getTransactionAuditStorePath:Jee}=bt();aF.exports=Xee;async function Xee(e,t){if(oF.get(Qee.LOGGING_AUDITLOG)===!1)return;let r=Jee(e.schema,e.table),n=await sF.openEnvironment(r,e.table,!0),s=Zee(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){sF.initializeDBIs(n,ad.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ad.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[ad.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[ad.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),iF.isEmpty(s.user_name)||n.dbis[ad.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[ad.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(Xee,"writeTransaction");function Zee(e,t){let r=iF.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===xg.INSERT)return new Yee(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===xg.UPDATE)return new Wee(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===xg.UPSERT)return new zee(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===xg.DELETE)return new jee(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Zee,"createTransactionObject")});var $I=v((SDe,cF)=>{"use strict";var ete=dp(),gDe=Dm(),mp=(H(),M(W)),tte=Mm(),rte=Sl().insertRecords,nte=_t(),ste=J(),ite=Ug(),{getSchemaPath:ote}=bt(),ate=fp();cF.exports=cte;async function cte(e){try{let{schemaTable:t,attributes:r}=ete(e);tte(e,r,t.hash_attribute),e.schema!==mp.SYSTEM_SCHEMA_NAME&&(r.includes(mp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(mp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(mp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(mp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await ite(e.hdb_auth_header,t,r),s=ote(e.schema,e.table),i=await nte.openEnvironment(s,e.table),o=await rte(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await ate(e,o)}catch(c){ste.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(cte,"lmdbCreateRecords")});var dF=v((yDe,uF)=>{"use strict";var lF=(H(),M(W)),lte=$I(),ute=Dm(),dte=require("fs-extra"),{getSchemaPath:fte}=bt();uF.exports=mte;async function mte(e){let t=[{name:e.schema,createddate:Date.now()}],r=new ute(lF.SYSTEM_SCHEMA_NAME,lF.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await lte(r),await dte.mkdirp(fte(e.schema))}a(mte,"lmdbCreateSchema")});var mF=v((bDe,fF)=>{"use strict";var VI=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}};fF.exports=VI});var _F=v((CDe,EF)=>{"use strict";var pF=_t(),KI=xn(),YI=Jr().LMDB_ERRORS_ENUM,pte=Wt(),hF=J(),IDe=oe(),hte=require("lmdb"),Ete=mF(),_te=(H(),M(W)),{OVERFLOW_MARKER:wDe,MAX_SEARCH_KEY_LENGTH:NDe}=pte,gte=_te.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Ste(e,t,r,n){if(KI.validateEnv(e),t===void 0)throw new Error(YI.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(YI.IDS_REQUIRED):new Error(YI.IDS_MUST_BE_ITERABLE);try{let s=pF.listDBIs(e);pF.initializeDBIs(e,t,s);let i=new Ete,o,c=[],l=[];for(let m=0,p=r.length;m<p;m++)try{o=r[m];let h=e.dbis[t].get(o);if(!h||n&&h[gte]>n){i.skipped.push(o);continue}let E=e.dbis[t].ifVersion(o,hte.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<s.length;g++){let R=s[g];if(!h.hasOwnProperty(R)||R===t)continue;let S=e.dbis[R],y=h[R];if(y!=null)try{let N=KI.getIndexedValues(y);if(N)for(let I=0,$=N.length;I<$;I++)S.remove(N[I],o)}catch{hF.warn(`cannot delete from attribute: ${R}, ${y}:${o}`)}}});c.push(E),l.push(o),i.original_records.push(h)}catch(h){hF.warn(h),i.skipped.push(o)}let u=[],d=await Promise.all(c);for(let m=0,p=d.length;m<p;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let p=u[m];i.original_records.splice(p-f,1),f++}return i.txn_time=KI.getNextMonotonicTime(),i}catch(s){throw s}}a(Ste,"deleteRecords");EF.exports={deleteRecords:Ste}});var pp=v((PDe,SF)=>{"use strict";var cd=oe(),Tte=_F(),yte=_t(),{getSchemaPath:Rte}=bt(),bte=fp(),Ate=J();SF.exports=Ite;async function Ite(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(cd.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(cd.isEmptyOrZeroLength(e.hash_values)&&!cd.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];cd.isEmpty(l)||e.hash_values.push(l)}}if(cd.isEmptyOrZeroLength(e.hash_values))return gF([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(cd.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=Rte(e.schema,e.table),i=await yte.openEnvironment(s,e.table),o=await Tte.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await bte(e,o)}catch(c){Ate.error(`unable to write transaction due to ${c.message}`)}return gF(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(Ite,"lmdbDeleteRecords");function gF(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(gF,"createDeleteResponse")});var zI=v((MDe,TF)=>{"use strict";var wte=(H(),M(W)),DDe=xn();function WI(e,t){let r=Object.create(null);if(t.length===1&&wte.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(WI,"parseRow");function Nte(e,t,r,n){let s=WI(r,e);n.push(s)}a(Nte,"searchAll");function Cte(e,t,r,n){let s=WI(r,e);n[t]=s}a(Cte,"searchAllToMap");function Ote(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Ote,"iterateDBI");function yl(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(yl,"pushResults");function Pte(e,t,r,n,s,i){t.toString().endsWith(e)&&yl(t,r,n,s,i)}a(Pte,"endsWith");function Lte(e,t,r,n,s,i){t.toString().includes(e)&&yl(t,r,n,s,i)}a(Lte,"contains");function Dte(e,t,r,n,s,i){t>e&&yl(t,r,n,s,i)}a(Dte,"greaterThanCompare");function Mte(e,t,r,n,s,i){t>=e&&yl(t,r,n,s,i)}a(Mte,"greaterThanEqualCompare");function vte(e,t,r,n,s,i){t<e&&yl(t,r,n,s,i)}a(vte,"lessThanCompare");function Ute(e,t,r,n,s,i){t<=e&&yl(t,r,n,s,i)}a(Ute,"lessThanEqualCompare");TF.exports={parseRow:WI,searchAll:Nte,searchAllToMap:Cte,iterateDBI:Ote,endsWith:Pte,contains:Lte,greaterThanCompare:Dte,greaterThanEqualCompare:Mte,lessThanCompare:vte,lessThanEqualCompare:Ute,pushResults:yl}});var ld=v((FDe,NF)=>{"use strict";var Xa=_t(),UDe=J(),us=xn(),Bg=Wt(),nr=Jr().LMDB_ERRORS_ENUM,xDe=oe(),xte=(H(),M(W)),Fg=zI(),{parseRow:Bte}=Fg,BDe=require("lmdb"),{OVERFLOW_MARKER:yF,MAX_SEARCH_KEY_LENGTH:Fte}=Bg;function RF(e,t,r,n=!1,s=void 0,i=void 0){return Rl(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(RF,"iterateFullIndex");function hp(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return Rl(e,t,r,(d,f,m,p)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return p===r?(S.values=!1,f.getRange(S).map(y=>({value:y}))):f.getRange(S)})}a(hp,"iterateRangeBetween");function Rl(e,t,r,n){let s=e.database||e,i=Xa.openDBI(s,r);i[Bg.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Xa.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(Rl,"setupTransaction");function bF(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(yF)){if(!s)if(r)s=Xa.openDBI(e,r);else{let l=Xa.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Xa.openDBI(e,l[u]),!s[Bg.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(bF,"getOverflowCheck");function kte(e,t,r,n=!1,s=void 0,i=void 0){if(us.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);return Rl(e,t,t,(o,c,l)=>(kg(r),r=Ep(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>Bte(u.value,r))))}a(kte,"searchAll");function Hte(e,t,r,n=!1,s=void 0,i=void 0){if(us.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);kg(r),r=Ep(e.database||e,r);let o=new Map;for(let{key:c,value:l}of RF(e,t,t,n,s,i))o.set(c,Fg.parseRow(l,r));return o}a(Hte,"searchAllToMap");function qte(e,t,r=!1,n=void 0,s=void 0){if(us.validateEnv(e),t===void 0)throw new Error(nr.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=RF(e,void 0,t,r,n,s),c=o.transaction,l=bF(c.database,c,void 0,t);for(let{key:u,value:d}of o){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}a(qte,"iterateDBI");function Gte(e,t){if(us.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);return Xa.statDBI(e,t).entryCount}a(Gte,"countAll");function $te(e,t,r,n,s=!1,i=void 0,o=void 0){return Za(e,r,n),Rl(e,t,r,(c,l,u,d)=>(n=us.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(f=>({key:n,value:f}))))}a($te,"equals");function Vte(e,t,r){return Za(e,t,r),Xa.openDBI(e,t).getValuesCount(r)}a(Vte,"count");function Kte(e,t,r,n,s=!1,i=void 0,o=void 0){return Za(e,r,n),Rl(e,null,r,(c,l)=>{n=us.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(o)?o++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:o}).map(m=>{let{key:p}=m;if(p!==f){if(p.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}a(Kte,"startsWith");function Yte(e,t,r,n,s=!1,i=void 0,o=void 0){return AF(e,t,r,n,s,i,o,!0)}a(Yte,"endsWith");function AF(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Za(e,r,n),Rl(e,null,r,(l,u,d,f)=>{let m=bF(d,l,f,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(p=>{let h=p.toString();return h.endsWith(yF)?u.getValues(p,{transaction:l}).map(E=>{let g=m(p,E);if(c?g.endsWith(n):g.includes(n))return{key:g,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[Bg.DBI_DEFINITION_NAME].is_hash_attribute?{key:p,value:p}:u.getValues(p,{transaction:l}).map(E=>({key:p,value:E})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(AF,"contains");function Wte(e,t,r,n,s=!1,i=void 0,o=void 0){Za(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),hp(e,t,r,n,l,s,i,o,!0,!1)}a(Wte,"greaterThan");function zte(e,t,r,n,s=!1,i=void 0,o=void 0){Za(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),hp(e,t,r,n,l,s,i,o,!1,!1)}a(zte,"greaterThanEqual");function jte(e,t,r,n,s=!1,i=void 0,o=void 0){Za(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),hp(e,t,r,l,n,s,i,o,!1,!0)}a(jte,"lessThan");function Qte(e,t,r,n,s=!1,i=void 0,o=void 0){Za(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),hp(e,t,r,l,n,s,i,o,!1,!1)}a(Qte,"lessThanEqual");function Jte(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(us.validateEnv(e),r===void 0)throw new Error(nr.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(nr.START_VALUE_REQUIRED);if(s===void 0)throw new Error(nr.END_VALUE_REQUIRED);if(n=us.convertKeyValueToWrite(n),s=us.convertKeyValueToWrite(s),n>s)throw new Error(nr.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return hp(e,t,r,n,s,i,o,c)}a(Jte,"between");function Xte(e,t,r,n){us.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);if(kg(r),r=Ep(s,r),n===void 0)throw new Error(nr.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Fg.parseRow(c,r)),o}a(Xte,"searchByHash");function Zte(e,t,r){us.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(nr.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Zte,"checkHashExists");function ere(e,t,r,n,s=[]){return wF(e,t,r,n,s),IF(e,t,r,n,s).map(i=>i[1])}a(ere,"batchSearchByHash");function tre(e,t,r,n,s=[]){wF(e,t,r,n,s);let i=new Map;for(let[o,c]of IF(e,t,r,n,s))i.set(o,c);return i}a(tre,"batchSearchByHashToMap");function IF(e,t,r,n,s=[]){return Rl(e,t,t,(i,o,c)=>{r=Ep(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,Fg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(IF,"batchHashSearch");function wF(e,t,r,n,s){if(us.validateEnv(e),t===void 0)throw new Error(nr.HASH_ATTRIBUTE_REQUIRED);if(kg(r),n==null)throw new Error(nr.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(nr.IDS_MUST_BE_ITERABLE)}a(wF,"initializeBatchSearchByHash");function kg(e){if(!Array.isArray(e))throw e===void 0?new Error(nr.FETCH_ATTRIBUTES_REQUIRED):new Error(nr.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(kg,"validateFetchAttributes");function Za(e,t,r){if(us.validateEnv(e),t===void 0)throw new Error(nr.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(nr.SEARCH_VALUE_REQUIRED);if(r?.length>Fte)throw new Error(nr.SEARCH_VALUE_TOO_LARGE)}a(Za,"validateComparisonFunctions");function Ep(e,t){return t.length===1&&xte.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Xa.listDBIs(e)),t}a(Ep,"setGetWholeRowAttributes");NF.exports={searchAll:kte,searchAllToMap:Hte,count:Vte,countAll:Gte,equals:$te,startsWith:Kte,endsWith:Yte,contains:AF,searchByHash:Xte,setGetWholeRowAttributes:Ep,batchSearchByHash:ere,batchSearchByHashToMap:tre,checkHashExists:Zte,iterateDBI:qte,greaterThan:Wte,greaterThanEqual:zte,lessThan:jte,lessThanEqual:Qte,between:Jte}});var ud=v((HDe,DF)=>{var CF=require("lodash"),OF=ot(),je=require("joi"),rre=oe(),{hdbSchemaTable:_p,checkValidTable:PF,hdbTable:LF,hdbDatabase:Hg}=Xi(),{handleHDBError:nre,hdbErrors:sre}=_e(),{getDatabases:ire}=(we(),M(mt)),{HTTP_STATUS_CODES:ore}=sre,are=je.object({database:Hg,schema:Hg,table:LF,attribute:_p,value:je.any().required(),get_attributes:je.array().min(1).items(je.alternatives(_p,je.object())).optional(),desc:je.bool(),limit:je.number().integer().min(1),offset:je.number().integer().min(0)}),cre=je.object({database:Hg,schema:Hg,table:LF,operator:je.string().valid("and","or").default("and").lowercase(),offset:je.number().integer().min(0),limit:je.number().integer().min(1),get_attributes:je.array().min(1).items(je.alternatives(_p,je.object())).optional(),sort:je.object({attribute:je.alternatives(_p,je.array().min(1)),descending:je.bool().optional()}).optional(),conditions:je.array().min(1).items(je.alternatives(je.object({operator:je.string().valid("and","or").default("and").lowercase(),conditions:je.array()}),je.object({attribute:je.alternatives(_p,je.array().min(1)),comparator:je.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:je.when("comparator",{switch:[{is:"equals",then:je.any()},{is:"between",then:je.array().items(je.alternatives([je.string(),je.number()])).length(2)}],otherwise:je.alternatives(je.string(),je.number())}).required()}))).required()});DF.exports=function(e,t){let r=null;switch(t){case"value":r=OF.validateBySchema(e,are);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(PF("database",e.schema)),i(PF("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=OF.validateBySchema(e,cre);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=rre.checkGlobalSchemaTable(e.schema,e.table);if(s)return nre(new Error,s,ore.NOT_FOUND);let o=ire()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.attribute);let l=a(d=>{for(let f of d.conditions)f.conditions?l(f):c.push(f.attribute)},"addConditions");t==="conditions"&&l(e);let u=CF.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!CF.some(o,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var jI=v((GDe,MF)=>{"use strict";var lre=_t(),ure=ud(),{getSchemaPath:dre}=bt();MF.exports=fre;function fre(e){let t=ure(e,"hashes");if(t)throw t;let r=dre(e.schema,e.table);return lre.openEnvironment(r,e.table)}a(fre,"initialize")});var QI=v((VDe,vF)=>{"use strict";var mre=ld(),pre=jI();vF.exports=hre;async function hre(e){let t=await pre(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return mre.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(hre,"lmdbGetDataByHash")});var dd=v((YDe,UF)=>{"use strict";var JI=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};UF.exports=JI});var BF=v((jDe,xF)=>{"use strict";var zDe=dd(),Ere=ld(),_re=jI();xF.exports=gre;async function gre(e){let t=await _re(e),r=global.hdb_schema[e.schema][e.table];return Ere.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(gre,"lmdbSearchByHash")});var pi=v((JDe,FF)=>{"use strict";var XI=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.attribute=n,this.value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};FF.exports=XI});var qg=v((ZDe,VF)=>{"use strict";var En=ld(),Sre=_t(),Tre=oe(),Qe=Wt(),bl=(H(),M(W)),yre=eo(),kF=Jr().LMDB_ERRORS_ENUM,{getSchemaPath:Rre}=bt(),jo=bl.SEARCH_WILDCARDS;async function bre(e,t,r){let n;e.schema===bl.SYSTEM_SCHEMA_NAME?n=yre[e.table]:n=global.hdb_schema[e.schema][e.table];let s=$F(e,n.hash_attribute,r,t);return qF(e,s,n.hash_attribute,r)}a(bre,"prepSearch");async function qF(e,t,r,n){let s=Rre(e.schema,e.table),i=await Sre.openEnvironment(s,e.table),o=GF(i,e,t,r),c=o.transaction||i;if([Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Qe.SEARCH_TYPES.SEARCH_ALL,Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Are(e,r)===!1){let d=e.attribute;if(d===r)return n?HF(o,()=>!0):o.map(m=>({[r]:m.key}));let f=a(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?HF(o,f):o.map(f)}let u=e.attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?En.batchSearchByHashToMap(c,r,e.get_attributes,u):En.batchSearchByHash(c,r,e.get_attributes,u)}a(qF,"executeSearch");function GF(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Qe.SEARCH_TYPES.EQUALS:s=En.equals(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.CONTAINS:s=En.contains(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.ENDS_WITH:case Qe.SEARCH_TYPES._ENDS_WITH:s=En.endsWith(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.STARTS_WITH:case Qe.SEARCH_TYPES._STARTS_WITH:s=En.startsWith(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return En.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return En.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case Qe.SEARCH_TYPES.SEARCH_ALL:return En.searchAll(e,n,t.get_attributes,o,c,l);case Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return En.searchAllToMap(e,n,t.get_attributes,o,c,l);case Qe.SEARCH_TYPES.BETWEEN:s=En.between(e,i,t.attribute,t.value,t.end_value,o,c,l);break;case Qe.SEARCH_TYPES.GREATER_THAN:case Qe.SEARCH_TYPES._GREATER_THAN:s=En.greaterThan(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.GREATER_THAN_EQUAL:case Qe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=En.greaterThanEqual(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.LESS_THAN:case Qe.SEARCH_TYPES._LESS_THAN:s=En.lessThan(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.LESS_THAN_EQUAL:case Qe.SEARCH_TYPES._LESS_THAN_EQUAL:s=En.lessThanEqual(e,i,t.attribute,t.value,o,c,l);break;default:return Object.create(null)}return s}a(GF,"searchByType");function HF(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(HF,"createMapFromIterable");function Are(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.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(Are,"checkToFetchMore");function $F(e,t,r,n){if(Tre.isEmpty(n)){let s=e.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.attribute===t&&(c=!0),jo.indexOf(s)>-1)return r===!0?Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Qe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(jo[0])<0&&s.indexOf(jo[1])<0)return c===!0?r===!0?Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Qe.SEARCH_TYPES.EQUALS;if(jo.indexOf(i)>=0&&jo.indexOf(o)>=0)return e.value=e.value.slice(1,-1),Qe.SEARCH_TYPES.CONTAINS;if(jo.indexOf(i)>=0)return e.value=e.value.substr(1),Qe.SEARCH_TYPES.ENDS_WITH;if(jo.indexOf(o)>=0)return e.value=e.value.slice(0,-1),Qe.SEARCH_TYPES.STARTS_WITH;if(s.includes(jo[0])||s.includes(jo[1]))return Qe.SEARCH_TYPES.EQUALS;throw new Error(kF.UNKNOWN_SEARCH_TYPE)}else switch(n){case bl.VALUE_SEARCH_COMPARATORS.BETWEEN:return Qe.SEARCH_TYPES.BETWEEN;case bl.VALUE_SEARCH_COMPARATORS.GREATER:return Qe.SEARCH_TYPES.GREATER_THAN;case bl.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Qe.SEARCH_TYPES.GREATER_THAN_EQUAL;case bl.VALUE_SEARCH_COMPARATORS.LESS:return Qe.SEARCH_TYPES.LESS_THAN;case bl.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Qe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(kF.UNKNOWN_SEARCH_TYPE)}}a($F,"createSearchTypeFromSearchObject");VF.exports={executeSearch:qF,createSearchTypeFromSearchObject:$F,prepSearch:bre,searchByType:GF}});var YF=v((rMe,KF)=>{"use strict";var tMe=pi(),Ire=ud(),wre=oe(),Nre=(H(),M(W)),Cre=qg();KF.exports=Ore;function Ore(e,t){if(!wre.isEmpty(t)&&Nre.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Ire(e,"value");if(n)throw n;return Cre.prepSearch(e,t,!0)}a(Ore,"lmdbGetDataByValue")});var gp=v((iMe,WF)=>{"use strict";var sMe=pi(),Pre=ud(),Lre=oe(),Dre=(H(),M(W)),Mre=qg();WF.exports=vre;async function vre(e,t){if(!Lre.isEmpty(t)&&Dre.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Pre(e,"value");if(n)throw n;return Mre.prepSearch(e,t,!1)}a(vre,"lmdbSearchByValue")});var jF=v((cMe,zF)=>{"use strict";var aMe=Wt(),ZI=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}},ew=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},tw=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};zF.exports={SearchByConditionsObject:ZI,SearchCondition:ew,SortAttribute:tw}});var ek=v((mMe,ZF)=>{"use strict";var{SearchByConditionsObject:uMe,SearchCondition:dMe}=jF(),Ure=pi(),xre=ud(),rw=ld(),Gg=Wt(),{Resource:fMe}=(Ko(),M(z0)),XF=qg(),Bre=zI(),Fre=require("lodash"),{getSchemaPath:kre}=bt(),QF=_t(),{handleHDBError:Hre,hdbErrors:qre}=_e(),{HTTP_STATUS_CODES:Gre}=qre,$re=1e8;ZF.exports=Vre;async function Vre(e){let t=xre(e,"conditions");if(t)throw Hre(t,t.message,Gre.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=kre(e.schema,e.table),n=await QF.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)QF.openDBI(n,u.attribute);let i=Fre.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===Gg.SEARCH_TYPES.EQUALS?u.estimated_count=rw.count(n,u.attribute,u.value):d===Gg.SEARCH_TYPES.CONTAINS||d===Gg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=$re}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await JF(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(XF.filterByType),f=d.length,m=rw.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(p=>u.get(p,{transaction:o,lazy:!0})),f>0&&(l=l.filter(p=>{for(let h=0;h<f;h++)if(!d[h](p))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(p=>Bre.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await JF(o,e,m,s.hash_attribute);c=c.concat(p)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=rw.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(Vre,"lmdbSearchByConditions");async function JF(e,t,r,n){let s=new Ure(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===Gg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,XF.searchByType(e,s,i,n).map(o=>o.value)}a(JF,"executeConditionSearch")});var fd=v((hMe,tk)=>{"use strict";var Kre=(H(),M(W)).OPERATIONS_ENUM,nw=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=Kre.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};tk.exports=nw});var sw=v((_Me,lk)=>{"use strict";var ik=pi(),ok=fd(),ak=gp(),ck=pp(),$n=(H(),M(W)),rk=oe(),nk=_t(),{getTransactionAuditStorePath:Yre,getSchemaPath:Wre}=bt(),sk=J();lk.exports=zre;async function zre(e){try{if(rk.isEmpty(global.hdb_schema[e.schema])||rk.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await jre(e),await Qre(e);let t=Wre(e.schema,e.table);try{await nk.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")sk.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Yre(e.schema,e.table);await nk.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")sk.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(zre,"lmdbDropTable");async function jre(e){let t=new ik($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,$n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[$n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await ak(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 ok($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await ck(s)}a(jre,"deleteAttributesFromSystem");async function Qre(e){let t=new ik($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,$n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[$n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,$n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,$n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await ak(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 ok($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await ck(s)}catch(i){throw i}}a(Qre,"dropTableFromSystem")});var dk=v((SMe,uk)=>{"use strict";var Jre=require("fs-extra"),Xre=pi(),Zre=dd(),ene=fd(),tne=sw(),rne=pp(),nne=QI(),sne=gp(),Qo=(H(),M(W)),{getSchemaPath:ine}=bt(),{handleHDBError:one,hdbErrors:ane}=_e(),{HDB_ERROR_MSGS:cne,HTTP_STATUS_CODES:lne}=ane;uk.exports=une;async function une(e){let t;try{t=await dne(e.schema);let r=new Xre(Qo.SYSTEM_SCHEMA_NAME,Qo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await sne(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await tne(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new ene(Qo.SYSTEM_SCHEMA_NAME,Qo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await rne(s);let i=ine(t);await Jre.remove(i)}catch(r){throw r}}a(une,"lmdbDropSchema");async function dne(e){let t=new Zre(Qo.SYSTEM_SCHEMA_NAME,Qo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await nne(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw one(new Error,cne.SCHEMA_NOT_FOUND(e),lne.NOT_FOUND,void 0,void 0,!0);return n}a(dne,"validateDropSchema")});var md=v((yMe,fk)=>{"use strict";var iw=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};fk.exports=iw});var aw=v((AMe,mk)=>{"use strict";var fne=require("fs-extra"),$g=_t(),{getTransactionAuditStorePath:mne}=bt(),ow=Wt(),bMe=md();mk.exports=pne;async function pne(e){let t;try{let r=mne(e.schema,e.table);await fne.mkdirp(r),t=await $g.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{$g.createDBI(t,ow.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),$g.createDBI(t,ow.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),$g.createDBI(t,ow.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(pne,"createTransactionsAuditEnvironment")});var Ek=v((NMe,hk)=>{"use strict";var cw=(H(),M(W)),pk=_t(),hne=Sl(),{getSystemSchemaPath:Ene,getSchemaPath:_ne}=bt(),wMe=eo(),gne=vg(),lw=Mg(),Sne=J(),Tne=aw();hk.exports=yne;async function yne(e,t){let r=_ne(t.schema,t.table),n=new lw(t.schema,t.table,cw.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new lw(t.schema,t.table,cw.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new lw(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await pk.createEnvironment(r,t.table),e!==void 0){let o=await pk.openEnvironment(Ene(),cw.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await hne.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await uw(n),await uw(s),await uw(i)}await Tne(t)}catch(o){throw o}}a(yne,"lmdbCreateTable");async function uw(e){try{await gne(e)}catch(t){Sne.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(uw,"createAttribute")});var gk=v((OMe,_k)=>{"use strict";var Rne=dp(),bne=Mm(),Ane=Ug(),Sp=(H(),M(W)),Ine=Sl().updateRecords,wne=_t(),{getSchemaPath:Nne}=bt(),Cne=fp(),One=J();_k.exports=Pne;async function Pne(e){try{let{schemaTable:t,attributes:r}=Rne(e);bne(e,r,t.hash_attribute),e.schema!==Sp.SYSTEM_SCHEMA_NAME&&(r.includes(Sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Ane(e.hdb_auth_header,t,r),s=Nne(e.schema,e.table),i=await wne.openEnvironment(s,e.table),o=await Ine(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Cne(e,o)}catch(c){One.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(Pne,"lmdbUpdateRecords")});var Tk=v((LMe,Sk)=>{"use strict";var Lne=(H(),M(W)).OPERATIONS_ENUM,dw=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Lne.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Sk.exports=dw});var Rk=v((vMe,yk)=>{"use strict";var MMe=Tk(),Dne=dp(),Mne=Mm(),vne=Ug(),Tp=(H(),M(W)),Une=Sl().upsertRecords,xne=_t(),{getSchemaPath:Bne}=bt(),Fne=fp(),kne=J(),{handleHDBError:Hne,hdbErrors:qne}=_e();yk.exports=Gne;async function Gne(e){let t;try{t=Dne(e)}catch(l){throw Hne(l,l.message,qne.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;Mne(e,n,r.hash_attribute),e.schema!==Tp.SYSTEM_SCHEMA_NAME&&(n.includes(Tp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Tp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Tp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Tp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await vne(e.hdb_auth_header,r,n),i=Bne(e.schema,e.table),o=await xne.openEnvironment(i,e.table),c=await Une(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Fne(e,c)}catch(l){kne.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}a(Gne,"lmdbUpsertRecords")});var Ak=v((xMe,bk)=>{"use strict";var fw=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};bk.exports=fw});var wk=v((FMe,Ik)=>{"use strict";var mw=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}};Ik.exports=mw});var Ok=v((qMe,Ck)=>{"use strict";var pw=_t(),{getTransactionAuditStorePath:$ne}=bt(),HMe=Ak(),yp=Wt(),Vne=oe(),Nk=wk(),Kne=require("util").promisify,Yne=Kne(setTimeout),Wne=1e4,zne=100;Ck.exports=jne;async function jne(e){let t=$ne(e.schema,e.table),r=await pw.openEnvironment(t,e.table,!0),n=pw.listDBIs(r);pw.initializeDBIs(r,yp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new Nk;do s=await Qne(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 Yne(zne);while(s.transactions_deleted>0);return i}a(jne,"deleteAuditLogsBefore");async function Qne(e,t){let r=new Nk;try{let n=e.dbis[yp.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[yp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Vne.isEmpty(c)||(s=e.dbis[yp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[yp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Wne)break}return await s,r}catch(n){throw n}}a(Qne,"deleteTransactions")});var Lk=v(($Me,Pk)=>{"use strict";var hw=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};Pk.exports=hw});var Mk=v((YMe,Dk)=>{"use strict";var Jne=pi(),Xne=fd(),KMe=Lk(),to=(H(),M(W)),Zne=oe(),Ew=_t(),ese=eo(),tse=gp(),rse=pp(),{getSchemaPath:nse}=bt();Dk.exports=sse;async function sse(e,t=!0){let r;e.schema===to.SYSTEM_SCHEMA_NAME?r=ese[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await ose(e),s=nse(e.schema,e.table),i=await Ew.openEnvironment(s,e.table);return t===!0&&await ise(e,i,r.hash_attribute),Ew.dropDBI(i,e.attribute),n}a(sse,"lmdbDropAttribute");async function ise(e,t,r){let n=Ew.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(o,u,l)}await s}a(ise,"removeAttributeFromAllObjects");async function ose(e){let t=new Jne(to.SYSTEM_SCHEMA_NAME,to.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,to.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[to.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,to.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await tse(t)).filter(o=>o[to.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Zne.isEmptyOrZeroLength(n))throw new Error(`Attribute '${drop_attribute_obj.attribute}' was not found in '${drop_attribute_obj.schema}.${drop_attribute_obj.table}'`);let s=n.map(o=>o[to.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Xne(to.SYSTEM_SCHEMA_NAME,to.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return rse(i)}a(ose,"dropAttributeFromSystem")});var kk=v((jMe,Fk)=>{"use strict";var _w=_t(),pd=Wt(),zMe=xn(),gw=(H(),M(W)),vk=oe(),{getTransactionAuditStorePath:ase}=bt(),cse=ld(),Vg=od(),lse=J();Fk.exports=use;async function use(e){let t=ase(e.schema,e.table),r=await _w.openEnvironment(t,e.table,!0),n=_w.listDBIs(r);_w.initializeDBIs(r,pd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case gw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Uk(r,e.search_values);case gw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,fse(r,e.search_values,s);case gw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return dse(r,e.search_values);default:return Uk(r)}}a(use,"readAuditLog");function Uk(e,t=[0,Date.now()]){vk.isEmpty(t[0])&&(t[0]=0),vk.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[pd.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 Vg,s))}a(Uk,"searchTransactionsByTimestamp");function dse(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[pd.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,Bk(e,i))}return Object.fromEntries(r)}a(dse,"searchTransactionsByUsername");function fse(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=cse.equals(e,pd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,pd.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:f}of d){let m=Number(f);n.has(m)?n.get(m).push(u.toString()):n.set(m,[u.toString()])}}let s=Array.from(n.keys()),i=Bk(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);xk(l,"records",r,d,o),xk(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(fse,"searchTransactionsByHashValues");function xk(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],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let f=new Vg(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new Vg(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(xk,"loopRecords");function Bk(e,t){let r=[];try{let n=e.dbis[pd.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 Vg,i);r.push(o)}}catch(i){lse.warn(i)}return r}catch(n){throw n}}a(Bk,"batchSearchTransactions")});var qk=v((ZMe,Hk)=>{"use strict";var{getSchemaPath:JMe}=bt(),XMe=_t(),{database:mse}=(we(),M(mt));Hk.exports={writeTransaction:pse};async function pse(e,t,r){return mse({database:e,table:t}).transaction(r)}a(pse,"writeTransaction")});var Kk=v((tve,Vk)=>{"use strict";var{getSchemaPath:Gk}=bt(),$k=_t();Vk.exports={flush:hse,resetReadTxn:Ese};async function hse(e,t){return(await $k.openEnvironment(Gk(e,t),t.toString())).flushed}a(hse,"flush");async function Ese(e,t){try{(await $k.openEnvironment(Gk(e,t),t.toString())).resetReadTxn()}catch{}}a(Ese,"resetReadTxn")});var jk=v((nve,zk)=>{"use strict";var{Readable:_se}=require("stream"),{getDatabases:gse}=(we(),M(mt)),{readSync:Sse,openSync:Tse,createReadStream:Yk}=require("fs"),{open:yse}=require("lmdb"),{OpenDBIObject:Wk}=op(),Rse=ap(),{AUDIT_STORE_OPTIONS:bse}=(Ki(),M(Zx)),{INTERNAL_DBIS_NAME:Ase,AUDIT_STORE_NAME:Ise}=Wt();zk.exports=Nse;var Sw=32768,wse=100;async function Nse(e){let t=e.database||e.schema||"data",r=gse()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,f=yse({noSync:!0,maxDbs:Rse.MAX_DBS}),m,p=f.openDB(Ase,new Wk(!1)),h=d.useReadTransaction(),E=0,g=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let N=f.openDB(S,y),I=d.openDB(S,y);for(let{key:$,version:ee,value:q}of I.getRange({start:null,transaction:h,versions:I.useVersions}))m=N.put($,q,ee),E++%wse===0&&(await new Promise(k=>setTimeout(k,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(N=>S.startsWith?.(N+"/"))){p.put(S,y);let[,N]=S.split("/"),I=!N,$=new Wk(!I,I);await g(S,$)}e.include_audit&&await g(Ise,{...bse}),await m;let R=Yk(f.path);return R.headers=l(),R.on("close",()=>{h.done(),f.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=Tse(o.path);return o.transaction(()=>{let u=Buffer.alloc(Sw);Sse(c,u,0,Sw),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let f=Yk(null,{fd:c,start:Sw}),m=new _se.from((async function*(){yield u;for await(let p of f)d.openTimer&&(d.openTimer=0),yield p;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(Nse,"getBackup")});var Xk=v((ive,Jk)=>{"use strict";var Cse=J(),{handleHDBError:Ose}=_e(),Pse=CB(),Lse=vg(),Dse=$I(),Mse=dF(),vse=pp(),Use=QI(),xse=BF(),Bse=YF(),Fse=gp(),kse=ek(),Hse=dk(),qse=Ek(),Gse=gk(),$se=Rk(),Vse=Ok(),Kse=sw(),Yse=Mk(),Wse=kk(),zse=qk(),Qk=Kk(),jse=jk(),Tw=class extends Pse{static{a(this,"LMDBBridge")}async searchByConditions(t){return kse(t)}async getDataByHash(t){return await Use(t)}async searchByHash(t){return await xse(t)}async getDataByValue(t,r){return await Bse(t,r)}async searchByValue(t){return await Fse(t)}async createSchema(t){return await Mse(t)}async dropSchema(t){return await Hse(t)}async createTable(t,r){return await qse(t,r)}async dropTable(t){return await Kse(t)}async createAttribute(t){return await Lse(t)}async createRecords(t){return await Dse(t)}async updateRecords(t){return await Gse(t)}async upsertRecords(t){try{return await $se(t)}catch(r){throw Ose(r,null,null,Cse.ERR,r)}}async deleteRecords(t){return await vse(t)}async dropAttribute(t){return await Yse(t)}async deleteAuditLogsBefore(t){return await Vse(t)}async readAuditLog(t){return await Wse(t)}writeTransaction(t,r,n){return zse.writeTransaction(t,r,n)}flush(t,r){return Qk.flush(t,r)}resetReadTxn(t,r){return Qk.resetReadTxn(t,r)}getBackup(t){return jse(t)}};Jk.exports=Tw});function Vn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function bp(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=a(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a string, attempt to assign ${m}`);Vn(this)[u]=m},"set");break;case"ID":d=a(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a string, attempt to assign ${m}`);Vn(this)[u]=m},"set");break;case"Float":case"Number":d=a(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a number, attempt to assign ${p}`);Vn(this)[u]=m},"set");break;case"Int":d=a(function(m){let p=m?.__op__?m.value:m;if(!(p>>0===p||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs((p>>0)-p)<=1)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);Vn(this)[u]=m},"set");break;case"Long":d=a(function(m){let p=m?.__op__?m.value:m;if(!(Math.round(p)===m&&Math.abs(p)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs(p)<=9007199254740992)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);Vn(this)[u]=m},"set");break;case"BigInt":d=a(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="bigint"||m==null&&l.nullable!==!1))if(typeof p=="string"||typeof p=="number")p=BigInt(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be a number, attempt to assign ${m}`);Vn(this)[u]=m},"set");break;case"Boolean":d=a(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a boolean, attempt to assign ${m}`);Vn(this)[u]=m},"set");break;case"Date":d=a(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new ds.ClientError(`${u} must be a Date, attempt to assign ${m}`);Vn(this)[u]=m},"set");break;case"Bytes":d=a(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);Vn(this)[u]=m},"set");break;case"Blob":d=a(function(m){if(!(m instanceof vs||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a Blob, attempt to assign ${m}`);Vn(this)[u]=m},"set");break;case"Any":case void 0:d=a(function(m){Vn(this)[u]=m},"set");break;default:d=a(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be an object, attempt to assign ${m}`);Vn(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let h=m[u];if(h?.__op__){let E=this.getRecord()?.[u];return h.update(E)}return h}let p=this.getRecord()?.[u];if(p&&typeof p=="object"){let h=yw(p,l);if(h)return m||this._setChanges(m=Object.create(null)),m[u]=h}return p},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}o("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),o("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new ds.ClientError("Can not add a property to a sealed table schema");Vn(this)[l]=u}),o("deleteProperty",function(l){Vn(this)[l]=void 0}),o("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let p=u[f];m=m.update(p)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||o("get",n.getProperty),n.delete||o("delete",n.deleteProperty),n.then||o("then",null);function o(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}a(o,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?tH:eH);break}c=l}while(c&&c!==eH&&c!==tH)}function rH(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(Zk[t])return Zk[t];let n=r.getChanges?.();if(n&&t in n)return n[t];let s=r.getRecord?.()?.[t];if(s&&typeof s=="object"){let i=yw(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function Qse(e,t,r,n){if(typeof t=="string"){let s=n.getChanges?.();s||(s={},n._setChanges(s)),s[t]=r}else Object.defineProperty(n,t,{value:r,configurable:!0,writable:!0});return!0}function yw(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends Il{static{a(this,"TrackedObject")}},bp(r,t)),new r(e)):new Il(e);case Array:let n=new Yg(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=yw(o,t?.elements)),n[s]=o}return n;default:return e}}function Wg(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=Wg(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function wl(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&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=wl(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={...e.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=dA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=wl(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)Jse.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Kg(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Al]||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?.getRecord?.()===s){if(Kg(i))return!0}else return!0}}else{let r=e.getChanges?.();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.getRecord?.()===i){if(Kg(s))return!0}else return!0}else return!0}}return!1}var ds,Zk,eH,tH,Il,Jse,Al,Yg,Rp,Rw=se(()=>{ds=b(_e());B_();ss();a(Vn,"getChanges");a(bp,"assignTrackedAccessors");Zk=Object.prototype,eH=new Proxy({},{get:rH}),tH=new Proxy({},{get:rH,set:Qse});a(rH,"getProxiedProperty");a(Qse,"setProxiedProperty");a(yw,"trackObject");Il=class{static{a(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};bp(Il,{},!0);a(Wg,"collapseData");Jse=Object.prototype.hasOwnProperty;a(wl,"updateAndFreeze");a(Kg,"hasChanges");Al=Symbol.for("has-array-changes"),Yg=class extends Array{static{a(this,"TrackedArray")}#e;[Al];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Al]=!0,super.splice(...t)}push(...t){return this[Al]=!0,super.push(...t)}pop(){return this[Al]=!0,super.pop()}unshift(...t){return this[Al]=!0,super.unshift(...t)}shift(){return this[Al]=!0,super.shift()}};Yg.prototype.constructor=Array;Rp=class{static{a(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var uH={};ye(uH,{ResourceBridge:()=>Iw});function ww({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 nH(e,t){let r=ro(e),n=ww(e,r);if(!r)throw new hi.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,replicateFrom:e.replicateFrom},o;At(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&Wg(d)}catch(f){d={message:(0,lH.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function ro(e){let t=e.database||e.schema||Zse,r=lt()[t];if(!r)throw(0,hi.handleHDBError)(new Error,Xse.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function sH(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*iH(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var oH,zg,hi,aH,bw,Aw,cH,lH,Xse,Zse,eie,tie,Iw,dH=se(()=>{oH=b(Xk()),zg=b(ud()),hi=b(_e());we();aH=b(dp());H();bw=b(zo()),Aw=b(ls()),cH=b(oe());Ga();Rw();lH=b(J()),{HDB_ERROR_MSGS:Xse}=hi.hdbErrors,Zse="data",eie=1e4,tie=10,Iw=class extends oH.default{static{a(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=ro(t);if(!r)throw new hi.ClientError(`Table ${t.table} not found`);t.conditions=t.conditions.map(n);function n(i){if("conditions"in i&&i.conditions)return i.conditions=i.conditions.map(n),i;{let o=i;return{attribute:o.attribute??o.search_attribute,comparator:o.comparator??o.search_type,value:o.value!==void 0?o.value:o.search_value}}}a(n,"mapCondition");let s=(0,zg.default)(t,"conditions");if(s)throw(0,hi.handleHDBError)(s,s.message,400,void 0,void 0,!0);return r.search({conditions:t.conditions,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:ww(t,r),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}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 hi.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}]}Xe({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await ro(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=ro(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(o);return i(o,d,f)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return ro(t).dropTable()}createSchema(t){return hd({database:t.schema,table:null}),bw.signalSchemaChange(new Aw.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Nw(t.schema),bw.signalSchemaChange(new Aw.SchemaEventMsg(process.pid,V.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{schemaTable:r,attributes:n}=(0,aH.default)(t),s,i=lt()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),At(o,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,o);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=Wg(m));for(let p in d)if(Object.prototype.hasOwnProperty.call(d,p)){let h=d[p];if(typeof h=="function")try{let E=h([[m]]);Array.isArray(E)&&(h=E[0].func_val,d[p]=h)}catch(E){throw E.message+="Trying to set key "+p+" on object"+JSON.stringify(d),E}}if(m)for(let p in m)Object.prototype.hasOwnProperty.call(d,p)||(d[p]=m[p]);await(f==null?i.create(d,o):i.put(d,o)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=lt()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),At(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return sH(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=lt()[t.schema][t.table];if(!r.createdTimeProperty)throw new hi.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:T_.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),o.push(...d.skipped_hashes),await(0,cH.asyncSetTimeout)(tie),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%eie===0&&await u();return l.length>0&&await u(),s?sH(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,zg.default)(t,"hashes");if(r)throw r;return nH(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of nH(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Qb[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.search_attribute!==void 0&&(t.attribute=t.search_attribute),t.search_value!==void 0&&(t.value=t.search_value);let n=(0,zg.default)(t,"value");if(n)throw n;let s=ro(t);if(!s)throw new hi.ClientError(`Table ${t.table} not found`);let i=t.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===T_.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.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:ww(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=ro(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){ro({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return ro(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=ro(t),n={};switch(t.search_type){case y_.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let o=i.operation??i.type;return o==="put"&&(o="upsert"),{operation:o,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case y_.USERNAME:{let s=t.search_values;for await(let i of iH(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return iH(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(ww,"getSelect");a(nH,"getRecords");a(ro,"getTable");a(sH,"createDeleteResponse");a(iH,"groupRecordsInHistory")});var fs=v((Eve,fH)=>{"use strict";var{ResourceBridge:rie}=(dH(),M(uH)),nie=ae();nie.initSync();var jg;function sie(){return jg||(jg=new rie,jg)}a(sie,"getBridge");fH.exports=sie()});var Ei=v((gve,hH)=>{var iie=eo(),{promisify:oie}=require("util"),{getDatabases:pH}=(we(),M(mt));hH.exports={setSchemaDataToGlobal:mH,getTableSchema:aie,getSystemSchema:cie,setSchemaDataToGlobalAsync:oie(mH)};function mH(e){global.hdb_schema=pH(),e&&e()}a(mH,"setSchemaDataToGlobal");function aie(e,t,r){let n=pH()[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(aie,"getTableSchema");function cie(){return iie}a(cie,"getSystemSchema")});var _n=v((Tve,SH)=>{"use strict";var Jg=II(),nn=oe(),lie=require("util"),Xg=fs(),uie=Ei(),EH=J(),{handleHDBError:Nl,hdbErrors:die}=_e(),{HTTP_STATUS_CODES:Cl}=die,fie=lie.promisify(uie.getTableSchema),mie="updated",_H="inserted",gH="upserted";SH.exports={insert:hie,update:Eie,upsert:_ie,validation:pie,flush:gie};async function pie(e){if(nn.isEmpty(e))throw new Error("invalid update parameters defined.");if(nn.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(nn.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await fie(e.schema,e.table),r=Jg(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&&nn.isEmptyOrZeroLength(c[n]))throw EH.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(!nn.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw EH.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!nn.isEmpty(c[n])&&c[n]!==""&&s.has(nn.autoCast(c[n]))&&(c.skip=!0),s.add(nn.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(pie,"validation");async function hie(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Jg(e);if(t)throw Nl(new Error,t.message,Cl.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw Nl(new Error,r,Cl.BAD_REQUEST);let n=await Xg.createRecords(e);return Qg(_H,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(hie,"insertData");async function Eie(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Jg(e);if(t)throw Nl(new Error,t.message,Cl.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw Nl(new Error,r,Cl.BAD_REQUEST);let n=await Xg.updateRecords(e);return nn.isEmpty(n.existing_rows)?Qg(mie,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Qg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Eie,"updateData");async function _ie(e){if(e.operation!=="upsert")throw Nl(new Error,"invalid operation, must be upsert",Cl.INTERNAL_SERVER_ERROR);let t=Jg(e);if(t)throw Nl(new Error,t.message,Cl.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw Nl(new Error,r,Cl.BAD_REQUEST);let n=await Xg.upsertRecords(e);return Qg(gH,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(_ie,"upsertData");function Qg(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===_H?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===gH?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Qg,"returnObject");function gie(e){return nn.transformReq(e),Xg.flush(e.schema,e.table)}a(gie,"flush")});var Ow=v((Rve,RH)=>{var Sie=ot(),Cw=require("joi"),{hdbTable:Tie,hdbDatabase:TH}=Xi(),yH={schema:TH,database:TH,table:Tie},yie={date:Cw.date().iso().required()},Rie={timestamp:Cw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};RH.exports=function(e,t){let r=t==="timestamp"?{...yH,...Rie}:{...yH,...yie},n=Cw.object(r);return Sie.validateBySchema(e,n)}});var IH=v((bve,AH)=>{var bie=ot(),Pw=require("joi"),{hdbTable:Aie,hdbDatabase:bH}=Xi(),Iie=Pw.object({schema:bH,database:bH,table:Aie,hash_values:Pw.array().required(),ids:Pw.array()});AH.exports=function(e){return bie.validateBySchema(e,Iie)}});var vw=v((Ave,wH)=>{"use strict";var Lw=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}},Dw=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.attribute=n,this.hash_attribute=s,this.get_attributes=i,this.value=o}},Mw=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};wH.exports={InsertObject:Lw,NoSQLSeachObject:Dw,DeleteResponseObject:Mw}});var rc=v((wve,LH)=>{"use strict";var CH=Ow(),wie=IH(),Ol=oe(),NH=require("moment"),OH=J(),{promisify:Nie,callbackify:Cie}=require("util"),Pl=(H(),M(W)),Oie=Ei(),Uw=Nie(Oie.getTableSchema),xw=fs(),{DeleteResponseObject:Pie}=vw(),{handleHDBError:ec,hdbErrors:Lie}=_e(),{HDB_ERROR_MSGS:Zg,HTTP_STATUS_CODES:tc}=Lie,Die="records successfully deleted",Mie=Cie(PH);LH.exports={delete:Mie,deleteRecord:PH,deleteFilesBefore:vie,deleteAuditLogsBefore:Uie};async function vie(e){let t=CH(e,"date");if(t)throw ec(t,t.message,tc.BAD_REQUEST,void 0,void 0,!0);if(Ol.transformReq(e),!NH(e.date,NH.ISO_8601).isValid())throw ec(new Error,Zg.INVALID_DATE,tc.BAD_REQUEST,Pl.LOG_LEVELS.ERROR,Zg.INVALID_DATE,!0);let n=Ol.checkSchemaTableExist(e.schema,e.table);if(n)throw ec(new Error,n,tc.NOT_FOUND,Pl.LOG_LEVELS.ERROR,n,!0);let s=await xw.deleteRecordsBefore(e);if(await Uw(e.schema,e.table),OH.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(vie,"deleteFilesBefore");async function Uie(e){let t=CH(e,"timestamp");if(t)throw ec(t,t.message,tc.BAD_REQUEST,void 0,void 0,!0);if(Ol.transformReq(e),isNaN(e.timestamp))throw ec(new Error,Zg.INVALID_VALUE("Timestamp"),tc.BAD_REQUEST,Pl.LOG_LEVELS.ERROR,Zg.INVALID_VALUE("Timestamp"),!0);let r=Ol.checkSchemaTableExist(e.schema,e.table);if(r)throw ec(new Error,r,tc.NOT_FOUND,Pl.LOG_LEVELS.ERROR,r,!0);let n=await xw.deleteAuditLogsBefore(e);return await Uw(e.schema,e.table),OH.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(Uie,"deleteAuditLogsBefore");async function PH(e){e.ids&&(e.hash_values=e.ids);let t=wie(e);if(t)throw ec(t,t.message,tc.BAD_REQUEST,void 0,void 0,!0);Ol.transformReq(e);let r=Ol.checkSchemaTableExist(e.schema,e.table);if(r)throw ec(new Error,r,tc.NOT_FOUND,Pl.LOG_LEVELS.ERROR,r,!0);try{await Uw(e.schema,e.table);let n=await xw.deleteRecords(e);return Ol.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Die}`),n}catch(n){if(n.message===Pl.SEARCH_NOT_FOUND_MESSAGE){let s=new Pie;return s.message=Pl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(PH,"deleteRecord")});var qw={};ye(qw,{HASH_FUNCTION:()=>$r,hash:()=>kw,validate:()=>Hw});function Bw(e=Ip){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Ap.randomBytes(e)).map(r=>t[r%t.length]).join("")}function kw(e,t=$r[MH?.toUpperCase()]??$r.SHA256){return Fw[t](e)}function Hw(e,t,r=$r[MH?.toUpperCase()]??$r.SHA256){return e?xie[r](e,t):!1}var Ap,Ed,DH,MH,Ip,vH,$r,Fw,xie,Gw=se(()=>{Ap=b(require("node:crypto")),Ed=b(require("argon2")),DH=b(ae());H();MH=(0,DH.get)(F.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Ip=16,vH=9,$r={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};a(Bw,"generateSalt");Fw={[$r.MD5]:(e,t=void 0)=>{t=t??Bw(vH);let r=Ap.createHash($r.MD5).update(e+t).digest("hex");return t+r},[$r.SHA256]:(e,t=void 0)=>{t=t??Bw(Ip);let r=Ap.createHash($r.SHA256).update(e+t).digest("hex");return t+r},[$r.ARGON2ID]:async e=>{let t=Bw(Ip),r=await Ed.hash(e,{type:Ed.argon2id,salt:Buffer.from(t)});return t+r}},xie={[$r.MD5]:(e,t)=>{let r=e.slice(0,vH);return e===Fw[$r.MD5](t,r)},[$r.SHA256]:(e,t)=>{let r=e.slice(0,Ip);return e===Fw[$r.SHA256](t,r)},[$r.ARGON2ID]:async(e,t)=>await Ed.verify(e.slice(Ip),t)};a(kw,"hash");a(Hw,"validate")});var xH=v((Pve,UH)=>{var $w=ot(),gn={username:{presence:!0,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 Bie(e){return gn.password.presence=!0,gn.username.presence=!0,gn.role.presence=!0,gn.active.presence=!0,$w.validateObject(e,gn)}a(Bie,"addUserValidation");function Fie(e){return gn.password.presence=!1,gn.username.presence=!0,gn.role.presence=!1,gn.active.presence=!1,$w.validateObject(e,gn)}a(Fie,"alterUserValidation");function kie(e){return gn.password.presence=!1,gn.username.presence=!0,gn.role.presence=!1,gn.active.presence=!1,$w.validateObject(e,gn)}a(kie,"dropUserValidation");UH.exports={addUserValidation:Bie,alterUserValidation:Fie,dropUserValidation:kie}});var jH=v((Mve,zH)=>{"use strict";var Vw=require("recursive-iterator"),Hie=require("alasql"),Kw=require("clone"),BH=oe(),{handleHDBError:FH,hdbErrors:qie}=_e(),{HDB_ERROR_MSGS:kH,HTTP_STATUS_CODES:HH}=qie,{getDatabases:Gie}=(we(),M(mt)),$ie=["DISTINCT_ARRAY"],qH=Symbol("validateTables"),Yw=Symbol("validateTable"),Dve=Symbol("getAllColumns"),GH=Symbol("validateAllColumns"),eS=Symbol("findColumn"),$H=Symbol("validateOrderBy"),wp=Symbol("validateSegment"),Ww=Symbol("validateColumn"),VH=Symbol("setColumnsForTable"),KH=Symbol("checkColumnsForAsterisk"),YH=Symbol("validateGroupBy"),WH=Symbol("hasColumns"),zw=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[qH](),this[KH](),this[GH]()}[qH](){if(this[WH]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Yw](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Yw](t.table)})}}[WH](){let t=!1,r=new Vw(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Yw](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Gie();if(!r[t.databaseid])throw FH(new Error,kH.SCHEMA_NOT_FOUND(t.databaseid),HH.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw FH(new Error,kH.TABLE_NOT_FOUND(t.databaseid,t.tableid),HH.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Kw(s);i.table=Kw(t),this.attributes.push(i)})}[eS](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)}[KH](){let t=new Vw(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[VH](r.tableid)}[VH](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new Hie.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[GH](){this[wp](this.statement.columns,!1),this[wp](this.statement.joins,!1),this[wp](this.statement.where,!1),this[YH](this.statement.group,!1),this[wp](this.statement.order,!0)}[wp](t,r){if(!t)return;let n=new Vw(t),s=[];for(let{node:i,path:o}of n)!BH.isEmpty(i)&&!BH.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[$H](i):s.push(this[Ww](i)));return s}[YH](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&$ie.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Kw(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[eS](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[eS](n);if(!i||i.length===0)throw`unknown column '${group_column.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${group_column.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 '${group_column.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`}[$H](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[Ww](t)}[Ww](t){let r=this[eS](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]}};zH.exports=zw});var ZH=v((Uve,XH)=>{"use strict";var QH=require("lodash"),Np=require("mathjs"),Vie=require("jsonata"),JH=oe();XH.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?QH.uniqWith(e,QH.isEqual):e,"distinct_array"),searchJSON:Kie,mad:Cp.bind(null,Np.mad),mean:Cp.bind(null,Np.mean),mode:Cp.bind(null,Np.mode),prod:Cp.bind(null,Np.prod),median:Cp.bind(null,Np.median)};function Cp(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(Cp,"aggregateFunction");function Kie(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(JH.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),JH.isEmpty(this.__ala__.res[r])){let n=Vie(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(Kie,"searchJSON")});var tq=v((Bve,eq)=>{"use strict";var dr=require("moment"),jw="YYYY-MM-DDTHH:mm:ss.SSSZZ";dr.suppressDeprecationWarnings=!0;eq.exports={current_date:a(()=>dr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>dr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return dr(e).utc().format("YYYY");case"month":return dr(e).utc().format("MM");case"day":return dr(e).utc().format("DD");case"hour":return dr(e).utc().format("HH");case"minute":return dr(e).utc().format("mm");case"second":return dr(e).utc().format("ss");case"millisecond":return dr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>dr(e).utc().format(jw),"date"),date_format:a((e,t)=>dr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>dr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>dr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=dr(e).utc(),s=dr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>dr().utc().valueOf(),"now"),get_server_time:a(()=>dr().format(jw),"get_server_time"),offset_utc:a((e,t)=>dr(e).utc().utcOffset(t).format(jw),"offset_utc")}});var iq=v((kve,sq)=>{"use strict";var Yie=require("@turf/area"),Wie=require("@turf/length"),zie=require("@turf/circle"),jie=require("@turf/difference"),Qie=require("@turf/distance"),Jie=require("@turf/boolean-contains"),Xie=require("@turf/boolean-equal"),Zie=require("@turf/boolean-disjoint"),eoe=require("@turf/helpers"),rq=(H(),M(W)),Ze=oe(),Jo=J();sq.exports={geoArea:toe,geoLength:roe,geoCircle:noe,geoDifference:soe,geoDistance:nq,geoNear:ioe,geoContains:ooe,geoEqual:aoe,geoCrosses:coe,geoConvert:loe};function toe(e){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return Yie.default(e)}catch(t){return Jo.trace(t,e),NaN}}a(toe,"geoArea");function roe(e,t){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return Wie.default(e,{units:t||"kilometers"})}catch(r){return Jo.trace(r,e),NaN}}a(roe,"geoLength");function noe(e,t,r){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return zie.default(e,t,{units:r||"kilometers"})}catch(n){return Jo.trace(n,e,t),NaN}}a(noe,"geoCircle");function soe(e,t){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return jie(e,t)}catch(r){return Jo.trace(r,e,t),NaN}}a(soe,"geoDifference");function nq(e,t,r){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return Qie.default(e,t,{units:r||"kilometers"})}catch(n){return Jo.trace(n,e,t),NaN}}a(nq,"geoDistance");function ioe(e,t,r,n){if(Ze.isEmpty(e)||Ze.isEmpty(t))return!1;if(Ze.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return nq(e,t,n)<=r}catch(s){return Jo.trace(s,e,t),!1}}a(ioe,"geoNear");function ooe(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return Jie.default(e,t)}catch(r){return Jo.trace(r,e,t),!1}}a(ooe,"geoContains");function aoe(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return Xie.default(e,t)}catch(r){return Jo.trace(r,e,t),!1}}a(aoe,"geoEqual");function coe(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return!Zie.default(e,t)}catch(r){return Jo.trace(r,e,t),!1}}a(coe,"geoCrosses");function loe(e,t,r){if(Ze.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ze.isEmpty(t))throw new Error("geo_type is required");if(Ze.isEmpty(rq.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(rq.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ze.autoCastJSON(e)),eoe[t](e,r)}a(loe,"geoConvert")});var tS=v((qve,oq)=>{var Ll=ZH(),ms=tq(),no=iq();oq.exports=e=>{e.aggr.mad=e.aggr.MAD=Ll.mad,e.aggr.mean=e.aggr.MEAN=Ll.mean,e.aggr.mode=e.aggr.MODE=Ll.mode,e.aggr.prod=e.aggr.PROD=Ll.prod,e.aggr.median=e.aggr.MEDIAN=Ll.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ll.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ll.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ms.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ms.current_time,e.fn.extract=e.fn.EXTRACT=ms.extract,e.fn.date=e.fn.DATE=ms.date,e.fn.date_format=e.fn.DATE_FORMAT=ms.date_format,e.fn.date_add=e.fn.DATE_ADD=ms.date_add,e.fn.date_sub=e.fn.DATE_SUB=ms.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ms.date_diff,e.fn.now=e.fn.NOW=ms.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ms.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ms.get_server_time,e.fn.getdate=e.fn.GETDATE=ms.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ms.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=no.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=no.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=no.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=no.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=no.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=no.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=no.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=no.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=no.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=no.geoNear}});var uq=v((Gve,lq)=>{"use strict";var Op=require("lodash"),Kn=require("alasql");Kn.options.cache=!1;var uoe=tS(),aq=require("clone"),rS=require("recursive-iterator"),Ke=J(),it=oe(),_d=fs(),doe=(H(),M(W)),{hdbErrors:foe}=_e(),{getDatabases:cq}=(we(),M(mt)),moe="IS NULL",_i="There was a problem performing this search. Please check the logs and try again.";uoe(Kn);var Qw=class{static{a(this,"SQLSearch")}constructor(t,r){if(it.isEmpty(t))throw Ke.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(),it.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!it.isEmptyOrZeroLength(n))return Ke.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ke.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ke.error(n),new Error(_i)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ke.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ke.error(n),new Error(_i)}if(Object.keys(this.data).length===0)return Ke.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ke.error("Error thrown from processJoins in SQLSearch class method search."),Ke.error(n),new Error(_i)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ke.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ke.error(n),new Error(_i)}try{return t=await this._finalSQL(),t}catch(n){throw Ke.error("Error thrown from finalSQL in SQLSearch class method search."),Ke.error(n),new Error(_i)}}_getColumns(){let t=new rS(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(aq(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Op.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].__hashName=cq()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(it.isEmpty(this.statement.where)){Ke.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new rS(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!it.isEmpty(r)&&r.right)if(it.isNotEmptyAndHasValue(r.right.value)){let n=it.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Kn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=it.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Kn.yy.LogicValue({value:i}):n instanceof Kn.yy.StringValue&&it.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Kn.yy.NumValue({value:i}))});if(t){Ke.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new rS(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(!it.isEmpty(doe.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(it.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(it.isEmptyOrZeroLength(r.left.columnid)||it.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,value:r.right.value})}continue}if(it.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"=":!it.isEmpty(r.right.value)||!it.isEmpty(r.left.value)?n.add(it.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[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(it.isEmptyOrZeroLength(this.all_table_attributes)&&it.isEmptyOrZeroLength(this.statement.from)&&it.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&&Op.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(it.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);it.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(it.isEmptyOrZeroLength(this.all_table_attributes)&&!it.isEmptyOrZeroLength(this.columns.columns))return t;if(it.isEmptyOrZeroLength(this.all_table_attributes)&&it.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Kn.promise(r)}catch(r){throw Ke.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ke.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(aq(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__mergedAttributes.push(r),this.data[t].__mergedAttrMap[r]=this.data[t].__mergedAttributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__mergedData[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__mergedAttrMap[n];this.data[t].__mergedData[r].splice(i,1,s)}async _getFetchAttributeValues(){if(it.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(moe)>-1&&this.tables.forEach(s=>{let i={columnid:cq()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Op.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].__hashName;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].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!it.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!it.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await _d.getDataByHash(c);for(let f of c.hash_values)d.get(f)&&!this.data[i].__mergedData[f]&&(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f))}catch(d){throw Ke.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ke.error(d),new Error(_i)}else try{c.attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.value=d;let m=await _d.getDataByValue(f);for(let[p,h]of m)this.data[i].__mergedData[p]?this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]):(this.data[i].__mergedData[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,p))}))}catch(d){throw Ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ke.error(d),new Error(_i)}else if(!it.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!it.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let p=d[f];c.attribute=p.attribute,c.value=p.value;let h=await _d.getDataByValue(c,p.operation);if(l)for(let[E]of h)this.data[i].__mergedData[E]||(this.data[i].__mergedData[E]=[...n[i]],this._setMergedHashAttribute(i,E));else for(let[E,g]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw Ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ke.error(d),new Error(_i)}else try{c.attribute=s.attribute,c.value="*";let d=await _d.getDataByValue(c);if(l)for(let[f]of d)this.data[i].__mergedData[f]||(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f));else for(let[f,m]of d)this.data[i].__mergedData[f]?this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]):(this.data[i].__mergedData[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,f))}catch(d){throw Ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ke.error(d),new Error(_i)}}}_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 Kn.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 Kn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Kn.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 Kn.yy.FuncValue:new Kn.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}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(p=>{p.joinmode&&p.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(p.table);let h=p.joinmode+" JOIN ? AS "+(p.as?p.as:p.table.tableid);p.on&&(h+=" ON "+p.on.toString()),i.push(h),t.push(Object.values(this.data[`${p.table.databaseid_orig}_${p.table.as?p.table.as_orig:p.table.tableid_orig}`].__mergedData))});let o=[],c={};s.forEach(p=>{let h=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__hashName,E=p.as?p.as_orig:p.tableid_orig;o.push({key:`'${E}.${h}'`,schema:p.databaseid_orig,table:p.as?p.as_orig:p.tableid_orig,keys:new Set}),r.push(`${p.as?p.as:p.tableid}.\`${h}\` AS "${E}.${h}"`),c[p.as?p.as_orig:p.tableid_orig]=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(p=>{p.is_func?r.push(p.initial_select_column.toString()):p.initial_select_column.tableid?r.push(`${p.initial_select_column.tableid}.${p.initial_select_column.columnid} AS ${p.expression.columnid}`):r.push(`${p.initial_select_column.columnid} AS ${p.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let p=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,h=this._convertColumnsToIndexes(p,s);m=await Kn.promise(h,t),t=null}catch(p){throw Ke.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ke.error(p),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let p=0,h=m.length;p<h;p++){let E=m[p];o.forEach(g=>{E[g.key]!==null&&E[g.key]!==void 0&&g.keys.add(E[g.key])})}o.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=Op.difference(h,[...p.keys].map(g=>g.toString()));for(let g=0,R=E.length;g<R;g++){let S=E[g];delete this.data[`${p.schema}_${p.table}`].__mergedData[S]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new rS(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=Op.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 Ke.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ke.error(i),new Error(_i)}}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].__mergedData,o=[];for(let d in i)o.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await _d.getDataByHash(c),u=s.columns.length;for(let d=0,f=o.length;d<f;d++){let m=o[d],p=l.get(m);for(let h=0;h<u;h++){let E=s.columns[h],g=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(g)}}}}catch(r){throw Ke.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ke.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}`].__mergedData)),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}`].__mergedData)),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,l=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===l}).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();Ke.trace(`Final SQL: ${s}`),n=await Kn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ke.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ke.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ke.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 Ke.error(foe.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ke.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].__mergedAttributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,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.attribute=n.attribute,i.value="*";let o=await _d.getDataByValue(i);for(let[c,l]of o)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ke.error("There was an error when processing this SQL operation. Check your logs"),Ke.error(o),new Error(_i)}}return Object.values(Object.values(this.data)[0].__mergedData)}};lq.exports=Qw});var Sn=v((Vve,dq)=>{"use strict";dq.exports={searchByConditions:poe,searchByHash:hoe,searchByValue:Eoe,search:_oe};var Jw=fs(),{transformReq:Xw}=oe();async function poe(e){return Xw(e),Jw.searchByConditions(e)}a(poe,"searchByConditions");async function hoe(e){Xw(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Jw.searchByHash(e))r&&t.push(r);return t}a(hoe,"searchByHash");async function Eoe(e){Xw(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Jw.searchByValue(e))t.push(r);return t}a(Eoe,"searchByValue");function _oe(e,t){try{let r=jH(),n=uq(),s=new r(e);s.validate(),new n(s.statement,s.attributes).search().then(o=>{t(null,o)}).catch(o=>{t(o,null)})}catch(r){return t(r)}}a(_oe,"search")});var so=v((Yve,hq)=>{"use strict";var Pp=require("crypto"),goe=ae(),{CONFIG_PARAMS:Soe}=(H(),M(W)),mq="aes-256-cbc",Toe=32,yoe=16,Zw=64,pq=32,Roe=Zw+pq,fq=new Map;hq.exports={encrypt:boe,decrypt:Aoe,createNatsTableStreamName:Ioe};function boe(e){let t=Pp.randomBytes(Toe),r=Pp.randomBytes(yoe),n=Pp.createCipheriv(mq,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(boe,"encrypt");function Aoe(e){let t=e.substr(0,Zw),r=e.substr(Zw,pq),n=e.substr(Roe,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Pp.createDecipheriv(mq,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Aoe,"decrypt");function Ioe(e,t){let r=goe.get(Soe.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=fq.get(r);return n||(n=Pp.createHash("md5").update(r).digest("hex"),fq.set(r,n)),n}a(Ioe,"createNatsTableStreamName")});var pt=v((jve,_q)=>{"use strict";var{platform:zve}=require("os"),woe="nats-server.zip",eN="nats-server",Noe=process.platform==="win32"?`${eN}.exe`:eN,Coe=/^[^\s.,*>]+$/,Eq="__request__",Ooe=a(e=>`${e}.${Eq}`,"REQUEST_SUBJECT"),Poe={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Loe={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Doe={HUB:"hub.pid",LEAF:"leaf.pid"},Moe={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},voe={SUCCESS:"success",ERROR:"error"},Uoe={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},xoe={TXN:"txn",MSGID:"msgid"},gd={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Boe={[gd.ERR]:1,[gd.WRN]:2,[gd.INF]:3,[gd.DBG]:4,[gd.TRC]:5},Foe={debug:"-D",trace:"-DVV"};_q.exports={NATS_SERVER_ZIP:woe,NATS_SERVER_NAME:eN,NATS_BINARY_NAME:Noe,PID_FILES:Doe,NATS_CONFIG_FILES:Loe,SERVER_SUFFIX:Moe,NATS_TERM_CONSTRAINTS_RX:Coe,REQUEST_SUFFIX:Eq,UPDATE_REMOTE_RESPONSE_STATUSES:voe,CLUSTER_STATUS_STATUSES:Uoe,REQUEST_SUBJECT:Ooe,SUBJECT_PREFIXES:xoe,MSG_HEADERS:Poe,LOG_LEVELS:gd,LOG_LEVEL_FLAGS:Foe,LOG_LEVEL_HIERARCHY:Boe}});var tN=v(Tn=>{"use strict";var koe={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
|
|
12
12
|
`),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
|
|
13
13
|
`)},Hoe="certificate.pem",qoe="privateKey.pem",Goe="caCertificate.pem",$oe="natsCertificate.pem",Voe="natsCaCertificate.pem",Ot={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},Koe={tls_certificate:Ot.SERVER,tlsCertificateAuthority:Ot.CA,customFunctions_tls_certificate:Ot.SERVER,customFunctionsTlsCertificateAuthority:Ot.CA,operationsApi_tls_certificate:Ot["OPERATIONS-API"],operationsApiTlsCertificateAuthority:Ot["OPERATIONS-CA"]},Yoe={[Ot.SERVER]:2,[Ot.DEFAULT]:1},Woe={[Ot["OPERATIONS-API"]]:3,[Ot.SERVER]:2,[Ot.DEFAULT]:1},zoe={[Ot["OPERATIONS-API"]]:3,[Ot.SERVER]:2,[Ot.DEFAULT]:1},joe={[Ot["OPERATIONS-CA"]]:3,[Ot.CA]:2,[Ot["DEFAULT-CA"]]:1},Qoe={[Ot["OPERATIONS-CA"]]:3,[Ot.CA]:2,[Ot["DEFAULT-CA"]]:1},Joe={[Ot.CA]:2,[Ot["DEFAULT-CA"]]:1};Tn.CERTIFICATE_PEM_NAME=Hoe;Tn.PRIVATEKEY_PEM_NAME=qoe;Tn.CA_PEM_NAME=Goe;Tn.CERT_NAME=Ot;Tn.CERT_CONFIG_NAME_MAP=Koe;Tn.CERT_PREFERENCE_APP=Yoe;Tn.CERT_PREFERENCE_OPS=Woe;Tn.CERT_PREFERENCE_REP=zoe;Tn.CA_CERT_PREFERENCE_REP=joe;Tn.CA_CERT_PREFERENCE_OPS=Qoe;Tn.CA_CERT_PREFERENCE_APP=Joe;Tn.CERTIFICATE_VALUES=koe;Tn.NATS_CERTIFICATE_PEM_NAME=$oe;Tn.NATS_CA_PEM_NAME=Voe});var nN=v((Zve,bq)=>{"use strict";var yq=require("fs-extra"),Se=require("joi"),Xoe=require("os"),{boolean:We,string:gt,number:fr,array:nc}=Se.types(),{totalmem:gq}=require("os"),Dl=require("path"),Zoe=J(),rN=oe(),Xve=tN(),Sq=(H(),M(W)),eae=ot(),Tq="log",tae="components",rae="Invalid logging.rotation.maxSize unit. Available units are G, M or K",nae="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",sae="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",iae="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",oae="rootPath config parameter is undefined",Yn=Se.alternatives([fr.min(0),gt]).optional().empty(null),nS=Se.alternatives([nc.items(gt,{host:gt.required(),port:Yn},{hostname:gt.required(),port:Yn}).empty(null),nc.items(gt)]),io,Rq=!1;bq.exports={configValidator:aae,routesValidator:mae,routeConstraints:nS};function aae(e,t=!1){if(Rq=t,io=e.rootPath,rN.isEmpty(io))throw oae;let r=We.optional(),n=fr.min(0).max(1e3).empty(null).default(fae),s=gt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Lp),i=gt.optional().empty(null),o=gt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Se.string().empty(null).default(Lp),l=Se.custom(lae).empty(null).default(Lp),u=e.clustering?.enabled,d=Se.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=Se.object({enabled:r,hubServer:Se.object({cluster:Se.object({name:Se.required().empty(null),network:Se.object({port:Yn,routes:nS}).required()}).required(),leafNodes:Se.object({network:Se.object({port:Yn}).required()}).required(),network:Se.object({port:Yn}).required()}).required(),leafServer:Se.object({network:Se.object({port:Yn,routes:nS}).required(),streams:Se.object({maxAge:fr.min(120).allow(null).optional(),maxBytes:fr.min(1).allow(null).optional(),maxMsgs:fr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Se.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:We.optional(),databaseLevel:We.optional(),tls:Se.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:We.required(),verify:We.optional()}),user:gt.optional().empty(null)}).optional():f=Se.object({enabled:r,tls:Se.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:We.optional()})}).optional(),Se.object({authentication:Se.alternatives(Se.object({authorizeLocal:We,cacheTTL:fr.required(),cookie:Se.object({domains:nc.items(gt).optional(),expires:gt.optional()}),enableSessions:We,hashFunction:gt.valid("md5","sha256","argon2id").optional().empty(null)}),We).optional(),analytics:Se.object({aggregatePeriod:fr,replicate:We.optional()}),replication:Se.object({hostname:Se.alternatives(gt,fr).optional().empty(null),url:gt.optional().empty(null),port:Yn,securePort:Yn,routes:nc.optional().empty(null),databases:Se.alternatives(gt,nc),enableRootCAs:We.optional(),copyTablesToCatchUp:We.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:Se.object({enabled:r}).required(),logging:Se.object({auditAuthEvents:Se.object({logFailed:We,logSuccessful:We}),file:We.required(),level:Se.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Se.object({enabled:We.optional(),compress:We.optional(),interval:gt.custom(dae).optional().empty(null),maxSize:gt.custom(uae).optional().empty(null),path:gt.optional().empty(null).default(Lp)}).required(),root:s,stdStreams:We.required(),auditLog:We.required()}).required(),operationsApi:Se.object({network:Se.object({cors:We.optional(),corsAccessList:nc.optional(),headersTimeout:fr.min(1).optional(),keepAliveTimeout:fr.min(1).optional(),port:Yn,domainSocket:Se.optional().empty("hdb/operations-server").default(Lp),securePort:Yn,timeout:fr.min(1).optional()}).optional(),tls:Se.alternatives([Se.array().items(d),d])}).required(),rootPath:gt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Se.object({network:Se.object({port:Yn,securePort:Yn,mtls:Se.alternatives([We.optional(),Se.object({user:gt.optional(),certificateAuthority:i,required:We.optional()})])}).required(),webSocket:We.optional(),requireAuthentication:We.optional()}),http:Se.object({compressionThreshold:fr.optional(),cors:We.optional(),corsAccessList:nc.optional(),headersTimeout:fr.min(1).optional(),port:Yn,securePort:Yn,maxHeaderSize:fr.optional(),mtls:Se.alternatives([We.optional(),Se.object({user:gt.optional(),certificateAuthority:i,required:We.optional()})]),threadRange:Se.alternatives([nc.optional(),gt.optional()])}).required(),threads:Se.alternatives(n.optional(),Se.object({count:n.optional(),debug:Se.alternatives(We.optional(),Se.object({startingPort:fr.min(1).optional(),host:gt.optional(),waitForDebugger:We.optional()})),maxHeapMemory:fr.min(0).optional()})),storage:Se.object({writeAsync:We.required(),overlappingSync:We.optional(),caching:We.optional(),compression:Se.alternatives([We.optional(),Se.object({dictionary:gt.optional(),threshold:fr.optional()})]),compactOnStart:We.optional(),compactOnStartKeepBackup:We.optional(),noReadAhead:We.optional(),path:l,prefetchWrites:We.optional(),maxFreeSpaceToLoad:fr.optional(),maxFreeSpaceToRetain:fr.optional()}).required(),ignoreScripts:We.optional(),tls:Se.alternatives([Se.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(aae,"configValidator");function cae(e){return Rq||yq.existsSync(e)?null:`Specified path ${e} does not exist.`}a(cae,"doesPathExist");function lae(e,t){Se.assert(e,gt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=cae(e);if(r)return t.message(r)}a(lae,"validatePath");function uae(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(rae);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(sae):e}a(uae,"validateRotationMaxSize");function dae(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(nae);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(iae):e}a(dae,"validateRotationInterval");function fae(e,t){let r=t.state.path.join("."),n=Xoe.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||gq();return i=Math.round(Math.min(i,gq())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),Zoe.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(fae,"setDefaultThreads");function Lp(e,t){let r=t.state.path.join(".");if(!rN.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(rN.isEmpty(io))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Dl.join(io,tae);case"logging.root":return Dl.join(io,Tq);case"clustering.leafServer.streams.path":return Dl.join(io,"clustering","leaf");case"storage.path":let n=Dl.join(io,Sq.LEGACY_DATABASES_DIR_NAME);return yq.existsSync(n)?n:Dl.join(io,Sq.DATABASES_DIR_NAME);case"logging.rotation.path":return Dl.join(io,Tq);case"operationsApi.network.domainSocket":return r==null?null:Dl.join(io,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Lp,"setDefaultRoot");function mae(e){let t=Se.object({routes:nS});return eae.validateBySchema({routes:e},t)}a(mae,"routesValidator")});var St=v(sr=>{"use strict";var Hs=(H(),M(W)),Cr=oe(),mr=J(),{configValidator:pae,routesValidator:Aq}=nN(),yn=require("fs-extra"),wq=require("yaml"),hs=require("path"),hae=require("is-number"),Nq=require("properties-reader"),Eae=require("lodash"),{handleHDBError:_ae}=_e(),{HTTP_STATUS_CODES:gae,HDB_ERROR_MSGS:Sd}=Jr(),{server:Sae}=(Hr(),M(Im)),{PACKAGE_ROOT:Cq}=Rt(),{DATABASES_PARAM_CONFIG:Dp,CONFIG_PARAMS:ps,CONFIG_PARAM_MAP:gi}=Hs,Tae="Unable to get config value because config is uninitialized",yae="Config successfully initialized",Rae="Error backing up config file",bae="Empty parameter sent to getConfigValue",Oq=hs.join(Cq,"config","yaml",Hs.HDB_DEFAULT_CONFIG_FILE),Aae=hs.join(Cq,"config","yaml","defaultNatsConfig.yaml"),Iae="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Iq={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"},sS,Ft,iS;sr.createConfigFile=wae;sr.getDefaultConfig=Nae;sr.getConfigValue=Lq;sr.initConfig=oS;sr.flattenConfig=Td;sr.updateConfigValue=Dq;sr.updateConfigObject=Oae;sr.getConfiguration=Dae;sr.setConfiguration=Mae;sr.readConfigFile=aN;sr.getClusteringRoutes=vae;sr.initOldConfig=Mq;sr.getConfigFromFile=Uae;sr.getConfigFilePath=Ml;sr.addConfig=xae;sr.deleteConfigFromFile=Bae;sr.getConfigObj=Fae;sr.resolvePath=sN;sr.getFlatConfigObj=kae;function sN(e){if(e?.startsWith("~/"))return hs.join(Cr.getHomeDir(),e.slice(1));let t=ae();try{return hs.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}a(sN,"resolvePath");function wae(e,t=!1){let r=sc(Oq);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=wq.parseDocument(yn.readFileSync(Aae,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}sS=Td(r.toJSON());let n;for(let c in e){let l=gi[c.toLowerCase()];if(l===ps.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),d=iN(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{u.length>1&&typeof r.getIn(u.slice(0,-1))=="boolean"&&r.deleteIn(u.slice(0,-1)),r.setIn([...u],d)}catch(f){mr.error(f)}}}n&&Pq(r,n),oN(r,t);let s=r.toJSON();Ft=Td(s);let i=r.getIn(["rootPath"]),o=hs.join(i,Hs.HDB_CONFIG_FILE);if(yn.createFileSync(o),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);yn.writeFileSync(o,String(r)),mr.trace(`Config file written to ${o}`)}a(wae,"createConfigFile");function Pq(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Cr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Dp.TABLES))for(let i in n[s][Dp.TABLES])for(let o in n[s][Dp.TABLES][i]){let c=n[s][Dp.TABLES][i][o],l=[ps.DATABASES,s,Dp.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[ps.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){mr.error("Error parsing schemas CLI/env config arguments",n)}}a(Pq,"setSchemasConfig");function Nae(e){if(sS===void 0){let r=sc(Oq);sS=Td(r.toJSON())}let t=gi[e.toLowerCase()];if(t!==void 0)return sS[t.toLowerCase()]}a(Nae,"getDefaultConfig");function Lq(e){if(e==null){mr.info(bae);return}if(Ft===void 0){mr.trace(Tae);return}let t=gi[e.toLowerCase()];if(t!==void 0)return Ft[t.toLowerCase()]}a(Lq,"getConfigValue");function Ml(e=Cr.getPropsFilePath()){let t=Cr.getEnvCliRootPath();if(t)return sN(hs.join(t,Hs.HDB_CONFIG_FILE));let r=Nq(e);return sN(r.get(Hs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(Ml,"getConfigFilePath");function oS(e=!1){if(Ft===void 0||e){let t;if(!Cr.noBootFile()){t=Cr.getPropsFilePath();try{yn.accessSync(t,yn.constants.F_OK|yn.constants.R_OK)}catch(i){throw mr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Ml(t),n;if(r.includes("config/settings.js"))try{Mq(r);return}catch(i){if(i.code!==Hs.NODE_ERROR_CODES.ENOENT)throw i}try{n=sc(r)}catch(i){if(i.code===Hs.NODE_ERROR_CODES.ENOENT){mr.trace(`HarperDB config file not found at ${r}.
|
|
14
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw mr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Cae(n,r),oN(n);let s=n.toJSON();if(Sae.config=s,Ft=Td(s),Ft.logging_rotation_rotate)for(let i in Iq)Ft[i]&&mr.error(`Config ${Iq[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);mr.trace(yae)}}a(oS,"initConfig");function Cae(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],hs.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],hs.join(r,"log")),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,replicate:!1}),n=!0),n){if(mr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);yn.writeFileSync(t,String(e))}}a(Cae,"checkForUpdatedConfig");function oN(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw Sd.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw Sd.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=pae(r,t);if(n.error)throw Sd.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(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(oN,"validateConfig");function Oae(e,t){Ft===void 0&&(Ft={});let r=gi[e.toLowerCase()];if(r===void 0){mr.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ft[r.toLowerCase()]=t}a(Oae,"updateConfigObject");function Dq(e,t,r=void 0,n=!1,s=!1,i=!1){Ft===void 0&&oS();let o=Lq(gi.hdb_root),c=hs.join(o,Hs.HDB_CONFIG_FILE),l=sc(c),u;if(r&&Ft){let m=!1;for(let p in r)if(r[p]!=Ft[p.toLowerCase()]){m=!0;break}if(!m){mr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===ps.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=gi[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=iN(m,t);l.setIn([...p],h)}else for(let m in r){let p=gi[m.toLowerCase()];if(p===ps.HTTP_SECUREPORT&&r[m]===Ft[ps.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===ps.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===Ft[ps.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===ps.DATABASES){u=r[m];continue}if(p?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!p&&(m.endsWith("_package")||m.endsWith("_port"))&&(p=m),p!==void 0){let h=p.split("_"),E=Hs.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let g=iN(p,r[m]);p==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],g)}catch(R){mr.error(R)}}}u&&Pq(l,u),oN(l);let d=l.getIn(["rootPath"]),f=hs.join(d,Hs.HDB_CONFIG_FILE);if(n===!0&&Pae(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);yn.writeFileSync(f,String(l)),s&&(Ft=Td(l.toJSON())),mr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Dq,"updateConfigValue");function Pae(e,t){try{let r=hs.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${Hs.HDB_CONFIG_FILE}.bak`);yn.copySync(e,r),mr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){mr.error(Rae),mr.error(r)}}a(Pae,"backupConfigFile");var Lae=["databases"];function Td(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),iS=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])&&!Lae.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!ps[l.toUpperCase()]&&gi[l]&&(s[gi[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Td,"flattenConfig");function iN(e,t){if(e===ps.CLUSTERING_NODENAME||e===ps.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(hae(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Cr.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 Cr.autoCast(t)}a(iN,"castConfigValue");function Dae(){let e=Cr.getPropsFilePath(),t=Ml(e);return sc(t).toJSON()}a(Dae,"getConfiguration");async function Mae(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return Dq(void 0,void 0,s,!0),Iae}catch(i){throw typeof i=="string"||i instanceof String?_ae(i,i,gae.BAD_REQUEST,void 0,void 0,!0):i}}a(Mae,"setConfiguration");function aN(){let e=Cr.getPropsFilePath();try{yn.accessSync(e,yn.constants.F_OK|yn.constants.R_OK)}catch(n){if(!Cr.noBootFile())throw mr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Ml(e);return sc(t).toJSON()}a(aN,"readConfigFile");function sc(e){return wq.parseDocument(yn.readFileSync(e,"utf8"),{simpleKeys:!0})}a(sc,"parseYamlDoc");function vae(){let e=aN(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Cr.isEmptyOrZeroLength(t)?[]:t;let r=Aq(t);if(r)throw Sd.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Cr.isEmptyOrZeroLength(n)?[]:n;let s=Aq(n);if(s)throw Sd.CONFIG_VALIDATION(s.message);if(!Cr.isEmptyOrZeroLength(n)&&!Cr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Cr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Sd.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(vae,"getClusteringRoutes");function Mq(e){let t=Nq(e);Ft={};for(let r in gi){let n=t.get(r.toUpperCase());if(Cr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=gi[r].toLowerCase();s===ps.LOGGING_ROOT?Ft[s]=hs.dirname(n):Ft[s]=n}return Ft}a(Mq,"initOldConfig");function Uae(e){let t=aN();return Eae.get(t,e.replaceAll("_","."))}a(Uae,"getConfigFromFile");async function xae(e,t){let r=sc(Ml());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await yn.writeFile(Ml(),String(r))}a(xae,"addConfig");function Bae(e){let t=Ml(Cr.getPropsFilePath()),r=sc(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=hs.join(n,Hs.HDB_CONFIG_FILE);yn.writeFileSync(s,String(r))}a(Bae,"deleteConfigFromFile");function Fae(){return iS||(oS(),iS)}a(Fae,"getConfigObj");function kae(){return Ft||oS(),Ft}a(kae,"getFlatConfigObj")});var Es=v((nUe,Vr)=>{"use strict";var xq="username is required",Bq="nothing to update, must supply active, role or password to update",Fq="password cannot be an empty string",kq="If role is specified, it cannot be empty.",Hq="active must be true or false";Vr.exports.addUser=zae;Vr.exports.alterUser=jae;Vr.exports.dropUser=Jae;Vr.exports.getSuperUser=rce;Vr.exports.userInfo=Xae;Vr.exports.listUsers=lS;Vr.exports.listUsersExternal=Zae;Vr.exports.setUsersWithRolesCache=vl;Vr.exports.findAndValidateUser=hN;Vr.exports.getClusterUser=nce;Vr.exports.getUsersWithRolesCache=tce;Vr.exports.USERNAME_REQUIRED=xq;Vr.exports.ALTERUSER_NOTHING_TO_UPDATE=Bq;Vr.exports.EMPTY_PASSWORD=Fq;Vr.exports.EMPTY_ROLE=kq;Vr.exports.ACTIVE_BOOLEAN=Hq;var qq=_n(),Hae=rc(),Mp=(Gw(),M(qw)),Gq=xH(),vp=Sn(),dN=zo(),oo=oe(),$q=require("validate.js"),fN=J(),{promisify:qae}=require("util"),mN=so(),lN=(H(),M(W)),vq=pt(),Gae=St(),$ae=ae(),Vae=eo(),{hdbErrors:Kae,ClientError:Si}=_e(),{HTTP_STATUS_CODES:Xo,AUTHENTICATION_ERROR_MSGS:cN,HDB_ERROR_MSGS:yd}=Kae,{UserEventMsg:pN}=ls(),uN=require("lodash"),{server:cS}=(Hr(),M(Im)),Yae=J();cS.getUser=(e,t)=>hN(e,t,t!=null);cS.authenticateUser=(e,t)=>hN(e,t);var Vq={username:!0,active:!0,role:!0,password:!0},Uq=new Map,Wae=qae(Hae.delete),aS=$ae.get(lN.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??Mp.HASH_FUNCTION.SHA256,ao;async function zae(e){let t=$q.cleanAttributes(e,Vq),r=Gq.addUserValidation(t);if(r)throw new Si(r.message);let n=await vp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new Si(yd.ROLE_NAME_NOT_FOUND(t.role),Xo.NOT_FOUND);if(n.length>1)throw new Si(yd.DUP_ROLES_FOUND(t.role),Xo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=mN.encrypt(t.password)),t.password=await Mp.hash(t.password,aS),t.hash_function=aS,t.role=n[0].id;let s=await qq.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(fN.debug(s),await vl(),s.skipped_hashes.length===1)throw new Si(yd.USER_ALREADY_EXISTS(t.username),Xo.CONFLICT);return dN.signalUserChange(new pN(process.pid)),`${t.username} successfully added`}a(zae,"addUser");async function jae(e){let t=$q.cleanAttributes(e,Vq);if(oo.isEmptyOrZeroLength(t.username))throw new Error(xq);if(oo.isEmptyOrZeroLength(t.password)&&oo.isEmptyOrZeroLength(t.role)&&oo.isEmptyOrZeroLength(t.active))throw new Error(Bq);if(!oo.isEmpty(t.password)&&oo.isEmptyOrZeroLength(t.password.trim()))throw new Error(Fq);if(!oo.isEmpty(t.active)&&!oo.isBoolean(t.active))throw new Error(Hq);if(!oo.isEmpty(t.password)&&!oo.isEmptyOrZeroLength(t.password.trim())&&(Qae(t.username)&&(t.hash=mN.encrypt(t.password)),t.password=await Mp.hash(t.password,aS),t.hash_function=aS),t.role==="")throw new Error(kq);if(t.role){let n=await vp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Si(yd.ALTER_USER_ROLE_NOT_FOUND(t.role),Xo.NOT_FOUND);if(n.length>1)throw new Si(yd.DUP_ROLES_FOUND(t.role),Xo.CONFLICT);t.role=n[0].id}let r=await qq.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await vl(),dN.signalUserChange(new pN(process.pid)),r}a(jae,"alterUser");function Qae(e){let t=!1,r=ao.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(Qae,"isClusterUser");async function Jae(e){let t=Gq.dropUserValidation(e);if(t)throw new Si(t.message);if(ao.get(e.username)===void 0)throw new Si(yd.USER_NOT_EXIST(e.username),Xo.NOT_FOUND);let r=await Wae({table:"hdb_user",schema:"system",hash_values:[e.username]});return fN.debug(r),await vl(),dN.signalUserChange(new pN(process.pid)),`${e.username} successfully deleted`}a(Jae,"dropUser");async function Xae(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=uN.cloneDeep(e.hdb_user);let r=await vp.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}a(Xae,"userInfo");async function Zae(){let e=await lS();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a(Zae,"listUsersExternal");async function lS(){let e=await vp.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=uN.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await vp.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=uN.cloneDeep(s),s.role=t[s.role],ece(s.role),n.set(s.username,s);return n}a(lS,"listUsers");function ece(e){if(!e){fN.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(Vae)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(ece,"appendSystemTablesToRole");async function vl(e=void 0){e?ao=e:ao=await lS()}a(vl,"setUsersWithRolesCache");async function tce(){return ao||await vl(),ao}a(tce,"getUsersWithRolesCache");async function hN(e,t,r=!0){ao||await vl();let n=ao.get(e);if(!n){if(!r)return{username:e};throw new Si(cN.GENERIC_AUTH_FAIL,Xo.UNAUTHORIZED)}if(n&&!n.active)throw new Si(cN.USER_INACTIVE,Xo.UNAUTHORIZED);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(Uq.get(t)===n.password)return s;{let i=Mp.validate(n.password,t,n.hash_function||Mp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)Uq.set(t,n.password);else throw new Si(cN.GENERIC_AUTH_FAIL,Xo.UNAUTHORIZED)}}return s}a(hN,"findAndValidateUser");async function rce(){ao||await vl();for(let[,e]of ao)if(e.role.role==="super_user")return e}a(rce,"getSuperUser");async function nce(){let e=await lS(),t=Gae.getConfigFromFile(lN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==lN.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=mN.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+vq.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+vq.SERVER_SUFFIX.ADMIN,r}a(nce,"getClusterUser");var Kq=[];cS.invalidateUser=function(e){for(let t of Kq)try{t(e)}catch(r){Yae.error("Error invalidating user",r)}};cS.onInvalidatedUser=function(e){Kq.push(e)}});var Ne,Rd=ne(()=>{Ne={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var bd,EN=ne(()=>{Rd();bd=class{static{a(this,"ComponentStatus")}lastChecked;status;message;error;constructor(t,r,n){this.lastChecked=new Date,this.status=t,this.message=r,this.error=n}updateStatus(t,r){this.status=t,this.message=r,this.lastChecked=new Date,t!==Ne.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(Ne.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=Ne.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(Ne.WARNING,t)}markLoading(t){this.updateStatus(Ne.LOADING,t||"Component is loading")}isHealthy(){return this.status===Ne.HEALTHY}hasError(){return this.status===Ne.ERROR}isLoading(){return this.status===Ne.LOADING}hasWarning(){return this.status===Ne.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var Ul,ic,_N,Ad,gN,Id,SN,uS=ne(()=>{Ul=b(Jr()),ic=class extends Error{static{a(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=Ul.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},_N=class extends ic{static{a(this,"CrossThreadTimeoutError")}requestId;timeoutMs;collectedCount;constructor(t,r,n){super(`Component status collection timeout after ${r}ms. Collected ${n} responses for request ${t}.`,Ul.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},Ad=class extends ic{static{a(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,Ul.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},gN=class extends ic{static{a(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,Ul.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},Id=class extends ic{static{a(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,Ul.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},SN=class extends ic{static{a(this,"CrossThreadCollectionError")}result;constructor(t){let r=t.success?`Partial collection success: ${t.collectedFromThreads} threads responded`+(t.timedOutThreads.length>0?`, ${t.timedOutThreads.length} timed out`:""):`Collection failed: ${t.errors.map(n=>n.message).join(", ")}`;super(r,Ul.HTTP_STATUS_CODES.OK),this.name="CrossThreadCollectionError",this.result=t}getDiagnostics(){let t=[`Cross-thread collection ${this.result.success?"partially succeeded":"failed"}`,`Threads responded: ${this.result.collectedFromThreads}`];return this.result.expectedThreads&&t.push(`Expected threads: ${this.result.expectedThreads}`),this.result.timedOutThreads.length>0&&t.push(`Timed out threads: ${this.result.timedOutThreads.join(", ")}`),this.result.errors.length>0&&(t.push("Errors:"),this.result.errors.forEach((r,n)=>{t.push(` ${n+1}. ${r.name}: ${r.message}`)})),t.join(`
|
|
15
|
-
`)}}});var Yq,xl,Wq,oc,Up,wd,sce,dS,TN=ne(()=>{Yq=b(ls()),xl=b(tt());H();Wq=b(wr());Rd();uS();oc=(0,Wq.loggerWithTag)("componentStatus.crossThread"),Up=class{static{a(this,"CrossThreadStatusCollector")}awaitingResponses=new Map;responseCheckers=new Map;nextRequestId=1;listenerAttached=!1;timeout;cleanupTimer=null;constructor(t=5e3){this.timeout=t}attachListener(){this.listenerAttached||((0,xl.onMessageByType)(R_.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;oc.trace?.("Received component status response from %s, with requestId: %d",r,t.requestId);let n=this.awaitingResponses.get(t.requestId);if(n){n.push({workerIndex:t.workerIndex,isMainThread:t.isMainThread||!1,statuses:t.statuses||[]});let s=this.responseCheckers.get(t.requestId);s&&s()}}),this.listenerAttached=!0)}scheduleCleanup(){this.cleanupTimer&&clearTimeout(this.cleanupTimer),this.awaitingResponses.size>0&&(this.cleanupTimer=setTimeout(()=>{this.awaitingResponses.size>0&&(oc.debug?.(`Cleaning up ${this.awaitingResponses.size} stale pending requests`),this.awaitingResponses.clear()),this.cleanupTimer=null},3e4))}async collect(t){try{this.attachListener(),this.scheduleCleanup();let r=this.nextRequestId++,n=[];this.awaitingResponses.set(r,n);let o=((0,xl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,g=a(()=>{let y=this.awaitingResponses.get(r);y&&y.length>=o&&!E&&(E=!0,S(),oc.trace?.(`Collected all ${y.length} expected responses for request ${r}`),p(y))},"checkComplete"),R=setTimeout(()=>{if(!E){E=!0;let y=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),oc.debug?.(`Collection timeout for request ${r}: collected ${y.length}/${o} responses`),p(y)}},this.timeout),S=a(()=>{this.awaitingResponses.delete(r),clearTimeout(R)},"cleanup");this.responseCheckers.set(r,g),(0,Yq.sendItcEvent)({type:R_.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{g()}).catch(y=>{E=!0,S(),this.responseCheckers.delete(r),h(new Ad("sendItcEvent",y))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,xl.getWorkerIndex)(),m=f===void 0?"main":`worker-${f}`;for(let[p,h]of d)u.set(`${p}@${m}`,{...h,workerIndex:f});for(let p of l)for(let[h,E]of p.statuses){let g=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${g}`,{...E,workerIndex:p.workerIndex})}return oc.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof Ad?oc.error?.(`ITC failure during component status collection: ${r.message}`):oc.warn?.("Failed to collect component status from all threads:",r),oc.debug?.(`Collection failed for request. Error: ${r instanceof Error?r.message:"Unknown error"}`),this.getLocalStatusOnly(t)}}getLocalStatusOnly(t){let r=t.getAllStatuses(),n=new Map,s=(0,xl.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[o,c]of r)n.set(`${o}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},wd=class{static{a(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let o=s.indexOf("@"),c=o!==-1?s.substring(0,o):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let o=this.aggregateComponentGroup(s,i);r.set(s,o)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,o,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",g=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=g;else if(E&&E.startsWith("worker-")){let R=parseInt(E.substring(7));isNaN(R)||(n.workers[R]=g)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==Ne.HEALTHY&&p.message&&(!i||g>s)&&(s=g,i=p.message),p.error&&!o&&(o=p.error)}let u=this.determineOverallStatus(c);if(Array.from(c.keys()).length>1)for(let[m,p]of r)p.status!==u&&l.set(m,{workerIndex:p.workerIndex!==void 0?p.workerIndex:-1,status:p.status,message:p.message,error:p.error});let f={componentName:t,status:u,lastChecked:n,latestMessage:i,error:o};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[Ne.ERROR,Ne.WARNING,Ne.LOADING,Ne.UNKNOWN,Ne.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Ne.UNKNOWN}},sce=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),dS=new Up(sce)});var ac,fS=ne(()=>{EN();Rd();TN();uS();ac=class e{static{a(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new Id(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Ne).includes(r))throw new Id(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Ne).join(", ")}`);this.statusMap.set(t,new bd(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,Ne.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,Ne.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,Ne.WARNING,r)}initializeLoading(t,r){this.setStatus(t,Ne.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,Ne.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,Ne.ERROR,n,r)}getComponentsByStatus(t){let r=[];for(let[n,s]of this.statusMap)s.status===t&&r.push({name:n,status:s});return r}getStatusSummary(){let t={[Ne.HEALTHY]:0,[Ne.ERROR]:0,[Ne.WARNING]:0,[Ne.LOADING]:0,[Ne.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await dS.collect(t);return wd.aggregate(r)}async getAggregatedStatusFor(t,r){r||(r=await e.getAggregatedFromAllThreads(this));let n=[],s=t+".",i=r.get(t);i&&n.push({key:t,...i});for(let[f,m]of r)f.startsWith(s)&&n.push({key:f,...m});if(n.length===0)return{status:Ne.UNKNOWN,message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}};let o=n.some(f=>f.status===Ne.ERROR),c=n.some(f=>f.status===Ne.LOADING),l=o?Ne.ERROR:c?Ne.LOADING:Ne.HEALTHY,u="All components loaded successfully",d={};if(o||c){u=n.filter(m=>m.status===Ne.ERROR||m.status===Ne.LOADING).map(m=>`${m.key}: ${m.latestMessage||m.status}`).join("; ");for(let m of n)m.status!==Ne.HEALTHY&&(d[m.key]={status:m.status,message:m.latestMessage})}return{status:l,message:u,...Object.keys(d).length>0&&{details:d},lastChecked:n[0]?.lastChecked||{workers:{}}}}}});var pr,mS=ne(()=>{fS();pr=new ac});function jq(e){let t=zq.get(e);return t||(t=new yN(e),zq.set(e,t)),t}function Qq(){pr.reset()}var yN,zq,co,Jq,Xq=ne(()=>{mS();Rd();yN=class{static{a(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return pr.setStatus(this.componentName,Ne.HEALTHY,t),this}warning(t){return pr.setStatus(this.componentName,Ne.WARNING,t),this}error(t,r){return pr.setStatus(this.componentName,Ne.ERROR,t,r),this}loading(t){return pr.setStatus(this.componentName,Ne.LOADING,t||"Loading..."),this}unknown(t){return pr.setStatus(this.componentName,Ne.UNKNOWN,t),this}get(){return pr.getStatus(this.componentName)}},zq=new Map;a(jq,"statusForComponent");co={loading(e,t){pr.initializeLoading(e,t)},loaded(e,t){pr.markLoaded(e,t)},failed(e,t,r){pr.markFailed(e,t,r)}};a(Qq,"reset");Jq=Ne});var xp={};ye(xp,{AggregationError:()=>gN,COMPONENT_STATUS_LEVELS:()=>Ne,ComponentStatus:()=>bd,ComponentStatusError:()=>ic,ComponentStatusOperationError:()=>Id,ComponentStatusRegistry:()=>ac,CrossThreadCollectionError:()=>SN,CrossThreadStatusCollector:()=>Up,CrossThreadTimeoutError:()=>_N,ITCError:()=>Ad,StatusAggregator:()=>wd,componentStatusRegistry:()=>pr,crossThreadCollector:()=>dS,query:()=>ice});var ice,Zq=ne(()=>{mS();fS();EN();fS();TN();mS();uS();Rd();ice={get(e){return pr.getStatus(e)},all(){return pr.getAllStatuses()},byStatus(e){return pr.getComponentsByStatus(e)},summary(){return pr.getStatusSummary()},async allThreads(){return ac.getAggregatedFromAllThreads(pr)}}});var RN={};ye(RN,{STATUS:()=>Jq,internal:()=>xp,lifecycle:()=>co,reset:()=>Qq,statusForComponent:()=>jq});var Bp=ne(()=>{Xq();Zq()});var kp=v((BUe,rG)=>{"use strict";var _s=J(),Rn=(H(),M(W)),oce=yB(),ace=Es(),{validateEvent:bN}=ls(),Fp=fs(),cce=require("process"),{resetDatabases:lce}=(we(),M(mt)),uce={[Rn.ITC_EVENT_TYPES.SCHEMA]:dce,[Rn.ITC_EVENT_TYPES.USER]:tG,[Rn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:mce};async function dce(e){let t=bN(e);if(t){_s.error(t);return}_s.trace("ITC schemaHandler received schema event:",e),await oce(e.message),await fce(e.message)}a(dce,"schemaHandler");async function fce(e){try{Fp.resetReadTxn(Rn.SYSTEM_SCHEMA_NAME,Rn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Fp.resetReadTxn(Rn.SYSTEM_SCHEMA_NAME,Rn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Fp.resetReadTxn(Rn.SYSTEM_SCHEMA_NAME,Rn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=lce();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){_s.error(t)}}a(fce,"syncSchemaMetadata");var eG=[];async function tG(e){try{try{Fp.resetReadTxn(Rn.SYSTEM_SCHEMA_NAME,Rn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Fp.resetReadTxn(Rn.SYSTEM_SCHEMA_NAME,Rn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){_s.warn(r)}let t=bN(e);if(t){_s.error(t);return}_s.trace(`ITC userHandler ${Rn.HDB_ITC_CLIENT_PREFIX}${cce.pid} received user event:`,e),await ace.setUsersWithRolesCache();for(let r of eG)r()}catch(t){_s.error(t)}}a(tG,"userHandler");tG.addListener=function(e){eG.push(e)};async function mce(e){try{let t=bN(e);if(t){_s.error(t);return}_s.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Bp(),M(RN)),{getWorkerIndex:n}=tt(),{sendItcEvent:s}=ls(),i=r.componentStatusRegistry.getAllStatuses(),o=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:Rn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:o,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?_s.trace(`Sent component status response directly to thread ${u}`):(u===void 0?_s.debug("No originator threadId, falling back to broadcast"):_s.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){_s.error("Error handling component status request:",t)}}a(mce,"componentStatusRequestHandler");rG.exports=uce});var ls=v(($Ue,sG)=>{"use strict";var kUe=J(),AN=oe(),pce=(H(),M(W)),{ITC_ERRORS:Hp}=Jr(),{parentPort:HUe,threadId:hce,isMainThread:Ece,workerData:qUe}=require("worker_threads"),{onMessageFromWorkers:_ce,broadcast:GUe,broadcastWithAcknowledgement:gce}=tt();sG.exports={sendItcEvent:Sce,validateEvent:nG,SchemaEventMsg:Tce,UserEventMsg:yce};var pS;_ce(async(e,t)=>{pS=pS||kp(),nG(e),pS[e.type]&&await pS[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Sce(e){return!Ece&&e.message&&(e.message.originator=hce),gce(e)}a(Sce,"sendItcEvent");function nG(e){if(typeof e!="object")return Hp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||AN.isEmpty(e.type))return Hp.MISSING_TYPE;if(!e.hasOwnProperty("message")||AN.isEmpty(e.message))return Hp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||AN.isEmpty(e.message.originator))return Hp.MISSING_ORIGIN;if(pce.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Hp.INVALID_EVENT(e.type)}a(nG,"validateEvent");function Tce(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(Tce,"SchemaEventMsg");function yce(e){this.originator=e}a(yce,"UserEventMsg")});var zo=v((YUe,cG)=>{"use strict";var iG=(H(),M(W)),KUe=oe(),hS=J(),oG=nB(),Nd,{sendItcEvent:aG}=ls();function Rce(e){try{hS.debug("signalSchemaChange called with message:",e),Nd=Nd||kp();let t=new oG(iG.ITC_EVENT_TYPES.SCHEMA,e);return Nd.schema(t),aG(t)}catch(t){hS.error(t)}}a(Rce,"signalSchemaChange");function bce(e){try{hS.trace("signalUserChange called with message:",e),Nd=Nd||kp();let t=new oG(iG.ITC_EVENT_TYPES.USER,e);return Nd.user(t),aG(t)}catch(t){hS.error(t)}}a(bce,"signalUserChange");cG.exports={signalSchemaChange:Rce,signalUserChange:bce}});function qp(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}function lG(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new qs(e));for(let[r,n]of t)e.has(r)?r.toLowerCase()==="set-cookie"&&e.append?.(r,n,!0):e.set(r,n);return e}var qs,Gp=ne(()=>{qs=class extends Map{static{a(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}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(qp,"appendHeader");a(lG,"mergeHeaders")});function ES(e,t,r=Ice){let n;return function(...i){return n?n.length*IN>r?t(...i):new Promise((o,c)=>{n.push({args:i,fn(){try{let l=e(...i);o(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,o){setImmediate(()=>{let c=performance.now();IN=(IN*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var fG,Ace,Ice,uG,wce,wN,dG,IN,NN=ne(()=>{fG=b(wr()),Ace=3e3,Ice=2e4,uG=0,wce=3e4,wN=3e3,dG=performance.now()+wN,IN=0;a(ES,"throttle");setInterval(()=>{let e=performance.now();e-dG-wN>Ace&&uG+wce<e&&(fG.default.warn?.("JavaScript execution has taken too long and is not allowing proper event queue cycling, consider using 'await new Promise(setImmediate)' in code that will execute for a long duration"),uG=e),dG=e},wN).unref()});var bG={};ye(bG,{EVICTED:()=>hl,INVALIDATED:()=>kn,coerceType:()=>gS,makeTable:()=>TS});function TS(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:g,trackDeletes:R}=e;E??=0;let{attributes:S}=e;S||(S=[]);let y=nI(i,n,l),N,I,$={},ee=Promise.resolve(),q,k,j;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(q=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(k=K),K.expiresAt&&(j=K),K.isPrimaryKey&&($=K);let Y,le=[],fe=[],te=1,ge=2,be={},Ye={},Ge=864e5,Ar=0,tr,Qr,xr,Ou=!1,jc,Ut,oi,Ua=Fl.get(F.REPLICATION_DATABASES);if(Array.isArray(Ua)){for(let K of Ua)if(K.name===c&&K.replicateTo>=0){oi=K.replicateTo;break}}let c_=i.getRange({start:!1,end:!1}).constructor,mm=10,l_=6;g&&gm(),Km(i.env.path,K=>{if(I)return Ba(K)});class pm extends Il{static{a(this,"Updatable")}getUpdatedTime(){return Wa.get(this.getRecord())?.version}getExpiresAt(){return Wa.get(this.getRecord())?.expiresAt}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.set(_,new Rp(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(_,T){return this.addTo(_,-T)}}class Me extends ur{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=o;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=q;static updatedTimeProperty=k;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(_,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)_.intermediateSource=!0,this.sources.unshift(_);else{if(this.sources.some(D=>!D.intermediateSource)){if(this.sources.some(D=>D.name===_.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(_)}I=I||_.get&&(!_.get.reliesOnPrototype||_.prototype.get),N=N||_.load;let C=a(D=>{let A=this.sources;if(A=A.filter(U=>U.intermediateSource&&U[D]&&(!U[D].reliesOnPrototype||U.prototype[D])),A.length>0)if(A.length===1){let U=A[0];return(w,L,G)=>{if(w?.source!==U)return U[D](L,G,w)}}else return(U,w,L)=>{let G=[];for(let z of A){if(U?.source===z)break;G.push(z[D](w,L,U))}return Promise.all(G)}},"getApplyToIntermediateSource"),P=this.sources[this.sources.length-1];P.intermediateSource&&(P={});let O=a(D=>{if(P[D]&&(!P[D].reliesOnPrototype||P.prototype[D]))return(A,U,w)=>{if(!A?.source)return P[D](U,w,A)}},"getApplyToCanonicalSource");be={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},Ye={put:C("put"),patch:C("patch"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")};let x=P.shouldRevalidateEvents;return(async()=>{let D=!1,A,U=a(async(w,L)=>{let G=w.value,z=w.table?ve[c][w.table]:Me;if(c===Rm&&(w.table===Uu.ROLE_TABLE_NAME||w.table===Uu.USER_TABLE_NAME)&&(D=!0),w.id===void 0&&(w.id=G[z.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));w.source=_;let Q={residencyId:Qc(w.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:w.nodeId,async:!0},B=w.id,Ee=await z.getResource(B,L,Q);switch(w.finished&&await w.finished,w.type){case"put":return x?Ee._writeInvalidate(B,G,Q):Ee._writeUpdate(B,G,!0,Q);case"patch":return x?Ee._writeInvalidate(B,G,Q):Ee._writeUpdate(B,G,!1,Q);case"delete":return Ee._writeDelete(B,Q);case"publish":case"message":return Ee._writePublish(B,G,Q);case"invalidate":return Ee._writeInvalidate(B,G,Q);case"relocate":return Ee._writeRelocate(B,Q);default:ke.default.error?.("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=_.subscribe;w&&R==null&&(R=!0);let L={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},G=_.subscribeOnThisThread?_.subscribeOnThisThread((0,Bl.getWorkerIndex)(),L):(0,Bl.getWorkerIndex)()===0,z=w&&G&&await _.subscribe?.(L);if(z){let Q;for await(let B of z)try{if(!(B.type==="transaction"?B.writes[0]:B)){ke.default.error?.("Bad subscription event",B);continue}if(B.source=_,B.type==="end_txn"){Q?.resolve();let pe;if(B.localTime&&A!==B.localTime&&B.remoteNodeIds?.length>0&&(pe=a(()=>{let se=[Symbol.for("seq"),B.remoteNodeIds[0]],ie=d.get(se),Oe=ie?.nodes;Oe||(Oe=[]);for(let ce of B.remoteNodeIds.slice(1)){let xe=Oe.find(Ce=>Ce.id===ce);Oe=Oe.filter(Ce=>Ce.id!==ce||Ce===xe),xe||(xe={id:ce,seqId:0},Oe.push(xe)),xe.seqId=Math.max(ie?.seqId??1,B.localTime),ce===Q?.nodeId&&(xe.lastTxnTime=B.timestamp)}let ue=Math.max(ie?.seqId??1,B.localTime);ke.default.trace?.("Received txn",c,ue,new Date(ue),B.localTime,new Date(B.localTime),B.remoteNodeIds),d.put(se,{seqId:ue,nodes:Oe})},"updateRecordedSequenceId"),A=B.localTime),B.onCommit){let se=Q?Q.committed.then(B.onCommit):B.onCommit();pe&&(se?.then?se.then(pe):pe())}else pe&&pe();continue}if(Q)if(B.beginTxn)Q.resolve();else{Q.writePromises.push(U(B,Q));continue}!B.timestamp&&B.version&&(B.timestamp=B.version);let me=At(B,()=>{if(B.type==="transaction"){let pe=[];for(let se of B.writes)try{pe.push(U(se,B))}catch(ie){throw ie.message+=" writing "+JSON.stringify(se)+" of event "+JSON.stringify(B),ie}return Promise.all(pe)}else if(B.type==="define_schema"){let pe=this.attributes.slice(0),se=!1;for(let ie of B.attributes)pe.find(Oe=>Oe.name===ie.name)||(pe.push(ie),se=!0);se&&(Xe({table:s,database:c,attributes:pe,origin:"cluster"}),Vp.signalSchemaChange(new Kp.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return B.beginTxn?(Q=B,Q.writePromises=[U(B,B)],new Promise(pe=>{Q.resolve=()=>pe(Promise.all(Q.writePromises))})):U(B,B)});Q&&(Q.committed=me),D&&me&&!me?.waitingForUserChange&&(me.then(()=>Vp.signalUserChange(new Kp.UserEventMsg(process.pid))),me.waitingForUserChange=!0),B.onCommit&&(me?me.then(B.onCommit):B.onCommit())}catch(Ee){ke.default.error?.("error in subscription handler",Ee)}}}catch(w){ke.default.error?.(w)}})(),this}static get isCaching(){return I}static get shouldRevalidateEvents(){return this.prototype.get!==Me.prototype.get}static getResource(_,T,C){let P=super.getResource(_,T,C);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),_!=null&&this.loadAsInstance!==!1){Gi(_);try{if(P.getRecord?.())return P;if(typeof _=="object"&&_&&!Array.isArray(_))throw new Error(`Invalid id ${JSON.stringify(_)}`);let O=!C?.async||i.cache?.get?.(_),x=Br(T),D=x.getReadTxn();if(D?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Do(_,T,{transaction:D,ensureLoaded:C?.ensureLoaded},O,A=>{if(A?Me._updateResource(P,A):P.#e=null,T.onlyIfCached){if(!P.doesExist())throw new dt.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let U=pn(_,A,T,P);if(U)return x?.disregardReadTxn(),P.#i=!0,T.loadedFromSource=!0,Gs(U,w=>(Me._updateResource(P,w),P))}return P})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(_)),O}}return P}static _updateResource(_,T){_.#n=T,_.#e=T?.value??null,_.#r=T?.version}ensureLoaded(){let _=pn(this.getId(),this.#n,this.getContext());if(_)return this.#i=!0,this.getContext().loadedFromSource=!0,Gs(_,T=>{this.#n=T,this.#e=T.value,this.#r=T.version})}static getNewId(){let _=$?.type;if(_==="String"||_==="ID")return super.getNewId();if(!Ut){let O=i.getEntry(Symbol.for("id_allocation")),x=O?.value,D;if(x&&x.nodeName===server.hostname&&(!Fce(i)||x.pid===process.pid)){let A=x.start,U=x.end;D=A;for(let w of i.getKeys({start:U,end:A,limit:1,reverse:!0}))D=w}else x=P(O?.version??null),D=x.start;Ut=new BigInt64Array([BigInt(D)+1n]),Ut=new BigInt64Array(i.getUserSharedBuffer("id",Ut.buffer)),Ut.maxSafeId=x.end}let T=Number(Atomics.add(Ut,0,1n)),C=_==="Int"?512:1048576;if(T+C>=Ut.maxSafeId){let O=a(x=>{Ut.maxSafeId=T+(_==="Int"?1023:4194303);let D=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,A=x?void 0:i.useReadTransaction(),U=Number(Ut[0]);for(let G of i.getKeys({start:U+1,end:D,limit:1,transaction:A}))D=G;A?.done();let{value:w,version:L}=i.getEntry(Symbol.for("id_allocation"));if(Ut.maxSafeId<D){if(w.end>Ut.maxSafeId-100)return;ke.default.info?.("New id allocation",T,Ut.maxSafeId,L),i.put(Symbol.for("id_allocation"),{start:w.start,end:Ut.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),L)}else{ke.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Ut.maxSafeId}, but id of ${D} detected`);let G=P(L);G.alreadyUpdated||Atomics.store(Ut,0,BigInt(G.start+1)),Ut.maxSafeId=G.end}},"updateEnd");T+C===Ut.maxSafeId?setImmediate(O):T+100>=Ut.maxSafeId&&(ke.default.warn?.(`Synchronous id allocation required on table ${s}${_=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>O(!0)))}return T;function P(O){let x=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,D=x/4,A,U,w=!1,L,G;do{L=Math.floor(Math.random()*x),G={start:L,end:L+(_==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},A=0;for(let z of i.getKeys({start:L,limit:1,reverse:!0}))A=z;U=x;for(let z of i.getKeys({start:L+1,end:x,limit:1}))U=z;D*=.875,D<1e3&&!w&&(w=!0,ke.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${_==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,L,A,U,D))}while(!(D<U-L&&(D<L-A||A===0)));return i.transactionSync(()=>{let z=i.getEntry(Symbol.for("id_allocation"));return(z?.version??null)==O?(ke.default.info?.("Allocated new id range",G),i.put(Symbol.for("id_allocation"),G,Date.now()),G):(ke.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...z.value})})}}static setTTLExpiration(_){if(typeof _=="number")h=_*1e3,E||(E=0);else if(_&&typeof _=="object")h=_.expiration*1e3,E=(_.eviction||0)*1e3,Ge=_.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");Ge=Ge||(h+E)/4,Ba()}static getResidencyRecord(_){return d.get([Symbol.for("residency_by_id"),_])}static setResidency(_){Me.getResidency=_&&((T,C)=>{try{return _(T,C)}catch(P){throw P.message+=` in residency function for table ${s}`,P}})}static setResidencyById(_){Me.getResidencyById=_&&(T=>{try{return _(T)}catch(C){throw C.message+=` in residency function for table ${s}`,C}})}static getResidency(_,T){if(Me.getResidencyById)return Me.getResidencyById(_[t]);let C=oi;if(T.replicateTo!=null){if(Array.isArray(T.replicateTo))return T.replicateTo.includes(server.hostname)?T.replicateTo:[server.hostname,...T.replicateTo];T.replicateTo>=0&&(C=T.replicateTo)}if(C>=0&&server.nodes){let P=[server.hostname];if(T.previousResidency)P.push(...T.previousResidency.slice(0,C));else{let O=server.nodes.map(A=>A.name),x=Math.floor(O.length*Math.random());P.push(...O.slice(x,x+C));let D=x+C-O.length;D>0&&P.push(...O.slice(0,D))}return P}}static enableAuditing(){g||(g=!0,gm(),Me.audit=!0)}static coerceId(_){return _===""?null:gS(_,$)}static async dropTable(){delete ve[c][s];for(let _ of i.getRange({versions:!0,snapshot:!1,lazy:!0}))_.metadataFlags&Zr&&_.value&&Va(_.value);if(c===o){for(let _ of S)d.remove(Me.tableName+"/"+_.name),r[_.name]?.drop();d.remove(Me.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),ON.default.unlinkSync(i.env.path);Vp.signalSchemaChange(new Kp.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(_){let T=this.constructor;if(typeof _=="string"&&T.loadAsInstance!==!1)return this.getProperty(_);if(hm(_))return this.search(_);if(_&&_.id===void 0&&!_.toString()){let C={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Me.getRecordCount().then(P=>(C.recordCount=P.recordCount,C.estimatedRecordRange=P.estimatedRange,C)):C}if(_!==void 0&&T.loadAsInstance===!1){let C=this.getContext(),P=Br(C),O=P.getReadTxn();if(O?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let x=Ds(_);Gi(x);let D=!0;return _.checkPermission&&(D=this.allowRead(C.user,_)),Gs(Gs(D,A=>{if(!A)throw new dt.AccessViolation(C.user);let U=!0;return Do(x,C,{transaction:O,ensureLoaded:U},!1,w=>{if(C.onlyIfCached){if(!w?.value)throw new dt.ServerError("Entry is not cached",504)}else if(U){let L=pn(x,w,C);if(L)return P?.disregardReadTxn(),C.loadedFromSource=!0,L.then(G=>G?.value)}return w?.value})}),A=>{let U=_?.select;return U&&A!=null?rd(U,this.constructor)(A):A})}if(_?.property)return this.getProperty(_.property);if(this.doesExist()||_?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(_,T){let C=Mn(_,T);if(C?.read){if(C.isSuperUser)return!0;let P=C.attribute_permissions,O=T?.select;if(P?.length>0||Ou&&O){if(T||(T={}),O){let x=Array.isArray(O)?O:[O],D=P?.length>0&&CN(P,"read");T.select=x.map(A=>{let U=A.name||A;if(!D||D[U]){let w=xr[U]?.definition?.tableClass;if(w){if(A.name||(A={name:A}),!A.checkPermission&&T.checkPermission&&(A.checkPermission=T.checkPermission),!w.prototype.allowRead.call(null,_,A))return!1;if(!A.select)return A.name}return A}}).filter(Boolean)}else T.select=P.filter(x=>x.read&&!xr[x.attribute_name]).map(x=>x.attribute_name);return T}else return!0}}allowUpdate(_,T,C){let P=Mn(_,C);if(P?.update){let O=P.attribute_permissions;if(O?.length>0){let x=CN(O,"update");for(let D in T)if(!x[D])return!1;for(let D of O){let A=D.attribute_name;!D.update&&!(A in T)&&(T[A]=this.getProperty(A))}}return xa(this.getContext())}}allowCreate(_,T,C){if(this.isCollection){let P=Mn(_,C);if(P?.insert){let O=P.attribute_permissions;if(O?.length>0){let x=CN(O,"insert");for(let D in T)if(!x[D])return!1;return xa(this.getContext())}else return xa(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,T){return Mn(_,T)?.delete&&xa(this.getContext())}update(_,T){let C,P=typeof T=="boolean"||T===void 0&&(_==null||typeof _=="object"&&!(_ instanceof URLSearchParams)),O=!1;P?(O=T,T=_,C=this.getId()):C=Ds(_);let x=this.getContext();if(!Br(x))throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;if(typeof T=="object"&&T)if(O)Object.isFrozen(T)&&(T={...T}),this.#e={},this.#t=T;else if(P){let A=this.#t;A&&(T=Object.assign(A,T)),this.#t=T}else{let A=!0;if(_==null)throw new TypeError("Can not put a record without a target");return _.checkPermission&&(A=this.allowUpdate(x.user,T,_)),Gs(A,U=>{if(!U)throw new dt.AccessViolation(x.user);return Gs(i.get(Ds(_)),w=>{let L=new pm(w);return L._setChanges(T),this._writeUpdate(C,L.getChanges(),!1),L})})}return this._writeUpdate(C,this.#t,O),this}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.#s===pG?this.set(_,(+this.getProperty(_)||0)+T):(this.#s||this.update(),this.set(_,new Rp(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(_,T){if(typeof T=="number")return this.addTo(_,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(_){this.#t=_}setRecord(_){this.#e=_}invalidate(_){let T=!0,C=this.getContext();return _?.checkPermission&&(T=this.allowDelete(C.user,_,C)),Gs(T,P=>{if(!P)throw new dt.AccessViolation(C.user);this._writeInvalidate(_?Ds(_):this.getId())})}_writeInvalidate(_,T,C){let P=this.getContext();Gi(_),Br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:be.invalidate?.bind(this,P,_),beforeIntermediate:Mu(T,Ye.invalidate?.bind(this,P,_)),commit:a((x,D)=>{if(!(Fr(x,D,C?.nodeId)<=0)){T??=null;for(let A in r)T||(T={}),T[A]===void 0&&(T[A]=this.getProperty(A));ke.default.trace?.(`Invalidating entry in ${s} id: ${_}, timestamp: ${new Date(x).toISOString()}`),y(_,T,D,x,kn,g,{user:P?.user,residencyId:C?.residencyId,nodeId:C?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(_,T){let C=this.getContext();Gi(_),Br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:be.relocate?.bind(this,C,_),beforeIntermediate:Ye.relocate?.bind(this,C,_),commit:a((O,x)=>{if(Fr(O,x,T?.nodeId)<=0)return;let D=Me.getResidencyRecord(T.residencyId),A=0,U=null,w=x?.value;if(D&&!D.includes(server.hostname)){for(let L in r)U||(U={}),U[L]=w[L];A=kn}else U=w;ke.default.trace?.(`Relocating entry id: ${_}, timestamp: ${new Date(O).toISOString()}`),y(_,U,x,O,A,g,{user:C.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(_,T){let C={previousResidency:this.getResidencyRecord(_.residencyId),isRelocation:!0},P=Fa(this.getResidency(T.value,C)),O;if(P){if(!P.includes(server.hostname))return!1;O=Qc(P)}let x=0;ke.default.debug?.("Performing a relocate of an entry",_.key,T.value,P);let D=y(_.key,T.value,_,_.version,x,!0,{residencyId:O,expiresAt:T.expiresAt},"relocate",!1,null);return!0}static evict(_,T,C){let P=this.Source,O;if(!((I||g)&&(!T||(O=i.getEntry(_),!O||!T)||O.version!==C))){if(I){if(i.hasLock(_,O.version))return;let x;for(let D in r)x||(x={}),x[D]=T[D];if(x)return y(_,x,O,C,hl,null,null,null,!0)}return i.ifVersion(_,C,()=>{Pu(_,T,null)}),pl(i,O??i.getEntry(_),C)}}lock(){throw new Error("Not yet implemented")}static operation(_,T){return _.table||=s,_.schema||=c,global.operation(_,T)}put(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!0);else{let C=!0;if(_==null)throw new TypeError("Can not put a record without a target");let P=this.getContext();return _.checkPermission&&(C=this.allowUpdate(P.user,T,_)),Gs(C,O=>{if(!O)throw new dt.AccessViolation(P.user);if(Array.isArray(T))for(let x of T){let D=x[t];this._writeUpdate(D,x,!0)}else{let x=Ds(_);this._writeUpdate(x,T,!0)}})}}create(_,T){let C=!0,P=this.getContext();if(!T&&!(_ instanceof URLSearchParams)&&(T=_,_=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return _?.checkPermission&&(C=this.allowCreate(P.user,T,_)),Gs(C,O=>{if(!O)throw new dt.AccessViolation(P.user);let x=Ds(_)??T[t];if(x===void 0)x=this.constructor.getNewId();else if(i.get(x))throw new dt.ClientError("Record already exists",409);return this._writeUpdate(x,T,!0),T})}patch(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!1);else{let C=this.update(_,T);if(C?.then)return C.then(()=>{})}}_writeUpdate(_,T,C,P){let O=this.getContext(),x=Br(O);Gi(_);let D=this.#n??i.getEntry(_);this.#s=C?pG:vce;let A=a(w=>C?w.put?()=>w.put(O,_,T):null:w.patch?()=>w.patch(O,_,T):w.put?()=>w.put(O,_,wl(this)):null,"writeToSources"),U={key:_,store:i,entry:D,nodeName:O?.nodeName,validate:a(w=>{T||(T=this.#t),C||T&&Kg(this.#t===T?this:T)?O?.source||(x.checkOverloaded(),this.validate(T,!C),k&&(T[k.name]=k.type==="Date"?new Date(w):k.type==="String"?new Date(w).toISOString():w),C&&(t&&T[t]!==_&&(T[t]=_),q&&(D?.value?T[q.name]=D?.value[q.name]:T[q.name]=q.type==="Date"?new Date(w):q.type==="String"?new Date(w).toISOString():w),T=wl(T))):x.removeWrite(U)},"validate"),before:A(be),beforeIntermediate:Mu(T,A(Ye)),commit:a((w,L,G)=>{if(G){if(O&&L?.version>(O.lastModified||0)&&(O.lastModified=L.version),this.#n=L,L?.value&&L.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");C||(this.#e=L?.value??null)}this.#t=void 0,this.#r=w;let z=L?.value,Q;this.#s=0;let B=!1,Ee=Fr(w,L,P?.nodeId),me;if(Ee<=0){if(g){let ue=L.localTime,ce=L.version;ke.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(w),"applying later update from:",new Date(ce),"local recorded time",new Date(ue));let xe=[];for(;ue>w||ce>=w&&ue>0;){let Ce=l.get(ue);if(!Ce)break;let Le=It(Ce);if(ce=Le.version,ce>=w){if(ce===w){if(Ee=Fr(w,{version:ce,localTime:ue},P?.nodeId),Ee===0)return;if(Ee>0){ue=Le.previousLocalTime;continue}}if(Le.type==="patch")xe.push(Le),me=T;else if(Le.type==="put"||Le.type==="delete")return}ue=Le.previousLocalTime}ue||ke.default.debug?.("No further audit history, applying incremental updates based on available history",_,"existing version preserved",L),xe.sort((Ce,Le)=>Ce.version-Le.version);for(let Ce of xe){let Le=Ce.getValue(i);if(ke.default.debug?.("Rebuilding update with future patch:",new Date(Ce.version),Le,Ce),Q=x_(Q??T,Le,C),!Q)return}}else{if(C)return;Q=x_(Q??T,z,C),ke.default.debug?.("Rebuilding update without audit:",Q)}ke.default.trace?.("Rebuilt record to save:",Q," is full update:",C)}let pe;if(C&&!Q?pe=T:this.constructor.loadAsInstance===!1?pe=wl(z,Q??T):(this.#e=z,pe=wl(this,Q??T)),this.#e=pe,pe&&pe.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let se;if(P?.residencyId!=null)se=P.residencyId;else{D?.residencyId&&(O.previousResidency=Me.getResidencyRecord(D.residencyId));let ue=Fa(Me.getResidency(pe,O));if(ue&&!ue.includes(server.hostname))if(me??=pe,B=!0,Me.getResidencyById)pe=void 0;else{pe=null;for(let ce in r)pe||(pe={}),pe[ce]=me[ce]}se=Qc(ue)}C||(me=T);let ie=O?.expiresAt??(h?h+Date.now():-1);ke.default.trace?.(`Saving record with id: ${_}, timestamp: ${new Date(w).toISOString()}${ie?", expires at: "+new Date(ie).toISOString():""}${L?", replaces entry from: "+new Date(L.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(pe).slice(0,100)}catch{return""}})()),Pu(_,z,pe);let Oe=C?"put":"patch";y(_,pe,L,w,B?kn:0,g,{omitLocalRecord:B,user:O?.user,residencyId:se,expiresAt:ie,nodeId:P?.nodeId,originatingOperation:O?.originatingOperation,tableToTrack:c==="system"?null:s},Oe,!1,me),O.expiresAt&&Ba()},"commit")};x.addWrite(U)}async delete(_){if(hm(_)){_.select=["$id"];for await(let T of this.search(_))this._writeDelete(T.$id);return!0}if(_){let T=!0,C=this.getContext();return _.checkPermission&&(T=this.allowDelete(C.user,_,C)),Gs(T,P=>{if(!P)throw new dt.AccessViolation(C.user);let O=Ds(_);return this._writeDelete(O),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(_,T){let C=Br(this.getContext());Gi(_);let P=this.getContext();return C.addWrite({key:_,store:i,entry:this.#n,nodeName:P?.nodeName,before:be.delete?.bind(this,P,_),beforeIntermediate:Ye.delete?.bind(this,P,_),commit:a((O,x,D)=>{let A=x?.value;D&&(P&&x?.version>(P.lastModified||0)&&(P.lastModified=x.version),Me._updateResource(this,x)),!(Fr(O,x,T?.nodeId)<=0)&&(Pu(this.getId(),A),ke.default.trace?.(`Deleting record with id: ${_}, txn timestamp: ${new Date(O).toISOString()}`),g||R?(y(_,null,x,O,0,g,{user:P?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),g||Ba()):pl(i,x))},"commit")}),!0}search(_){let T=this.getContext(),C=Br(T);if(!_)throw new Error("No query provided");if(_.parseError)throw _.parseError;if(_.checkPermission&&!this.allowRead(T.user,_))throw new dt.AccessViolation(T.user);T&&(T.lastModified=Pce);let P=_.conditions;P?P.length===void 0&&(P=P[Symbol.iterator]?Array.from(P):[P]):P=Array.isArray(_)?_:_[Symbol.iterator]?Array.from(_):[];let O=_.id??this.getId();O&&(P=[{attribute:null,comparator:Array.isArray(O)?"prefix":"starts_with",value:O}].concat(P));let x,D={};function A(ie,Oe){let ue;switch(Oe){case"and":case void 0:if(ie.length<1)throw new Error('An "and" operator requires at least one condition');ue=!0;break;case"or":if(ie.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Oe)}for(let ce of ie){if(ce.conditions){ce.conditions=A(ce.conditions,ce.operator);continue}let xe=ce[0]??ce.attribute,Ce=xe==null?$:Qi(S,xe);if(Ce)(Ce.type||iI[ce.comparator])&&(ce[1]===void 0?ce.value=w(ce.value,Ce):ce[1]=w(ce[1],Ce));else if(xe!=null&&!_.allowConditionsOnDynamicAttributes)throw(0,dt.handleHDBError)(new Error,`${xe} is not a defined attribute`,404);if(ce.chainedConditions)if(ce.chainedConditions.length===1&&(!ce.operator||ce.operator=="and")){let Le=ce.chainedConditions[0],De,ht;if(Le.comparator==="gt"||Le.comparator==="greater_than"||Le.comparator==="ge"||Le.comparator==="greater_than_equal"?(De=ce,ht=Le):(De=Le,ht=ce),De.comparator!=="lt"&&De.comparator!=="less_than"&&De.comparator!=="le"&&De.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Nt=ht.comparator==="ge"||ht.comparator==="greater_than_equal",xt=De.comparator==="le"||De.comparator==="less_than_equal";ce.comparator=(Nt?"ge":"gt")+(xt?"le":"lt"),ce.value=[ht.value,De.value]}else throw new Error("Multiple chained conditions are not currently supported")}return ie}a(A,"prepareConditions");function U(ie,Oe){if(_.enforceExecutionOrder)return ie;for(let ue of ie)ue.conditions&&(ue.conditions=U(ue.conditions,ue.operator));return ie.length>1&&Oe!=="or"?Nce(ie,Tg(Me)):ie}a(U,"orderConditions");function w(ie,Oe){return Array.isArray(ie)?ie.map(ue=>gS(ue,Oe)):gS(ie,Oe)}a(w,"coerceTypedValues");let L=_.operator;(P.length>0||L)&&(P=A(P,L));let G=typeof _.sort=="object"&&_.sort,z;if(G&&L!=="or"){let ie=G.attribute;if(ie==null)throw new dt.ClientError("Sort requires an attribute");if(x=P.find(Oe=>Zu(Oe.attribute)===Zu(ie)),!x){let Oe=Qi(S,ie);if(!Oe)throw(0,dt.handleHDBError)(new Error,`${Array.isArray(ie)?ie.join("."):ie} is not a defined attribute`,404);if(Oe.indexed)x={...G,comparator:"sort"},P.push(x);else if(P.length===0&&!_.allowFullScan)throw(0,dt.handleHDBError)(new Error,`${Array.isArray(ie)?ie.join("."):ie} is not indexed and not combined with any other conditions`,404)}x&&(x.descending=!!G.descending)}P=U(P,L),G&&(x&&P[0]===x?G.next&&(z={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(x&&P.splice(P.indexOf(x),1),z=G));let Q=_.select;if(P.length===0&&(P=[{attribute:t,comparator:"greater_than",value:!0}]),_.explain)return{conditions:P,operator:L,postOrdering:z,selectApplied:!!Q};let B=C.useReadTxn(),Ee=oI(P,L,Me,B,_,T,(ie,Oe)=>_m(ie,Q,T,B,Oe),D),me=_.ensureLoaded!==!1,pe=Me.transformEntryForSelect(Q,T,B,D,me,!0),se=Me.transformToOrderedSelect(Ee,Q,z,T,B,pe);return(_.offset||_.limit!==void 0)&&(se=se.slice(_.offset,_.limit!==void 0?(_.offset||0)+_.limit:void 0)),se.onDone=()=>{se.onDone=null,C.doneReadTxn()},se.selectApplied=!0,se.getColumns=()=>{if(Q){let ie=[];for(let Oe of Q)Oe==="*"?ie.push(...S.map(ue=>ue.name)):ie.push(Oe.name||Oe);return ie}return S.filter(ie=>!ie.computed&&!ie.relationship).map(ie=>ie.name)},se}static transformToOrderedSelect(_,T,C,P,O,x){let D=new c_;if(C){_=_m(_,T,P,O,null);let A;D.iterate=function(){let w,L=_[Symbol.asyncIterator]?_[Symbol.asyncIterator]():_[Symbol.iterator](),G,z=C.dbOrderedAttribute,Q,B,Ee=!0;function me(se){let ie=se.next&&me(se.next),Oe=se.descending;return P.sort=se,(ue,ce)=>{let xe=Lu(ue,se.attribute,P),Ce=Lu(ce,se.attribute,P),Le=Oe?(0,kl.compareKeys)(Ce,xe):(0,kl.compareKeys)(xe,Ce);return Le===0?ie?.(ue,ce)||0:Le}}a(me,"createComparator");let pe=me(C);return{async next(){let se;if(w)if(se=w.next(),se.done){if(G)return D.onDone&&D.onDone(),se}else return{value:await x.call(this,se.value)};A=[],Q&&A.push(Q);do if(se=await L.next(),se.done){if(G=!0,A.length)break;return D.onDone&&D.onDone(),se}else{let ie=se.value;if(ie?.then&&(ie=await ie),z){let Oe=Lu(ie,z,P);if(Ee)Ee=!1,B=Oe;else if(Oe!==B){B=Oe,Q=ie;break}}A.push(ie)}while(!0);return C.isGrouped,A.sort(pe),w=A[Symbol.iterator](),se=w.next(),se.done?(D.onDone&&D.onDone(),se):{value:await x.call(this,se.value)}},return(){return D.onDone&&D.onDone(),L.return()},throw(){return D.onDone&&D.onDone(),L.throw()}}};let U=a(w=>{if(typeof T=="object"&&Array.isArray(w.attribute))for(let L=0;L<T.length;L++){let G=T[L],z;if(G.name===w.attribute[0]){for(z=G.sort||(G.sort={});z.next;)z=z.next;z.attribute=w.attribute.slice(1),z.descending=w.descending}else G===w.attribute[0]&&(T[L]=z={name:G,sort:{attribute:w.attribute.slice(1),descending:w.descending}})}w.next&&U(w.next)},"applySortingOnSelect");U(C)}else D.iterate=(_[Symbol.asyncIterator]||_[Symbol.iterator]).bind(_),D=D.map(function(A){try{let U=x.call(this,A);return typeof U?.catch=="function"?U.catch(w=>{throw w.partialObject={[t]:A.key},w}):U}catch(U){throw U.partialObject={[t]:A.key},U}});return D}static transformEntryForSelect(_,T,C,P,O,x){let D;O&&I&&!(typeof _=="string"?[_]:_)?.every(w=>{let L;return typeof w=="object"?L=w.name:L=w,r[L]||L===t})&&(D=!0);let A,U=a(function(w){let L;if(T?.transaction?.stale&&(T.transaction.stale=!1),w!=null){if(L=w.deref?w.deref():w.value,!L&&(w.key===void 0||w.deref)||w.metadataFlags&kn){if(w.metadataFlags&kn&&T.replicateFrom===!1&&x&&w.residencyId)return lc.SKIP;if(w=Do(w.key??w,T,{transaction:C,lazy:_?.length<4,ensureLoaded:O},this?.isSync,G=>G),w?.then)return w.then(U.bind(this));L=w?.value}if(D&&w?.metadataFlags&(kn|hl)||w?.expiresAt!=null&&w?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:w.key,message:"This entry has expired"};let G=pn(w.key??w,w,T);if(G?.then)return G.then(U)}}if(L==null)return x?lc.SKIP:L;if(_&&!(_[0]==="*"&&_.length===1)){let G,z=a((B,Ee)=>{let me;typeof B=="object"?me=B.name:me=B;let pe=xr?.[me],se;if(pe){let ie=P?.[me];if(ie)if(ie.hasMappings){let ue=pe.from?L[pe.from]:Zu(w.key);se=ie.get(ue),se||(se=[])}else se=ie.fromRecord?.(L);else se=pe(L,T,w,!0);let Oe=a(ue=>{if(pe.directReturn)return Ee(ue,me);if(ue&&typeof ue=="object"){let ce=pe.definition?.tableClass||Me;A||(A={});let xe=A[me]||(A[me]=ce.transformEntryForSelect(me===B?null:B.select||(Array.isArray(B)?B:null),T,C,ie,O));if(Array.isArray(ue)){let Ce=[],Le=ce.transformToOrderedSelect(ue,B.select,typeof B.sort=="object"&&B.sort,T,C,xe)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),De=a(Nt=>{for(;!Nt.done;){if(Nt?.then)return Nt.then(De);Ce.push(Nt.value),Nt=Le.next()}Ee(Ce,me)},"nextValue"),ht=De(Le.next());ht&&(G||(G=[]),G.push(ht));return}else if(ue=xe.call(this,ue),ue?.then){G||(G=[]),G.push(ue.then(Ce=>Ee(Ce,me)));return}}Ee(ue,me)},"handleResolvedValue");se?.then?(G||(G=[]),G.push(se.then(Oe))):Oe(se);return}else se=L[me],se&&typeof se=="object"&&me!==B&&(se=Me.transformEntryForSelect(B.select||B,T,C,null)({value:se}));Ee(se,me)},"selectAttribute"),Q;if(typeof _=="string")z(_,B=>{Q=B});else if(Array.isArray(_))if(_.asArray)Q=[],_.forEach((B,Ee)=>{B==="*"?_[Ee]=L:z(B,me=>Q[Ee]=me)});else{Q={};let B=_.forceNulls;for(let Ee of _)if(Ee==="*")for(let me in L)Q[me]=L[me];else z(Ee,(me,pe)=>{me===void 0&&B&&(me=null),Q[pe]=me})}else throw new dt.ClientError("Invalid select"+_);return G?Promise.all(G).then(()=>Q):Q}return L},"transform");return U}async subscribe(_){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||Xe({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),_||(_={});let T=!_.rawEvents,C=[],P=mI(Me,this.getId()??null,function(D,A,U,w){try{let L=A.getValue?.(i,T),G=A.type;if(!L&&G==="patch"&&T){let Q=i.getEntry(D);Q?.version===A.version?L=Q.value:L=A.getValue?.(i,!0,U),G="put"}let z={id:D,localTime:U,value:L,version:A.version,type:G,beginTxn:w};C?C.push(z):(c!=="system"&&Ve(A.size??1,"db-message",s,null),this.send(z))}catch(L){ke.default.error?.(L)}},_.startTime||0,_),O=(async()=>{this.isCollection&&(P.includeDescendants=!0,_.onlyChildren&&(P.onlyChildren=!0)),_.supportsTransactions&&(P.supportsTransactions=!0);let D=this.getId(),A=_.previousCount;A>1e3&&(A=1e3);let U=_.startTime;if(this.isCollection){if(U){if(A)throw new dt.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:w,value:L}of l.getRange({start:U,exclusiveStart:!0,snapshot:!1})){let G=It(L);if(G.tableId!==n)continue;let z=G.recordId;if(D==null||gG(D,z)){let Q=G.getValue(i,T,w);if(x({id:z,localTime:w,value:Q,version:G.version,type:G.type,size:G.size}),P.queue?.length>EG&&await P.waitForDrain()===!1)return}P.startTime=w}}else if(A){let w=[];for(let{key:L,value:G}of l.getRange({start:"z",end:!1,reverse:!0}))try{let z=It(G);if(z.tableId!==n)continue;let Q=z.recordId;if(D==null||gG(D,Q)){let B=z.getValue(i,T,L);if(w.push({id:Q,localTime:L,value:B,version:z.version,type:z.type}),--A<=0)break}}catch(z){ke.default.error("Error getting history entry",L,z)}for(let L=w.length;L>0;)x(w[--L]);w[0]&&(P.startTime=w[0].localTime)}else if(!_.omitCurrent){for(let{key:w,value:L,version:G,localTime:z,size:Q}of i.getRange({start:D??!1,end:D==null?void 0:[D,kl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(L&&(x({id:w,localTime:z,value:L,version:G,type:"put",size:Q}),P.queue?.length>EG&&await P.waitForDrain()===!1))return}}else{A&&!U&&(U=0);let w=this.#n?.localTime;if(w===rI&&(i.cache?.delete(D),this.#n=i.getEntry(D),ke.default.trace?.("re-retrieved record",w,this.#n?.localTime),w=this.#n?.localTime),ke.default.trace?.("Subscription from",U,"from",D,w),U<w){let L=[],G=w;do{let z=l.get(G);if(z){_.omitCurrent=!0;let Q=It(z),B=Q.getValue(i,T,G);T&&(Q.type="put"),L.push({id:D,value:B,localTime:G,...Q}),G=Q.previousLocalTime}else break;A&&A--}while(G>U&&A!==0);for(let z=L.length;z>0;)x(L[--z]);P.startTime=w}!_.omitCurrent&&this.doesExist()&&x({id:D,localTime:w,value:this.#e,version:this.#r,type:"put"})}for(let w of C)x(w);C=null})();function x(D){c!=="system"&&Ve(D.size??1,"db-message",s,null),P.send(D)}return a(x,"send"),_.listener&&P.on("data",_.listener),P}static subscribeOnThisThread(_,T){return _===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(_,T,C){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),_,T);else{let P=!0,O=this.getContext();return _.checkPermission&&(P=this.allowCreate(O.user,_,O)),Gs(P,x=>{if(!x)throw new dt.AccessViolation(O.user);let D=Ds(_);this._writePublish(D,T,C)})}}_writePublish(_,T,C){let P=Br(this.getContext());_??=null,_!==null&&Gi(_);let O=this.getContext();P.addWrite({key:_,store:i,entry:this.#n,nodeName:O?.nodeName,validate:a(()=>{O?.source||(P.checkOverloaded(),this.validate(T))},"validate"),before:be.publish?.bind(this,O,_,T),beforeIntermediate:Mu(T,Ye.publish?.bind(this,O,_,T)),commit:a((x,D,A)=>{D===void 0&&R&&!g&&Ba(),ke.default.trace?.(`Publishing message to id: ${_}, timestamp: ${new Date(x).toISOString()}`),y(_,D?.value??null,D,D?.version||x,0,!0,{user:O?.user,residencyId:C?.residencyId,expiresAt:O?.expiresAt,nodeId:C?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(_,T){let C,P=a((O,x,D)=>{if(x.type&&O!=null)if(T&&O.__op__&&(O=O.value),x.properties){typeof O!="object"&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be an object${x.type?" ("+x.type+")":""}`);let A=x.properties;for(let U=0,w=A.length;U<w;U++){let L=A[U];if(L.relationship||L.computed){_.hasOwnProperty(L.name)&&(C||(C=[])).push(`Computed property ${D}.${L.name} may not be directly assigned a value`);continue}let G=P(O[L.name],L,D+"."+L.name);G&&(O[L.name]=G)}if(x.sealed&&O!=null&&typeof O=="object")for(let U in O)A.find(w=>w.name===U)||(C||(C=[])).push(`Property ${U} is not allowed within object in property ${D}`)}else switch(x.type){case"Int":(typeof O!="number"||O>>0!==O)&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(A=>typeof A=="string")||(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a string`);break;case"Boolean":typeof O!="boolean"&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a bigint`)}break;case"Bytes":if(!(O instanceof Uint8Array)){if(typeof O=="string")return Buffer.from(O);(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(O instanceof vs)){if(typeof O=="string"&&(O=Buffer.from(O)),O instanceof Buffer)return createBlob(O,{type:"text/plain"});(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a Blob`)}break;case"array":if(Array.isArray(O)){if(x.elements)for(let A=0,U=O.length;A<U;A++){let w=O[A],L=P(w,x.elements,D+"[*]");L&&(O[A]=L)}}else(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be an Array`);break}x.nullable===!1&&O==null&&(C||(C=[])).push(`Property ${D} is required (and not does not allow null values)`)},"validateValue");for(let O=0,x=S.length;O<x;O++){let D=S[O];if(D.relationship||D.computed){Object.hasOwn(_,D.name)&&(C||(C=[])).push(`Computed property ${D.name} may not be directly assigned a value`);continue}if(!T||D.name in _){let A=P(_[D.name],D,D.name);A!==void 0&&(_[D.name]=A)}}if(f)for(let O in _)S.find(x=>x.name===O)||(C||(C=[])).push(`Property ${O} is not allowed`);if(C)throw new dt.ClientError(C.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return I?!!this.#i:void 0}static async addAttributes(_){let T=S.slice(0);for(let C of _){if(!C.name)throw new dt.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new dt.ClientError("Attribute names cannot include backticks or forward slashes");Cce(C.name),T.push(C)}return Xe({table:s,database:c,schemaDefined:u,attributes:T}),Me.indexingOperation}static async removeAttributes(_){let T=S.filter(C=>!_.includes(C.name));return Xe({table:s,database:c,schemaDefined:u,attributes:T}),Me.indexingOperation}static getSize(){let _=i.getStats();return(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getAuditSize(){let _=l?.getStats();return _&&(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getStorageStats(){let _=i.env.path,T=ON.default.statfsSync?.(_)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(_){let T=i.getStats().entryCount,C=1e3/2,P=performance.now(),O=Math.floor(T/2),x=_?.exactCount,D=0,A=0,U;for(let{value:w}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(w!=null&&D++,A++,await cc(),!x&&A<O&&performance.now()-P>C){U=A;break}if(U){let w=D;D=0;for(let{value:se}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:U,snapshot:!1}))se!=null&&D++,await cc();let L=U*2,G=(D+w)/L,z=Math.pow((D-w+1)/U/2,2)+G*(1-G)/L,Q=Math.max(Math.sqrt(z)*T,1),B=Math.round(G*T),Ee=Math.max(B-1.96*Q,D+w),me=Math.min(B+1.96*Q,T),pe=Math.pow(10,Math.round(Math.log10(Q)));return pe>B&&(pe=pe/10),D=Math.round(B/pe)*pe,{recordCount:D,estimatedRange:[Math.round(Ee),Math.round(me)]}}return{recordCount:D}}static updatedAttributes(){xr=this.propertyResolvers={$id:a((_,T,C)=>({value:C.key}),"$id"),$updatedtime:a((_,T,C)=>C.version,"$updatedtime"),$updatedTime:a((_,T,C)=>C.version,"$updatedTime"),$expiresAt:a((_,T,C)=>C.expiresAt,"$expiresAt"),$record:a((_,T,C)=>C?{value:_}:_,"$record"),$distance:a((_,T,C)=>C&&(C.distance??T?.vectorDistances?.get(C)),"$distance")};for(let _ of this.attributes){_.isPrimaryKey&&($=_),_.resolve=null;let T=_.relationship,C=_.computed;if(T)if(_.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),C&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Ou=!0,T.to)_.elements?.definition?(xr[_.name]=_.resolve=(P,O,x,D)=>{let A=P[T.from?T.from:t],U=_.elements.definition.tableClass;return D?Xu({attribute:T.to,value:A},Br(O).getReadTxn(),!1,U,!1).map(w=>w&&w.key!==void 0?w:U.primaryStore.getEntry(w,{transaction:Br(O).getReadTxn()})).asArray:U.search([{attribute:T.to,value:A}],O).asArray},_.set=()=>{},_.resolve.definition=_.elements.definition,_.resolve.to=T.to,T.from&&(_.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${_.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let P=_.definition||_.elements?.definition;P?(xr[_.name]=_.resolve=(O,x,D,A)=>{let U=O[T.from];if(U===void 0)return;if(_.elements){let L,G=U?.map(z=>{let Q=P.tableClass.primaryStore[A?"getEntry":"get"](z,{transaction:Br(x).getReadTxn()});return Q?.then&&(L=!0),Me.loadAsInstance===!1&&Object.freeze(A?Q?.value:Q),Q});return T.filterMissing?L?Promise.all(G).then(z=>z.filter(SG)):G.filter(SG):L?Promise.all(G):G}let w=P.tableClass.primaryStore[A?"getEntry":"get"](U,{transaction:Br(x).getReadTxn()});return Me.loadAsInstance===!1&&Object.freeze(A?w?.value:w),w},_.set=(O,x)=>{if(Array.isArray(x)){let D=x.map(A=>A.getId?.()||A[P.tableClass.primaryKey]);O[T.from]=D}else{let D=x.getId?.()||x[P.tableClass.primaryKey];O[T.from]=D}},_.resolve.definition=_.definition||_.elements?.definition,_.resolve.from=T.from):console.error(`The relationship property "${_.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${_.name}" in table "${s}" must use either "from" or "to" arguments`);else if(C)typeof C.from=="function"&&this.setComputedAttribute(_.name,C.from),xr[_.name]=_.resolve=(P,O,x)=>{let D=typeof C.from=="string"?P[C.from]:P,A=this.userResolvers[_.name];if(A)return A(D,O,x);ke.default.warn(`Computed attribute "${_.name}" does not have a function assigned to it. Please use setComputedAttribute('${_.name}', resolver) to assign a resolver function.`),this.userResolvers[_.name]=()=>{}},_.resolve.directReturn=!0;else if(r[_.name]?.customIndex?.propertyResolver){let P=r[_.name].customIndex;xr[_.name]=(O,x,D)=>{let A=O[_.name];return P.propertyResolver(A,x,D)},xr[_.name].directReturn=!0}}bp(this,this),bp(pm,this,!0);for(let _ of S){let T=_.name;_.resolve&&(Object.defineProperty(i.encoder.structPrototype,T,{get(){return _.resolve(this,td.getStore())},set(C){return _.set(this,C)},configurable:!0,enumerable:_.enumerable}),_.enumerable&&!i.encoder.structPrototype.toJSON&&Object.defineProperty(i.encoder.structPrototype,"toJSON",{configurable:!0,value(){let C={};for(let P in this)C[P]=this[P];return C}}))}}static setComputedAttribute(_,T){let C=Qi(S,_);if(!C){console.error(`The attribute "${_}" does not exist in the table "${s}"`);return}if(!C.computed){console.error(`The attribute "${_}" is not defined as computed in the table "${s}"`);return}this.userResolvers[_]=T}static async deleteHistory(_=0,T=!1){let C;for(let{key:P,value:O}of l.getRange({start:0,end:_}))await cc(),It(O).tableId===n&&(C=sg(l,P,O));if(T)for(let P of i.getRange({start:0,versions:!0})){let{key:O,value:x,localTime:D}=P;await cc(),x===null&&D<_&&(C=pl(i,P))}await C}static async*getHistory(_=0,T=1/0){for(let{key:C,value:P}of l.getRange({start:_||1,end:T})){await cc();let O=It(P);O.tableId===n&&(yield{id:O.recordId,localTime:C,version:O.version,type:O.type,value:O.getValue(i,!0,C),user:O.user,operation:O.originatingOperation})}}static async getHistoryOfRecord(_){let T=[];if(_==null)throw new Error("An id is required");let C=i.getEntry(_);if(!C)return T;let P=C.localTime;if(!P)throw new Error("The entry does not have a local audit time");let O=0;do{await cc();let x=l.get(P);if(x){let D=It(x);T.push({id:D.recordId,localTime:P,version:D.version,type:D.type,value:D.getValue(i,!0,P),user:D.user}),P=D.previousLocalTime}else break}while(O<1e3&&P);return T.reverse()}static cleanup(){Y?.remove()}}let u_=ES(async(K,_,T)=>{for(let C of Me.sources)if(C.get&&(!C.get.reliesOnPrototype||C.prototype.get)){if(C.available?.(T)===!1)continue;_.source=C;let P=await C.get(K,_);if(P)return P}},()=>{throw new dt.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Me.updatedAttributes();let Bb=Me.prototype;return h&&Me.setTTLExpiration(h/1e3),j&&d_(),Me;function Pu(K,_,T){let C;for(let P in r){let O=r[P],x=O.isIndexing,D=xr[P],A=T&&(D?D(T):T[P]),U=_&&(D?D(_):_[P]);if(A===U&&!x)continue;if(O.customIndex){O.customIndex.index(K,A,U);continue}C=!0;let w=O.indexNulls,L=(0,$p.getIndexedValues)(A,w),G=(0,$p.getIndexedValues)(U,w);if(G?.length>0){let z=new Set(G);if(L=L?L.filter(Q=>{if(z.has(Q))z.delete(Q);else return!0}):[],G=Array.from(z),(G.length>0||L.length>0)&&mG){let Q=G.concat(L).map(B=>({key:B,value:K}));O.prefetch(Q,_G)}for(let Q=0,B=G.length;Q<B;Q++)O.remove(G[Q],K)}else L?.length>0&&mG&&O.prefetch(L.map(z=>({key:z,value:K})),_G);if(L)for(let z=0,Q=L.length;z<Q;z++)O.put(L[z],K)}return C}a(Pu,"updateIndices");function Gi(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>hG)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)throw new Error("Invalid primary key of null");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,kl.writeKey)(K,Uce,0)>hG)throw new Error("Primary key size is too large: "+K.length);return!0}a(Gi,"checkValidId");function Ds(K){return typeof K=="object"&&K?K.id:K}a(Ds,"requestTargetToId");function hm(K){return typeof K=="object"&&K&&K.isCollection}a(hm,"isSearchTarget");function Em(K){}a(Em,"isRequestTarget");function Do(K,_,T,C,P){if(Me.getResidencyById&&T.ensureLoaded&&_?.replicateFrom!==!1){let x=Fa(Me.getResidencyById(K));if(x&&!x.includes(server.hostname)&&N)return N({key:K,residency:x}).then(P)}let O=a(()=>{if(_?.transaction?.stale&&(_.transaction.stale=!1),T.transaction?.isDone)return P(null,K);let x=i.getEntry(K,T);return(c!=="system"||s==="hdb_analytics")&&(RG.default.trace?.("Recording db-read action for",`${c}.${s}`),Ve(x?.size??1,"db-read",s,null)),_?._freezeRecords&&Object.freeze(x?.value),x?.residencyId&&x.metadataFlags&kn&&N&&T.ensureLoaded&&_?.replicateFrom!==!1?N(x).then(D=>P(D,K),D=>(ke.default.error?.("Error loading remote record",K,x,T,D),P(null,K))):(x&&_&&(x?.version>(_.lastModified||0)&&(_.lastModified=x.version),x?.localTime&&!_.lastRefreshed&&(_.lastRefreshed=x.localTime)),P(x,K))},"whenPrefetched");return C?O():te>0?(te--,O()):new Promise((x,D)=>{te===0?(te--,i.prefetch([K],()=>{A(),U()})):(le.push(K),fe.push(U),le.length>l_&&(te--,A()));function A(){if(le.length>0){let w=fe;i.prefetch(le,()=>{te===-1?A():te++;for(let L of w)L()}),le=[],fe=[],ge>2&&ge--}else te=ge,ge<mm&&ge++}a(A,"prefetch");function U(){try{x(O())}catch(w){D(w)}}a(U,"load")})}a(Do,"loadLocalRecord");function Mn(K,_){let T=_?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return xce;let C=T[c],P,O=C?.tables;if(O)return O[s];if(c==="data"&&(P=T[s])&&!P.tables)return P}a(Mn,"getTablePermissions");function pn(K,_,T,C){if(I){let P=!1;if(T.noCache?P=!0:(_?(!_.value||_.metadataFlags&(kn|hl)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(P=!0):P=!0,tn(!P,"cache-hit",s)),P){let O=Du(K,_,T).then(x=>(x?.value&&x?.value.getRecord?.()&&ke.default.error?.("Can not assign a record that is already a resource"),T&&(x?.version>(T.lastModified||0)&&(T.lastModified=x.version),T.lastRefreshed=Date.now()),x));if(T?.onlyIfCached||_?.value&&C?.allowStaleWhileRevalidate?.(_,K)){if(O.catch(x=>ke.default.warn?.(x)),T?.onlyIfCached&&!C.doesExist())throw new dt.ServerError("Entry is not cached",504);return}else return O}}else if(_?.value&&_.expiresAt!=null&&_.expiresAt<Date.now())return Me.evict(_.key,_.value,_.version),_.value=null,{then(P){return P(_)}}}a(pn,"ensureLoadedFromSource");function Br(K){let _=K?.transaction;if(_){if(!_.lmdbDb)return _.lmdbDb=i,_;do{if(_.lmdbDb?.path===i.path)return _;let T=_.next;if(!T)return _=_.next=new vo,_.lmdbDb=i,_;_=T}while(!0)}else return new v_}a(Br,"txnForContext");function Lu(K,_,T){if(!K)return;let C=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof _=="object"){let O=xr,x=C;for(let D=0,A=_.length;D<A;D++){let U=_[D],w=O?.[U];x=w&&x?w(x,T,K):x?.[U],K=null,O=w?.definition?.tableClass?.propertyResolvers}return x}let P=xr[_];return P?P(C,T,K):C[_]}a(Lu,"getAttributeValue");function _m(K,_,T,C,P){let O=P?.length,x={transaction:C,lazy:O>0||typeof _=="string"||_?.length<4,alwaysPrefetch:!0},D;function A(U,w){let L=U?.value;if(!L)return lc.SKIP;for(let G=0;G<O;G++)if(!D?.includes(G)&&!P[G](L,U))return lc.SKIP;return w!==void 0&&(U.key=w),U}if(a(A,"processEntry"),O>0||!K.hasEntries){let U=K.map(w=>{if(D=null,typeof w=="object"&&w?.key!==void 0)return O>0?A(w):w;if(w==null)return lc.SKIP;for(let L=0;L<O;L++){let z=P[L].idFilter;if(z){if(!z(w))return lc.SKIP;D||(D=[]),D.push(L)}}return Do(w,T,x,!1,A)});return Array.isArray(K)&&(U=U.filter(w=>w!==lc.SKIP)),U.hasEntries=!0,U}return K}a(_m,"transformToEntries");function Fr(K,_,T=server.replication?.getThisNodeId(l)){if(K<=_?.version){if(_?.version===K&&T!==void 0){let C=server.replication?.exportIdMapping(l),P=_.localTime,O=P&&l.get(P);if(O){let x,D,A=It(O);for(let U in C)C[U]===T&&(x=U),C[U]===A.nodeId&&(D=U);if(x>D)return 1;if(x===D)return 0}}return-1}return 1}a(Fr,"precedesExistingVersion");async function Du(K,_,T){let C=_?.metadataFlags,P=_?.version,O,x;if(!i.attemptLock(K,P,()=>{clearTimeout(x);let w=i.getEntry(K);!w||!w.value||w.metadataFlags&(kn|hl)?O(Du(K,i.getEntry(K),T)):O(w)}))return new Promise(w=>{O=w,x=setTimeout(()=>{i.unlock(K,P)},Mce)});let D=_?.value,A={requestContext:T,replacingRecord:D,replacingEntry:_,replacingVersion:P,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},U=T?.responseHeaders;return new Promise((w,L)=>{let G;Gs(At(A,async z=>{let Q=performance.now(),B,Ee,me;try{B=await u_(K,A,_),me=C&kn;let se=A.lastModified||me&&P;Ee=me||se>P||!D,se||(se=(0,$p.getNextMonotonicTime)());let ie=performance.now()-Q;if(Ve(ie,"cache-resolution",s,null,"success"),U&&qp(U,"Server-Timing",`cache-resolve;dur=${ie.toFixed(2)}`,!0),z.timestamp=se,h&&A.expiresAt==null&&(A.expiresAt=Date.now()+h),B){if(typeof B!="object")throw new Error("Only objects can be cached and stored in tables");if(B.status>0&&B.headers)if(B.status>=300)if(B.status===304)B=D,se=P;else throw new dt.ServerError(B.body||"Error from source",B.status);else B=B.body;typeof B.toJSON=="function"&&(B=B.toJSON()),t&&B[t]!==K&&(B[t]=K)}G=!0,w({key:K,version:se,value:B})}catch(se){se.message+=` while resolving record ${K} for ${s}`,D&&((se.code==="ECONNRESET"||se.code==="ECONNREFUSED"||se.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(se.statusCode===500||se.statusCode===502||se.statusCode===503||se.statusCode===504))?(w({key:K,version:P,value:D}),ke.default.trace?.(se.message,"(returned stale record)")):L(se);let ie=performance.now()-Q;Ve(ie,"cache-resolution",s,null,"fail"),U&&qp(U,"Server-Timing",`cache-resolve;dur=${ie.toFixed(2)}`,!0),A.transaction.abort();return}if(T?.noCacheStore||A.noCacheStore){A.transaction.abort();return}Br(A).addWrite({key:K,store:i,entry:_,nodeName:"source",before:Mu(B),commit:a((se,ie)=>{if(ie?.version!==P)return;let Oe=Pu(K,D,B);if(B){Ye.put?.(A,K,B),ie&&(T.previousResidency=Me.getResidencyRecord(ie.residencyId));let ue,ce=!1,xe,Ce=Fa(Me.getResidency(B,T));if(Ce){if(!Ce.includes(server.hostname))if(ue=B,ce=!0,Me.getResidencyById)B=void 0;else{B=null;for(let Le in r)B||(B={}),B[Le]=ue[Le]}xe=Qc(Ce)}ke.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(se).toISOString()}`),y(K,B,ie,se,ce?kn:0,g&&(Ee||ce)||null,{user:A?.user,expiresAt:A.expiresAt,residencyId:xe,tableToTrack:s},"put",!!me,ue)}else ie&&(Ye.delete?.(A,K),ke.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(se).toISOString()}`),g||R?y(K,null,ie,se,0,g&&Ee||null,{user:A?.user,tableToTrack:s},"delete",!!me):pl(i,ie,P))},"commit")})}),()=>{i.unlock(K,P)},z=>{i.unlock(K,P),G&&ke.default.error?.("Error committing cache update",z)})})}a(Du,"getFromSource");function xa(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new dt.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new dt.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(xa,"checkContextPermissions");function Ba(K){let _=!1;if(K&&(K-Ar>1&&(_=!0),Ar=K),!(Ge===tr&&!_)&&(tr=Ge,(0,Bl.getWorkerIndex)()===(0,Bl.getWorkerCount)()-1))return Qr&&clearTimeout(Qr),Ge?new Promise(T=>{let C=new Date;C.setMonth(0),C.setDate(1),C.setHours(0),C.setMinutes(0),C.setSeconds(0);let P=Ge/(1+Ar),O=_?Date.now():Math.ceil((Date.now()-C.getTime())/P)*P+C.getTime(),x=a(D=>{ke.default.trace?.(`Scheduled next cleanup scan at ${new Date(D)}`),Qr=setTimeout(()=>ee=ee.then(async()=>{if(x(Math.max(D+Ge,Date.now())),i.rootStore.status!=="open"){clearTimeout(Qr);return}let A=50,U=new Array(A),w=0,L=Math.pow(Ar,8)*(Fl.get(F.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),G=E/Math.pow(Math.max(Ar,1),4);ke.default.debug?.(`Starting cleanup scan for ${s}, evict threshold ${L}, adjusted eviction ${G}ms`);function z(Q,B,Ee,me){let pe=Q+G-Date.now();if(pe<0)return!0;if(Ar){let se=i.lastSize;return Ee&Zr&&sl(me,ie=>{ie.size&&(se+=ie.size)}),ke.default.trace?.(`shouldEvict adjusted ${pe} ${se}, ${pe*(Q-B)/se} < ${L}`),pe*(Q-B)/se<L}return!1}a(z,"shouldEvict");try{let Q=0;for(let B of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:Ee,value:me,version:pe,expiresAt:se,metadataFlags:ie}=B,Oe;me===null&&!g&&pe+Dce<Date.now()?Oe=pl(i,B,pe):se!=null&&z(se,pe,ie,me)&&(Oe=Me.evict(Ee,me,pe),Q++),Oe&&(await U[w],U[w]=Oe.catch(ue=>{ke.default.error?.("Cleanup error",ue)}),++w>=A&&(w=0)),await cc()}ke.default.debug?.(`Finished cleanup scan for ${s}, evicted ${Q} entries`)}catch(Q){ke.default.warn?.(`Error in cleanup scan for ${s}:`,Q)}T(void 0),Ar=0}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");x(O)}):void 0}a(Ba,"scheduleCleanup");function gm(){Y=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}a(gm,"addDeleteRemoval");function d_(){(0,Bl.getWorkerIndex)()===0&&setInterval(async()=>{if(!jc){jc=!0;try{let K=j.name,_=r[K];if(!_)throw new Error(`expiresAt attribute ${j} must be indexed`);for(let T of _.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let C of _.getValues(T)){let P=i.getEntry(C);P?.value?P.value[K]<Date.now()&&Me.evict(C,P.value,P.version):i.ifVersion(C,P?.version,()=>_.remove(T,C))}await cc()}}catch(K){ke.default.error?.("Error in evicting old records",K)}finally{jc=!1}}},Lce).unref()}a(d_,"runRecordExpirationEviction");function Fa(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let _=server.shards?.get?.(K);if(_)return ke.default.trace?.(`Shard ${K} mapped to ${_.map(T=>T.name).join(", ")}`),_.map(T=>T.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}a(Fa,"residencyFromFunction");function Qc(K){if(K){let _=K.join(","),T=d.get([Symbol.for("residency_by_set"),_]);return T||(d.put([Symbol.for("residency_by_set"),_],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],K),T)}}a(Qc,"getResidencyId");function Mu(K,_){let T=NA(K,i.rootStore);if(T){let C=_;return C?async()=>{await C(),await T}:()=>T}return _}a(Mu,"preCommitBlobsForRecordBefore")}function CN(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 _G(){}function gS(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return _S(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return _S(+e);case"Float":return e==="null"?null:_S(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;Bce.test(e)||(e+="Z");let n=new Date(e);return _S(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,SS.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function _S(e){if(isNaN(e))throw new SyntaxError;return e}function gG(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);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 Gs(e,t,r){return e?.then?e.then(t,r):t(e)}function SG(e){return e!=null}function $s(e){try{return JSON.stringify(e)}catch{return e}}function Fce(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var lc,$p,TG,yG,Fl,dt,Vp,Kp,ke,kl,Bl,SS,ON,RG,Nce,Cce,Oce,Pce,Lce,Dce,mG,Mce,pG,vce,kn,hl,Uce,hG,EG,xce,pxe,Bce,cc,bg=ne(()=>{H();lc=require("lmdb"),$p=b(xn()),TG=b(require("lodash")),yG=b(Mm());Ko();Um();Fl=b(ae());pI();dt=b(_e()),Vp=b(zo()),Kp=b(ls());we();Rg();ke=b(wr());Rw();Ga();kl=require("ordered-binary"),Bl=b(tt());Ki();SS=b(oe());dl();is();B_();Gp();ON=b(require("node:fs"));ss();eg();RG=b(J());NN();({sortBy:Nce}=TG.default),{validateAttribute:Cce}=yG.default,Oce=new Uint8Array(9);Oce[8]=192;Pce=1/0,Lce=6e4,Dce=864e5;Fl.initSync();mG=Fl.get(F.STORAGE_PREFETCHWRITES),Mce=1e4,pG=1,vce=2,kn=1,hl=8,Uce=Buffer.allocUnsafeSlow(8192),hG=1978,EG=100,xce={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},pxe=(0,SS.convertToMS)(Fl.get(F.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(TS,"makeTable");a(CN,"attributesAsObject");a(_G,"noop");Bce=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(gS,"coerceType");a(_S,"rejectNaN");a(gG,"isDescendantId");cc=a(()=>new Promise(setImmediate),"rest");a(Gs,"when");a(SG,"exists");a($s,"stringify");a(Fce,"hasOtherProcesses")});function yS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,o=t[s]||0,c=i-o;r+=c*c}return r}function RS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let o=0;o<i;o++){let c=e[o]||0,l=t[o]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var AG=ne(()=>{a(yS,"euclideanDistance");a(RS,"cosineDistance")});var IG,wG,Od,lo,Cd,kce,Hce,bS,NG=ne(()=>{AG();IG=require("msgpackr"),wG=b(wr()),Od=b(_e()),lo=(0,wG.loggerWithTag)("HNSW"),Cd=Symbol.for("entryPoint"),kce=Symbol.for("key"),Hce=10,bS=class{static{a(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=IG.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?yS:RS,r&&(r.M!==void 0&&(this.M=r.M,this.mL=1/Math.log(this.M)),r.efConstruction!==void 0&&(this.efConstruction=this.efConstructionSearch=r.efConstruction),r.efConstructionSearch!==void 0&&(this.efConstructionSearch=r.efConstructionSearch),r.mL!==void 0&&(this.mL=r.mL),r.optimizeRouting!==void 0&&(this.optimizeRouting=r.optimizeRouting))}index(t,r,n){let s=typeof t=="number"?[kce,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let o=new Map,c,l=this.indexStore.get(Cd);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let E=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:E,primaryKey:t};for(let R=0;R<=E;R++)g[R]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);lo.debug?.("setting entry point to",i),this.indexStore.put(Cd,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),Hce),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);lo.debug?.("setting entry point to",i),this.indexStore.put(Cd,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let g=this.searchLayer(r,l,f,this.efConstruction,E);g=g.slice(0,this.M<<1),g.length===0&&E===0&&lo.info?.("should not have zero connections for",l);let R=h[E];for(let S=0;S<g.length;S++){let{id:y,distance:N,node:I}=g[S];if(y===i)continue;let $=[];if(this.optimizeRouting){let k=!1,j=I[E],Y=1+this.optimizeRouting*(1+.5*S/this.M);for(let le=0;le<j.length;le++){let{id:fe,distance:te}=j[le],ge=1+this.optimizeRouting*(1+.5*le/this.M);for(let be=0;be<R.length;be++){let{id:Ye,distance:Ge}=R[be];if(Ye===fe){N*Y>Ge+te?k=!0:te*ge>N+Ge&&($.push({fromId:Ye,toId:y}),$.push({fromId:y,toId:Ye}));break}}if(k)break}if(k)continue}else if(S>=(E>0?this.M:this.M<<1))continue;R.push({id:y,distance:N});for(let{fromId:k,toId:j}of $){let Y=d(k);Y||(Y=d(k,this.indexStore.get(k)));for(let le=0;le<Y[E].length;le++)if(Y[E][le].id===j){Object.isFrozen(Y[E])&&(Y[E]=Y[E].slice()),Y[E].splice(le,1);break}}let ee=c[E],q=ee?.find(({id:k})=>k===y);if(q){let k=ee?.indexOf(q);ee.copied||(ee=[...ee],ee.copied=!0,c[E]=ee),ee.splice(k,1)}else this.addConnection(y,d(y,I),i,E,N,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m][0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(Cd);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);lo.debug?.("setting entry point to",l),this.indexStore.put(Cd,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:g})=>g!==i),h[E].length===0&&(lo.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=o.get(f);return!p&&m&&(p={...m},o.set(f,p)),p}a(d,"updateNode");for(let[f,m]of o)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(Cd);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,o=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=o(t,h.vector);if(E<f||u.length<s){let g={id:p,distance:E,node:h};l.push(g),u.push(g)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let o=0;switch(i){case"lt":case"le":o=r;case"sort":break;default:throw new Od.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new Od.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=RS;else if(s==="euclidean")c=yS;else{if(s)throw new Od.ClientError("Unknown distance function");c=this.distance}if(!t)throw new Od.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new Od.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return o&&(d=d.filter(f=>f.distance<o)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let o=this.indexStore.get(i);if(!o){lo.info?.("could not find neighbor node",o);continue}o[n]?.find(({id:l})=>l==t)||lo.info?.("asymmetry detected",o[n])}n++}}addConnection(t,r,n,s,i,o){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){lo.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=o(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=o(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&lo.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?lo.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let o=s.shift(),c=this.indexStore.get(o);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let o=this.distance;s.type&&(o=s.distance==="euclidean"?yS:RS);let c=o(s.target,t);return i.set(n,c),c}return t}}});var PN,CG=ne(()=>{NG();PN={HNSW:bS}});var mt={};ye(mt,{NON_REPLICATING_SYSTEM_TABLES:()=>AS,database:()=>hd,databaseEnvs:()=>Zo,databases:()=>ve,dropDatabase:()=>Nw,dropTableMeta:()=>Yce,getDatabases:()=>lt,getDefaultCompression:()=>LS,getTables:()=>Gce,onRemovedDB:()=>Xp,onUpdatedTable:()=>Hl,readMetaDb:()=>Yp,resetDatabases:()=>vd,table:()=>Xe,tables:()=>bn});function Jp(e,t){let r=OS.OpenDBIObject??OS.default.OpenDBIObject;return new r(e,t)}function Gce(){return CS||lt(),bn||{}}function lt(){if(CS)return ve;CS=!0,Dd=new Map;let e=(0,jt.getHdbBasePath)()&&(0,kt.join)((0,jt.getHdbBasePath)(),Zc),t=(0,jt.get)(F.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,jt.get)(F.STORAGE_PATH)||e&&((0,gs.existsSync)(e)?e:(0,kt.join)((0,jt.getHdbBasePath)(),S_)),!!e){if((0,gs.existsSync)(e))for(let r of(0,gs.readdirSync)(e,{withFileTypes:!0})){let n=(0,kt.basename)(r.name,".mdb");r.isFile()&&(0,kt.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Yp((0,kt.join)(e,r.name),null,n)}if((0,gs.existsSync)((0,Ld.getBaseSchemaPath)())){for(let r of(0,gs.readdirSync)((0,Ld.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,kt.join)((0,Ld.getBaseSchemaPath)(),r.name),s=(0,kt.join)((0,Ld.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,gs.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,kt.extname)(i.name).toLowerCase()===".mdb"){let o=(0,kt.join)(s,i.name);Yp((0,kt.join)(n,i.name),(0,kt.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,gs.existsSync)(s))for(let o of(0,gs.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,kt.extname)(o.name).toLowerCase()===".mdb"&&Yp((0,kt.join)(s,o.name),(0,kt.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,kt.join)(c.path,(0,kt.basename)(o+".mdb"));(0,gs.existsSync)(l)&&Yp(l,o,r,null,!0)}}for(let r in ve){let n=Dd.get(r);if(n){let s=ve[r];r.includes("delete")&&Or.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Or.trace(`delete table class ${i}`),delete s[i])}else if(delete ve[r],r==="data"){for(let s in bn)delete bn[s];delete bn[PS]}}if((0,jt.get)(F.ANALYTICS_REPLICATE)===!1?AS.includes("hdb_analytics")||AS.push("hdb_analytics"):(ve.system?.hdb_analytics?.enableAuditing(),ve.system?.hdb_analytics_hostname?.enableAuditing()),ve.system)for(let r of AS)ve.system[r]&&(ve.system[r].replicate=!1);return Dd=null,ve}}function vd(){CS=!1;for(let[,e]of Zo)e.needsDeletion=!0;lt();for(let[e,t]of Zo)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Zo.delete(e);let r=ve[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete ve[t.databaseName],zp.forEach(i=>i(t.databaseName));break}}return ve}function Yp(e,t,r=MN,n,s){let i=new LN.default(e,!1);try{let o=Zo.get(e);o?o.needsDeletion=!1:(o=(0,Md.open)(i),Zo.set(e,o));let c=new Jp(!1),l=o.dbisDb||(o.dbisDb=o.openDB(IS.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,gs.existsSync)(n)&&(i.path=n,u=(0,Md.open)(i),u.isLegacy=!0):u=ng(o));let d=MG(r),f=d[PS],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,g]=p.toString().split("/");g===""?g=h.name:g||(g=E,E=t,h.name||(h.name=g,h.indexed=!h.is_hash_attribute)),f?.add(E);let R=m.get(E);R||m.set(E,R={attributes:[]}),(g==null||h.is_hash_attribute)&&(R.primary=h),g!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:g}=h;if(!g){for(let te of E)if(te.is_hash_attribute||te.isPrimaryKey){g=te;break}if(!g){Or.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let R=d[p],S={},y=[],N,I,$=typeof g.audit=="boolean"?g.audit:(0,jt.get)(F.LOGGING_AUDITLOG),ee=g.trackDeletes,q=g.expiration,k=g.eviction,j=g.sealed,Y=g.splitSegments,le=g.replicate;if(R)S=R.indices,y=R.attributes,R.schemaVersion++;else{N=g.tableId,N?N>=(l.get(Pd)||0)&&(l.putSync(Pd,N+1),Or.info(`Updating next table id (it was out of sync) to ${N+1} for ${p}`)):(g.tableId=N=l.get(Pd),N||(N=1),Or.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(Pd,N+1),l.putSync(g.key,g));let te=new Jp(!g.is_hash_attribute,g.is_hash_attribute);if(te.compression=g.compression,te.compression){let ge=(0,jt.get)(F.STORAGE_COMPRESSION_THRESHOLD)||DG;te.compression.threshold=ge}I=gg(o.openDB(g.key,te),o),o.databaseName=r,I.tableId=N}let fe;for(let te of E){te.attribute=te.name;try{if(!te.is_hash_attribute&&(te.indexed||te.attribute&&!te.name)){if(!S[te.name]){let be=UG(te.key,o,te);S[te.name]=be,S[te.name].indexNulls=te.indexNulls}let ge=y.find(be=>be.name===te.name);ge?y.splice(y.indexOf(ge),1,te):y.push(te),fe=!0}}catch(ge){Or.error("Error trying to update attribute",te,y,S,ge)}}for(let te of y)if(!E.find(be=>be.name===te.name)){if(te.is_hash_attribute){Or.error("Unable to remove existing primary key attribute",te);continue}te.indexed&&(y.splice(y.indexOf(te),1),fe=!0)}if(R)fe&&(R.schemaVersion++,R.updatedAttributes());else{R=vG(d,p,TS({primaryStore:I,auditStore:u,audit:$,sealed:j,splitSegments:Y,replicate:le,expirationMS:q&&q*1e3,evictionMS:k&&k*1e3,trackDeletes:ee,tableName:p,tableId:N,primaryKey:g.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:g.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let te of Wp)te(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function MG(e){let t=ve[e];if(t||(e==="data"?t=ve[e]=bn:e==="system"?Object.defineProperty(ve,"system",{value:t=Object.create(null),configurable:!0}):t=ve[e]=Object.create(null)),Dd&&!Dd.has(e)){let r=new Set;t[PS]=r,Dd.set(e,r)}return t}function vG(e,t,r){return e[t]=r,r}function hd({database:e,table:t}){e||(e=MN),lt();let r=MG(e),n=(0,kt.join)((0,jt.getHdbBasePath)(),Zc),s=(0,jt.get)(F.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,jt.get)(F.STORAGE_PATH)||((0,gs.existsSync)(n)?n:(0,kt.join)((0,jt.getHdbBasePath)(),S_));let o=(0,kt.join)(n,(i?t:e)+".mdb"),c=Zo.get(o);if(!c||c.status==="closed"){let l=new LN.default(o,!1);c=(0,Md.open)(l),Zo.set(o,c)}return c.auditStore||(c.auditStore=ng(c)),c}async function Nw(e){if(!ve[e])throw new Error("Schema does not exist");let t=ve[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Zo.delete(r.path),r.status==="open"&&(await r.close(),await jp.remove(r.path));if(r||(r=hd({database:e,table:null}),r.status==="open"&&(await r.close(),await jp.remove(r.path))),e==="data"){for(let n in bn)delete bn[n];delete bn[PS]}delete ve[e],zp.forEach(n=>n(e)),await wA(r)}function UG(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&PN[r.indexed.type]?.useObjectStore,s=new Jp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let o=PN[r.indexed.type];o?i.customIndex=new o(i,r.indexed):Or.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function Xe(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=MN);let h=hd({database:r,table:t}),E=ve[r];Or.trace(`Defining ${t} in ${r}`);let g=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let R,S,y;m==null&&(m=!0);let N=new Jp(!1);for(let Y of o)Y.attribute&&!Y.name?(Y.name=Y.attribute,Y.indexed=!0):Y.attribute=Y.name,Y.expiresAt&&(Y.indexed=!0);let I,$;if(g){if(R=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...o)}else{let Y=h.auditStore;S=o.find(ge=>ge.isPrimaryKey)||{},R=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=LS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,jt.get)(F.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),Or.trace(`${t} table loading, opening primary store`);let le=new Jp(!1,!0);le.compression=S.compression;let fe=t+"/";if(y=h.dbisDb=h.openDB(IS.INTERNAL_DBIS_NAME,N),j(),y.get(fe))return $&&$(),vd(),Xe(e);let te=gg(h.openDB(fe,le),h);h.databaseName=r,te.tableId=y.get(Pd),Or.trace(`Assigning new table id ${te.tableId} for ${t}`),te.tableId||(te.tableId=1),y.put(Pd,te.tableId+1),S.tableId=te.tableId,g=vG(E,t,TS({primaryStore:te,auditStore:Y,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:te.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:m,dbisDB:y})),g.schemaVersion=1,I=!0,y.put(fe,S)}let ee=g.indices;y=y||(h.dbisDb=h.openDB(IS.INTERNAL_DBIS_NAME,N)),g.dbisDB=y;let q=[];for(let{key:Y,value:le}of y.getRange({start:!0})){let[fe,te]=Y.toString().split("/");if(te===""&&(te=le.name),te){if(fe!==t)continue}else continue;let ge=o.find(Ye=>Ye.name===te),be=!ge?.indexed&&le.indexed&&!le.isPrimaryKey;if((!ge||be)&&(j(),I=!0,ge||y.remove(Y),be)){let Ye=g.indices[fe];Ye&&q.push(Ye)}}let k=[];try{for(let Y of o||[]){if((Y.relationship||Y.computed)&&(I=!0,Y.relationship))continue;let le=t+"/"+(Y.name||"");Object.defineProperty(Y,"key",{value:le,configurable:!0});let fe=y.get(le);if(Y.isPrimaryKey){if(fe=fe||y.get(le=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+fe.expiration||void 0)||(+s||void 0)!==(+fe.eviction||void 0)||Y.type!==fe.type){let ge={...fe};typeof c=="boolean"&&(c&&g.enableAuditing(c),ge.audit=c),n&&(ge.expiration=+n),s&&(ge.eviction=+s),l!==void 0&&(ge.sealed=l),d!==void 0&&(ge.replicate=d),Y.type&&(ge.type=Y.type),I=!0,j(),y.put(le,ge)}continue}fe?.attribute&&!fe.name&&(fe.indexed=!0);let te=!fe||fe.type!==Y.type||JSON.stringify(fe.indexed)!==JSON.stringify(Y.indexed)||fe.nullable!==Y.nullable||fe.version!==Y.version||fe.enumerable!==Y.enumerable||JSON.stringify(fe.properties)!==JSON.stringify(Y.properties)||JSON.stringify(fe.elements)!==JSON.stringify(Y.elements);if(Y.indexed){let ge=UG(le,h,Y);(te||fe.indexingPID&&fe.indexingPID!==process.pid||fe.restartNumber<Qp.workerData?.restartNumber)&&(I=!0,j(),fe=y.get(le),(te||fe.indexingPID&&fe.indexingPID!==process.pid||fe.restartNumber<Qp.workerData?.restartNumber)&&(I=!0,Y.indexNulls===void 0&&(Y.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(Y.lastIndexedKey=fe?.lastIndexedKey??void 0,Y.indexingPID=process.pid,ge.isIndexing=!0,Object.defineProperty(Y,"dbi",{value:ge}),k.push(Y))),y.put(le,Y)),fe?.indexNulls&&Y.indexNulls===void 0&&(Y.indexNulls=!0),ge.indexNulls=Y.indexNulls,ee[Y.name]=ge}else te&&(I=!0,j(),y.put(le,Y))}}finally{$&&$()}if(I&&(g.schemaVersion++,g.updatedAttributes()),Or.trace(`${t} table loading, running index`),k.length>0||q.length>0?g.indexingOperation=Kce(g,k,q):I&&wS.signalSchemaChange(new NS.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,I)for(let Y of Wp)Y(g,p!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Or.trace(`${t} table loaded`),g;function j(){$||h.transactionSync(()=>({then(Y){$=Y}}))}a(j,"startTxn")}async function Kce(e,t,r){try{Or.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await wS.signalSchemaChange(new NS.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,Md.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],g=E.name,R=E.dbi;try{let S=E.resolve,y=m&&(S?S(m):m[g]);if(R.customIndex){R.customIndex.index(f,y);continue}let N=(0,OG.getIndexedValues)(y);if(N)for(let I=0,$=N.length;I<$;I++)R.put(N[I],f)}catch(S){o[g]||(o[g]=!0,Or.error(`Error indexing attribute ${g}`,S))}}}),s.then(()=>d--,h=>{d--,Or.error(h)}),Qp.workerData&&Qp.workerData.restartNumber!==LG.restartNumber&&(i=!0),++c%100===0||i){for(let h of t)h.lastIndexedKey=f,e.dbisDB.put(h.key,h);if(i)return}d>$ce?await s:d>Vce&&await new Promise(h=>setImmediate(h))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await wS.signalSchemaChange(new NS.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Or.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Or.error("Error in indexing",n)}}function Yce({table:e,database:t}){let r=hd({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 Hl(e){return Wp.push(e),{remove(){let t=Wp.indexOf(e);t>-1&&Wp.splice(t,1)}}}function Xp(e){return zp.push(e),{remove(){let t=zp.indexOf(e);t>-1&&zp.splice(t,1)}}}function LS(){let e=(0,jt.get)(F.STORAGE_COMPRESSION),t=(0,jt.get)(F.STORAGE_COMPRESSION_DICTIONARY),r=(0,jt.get)(F.STORAGE_COMPRESSION_THRESHOLD)||DG,n={startingOffset:32};return t&&(n.dictionary=jp.readFileSync(t)),r&&(n.threshold=r),e&&n}var jt,IS,Md,kt,gs,Ld,LN,jp,DN,OG,wS,NS,Qp,PG,LG,OS,qce,Or,MN,PS,DG,AS,bn,ve,Pd,Wp,zp,CS,Zo,Dd,$ce,Vce,we=ne(()=>{jt=b(ae()),IS=b(Wt()),Md=require("lmdb"),kt=require("path"),gs=require("fs"),Ld=b(bt());bg();LN=b(ap());H();jp=b(require("fs-extra")),DN=b(li()),OG=b(xn()),wS=b(zo()),NS=b(ls()),Qp=require("worker_threads"),PG=b(J()),LG=b(tt());Ki();dl();ss();CG();OS=b(op()),{forComponent:qce}=PG.default;a(Jp,"OpenDBIObject");Or=qce("storage"),MN="data",PS=Symbol("defined-tables"),DG=((0,jt.get)(F.STORAGE_PAGESIZE)||4096)-60;(0,jt.initSync)();AS=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],bn=Object.create(null),ve=Object.create(null);(0,DN._assignPackageExport)("databases",ve);(0,DN._assignPackageExport)("tables",bn);Pd=Symbol.for("next-table-id"),Wp=[],zp=[],Zo=new Map;a(Gce,"getTables");a(lt,"getDatabases");a(vd,"resetDatabases");a(Yp,"readMetaDb");a(MG,"ensureDB");a(vG,"setTable");a(hd,"database");a(Nw,"dropDatabase");a(UG,"openIndex");a(Xe,"table");$ce=1e3,Vce=10;a(Kce,"runIndexing");a(Yce,"dropTableMeta");a(Hl,"onUpdatedTable");a(Xp,"onRemovedDB");a(LS,"getDefaultCompression")});var xN={};ye(xN,{loadGQLSchema:()=>jce,start:()=>UN,startOnMainThread:()=>zce});function UN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=o(new c(r.toString(),s)),m=new Map,p=[],h;for(let R of f.definitions)switch(R.kind){case l.OBJECT_TYPE_DEFINITION:let $=function(q){if(q.kind==="NonNullType"){let Y=$(q.type);return Y.nullable=!1,Y}if(q.kind==="ListType")return{type:"array",elements:$(q.type)};let j={type:q.name?.value};return Object.defineProperty(j,"location",{value:q.loc.startToken}),j};a($,"getProperty");let S=R.name.value,y=[],N={table:null,database:null,properties:y};m.set(S,N),i.allTypes.set(S,N);for(let q of R.directives){if(q.name.value==="table"){for(let j of q.arguments)N[j.name.value]=j.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=S),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,p.push(N)}if(q.name.value==="sealed"&&(N.sealed=!0),q.name.value==="splitSegments"&&(N.splitSegments=!0),q.name.value==="replicate"&&(N.replicate=!0),q.name.value==="export"){N.export=!0;for(let j of q.arguments)typeof N.export!="object"&&(N.export={}),N.export[j.name.value]=j.value.value}}let I=!1,ee={};for(let q of R.fields){let k=$(q.type);k.name=q.name.value,y.push(k),ee[k.name]=void 0;for(let j of q.directives){let Y=j.name.value;if(Y==="primaryKey")I?console.warn("Can not define two attributes as a primary key at",j.loc):(k.isPrimaryKey=!0,I=!0);else if(Y==="indexed"){let le={};for(let fe of j.arguments||[])le[fe.name.value]=fe.value.value;k.indexed=le}else if(Y==="computed"){for(let le of j.arguments||[])if(le.name.value==="from"){let fe=le.value.value;k.computed={from:g(fe,le,ee)},k.version==null&&(k.version=fe)}else le.name.value==="version"&&(k.version=le.value.value);k.computed=k.computed||!0}else if(Y==="relationship"){let le={};for(let fe of j.arguments)le[fe.name.value]=fe.value.value;k.relationship=le}else if(Y==="createdTime")k.assignCreatedTime=!0;else if(Y==="updatedTime")k.assignUpdatedTime=!0;else if(Y==="expiresAt")k.expiresAt=!0;else if(Y==="enumerable")k.enumerable=!0;else if(Y==="allow"){let le=k.authorizedRoles=[];for(let fe of j.arguments)fe.name.value==="role"&&le.push(fe.value.value)}else server.knownGraphQLDirectives.includes(Y)&&console.warn(`@${Y} is an unknown directive, at`,j.loc)}}N.type=S,S==="Query"&&(h=N)}function E(R){let S=m.get(R.type);S?(Object.defineProperty(R,"properties",{value:S.properties}),Object.defineProperty(R,"definition",{value:S})):R.type==="array"?E(R.elements):Wce.includes(R.type)||(0,BG.getWorkerIndex)()===0&&console.error(`The type ${R.type} is unknown at line ${R.location.line}, column ${R.location.column}, in ${s}`)}a(E,"connectPropertyType");for(let R of m.values())for(let S of R.properties)E(S);for(let R of p)R.tableClass=e(R),R.export&&(R.export.name===""?i.set((0,vN.dirname)(n),R.tableClass):i.set((0,vN.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function g(R,S,y){return new xG.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${R}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(y)}a(g,"createComputedFrom")}}var vN,xG,BG,Wce,zce,jce,FG=ne(()=>{vN=require("path"),xG=require("node:vm");we();BG=b(tt());ja();Wce=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow","enumerable"]);a(UN,"start");zce=UN,jce=a(e=>UN({ensureTable:Xe}).handleFile(e,null,null,new nd),"loadGQLSchema")});var FN={};ye(FN,{start:()=>sle});function Qce(e){if(e.kind!==He.Kind.OPERATION_DEFINITION&&e.kind!==He.Kind.FRAGMENT_DEFINITION)throw new Kr(`Unexpected non-executable definition type ${e.kind}.`)}function kG(e){if(typeof e!="object"||e===null)throw new uo("Request body must be an object.");if(!("query"in e))throw new uo("Request body must contain a `query` field.");if(typeof e.query!="string")throw new uo("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new uo("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new uo("Request body `operationName` field must be a string.")}function BN(e){return parseInt(e.value,10)}function qG(e){return parseFloat(e.value)}function GG(e,t,r){let n=r.get(e.name.value);return $G(n)?VG(n,t):{attribute:t,value:n}}function $G(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function VG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],$G(n)?VG(n,t):{attribute:t,value:n}))}function Jce(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case He.Kind.NULL:return{attribute:t,value:null};case He.Kind.INT:return{attribute:t,value:BN(e.value)};case He.Kind.FLOAT:return{attribute:t,value:qG(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:t,value:e.value.value};case He.Kind.VARIABLE:return GG(e.value,t,r);case He.Kind.OBJECT:return KG(e.value,t,r);case He.Kind.LIST:case He.Kind.ENUM:default:throw new Kr(`Value type, ${e.value.kind}, is not supported.`)}}function KG(e,t,r){return e.fields.flatMap(n=>Jce(n,t,r))}function Xce(e,t){switch(e.value.kind){case He.Kind.NULL:return{attribute:e.name.value,value:null};case He.Kind.INT:return{attribute:e.name.value,value:BN(e.value)};case He.Kind.FLOAT:return{attribute:e.name.value,value:qG(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case He.Kind.VARIABLE:return GG(e.value,e.name.value,t);case He.Kind.OBJECT:return KG(e.value,[e.name.value],t);case He.Kind.LIST:case He.Kind.ENUM:default:throw new Kr(`Argument type, ${e.value.kind}, is not supported.`)}}function Zce(e,t){return e.flatMap(r=>Xce(r,t))}function DS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case He.Kind.FIELD:return r;case He.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Kr(`Fragment \`${n}\` not found.`);return DS(s.selectionSet,t)}case He.Kind.INLINE_FRAGMENT:return DS(r.selectionSet,t)}})}function YG(e,t){return DS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:YG(r.selectionSet,t)}:r.name.value)}async function ele(e,t,r,n){let s=Bs.getMatch(e.name.value,"graphql");if(s===void 0)throw new Kr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:YG(e.selectionSet,r),conditions:Zce(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function WG(e){switch(e.kind){case He.Kind.NULL:return null;case He.Kind.INT:return BN(e);case He.Kind.FLOAT:return parseFloat(e.value);case He.Kind.STRING:case He.Kind.BOOLEAN:return e.value;case He.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:WG(r.value),...t}),{});case He.Kind.LIST:case He.Kind.ENUM:default:throw new Kr(`Value type, ${e.kind}, is not supported.`)}}function tle(e,t){let r=new Map;for(let n of e){let s=n.variable.name.value,i=t?.[s];if(i===void 0&&n.defaultValue!==void 0&&(i=WG(n.defaultValue)),n.type.kind===He.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Kr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function rle(e,t,r,n){if(e.operation===He.OperationTypeNode.SUBSCRIPTION)throw new Kr("Subscriptions are not supported.");if(e.operation===He.OperationTypeNode.MUTATION)throw new Kr("Mutations are not supported yet.");let s=tle(e.variableDefinitions,t),i=await Promise.all(DS(e.selectionSet,r).map(c=>ele(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function HG({query:e,variables:t={},operationName:r},n){let s=He.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(Qce(u),u.kind===He.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Kr("Unnamed operations are only allowed when there is a single operation in the document.");let d=u.name?.value??"Unnamed Query";if(i.has(d))throw new Kr(`Duplicate operation definition: ${d}`);i.set(d,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Kr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Kr(`Operation \`${r}\` not found.`);let l=await rle(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function nle(e){switch(e.method){case"GET":{let t=new URLSearchParams(e.url.split("?")[1]),r={};for(let[n,s]of t)r[n]=n==="variables"||n==="extensions"?JSON.parse(s):s;return kG(r),HG(r,e)}case"POST":{let r=await Fo(e.headers.get("content-type"),!0)(e._nodeRequest);return kG(r),HG(r,e)}default:throw new uo("Method Not Allowed",405,{Allow:"GET, POST"})}}function sle(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await nle(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof uo)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof He.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Kr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof uo)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof He.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Kr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var He,Kr,uo,zG=ne(()=>{He=b(require("graphql"));ko();ja();a(Qce,"assertExecutableDefinitionNode");a(kG,"assertRequestParams");a(BN,"processIntValueNode");a(qG,"processFloatValueNode");a(GG,"processVariableNode");a($G,"isObject");a(VG,"transformObjectIntoQueryCondition");a(Jce,"processObjectFieldNode");a(KG,"processObjectValueNode");a(Xce,"processArgumentNode");a(Zce,"buildConditionsQuery");a(DS,"fillInFragments");a(YG,"buildSelectQuery");a(ele,"processFieldNode");a(WG,"processConstValueNode");a(tle,"resolveVariables");a(rle,"executeOperation");a(HG,"resolver");Kr=class extends Error{static{a(this,"GraphQLQueryingError")}},uo=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(nle,"graphqlQueryingHandler");a(sle,"start")});var e$=v((xxe,ZG)=>{var Ud=require("validate.js"),QG=ot(),xd=(H(),M(W)),{handleHDBError:ile,hdbErrors:ole}=_e(),{HDB_ERROR_MSGS:ir,HTTP_STATUS_CODES:ale}=ole,kN=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),cle={STRUCTURE_USER:"structure_user"},jG=Object.values(xd.ROLE_TYPES_ENUM),lle="attribute_permissions",ule="attribute_name",{PERMS_CRUD_ENUM:Bd}=xd,dle=[lle,...Object.values(Bd)],JG=[Bd.READ,Bd.INSERT,Bd.UPDATE],fle=[ule,...JG];function mle(e){let t=kN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,XG(e,t)}a(mle,"addRoleValidation");function ple(e){let t=kN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,XG(e,t)}a(ple,"alterRoleValidation");function hle(e){let t=kN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,QG.validateObject(e,t)}a(hle,"dropRoleValidation");var Ele=["operation","role","id","permission","hdb_user","access"];function XG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Ele.includes(n[o])||s.push(n[o]);s.length>0&&hr(ir.INVALID_ROLE_JSON_KEYS(s),r);let i=QG.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{hr(o,r)}),e.permission){let o=_le(e);o&&hr(o,r),jG.forEach(c=>{e.permission[c]&&!Ud.isBoolean(e.permission[c])&&hr(ir.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(jG.indexOf(o)<0){if(o===cle.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||hr(ir.SCHEMA_NOT_FOUND(f),r)}continue}hr(ir.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){hr(ir.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){hr(ir.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{dle.includes(d)||hr(ir.INVALID_PERM_KEY(d),r,o,l)}),Object.values(Bd).forEach(d=>{Ud.isDefined(u[d])?Ud.isBoolean(u[d])||hr(ir.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):hr(ir.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){hr(ir.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){hr(ir.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[o][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let p=u.attribute_permissions[m];if(Object.keys(p).forEach(E=>{!fle.includes(E)&&E!==Bd.DELETE&&hr(ir.INVALID_ATTR_PERM_KEY(E),r,o,l)}),!Ud.isDefined(p.attribute_name)){hr(ir.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=p.attribute_name;if(!d.includes(h)){hr(ir.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}JG.forEach(E=>{Ud.isDefined(p[E])?Ud.isBoolean(p[E])||hr(ir.ATTR_PERM_NOT_BOOLEAN(E,h),r,o,l):hr(ir.ATTR_PERM_MISSING(E,h),r,o,l)}),!f.read&&p.read===!0&&(f.read=!0),!f.insert&&p.insert===!0&&(f.insert=!0),!f.update&&p.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${o}.${l}`;hr(ir.MISMATCHED_TABLE_ATTR_PERMS(m),r,o,l)}}}}return gle(r)}a(XG,"customValidate");ZG.exports={addRoleValidation:mle,alterRoleValidation:ple,dropRoleValidation:hle};function _le(e){let{operation:t,permission:r}=e;if(t===xd.OPERATIONS_ENUM.ADD_ROLE||t===xd.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 ir.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?xd.ROLE_TYPES_ENUM.SUPER_USER:xd.ROLE_TYPES_ENUM.CLUSTER_USER;return ir.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(_le,"validateNoSUPerms");function gle(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:ir.ROLE_PERMS_ERROR,...e};return ile(new Error,n,ale.BAD_REQUEST)}else return null}a(gle,"generateRolePermResponse");function hr(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(hr,"addPermError")});var eh=v((kxe,s$)=>{"use strict";var t$=_n(),r$=Sn(),Sle=rc(),qN=e$(),GN=zo(),Fxe=require("uuid").v4,Tle=require("util"),MS=(H(),M(W)),yle=oe(),$N=r$.searchByValue,Rle=r$.searchByHash,ble=Tle.promisify(Sle.delete),Ale=pi(),Ile=dd(),{hdbErrors:wle,handleHDBError:ql}=_e(),{HDB_ERROR_MSGS:n$,HTTP_STATUS_CODES:Zp}=wle,{UserEventMsg:VN}=ls();s$.exports={addRole:Nle,alterRole:Cle,dropRole:Ole,listRoles:Ple};function HN(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(HN,"scrubRoleDetails");async function Nle(e){let t=qN.addRoleValidation(e);if(t)throw t;e=HN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await $N(r)||[])}catch(i){throw ql(i)}if(n&&n.length>0)throw ql(new Error,n$.ROLE_ALREADY_EXISTS(e.role),Zp.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await t$.insert(s),GN.signalUserChange(new VN(process.pid)),e=HN(e),e}a(Nle,"addRole");async function Cle(e){let t=qN.alterRoleValidation(e);if(t)throw t;e=HN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await t$.update(r)}catch(s){throw ql(s)}if(n&&n?.message==="updated 0 of 1 records")throw ql(new Error,"Invalid role id",Zp.BAD_REQUEST,void 0,void 0,!0);return await GN.signalUserChange(new VN(process.pid)),e}a(Cle,"alterRole");async function Ole(e){let t=qN.dropRoleValidation(e);if(t)throw ql(new Error,t,Zp.BAD_REQUEST,void 0,void 0,!0);let r=new Ile(MS.SYSTEM_SCHEMA_NAME,MS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Rle(r));if(n.length===0)throw ql(new Error,n$.ROLE_NOT_FOUND,Zp.NOT_FOUND,void 0,void 0,!0);let s=new Ale(MS.SYSTEM_SCHEMA_NAME,MS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await $N(s)),o=!1;if(yle.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw ql(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Zp.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await ble(c),GN.signalUserChange(new VN(process.pid)),`${n[0].role} successfully deleted`}a(Ole,"dropRole");async function Ple(){return $N({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}a(Ple,"listRoles")});var KN={};ye(KN,{start:()=>a$,startOnMainThread:()=>Mle});function a$({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,i$.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let o in i.permission){if(Lle.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await Dle(i)}}}async function Dle(e){let t=lt().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,o$.isEqual)(i,e)?void 0:(e.id=r.id,(0,vS.alterRole)(e))}return(0,vS.addRole)(e)}var vS,i$,o$,Lle,Mle,c$=ne(()=>{we();vS=b(eh()),i$=require("yaml"),o$=require("lodash"),Lle=["super_user","cluster_user","structure_user"];a(a$,"start");a(Dle,"ensureRole");Mle=a$});async function US(e){let t=(0,d$.pathToFileURL)(e).toString();if(vle)return th||(th=Ule(Ble)),(await(await th).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Ule(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),th=new Compartment({console,Math,Date,fetch:xle,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,u$.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=ur,s.tables=bn,s.databases=ve}};let n=await(0,l$.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),th}function xle(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 Ble(){return{Resource:ur,tables:bn}}var l$,u$,d$,vle,th,YN=ne(()=>{Ko();we();l$=require("fs/promises"),u$=require("path"),d$=require("url"),vle=!1;a(US,"secureImport");a(Ule,"getCompartment");a(xle,"secureOnlyFetch");a(Ble,"getGlobalVars")});var WN={};ye(WN,{handleApplication:()=>Fle,suppressHandleApplicationWarning:()=>kle});function f$(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Fle(e){e.handleEntry(t=>{if(t.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${t.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(t.eventType!=="add"){e.requestRestart();return}US(t.absolutePath).then(r=>{let n=(0,xS.dirname)(t.urlPath);f$(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),m$(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function m$(e,t,r){for(let n in t){let s=t[n],i=(0,xS.join)(r,n);f$(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&m$(e,s,i)}}var xS,kle,p$=ne(()=>{YN();xS=require("path");a(f$,"isResource");a(Fle,"handleApplication");a(m$,"recurseForResources");kle=!0});var jN={};ye(jN,{start:()=>Hle});function Hle({resources:e}){e.set("login",zN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var zN,h$=ne(()=>{Ko();a(Hle,"start");zN=class extends ur{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)}}}});function FS(e,t){let r={openapi:qle,info:{title:"HarperDB HTTP REST interface",version:y$.packageJson.version},servers:[{description:"REST API",url:t}],paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},n=[{basicAuth:[],bearerAuth:[]}],s=a(i=>{if(i.type&&!r.components.schemas[i.type]){r.components.schemas[i.type]={};let o={},c=[];for(let l of i.properties)BS[l.type]?o[l.name]=new JN(BS[l.type],l.type):l.properties?(o[l.name]=new b$(l.type),s(l)):l.elements?.properties&&(o[l.name]=new Kle(l.elements.type),s(l.elements)),l.nullable===!1&&c.push(l.name);r.components.schemas[i.type]=new T$(o,!i.sealed,c)}},"includeDefinitionInSchema");for(let[,i]of e){if(!i.path||i.Resource.isError)continue;let{path:o}=i,c=o.split("/").pop(),{attributes:l,sealed:u}=i.Resource,{prototype:d,primaryKey:f="id"}=i.Resource;if(!l&&e.allTypes.has(i.path)){let k=e.allTypes.get(i.path);u=k.sealed,l=k.properties}if(!f)continue;let m={},p=[],h=[];if(l)for(let{type:k,name:j,elements:Y,relationship:le,definition:fe,nullable:te}of l){let ge=fe??Y?.definition;ge&&s(ge),te===!1&&h.push(j),le?k==="array"?m[j]={type:"array",items:{$ref:Vs+Y.type}}:m[j]={$ref:Vs+k}:ge?k==="array"?m[j]={type:"array",items:{$ref:Vs+ge.type}}:m[j]={$ref:Vs+ge.type}:k==="array"?Y.type==="Any"?m[j]={type:"array",items:{format:Y.type}}:m[j]={type:"array",items:new JN(BS[Y.type],Y.type)}:k==="Any"?m[j]={format:k}:m[j]=new JN(BS[k],k),p.push(new XN(j,"query",m[j]))}let E=Object.keys(m),g=new XN(f,"path",{type:"string",format:"ID"});g.required=!0,g.description="primary key of record";let R=new XN("property","path",{enum:E});R.required=!0,r.components.schemas[c]=new T$(m,!u,h);let S=d.post!==Resource.prototype.post||d.update,y=typeof d.put=="function",N=typeof d.get=="function",I=typeof d.delete=="function",$=typeof d.patch=="function",ee=`/${o}/`;r.paths[ee]||(r.paths[ee]={}),S&&(r.paths[ee].post=new Gle(c,n,{200:new Fd({$ref:Vs+c},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),r.paths[ee].options=new E$(p,n,{200:new _$},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),N&&(r.paths[ee].get=new QN(p,n,{200:new Fd({type:"array",items:{$ref:Vs+c}})},"search for records by the specified property name and value pairs")),I&&(r.paths[ee].delete=new S$(p,n,"delete all the records that match the provided query",{204:new g$}));let q="/"+o+"/{"+f+"}";if(r.paths[q]||(r.paths[q]={}),r.paths[q].options=new E$(p,n,{200:new _$},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),N&&(r.paths[q].get=new QN([g],n,{200:new Fd({$ref:Vs+c})},"retrieve a record by its primary key")),y&&(r.paths[q].put=new $le([g],n,c,{200:new Fd({$ref:Vs+c})},"create or update the record with the URL path that maps to the record's primary key")),$&&(r.paths[q].patch=new Vle([g],n,c,{200:new Fd({$ref:Vs+c})},"patch the record with the URL path that maps to the record's primary key")),I&&(r.paths[q].delete=new S$([g],n,"delete a record with the given primary key",{204:new g$})),N&&R.schema.enum.length>0){let k=`/${o}/{${f}}.{property}`;r.paths[k]||(r.paths[k]={}),r.paths[k].get=new QN([g,R],n,{200:new Fd({enum:E})},"used to retrieve the specified property of the specified record")}}for(let[,i]of e.allTypes)s(i),i.sealed&&r.components.schemas[i.type].additionalProperties&&(r.components.schemas[i.type].additionalProperties=!1);return r}function Gle(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Vs+e}}}},this.security=t,this.responses=r}function QN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function E$(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function _$(){this.description=R$,this.headers={},this.content={}}function Fd(e,t){this.description=R$,this.content={"application/json":{schema:e}},this.headers=t}function g$(){this.description="successfully processed request, no content returned to client"}function $le(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Vs+r}}}},this.responses=n}function Vle(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Vs+r}}}},this.responses=n}function S$(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function T$(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function JN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function b$(e){this.$ref=`#/components/schemas/${e}`}function Kle(e){this.type="array",this.items=new b$(e)}function XN(e,t,r){this.name=e,this.in=t,this.schema=r}var y$,qle,BS,Vs,R$,ZN=ne(()=>{y$=b(Rt()),qle="3.0.3",BS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Vs="#/components/schemas/",R$="successful operation";a(FS,"generateJsonApi");a(Gle,"Post");a(QN,"Get");a(E$,"Options");a(_$,"ResponseOptions200");a(Fd,"Response200");a(g$,"Response204");a($le,"Put");a(Vle,"Patch");a(S$,"Delete");a(T$,"ResourceSchema");a(JN,"Type");a(b$,"Ref");a(Kle,"ArrayRef");a(XN,"Parameter")});var I$={};ye(I$,{Request:()=>uc,createReuseportFd:()=>kS});var A$,uc,eC,tC,kS,rh=ne(()=>{A$=require("os"),uc=class{static{a(this,"Request")}#e;#t;_nodeRequest;_nodeResponse;method;url;headers;isWebSocket;user;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new tC(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.#t===void 0&&(this.#t=this._nodeRequest.socket.getPeerCertificate?.(!0)||null),this.#t}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new eC(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get hostname(){return this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}get nodeRequest(){return this._nodeRequest}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},eC=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)}},tC=class{static{a(this,"Headers")}asObject;constructor(t){this.asObject=t}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return Object.prototype.hasOwnProperty.call(this.asObject,t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,A$.platform)()!="win32"&&(kS=require("node-unix-socket").createReuseportFd)});var qS={};ye(qS,{parseHeaderValue:()=>nC,start:()=>zle});async function Wle(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&yg(e);let i=new qs;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==w$){let g=HS.getMatch(o,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new di(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let R=nC(g);for(let S of R)switch(S.name){case"max-age":e.expiresAt=S.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=nC(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await At(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Fo(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new kd.ClientError(g,400)}if(e.authorize=!0,o===w$&&s==="GET"){if(e?.user?.role?.permission?.super_user)return FS(HS,`${e.protocol}://${e.hostname}`);throw new kd.ServerError("Forbidden",403)}switch(c.checkPermission=e.user?.role?.permission??{},s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new kd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new kd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,rC.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=lG(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=qm(f.data,e,f)),f}else if(isFinite(p)){Yle[0]=p;let g=String.fromCharCode(34,(sn[0]&63)+62,(sn[0]>>6)+(sn[1]<<2&63)+62,(sn[1]>>4)+(sn[2]<<4&63)+62,(sn[2]>>2)+62,(sn[3]&63)+62,(sn[3]>>6)+(sn[4]<<2&63)+62,(sn[4]>>4)+(sn[5]<<4&63)+62,(sn[5]>>2)+62,(sn[6]&63)+62,(sn[6]>>6)+(sn[7]<<2&63)+62,34),R=r["if-none-match"];R&&g==R?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),rC.lastModified&&i.setIfNone("Last-Modified",new Date(p).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let h={status:m,headers:i,body:void 0},E=e.loadedFromSource??f?.wasLoadedFromSource?.();return E!==void 0&&(h.wasCacheMiss=E,!E&&isFinite(p)&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||p))/1e3))),f!==void 0&&(h.body=qm(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(o){o.statusCode?o.statusCode===500?Ti.warn(o):Ti.info(o):Ti.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.setIfNone("Allow",o.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:o.statusCode||500,headers:i,body:void 0};return c.body=qm(o.contentType?o:O$(o),e,c),c}}function zle(e){rC=e,e.includeExpensiveRecordCountEstimates&&(uc.prototype.includeExpensiveRecordCountEstimates=!0),!N$&&(N$=!0,HS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Wle(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{nh++;let s=new ns;C$||(C$=!0,tp(l=>{nh>0&&l.push({metric:"ws-connections",connections:nh,byThread:!0})}));let i;t.on("error",l=>{i=!0,Ti.warn(l)});let o;t.on("message",a(function(u){o||(o=Fo(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=o(u);Ve(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{nh--,tn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=HS.getMatch(l,"ws");if(tn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Ve(h=>({count:h.count,total:nh}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new di(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await At(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Bo(p.value,r);t.send(h),Ve(h.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(E=>t._socket.once("drain",E))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?Ti.warn(l):Ti.info(l):Ti.error(l),t.close(jle[l.statusCode]||1011,O$(l))}t.close()},e))}function nC(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,o]=s.trim().split("=");i=i.trim(),o&&(o=o.trim()),r={name:i.toLowerCase(),value:o,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var Ti,kd,O$,sn,Yle,rC,w$,N$,HS,C$,nh,jle,P$=ne(()=>{ko();is();Ti=b(J()),kd=b(_e());Rg();Fu();Ga();Gp();ZN();rh();Ag();({errorToString:O$}=Ti),sn=new Uint8Array(8),Yle=new Float64Array(sn.buffer,0,1),rC={},w$="openapi";a(Wle,"http");nh=0;a(zle,"start");jle={401:3e3,403:3003};a(nC,"parseHeaderValue")});var sC=v((d0e,D$)=>{var{recordAction:GS,recordActionBinary:L$}=(is(),M(mg)),Qle=require("fastify-plugin"),Jle=200;D$.exports=Qle(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(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),GS(o,"duration",u,f,d),L$(s.raw.statusCode<400,"success",u,f,d),L$(1,"response_"+s.raw.statusCode,u,f,d);let m=Jle;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{GS(performance.now()-c,"transfer",u,f,d),GS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,GS(m,"bytes-sent",u,f,d));let p=o.toFixed(3),h=s.getHeader("Server-Timing"),E=`db;dur=${p}`;s.header("Server-Timing",h?`${h}, ${E}`:E)}),r()},{name:"hdb-request-time"})});var v$=v((f0e,M$)=>{var Xle=ot(),Zle={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};M$.exports=function(e){return Xle.validateObject(e,Zle)}});var sh=v((m0e,U$)=>{"use strict";var eue=(H(),M(W)).OPERATIONS_ENUM,iC=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=eue.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};U$.exports=iC});var ah={};ye(ah,{createTokens:()=>cC,getJWTRSAKeys:()=>WS,refreshOperationToken:()=>lC,validateOperationToken:()=>uC,validateRefreshToken:()=>zS});async function WS(){if($S)return $S;try{let e=ih.default.join(oh.default.getHdbBasePath(),Wb),t=await VS.default.readFile(ih.default.join(e,Am.JWT_PASSPHRASE_NAME),"utf8"),r=await VS.default.readFile(ih.default.join(e,Am.JWT_PRIVATE_KEY_NAME),"utf8");return $S={publicKey:await VS.default.readFile(ih.default.join(e,Am.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},$S}catch(e){throw YS.default.error(e),new yi.ClientError(qd.NO_ENCRYPTION_KEYS,Hd.INTERNAL_SERVER_ERROR)}}async function cC(e){let t=(0,oC.validateBySchema)(e,fo.default.object({username:fo.default.string().optional(),password:fo.default.string().optional(),role:fo.default.string().optional(),expires_in:fo.default.alternatives(fo.default.string(),fo.default.number()).optional()}));if(t)throw new yi.ClientError(t.message);let r;try{let f=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,f=!1),r=await(0,aC.findAndValidateUser)(e.username,e.password,f)}catch(f){throw YS.default.error(f),new yi.ClientError(qd.INVALID_CREDENTIALS,Hd.UNAUTHORIZED)}if(!r)throw new yi.ClientError(qd.INVALID_CREDENTIALS,Hd.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let o=await WS(),c=await Gd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??H$,algorithm:KS,subject:$d.OPERATION}),l=await Gd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:tue,algorithm:KS,subject:$d.REFRESH}),u=kw(l,$r.SHA256);if((await(0,x$.update)(new B$.default(Rm,Uu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new yi.ClientError(qd.REFRESH_TOKEN_SAVE_FAILED,Hd.INTERNAL_SERVER_ERROR);return F$.default.signalUserChange(new k$.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function lC(e){let t=(0,oC.validateBySchema)(e,fo.default.object({refresh_token:fo.default.string().required()}).required());if(t)throw new yi.ClientError(t.message);let{refresh_token:r}=e;await zS(r);let n=await WS(),s=await Gd.default.decode(r);return{operation_token:await Gd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:H$,algorithm:KS,subject:$d.OPERATION})}}async function uC(e){return q$(e,$d.OPERATION)}async function zS(e){return q$(e,$d.REFRESH)}async function q$(e,t){try{let r=await WS(),n=await Gd.default.verify(e,r.publicKey,{algorithms:KS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,aC.findAndValidateUser)(n.username,void 0,!1);if(t===$d.REFRESH&&!Hw(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw YS.default.warn(r),r?.name==="TokenExpiredError"?new yi.ClientError(qd.TOKEN_EXPIRED,Hd.FORBIDDEN):new yi.ClientError(qd.INVALID_TOKEN,Hd.UNAUTHORIZED)}}var Gd,VS,ih,fo,oC,yi,YS,aC,x$,B$,F$,k$,oh,Hd,qd,H$,tue,KS,$d,$S,Vd=ne(()=>{Gd=b(require("jsonwebtoken")),VS=b(require("fs-extra")),ih=b(require("node:path")),fo=b(require("joi")),oC=b(ot());H();yi=b(_e()),YS=b(J());Gw();aC=b(Es()),x$=b(_n()),B$=b(sh()),F$=b(zo()),k$=b(ls()),oh=b(ae()),{HTTP_STATUS_CODES:Hd,AUTHENTICATION_ERROR_MSGS:qd}=yi.hdbErrors;oh.default.initSync();H$=oh.default.get(F.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",tue=oh.default.get(F.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",KS="RS256",$d={OPERATION:"operation",REFRESH:"refresh"};a(WS,"getJWTRSAKeys");a(cC,"createTokens");a(lC,"refreshOperationToken");a(uC,"validateOperationToken");a(zS,"validateRefreshToken");a(q$,"validateToken")});var dC=v((g0e,V$)=>{"use strict";var rue=v$(),Kd=require("passport"),nue=require("passport-local").Strategy,sue=require("passport-http").BasicStrategy,iue=require("util"),oue=Es(),$$=iue.callbackify(oue.findAndValidateUser),_0e=Jr(),aue=(H(),M(W)),G$=(Vd(),M(ah));Kd.use(new nue(function(e,t,r){$$(e,t,r)}));Kd.use(new sue(function(e,t,r){$$(e,t,r)}));Kd.serializeUser(function(e,t){t(null,e)});Kd.deserializeUser(function(e,t){t(null,e)});function cue(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":Kd.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===aue.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?G$.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):G$.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Kd.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(cue,"authorize");function lue(e,t){let r=rue(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(lue,"checkPermissions");V$.exports={authorize:cue,checkPermissions:lue}});var _C=v((R0e,z$)=>{var XS=require("clone"),ZS=ot(),uue=oe(),QS=(H(),M(W)),T0e=J(),fC=require("fs"),pC=require("joi"),{string:JS}=pC.types(),{hdbErrors:due,handleHDBError:jS}=_e(),{HDB_ERROR_MSGS:y0e,HTTP_STATUS_CODES:mC}=due,{commonValidators:Yd}=Xi(),K$=" is required",fue=["insert","update","upsert"],hC={database:{presence:!1,format:Yd.schema_format,length:Yd.schema_length},schema:{presence:!1,format:Yd.schema_format,length:Yd.schema_length},table:{presence:!0,format:Yd.schema_format,length:Yd.schema_length},action:{inclusion:{within:fue,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},mue={schema:JS.required(),table:JS.required(),action:JS.valid("insert","update","upsert")},{AWS_ACCESS_KEY:pue,AWS_SECRET:hue,AWS_BUCKET:Eue,AWS_FILE_KEY:_ue,REGION:gue}=QS.S3_BUCKET_AUTH_KEYS,Sue={s3:{presence:!0},[`s3.${pue}`]:{presence:!0,type:"String"},[`s3.${hue}`]:{presence:!0,type:"String"},[`s3.${Eue}`]:{presence:!0,type:"String"},[`s3.${_ue}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${gue}`]:{presence:!0,type:"String"}},Y$=XS(hC);Y$.data.presence={message:K$};var W$=XS(hC);W$.file_path.presence={message:K$};var Tue=Object.assign(XS(hC),Sue),EC=XS(mue);EC.csv_url=JS.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();EC.passthrough_headers=pC.object();function yue(e){let t=ZS.validateObject(e,Y$);return eT(e,t)}a(yue,"dataObject");function Rue(e){let t=ZS.validateBySchema(e,pC.object(EC));return eT(e,t)}a(Rue,"urlObject");function bue(e){let t=ZS.validateObject(e,W$);return eT(e,t)}a(bue,"fileObject");function Aue(e){let t=ZS.validateObject(e,Tue);return eT(e,t)}a(Aue,"s3FileObject");function eT(e,t){if(!t){let r=uue.checkGlobalSchemaTable(e.schema,e.table);if(r)return jS(new Error,r,mC.BAD_REQUEST);if(e.operation===QS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{fC.accessSync(e.file_path,fC.constants.R_OK|fC.constants.F_OK)}catch(n){return n.code===QS.NODE_ERROR_CODES.ENOENT?jS(n,`No such file or directory ${n.path}`,mC.BAD_REQUEST):n.code===QS.NODE_ERROR_CODES.EACCES?jS(n,`Permission denied ${n.path}`,mC.BAD_REQUEST):jS(n)}}return t}a(eT,"postValidateChecks");z$.exports={dataObject:yue,urlObject:Rue,fileObject:bue,s3FileObject:Aue}});var gC=v((A0e,j$)=>{"use strict";var ch=J(),tT=(H(),M(W));async function Iue(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===tT.OPERATIONS_ENUM.INSERT||t.operation===tT.OPERATIONS_ENUM.UPDATE||t.operation===tT.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===tT.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(ch.info(i.message),i):i.http_resp_msg?(ch.error(`Error calling operation: ${e.name}`),ch.error(i.http_resp_msg),i):(ch.error(`Error calling operation: ${e.name}`),ch.error(i),i)}}a(Iue,"callOperationFunctionAsAwait");j$.exports={callOperationFunctionAsAwait:Iue}});var SC=v((w0e,J$)=>{"use strict";var{S3:wue,GetObjectCommand:Nue}=require("@aws-sdk/client-s3");J$.exports={getFileStreamFromS3:Cue,getS3AuthObj:Q$};async function Cue(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await Q$(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Nue(r))).Body}a(Cue,"getFileStreamFromS3");function Q$(e,t,r){return new wue({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(Q$,"getS3AuthObj")});var Z$=v((C0e,X$)=>{"use strict";var TC=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}},yC=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};X$.exports={BulkLoadFileObject:TC,BulkLoadDataObject:yC}});var tV=v((P0e,eV)=>{"use strict";var RC=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}};eV.exports=RC});var nV=v((D0e,rV)=>{"use strict";var bC=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};rV.exports=bC});var IC=v((v0e,iV)=>{"use strict";var sV=tV(),Oue=nV(),{HDB_ERROR_MSGS:Pue}=Jr(),AC=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Pue.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 sV(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Oue(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new sV(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}};iV.exports=AC});var dc=v((B0e,lV)=>{"use strict";var x0e=Sn(),lh=J(),{validateBySchema:oV}=ot(),ea=require("joi"),Lue=so(),rT=oe(),{handleHDBError:nT,hdbErrors:Due,ClientError:aV}=_e(),{HDB_ERROR_MSGS:sT,HTTP_STATUS_CODES:wC}=Due,cV=ae();cV.initSync();var{getDatabases:NC}=(we(),M(mt)),Mue=require("fs-extra"),vue=(H(),M(W));lV.exports={describeAll:Uue,describeTable:iT,describeSchema:xue};async function Uue(e={}){try{let t=rT.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=NC(),o={},c={},l=[],u=e?.exact_count,d=e?.include_computed;for(let m in i){o[m]=!0,!t&&!s&&!r&&(c[m]=e.hdb_user?.role?.permission[m]?.describe);let p=i[m];for(let h in p)try{let E;if(t||s||r)E=await iT({schema:m,table:h,exact_count:u,include_computed:d});else if(n&&n[m].describe&&n[m].tables[h].describe){let g=n[m].tables[h].attribute_permissions;E=await iT({schema:m,table:h,exact_count:u,include_computed:d},g)}E&&l.push(E)}catch(E){lh.error(E)}}let f={};for(let m in l)t||s||r?(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],o[l[m].schema]&&delete o[l[m].schema]):c[l[m].schema]&&(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],o[l[m].schema]&&delete o[l[m].schema]);for(let m in o)t||s||r?f[m]={}:c[m]&&(f[m]={});return f}catch(t){return lh.error("Got an error in describeAll"),lh.error(t),nT(new Error,sT.DESCRIBE_ALL_ERR)}}a(Uue,"describeAll");async function iT(e,t){rT.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=oV(e,ea.object({database:ea.string(),table:ea.string().required(),exact_count:ea.boolean().strict(),include_computed:ea.boolean().strict()}));if(i)throw new aV(i.message);let c=NC()[r];if(!c)throw nT(new Error,sT.SCHEMA_NOT_FOUND(e.schema),wC.NOT_FOUND);let l=c[n];if(!l)throw nT(new Error,sT.TABLE_NOT_FOUND(e.schema,e.table),wC.NOT_FOUND);function u(p){(!p.computed||e.include_computed)&&d.push({attribute:p.attribute,type:p.type,elements:p.elements?.type,indexed:p.indexed,is_primary_key:p.isPrimaryKey,assigned_created_time:p.assignCreatedTime,assigned_updated_time:p.assignUpdatedTime,nullable:p.nullable,computed:p.computed?!0:void 0,properties:p.properties?p.properties.map(h=>({type:h.type,name:h.name})):void 0})}a(u,"pushAtt");let d=[];if(s){let p={};s.forEach(h=>{h.describe&&(p[h.attribute_name]=!0)}),l.attributes.forEach(h=>{p[h.name]&&u(h)})}else l.attributes?.forEach(p=>u(p));let f;try{f=(await Mue.stat(l.primaryStore.env.path)).size}catch(p){lh.warn("unable to get database size",p)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(p=>p.isPrimaryKey||p.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(p=>p.name).filter(p=>p&&p!=="NATSReplicator"&&p!=="Replicator")),cV.get(vue.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Lue.createNatsTableStreamName(m.schema,m.name));try{let p=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=p.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=p.estimatedRange;let h=l.auditStore;if(h)for(let E of h.getKeys({reverse:!0,limit:1}))m.last_updated_record=E[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let E of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=E}catch(p){lh.warn(`unable to stat table dbi due to ${p}`)}return m}a(iT,"descTable");async function xue(e){rT.transformReq(e);let t=oV(e,ea.object({database:ea.string(),exact_count:ea.boolean().strict(),include_computed:ea.boolean().strict()}));if(t)throw new aV(t.message);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=NC()[n];if(!i)throw nT(new Error,sT.SCHEMA_NOT_FOUND(e.schema),wC.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),rT.isEmpty(l)||l.describe){let u=await iT({schema:e.schema,table:c,exact_count:e.exact_count,include_computed:e.include_computed},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(xue,"describeSchema")});var pV=v((k0e,mV)=>{"use strict";var Bue=dc(),{hdbErrors:uV}=_e(),{getDatabases:dV}=(we(),M(mt));mV.exports={checkSchemaExists:fV,checkSchemaTableExists:Fue,schemaDescribe:Bue};async function fV(e){if(!dV()[e])return uV.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(fV,"checkSchemaExists");async function Fue(e,t){let r=await fV(e);if(r)return r;if(!dV()[e][t])return uV.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Fue,"checkSchemaTableExists")});var oT=v((q0e,hV)=>{"use strict";var kue=fs();hV.exports={writeTransaction:Hue};function Hue(e,t,r){return kue.writeTransaction(e,t,r)}a(Hue,"writeTransaction")});var DC=v((Y0e,NV)=>{"use strict";var{decode:que}=require("msgpackr"),{isMainThread:$0e,parentPort:V0e,threadId:K0e}=require("worker_threads"),lT=Ht(),Wd=pt(),PC=(H(),M(W)),An=J(),OC=ae(),Gue=(H(),M(W)),{onMessageByType:$ue}=tt(),SV=so(),{recordAction:EV,recordActionBinary:Vue}=(is(),M(mg)),{publishToStream:Kue}=lT,{ConsumerEvents:_V}=require("nats"),Yue=Sn(),{promisify:Wue}=require("util"),{decodeBlobsWithWrites:zue}=(ss(),M(Q_)),TV=Wue(setTimeout),uT=1e4,dT,cT,jue,Que,yV,uh=new Map,zd=new Map;NV.exports={initialize:RV,ingestConsumer:LC,setSubscription:Jue,setIgnoreOrigin:ede,getDatabaseSubscriptions:Zue,updateConsumer:bV};async function RV(){$ue(PC.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await bV(n)}),yV=!0,An.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await lT.getNATSReferences();dT=e,cT=e.info.server_name,jue=t,Que=r}a(RV,"initialize");async function bV(e){if(e.status==="start"){let{js:t,jsm:r}=await AV(e.node_domain_name);LC(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=uh.get(e.stream_name+e.node_domain_name);t&&(An.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),uh.set(e.stream_name+e.node_domain_name,"close")),zd.get(e.node_domain_name)==="failed"&&zd.set(e.node_domain_name,"close")}}a(bV,"updateConsumer");var fT=new Map;function Jue(e,t,r){let n=fT.get(e);n||fT.set(e,n=new Map),n.set(t,r),yV||RV().then(Xue)}a(Jue,"setSubscription");async function Xue(){let e=await Yue.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+Wd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await AV(r),!n))break;let{schema:o,table:c}=i,l=SV.createNatsTableStreamName(o,c);LC(l,n,s,r)}}}a(Xue,"accessConsumers");async function AV(e){let t,r,n=1;for(;!r;)try{t=await dT.jetstream({domain:e}),r=await dT.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(zd.get(e)==="close")break;zd.set(e,"failed"),n%10===1&&An.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<uT?n++*100:uT;await TV(i)}return{js:t,jsm:r}}a(AV,"connectToRemoteJS");function Zue(){return fT}a(Zue,"getDatabaseSubscriptions");var IV;function ede(e){IV=e}a(ede,"setIgnoreOrigin");var wV=100,gV=new Array(wV),aT=0;async function LC(e,t,r,n){let{connection:s}=await lT.getNATSReferences();dT=s,cT=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,cT),An.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(zd.get(n)==="close")break;o%10===1&&An.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(An.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await lT.createConsumer(r,e,cT,new Date(Date.now()).toISOString()));let d=o++*100<uT?o++*100:uT;await TV(d)}let c=!1,l;for(;!c;){if(uh.get(e+n)==="close"||zd.get(n)==="close"){uh.delete(e+n),c=!0;continue}l=await i.consume({max_messages:OC.get(PC.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),uh.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===_V.ConsumerDeleted&&(await l.close(),c=!0),d.type===_V.HeartbeatsMissed){let f=d.data;An.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(An.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await gV[aT],gV[aT]=tde(d).catch(f=>{An.error(f)}),++aT>=wV&&(aT=0)}catch(d){d.message==="consumer deleted"?(An.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):An.error("Error consuming clustering ingest, restarting consumer",d)}}}a(LC,"ingestConsumer");async function tde(e){let t;await zue(()=>{t=que(e.data)}),EV(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),An.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=OC.get(PC.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Wd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Wd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Wd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!IV),Vue(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Wd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;An.trace("processing message:",o,c,u,(d?"records: "+d.map(I=>I?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),An.trace(`messageProcessor nats msg id: ${e.headers.get(Wd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(I=>h=I),{timestamp:g,user:R,node_name:S}=m||{},y=fT.get(c)?.get(u);if(!y)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=h,y.send(t);else if(d.length===1&&!l)y.send({type:CC(o),value:d[0],id:f?.[0],expiresAt:p,timestamp:g,table:u,onCommit:h,user:R,nodeName:S});else{let I=d.map(($,ee)=>({type:CC(o),value:$,expiresAt:p,id:f?.[ee],table:u}));for(;l;)I.push({type:CC(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:I,table:u,timestamp:g,onCommit:h,user:R,nodeName:S})}OC.get(Gue.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Kue(e.subject.split(".").slice(0,-1).join("."),SV.createNatsTableStreamName(c,u),e.headers,e.data),await E;let N=Date.now()-g;g&&EV(N,"replication-latency",e.subject,o,"ingest")}catch(o){An.error(o)}e.ack()}a(tde,"messageProcessor");function CC(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(CC,"convertOperation")});var Ht=v((Z0e,VV)=>{"use strict";var Yr=ae();Yr.initSync();var rde=require("fs-extra"),nde=require("semver"),mh=require("path"),{monotonicFactory:sde}=require("ulidx"),OV=sde(),ide=require("util"),PV=require("child_process"),ode=ide.promisify(PV.exec),ade=PV.spawn,on=pt(),rt=(H(),M(W)),{packageJson:cde,PACKAGE_ROOT:lde}=Rt(),mT=oe(),Ri=J(),pT=so(),ude=oT(),dh=St(),{broadcast:dde,onMessageByType:fde,getWorkerIndex:mde}=tt(),{isMainThread:LV}=require("worker_threads"),{Encoder:pde,decode:xC}=require("msgpackr"),DV=new pde,{isEmpty:Kl}=mT,MV=Es(),z0e=48*36e11;LV&&fde(rt.ITC_EVENT_TYPES.RESTART,()=>{In=void 0,Vl=void 0});var{connect:hde,StorageType:Ede,RetentionPolicy:_de,AckPolicy:BC,DeliverPolicy:FC,DiscardPolicy:gde,NatsConnection:j0e,JetStreamManager:Q0e,JetStreamClient:J0e,StringCodec:X0e,JSONCodec:Sde,createInbox:kC,headers:Tde,ErrorCode:CV}=require("nats"),{recordAction:yde}=(is(),M(mg)),{encodeBlobsAsBuffers:Rde}=(ss(),M(Q_)),vV=Sde(),bde="clustering",Ade=cde.engines[on.NATS_SERVER_NAME],Ide=mh.join(lde,"dependencies"),UC=mh.join(Ide,`${process.platform}-${process.arch}`,on.NATS_BINARY_NAME),MC,vC,fh,Gl,$l;VV.exports={runCommand:UV,checkNATSServerInstalled:wde,createConnection:HC,getConnection:ph,getJetStreamManager:hh,getJetStream:BV,getNATSReferences:mo,getServerList:Cde,createLocalStream:qC,listStreams:FV,deleteLocalStream:Ode,getServerConfig:jd,listRemoteStreams:Pde,viewStream:Lde,viewStreamIterator:Dde,publishToStream:Mde,request:xde,reloadNATS:GC,reloadNATSHub:Bde,reloadNATSLeaf:Fde,extractServerName:Ude,requestErrorHandler:kde,createLocalTableStream:GV,createTableStreams:Gde,purgeTableStream:$V,purgeSchemaTableStreams:$de,getStreamInfo:Vde,updateLocalStreams:Yde,closeConnection:Nde,getJsmServerName:hT,addNatsMsgHeader:kV,clearClientCache:xV,updateRemoteConsumer:Hde,createConsumer:HV,updateConsumerIterator:qde};async function UV(e,t=void 0){let{stdout:r,stderr:n}=await ode(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
14
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw mr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Cae(n,r),oN(n);let s=n.toJSON();if(Sae.config=s,Ft=Td(s),Ft.logging_rotation_rotate)for(let i in Iq)Ft[i]&&mr.error(`Config ${Iq[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);mr.trace(yae)}}a(oS,"initConfig");function Cae(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],hs.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],hs.join(r,"log")),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,replicate:!1}),n=!0),n){if(mr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);yn.writeFileSync(t,String(e))}}a(Cae,"checkForUpdatedConfig");function oN(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw Sd.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw Sd.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=pae(r,t);if(n.error)throw Sd.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(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(oN,"validateConfig");function Oae(e,t){Ft===void 0&&(Ft={});let r=gi[e.toLowerCase()];if(r===void 0){mr.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ft[r.toLowerCase()]=t}a(Oae,"updateConfigObject");function Dq(e,t,r=void 0,n=!1,s=!1,i=!1){Ft===void 0&&oS();let o=Lq(gi.hdb_root),c=hs.join(o,Hs.HDB_CONFIG_FILE),l=sc(c),u;if(r&&Ft){let m=!1;for(let p in r)if(r[p]!=Ft[p.toLowerCase()]){m=!0;break}if(!m){mr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===ps.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=gi[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=iN(m,t);l.setIn([...p],h)}else for(let m in r){let p=gi[m.toLowerCase()];if(p===ps.HTTP_SECUREPORT&&r[m]===Ft[ps.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===ps.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===Ft[ps.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===ps.DATABASES){u=r[m];continue}if(p?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!p&&(m.endsWith("_package")||m.endsWith("_port"))&&(p=m),p!==void 0){let h=p.split("_"),E=Hs.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let g=iN(p,r[m]);p==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],g)}catch(R){mr.error(R)}}}u&&Pq(l,u),oN(l);let d=l.getIn(["rootPath"]),f=hs.join(d,Hs.HDB_CONFIG_FILE);if(n===!0&&Pae(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);yn.writeFileSync(f,String(l)),s&&(Ft=Td(l.toJSON())),mr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Dq,"updateConfigValue");function Pae(e,t){try{let r=hs.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${Hs.HDB_CONFIG_FILE}.bak`);yn.copySync(e,r),mr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){mr.error(Rae),mr.error(r)}}a(Pae,"backupConfigFile");var Lae=["databases"];function Td(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),iS=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])&&!Lae.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!ps[l.toUpperCase()]&&gi[l]&&(s[gi[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Td,"flattenConfig");function iN(e,t){if(e===ps.CLUSTERING_NODENAME||e===ps.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(hae(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Cr.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 Cr.autoCast(t)}a(iN,"castConfigValue");function Dae(){let e=Cr.getPropsFilePath(),t=Ml(e);return sc(t).toJSON()}a(Dae,"getConfiguration");async function Mae(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return Dq(void 0,void 0,s,!0),Iae}catch(i){throw typeof i=="string"||i instanceof String?_ae(i,i,gae.BAD_REQUEST,void 0,void 0,!0):i}}a(Mae,"setConfiguration");function aN(){let e=Cr.getPropsFilePath();try{yn.accessSync(e,yn.constants.F_OK|yn.constants.R_OK)}catch(n){if(!Cr.noBootFile())throw mr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Ml(e);return sc(t).toJSON()}a(aN,"readConfigFile");function sc(e){return wq.parseDocument(yn.readFileSync(e,"utf8"),{simpleKeys:!0})}a(sc,"parseYamlDoc");function vae(){let e=aN(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Cr.isEmptyOrZeroLength(t)?[]:t;let r=Aq(t);if(r)throw Sd.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Cr.isEmptyOrZeroLength(n)?[]:n;let s=Aq(n);if(s)throw Sd.CONFIG_VALIDATION(s.message);if(!Cr.isEmptyOrZeroLength(n)&&!Cr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Cr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Sd.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(vae,"getClusteringRoutes");function Mq(e){let t=Nq(e);Ft={};for(let r in gi){let n=t.get(r.toUpperCase());if(Cr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=gi[r].toLowerCase();s===ps.LOGGING_ROOT?Ft[s]=hs.dirname(n):Ft[s]=n}return Ft}a(Mq,"initOldConfig");function Uae(e){let t=aN();return Eae.get(t,e.replaceAll("_","."))}a(Uae,"getConfigFromFile");async function xae(e,t){let r=sc(Ml());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await yn.writeFile(Ml(),String(r))}a(xae,"addConfig");function Bae(e){let t=Ml(Cr.getPropsFilePath()),r=sc(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=hs.join(n,Hs.HDB_CONFIG_FILE);yn.writeFileSync(s,String(r))}a(Bae,"deleteConfigFromFile");function Fae(){return iS||(oS(),iS)}a(Fae,"getConfigObj");function kae(){return Ft||oS(),Ft}a(kae,"getFlatConfigObj")});var Es=v((nUe,Vr)=>{"use strict";var xq="username is required",Bq="nothing to update, must supply active, role or password to update",Fq="password cannot be an empty string",kq="If role is specified, it cannot be empty.",Hq="active must be true or false";Vr.exports.addUser=zae;Vr.exports.alterUser=jae;Vr.exports.dropUser=Jae;Vr.exports.getSuperUser=rce;Vr.exports.userInfo=Xae;Vr.exports.listUsers=lS;Vr.exports.listUsersExternal=Zae;Vr.exports.setUsersWithRolesCache=vl;Vr.exports.findAndValidateUser=hN;Vr.exports.getClusterUser=nce;Vr.exports.getUsersWithRolesCache=tce;Vr.exports.USERNAME_REQUIRED=xq;Vr.exports.ALTERUSER_NOTHING_TO_UPDATE=Bq;Vr.exports.EMPTY_PASSWORD=Fq;Vr.exports.EMPTY_ROLE=kq;Vr.exports.ACTIVE_BOOLEAN=Hq;var qq=_n(),Hae=rc(),Mp=(Gw(),M(qw)),Gq=xH(),vp=Sn(),dN=zo(),oo=oe(),$q=require("validate.js"),fN=J(),{promisify:qae}=require("util"),mN=so(),lN=(H(),M(W)),vq=pt(),Gae=St(),$ae=ae(),Vae=eo(),{hdbErrors:Kae,ClientError:Si}=_e(),{HTTP_STATUS_CODES:Xo,AUTHENTICATION_ERROR_MSGS:cN,HDB_ERROR_MSGS:yd}=Kae,{UserEventMsg:pN}=ls(),uN=require("lodash"),{server:cS}=(Hr(),M(Im)),Yae=J();cS.getUser=(e,t)=>hN(e,t,t!=null);cS.authenticateUser=(e,t)=>hN(e,t);var Vq={username:!0,active:!0,role:!0,password:!0},Uq=new Map,Wae=qae(Hae.delete),aS=$ae.get(lN.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??Mp.HASH_FUNCTION.SHA256,ao;async function zae(e){let t=$q.cleanAttributes(e,Vq),r=Gq.addUserValidation(t);if(r)throw new Si(r.message);let n=await vp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new Si(yd.ROLE_NAME_NOT_FOUND(t.role),Xo.NOT_FOUND);if(n.length>1)throw new Si(yd.DUP_ROLES_FOUND(t.role),Xo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=mN.encrypt(t.password)),t.password=await Mp.hash(t.password,aS),t.hash_function=aS,t.role=n[0].id;let s=await qq.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(fN.debug(s),await vl(),s.skipped_hashes.length===1)throw new Si(yd.USER_ALREADY_EXISTS(t.username),Xo.CONFLICT);return dN.signalUserChange(new pN(process.pid)),`${t.username} successfully added`}a(zae,"addUser");async function jae(e){let t=$q.cleanAttributes(e,Vq);if(oo.isEmptyOrZeroLength(t.username))throw new Error(xq);if(oo.isEmptyOrZeroLength(t.password)&&oo.isEmptyOrZeroLength(t.role)&&oo.isEmptyOrZeroLength(t.active))throw new Error(Bq);if(!oo.isEmpty(t.password)&&oo.isEmptyOrZeroLength(t.password.trim()))throw new Error(Fq);if(!oo.isEmpty(t.active)&&!oo.isBoolean(t.active))throw new Error(Hq);if(!oo.isEmpty(t.password)&&!oo.isEmptyOrZeroLength(t.password.trim())&&(Qae(t.username)&&(t.hash=mN.encrypt(t.password)),t.password=await Mp.hash(t.password,aS),t.hash_function=aS),t.role==="")throw new Error(kq);if(t.role){let n=await vp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Si(yd.ALTER_USER_ROLE_NOT_FOUND(t.role),Xo.NOT_FOUND);if(n.length>1)throw new Si(yd.DUP_ROLES_FOUND(t.role),Xo.CONFLICT);t.role=n[0].id}let r=await qq.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await vl(),dN.signalUserChange(new pN(process.pid)),r}a(jae,"alterUser");function Qae(e){let t=!1,r=ao.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(Qae,"isClusterUser");async function Jae(e){let t=Gq.dropUserValidation(e);if(t)throw new Si(t.message);if(ao.get(e.username)===void 0)throw new Si(yd.USER_NOT_EXIST(e.username),Xo.NOT_FOUND);let r=await Wae({table:"hdb_user",schema:"system",hash_values:[e.username]});return fN.debug(r),await vl(),dN.signalUserChange(new pN(process.pid)),`${e.username} successfully deleted`}a(Jae,"dropUser");async function Xae(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=uN.cloneDeep(e.hdb_user);let r=await vp.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}a(Xae,"userInfo");async function Zae(){let e=await lS();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a(Zae,"listUsersExternal");async function lS(){let e=await vp.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=uN.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await vp.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=uN.cloneDeep(s),s.role=t[s.role],ece(s.role),n.set(s.username,s);return n}a(lS,"listUsers");function ece(e){if(!e){fN.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(Vae)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(ece,"appendSystemTablesToRole");async function vl(e=void 0){e?ao=e:ao=await lS()}a(vl,"setUsersWithRolesCache");async function tce(){return ao||await vl(),ao}a(tce,"getUsersWithRolesCache");async function hN(e,t,r=!0){ao||await vl();let n=ao.get(e);if(!n){if(!r)return{username:e};throw new Si(cN.GENERIC_AUTH_FAIL,Xo.UNAUTHORIZED)}if(n&&!n.active)throw new Si(cN.USER_INACTIVE,Xo.UNAUTHORIZED);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(Uq.get(t)===n.password)return s;{let i=Mp.validate(n.password,t,n.hash_function||Mp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)Uq.set(t,n.password);else throw new Si(cN.GENERIC_AUTH_FAIL,Xo.UNAUTHORIZED)}}return s}a(hN,"findAndValidateUser");async function rce(){ao||await vl();for(let[,e]of ao)if(e.role.role==="super_user")return e}a(rce,"getSuperUser");async function nce(){let e=await lS(),t=Gae.getConfigFromFile(lN.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==lN.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=mN.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+vq.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+vq.SERVER_SUFFIX.ADMIN,r}a(nce,"getClusterUser");var Kq=[];cS.invalidateUser=function(e){for(let t of Kq)try{t(e)}catch(r){Yae.error("Error invalidating user",r)}};cS.onInvalidatedUser=function(e){Kq.push(e)}});var Ne,Rd=se(()=>{Ne={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var bd,EN=se(()=>{Rd();bd=class{static{a(this,"ComponentStatus")}lastChecked;status;message;error;constructor(t,r,n){this.lastChecked=new Date,this.status=t,this.message=r,this.error=n}updateStatus(t,r){this.status=t,this.message=r,this.lastChecked=new Date,t!==Ne.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(Ne.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=Ne.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(Ne.WARNING,t)}markLoading(t){this.updateStatus(Ne.LOADING,t||"Component is loading")}isHealthy(){return this.status===Ne.HEALTHY}hasError(){return this.status===Ne.ERROR}isLoading(){return this.status===Ne.LOADING}hasWarning(){return this.status===Ne.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var Ul,ic,_N,Ad,gN,Id,SN,uS=se(()=>{Ul=b(Jr()),ic=class extends Error{static{a(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=Ul.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},_N=class extends ic{static{a(this,"CrossThreadTimeoutError")}requestId;timeoutMs;collectedCount;constructor(t,r,n){super(`Component status collection timeout after ${r}ms. Collected ${n} responses for request ${t}.`,Ul.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},Ad=class extends ic{static{a(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,Ul.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},gN=class extends ic{static{a(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,Ul.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},Id=class extends ic{static{a(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,Ul.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},SN=class extends ic{static{a(this,"CrossThreadCollectionError")}result;constructor(t){let r=t.success?`Partial collection success: ${t.collectedFromThreads} threads responded`+(t.timedOutThreads.length>0?`, ${t.timedOutThreads.length} timed out`:""):`Collection failed: ${t.errors.map(n=>n.message).join(", ")}`;super(r,Ul.HTTP_STATUS_CODES.OK),this.name="CrossThreadCollectionError",this.result=t}getDiagnostics(){let t=[`Cross-thread collection ${this.result.success?"partially succeeded":"failed"}`,`Threads responded: ${this.result.collectedFromThreads}`];return this.result.expectedThreads&&t.push(`Expected threads: ${this.result.expectedThreads}`),this.result.timedOutThreads.length>0&&t.push(`Timed out threads: ${this.result.timedOutThreads.join(", ")}`),this.result.errors.length>0&&(t.push("Errors:"),this.result.errors.forEach((r,n)=>{t.push(` ${n+1}. ${r.name}: ${r.message}`)})),t.join(`
|
|
15
|
+
`)}}});var Yq,xl,Wq,oc,Up,wd,sce,dS,TN=se(()=>{Yq=b(ls()),xl=b(tt());H();Wq=b(wr());Rd();uS();oc=(0,Wq.loggerWithTag)("componentStatus.crossThread"),Up=class{static{a(this,"CrossThreadStatusCollector")}awaitingResponses=new Map;responseCheckers=new Map;nextRequestId=1;listenerAttached=!1;timeout;cleanupTimer=null;constructor(t=5e3){this.timeout=t}attachListener(){this.listenerAttached||((0,xl.onMessageByType)(R_.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;oc.trace?.("Received component status response from %s, with requestId: %d",r,t.requestId);let n=this.awaitingResponses.get(t.requestId);if(n){n.push({workerIndex:t.workerIndex,isMainThread:t.isMainThread||!1,statuses:t.statuses||[]});let s=this.responseCheckers.get(t.requestId);s&&s()}}),this.listenerAttached=!0)}scheduleCleanup(){this.cleanupTimer&&clearTimeout(this.cleanupTimer),this.awaitingResponses.size>0&&(this.cleanupTimer=setTimeout(()=>{this.awaitingResponses.size>0&&(oc.debug?.(`Cleaning up ${this.awaitingResponses.size} stale pending requests`),this.awaitingResponses.clear()),this.cleanupTimer=null},3e4))}async collect(t){try{this.attachListener(),this.scheduleCleanup();let r=this.nextRequestId++,n=[];this.awaitingResponses.set(r,n);let o=((0,xl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,g=a(()=>{let y=this.awaitingResponses.get(r);y&&y.length>=o&&!E&&(E=!0,S(),oc.trace?.(`Collected all ${y.length} expected responses for request ${r}`),p(y))},"checkComplete"),R=setTimeout(()=>{if(!E){E=!0;let y=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),oc.debug?.(`Collection timeout for request ${r}: collected ${y.length}/${o} responses`),p(y)}},this.timeout),S=a(()=>{this.awaitingResponses.delete(r),clearTimeout(R)},"cleanup");this.responseCheckers.set(r,g),(0,Yq.sendItcEvent)({type:R_.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{g()}).catch(y=>{E=!0,S(),this.responseCheckers.delete(r),h(new Ad("sendItcEvent",y))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,xl.getWorkerIndex)(),m=f===void 0?"main":`worker-${f}`;for(let[p,h]of d)u.set(`${p}@${m}`,{...h,workerIndex:f});for(let p of l)for(let[h,E]of p.statuses){let g=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${g}`,{...E,workerIndex:p.workerIndex})}return oc.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof Ad?oc.error?.(`ITC failure during component status collection: ${r.message}`):oc.warn?.("Failed to collect component status from all threads:",r),oc.debug?.(`Collection failed for request. Error: ${r instanceof Error?r.message:"Unknown error"}`),this.getLocalStatusOnly(t)}}getLocalStatusOnly(t){let r=t.getAllStatuses(),n=new Map,s=(0,xl.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[o,c]of r)n.set(`${o}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},wd=class{static{a(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let o=s.indexOf("@"),c=o!==-1?s.substring(0,o):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let o=this.aggregateComponentGroup(s,i);r.set(s,o)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,o,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",g=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=g;else if(E&&E.startsWith("worker-")){let R=parseInt(E.substring(7));isNaN(R)||(n.workers[R]=g)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==Ne.HEALTHY&&p.message&&(!i||g>s)&&(s=g,i=p.message),p.error&&!o&&(o=p.error)}let u=this.determineOverallStatus(c);if(Array.from(c.keys()).length>1)for(let[m,p]of r)p.status!==u&&l.set(m,{workerIndex:p.workerIndex!==void 0?p.workerIndex:-1,status:p.status,message:p.message,error:p.error});let f={componentName:t,status:u,lastChecked:n,latestMessage:i,error:o};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[Ne.ERROR,Ne.WARNING,Ne.LOADING,Ne.UNKNOWN,Ne.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Ne.UNKNOWN}},sce=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),dS=new Up(sce)});var ac,fS=se(()=>{EN();Rd();TN();uS();ac=class e{static{a(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new Id(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Ne).includes(r))throw new Id(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Ne).join(", ")}`);this.statusMap.set(t,new bd(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,Ne.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,Ne.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,Ne.WARNING,r)}initializeLoading(t,r){this.setStatus(t,Ne.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,Ne.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,Ne.ERROR,n,r)}getComponentsByStatus(t){let r=[];for(let[n,s]of this.statusMap)s.status===t&&r.push({name:n,status:s});return r}getStatusSummary(){let t={[Ne.HEALTHY]:0,[Ne.ERROR]:0,[Ne.WARNING]:0,[Ne.LOADING]:0,[Ne.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await dS.collect(t);return wd.aggregate(r)}async getAggregatedStatusFor(t,r){r||(r=await e.getAggregatedFromAllThreads(this));let n=[],s=t+".",i=r.get(t);i&&n.push({key:t,...i});for(let[f,m]of r)f.startsWith(s)&&n.push({key:f,...m});if(n.length===0)return{status:Ne.UNKNOWN,message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}};let o=n.some(f=>f.status===Ne.ERROR),c=n.some(f=>f.status===Ne.LOADING),l=o?Ne.ERROR:c?Ne.LOADING:Ne.HEALTHY,u="All components loaded successfully",d={};if(o||c){u=n.filter(m=>m.status===Ne.ERROR||m.status===Ne.LOADING).map(m=>`${m.key}: ${m.latestMessage||m.status}`).join("; ");for(let m of n)m.status!==Ne.HEALTHY&&(d[m.key]={status:m.status,message:m.latestMessage})}return{status:l,message:u,...Object.keys(d).length>0&&{details:d},lastChecked:n[0]?.lastChecked||{workers:{}}}}}});var pr,mS=se(()=>{fS();pr=new ac});function jq(e){let t=zq.get(e);return t||(t=new yN(e),zq.set(e,t)),t}function Qq(){pr.reset()}var yN,zq,co,Jq,Xq=se(()=>{mS();Rd();yN=class{static{a(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return pr.setStatus(this.componentName,Ne.HEALTHY,t),this}warning(t){return pr.setStatus(this.componentName,Ne.WARNING,t),this}error(t,r){return pr.setStatus(this.componentName,Ne.ERROR,t,r),this}loading(t){return pr.setStatus(this.componentName,Ne.LOADING,t||"Loading..."),this}unknown(t){return pr.setStatus(this.componentName,Ne.UNKNOWN,t),this}get(){return pr.getStatus(this.componentName)}},zq=new Map;a(jq,"statusForComponent");co={loading(e,t){pr.initializeLoading(e,t)},loaded(e,t){pr.markLoaded(e,t)},failed(e,t,r){pr.markFailed(e,t,r)}};a(Qq,"reset");Jq=Ne});var xp={};ye(xp,{AggregationError:()=>gN,COMPONENT_STATUS_LEVELS:()=>Ne,ComponentStatus:()=>bd,ComponentStatusError:()=>ic,ComponentStatusOperationError:()=>Id,ComponentStatusRegistry:()=>ac,CrossThreadCollectionError:()=>SN,CrossThreadStatusCollector:()=>Up,CrossThreadTimeoutError:()=>_N,ITCError:()=>Ad,StatusAggregator:()=>wd,componentStatusRegistry:()=>pr,crossThreadCollector:()=>dS,query:()=>ice});var ice,Zq=se(()=>{mS();fS();EN();fS();TN();mS();uS();Rd();ice={get(e){return pr.getStatus(e)},all(){return pr.getAllStatuses()},byStatus(e){return pr.getComponentsByStatus(e)},summary(){return pr.getStatusSummary()},async allThreads(){return ac.getAggregatedFromAllThreads(pr)}}});var RN={};ye(RN,{STATUS:()=>Jq,internal:()=>xp,lifecycle:()=>co,reset:()=>Qq,statusForComponent:()=>jq});var Bp=se(()=>{Xq();Zq()});var kp=v((BUe,rG)=>{"use strict";var _s=J(),Rn=(H(),M(W)),oce=yB(),ace=Es(),{validateEvent:bN}=ls(),Fp=fs(),cce=require("process"),{resetDatabases:lce}=(we(),M(mt)),uce={[Rn.ITC_EVENT_TYPES.SCHEMA]:dce,[Rn.ITC_EVENT_TYPES.USER]:tG,[Rn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:mce};async function dce(e){let t=bN(e);if(t){_s.error(t);return}_s.trace("ITC schemaHandler received schema event:",e),await oce(e.message),await fce(e.message)}a(dce,"schemaHandler");async function fce(e){try{Fp.resetReadTxn(Rn.SYSTEM_SCHEMA_NAME,Rn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Fp.resetReadTxn(Rn.SYSTEM_SCHEMA_NAME,Rn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Fp.resetReadTxn(Rn.SYSTEM_SCHEMA_NAME,Rn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=lce();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){_s.error(t)}}a(fce,"syncSchemaMetadata");var eG=[];async function tG(e){try{try{Fp.resetReadTxn(Rn.SYSTEM_SCHEMA_NAME,Rn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Fp.resetReadTxn(Rn.SYSTEM_SCHEMA_NAME,Rn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){_s.warn(r)}let t=bN(e);if(t){_s.error(t);return}_s.trace(`ITC userHandler ${Rn.HDB_ITC_CLIENT_PREFIX}${cce.pid} received user event:`,e),await ace.setUsersWithRolesCache();for(let r of eG)r()}catch(t){_s.error(t)}}a(tG,"userHandler");tG.addListener=function(e){eG.push(e)};async function mce(e){try{let t=bN(e);if(t){_s.error(t);return}_s.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Bp(),M(RN)),{getWorkerIndex:n}=tt(),{sendItcEvent:s}=ls(),i=r.componentStatusRegistry.getAllStatuses(),o=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:Rn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:o,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?_s.trace(`Sent component status response directly to thread ${u}`):(u===void 0?_s.debug("No originator threadId, falling back to broadcast"):_s.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){_s.error("Error handling component status request:",t)}}a(mce,"componentStatusRequestHandler");rG.exports=uce});var ls=v(($Ue,sG)=>{"use strict";var kUe=J(),AN=oe(),pce=(H(),M(W)),{ITC_ERRORS:Hp}=Jr(),{parentPort:HUe,threadId:hce,isMainThread:Ece,workerData:qUe}=require("worker_threads"),{onMessageFromWorkers:_ce,broadcast:GUe,broadcastWithAcknowledgement:gce}=tt();sG.exports={sendItcEvent:Sce,validateEvent:nG,SchemaEventMsg:Tce,UserEventMsg:yce};var pS;_ce(async(e,t)=>{pS=pS||kp(),nG(e),pS[e.type]&&await pS[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Sce(e){return!Ece&&e.message&&(e.message.originator=hce),gce(e)}a(Sce,"sendItcEvent");function nG(e){if(typeof e!="object")return Hp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||AN.isEmpty(e.type))return Hp.MISSING_TYPE;if(!e.hasOwnProperty("message")||AN.isEmpty(e.message))return Hp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||AN.isEmpty(e.message.originator))return Hp.MISSING_ORIGIN;if(pce.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Hp.INVALID_EVENT(e.type)}a(nG,"validateEvent");function Tce(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(Tce,"SchemaEventMsg");function yce(e){this.originator=e}a(yce,"UserEventMsg")});var zo=v((YUe,cG)=>{"use strict";var iG=(H(),M(W)),KUe=oe(),hS=J(),oG=nB(),Nd,{sendItcEvent:aG}=ls();function Rce(e){try{hS.debug("signalSchemaChange called with message:",e),Nd=Nd||kp();let t=new oG(iG.ITC_EVENT_TYPES.SCHEMA,e);return Nd.schema(t),aG(t)}catch(t){hS.error(t)}}a(Rce,"signalSchemaChange");function bce(e){try{hS.trace("signalUserChange called with message:",e),Nd=Nd||kp();let t=new oG(iG.ITC_EVENT_TYPES.USER,e);return Nd.user(t),aG(t)}catch(t){hS.error(t)}}a(bce,"signalUserChange");cG.exports={signalSchemaChange:Rce,signalUserChange:bce}});function qp(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}function lG(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new qs(e));for(let[r,n]of t)e.has(r)?r.toLowerCase()==="set-cookie"&&e.append?.(r,n,!0):e.set(r,n);return e}var qs,Gp=se(()=>{qs=class extends Map{static{a(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}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(qp,"appendHeader");a(lG,"mergeHeaders")});function ES(e,t,r=Ice){let n;return function(...i){return n?n.length*IN>r?t(...i):new Promise((o,c)=>{n.push({args:i,fn(){try{let l=e(...i);o(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,o){setImmediate(()=>{let c=performance.now();IN=(IN*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var fG,Ace,Ice,uG,wce,wN,dG,IN,NN=se(()=>{fG=b(wr()),Ace=3e3,Ice=2e4,uG=0,wce=3e4,wN=3e3,dG=performance.now()+wN,IN=0;a(ES,"throttle");setInterval(()=>{let e=performance.now();e-dG-wN>Ace&&uG+wce<e&&(fG.default.warn?.("JavaScript execution has taken too long and is not allowing proper event queue cycling, consider using 'await new Promise(setImmediate)' in code that will execute for a long duration"),uG=e),dG=e},wN).unref()});var bG={};ye(bG,{EVICTED:()=>hl,INVALIDATED:()=>kn,coerceType:()=>gS,makeTable:()=>TS});function TS(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:g,trackDeletes:R}=e;E??=0;let{attributes:S}=e;S||(S=[]);let y=nI(i,n,l),N,I,$={},ee=Promise.resolve(),q,k,j;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(q=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(k=K),K.expiresAt&&(j=K),K.isPrimaryKey&&($=K);let Y,le=[],fe=[],te=1,ge=2,be={},Ye={},Ge=864e5,Ar=0,tr,Qr,xr,Ou=!1,jc,Ut,oi,Ua=Fl.get(F.REPLICATION_DATABASES);if(Array.isArray(Ua)){for(let K of Ua)if(K.name===c&&K.replicateTo>=0){oi=K.replicateTo;break}}let c_=i.getRange({start:!1,end:!1}).constructor,mm=10,l_=6;g&&gm(),Km(i.env.path,K=>{if(I)return Ba(K)});class pm extends Il{static{a(this,"Updatable")}getUpdatedTime(){return Wa.get(this.getRecord())?.version}getExpiresAt(){return Wa.get(this.getRecord())?.expiresAt}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.set(_,new Rp(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(_,T){return this.addTo(_,-T)}}class Me extends ur{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=o;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=q;static updatedTimeProperty=k;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(_,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)_.intermediateSource=!0,this.sources.unshift(_);else{if(this.sources.some(D=>!D.intermediateSource)){if(this.sources.some(D=>D.name===_.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(_)}I=I||_.get&&(!_.get.reliesOnPrototype||_.prototype.get),N=N||_.load;let C=a(D=>{let A=this.sources;if(A=A.filter(U=>U.intermediateSource&&U[D]&&(!U[D].reliesOnPrototype||U.prototype[D])),A.length>0)if(A.length===1){let U=A[0];return(w,L,G)=>{if(w?.source!==U)return U[D](L,G,w)}}else return(U,w,L)=>{let G=[];for(let z of A){if(U?.source===z)break;G.push(z[D](w,L,U))}return Promise.all(G)}},"getApplyToIntermediateSource"),P=this.sources[this.sources.length-1];P.intermediateSource&&(P={});let O=a(D=>{if(P[D]&&(!P[D].reliesOnPrototype||P.prototype[D]))return(A,U,w)=>{if(!A?.source)return P[D](U,w,A)}},"getApplyToCanonicalSource");be={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},Ye={put:C("put"),patch:C("patch"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")};let x=P.shouldRevalidateEvents;return(async()=>{let D=!1,A,U=a(async(w,L)=>{let G=w.value,z=w.table?ve[c][w.table]:Me;if(c===Rm&&(w.table===Uu.ROLE_TABLE_NAME||w.table===Uu.USER_TABLE_NAME)&&(D=!0),w.id===void 0&&(w.id=G[z.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));w.source=_;let Q={residencyId:Qc(w.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:w.nodeId,async:!0},B=w.id,Ee=await z.getResource(B,L,Q);switch(w.finished&&await w.finished,w.type){case"put":return x?Ee._writeInvalidate(B,G,Q):Ee._writeUpdate(B,G,!0,Q);case"patch":return x?Ee._writeInvalidate(B,G,Q):Ee._writeUpdate(B,G,!1,Q);case"delete":return Ee._writeDelete(B,Q);case"publish":case"message":return Ee._writePublish(B,G,Q);case"invalidate":return Ee._writeInvalidate(B,G,Q);case"relocate":return Ee._writeRelocate(B,Q);default:ke.default.error?.("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=_.subscribe;w&&R==null&&(R=!0);let L={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},G=_.subscribeOnThisThread?_.subscribeOnThisThread((0,Bl.getWorkerIndex)(),L):(0,Bl.getWorkerIndex)()===0,z=w&&G&&await _.subscribe?.(L);if(z){let Q;for await(let B of z)try{if(!(B.type==="transaction"?B.writes[0]:B)){ke.default.error?.("Bad subscription event",B);continue}if(B.source=_,B.type==="end_txn"){Q?.resolve();let pe;if(B.localTime&&A!==B.localTime&&B.remoteNodeIds?.length>0&&(pe=a(()=>{let re=[Symbol.for("seq"),B.remoteNodeIds[0]],ie=d.get(re),Oe=ie?.nodes;Oe||(Oe=[]);for(let ce of B.remoteNodeIds.slice(1)){let xe=Oe.find(Ce=>Ce.id===ce);Oe=Oe.filter(Ce=>Ce.id!==ce||Ce===xe),xe||(xe={id:ce,seqId:0},Oe.push(xe)),xe.seqId=Math.max(ie?.seqId??1,B.localTime),ce===Q?.nodeId&&(xe.lastTxnTime=B.timestamp)}let ue=Math.max(ie?.seqId??1,B.localTime);ke.default.trace?.("Received txn",c,ue,new Date(ue),B.localTime,new Date(B.localTime),B.remoteNodeIds),d.put(re,{seqId:ue,nodes:Oe})},"updateRecordedSequenceId"),A=B.localTime),B.onCommit){let re=Q?Q.committed.then(B.onCommit):B.onCommit();pe&&(re?.then?re.then(pe):pe())}else pe&&pe();continue}if(Q)if(B.beginTxn)Q.resolve();else{Q.writePromises.push(U(B,Q));continue}!B.timestamp&&B.version&&(B.timestamp=B.version);let me=At(B,()=>{if(B.type==="transaction"){let pe=[];for(let re of B.writes)try{pe.push(U(re,B))}catch(ie){throw ie.message+=" writing "+JSON.stringify(re)+" of event "+JSON.stringify(B),ie}return Promise.all(pe)}else if(B.type==="define_schema"){let pe=this.attributes.slice(0),re=!1;for(let ie of B.attributes)pe.find(Oe=>Oe.name===ie.name)||(pe.push(ie),re=!0);re&&(Xe({table:s,database:c,attributes:pe,origin:"cluster"}),Vp.signalSchemaChange(new Kp.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return B.beginTxn?(Q=B,Q.writePromises=[U(B,B)],new Promise(pe=>{Q.resolve=()=>pe(Promise.all(Q.writePromises))})):U(B,B)});Q&&(Q.committed=me),D&&me&&!me?.waitingForUserChange&&(me.then(()=>Vp.signalUserChange(new Kp.UserEventMsg(process.pid))),me.waitingForUserChange=!0),B.onCommit&&(me?me.then(B.onCommit):B.onCommit())}catch(Ee){ke.default.error?.("error in subscription handler",Ee)}}}catch(w){ke.default.error?.(w)}})(),this}static get isCaching(){return I}static get shouldRevalidateEvents(){return this.prototype.get!==Me.prototype.get}static getResource(_,T,C){let P=super.getResource(_,T,C);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),_!=null&&this.loadAsInstance!==!1){Gi(_);try{if(P.getRecord?.())return P;if(typeof _=="object"&&_&&!Array.isArray(_))throw new Error(`Invalid id ${JSON.stringify(_)}`);let O=!C?.async||i.cache?.get?.(_),x=Br(T),D=x.getReadTxn();if(D?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Do(_,T,{transaction:D,ensureLoaded:C?.ensureLoaded},O,A=>{if(A?Me._updateResource(P,A):P.#e=null,T.onlyIfCached){if(!P.doesExist())throw new dt.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let U=pn(_,A,T,P);if(U)return x?.disregardReadTxn(),P.#i=!0,T.loadedFromSource=!0,Gs(U,w=>(Me._updateResource(P,w),P))}return P})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(_)),O}}return P}static _updateResource(_,T){_.#n=T,_.#e=T?.value??null,_.#r=T?.version}ensureLoaded(){let _=pn(this.getId(),this.#n,this.getContext());if(_)return this.#i=!0,this.getContext().loadedFromSource=!0,Gs(_,T=>{this.#n=T,this.#e=T.value,this.#r=T.version})}static getNewId(){let _=$?.type;if(_==="String"||_==="ID")return super.getNewId();if(!Ut){let O=i.getEntry(Symbol.for("id_allocation")),x=O?.value,D;if(x&&x.nodeName===server.hostname&&(!Fce(i)||x.pid===process.pid)){let A=x.start,U=x.end;D=A;for(let w of i.getKeys({start:U,end:A,limit:1,reverse:!0}))D=w}else x=P(O?.version??null),D=x.start;Ut=new BigInt64Array([BigInt(D)+1n]),Ut=new BigInt64Array(i.getUserSharedBuffer("id",Ut.buffer)),Ut.maxSafeId=x.end}let T=Number(Atomics.add(Ut,0,1n)),C=_==="Int"?512:1048576;if(T+C>=Ut.maxSafeId){let O=a(x=>{Ut.maxSafeId=T+(_==="Int"?1023:4194303);let D=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,A=x?void 0:i.useReadTransaction(),U=Number(Ut[0]);for(let G of i.getKeys({start:U+1,end:D,limit:1,transaction:A}))D=G;A?.done();let{value:w,version:L}=i.getEntry(Symbol.for("id_allocation"));if(Ut.maxSafeId<D){if(w.end>Ut.maxSafeId-100)return;ke.default.info?.("New id allocation",T,Ut.maxSafeId,L),i.put(Symbol.for("id_allocation"),{start:w.start,end:Ut.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),L)}else{ke.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Ut.maxSafeId}, but id of ${D} detected`);let G=P(L);G.alreadyUpdated||Atomics.store(Ut,0,BigInt(G.start+1)),Ut.maxSafeId=G.end}},"updateEnd");T+C===Ut.maxSafeId?setImmediate(O):T+100>=Ut.maxSafeId&&(ke.default.warn?.(`Synchronous id allocation required on table ${s}${_=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>O(!0)))}return T;function P(O){let x=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,D=x/4,A,U,w=!1,L,G;do{L=Math.floor(Math.random()*x),G={start:L,end:L+(_==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},A=0;for(let z of i.getKeys({start:L,limit:1,reverse:!0}))A=z;U=x;for(let z of i.getKeys({start:L+1,end:x,limit:1}))U=z;D*=.875,D<1e3&&!w&&(w=!0,ke.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${_==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,L,A,U,D))}while(!(D<U-L&&(D<L-A||A===0)));return i.transactionSync(()=>{let z=i.getEntry(Symbol.for("id_allocation"));return(z?.version??null)==O?(ke.default.info?.("Allocated new id range",G),i.put(Symbol.for("id_allocation"),G,Date.now()),G):(ke.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...z.value})})}}static setTTLExpiration(_){if(typeof _=="number")h=_*1e3,E||(E=0);else if(_&&typeof _=="object")h=_.expiration*1e3,E=(_.eviction||0)*1e3,Ge=_.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");Ge=Ge||(h+E)/4,Ba()}static getResidencyRecord(_){return d.get([Symbol.for("residency_by_id"),_])}static setResidency(_){Me.getResidency=_&&((T,C)=>{try{return _(T,C)}catch(P){throw P.message+=` in residency function for table ${s}`,P}})}static setResidencyById(_){Me.getResidencyById=_&&(T=>{try{return _(T)}catch(C){throw C.message+=` in residency function for table ${s}`,C}})}static getResidency(_,T){if(Me.getResidencyById)return Me.getResidencyById(_[t]);let C=oi;if(T.replicateTo!=null){if(Array.isArray(T.replicateTo))return T.replicateTo.includes(server.hostname)?T.replicateTo:[server.hostname,...T.replicateTo];T.replicateTo>=0&&(C=T.replicateTo)}if(C>=0&&server.nodes){let P=[server.hostname];if(T.previousResidency)P.push(...T.previousResidency.slice(0,C));else{let O=server.nodes.map(A=>A.name),x=Math.floor(O.length*Math.random());P.push(...O.slice(x,x+C));let D=x+C-O.length;D>0&&P.push(...O.slice(0,D))}return P}}static enableAuditing(){g||(g=!0,gm(),Me.audit=!0)}static coerceId(_){return _===""?null:gS(_,$)}static async dropTable(){delete ve[c][s];for(let _ of i.getRange({versions:!0,snapshot:!1,lazy:!0}))_.metadataFlags&Zr&&_.value&&Va(_.value);if(c===o){for(let _ of S)d.remove(Me.tableName+"/"+_.name),r[_.name]?.drop();d.remove(Me.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),ON.default.unlinkSync(i.env.path);Vp.signalSchemaChange(new Kp.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(_){let T=this.constructor;if(typeof _=="string"&&T.loadAsInstance!==!1)return this.getProperty(_);if(hm(_))return this.search(_);if(_&&_.id===void 0&&!_.toString()){let C={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Me.getRecordCount().then(P=>(C.recordCount=P.recordCount,C.estimatedRecordRange=P.estimatedRange,C)):C}if(_!==void 0&&T.loadAsInstance===!1){let C=this.getContext(),P=Br(C),O=P.getReadTxn();if(O?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let x=Ds(_);Gi(x);let D=!0;return _.checkPermission&&(D=this.allowRead(C.user,_)),Gs(Gs(D,A=>{if(!A)throw new dt.AccessViolation(C.user);let U=!0;return Do(x,C,{transaction:O,ensureLoaded:U},!1,w=>{if(C.onlyIfCached){if(!w?.value)throw new dt.ServerError("Entry is not cached",504)}else if(U){let L=pn(x,w,C);if(L)return P?.disregardReadTxn(),C.loadedFromSource=!0,L.then(G=>G?.value)}return w?.value})}),A=>{let U=_?.select;return U&&A!=null?rd(U,this.constructor)(A):A})}if(_?.property)return this.getProperty(_.property);if(this.doesExist()||_?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(_,T){let C=Mn(_,T);if(C?.read){if(C.isSuperUser)return!0;let P=C.attribute_permissions,O=T?.select;if(P?.length>0||Ou&&O){if(T||(T={}),O){let x=Array.isArray(O)?O:[O],D=P?.length>0&&CN(P,"read");T.select=x.map(A=>{let U=A.name||A;if(!D||D[U]){let w=xr[U]?.definition?.tableClass;if(w){if(A.name||(A={name:A}),!A.checkPermission&&T.checkPermission&&(A.checkPermission=T.checkPermission),!w.prototype.allowRead.call(null,_,A))return!1;if(!A.select)return A.name}return A}}).filter(Boolean)}else T.select=P.filter(x=>x.read&&!xr[x.attribute_name]).map(x=>x.attribute_name);return T}else return!0}}allowUpdate(_,T,C){let P=Mn(_,C);if(P?.update){let O=P.attribute_permissions;if(O?.length>0){let x=CN(O,"update");for(let D in T)if(!x[D])return!1;for(let D of O){let A=D.attribute_name;!D.update&&!(A in T)&&(T[A]=this.getProperty(A))}}return xa(this.getContext())}}allowCreate(_,T,C){if(this.isCollection){let P=Mn(_,C);if(P?.insert){let O=P.attribute_permissions;if(O?.length>0){let x=CN(O,"insert");for(let D in T)if(!x[D])return!1;return xa(this.getContext())}else return xa(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,T){return Mn(_,T)?.delete&&xa(this.getContext())}update(_,T){let C,P=typeof T=="boolean"||T===void 0&&(_==null||typeof _=="object"&&!(_ instanceof URLSearchParams)),O=!1;P?(O=T,T=_,C=this.getId()):C=Ds(_);let x=this.getContext();if(!Br(x))throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;if(typeof T=="object"&&T)if(O)Object.isFrozen(T)&&(T={...T}),this.#e={},this.#t=T;else if(P){let A=this.#t;A&&(T=Object.assign(A,T)),this.#t=T}else{let A=!0;if(_==null)throw new TypeError("Can not put a record without a target");return _.checkPermission&&(A=this.allowUpdate(x.user,T,_)),Gs(A,U=>{if(!U)throw new dt.AccessViolation(x.user);return Gs(i.get(Ds(_)),w=>{let L=new pm(w);return L._setChanges(T),this._writeUpdate(C,L.getChanges(),!1),L})})}return this._writeUpdate(C,this.#t,O),this}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.#s===pG?this.set(_,(+this.getProperty(_)||0)+T):(this.#s||this.update(),this.set(_,new Rp(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(_,T){if(typeof T=="number")return this.addTo(_,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(_){this.#t=_}setRecord(_){this.#e=_}invalidate(_){let T=!0,C=this.getContext();return _?.checkPermission&&(T=this.allowDelete(C.user,_,C)),Gs(T,P=>{if(!P)throw new dt.AccessViolation(C.user);this._writeInvalidate(_?Ds(_):this.getId())})}_writeInvalidate(_,T,C){let P=this.getContext();Gi(_),Br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:be.invalidate?.bind(this,P,_),beforeIntermediate:Mu(T,Ye.invalidate?.bind(this,P,_)),commit:a((x,D)=>{if(!(Fr(x,D,C?.nodeId)<=0)){T??=null;for(let A in r)T||(T={}),T[A]===void 0&&(T[A]=this.getProperty(A));ke.default.trace?.(`Invalidating entry in ${s} id: ${_}, timestamp: ${new Date(x).toISOString()}`),y(_,T,D,x,kn,g,{user:P?.user,residencyId:C?.residencyId,nodeId:C?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(_,T){let C=this.getContext();Gi(_),Br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:be.relocate?.bind(this,C,_),beforeIntermediate:Ye.relocate?.bind(this,C,_),commit:a((O,x)=>{if(Fr(O,x,T?.nodeId)<=0)return;let D=Me.getResidencyRecord(T.residencyId),A=0,U=null,w=x?.value;if(D&&!D.includes(server.hostname)){for(let L in r)U||(U={}),U[L]=w[L];A=kn}else U=w;ke.default.trace?.(`Relocating entry id: ${_}, timestamp: ${new Date(O).toISOString()}`),y(_,U,x,O,A,g,{user:C.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(_,T){let C={previousResidency:this.getResidencyRecord(_.residencyId),isRelocation:!0},P=Fa(this.getResidency(T.value,C)),O;if(P){if(!P.includes(server.hostname))return!1;O=Qc(P)}let x=0;ke.default.debug?.("Performing a relocate of an entry",_.key,T.value,P);let D=y(_.key,T.value,_,_.version,x,!0,{residencyId:O,expiresAt:T.expiresAt},"relocate",!1,null);return!0}static evict(_,T,C){let P=this.Source,O;if(!((I||g)&&(!T||(O=i.getEntry(_),!O||!T)||O.version!==C))){if(I){if(i.hasLock(_,O.version))return;let x;for(let D in r)x||(x={}),x[D]=T[D];if(x)return y(_,x,O,C,hl,null,null,null,!0)}return i.ifVersion(_,C,()=>{Pu(_,T,null)}),pl(i,O??i.getEntry(_),C)}}lock(){throw new Error("Not yet implemented")}static operation(_,T){return _.table||=s,_.schema||=c,global.operation(_,T)}put(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!0);else{let C=!0;if(_==null)throw new TypeError("Can not put a record without a target");let P=this.getContext();return _.checkPermission&&(C=this.allowUpdate(P.user,T,_)),Gs(C,O=>{if(!O)throw new dt.AccessViolation(P.user);if(Array.isArray(T))for(let x of T){let D=x[t];this._writeUpdate(D,x,!0)}else{let x=Ds(_);this._writeUpdate(x,T,!0)}})}}create(_,T){let C=!0,P=this.getContext();if(!T&&!(_ instanceof URLSearchParams)&&(T=_,_=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return _?.checkPermission&&(C=this.allowCreate(P.user,T,_)),Gs(C,O=>{if(!O)throw new dt.AccessViolation(P.user);let x=Ds(_)??T[t];if(x===void 0)x=this.constructor.getNewId();else if(i.get(x))throw new dt.ClientError("Record already exists",409);return this._writeUpdate(x,T,!0),T})}patch(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!1);else{let C=this.update(_,T);if(C?.then)return C.then(()=>{})}}_writeUpdate(_,T,C,P){let O=this.getContext(),x=Br(O);Gi(_);let D=this.#n??i.getEntry(_);this.#s=C?pG:vce;let A=a(w=>C?w.put?()=>w.put(O,_,T):null:w.patch?()=>w.patch(O,_,T):w.put?()=>w.put(O,_,wl(this)):null,"writeToSources"),U={key:_,store:i,entry:D,nodeName:O?.nodeName,validate:a(w=>{T||(T=this.#t),C||T&&Kg(this.#t===T?this:T)?O?.source||(x.checkOverloaded(),this.validate(T,!C),k&&(T[k.name]=k.type==="Date"?new Date(w):k.type==="String"?new Date(w).toISOString():w),C&&(t&&T[t]!==_&&(T[t]=_),q&&(D?.value?T[q.name]=D?.value[q.name]:T[q.name]=q.type==="Date"?new Date(w):q.type==="String"?new Date(w).toISOString():w),T=wl(T))):x.removeWrite(U)},"validate"),before:A(be),beforeIntermediate:Mu(T,A(Ye)),commit:a((w,L,G)=>{if(G){if(O&&L?.version>(O.lastModified||0)&&(O.lastModified=L.version),this.#n=L,L?.value&&L.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");C||(this.#e=L?.value??null)}this.#t=void 0,this.#r=w;let z=L?.value,Q;this.#s=0;let B=!1,Ee=Fr(w,L,P?.nodeId),me;if(Ee<=0){if(g){let ue=L.localTime,ce=L.version;ke.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(w),"applying later update from:",new Date(ce),"local recorded time",new Date(ue));let xe=[];for(;ue>w||ce>=w&&ue>0;){let Ce=l.get(ue);if(!Ce)break;let Le=It(Ce);if(ce=Le.version,ce>=w){if(ce===w){if(Ee=Fr(w,{version:ce,localTime:ue},P?.nodeId),Ee===0)return;if(Ee>0){ue=Le.previousLocalTime;continue}}if(Le.type==="patch")xe.push(Le),me=T;else if(Le.type==="put"||Le.type==="delete")return}ue=Le.previousLocalTime}ue||ke.default.debug?.("No further audit history, applying incremental updates based on available history",_,"existing version preserved",L),xe.sort((Ce,Le)=>Ce.version-Le.version);for(let Ce of xe){let Le=Ce.getValue(i);if(ke.default.debug?.("Rebuilding update with future patch:",new Date(Ce.version),Le,Ce),Q=x_(Q??T,Le,C),!Q)return}}else{if(C)return;Q=x_(Q??T,z,C),ke.default.debug?.("Rebuilding update without audit:",Q)}ke.default.trace?.("Rebuilt record to save:",Q," is full update:",C)}let pe;if(C&&!Q?pe=T:this.constructor.loadAsInstance===!1?pe=wl(z,Q??T):(this.#e=z,pe=wl(this,Q??T)),this.#e=pe,pe&&pe.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let re;if(P?.residencyId!=null)re=P.residencyId;else{D?.residencyId&&(O.previousResidency=Me.getResidencyRecord(D.residencyId));let ue=Fa(Me.getResidency(pe,O));if(ue&&!ue.includes(server.hostname))if(me??=pe,B=!0,Me.getResidencyById)pe=void 0;else{pe=null;for(let ce in r)pe||(pe={}),pe[ce]=me[ce]}re=Qc(ue)}C||(me=T);let ie=O?.expiresAt??(h?h+Date.now():-1);ke.default.trace?.(`Saving record with id: ${_}, timestamp: ${new Date(w).toISOString()}${ie?", expires at: "+new Date(ie).toISOString():""}${L?", replaces entry from: "+new Date(L.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(pe).slice(0,100)}catch{return""}})()),Pu(_,z,pe);let Oe=C?"put":"patch";y(_,pe,L,w,B?kn:0,g,{omitLocalRecord:B,user:O?.user,residencyId:re,expiresAt:ie,nodeId:P?.nodeId,originatingOperation:O?.originatingOperation,tableToTrack:c==="system"?null:s},Oe,!1,me),O.expiresAt&&Ba()},"commit")};x.addWrite(U)}async delete(_){if(hm(_)){_.select=["$id"];for await(let T of this.search(_))this._writeDelete(T.$id);return!0}if(_){let T=!0,C=this.getContext();return _.checkPermission&&(T=this.allowDelete(C.user,_,C)),Gs(T,P=>{if(!P)throw new dt.AccessViolation(C.user);let O=Ds(_);return this._writeDelete(O),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(_,T){let C=Br(this.getContext());Gi(_);let P=this.getContext();return C.addWrite({key:_,store:i,entry:this.#n,nodeName:P?.nodeName,before:be.delete?.bind(this,P,_),beforeIntermediate:Ye.delete?.bind(this,P,_),commit:a((O,x,D)=>{let A=x?.value;D&&(P&&x?.version>(P.lastModified||0)&&(P.lastModified=x.version),Me._updateResource(this,x)),!(Fr(O,x,T?.nodeId)<=0)&&(Pu(this.getId(),A),ke.default.trace?.(`Deleting record with id: ${_}, txn timestamp: ${new Date(O).toISOString()}`),g||R?(y(_,null,x,O,0,g,{user:P?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),g||Ba()):pl(i,x))},"commit")}),!0}search(_){let T=this.getContext(),C=Br(T);if(!_)throw new Error("No query provided");if(_.parseError)throw _.parseError;if(_.checkPermission&&!this.allowRead(T.user,_))throw new dt.AccessViolation(T.user);T&&(T.lastModified=Pce);let P=_.conditions;P?P.length===void 0&&(P=P[Symbol.iterator]?Array.from(P):[P]):P=Array.isArray(_)?_:_[Symbol.iterator]?Array.from(_):[];let O=_.id??this.getId();O&&(P=[{attribute:null,comparator:Array.isArray(O)?"prefix":"starts_with",value:O}].concat(P));let x,D={};function A(ie,Oe){let ue;switch(Oe){case"and":case void 0:if(ie.length<1)throw new Error('An "and" operator requires at least one condition');ue=!0;break;case"or":if(ie.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Oe)}for(let ce of ie){if(ce.conditions){ce.conditions=A(ce.conditions,ce.operator);continue}let xe=ce[0]??ce.attribute,Ce=xe==null?$:Qi(S,xe);if(Ce)(Ce.type||iI[ce.comparator])&&(ce[1]===void 0?ce.value=w(ce.value,Ce):ce[1]=w(ce[1],Ce));else if(xe!=null&&!_.allowConditionsOnDynamicAttributes)throw(0,dt.handleHDBError)(new Error,`${xe} is not a defined attribute`,404);if(ce.chainedConditions)if(ce.chainedConditions.length===1&&(!ce.operator||ce.operator=="and")){let Le=ce.chainedConditions[0],De,ht;if(Le.comparator==="gt"||Le.comparator==="greater_than"||Le.comparator==="ge"||Le.comparator==="greater_than_equal"?(De=ce,ht=Le):(De=Le,ht=ce),De.comparator!=="lt"&&De.comparator!=="less_than"&&De.comparator!=="le"&&De.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Nt=ht.comparator==="ge"||ht.comparator==="greater_than_equal",xt=De.comparator==="le"||De.comparator==="less_than_equal";ce.comparator=(Nt?"ge":"gt")+(xt?"le":"lt"),ce.value=[ht.value,De.value]}else throw new Error("Multiple chained conditions are not currently supported")}return ie}a(A,"prepareConditions");function U(ie,Oe){if(_.enforceExecutionOrder)return ie;for(let ue of ie)ue.conditions&&(ue.conditions=U(ue.conditions,ue.operator));return ie.length>1&&Oe!=="or"?Nce(ie,Tg(Me)):ie}a(U,"orderConditions");function w(ie,Oe){return Array.isArray(ie)?ie.map(ue=>gS(ue,Oe)):gS(ie,Oe)}a(w,"coerceTypedValues");let L=_.operator;(P.length>0||L)&&(P=A(P,L));let G=typeof _.sort=="object"&&_.sort,z;if(G&&L!=="or"){let ie=G.attribute;if(ie==null)throw new dt.ClientError("Sort requires an attribute");if(x=P.find(Oe=>Zu(Oe.attribute)===Zu(ie)),!x){let Oe=Qi(S,ie);if(!Oe)throw(0,dt.handleHDBError)(new Error,`${Array.isArray(ie)?ie.join("."):ie} is not a defined attribute`,404);if(Oe.indexed)x={...G,comparator:"sort"},P.push(x);else if(P.length===0&&!_.allowFullScan)throw(0,dt.handleHDBError)(new Error,`${Array.isArray(ie)?ie.join("."):ie} is not indexed and not combined with any other conditions`,404)}x&&(x.descending=!!G.descending)}P=U(P,L),G&&(x&&P[0]===x?G.next&&(z={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(x&&P.splice(P.indexOf(x),1),z=G));let Q=_.select;if(P.length===0&&(P=[{attribute:t,comparator:"greater_than",value:!0}]),_.explain)return{conditions:P,operator:L,postOrdering:z,selectApplied:!!Q};let B=C.useReadTxn(),Ee=oI(P,L,Me,B,_,T,(ie,Oe)=>_m(ie,Q,T,B,Oe),D),me=_.ensureLoaded!==!1,pe=Me.transformEntryForSelect(Q,T,B,D,me,!0),re=Me.transformToOrderedSelect(Ee,Q,z,T,B,pe);return(_.offset||_.limit!==void 0)&&(re=re.slice(_.offset,_.limit!==void 0?(_.offset||0)+_.limit:void 0)),re.onDone=()=>{re.onDone=null,C.doneReadTxn()},re.selectApplied=!0,re.getColumns=()=>{if(Q){let ie=[];for(let Oe of Q)Oe==="*"?ie.push(...S.map(ue=>ue.name)):ie.push(Oe.name||Oe);return ie}return S.filter(ie=>!ie.computed&&!ie.relationship).map(ie=>ie.name)},re}static transformToOrderedSelect(_,T,C,P,O,x){let D=new c_;if(C){_=_m(_,T,P,O,null);let A;D.iterate=function(){let w,L=_[Symbol.asyncIterator]?_[Symbol.asyncIterator]():_[Symbol.iterator](),G,z=C.dbOrderedAttribute,Q,B,Ee=!0;function me(re){let ie=re.next&&me(re.next),Oe=re.descending;return P.sort=re,(ue,ce)=>{let xe=Lu(ue,re.attribute,P),Ce=Lu(ce,re.attribute,P),Le=Oe?(0,kl.compareKeys)(Ce,xe):(0,kl.compareKeys)(xe,Ce);return Le===0?ie?.(ue,ce)||0:Le}}a(me,"createComparator");let pe=me(C);return{async next(){let re;if(w)if(re=w.next(),re.done){if(G)return D.onDone&&D.onDone(),re}else return{value:await x.call(this,re.value)};A=[],Q&&A.push(Q);do if(re=await L.next(),re.done){if(G=!0,A.length)break;return D.onDone&&D.onDone(),re}else{let ie=re.value;if(ie?.then&&(ie=await ie),z){let Oe=Lu(ie,z,P);if(Ee)Ee=!1,B=Oe;else if(Oe!==B){B=Oe,Q=ie;break}}A.push(ie)}while(!0);return C.isGrouped,A.sort(pe),w=A[Symbol.iterator](),re=w.next(),re.done?(D.onDone&&D.onDone(),re):{value:await x.call(this,re.value)}},return(){return D.onDone&&D.onDone(),L.return()},throw(){return D.onDone&&D.onDone(),L.throw()}}};let U=a(w=>{if(typeof T=="object"&&Array.isArray(w.attribute))for(let L=0;L<T.length;L++){let G=T[L],z;if(G.name===w.attribute[0]){for(z=G.sort||(G.sort={});z.next;)z=z.next;z.attribute=w.attribute.slice(1),z.descending=w.descending}else G===w.attribute[0]&&(T[L]=z={name:G,sort:{attribute:w.attribute.slice(1),descending:w.descending}})}w.next&&U(w.next)},"applySortingOnSelect");U(C)}else D.iterate=(_[Symbol.asyncIterator]||_[Symbol.iterator]).bind(_),D=D.map(function(A){try{let U=x.call(this,A);return typeof U?.catch=="function"?U.catch(w=>{throw w.partialObject={[t]:A.key},w}):U}catch(U){throw U.partialObject={[t]:A.key},U}});return D}static transformEntryForSelect(_,T,C,P,O,x){let D;O&&I&&!(typeof _=="string"?[_]:_)?.every(w=>{let L;return typeof w=="object"?L=w.name:L=w,r[L]||L===t})&&(D=!0);let A,U=a(function(w){let L;if(T?.transaction?.stale&&(T.transaction.stale=!1),w!=null){if(L=w.deref?w.deref():w.value,!L&&(w.key===void 0||w.deref)||w.metadataFlags&kn){if(w.metadataFlags&kn&&T.replicateFrom===!1&&x&&w.residencyId)return lc.SKIP;if(w=Do(w.key??w,T,{transaction:C,lazy:_?.length<4,ensureLoaded:O},this?.isSync,G=>G),w?.then)return w.then(U.bind(this));L=w?.value}if(D&&w?.metadataFlags&(kn|hl)||w?.expiresAt!=null&&w?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:w.key,message:"This entry has expired"};let G=pn(w.key??w,w,T);if(G?.then)return G.then(U)}}if(L==null)return x?lc.SKIP:L;if(_&&!(_[0]==="*"&&_.length===1)){let G,z=a((B,Ee)=>{let me;typeof B=="object"?me=B.name:me=B;let pe=xr?.[me],re;if(pe){let ie=P?.[me];if(ie)if(ie.hasMappings){let ue=pe.from?L[pe.from]:Zu(w.key);re=ie.get(ue),re||(re=[])}else re=ie.fromRecord?.(L);else re=pe(L,T,w,!0);let Oe=a(ue=>{if(pe.directReturn)return Ee(ue,me);if(ue&&typeof ue=="object"){let ce=pe.definition?.tableClass||Me;A||(A={});let xe=A[me]||(A[me]=ce.transformEntryForSelect(me===B?null:B.select||(Array.isArray(B)?B:null),T,C,ie,O));if(Array.isArray(ue)){let Ce=[],Le=ce.transformToOrderedSelect(ue,B.select,typeof B.sort=="object"&&B.sort,T,C,xe)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),De=a(Nt=>{for(;!Nt.done;){if(Nt?.then)return Nt.then(De);Ce.push(Nt.value),Nt=Le.next()}Ee(Ce,me)},"nextValue"),ht=De(Le.next());ht&&(G||(G=[]),G.push(ht));return}else if(ue=xe.call(this,ue),ue?.then){G||(G=[]),G.push(ue.then(Ce=>Ee(Ce,me)));return}}Ee(ue,me)},"handleResolvedValue");re?.then?(G||(G=[]),G.push(re.then(Oe))):Oe(re);return}else re=L[me],re&&typeof re=="object"&&me!==B&&(re=Me.transformEntryForSelect(B.select||B,T,C,null)({value:re}));Ee(re,me)},"selectAttribute"),Q;if(typeof _=="string")z(_,B=>{Q=B});else if(Array.isArray(_))if(_.asArray)Q=[],_.forEach((B,Ee)=>{B==="*"?_[Ee]=L:z(B,me=>Q[Ee]=me)});else{Q={};let B=_.forceNulls;for(let Ee of _)if(Ee==="*")for(let me in L)Q[me]=L[me];else z(Ee,(me,pe)=>{me===void 0&&B&&(me=null),Q[pe]=me})}else throw new dt.ClientError("Invalid select"+_);return G?Promise.all(G).then(()=>Q):Q}return L},"transform");return U}async subscribe(_){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||Xe({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),_||(_={});let T=!_.rawEvents,C=[],P=mI(Me,this.getId()??null,function(D,A,U,w){try{let L=A.getValue?.(i,T),G=A.type;if(!L&&G==="patch"&&T){let Q=i.getEntry(D);Q?.version===A.version?L=Q.value:L=A.getValue?.(i,!0,U),G="put"}let z={id:D,localTime:U,value:L,version:A.version,type:G,beginTxn:w};C?C.push(z):(c!=="system"&&Ve(A.size??1,"db-message",s,null),this.send(z))}catch(L){ke.default.error?.(L)}},_.startTime||0,_),O=(async()=>{this.isCollection&&(P.includeDescendants=!0,_.onlyChildren&&(P.onlyChildren=!0)),_.supportsTransactions&&(P.supportsTransactions=!0);let D=this.getId(),A=_.previousCount;A>1e3&&(A=1e3);let U=_.startTime;if(this.isCollection){if(U){if(A)throw new dt.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:w,value:L}of l.getRange({start:U,exclusiveStart:!0,snapshot:!1})){let G=It(L);if(G.tableId!==n)continue;let z=G.recordId;if(D==null||gG(D,z)){let Q=G.getValue(i,T,w);if(x({id:z,localTime:w,value:Q,version:G.version,type:G.type,size:G.size}),P.queue?.length>EG&&await P.waitForDrain()===!1)return}P.startTime=w}}else if(A){let w=[];for(let{key:L,value:G}of l.getRange({start:"z",end:!1,reverse:!0}))try{let z=It(G);if(z.tableId!==n)continue;let Q=z.recordId;if(D==null||gG(D,Q)){let B=z.getValue(i,T,L);if(w.push({id:Q,localTime:L,value:B,version:z.version,type:z.type}),--A<=0)break}}catch(z){ke.default.error("Error getting history entry",L,z)}for(let L=w.length;L>0;)x(w[--L]);w[0]&&(P.startTime=w[0].localTime)}else if(!_.omitCurrent){for(let{key:w,value:L,version:G,localTime:z,size:Q}of i.getRange({start:D??!1,end:D==null?void 0:[D,kl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(L&&(x({id:w,localTime:z,value:L,version:G,type:"put",size:Q}),P.queue?.length>EG&&await P.waitForDrain()===!1))return}}else{A&&!U&&(U=0);let w=this.#n?.localTime;if(w===rI&&(i.cache?.delete(D),this.#n=i.getEntry(D),ke.default.trace?.("re-retrieved record",w,this.#n?.localTime),w=this.#n?.localTime),ke.default.trace?.("Subscription from",U,"from",D,w),U<w){let L=[],G=w;do{let z=l.get(G);if(z){_.omitCurrent=!0;let Q=It(z),B=Q.getValue(i,T,G);T&&(Q.type="put"),L.push({id:D,value:B,localTime:G,...Q}),G=Q.previousLocalTime}else break;A&&A--}while(G>U&&A!==0);for(let z=L.length;z>0;)x(L[--z]);P.startTime=w}!_.omitCurrent&&this.doesExist()&&x({id:D,localTime:w,value:this.#e,version:this.#r,type:"put"})}for(let w of C)x(w);C=null})();function x(D){c!=="system"&&Ve(D.size??1,"db-message",s,null),P.send(D)}return a(x,"send"),_.listener&&P.on("data",_.listener),P}static subscribeOnThisThread(_,T){return _===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(_,T,C){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),_,T);else{let P=!0,O=this.getContext();return _.checkPermission&&(P=this.allowCreate(O.user,_,O)),Gs(P,x=>{if(!x)throw new dt.AccessViolation(O.user);let D=Ds(_);this._writePublish(D,T,C)})}}_writePublish(_,T,C){let P=Br(this.getContext());_??=null,_!==null&&Gi(_);let O=this.getContext();P.addWrite({key:_,store:i,entry:this.#n,nodeName:O?.nodeName,validate:a(()=>{O?.source||(P.checkOverloaded(),this.validate(T))},"validate"),before:be.publish?.bind(this,O,_,T),beforeIntermediate:Mu(T,Ye.publish?.bind(this,O,_,T)),commit:a((x,D,A)=>{D===void 0&&R&&!g&&Ba(),ke.default.trace?.(`Publishing message to id: ${_}, timestamp: ${new Date(x).toISOString()}`),y(_,D?.value??null,D,D?.version||x,0,!0,{user:O?.user,residencyId:C?.residencyId,expiresAt:O?.expiresAt,nodeId:C?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(_,T){let C,P=a((O,x,D)=>{if(x.type&&O!=null)if(T&&O.__op__&&(O=O.value),x.properties){typeof O!="object"&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be an object${x.type?" ("+x.type+")":""}`);let A=x.properties;for(let U=0,w=A.length;U<w;U++){let L=A[U];if(L.relationship||L.computed){_.hasOwnProperty(L.name)&&(C||(C=[])).push(`Computed property ${D}.${L.name} may not be directly assigned a value`);continue}let G=P(O[L.name],L,D+"."+L.name);G&&(O[L.name]=G)}if(x.sealed&&O!=null&&typeof O=="object")for(let U in O)A.find(w=>w.name===U)||(C||(C=[])).push(`Property ${U} is not allowed within object in property ${D}`)}else switch(x.type){case"Int":(typeof O!="number"||O>>0!==O)&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(A=>typeof A=="string")||(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a string`);break;case"Boolean":typeof O!="boolean"&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a bigint`)}break;case"Bytes":if(!(O instanceof Uint8Array)){if(typeof O=="string")return Buffer.from(O);(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(O instanceof vs)){if(typeof O=="string"&&(O=Buffer.from(O)),O instanceof Buffer)return createBlob(O,{type:"text/plain"});(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a Blob`)}break;case"array":if(Array.isArray(O)){if(x.elements)for(let A=0,U=O.length;A<U;A++){let w=O[A],L=P(w,x.elements,D+"[*]");L&&(O[A]=L)}}else(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be an Array`);break}x.nullable===!1&&O==null&&(C||(C=[])).push(`Property ${D} is required (and not does not allow null values)`)},"validateValue");for(let O=0,x=S.length;O<x;O++){let D=S[O];if(D.relationship||D.computed){Object.hasOwn(_,D.name)&&(C||(C=[])).push(`Computed property ${D.name} may not be directly assigned a value`);continue}if(!T||D.name in _){let A=P(_[D.name],D,D.name);A!==void 0&&(_[D.name]=A)}}if(f)for(let O in _)S.find(x=>x.name===O)||(C||(C=[])).push(`Property ${O} is not allowed`);if(C)throw new dt.ClientError(C.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return I?!!this.#i:void 0}static async addAttributes(_){let T=S.slice(0);for(let C of _){if(!C.name)throw new dt.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new dt.ClientError("Attribute names cannot include backticks or forward slashes");Cce(C.name),T.push(C)}return Xe({table:s,database:c,schemaDefined:u,attributes:T}),Me.indexingOperation}static async removeAttributes(_){let T=S.filter(C=>!_.includes(C.name));return Xe({table:s,database:c,schemaDefined:u,attributes:T}),Me.indexingOperation}static getSize(){let _=i.getStats();return(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getAuditSize(){let _=l?.getStats();return _&&(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getStorageStats(){let _=i.env.path,T=ON.default.statfsSync?.(_)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(_){let T=i.getStats().entryCount,C=1e3/2,P=performance.now(),O=Math.floor(T/2),x=_?.exactCount,D=0,A=0,U;for(let{value:w}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(w!=null&&D++,A++,await cc(),!x&&A<O&&performance.now()-P>C){U=A;break}if(U){let w=D;D=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:U,snapshot:!1}))re!=null&&D++,await cc();let L=U*2,G=(D+w)/L,z=Math.pow((D-w+1)/U/2,2)+G*(1-G)/L,Q=Math.max(Math.sqrt(z)*T,1),B=Math.round(G*T),Ee=Math.max(B-1.96*Q,D+w),me=Math.min(B+1.96*Q,T),pe=Math.pow(10,Math.round(Math.log10(Q)));return pe>B&&(pe=pe/10),D=Math.round(B/pe)*pe,{recordCount:D,estimatedRange:[Math.round(Ee),Math.round(me)]}}return{recordCount:D}}static updatedAttributes(){xr=this.propertyResolvers={$id:a((_,T,C)=>({value:C.key}),"$id"),$updatedtime:a((_,T,C)=>C.version,"$updatedtime"),$updatedTime:a((_,T,C)=>C.version,"$updatedTime"),$expiresAt:a((_,T,C)=>C.expiresAt,"$expiresAt"),$record:a((_,T,C)=>C?{value:_}:_,"$record"),$distance:a((_,T,C)=>C&&(C.distance??T?.vectorDistances?.get(C)),"$distance")};for(let _ of this.attributes){_.isPrimaryKey&&($=_),_.resolve=null;let T=_.relationship,C=_.computed;if(T)if(_.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),C&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Ou=!0,T.to)_.elements?.definition?(xr[_.name]=_.resolve=(P,O,x,D)=>{let A=P[T.from?T.from:t],U=_.elements.definition.tableClass;return D?Xu({attribute:T.to,value:A},Br(O).getReadTxn(),!1,U,!1).map(w=>w&&w.key!==void 0?w:U.primaryStore.getEntry(w,{transaction:Br(O).getReadTxn()})).asArray:U.search([{attribute:T.to,value:A}],O).asArray},_.set=()=>{},_.resolve.definition=_.elements.definition,_.resolve.to=T.to,T.from&&(_.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${_.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let P=_.definition||_.elements?.definition;P?(xr[_.name]=_.resolve=(O,x,D,A)=>{let U=O[T.from];if(U===void 0)return;if(_.elements){let L,G=U?.map(z=>{let Q=P.tableClass.primaryStore[A?"getEntry":"get"](z,{transaction:Br(x).getReadTxn()});return Q?.then&&(L=!0),Me.loadAsInstance===!1&&Object.freeze(A?Q?.value:Q),Q});return T.filterMissing?L?Promise.all(G).then(z=>z.filter(SG)):G.filter(SG):L?Promise.all(G):G}let w=P.tableClass.primaryStore[A?"getEntry":"get"](U,{transaction:Br(x).getReadTxn()});return Me.loadAsInstance===!1&&Object.freeze(A?w?.value:w),w},_.set=(O,x)=>{if(Array.isArray(x)){let D=x.map(A=>A.getId?.()||A[P.tableClass.primaryKey]);O[T.from]=D}else{let D=x.getId?.()||x[P.tableClass.primaryKey];O[T.from]=D}},_.resolve.definition=_.definition||_.elements?.definition,_.resolve.from=T.from):console.error(`The relationship property "${_.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${_.name}" in table "${s}" must use either "from" or "to" arguments`);else if(C)typeof C.from=="function"&&this.setComputedAttribute(_.name,C.from),xr[_.name]=_.resolve=(P,O,x)=>{let D=typeof C.from=="string"?P[C.from]:P,A=this.userResolvers[_.name];if(A)return A(D,O,x);ke.default.warn(`Computed attribute "${_.name}" does not have a function assigned to it. Please use setComputedAttribute('${_.name}', resolver) to assign a resolver function.`),this.userResolvers[_.name]=()=>{}},_.resolve.directReturn=!0;else if(r[_.name]?.customIndex?.propertyResolver){let P=r[_.name].customIndex;xr[_.name]=(O,x,D)=>{let A=O[_.name];return P.propertyResolver(A,x,D)},xr[_.name].directReturn=!0}}bp(this,this),bp(pm,this,!0);for(let _ of S){let T=_.name;_.resolve&&(Object.defineProperty(i.encoder.structPrototype,T,{get(){return _.resolve(this,td.getStore())},set(C){return _.set(this,C)},configurable:!0,enumerable:_.enumerable}),_.enumerable&&!i.encoder.structPrototype.toJSON&&Object.defineProperty(i.encoder.structPrototype,"toJSON",{configurable:!0,value(){let C={};for(let P in this)C[P]=this[P];return C}}))}}static setComputedAttribute(_,T){let C=Qi(S,_);if(!C){console.error(`The attribute "${_}" does not exist in the table "${s}"`);return}if(!C.computed){console.error(`The attribute "${_}" is not defined as computed in the table "${s}"`);return}this.userResolvers[_]=T}static async deleteHistory(_=0,T=!1){let C;for(let{key:P,value:O}of l.getRange({start:0,end:_}))await cc(),It(O).tableId===n&&(C=sg(l,P,O));if(T)for(let P of i.getRange({start:0,versions:!0})){let{key:O,value:x,localTime:D}=P;await cc(),x===null&&D<_&&(C=pl(i,P))}await C}static async*getHistory(_=0,T=1/0){for(let{key:C,value:P}of l.getRange({start:_||1,end:T})){await cc();let O=It(P);O.tableId===n&&(yield{id:O.recordId,localTime:C,version:O.version,type:O.type,value:O.getValue(i,!0,C),user:O.user,operation:O.originatingOperation})}}static async getHistoryOfRecord(_){let T=[];if(_==null)throw new Error("An id is required");let C=i.getEntry(_);if(!C)return T;let P=C.localTime;if(!P)throw new Error("The entry does not have a local audit time");let O=0;do{await cc();let x=l.get(P);if(x){let D=It(x);T.push({id:D.recordId,localTime:P,version:D.version,type:D.type,value:D.getValue(i,!0,P),user:D.user}),P=D.previousLocalTime}else break}while(O<1e3&&P);return T.reverse()}static cleanup(){Y?.remove()}}let u_=ES(async(K,_,T)=>{for(let C of Me.sources)if(C.get&&(!C.get.reliesOnPrototype||C.prototype.get)){if(C.available?.(T)===!1)continue;_.source=C;let P=await C.get(K,_);if(P)return P}},()=>{throw new dt.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Me.updatedAttributes();let Bb=Me.prototype;return h&&Me.setTTLExpiration(h/1e3),j&&d_(),Me;function Pu(K,_,T){let C;for(let P in r){let O=r[P],x=O.isIndexing,D=xr[P],A=T&&(D?D(T):T[P]),U=_&&(D?D(_):_[P]);if(A===U&&!x)continue;if(O.customIndex){O.customIndex.index(K,A,U);continue}C=!0;let w=O.indexNulls,L=(0,$p.getIndexedValues)(A,w),G=(0,$p.getIndexedValues)(U,w);if(G?.length>0){let z=new Set(G);if(L=L?L.filter(Q=>{if(z.has(Q))z.delete(Q);else return!0}):[],G=Array.from(z),(G.length>0||L.length>0)&&mG){let Q=G.concat(L).map(B=>({key:B,value:K}));O.prefetch(Q,_G)}for(let Q=0,B=G.length;Q<B;Q++)O.remove(G[Q],K)}else L?.length>0&&mG&&O.prefetch(L.map(z=>({key:z,value:K})),_G);if(L)for(let z=0,Q=L.length;z<Q;z++)O.put(L[z],K)}return C}a(Pu,"updateIndices");function Gi(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>hG)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)throw new Error("Invalid primary key of null");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,kl.writeKey)(K,Uce,0)>hG)throw new Error("Primary key size is too large: "+K.length);return!0}a(Gi,"checkValidId");function Ds(K){return typeof K=="object"&&K?K.id:K}a(Ds,"requestTargetToId");function hm(K){return typeof K=="object"&&K&&K.isCollection}a(hm,"isSearchTarget");function Em(K){}a(Em,"isRequestTarget");function Do(K,_,T,C,P){if(Me.getResidencyById&&T.ensureLoaded&&_?.replicateFrom!==!1){let x=Fa(Me.getResidencyById(K));if(x&&!x.includes(server.hostname)&&N)return N({key:K,residency:x}).then(P)}let O=a(()=>{if(_?.transaction?.stale&&(_.transaction.stale=!1),T.transaction?.isDone)return P(null,K);let x=i.getEntry(K,T);return(c!=="system"||s==="hdb_analytics")&&(RG.default.trace?.("Recording db-read action for",`${c}.${s}`),Ve(x?.size??1,"db-read",s,null)),_?._freezeRecords&&Object.freeze(x?.value),x?.residencyId&&x.metadataFlags&kn&&N&&T.ensureLoaded&&_?.replicateFrom!==!1?N(x).then(D=>P(D,K),D=>(ke.default.error?.("Error loading remote record",K,x,T,D),P(null,K))):(x&&_&&(x?.version>(_.lastModified||0)&&(_.lastModified=x.version),x?.localTime&&!_.lastRefreshed&&(_.lastRefreshed=x.localTime)),P(x,K))},"whenPrefetched");return C?O():te>0?(te--,O()):new Promise((x,D)=>{te===0?(te--,i.prefetch([K],()=>{A(),U()})):(le.push(K),fe.push(U),le.length>l_&&(te--,A()));function A(){if(le.length>0){let w=fe;i.prefetch(le,()=>{te===-1?A():te++;for(let L of w)L()}),le=[],fe=[],ge>2&&ge--}else te=ge,ge<mm&&ge++}a(A,"prefetch");function U(){try{x(O())}catch(w){D(w)}}a(U,"load")})}a(Do,"loadLocalRecord");function Mn(K,_){let T=_?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return xce;let C=T[c],P,O=C?.tables;if(O)return O[s];if(c==="data"&&(P=T[s])&&!P.tables)return P}a(Mn,"getTablePermissions");function pn(K,_,T,C){if(I){let P=!1;if(T.noCache?P=!0:(_?(!_.value||_.metadataFlags&(kn|hl)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(P=!0):P=!0,tn(!P,"cache-hit",s)),P){let O=Du(K,_,T).then(x=>(x?.value&&x?.value.getRecord?.()&&ke.default.error?.("Can not assign a record that is already a resource"),T&&(x?.version>(T.lastModified||0)&&(T.lastModified=x.version),T.lastRefreshed=Date.now()),x));if(T?.onlyIfCached||_?.value&&C?.allowStaleWhileRevalidate?.(_,K)){if(O.catch(x=>ke.default.warn?.(x)),T?.onlyIfCached&&!C.doesExist())throw new dt.ServerError("Entry is not cached",504);return}else return O}}else if(_?.value&&_.expiresAt!=null&&_.expiresAt<Date.now())return Me.evict(_.key,_.value,_.version),_.value=null,{then(P){return P(_)}}}a(pn,"ensureLoadedFromSource");function Br(K){let _=K?.transaction;if(_){if(!_.lmdbDb)return _.lmdbDb=i,_;do{if(_.lmdbDb?.path===i.path)return _;let T=_.next;if(!T)return _=_.next=new vo,_.lmdbDb=i,_;_=T}while(!0)}else return new v_}a(Br,"txnForContext");function Lu(K,_,T){if(!K)return;let C=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof _=="object"){let O=xr,x=C;for(let D=0,A=_.length;D<A;D++){let U=_[D],w=O?.[U];x=w&&x?w(x,T,K):x?.[U],K=null,O=w?.definition?.tableClass?.propertyResolvers}return x}let P=xr[_];return P?P(C,T,K):C[_]}a(Lu,"getAttributeValue");function _m(K,_,T,C,P){let O=P?.length,x={transaction:C,lazy:O>0||typeof _=="string"||_?.length<4,alwaysPrefetch:!0},D;function A(U,w){let L=U?.value;if(!L)return lc.SKIP;for(let G=0;G<O;G++)if(!D?.includes(G)&&!P[G](L,U))return lc.SKIP;return w!==void 0&&(U.key=w),U}if(a(A,"processEntry"),O>0||!K.hasEntries){let U=K.map(w=>{if(D=null,typeof w=="object"&&w?.key!==void 0)return O>0?A(w):w;if(w==null)return lc.SKIP;for(let L=0;L<O;L++){let z=P[L].idFilter;if(z){if(!z(w))return lc.SKIP;D||(D=[]),D.push(L)}}return Do(w,T,x,!1,A)});return Array.isArray(K)&&(U=U.filter(w=>w!==lc.SKIP)),U.hasEntries=!0,U}return K}a(_m,"transformToEntries");function Fr(K,_,T=server.replication?.getThisNodeId(l)){if(K<=_?.version){if(_?.version===K&&T!==void 0){let C=server.replication?.exportIdMapping(l),P=_.localTime,O=P&&l.get(P);if(O){let x,D,A=It(O);for(let U in C)C[U]===T&&(x=U),C[U]===A.nodeId&&(D=U);if(x>D)return 1;if(x===D)return 0}}return-1}return 1}a(Fr,"precedesExistingVersion");async function Du(K,_,T){let C=_?.metadataFlags,P=_?.version,O,x;if(!i.attemptLock(K,P,()=>{clearTimeout(x);let w=i.getEntry(K);!w||!w.value||w.metadataFlags&(kn|hl)?O(Du(K,i.getEntry(K),T)):O(w)}))return new Promise(w=>{O=w,x=setTimeout(()=>{i.unlock(K,P)},Mce)});let D=_?.value,A={requestContext:T,replacingRecord:D,replacingEntry:_,replacingVersion:P,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},U=T?.responseHeaders;return new Promise((w,L)=>{let G;Gs(At(A,async z=>{let Q=performance.now(),B,Ee,me;try{B=await u_(K,A,_),me=C&kn;let re=A.lastModified||me&&P;Ee=me||re>P||!D,re||(re=(0,$p.getNextMonotonicTime)());let ie=performance.now()-Q;if(Ve(ie,"cache-resolution",s,null,"success"),U&&qp(U,"Server-Timing",`cache-resolve;dur=${ie.toFixed(2)}`,!0),z.timestamp=re,h&&A.expiresAt==null&&(A.expiresAt=Date.now()+h),B){if(typeof B!="object")throw new Error("Only objects can be cached and stored in tables");if(B.status>0&&B.headers)if(B.status>=300)if(B.status===304)B=D,re=P;else throw new dt.ServerError(B.body||"Error from source",B.status);else B=B.body;typeof B.toJSON=="function"&&(B=B.toJSON()),t&&B[t]!==K&&(B[t]=K)}G=!0,w({key:K,version:re,value:B})}catch(re){re.message+=` while resolving record ${K} for ${s}`,D&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(w({key:K,version:P,value:D}),ke.default.trace?.(re.message,"(returned stale record)")):L(re);let ie=performance.now()-Q;Ve(ie,"cache-resolution",s,null,"fail"),U&&qp(U,"Server-Timing",`cache-resolve;dur=${ie.toFixed(2)}`,!0),A.transaction.abort();return}if(T?.noCacheStore||A.noCacheStore){A.transaction.abort();return}Br(A).addWrite({key:K,store:i,entry:_,nodeName:"source",before:Mu(B),commit:a((re,ie)=>{if(ie?.version!==P)return;let Oe=Pu(K,D,B);if(B){Ye.put?.(A,K,B),ie&&(T.previousResidency=Me.getResidencyRecord(ie.residencyId));let ue,ce=!1,xe,Ce=Fa(Me.getResidency(B,T));if(Ce){if(!Ce.includes(server.hostname))if(ue=B,ce=!0,Me.getResidencyById)B=void 0;else{B=null;for(let Le in r)B||(B={}),B[Le]=ue[Le]}xe=Qc(Ce)}ke.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),y(K,B,ie,re,ce?kn:0,g&&(Ee||ce)||null,{user:A?.user,expiresAt:A.expiresAt,residencyId:xe,tableToTrack:s},"put",!!me,ue)}else ie&&(Ye.delete?.(A,K),ke.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),g||R?y(K,null,ie,re,0,g&&Ee||null,{user:A?.user,tableToTrack:s},"delete",!!me):pl(i,ie,P))},"commit")})}),()=>{i.unlock(K,P)},z=>{i.unlock(K,P),G&&ke.default.error?.("Error committing cache update",z)})})}a(Du,"getFromSource");function xa(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new dt.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new dt.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(xa,"checkContextPermissions");function Ba(K){let _=!1;if(K&&(K-Ar>1&&(_=!0),Ar=K),!(Ge===tr&&!_)&&(tr=Ge,(0,Bl.getWorkerIndex)()===(0,Bl.getWorkerCount)()-1))return Qr&&clearTimeout(Qr),Ge?new Promise(T=>{let C=new Date;C.setMonth(0),C.setDate(1),C.setHours(0),C.setMinutes(0),C.setSeconds(0);let P=Ge/(1+Ar),O=_?Date.now():Math.ceil((Date.now()-C.getTime())/P)*P+C.getTime(),x=a(D=>{ke.default.trace?.(`Scheduled next cleanup scan at ${new Date(D)}`),Qr=setTimeout(()=>ee=ee.then(async()=>{if(x(Math.max(D+Ge,Date.now())),i.rootStore.status!=="open"){clearTimeout(Qr);return}let A=50,U=new Array(A),w=0,L=Math.pow(Ar,8)*(Fl.get(F.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),G=E/Math.pow(Math.max(Ar,1),4);ke.default.debug?.(`Starting cleanup scan for ${s}, evict threshold ${L}, adjusted eviction ${G}ms`);function z(Q,B,Ee,me){let pe=Q+G-Date.now();if(pe<0)return!0;if(Ar){let re=i.lastSize;return Ee&Zr&&sl(me,ie=>{ie.size&&(re+=ie.size)}),ke.default.trace?.(`shouldEvict adjusted ${pe} ${re}, ${pe*(Q-B)/re} < ${L}`),pe*(Q-B)/re<L}return!1}a(z,"shouldEvict");try{let Q=0;for(let B of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:Ee,value:me,version:pe,expiresAt:re,metadataFlags:ie}=B,Oe;me===null&&!g&&pe+Dce<Date.now()?Oe=pl(i,B,pe):re!=null&&z(re,pe,ie,me)&&(Oe=Me.evict(Ee,me,pe),Q++),Oe&&(await U[w],U[w]=Oe.catch(ue=>{ke.default.error?.("Cleanup error",ue)}),++w>=A&&(w=0)),await cc()}ke.default.debug?.(`Finished cleanup scan for ${s}, evicted ${Q} entries`)}catch(Q){ke.default.warn?.(`Error in cleanup scan for ${s}:`,Q)}T(void 0),Ar=0}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");x(O)}):void 0}a(Ba,"scheduleCleanup");function gm(){Y=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}a(gm,"addDeleteRemoval");function d_(){(0,Bl.getWorkerIndex)()===0&&setInterval(async()=>{if(!jc){jc=!0;try{let K=j.name,_=r[K];if(!_)throw new Error(`expiresAt attribute ${j} must be indexed`);for(let T of _.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let C of _.getValues(T)){let P=i.getEntry(C);P?.value?P.value[K]<Date.now()&&Me.evict(C,P.value,P.version):i.ifVersion(C,P?.version,()=>_.remove(T,C))}await cc()}}catch(K){ke.default.error?.("Error in evicting old records",K)}finally{jc=!1}}},Lce).unref()}a(d_,"runRecordExpirationEviction");function Fa(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let _=server.shards?.get?.(K);if(_)return ke.default.trace?.(`Shard ${K} mapped to ${_.map(T=>T.name).join(", ")}`),_.map(T=>T.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}a(Fa,"residencyFromFunction");function Qc(K){if(K){let _=K.join(","),T=d.get([Symbol.for("residency_by_set"),_]);return T||(d.put([Symbol.for("residency_by_set"),_],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],K),T)}}a(Qc,"getResidencyId");function Mu(K,_){let T=NA(K,i.rootStore);if(T){let C=_;return C?async()=>{await C(),await T}:()=>T}return _}a(Mu,"preCommitBlobsForRecordBefore")}function CN(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 _G(){}function gS(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return _S(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return _S(+e);case"Float":return e==="null"?null:_S(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;Bce.test(e)||(e+="Z");let n=new Date(e);return _S(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,SS.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function _S(e){if(isNaN(e))throw new SyntaxError;return e}function gG(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);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 Gs(e,t,r){return e?.then?e.then(t,r):t(e)}function SG(e){return e!=null}function $s(e){try{return JSON.stringify(e)}catch{return e}}function Fce(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var lc,$p,TG,yG,Fl,dt,Vp,Kp,ke,kl,Bl,SS,ON,RG,Nce,Cce,Oce,Pce,Lce,Dce,mG,Mce,pG,vce,kn,hl,Uce,hG,EG,xce,pxe,Bce,cc,bg=se(()=>{H();lc=require("lmdb"),$p=b(xn()),TG=b(require("lodash")),yG=b(Mm());Ko();Um();Fl=b(ae());pI();dt=b(_e()),Vp=b(zo()),Kp=b(ls());we();Rg();ke=b(wr());Rw();Ga();kl=require("ordered-binary"),Bl=b(tt());Ki();SS=b(oe());dl();is();B_();Gp();ON=b(require("node:fs"));ss();eg();RG=b(J());NN();({sortBy:Nce}=TG.default),{validateAttribute:Cce}=yG.default,Oce=new Uint8Array(9);Oce[8]=192;Pce=1/0,Lce=6e4,Dce=864e5;Fl.initSync();mG=Fl.get(F.STORAGE_PREFETCHWRITES),Mce=1e4,pG=1,vce=2,kn=1,hl=8,Uce=Buffer.allocUnsafeSlow(8192),hG=1978,EG=100,xce={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},pxe=(0,SS.convertToMS)(Fl.get(F.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(TS,"makeTable");a(CN,"attributesAsObject");a(_G,"noop");Bce=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(gS,"coerceType");a(_S,"rejectNaN");a(gG,"isDescendantId");cc=a(()=>new Promise(setImmediate),"rest");a(Gs,"when");a(SG,"exists");a($s,"stringify");a(Fce,"hasOtherProcesses")});function yS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,o=t[s]||0,c=i-o;r+=c*c}return r}function RS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let o=0;o<i;o++){let c=e[o]||0,l=t[o]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var AG=se(()=>{a(yS,"euclideanDistance");a(RS,"cosineDistance")});var IG,wG,Od,lo,Cd,kce,Hce,bS,NG=se(()=>{AG();IG=require("msgpackr"),wG=b(wr()),Od=b(_e()),lo=(0,wG.loggerWithTag)("HNSW"),Cd=Symbol.for("entryPoint"),kce=Symbol.for("key"),Hce=10,bS=class{static{a(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=IG.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?yS:RS,r&&(r.M!==void 0&&(this.M=r.M,this.mL=1/Math.log(this.M)),r.efConstruction!==void 0&&(this.efConstruction=this.efConstructionSearch=r.efConstruction),r.efConstructionSearch!==void 0&&(this.efConstructionSearch=r.efConstructionSearch),r.mL!==void 0&&(this.mL=r.mL),r.optimizeRouting!==void 0&&(this.optimizeRouting=r.optimizeRouting))}index(t,r,n){let s=typeof t=="number"?[kce,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let o=new Map,c,l=this.indexStore.get(Cd);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let E=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:E,primaryKey:t};for(let R=0;R<=E;R++)g[R]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);lo.debug?.("setting entry point to",i),this.indexStore.put(Cd,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),Hce),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);lo.debug?.("setting entry point to",i),this.indexStore.put(Cd,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let g=this.searchLayer(r,l,f,this.efConstruction,E);g=g.slice(0,this.M<<1),g.length===0&&E===0&&lo.info?.("should not have zero connections for",l);let R=h[E];for(let S=0;S<g.length;S++){let{id:y,distance:N,node:I}=g[S];if(y===i)continue;let $=[];if(this.optimizeRouting){let k=!1,j=I[E],Y=1+this.optimizeRouting*(1+.5*S/this.M);for(let le=0;le<j.length;le++){let{id:fe,distance:te}=j[le],ge=1+this.optimizeRouting*(1+.5*le/this.M);for(let be=0;be<R.length;be++){let{id:Ye,distance:Ge}=R[be];if(Ye===fe){N*Y>Ge+te?k=!0:te*ge>N+Ge&&($.push({fromId:Ye,toId:y}),$.push({fromId:y,toId:Ye}));break}}if(k)break}if(k)continue}else if(S>=(E>0?this.M:this.M<<1))continue;R.push({id:y,distance:N});for(let{fromId:k,toId:j}of $){let Y=d(k);Y||(Y=d(k,this.indexStore.get(k)));for(let le=0;le<Y[E].length;le++)if(Y[E][le].id===j){Object.isFrozen(Y[E])&&(Y[E]=Y[E].slice()),Y[E].splice(le,1);break}}let ee=c[E],q=ee?.find(({id:k})=>k===y);if(q){let k=ee?.indexOf(q);ee.copied||(ee=[...ee],ee.copied=!0,c[E]=ee),ee.splice(k,1)}else this.addConnection(y,d(y,I),i,E,N,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m][0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(Cd);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);lo.debug?.("setting entry point to",l),this.indexStore.put(Cd,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:g})=>g!==i),h[E].length===0&&(lo.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=o.get(f);return!p&&m&&(p={...m},o.set(f,p)),p}a(d,"updateNode");for(let[f,m]of o)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(Cd);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,o=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=o(t,h.vector);if(E<f||u.length<s){let g={id:p,distance:E,node:h};l.push(g),u.push(g)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let o=0;switch(i){case"lt":case"le":o=r;case"sort":break;default:throw new Od.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new Od.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=RS;else if(s==="euclidean")c=yS;else{if(s)throw new Od.ClientError("Unknown distance function");c=this.distance}if(!t)throw new Od.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new Od.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return o&&(d=d.filter(f=>f.distance<o)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let o=this.indexStore.get(i);if(!o){lo.info?.("could not find neighbor node",o);continue}o[n]?.find(({id:l})=>l==t)||lo.info?.("asymmetry detected",o[n])}n++}}addConnection(t,r,n,s,i,o){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){lo.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=o(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=o(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&lo.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?lo.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let o=s.shift(),c=this.indexStore.get(o);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let o=this.distance;s.type&&(o=s.distance==="euclidean"?yS:RS);let c=o(s.target,t);return i.set(n,c),c}return t}}});var PN,CG=se(()=>{NG();PN={HNSW:bS}});var mt={};ye(mt,{NON_REPLICATING_SYSTEM_TABLES:()=>AS,database:()=>hd,databaseEnvs:()=>Zo,databases:()=>ve,dropDatabase:()=>Nw,dropTableMeta:()=>Yce,getDatabases:()=>lt,getDefaultCompression:()=>LS,getTables:()=>Gce,onRemovedDB:()=>Xp,onUpdatedTable:()=>Hl,readMetaDb:()=>Yp,resetDatabases:()=>vd,table:()=>Xe,tables:()=>bn});function Jp(e,t){let r=OS.OpenDBIObject??OS.default.OpenDBIObject;return new r(e,t)}function Gce(){return CS||lt(),bn||{}}function lt(){if(CS)return ve;CS=!0,Dd=new Map;let e=(0,jt.getHdbBasePath)()&&(0,kt.join)((0,jt.getHdbBasePath)(),Zc),t=(0,jt.get)(F.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,jt.get)(F.STORAGE_PATH)||e&&((0,gs.existsSync)(e)?e:(0,kt.join)((0,jt.getHdbBasePath)(),S_)),!!e){if((0,gs.existsSync)(e))for(let r of(0,gs.readdirSync)(e,{withFileTypes:!0})){let n=(0,kt.basename)(r.name,".mdb");r.isFile()&&(0,kt.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Yp((0,kt.join)(e,r.name),null,n)}if((0,gs.existsSync)((0,Ld.getBaseSchemaPath)())){for(let r of(0,gs.readdirSync)((0,Ld.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,kt.join)((0,Ld.getBaseSchemaPath)(),r.name),s=(0,kt.join)((0,Ld.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,gs.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,kt.extname)(i.name).toLowerCase()===".mdb"){let o=(0,kt.join)(s,i.name);Yp((0,kt.join)(n,i.name),(0,kt.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,gs.existsSync)(s))for(let o of(0,gs.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,kt.extname)(o.name).toLowerCase()===".mdb"&&Yp((0,kt.join)(s,o.name),(0,kt.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,kt.join)(c.path,(0,kt.basename)(o+".mdb"));(0,gs.existsSync)(l)&&Yp(l,o,r,null,!0)}}for(let r in ve){let n=Dd.get(r);if(n){let s=ve[r];r.includes("delete")&&Or.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Or.trace(`delete table class ${i}`),delete s[i])}else if(delete ve[r],r==="data"){for(let s in bn)delete bn[s];delete bn[PS]}}if((0,jt.get)(F.ANALYTICS_REPLICATE)===!1?AS.includes("hdb_analytics")||AS.push("hdb_analytics"):(ve.system?.hdb_analytics?.enableAuditing(),ve.system?.hdb_analytics_hostname?.enableAuditing()),ve.system)for(let r of AS)ve.system[r]&&(ve.system[r].replicate=!1);return Dd=null,ve}}function vd(){CS=!1;for(let[,e]of Zo)e.needsDeletion=!0;lt();for(let[e,t]of Zo)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Zo.delete(e);let r=ve[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete ve[t.databaseName],zp.forEach(i=>i(t.databaseName));break}}return ve}function Yp(e,t,r=MN,n,s){let i=new LN.default(e,!1);try{let o=Zo.get(e);o?o.needsDeletion=!1:(o=(0,Md.open)(i),Zo.set(e,o));let c=new Jp(!1),l=o.dbisDb||(o.dbisDb=o.openDB(IS.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,gs.existsSync)(n)&&(i.path=n,u=(0,Md.open)(i),u.isLegacy=!0):u=ng(o));let d=MG(r),f=d[PS],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,g]=p.toString().split("/");g===""?g=h.name:g||(g=E,E=t,h.name||(h.name=g,h.indexed=!h.is_hash_attribute)),f?.add(E);let R=m.get(E);R||m.set(E,R={attributes:[]}),(g==null||h.is_hash_attribute)&&(R.primary=h),g!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:g}=h;if(!g){for(let te of E)if(te.is_hash_attribute||te.isPrimaryKey){g=te;break}if(!g){Or.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let R=d[p],S={},y=[],N,I,$=typeof g.audit=="boolean"?g.audit:(0,jt.get)(F.LOGGING_AUDITLOG),ee=g.trackDeletes,q=g.expiration,k=g.eviction,j=g.sealed,Y=g.splitSegments,le=g.replicate;if(R)S=R.indices,y=R.attributes,R.schemaVersion++;else{N=g.tableId,N?N>=(l.get(Pd)||0)&&(l.putSync(Pd,N+1),Or.info(`Updating next table id (it was out of sync) to ${N+1} for ${p}`)):(g.tableId=N=l.get(Pd),N||(N=1),Or.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(Pd,N+1),l.putSync(g.key,g));let te=new Jp(!g.is_hash_attribute,g.is_hash_attribute);if(te.compression=g.compression,te.compression){let ge=(0,jt.get)(F.STORAGE_COMPRESSION_THRESHOLD)||DG;te.compression.threshold=ge}I=gg(o.openDB(g.key,te),o),o.databaseName=r,I.tableId=N}let fe;for(let te of E){te.attribute=te.name;try{if(!te.is_hash_attribute&&(te.indexed||te.attribute&&!te.name)){if(!S[te.name]){let be=UG(te.key,o,te);S[te.name]=be,S[te.name].indexNulls=te.indexNulls}let ge=y.find(be=>be.name===te.name);ge?y.splice(y.indexOf(ge),1,te):y.push(te),fe=!0}}catch(ge){Or.error("Error trying to update attribute",te,y,S,ge)}}for(let te of y)if(!E.find(be=>be.name===te.name)){if(te.is_hash_attribute){Or.error("Unable to remove existing primary key attribute",te);continue}te.indexed&&(y.splice(y.indexOf(te),1),fe=!0)}if(R)fe&&(R.schemaVersion++,R.updatedAttributes());else{R=vG(d,p,TS({primaryStore:I,auditStore:u,audit:$,sealed:j,splitSegments:Y,replicate:le,expirationMS:q&&q*1e3,evictionMS:k&&k*1e3,trackDeletes:ee,tableName:p,tableId:N,primaryKey:g.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:g.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let te of Wp)te(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function MG(e){let t=ve[e];if(t||(e==="data"?t=ve[e]=bn:e==="system"?Object.defineProperty(ve,"system",{value:t=Object.create(null),configurable:!0}):t=ve[e]=Object.create(null)),Dd&&!Dd.has(e)){let r=new Set;t[PS]=r,Dd.set(e,r)}return t}function vG(e,t,r){return e[t]=r,r}function hd({database:e,table:t}){e||(e=MN),lt();let r=MG(e),n=(0,kt.join)((0,jt.getHdbBasePath)(),Zc),s=(0,jt.get)(F.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,jt.get)(F.STORAGE_PATH)||((0,gs.existsSync)(n)?n:(0,kt.join)((0,jt.getHdbBasePath)(),S_));let o=(0,kt.join)(n,(i?t:e)+".mdb"),c=Zo.get(o);if(!c||c.status==="closed"){let l=new LN.default(o,!1);c=(0,Md.open)(l),Zo.set(o,c)}return c.auditStore||(c.auditStore=ng(c)),c}async function Nw(e){if(!ve[e])throw new Error("Schema does not exist");let t=ve[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Zo.delete(r.path),r.status==="open"&&(await r.close(),await jp.remove(r.path));if(r||(r=hd({database:e,table:null}),r.status==="open"&&(await r.close(),await jp.remove(r.path))),e==="data"){for(let n in bn)delete bn[n];delete bn[PS]}delete ve[e],zp.forEach(n=>n(e)),await wA(r)}function UG(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&PN[r.indexed.type]?.useObjectStore,s=new Jp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let o=PN[r.indexed.type];o?i.customIndex=new o(i,r.indexed):Or.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function Xe(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=MN);let h=hd({database:r,table:t}),E=ve[r];Or.trace(`Defining ${t} in ${r}`);let g=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let R,S,y;m==null&&(m=!0);let N=new Jp(!1);for(let Y of o)Y.attribute&&!Y.name?(Y.name=Y.attribute,Y.indexed=!0):Y.attribute=Y.name,Y.expiresAt&&(Y.indexed=!0);let I,$;if(g){if(R=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...o)}else{let Y=h.auditStore;S=o.find(ge=>ge.isPrimaryKey)||{},R=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=LS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,jt.get)(F.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),Or.trace(`${t} table loading, opening primary store`);let le=new Jp(!1,!0);le.compression=S.compression;let fe=t+"/";if(y=h.dbisDb=h.openDB(IS.INTERNAL_DBIS_NAME,N),j(),y.get(fe))return $&&$(),vd(),Xe(e);let te=gg(h.openDB(fe,le),h);h.databaseName=r,te.tableId=y.get(Pd),Or.trace(`Assigning new table id ${te.tableId} for ${t}`),te.tableId||(te.tableId=1),y.put(Pd,te.tableId+1),S.tableId=te.tableId,g=vG(E,t,TS({primaryStore:te,auditStore:Y,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:te.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:m,dbisDB:y})),g.schemaVersion=1,I=!0,y.put(fe,S)}let ee=g.indices;y=y||(h.dbisDb=h.openDB(IS.INTERNAL_DBIS_NAME,N)),g.dbisDB=y;let q=[];for(let{key:Y,value:le}of y.getRange({start:!0})){let[fe,te]=Y.toString().split("/");if(te===""&&(te=le.name),te){if(fe!==t)continue}else continue;let ge=o.find(Ye=>Ye.name===te),be=!ge?.indexed&&le.indexed&&!le.isPrimaryKey;if((!ge||be)&&(j(),I=!0,ge||y.remove(Y),be)){let Ye=g.indices[fe];Ye&&q.push(Ye)}}let k=[];try{for(let Y of o||[]){if((Y.relationship||Y.computed)&&(I=!0,Y.relationship))continue;let le=t+"/"+(Y.name||"");Object.defineProperty(Y,"key",{value:le,configurable:!0});let fe=y.get(le);if(Y.isPrimaryKey){if(fe=fe||y.get(le=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+fe.expiration||void 0)||(+s||void 0)!==(+fe.eviction||void 0)||Y.type!==fe.type){let ge={...fe};typeof c=="boolean"&&(c&&g.enableAuditing(c),ge.audit=c),n&&(ge.expiration=+n),s&&(ge.eviction=+s),l!==void 0&&(ge.sealed=l),d!==void 0&&(ge.replicate=d),Y.type&&(ge.type=Y.type),I=!0,j(),y.put(le,ge)}continue}fe?.attribute&&!fe.name&&(fe.indexed=!0);let te=!fe||fe.type!==Y.type||JSON.stringify(fe.indexed)!==JSON.stringify(Y.indexed)||fe.nullable!==Y.nullable||fe.version!==Y.version||fe.enumerable!==Y.enumerable||JSON.stringify(fe.properties)!==JSON.stringify(Y.properties)||JSON.stringify(fe.elements)!==JSON.stringify(Y.elements);if(Y.indexed){let ge=UG(le,h,Y);(te||fe.indexingPID&&fe.indexingPID!==process.pid||fe.restartNumber<Qp.workerData?.restartNumber)&&(I=!0,j(),fe=y.get(le),(te||fe.indexingPID&&fe.indexingPID!==process.pid||fe.restartNumber<Qp.workerData?.restartNumber)&&(I=!0,Y.indexNulls===void 0&&(Y.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(Y.lastIndexedKey=fe?.lastIndexedKey??void 0,Y.indexingPID=process.pid,ge.isIndexing=!0,Object.defineProperty(Y,"dbi",{value:ge}),k.push(Y))),y.put(le,Y)),fe?.indexNulls&&Y.indexNulls===void 0&&(Y.indexNulls=!0),ge.indexNulls=Y.indexNulls,ee[Y.name]=ge}else te&&(I=!0,j(),y.put(le,Y))}}finally{$&&$()}if(I&&(g.schemaVersion++,g.updatedAttributes()),Or.trace(`${t} table loading, running index`),k.length>0||q.length>0?g.indexingOperation=Kce(g,k,q):I&&wS.signalSchemaChange(new NS.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,I)for(let Y of Wp)Y(g,p!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Or.trace(`${t} table loaded`),g;function j(){$||h.transactionSync(()=>({then(Y){$=Y}}))}a(j,"startTxn")}async function Kce(e,t,r){try{Or.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await wS.signalSchemaChange(new NS.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,Md.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],g=E.name,R=E.dbi;try{let S=E.resolve,y=m&&(S?S(m):m[g]);if(R.customIndex){R.customIndex.index(f,y);continue}let N=(0,OG.getIndexedValues)(y);if(N)for(let I=0,$=N.length;I<$;I++)R.put(N[I],f)}catch(S){o[g]||(o[g]=!0,Or.error(`Error indexing attribute ${g}`,S))}}}),s.then(()=>d--,h=>{d--,Or.error(h)}),Qp.workerData&&Qp.workerData.restartNumber!==LG.restartNumber&&(i=!0),++c%100===0||i){for(let h of t)h.lastIndexedKey=f,e.dbisDB.put(h.key,h);if(i)return}d>$ce?await s:d>Vce&&await new Promise(h=>setImmediate(h))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await wS.signalSchemaChange(new NS.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Or.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Or.error("Error in indexing",n)}}function Yce({table:e,database:t}){let r=hd({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 Hl(e){return Wp.push(e),{remove(){let t=Wp.indexOf(e);t>-1&&Wp.splice(t,1)}}}function Xp(e){return zp.push(e),{remove(){let t=zp.indexOf(e);t>-1&&zp.splice(t,1)}}}function LS(){let e=(0,jt.get)(F.STORAGE_COMPRESSION),t=(0,jt.get)(F.STORAGE_COMPRESSION_DICTIONARY),r=(0,jt.get)(F.STORAGE_COMPRESSION_THRESHOLD)||DG,n={startingOffset:32};return t&&(n.dictionary=jp.readFileSync(t)),r&&(n.threshold=r),e&&n}var jt,IS,Md,kt,gs,Ld,LN,jp,DN,OG,wS,NS,Qp,PG,LG,OS,qce,Or,MN,PS,DG,AS,bn,ve,Pd,Wp,zp,CS,Zo,Dd,$ce,Vce,we=se(()=>{jt=b(ae()),IS=b(Wt()),Md=require("lmdb"),kt=require("path"),gs=require("fs"),Ld=b(bt());bg();LN=b(ap());H();jp=b(require("fs-extra")),DN=b(li()),OG=b(xn()),wS=b(zo()),NS=b(ls()),Qp=require("worker_threads"),PG=b(J()),LG=b(tt());Ki();dl();ss();CG();OS=b(op()),{forComponent:qce}=PG.default;a(Jp,"OpenDBIObject");Or=qce("storage"),MN="data",PS=Symbol("defined-tables"),DG=((0,jt.get)(F.STORAGE_PAGESIZE)||4096)-60;(0,jt.initSync)();AS=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],bn=Object.create(null),ve=Object.create(null);(0,DN._assignPackageExport)("databases",ve);(0,DN._assignPackageExport)("tables",bn);Pd=Symbol.for("next-table-id"),Wp=[],zp=[],Zo=new Map;a(Gce,"getTables");a(lt,"getDatabases");a(vd,"resetDatabases");a(Yp,"readMetaDb");a(MG,"ensureDB");a(vG,"setTable");a(hd,"database");a(Nw,"dropDatabase");a(UG,"openIndex");a(Xe,"table");$ce=1e3,Vce=10;a(Kce,"runIndexing");a(Yce,"dropTableMeta");a(Hl,"onUpdatedTable");a(Xp,"onRemovedDB");a(LS,"getDefaultCompression")});var xN={};ye(xN,{loadGQLSchema:()=>jce,start:()=>UN,startOnMainThread:()=>zce});function UN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=o(new c(r.toString(),s)),m=new Map,p=[],h;for(let R of f.definitions)switch(R.kind){case l.OBJECT_TYPE_DEFINITION:let $=function(q){if(q.kind==="NonNullType"){let Y=$(q.type);return Y.nullable=!1,Y}if(q.kind==="ListType")return{type:"array",elements:$(q.type)};let j={type:q.name?.value};return Object.defineProperty(j,"location",{value:q.loc.startToken}),j};a($,"getProperty");let S=R.name.value,y=[],N={table:null,database:null,properties:y};m.set(S,N),i.allTypes.set(S,N);for(let q of R.directives){if(q.name.value==="table"){for(let j of q.arguments)N[j.name.value]=j.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=S),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,p.push(N)}if(q.name.value==="sealed"&&(N.sealed=!0),q.name.value==="splitSegments"&&(N.splitSegments=!0),q.name.value==="replicate"&&(N.replicate=!0),q.name.value==="export"){N.export=!0;for(let j of q.arguments)typeof N.export!="object"&&(N.export={}),N.export[j.name.value]=j.value.value}}let I=!1,ee={};for(let q of R.fields){let k=$(q.type);k.name=q.name.value,y.push(k),ee[k.name]=void 0;for(let j of q.directives){let Y=j.name.value;if(Y==="primaryKey")I?console.warn("Can not define two attributes as a primary key at",j.loc):(k.isPrimaryKey=!0,I=!0);else if(Y==="indexed"){let le={};for(let fe of j.arguments||[])le[fe.name.value]=fe.value.value;k.indexed=le}else if(Y==="computed"){for(let le of j.arguments||[])if(le.name.value==="from"){let fe=le.value.value;k.computed={from:g(fe,le,ee)},k.version==null&&(k.version=fe)}else le.name.value==="version"&&(k.version=le.value.value);k.computed=k.computed||!0}else if(Y==="relationship"){let le={};for(let fe of j.arguments)le[fe.name.value]=fe.value.value;k.relationship=le}else if(Y==="createdTime")k.assignCreatedTime=!0;else if(Y==="updatedTime")k.assignUpdatedTime=!0;else if(Y==="expiresAt")k.expiresAt=!0;else if(Y==="enumerable")k.enumerable=!0;else if(Y==="allow"){let le=k.authorizedRoles=[];for(let fe of j.arguments)fe.name.value==="role"&&le.push(fe.value.value)}else server.knownGraphQLDirectives.includes(Y)&&console.warn(`@${Y} is an unknown directive, at`,j.loc)}}N.type=S,S==="Query"&&(h=N)}function E(R){let S=m.get(R.type);S?(Object.defineProperty(R,"properties",{value:S.properties}),Object.defineProperty(R,"definition",{value:S})):R.type==="array"?E(R.elements):Wce.includes(R.type)||(0,BG.getWorkerIndex)()===0&&console.error(`The type ${R.type} is unknown at line ${R.location.line}, column ${R.location.column}, in ${s}`)}a(E,"connectPropertyType");for(let R of m.values())for(let S of R.properties)E(S);for(let R of p)R.tableClass=e(R),R.export&&(R.export.name===""?i.set((0,vN.dirname)(n),R.tableClass):i.set((0,vN.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function g(R,S,y){return new xG.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${R}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(y)}a(g,"createComputedFrom")}}var vN,xG,BG,Wce,zce,jce,FG=se(()=>{vN=require("path"),xG=require("node:vm");we();BG=b(tt());ja();Wce=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow","enumerable"]);a(UN,"start");zce=UN,jce=a(e=>UN({ensureTable:Xe}).handleFile(e,null,null,new nd),"loadGQLSchema")});var FN={};ye(FN,{start:()=>sle});function Qce(e){if(e.kind!==He.Kind.OPERATION_DEFINITION&&e.kind!==He.Kind.FRAGMENT_DEFINITION)throw new Kr(`Unexpected non-executable definition type ${e.kind}.`)}function kG(e){if(typeof e!="object"||e===null)throw new uo("Request body must be an object.");if(!("query"in e))throw new uo("Request body must contain a `query` field.");if(typeof e.query!="string")throw new uo("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new uo("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new uo("Request body `operationName` field must be a string.")}function BN(e){return parseInt(e.value,10)}function qG(e){return parseFloat(e.value)}function GG(e,t,r){let n=r.get(e.name.value);return $G(n)?VG(n,t):{attribute:t,value:n}}function $G(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function VG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],$G(n)?VG(n,t):{attribute:t,value:n}))}function Jce(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case He.Kind.NULL:return{attribute:t,value:null};case He.Kind.INT:return{attribute:t,value:BN(e.value)};case He.Kind.FLOAT:return{attribute:t,value:qG(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:t,value:e.value.value};case He.Kind.VARIABLE:return GG(e.value,t,r);case He.Kind.OBJECT:return KG(e.value,t,r);case He.Kind.LIST:case He.Kind.ENUM:default:throw new Kr(`Value type, ${e.value.kind}, is not supported.`)}}function KG(e,t,r){return e.fields.flatMap(n=>Jce(n,t,r))}function Xce(e,t){switch(e.value.kind){case He.Kind.NULL:return{attribute:e.name.value,value:null};case He.Kind.INT:return{attribute:e.name.value,value:BN(e.value)};case He.Kind.FLOAT:return{attribute:e.name.value,value:qG(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case He.Kind.VARIABLE:return GG(e.value,e.name.value,t);case He.Kind.OBJECT:return KG(e.value,[e.name.value],t);case He.Kind.LIST:case He.Kind.ENUM:default:throw new Kr(`Argument type, ${e.value.kind}, is not supported.`)}}function Zce(e,t){return e.flatMap(r=>Xce(r,t))}function DS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case He.Kind.FIELD:return r;case He.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Kr(`Fragment \`${n}\` not found.`);return DS(s.selectionSet,t)}case He.Kind.INLINE_FRAGMENT:return DS(r.selectionSet,t)}})}function YG(e,t){return DS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:YG(r.selectionSet,t)}:r.name.value)}async function ele(e,t,r,n){let s=Bs.getMatch(e.name.value,"graphql");if(s===void 0)throw new Kr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:YG(e.selectionSet,r),conditions:Zce(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function WG(e){switch(e.kind){case He.Kind.NULL:return null;case He.Kind.INT:return BN(e);case He.Kind.FLOAT:return parseFloat(e.value);case He.Kind.STRING:case He.Kind.BOOLEAN:return e.value;case He.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:WG(r.value),...t}),{});case He.Kind.LIST:case He.Kind.ENUM:default:throw new Kr(`Value type, ${e.kind}, is not supported.`)}}function tle(e,t){let r=new Map;for(let n of e){let s=n.variable.name.value,i=t?.[s];if(i===void 0&&n.defaultValue!==void 0&&(i=WG(n.defaultValue)),n.type.kind===He.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Kr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function rle(e,t,r,n){if(e.operation===He.OperationTypeNode.SUBSCRIPTION)throw new Kr("Subscriptions are not supported.");if(e.operation===He.OperationTypeNode.MUTATION)throw new Kr("Mutations are not supported yet.");let s=tle(e.variableDefinitions,t),i=await Promise.all(DS(e.selectionSet,r).map(c=>ele(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function HG({query:e,variables:t={},operationName:r},n){let s=He.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(Qce(u),u.kind===He.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Kr("Unnamed operations are only allowed when there is a single operation in the document.");let d=u.name?.value??"Unnamed Query";if(i.has(d))throw new Kr(`Duplicate operation definition: ${d}`);i.set(d,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Kr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Kr(`Operation \`${r}\` not found.`);let l=await rle(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function nle(e){switch(e.method){case"GET":{let t=new URLSearchParams(e.url.split("?")[1]),r={};for(let[n,s]of t)r[n]=n==="variables"||n==="extensions"?JSON.parse(s):s;return kG(r),HG(r,e)}case"POST":{let r=await Fo(e.headers.get("content-type"),!0)(e._nodeRequest);return kG(r),HG(r,e)}default:throw new uo("Method Not Allowed",405,{Allow:"GET, POST"})}}function sle(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await nle(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof uo)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof He.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Kr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof uo)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof He.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Kr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var He,Kr,uo,zG=se(()=>{He=b(require("graphql"));ko();ja();a(Qce,"assertExecutableDefinitionNode");a(kG,"assertRequestParams");a(BN,"processIntValueNode");a(qG,"processFloatValueNode");a(GG,"processVariableNode");a($G,"isObject");a(VG,"transformObjectIntoQueryCondition");a(Jce,"processObjectFieldNode");a(KG,"processObjectValueNode");a(Xce,"processArgumentNode");a(Zce,"buildConditionsQuery");a(DS,"fillInFragments");a(YG,"buildSelectQuery");a(ele,"processFieldNode");a(WG,"processConstValueNode");a(tle,"resolveVariables");a(rle,"executeOperation");a(HG,"resolver");Kr=class extends Error{static{a(this,"GraphQLQueryingError")}},uo=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(nle,"graphqlQueryingHandler");a(sle,"start")});var e$=v((xxe,ZG)=>{var Ud=require("validate.js"),QG=ot(),xd=(H(),M(W)),{handleHDBError:ile,hdbErrors:ole}=_e(),{HDB_ERROR_MSGS:ir,HTTP_STATUS_CODES:ale}=ole,kN=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),cle={STRUCTURE_USER:"structure_user"},jG=Object.values(xd.ROLE_TYPES_ENUM),lle="attribute_permissions",ule="attribute_name",{PERMS_CRUD_ENUM:Bd}=xd,dle=[lle,...Object.values(Bd)],JG=[Bd.READ,Bd.INSERT,Bd.UPDATE],fle=[ule,...JG];function mle(e){let t=kN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,XG(e,t)}a(mle,"addRoleValidation");function ple(e){let t=kN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,XG(e,t)}a(ple,"alterRoleValidation");function hle(e){let t=kN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,QG.validateObject(e,t)}a(hle,"dropRoleValidation");var Ele=["operation","role","id","permission","hdb_user","access"];function XG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Ele.includes(n[o])||s.push(n[o]);s.length>0&&hr(ir.INVALID_ROLE_JSON_KEYS(s),r);let i=QG.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{hr(o,r)}),e.permission){let o=_le(e);o&&hr(o,r),jG.forEach(c=>{e.permission[c]&&!Ud.isBoolean(e.permission[c])&&hr(ir.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(jG.indexOf(o)<0){if(o===cle.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||hr(ir.SCHEMA_NOT_FOUND(f),r)}continue}hr(ir.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){hr(ir.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){hr(ir.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{dle.includes(d)||hr(ir.INVALID_PERM_KEY(d),r,o,l)}),Object.values(Bd).forEach(d=>{Ud.isDefined(u[d])?Ud.isBoolean(u[d])||hr(ir.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):hr(ir.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){hr(ir.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){hr(ir.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[o][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let p=u.attribute_permissions[m];if(Object.keys(p).forEach(E=>{!fle.includes(E)&&E!==Bd.DELETE&&hr(ir.INVALID_ATTR_PERM_KEY(E),r,o,l)}),!Ud.isDefined(p.attribute_name)){hr(ir.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=p.attribute_name;if(!d.includes(h)){hr(ir.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}JG.forEach(E=>{Ud.isDefined(p[E])?Ud.isBoolean(p[E])||hr(ir.ATTR_PERM_NOT_BOOLEAN(E,h),r,o,l):hr(ir.ATTR_PERM_MISSING(E,h),r,o,l)}),!f.read&&p.read===!0&&(f.read=!0),!f.insert&&p.insert===!0&&(f.insert=!0),!f.update&&p.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${o}.${l}`;hr(ir.MISMATCHED_TABLE_ATTR_PERMS(m),r,o,l)}}}}return gle(r)}a(XG,"customValidate");ZG.exports={addRoleValidation:mle,alterRoleValidation:ple,dropRoleValidation:hle};function _le(e){let{operation:t,permission:r}=e;if(t===xd.OPERATIONS_ENUM.ADD_ROLE||t===xd.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 ir.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?xd.ROLE_TYPES_ENUM.SUPER_USER:xd.ROLE_TYPES_ENUM.CLUSTER_USER;return ir.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(_le,"validateNoSUPerms");function gle(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:ir.ROLE_PERMS_ERROR,...e};return ile(new Error,n,ale.BAD_REQUEST)}else return null}a(gle,"generateRolePermResponse");function hr(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(hr,"addPermError")});var eh=v((kxe,s$)=>{"use strict";var t$=_n(),r$=Sn(),Sle=rc(),qN=e$(),GN=zo(),Fxe=require("uuid").v4,Tle=require("util"),MS=(H(),M(W)),yle=oe(),$N=r$.searchByValue,Rle=r$.searchByHash,ble=Tle.promisify(Sle.delete),Ale=pi(),Ile=dd(),{hdbErrors:wle,handleHDBError:ql}=_e(),{HDB_ERROR_MSGS:n$,HTTP_STATUS_CODES:Zp}=wle,{UserEventMsg:VN}=ls();s$.exports={addRole:Nle,alterRole:Cle,dropRole:Ole,listRoles:Ple};function HN(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(HN,"scrubRoleDetails");async function Nle(e){let t=qN.addRoleValidation(e);if(t)throw t;e=HN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await $N(r)||[])}catch(i){throw ql(i)}if(n&&n.length>0)throw ql(new Error,n$.ROLE_ALREADY_EXISTS(e.role),Zp.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await t$.insert(s),GN.signalUserChange(new VN(process.pid)),e=HN(e),e}a(Nle,"addRole");async function Cle(e){let t=qN.alterRoleValidation(e);if(t)throw t;e=HN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await t$.update(r)}catch(s){throw ql(s)}if(n&&n?.message==="updated 0 of 1 records")throw ql(new Error,"Invalid role id",Zp.BAD_REQUEST,void 0,void 0,!0);return await GN.signalUserChange(new VN(process.pid)),e}a(Cle,"alterRole");async function Ole(e){let t=qN.dropRoleValidation(e);if(t)throw ql(new Error,t,Zp.BAD_REQUEST,void 0,void 0,!0);let r=new Ile(MS.SYSTEM_SCHEMA_NAME,MS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Rle(r));if(n.length===0)throw ql(new Error,n$.ROLE_NOT_FOUND,Zp.NOT_FOUND,void 0,void 0,!0);let s=new Ale(MS.SYSTEM_SCHEMA_NAME,MS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await $N(s)),o=!1;if(yle.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw ql(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Zp.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await ble(c),GN.signalUserChange(new VN(process.pid)),`${n[0].role} successfully deleted`}a(Ole,"dropRole");async function Ple(){return $N({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}a(Ple,"listRoles")});var KN={};ye(KN,{start:()=>a$,startOnMainThread:()=>Mle});function a$({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,i$.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let o in i.permission){if(Lle.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await Dle(i)}}}async function Dle(e){let t=lt().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,o$.isEqual)(i,e)?void 0:(e.id=r.id,(0,vS.alterRole)(e))}return(0,vS.addRole)(e)}var vS,i$,o$,Lle,Mle,c$=se(()=>{we();vS=b(eh()),i$=require("yaml"),o$=require("lodash"),Lle=["super_user","cluster_user","structure_user"];a(a$,"start");a(Dle,"ensureRole");Mle=a$});async function US(e){let t=(0,d$.pathToFileURL)(e).toString();if(vle)return th||(th=Ule(Ble)),(await(await th).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Ule(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),th=new Compartment({console,Math,Date,fetch:xle,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,u$.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=ur,s.tables=bn,s.databases=ve}};let n=await(0,l$.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),th}function xle(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 Ble(){return{Resource:ur,tables:bn}}var l$,u$,d$,vle,th,YN=se(()=>{Ko();we();l$=require("fs/promises"),u$=require("path"),d$=require("url"),vle=!1;a(US,"secureImport");a(Ule,"getCompartment");a(xle,"secureOnlyFetch");a(Ble,"getGlobalVars")});var WN={};ye(WN,{handleApplication:()=>Fle,suppressHandleApplicationWarning:()=>kle});function f$(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Fle(e){e.handleEntry(t=>{if(t.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${t.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(t.eventType!=="add"){e.requestRestart();return}US(t.absolutePath).then(r=>{let n=(0,xS.dirname)(t.urlPath);f$(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),m$(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function m$(e,t,r){for(let n in t){let s=t[n],i=(0,xS.join)(r,n);f$(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&m$(e,s,i)}}var xS,kle,p$=se(()=>{YN();xS=require("path");a(f$,"isResource");a(Fle,"handleApplication");a(m$,"recurseForResources");kle=!0});var jN={};ye(jN,{start:()=>Hle});function Hle({resources:e}){e.set("login",zN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var zN,h$=se(()=>{Ko();a(Hle,"start");zN=class extends ur{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)}}}});function FS(e,t){let r={openapi:qle,info:{title:"HarperDB HTTP REST interface",version:y$.packageJson.version},servers:[{description:"REST API",url:t}],paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},n=[{basicAuth:[],bearerAuth:[]}],s=a(i=>{if(i.type&&!r.components.schemas[i.type]){r.components.schemas[i.type]={};let o={},c=[];for(let l of i.properties)BS[l.type]?o[l.name]=new JN(BS[l.type],l.type):l.properties?(o[l.name]=new b$(l.type),s(l)):l.elements?.properties&&(o[l.name]=new Kle(l.elements.type),s(l.elements)),l.nullable===!1&&c.push(l.name);r.components.schemas[i.type]=new T$(o,!i.sealed,c)}},"includeDefinitionInSchema");for(let[,i]of e){if(!i.path||i.Resource.isError)continue;let{path:o}=i,c=o.split("/").pop(),{attributes:l,sealed:u}=i.Resource,{prototype:d,primaryKey:f="id"}=i.Resource;if(!l&&e.allTypes.has(i.path)){let k=e.allTypes.get(i.path);u=k.sealed,l=k.properties}if(!f)continue;let m={},p=[],h=[];if(l)for(let{type:k,name:j,elements:Y,relationship:le,definition:fe,nullable:te}of l){let ge=fe??Y?.definition;ge&&s(ge),te===!1&&h.push(j),le?k==="array"?m[j]={type:"array",items:{$ref:Vs+Y.type}}:m[j]={$ref:Vs+k}:ge?k==="array"?m[j]={type:"array",items:{$ref:Vs+ge.type}}:m[j]={$ref:Vs+ge.type}:k==="array"?Y.type==="Any"?m[j]={type:"array",items:{format:Y.type}}:m[j]={type:"array",items:new JN(BS[Y.type],Y.type)}:k==="Any"?m[j]={format:k}:m[j]=new JN(BS[k],k),p.push(new XN(j,"query",m[j]))}let E=Object.keys(m),g=new XN(f,"path",{type:"string",format:"ID"});g.required=!0,g.description="primary key of record";let R=new XN("property","path",{enum:E});R.required=!0,r.components.schemas[c]=new T$(m,!u,h);let S=d.post!==Resource.prototype.post||d.update,y=typeof d.put=="function",N=typeof d.get=="function",I=typeof d.delete=="function",$=typeof d.patch=="function",ee=`/${o}/`;r.paths[ee]||(r.paths[ee]={}),S&&(r.paths[ee].post=new Gle(c,n,{200:new Fd({$ref:Vs+c},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),r.paths[ee].options=new E$(p,n,{200:new _$},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),N&&(r.paths[ee].get=new QN(p,n,{200:new Fd({type:"array",items:{$ref:Vs+c}})},"search for records by the specified property name and value pairs")),I&&(r.paths[ee].delete=new S$(p,n,"delete all the records that match the provided query",{204:new g$}));let q="/"+o+"/{"+f+"}";if(r.paths[q]||(r.paths[q]={}),r.paths[q].options=new E$(p,n,{200:new _$},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),N&&(r.paths[q].get=new QN([g],n,{200:new Fd({$ref:Vs+c})},"retrieve a record by its primary key")),y&&(r.paths[q].put=new $le([g],n,c,{200:new Fd({$ref:Vs+c})},"create or update the record with the URL path that maps to the record's primary key")),$&&(r.paths[q].patch=new Vle([g],n,c,{200:new Fd({$ref:Vs+c})},"patch the record with the URL path that maps to the record's primary key")),I&&(r.paths[q].delete=new S$([g],n,"delete a record with the given primary key",{204:new g$})),N&&R.schema.enum.length>0){let k=`/${o}/{${f}}.{property}`;r.paths[k]||(r.paths[k]={}),r.paths[k].get=new QN([g,R],n,{200:new Fd({enum:E})},"used to retrieve the specified property of the specified record")}}for(let[,i]of e.allTypes)s(i),i.sealed&&r.components.schemas[i.type].additionalProperties&&(r.components.schemas[i.type].additionalProperties=!1);return r}function Gle(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Vs+e}}}},this.security=t,this.responses=r}function QN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function E$(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function _$(){this.description=R$,this.headers={},this.content={}}function Fd(e,t){this.description=R$,this.content={"application/json":{schema:e}},this.headers=t}function g$(){this.description="successfully processed request, no content returned to client"}function $le(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Vs+r}}}},this.responses=n}function Vle(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Vs+r}}}},this.responses=n}function S$(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function T$(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function JN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function b$(e){this.$ref=`#/components/schemas/${e}`}function Kle(e){this.type="array",this.items=new b$(e)}function XN(e,t,r){this.name=e,this.in=t,this.schema=r}var y$,qle,BS,Vs,R$,ZN=se(()=>{y$=b(Rt()),qle="3.0.3",BS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Vs="#/components/schemas/",R$="successful operation";a(FS,"generateJsonApi");a(Gle,"Post");a(QN,"Get");a(E$,"Options");a(_$,"ResponseOptions200");a(Fd,"Response200");a(g$,"Response204");a($le,"Put");a(Vle,"Patch");a(S$,"Delete");a(T$,"ResourceSchema");a(JN,"Type");a(b$,"Ref");a(Kle,"ArrayRef");a(XN,"Parameter")});var I$={};ye(I$,{Request:()=>uc,createReuseportFd:()=>kS});var A$,uc,eC,tC,kS,rh=se(()=>{A$=require("os"),uc=class{static{a(this,"Request")}#e;#t;_nodeRequest;_nodeResponse;method;url;headers;isWebSocket;user;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new tC(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.#t===void 0&&(this.#t=this._nodeRequest.socket.getPeerCertificate?.(!0)||null),this.#t}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new eC(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get hostname(){return this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}get nodeRequest(){return this._nodeRequest}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},eC=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)}},tC=class{static{a(this,"Headers")}asObject;constructor(t){this.asObject=t}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return Object.prototype.hasOwnProperty.call(this.asObject,t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,A$.platform)()!="win32"&&(kS=require("node-unix-socket").createReuseportFd)});var qS={};ye(qS,{parseHeaderValue:()=>nC,start:()=>zle});async function Wle(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&yg(e);let i=new qs;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==w$){let g=HS.getMatch(o,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new di(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let R=nC(g);for(let S of R)switch(S.name){case"max-age":e.expiresAt=S.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=nC(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await At(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Fo(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new kd.ClientError(g,400)}if(e.authorize=!0,o===w$&&s==="GET"){if(e?.user?.role?.permission?.super_user)return FS(HS,`${e.protocol}://${e.hostname}`);throw new kd.ServerError("Forbidden",403)}switch(c.checkPermission=e.user?.role?.permission??{},s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new kd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new kd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,rC.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=lG(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=qm(f.data,e,f)),f}else if(isFinite(p)){Yle[0]=p;let g=String.fromCharCode(34,(sn[0]&63)+62,(sn[0]>>6)+(sn[1]<<2&63)+62,(sn[1]>>4)+(sn[2]<<4&63)+62,(sn[2]>>2)+62,(sn[3]&63)+62,(sn[3]>>6)+(sn[4]<<2&63)+62,(sn[4]>>4)+(sn[5]<<4&63)+62,(sn[5]>>2)+62,(sn[6]&63)+62,(sn[6]>>6)+(sn[7]<<2&63)+62,34),R=r["if-none-match"];R&&g==R?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),rC.lastModified&&i.setIfNone("Last-Modified",new Date(p).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let h={status:m,headers:i,body:void 0},E=e.loadedFromSource??f?.wasLoadedFromSource?.();return E!==void 0&&(h.wasCacheMiss=E,!E&&isFinite(p)&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||p))/1e3))),f!==void 0&&(h.body=qm(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(o){o.statusCode?o.statusCode===500?Ti.warn(o):Ti.info(o):Ti.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.setIfNone("Allow",o.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:o.statusCode||500,headers:i,body:void 0};return c.body=qm(o.contentType?o:O$(o),e,c),c}}function zle(e){rC=e,e.includeExpensiveRecordCountEstimates&&(uc.prototype.includeExpensiveRecordCountEstimates=!0),!N$&&(N$=!0,HS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Wle(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{nh++;let s=new ns;C$||(C$=!0,tp(l=>{nh>0&&l.push({metric:"ws-connections",connections:nh,byThread:!0})}));let i;t.on("error",l=>{i=!0,Ti.warn(l)});let o;t.on("message",a(function(u){o||(o=Fo(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=o(u);Ve(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{nh--,tn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=HS.getMatch(l,"ws");if(tn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Ve(h=>({count:h.count,total:nh}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new di(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await At(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Bo(p.value,r);t.send(h),Ve(h.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(E=>t._socket.once("drain",E))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?Ti.warn(l):Ti.info(l):Ti.error(l),t.close(jle[l.statusCode]||1011,O$(l))}t.close()},e))}function nC(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,o]=s.trim().split("=");i=i.trim(),o&&(o=o.trim()),r={name:i.toLowerCase(),value:o,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var Ti,kd,O$,sn,Yle,rC,w$,N$,HS,C$,nh,jle,P$=se(()=>{ko();is();Ti=b(J()),kd=b(_e());Rg();Fu();Ga();Gp();ZN();rh();Ag();({errorToString:O$}=Ti),sn=new Uint8Array(8),Yle=new Float64Array(sn.buffer,0,1),rC={},w$="openapi";a(Wle,"http");nh=0;a(zle,"start");jle={401:3e3,403:3003};a(nC,"parseHeaderValue")});var sC=v((d0e,D$)=>{var{recordAction:GS,recordActionBinary:L$}=(is(),M(mg)),Qle=require("fastify-plugin"),Jle=200;D$.exports=Qle(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(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),GS(o,"duration",u,f,d),L$(s.raw.statusCode<400,"success",u,f,d),L$(1,"response_"+s.raw.statusCode,u,f,d);let m=Jle;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{GS(performance.now()-c,"transfer",u,f,d),GS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,GS(m,"bytes-sent",u,f,d));let p=o.toFixed(3),h=s.getHeader("Server-Timing"),E=`db;dur=${p}`;s.header("Server-Timing",h?`${h}, ${E}`:E)}),r()},{name:"hdb-request-time"})});var v$=v((f0e,M$)=>{var Xle=ot(),Zle={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};M$.exports=function(e){return Xle.validateObject(e,Zle)}});var sh=v((m0e,U$)=>{"use strict";var eue=(H(),M(W)).OPERATIONS_ENUM,iC=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=eue.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};U$.exports=iC});var ah={};ye(ah,{createTokens:()=>cC,getJWTRSAKeys:()=>WS,refreshOperationToken:()=>lC,validateOperationToken:()=>uC,validateRefreshToken:()=>zS});async function WS(){if($S)return $S;try{let e=ih.default.join(oh.default.getHdbBasePath(),Wb),t=await VS.default.readFile(ih.default.join(e,Am.JWT_PASSPHRASE_NAME),"utf8"),r=await VS.default.readFile(ih.default.join(e,Am.JWT_PRIVATE_KEY_NAME),"utf8");return $S={publicKey:await VS.default.readFile(ih.default.join(e,Am.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},$S}catch(e){throw YS.default.error(e),new yi.ClientError(qd.NO_ENCRYPTION_KEYS,Hd.INTERNAL_SERVER_ERROR)}}async function cC(e){let t=(0,oC.validateBySchema)(e,fo.default.object({username:fo.default.string().optional(),password:fo.default.string().optional(),role:fo.default.string().optional(),expires_in:fo.default.alternatives(fo.default.string(),fo.default.number()).optional()}));if(t)throw new yi.ClientError(t.message);let r;try{let f=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,f=!1),r=await(0,aC.findAndValidateUser)(e.username,e.password,f)}catch(f){throw YS.default.error(f),new yi.ClientError(qd.INVALID_CREDENTIALS,Hd.UNAUTHORIZED)}if(!r)throw new yi.ClientError(qd.INVALID_CREDENTIALS,Hd.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let o=await WS(),c=await Gd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??H$,algorithm:KS,subject:$d.OPERATION}),l=await Gd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:tue,algorithm:KS,subject:$d.REFRESH}),u=kw(l,$r.SHA256);if((await(0,x$.update)(new B$.default(Rm,Uu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new yi.ClientError(qd.REFRESH_TOKEN_SAVE_FAILED,Hd.INTERNAL_SERVER_ERROR);return F$.default.signalUserChange(new k$.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function lC(e){let t=(0,oC.validateBySchema)(e,fo.default.object({refresh_token:fo.default.string().required()}).required());if(t)throw new yi.ClientError(t.message);let{refresh_token:r}=e;await zS(r);let n=await WS(),s=await Gd.default.decode(r);return{operation_token:await Gd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:H$,algorithm:KS,subject:$d.OPERATION})}}async function uC(e){return q$(e,$d.OPERATION)}async function zS(e){return q$(e,$d.REFRESH)}async function q$(e,t){try{let r=await WS(),n=await Gd.default.verify(e,r.publicKey,{algorithms:KS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,aC.findAndValidateUser)(n.username,void 0,!1);if(t===$d.REFRESH&&!Hw(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw YS.default.warn(r),r?.name==="TokenExpiredError"?new yi.ClientError(qd.TOKEN_EXPIRED,Hd.FORBIDDEN):new yi.ClientError(qd.INVALID_TOKEN,Hd.UNAUTHORIZED)}}var Gd,VS,ih,fo,oC,yi,YS,aC,x$,B$,F$,k$,oh,Hd,qd,H$,tue,KS,$d,$S,Vd=se(()=>{Gd=b(require("jsonwebtoken")),VS=b(require("fs-extra")),ih=b(require("node:path")),fo=b(require("joi")),oC=b(ot());H();yi=b(_e()),YS=b(J());Gw();aC=b(Es()),x$=b(_n()),B$=b(sh()),F$=b(zo()),k$=b(ls()),oh=b(ae()),{HTTP_STATUS_CODES:Hd,AUTHENTICATION_ERROR_MSGS:qd}=yi.hdbErrors;oh.default.initSync();H$=oh.default.get(F.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",tue=oh.default.get(F.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",KS="RS256",$d={OPERATION:"operation",REFRESH:"refresh"};a(WS,"getJWTRSAKeys");a(cC,"createTokens");a(lC,"refreshOperationToken");a(uC,"validateOperationToken");a(zS,"validateRefreshToken");a(q$,"validateToken")});var dC=v((g0e,V$)=>{"use strict";var rue=v$(),Kd=require("passport"),nue=require("passport-local").Strategy,sue=require("passport-http").BasicStrategy,iue=require("util"),oue=Es(),$$=iue.callbackify(oue.findAndValidateUser),_0e=Jr(),aue=(H(),M(W)),G$=(Vd(),M(ah));Kd.use(new nue(function(e,t,r){$$(e,t,r)}));Kd.use(new sue(function(e,t,r){$$(e,t,r)}));Kd.serializeUser(function(e,t){t(null,e)});Kd.deserializeUser(function(e,t){t(null,e)});function cue(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":Kd.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===aue.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?G$.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):G$.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Kd.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(cue,"authorize");function lue(e,t){let r=rue(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(lue,"checkPermissions");V$.exports={authorize:cue,checkPermissions:lue}});var _C=v((R0e,z$)=>{var XS=require("clone"),ZS=ot(),uue=oe(),QS=(H(),M(W)),T0e=J(),fC=require("fs"),pC=require("joi"),{string:JS}=pC.types(),{hdbErrors:due,handleHDBError:jS}=_e(),{HDB_ERROR_MSGS:y0e,HTTP_STATUS_CODES:mC}=due,{commonValidators:Yd}=Xi(),K$=" is required",fue=["insert","update","upsert"],hC={database:{presence:!1,format:Yd.schema_format,length:Yd.schema_length},schema:{presence:!1,format:Yd.schema_format,length:Yd.schema_length},table:{presence:!0,format:Yd.schema_format,length:Yd.schema_length},action:{inclusion:{within:fue,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},mue={schema:JS.required(),table:JS.required(),action:JS.valid("insert","update","upsert")},{AWS_ACCESS_KEY:pue,AWS_SECRET:hue,AWS_BUCKET:Eue,AWS_FILE_KEY:_ue,REGION:gue}=QS.S3_BUCKET_AUTH_KEYS,Sue={s3:{presence:!0},[`s3.${pue}`]:{presence:!0,type:"String"},[`s3.${hue}`]:{presence:!0,type:"String"},[`s3.${Eue}`]:{presence:!0,type:"String"},[`s3.${_ue}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${gue}`]:{presence:!0,type:"String"}},Y$=XS(hC);Y$.data.presence={message:K$};var W$=XS(hC);W$.file_path.presence={message:K$};var Tue=Object.assign(XS(hC),Sue),EC=XS(mue);EC.csv_url=JS.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();EC.passthrough_headers=pC.object();function yue(e){let t=ZS.validateObject(e,Y$);return eT(e,t)}a(yue,"dataObject");function Rue(e){let t=ZS.validateBySchema(e,pC.object(EC));return eT(e,t)}a(Rue,"urlObject");function bue(e){let t=ZS.validateObject(e,W$);return eT(e,t)}a(bue,"fileObject");function Aue(e){let t=ZS.validateObject(e,Tue);return eT(e,t)}a(Aue,"s3FileObject");function eT(e,t){if(!t){let r=uue.checkGlobalSchemaTable(e.schema,e.table);if(r)return jS(new Error,r,mC.BAD_REQUEST);if(e.operation===QS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{fC.accessSync(e.file_path,fC.constants.R_OK|fC.constants.F_OK)}catch(n){return n.code===QS.NODE_ERROR_CODES.ENOENT?jS(n,`No such file or directory ${n.path}`,mC.BAD_REQUEST):n.code===QS.NODE_ERROR_CODES.EACCES?jS(n,`Permission denied ${n.path}`,mC.BAD_REQUEST):jS(n)}}return t}a(eT,"postValidateChecks");z$.exports={dataObject:yue,urlObject:Rue,fileObject:bue,s3FileObject:Aue}});var gC=v((A0e,j$)=>{"use strict";var ch=J(),tT=(H(),M(W));async function Iue(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===tT.OPERATIONS_ENUM.INSERT||t.operation===tT.OPERATIONS_ENUM.UPDATE||t.operation===tT.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===tT.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(ch.info(i.message),i):i.http_resp_msg?(ch.error(`Error calling operation: ${e.name}`),ch.error(i.http_resp_msg),i):(ch.error(`Error calling operation: ${e.name}`),ch.error(i),i)}}a(Iue,"callOperationFunctionAsAwait");j$.exports={callOperationFunctionAsAwait:Iue}});var SC=v((w0e,J$)=>{"use strict";var{S3:wue,GetObjectCommand:Nue}=require("@aws-sdk/client-s3");J$.exports={getFileStreamFromS3:Cue,getS3AuthObj:Q$};async function Cue(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await Q$(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Nue(r))).Body}a(Cue,"getFileStreamFromS3");function Q$(e,t,r){return new wue({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(Q$,"getS3AuthObj")});var Z$=v((C0e,X$)=>{"use strict";var TC=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}},yC=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};X$.exports={BulkLoadFileObject:TC,BulkLoadDataObject:yC}});var tV=v((P0e,eV)=>{"use strict";var RC=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}};eV.exports=RC});var nV=v((D0e,rV)=>{"use strict";var bC=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};rV.exports=bC});var IC=v((v0e,iV)=>{"use strict";var sV=tV(),Oue=nV(),{HDB_ERROR_MSGS:Pue}=Jr(),AC=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Pue.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 sV(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Oue(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new sV(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}};iV.exports=AC});var dc=v((B0e,lV)=>{"use strict";var x0e=Sn(),lh=J(),{validateBySchema:oV}=ot(),ea=require("joi"),Lue=so(),rT=oe(),{handleHDBError:nT,hdbErrors:Due,ClientError:aV}=_e(),{HDB_ERROR_MSGS:sT,HTTP_STATUS_CODES:wC}=Due,cV=ae();cV.initSync();var{getDatabases:NC}=(we(),M(mt)),Mue=require("fs-extra"),vue=(H(),M(W));lV.exports={describeAll:Uue,describeTable:iT,describeSchema:xue};async function Uue(e={}){try{let t=rT.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=NC(),o={},c={},l=[],u=e?.exact_count,d=e?.include_computed;for(let m in i){o[m]=!0,!t&&!s&&!r&&(c[m]=e.hdb_user?.role?.permission[m]?.describe);let p=i[m];for(let h in p)try{let E;if(t||s||r)E=await iT({schema:m,table:h,exact_count:u,include_computed:d});else if(n&&n[m].describe&&n[m].tables[h].describe){let g=n[m].tables[h].attribute_permissions;E=await iT({schema:m,table:h,exact_count:u,include_computed:d},g)}E&&l.push(E)}catch(E){lh.error(E)}}let f={};for(let m in l)t||s||r?(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],o[l[m].schema]&&delete o[l[m].schema]):c[l[m].schema]&&(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],o[l[m].schema]&&delete o[l[m].schema]);for(let m in o)t||s||r?f[m]={}:c[m]&&(f[m]={});return f}catch(t){return lh.error("Got an error in describeAll"),lh.error(t),nT(new Error,sT.DESCRIBE_ALL_ERR)}}a(Uue,"describeAll");async function iT(e,t){rT.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=oV(e,ea.object({database:ea.string(),table:ea.string().required(),exact_count:ea.boolean().strict(),include_computed:ea.boolean().strict()}));if(i)throw new aV(i.message);let c=NC()[r];if(!c)throw nT(new Error,sT.SCHEMA_NOT_FOUND(e.schema),wC.NOT_FOUND);let l=c[n];if(!l)throw nT(new Error,sT.TABLE_NOT_FOUND(e.schema,e.table),wC.NOT_FOUND);function u(p){(!p.computed||e.include_computed)&&d.push({attribute:p.attribute,type:p.type,elements:p.elements?.type,indexed:p.indexed,is_primary_key:p.isPrimaryKey,assigned_created_time:p.assignCreatedTime,assigned_updated_time:p.assignUpdatedTime,nullable:p.nullable,computed:p.computed?!0:void 0,properties:p.properties?p.properties.map(h=>({type:h.type,name:h.name})):void 0})}a(u,"pushAtt");let d=[];if(s){let p={};s.forEach(h=>{h.describe&&(p[h.attribute_name]=!0)}),l.attributes.forEach(h=>{p[h.name]&&u(h)})}else l.attributes?.forEach(p=>u(p));let f;try{f=(await Mue.stat(l.primaryStore.env.path)).size}catch(p){lh.warn("unable to get database size",p)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(p=>p.isPrimaryKey||p.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(p=>p.name).filter(p=>p&&p!=="NATSReplicator"&&p!=="Replicator")),cV.get(vue.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Lue.createNatsTableStreamName(m.schema,m.name));try{let p=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=p.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=p.estimatedRange;let h=l.auditStore;if(h)for(let E of h.getKeys({reverse:!0,limit:1}))m.last_updated_record=E[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let E of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=E}catch(p){lh.warn(`unable to stat table dbi due to ${p}`)}return m}a(iT,"descTable");async function xue(e){rT.transformReq(e);let t=oV(e,ea.object({database:ea.string(),exact_count:ea.boolean().strict(),include_computed:ea.boolean().strict()}));if(t)throw new aV(t.message);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=NC()[n];if(!i)throw nT(new Error,sT.SCHEMA_NOT_FOUND(e.schema),wC.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),rT.isEmpty(l)||l.describe){let u=await iT({schema:e.schema,table:c,exact_count:e.exact_count,include_computed:e.include_computed},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(xue,"describeSchema")});var pV=v((k0e,mV)=>{"use strict";var Bue=dc(),{hdbErrors:uV}=_e(),{getDatabases:dV}=(we(),M(mt));mV.exports={checkSchemaExists:fV,checkSchemaTableExists:Fue,schemaDescribe:Bue};async function fV(e){if(!dV()[e])return uV.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(fV,"checkSchemaExists");async function Fue(e,t){let r=await fV(e);if(r)return r;if(!dV()[e][t])return uV.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Fue,"checkSchemaTableExists")});var oT=v((q0e,hV)=>{"use strict";var kue=fs();hV.exports={writeTransaction:Hue};function Hue(e,t,r){return kue.writeTransaction(e,t,r)}a(Hue,"writeTransaction")});var DC=v((Y0e,NV)=>{"use strict";var{decode:que}=require("msgpackr"),{isMainThread:$0e,parentPort:V0e,threadId:K0e}=require("worker_threads"),lT=Ht(),Wd=pt(),PC=(H(),M(W)),An=J(),OC=ae(),Gue=(H(),M(W)),{onMessageByType:$ue}=tt(),SV=so(),{recordAction:EV,recordActionBinary:Vue}=(is(),M(mg)),{publishToStream:Kue}=lT,{ConsumerEvents:_V}=require("nats"),Yue=Sn(),{promisify:Wue}=require("util"),{decodeBlobsWithWrites:zue}=(ss(),M(Q_)),TV=Wue(setTimeout),uT=1e4,dT,cT,jue,Que,yV,uh=new Map,zd=new Map;NV.exports={initialize:RV,ingestConsumer:LC,setSubscription:Jue,setIgnoreOrigin:ede,getDatabaseSubscriptions:Zue,updateConsumer:bV};async function RV(){$ue(PC.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await bV(n)}),yV=!0,An.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await lT.getNATSReferences();dT=e,cT=e.info.server_name,jue=t,Que=r}a(RV,"initialize");async function bV(e){if(e.status==="start"){let{js:t,jsm:r}=await AV(e.node_domain_name);LC(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=uh.get(e.stream_name+e.node_domain_name);t&&(An.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),uh.set(e.stream_name+e.node_domain_name,"close")),zd.get(e.node_domain_name)==="failed"&&zd.set(e.node_domain_name,"close")}}a(bV,"updateConsumer");var fT=new Map;function Jue(e,t,r){let n=fT.get(e);n||fT.set(e,n=new Map),n.set(t,r),yV||RV().then(Xue)}a(Jue,"setSubscription");async function Xue(){let e=await Yue.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+Wd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await AV(r),!n))break;let{schema:o,table:c}=i,l=SV.createNatsTableStreamName(o,c);LC(l,n,s,r)}}}a(Xue,"accessConsumers");async function AV(e){let t,r,n=1;for(;!r;)try{t=await dT.jetstream({domain:e}),r=await dT.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(zd.get(e)==="close")break;zd.set(e,"failed"),n%10===1&&An.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<uT?n++*100:uT;await TV(i)}return{js:t,jsm:r}}a(AV,"connectToRemoteJS");function Zue(){return fT}a(Zue,"getDatabaseSubscriptions");var IV;function ede(e){IV=e}a(ede,"setIgnoreOrigin");var wV=100,gV=new Array(wV),aT=0;async function LC(e,t,r,n){let{connection:s}=await lT.getNATSReferences();dT=s,cT=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,cT),An.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(zd.get(n)==="close")break;o%10===1&&An.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(An.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await lT.createConsumer(r,e,cT,new Date(Date.now()).toISOString()));let d=o++*100<uT?o++*100:uT;await TV(d)}let c=!1,l;for(;!c;){if(uh.get(e+n)==="close"||zd.get(n)==="close"){uh.delete(e+n),c=!0;continue}l=await i.consume({max_messages:OC.get(PC.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),uh.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===_V.ConsumerDeleted&&(await l.close(),c=!0),d.type===_V.HeartbeatsMissed){let f=d.data;An.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(An.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await gV[aT],gV[aT]=tde(d).catch(f=>{An.error(f)}),++aT>=wV&&(aT=0)}catch(d){d.message==="consumer deleted"?(An.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):An.error("Error consuming clustering ingest, restarting consumer",d)}}}a(LC,"ingestConsumer");async function tde(e){let t;await zue(()=>{t=que(e.data)}),EV(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),An.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=OC.get(PC.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Wd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Wd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Wd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!IV),Vue(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Wd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;An.trace("processing message:",o,c,u,(d?"records: "+d.map(I=>I?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),An.trace(`messageProcessor nats msg id: ${e.headers.get(Wd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(I=>h=I),{timestamp:g,user:R,node_name:S}=m||{},y=fT.get(c)?.get(u);if(!y)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=h,y.send(t);else if(d.length===1&&!l)y.send({type:CC(o),value:d[0],id:f?.[0],expiresAt:p,timestamp:g,table:u,onCommit:h,user:R,nodeName:S});else{let I=d.map(($,ee)=>({type:CC(o),value:$,expiresAt:p,id:f?.[ee],table:u}));for(;l;)I.push({type:CC(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:I,table:u,timestamp:g,onCommit:h,user:R,nodeName:S})}OC.get(Gue.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Kue(e.subject.split(".").slice(0,-1).join("."),SV.createNatsTableStreamName(c,u),e.headers,e.data),await E;let N=Date.now()-g;g&&EV(N,"replication-latency",e.subject,o,"ingest")}catch(o){An.error(o)}e.ack()}a(tde,"messageProcessor");function CC(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(CC,"convertOperation")});var Ht=v((Z0e,VV)=>{"use strict";var Yr=ae();Yr.initSync();var rde=require("fs-extra"),nde=require("semver"),mh=require("path"),{monotonicFactory:sde}=require("ulidx"),OV=sde(),ide=require("util"),PV=require("child_process"),ode=ide.promisify(PV.exec),ade=PV.spawn,on=pt(),rt=(H(),M(W)),{packageJson:cde,PACKAGE_ROOT:lde}=Rt(),mT=oe(),Ri=J(),pT=so(),ude=oT(),dh=St(),{broadcast:dde,onMessageByType:fde,getWorkerIndex:mde}=tt(),{isMainThread:LV}=require("worker_threads"),{Encoder:pde,decode:xC}=require("msgpackr"),DV=new pde,{isEmpty:Kl}=mT,MV=Es(),z0e=48*36e11;LV&&fde(rt.ITC_EVENT_TYPES.RESTART,()=>{In=void 0,Vl=void 0});var{connect:hde,StorageType:Ede,RetentionPolicy:_de,AckPolicy:BC,DeliverPolicy:FC,DiscardPolicy:gde,NatsConnection:j0e,JetStreamManager:Q0e,JetStreamClient:J0e,StringCodec:X0e,JSONCodec:Sde,createInbox:kC,headers:Tde,ErrorCode:CV}=require("nats"),{recordAction:yde}=(is(),M(mg)),{encodeBlobsAsBuffers:Rde}=(ss(),M(Q_)),vV=Sde(),bde="clustering",Ade=cde.engines[on.NATS_SERVER_NAME],Ide=mh.join(lde,"dependencies"),UC=mh.join(Ide,`${process.platform}-${process.arch}`,on.NATS_BINARY_NAME),MC,vC,fh,Gl,$l;VV.exports={runCommand:UV,checkNATSServerInstalled:wde,createConnection:HC,getConnection:ph,getJetStreamManager:hh,getJetStream:BV,getNATSReferences:mo,getServerList:Cde,createLocalStream:qC,listStreams:FV,deleteLocalStream:Ode,getServerConfig:jd,listRemoteStreams:Pde,viewStream:Lde,viewStreamIterator:Dde,publishToStream:Mde,request:xde,reloadNATS:GC,reloadNATSHub:Bde,reloadNATSLeaf:Fde,extractServerName:Ude,requestErrorHandler:kde,createLocalTableStream:GV,createTableStreams:Gde,purgeTableStream:$V,purgeSchemaTableStreams:$de,getStreamInfo:Vde,updateLocalStreams:Yde,closeConnection:Nde,getJsmServerName:hT,addNatsMsgHeader:kV,clearClientCache:xV,updateRemoteConsumer:Hde,createConsumer:HV,updateConsumerIterator:qde};async function UV(e,t=void 0){let{stdout:r,stderr:n}=await ode(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
16
16
|
`,""));return r.replace(`
|
|
17
|
-
`,"")}a(UV,"runCommand");async function wde(){try{await rde.access(UC)}catch{return!1}let e=await UV(`${UC} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return nde.eq(t,Ade)}a(wde,"checkNATSServerInstalled");async function HC(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await MV.getClusterUser();if(Kl(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Ri.trace("create nats connection called");let i=await hde({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Yr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Yr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Yr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ri.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Ri.error("Error with Nats client connection, connection closed",o),i===In&&xV()}),i}a(HC,"createConnection");function xV(){In=void 0,Gl=void 0,$l=void 0,Vl=void 0}a(xV,"clearClientCache");async function Nde(){In&&(await In.drain(),In=void 0,Gl=void 0,$l=void 0,Vl=void 0)}a(Nde,"closeConnection");var In,Vl;async function ph(){return Vl||(Vl=HC(Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),In=await Vl),In||Vl}a(ph,"getConnection");async function hh(){if(Gl)return Gl;Kl(In)&&await ph();let{domain:e}=jd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Kl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Gl=await In.jetstreamManager({domain:e,timeout:6e4}),Gl}a(hh,"getJetStreamManager");async function BV(){if($l)return $l;Kl(In)&&await ph();let{domain:e}=jd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Kl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return $l=In.jetstream({domain:e,timeout:6e4}),$l}a(BV,"getJetStream");async function mo(){let e=In||await ph(),t=Gl||await hh(),r=$l||await BV();return{connection:e,jsm:t,js:r}}a(mo,"getNATSReferences");async function Cde(e){let t=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await MV.getClusterUser(),s=await HC(t,r,n),i=kC(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let f=vV.decode(d.data);f.response_time=Date.now()-l,c.push(f)}})();return l=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 mT.asyncSetTimeout(e),await o.drain(),await s.close(),await u,c}a(Cde,"getServerList");async function qC(e,t){let{jsm:r}=await mo(),n=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Ede.File,retention:_de.Limits,subjects:t,discard:gde.Old,maxMsgs:s,maxBytes:i,maxAge:n})}a(qC,"createLocalStream");async function FV(){let{jsm:e}=await mo(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(FV,"listStreams");async function Ode(e){let{jsm:t}=await mo();await t.streams.delete(e)}a(Ode,"deleteLocalStream");async function Pde(e){let{connection:t}=await mo(),r=[],n=kC(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(vV.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(Pde,"listRemoteStreams");async function Lde(e,t=void 0,r=void 0){let{jsm:n,js:s}=await mo(),i=OV(),o={durable_name:i,ack_policy:BC.Explicit};t&&(o.deliver_policy=FC.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=xC(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(on.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(Lde,"viewStream");async function*Dde(e,t=void 0,r=void 0){let{jsm:n,js:s}=await mo(),i=OV(),o={durable_name:i,ack_policy:BC.Explicit};t&&(o.deliver_policy=FC.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=xC(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(on.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}a(Dde,"viewStreamIterator");async function Mde(e,t,r,n){Ri.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=kV(n,r);let{js:s}=await mo(),i=await hT(),o=`${e}.${i}`,c=await Rde(()=>n instanceof Uint8Array?n:DV.encode(n));try{Ri.trace(`publishToStream publishing to subject: ${o}`),yde(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return qV(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Ri.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await qC(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(Mde,"publishToStream");function kV(e,t){t===void 0&&(t=Tde());let r=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(on.MSG_HEADERS.ORIGIN)&&r&&t.append(on.MSG_HEADERS.ORIGIN,r),t}a(kV,"addNatsMsgHeader");function jd(e){e=e.toLowerCase();let t=mh.join(Yr.get(rt.CONFIG_PARAMS.ROOTPATH),bde);if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Kl(vC)&&(vC={port:dh.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:dh.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.HUB,config_file:on.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:mh.join(t,on.PID_FILES.HUB),hdbNatsPath:t}),vC;if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Kl(MC)&&(MC={port:dh.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:dh.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.LEAF,config_file:on.NATS_CONFIG_FILES.LEAF_SERVER,domain:dh.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.LEAF,pid_file_path:mh.join(t,on.PID_FILES.LEAF),hdbNatsPath:t}),MC;Ri.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(jd,"getServerConfig");async function HV(e,t,r,n){try{await e.consumers.add(t,{ack_policy:BC.Explicit,durable_name:r,deliver_policy:FC.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(HV,"createConsumer");async function vde(e,t,r){await e.consumers.delete(t,r)}a(vde,"removeConsumer");function Ude(e){return e.split(".")[1]}a(Ude,"extractServerName");async function xde(e,t,r=6e4,n=kC()){if(!mT.isObject(t))throw new Error("data param must be an object");let s=DV.encode(t),{connection:i}=await mo(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return xC(c.data)}a(xde,"request");function GC(e){return new Promise(async(t,r)=>{let n=ade(UC,["--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(GC,"reloadNATS");async function Bde(){let{pid_file_path:e}=jd(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await GC(e)}a(Bde,"reloadNATSHub");async function Fde(){let{pid_file_path:e}=jd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await GC(e)}a(Fde,"reloadNATSLeaf");function kde(e,t,r){let n;switch(e.code){case CV.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case CV.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(kde,"requestErrorHandler");async function Hde(e,t){let r=t+on.SERVER_SUFFIX.LEAF,{connection:n}=await mo(),{jsm:s}=await zde(r),{schema:i,table:o}=e,c=pT.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await qV(async()=>{if(e.subscribe===!0)await HV(s,c,n.info.server_name,l);else try{await vde(s,c,n.info.server_name)}catch(u){Ri.trace(u)}})}a(Hde,"updateRemoteConsumer");async function qde(e,t,r,n){let s=pT.createNatsTableStreamName(e,t),i=r+on.SERVER_SUFFIX.LEAF,o={type:rt.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!LV&&mde()<Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=DC();await c(o)}await dde(o),n==="stop"&&await mT.asyncSetTimeout(1e3)}a(qde,"updateConsumerIterator");function qV(e){return ude.writeTransaction(rt.SYSTEM_SCHEMA_NAME,rt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(qV,"exclusiveLock");async function GV(e,t){let r=pT.createNatsTableStreamName(e,t),n=await hT(),s=Kde(e,t,n);await qC(r,[s])}a(GV,"createLocalTableStream");async function Gde(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await GV(n,s)}}a(Gde,"createTableStreams");async function $V(e,t,r=void 0){if(Yr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=pT.createNatsTableStreamName(e,t),{domain:s}=jd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await ph()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Ri.warn(n);else throw n}}a($V,"purgeTableStream");async function $de(e,t){if(Yr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await $V(e,t[r])}a($de,"purgeSchemaTableStreams");async function Vde(e){return(await hh()).streams.info(e)}a(Vde,"getStreamInfo");function Kde(e,t,r){return`${on.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Kde,"createSubjectName");async function hT(){if(fh)return fh;if(fh=(await hh())?.nc?.info?.server_name,fh===void 0)throw new Error("Unable to get jetstream manager server name");return fh}a(hT,"getJsmServerName");async function Yde(){let e=await hh(),t=await hT(),r=await FV();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Wde(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");Ri.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(Yde,"updateLocalStreams");function Wde(e){let{config:t}=e,r=!1,n=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Yr.get(rt.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(Wde,"updateStreamLimits");async function zde(e){let t,r;try{t=await In.jetstream({domain:e}),r=await In.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Ri.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(zde,"connectToRemoteJS")});function $C(e){let t=e.get(ET),r=t?(0,Qd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=it(),s=!1;r.nodeName=it();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:_h(e)??1,nodes:[]})})}i[n]=0,e.putSync(ET,(0,Qd.pack)(r))}return r}function Eh(e){return $C(e).remoteNameToId}function YV(e,t){let r=$C(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync(ET,(0,Qd.pack)(r)),s}function _T(e,t){let r=$C(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(ET,(0,Qd.pack)(r))}return KV.trace?.("The remote node name map",e,n,s),s}var KV,Qd,ET,VC=ne(()=>{KV=b(wr());Ss();Qd=require("msgpackr"),ET=Symbol.for("remote-ids");a($C,"getIdMappingRecord");a(Eh,"exportIdMapping");a(YV,"remoteToLocalNodeId");a(_T,"getIdOfRemoteNode")});var XV={};ye(XV,{commitsAwaitingReplication:()=>Xd,getHDBNodeTable:()=>qt,getReplicationSharedStatus:()=>Zd,iterateRoutes:()=>Sh,shouldReplicateToNode:()=>gh,subscribeToNodeUpdates:()=>ef});function qt(){return WV||(WV=Xe({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function Zd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(64),n&&{callback:n}))}function ef(e){qt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;JV.debug?.("adding node",n,"on node",it()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==it()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of qt().search({}))if(i.shard!=null){let o=s.get(i.shard);o||s.set(i.shard,o=[]),o.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function gh(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&qt().primaryStore.get(it())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function jde(){ef(e=>{fc({},(t,r)=>{let n=e.name,s=zV.get(n);if(s||zV.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=Zd(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of Xd.get(r)||[])u>l&&u<=c&&d();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*Sh(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=Jd.default.get(F.REPLICATION_SECUREPORT)??(!Jd.default.get(F.REPLICATION_PORT)&&Jd.default.get(F.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Jd.default.get(F.REPLICATION_PORT)||Jd.default.get(F.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){jV.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,startTime:t.startTime,revoked_certificates:t.revokedCertificates}}}var jV,QV,Jd,JV,WV,zV,Xd,tf=ne(()=>{we();Ss();Um();jV=require("worker_threads"),QV=b(_e()),Jd=b(ae());H();JV=b(wr());server.nodes=[];a(qt,"getHDBNodeTable");a(Zd,"getReplicationSharedStatus");a(ef,"subscribeToNodeUpdates");a(gh,"shouldReplicateToNode");zV=new Map;nx((e,t,r)=>{if(r>server.nodes.length)throw new QV.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Xd||(Xd=new Map,jde());let n=Xd.get(e);return n||(n=[],Xd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(jde,"startSubscriptionToReplications");a(Sh,"iterateRoutes")});var i1={};ye(i1,{connectedToNode:()=>Yl,disconnectedFromNode:()=>nf,ensureNode:()=>ta,requestClusterStatus:()=>s1,startOnMainThread:()=>KC});async function KC(e){let t=0,r=lt();for(let o of Object.getOwnPropertyNames(r)){let c=r[o];for(let l in c){let u=c[l];if(u.auditStore){gT.set(o,_h(u.auditStore));break}}}bi.whenThreadsStarted.then(async()=>{let o=[];for await(let u of r.system.hdb_nodes?.search([])||[])o.push(u);let c=it();function l(){let u=qt().primaryStore.get(c);if(u!==null){let d=e.url??mc();if(u===void 0||u.url!==d||u.shard!==e.shard)return ta(c,{name:c,url:d,shard:e.shard,replicates:!0})}}a(l,"ensureThisNode"),qt().primaryStore.get(c)&&l();for(let u of Sh(e))try{let d=!u.subscriptions;if(d&&await l(),d&&u.replicates==null&&(u.replicates=!0),ZV.push(u),o.find(f=>f.url===u.url))continue;s(u)}catch(d){console.error(d)}ef(s)});let n;function s(o,c=o?.name){let l=it()&&c===it()||mc()&&o?.url===mc();if(l){let m=!!o?.replicates;if(n!==void 0&&n!==m)for(let p of qt().search([]))p.replicates&&p.name!==c&&s(p,p.name);n=m}if(at.trace("Setting up node replication for",o),!o){for(let[m,p]of po){let h;for(let[E,{worker:g,nodes:R}]of p){let S=R[0];if(S&&S.name==c){h=!0;for(let[y,{worker:N}]of p)p.delete(y),at.warn("Node was deleted, unsubscribing from node",c,y,m),N?.postMessage({type:"unsubscribe-from-node",node:c,nodes:R,database:y,url:m});break}}if(h){po.get(m).iterator.remove(),po.delete(m);return}}return}if(l)return;if(!o.url){at.info(`Node ${o.name} is missing url`);return}let u=po.get(o.url);if(u&&u.iterator.remove(),!(o.replicates===!0||o.replicates?.sends)&&!o.subscriptions?.length&&!u)return;if(at.info(`Added node ${o.name} at ${o.url} for process ${it()}`),o.replicates&&o.subscriptions&&(o={...o,subscriptions:null}),o.name){for(let[m,p]of rf)if(o.url===p.url){rf.delete(m);break}rf.set(o.name,o)}let d=lt();if(u||(u=new Map,po.set(o.url,u)),u.iterator=fc(e,(m,p,h)=>{h?f(p,!0):f(p,!1)}),o.subscriptions)for(let m of o.subscriptions){let p=m.database||m.schema;d[p]||(at.warn(`Database ${p} not found for node ${o.name}, making a subscription anyway`),f(p,!1))}function f(m,p){at.trace("Setting up replication for database",m,"on node",o.name);let h=u.get(m),E,g=[{replicateByDefault:p,...o}];gT.has(m)&&Th.default.get(F.REPLICATION_FAILOVER)&&(g.push({replicateByDefault:p,name:it(),startTime:gT.get(m),endTime:Date.now(),replicates:!0}),gT.delete(m));let R=gh(o,m),S=bi.workers.filter(y=>y.name==="http");if(h){if(E=h.worker,h.nodes=g,R)return}else R&&(t=t%S.length,E=S[t++],E||at.warn("No http workers available to subscribe to node",o.name,o.url),u.set(m,{worker:E,nodes:g,url:o.url}),E?.on("exit",()=>{u.get(m)?.worker===E&&(u.delete(m),f(m,p))}));if(R){let y=Qde.HDB_LEADER_URL??process.env.HDB_LEADER_URL??ZV[0]?.url??Array.from(qt().primaryStore.getRange({}))[0]?.url;g[0].isLeader=!y||g[0].url===y,setTimeout(()=>{let N={...g[0],type:"subscribe-to-node",database:m,nodes:g};E?E.postMessage(N):yh(N)},Jde)}else{at.info("Node no longer should be used, unsubscribing from node",{replicates:o.replicates,databaseName:m,node:o,subscriptions:o.subscriptions,hasDatabase:!!d[m],thisReplicates:qt().primaryStore.get(it())?.replicates}),qt().primaryStore.get(it())?.replicates||(n=!1,at.info("Disabling replication, this node name",it(),qt().primaryStore.get(it()),m));let y={type:"unsubscribe-from-node",database:m,url:o.url,name:o.name,nodes:g};E?E.postMessage(y):TT(y)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),nf=a(function(o){try{at.info("Disconnected from node",o.name,o.url,"finished",!!o.finished);let c=Array.from(rf.keys()),l=c.sort(),u=l.indexOf(o.name||Ai(o.url));if(u===-1){at.warn("Disconnected node not found in node map",o.name,c);return}let d=po.get(o.url),f=d?.get(o.database);if(!f){at.warn("Disconnected node not found in replication map",o.database,d);return}if(f.connected=!1,o.finished||!Th.default.get(F.REPLICATION_FAILOVER))return;let m=f.nodes[0];if(!(m.replicates===!0||m.replicates?.sends||m.subscriptions?.length))return;let p=m.shard,h=(u+1)%l.length;for(;u!==h;){let E=l[h],g=rf.get(E);d=po.get(g.url);let R=d?.get(o.database);if(!R||R.connected===!1||R.nodes[0].shard!==p){h=(h+1)%l.length;continue}let{nodes:S}=R,y=!1;for(let N of f.nodes){if(S.some(I=>I.name===N.name)){at.info(`Disconnected node is already failing over to ${E} for ${o.database}`);continue}N.endTime<Date.now()||(S.push(N),at.info(`Failing over ${o.database} from ${o.name} to ${E}`),i(N,o.database,R.nodes[0]),y=!0)}f.nodes=[f.nodes[0]],y||at.info(`Disconnected node ${o.name} has no nodes to fail over to ${E}`);return}at.warn("Unable to find any other node to fail over to",o.name,o.url)}catch(c){at.error("Error failing over node",c)}},"disconnectedFromNode"),Yl=a(function(o){let c=po.get(o.url),l=c?.get(o.database);if(!l){at.warn("Connected node not found in replication map, this may be because the node is being removed",o.database,c);return}l.connected=!0,l.latency=o.latency;let u=l.nodes[0];if(!u){at.warn("Newly connected node has no node subscriptions",o.database,l);return}if(!u.name){at.debug("Connected node is not named yet",o.database,l);return}if(!Th.default.get(F.REPLICATION_FAILOVER))return;l.nodes=[u];let d=!1;for(let f of po.values()){let m=f.get(o.database);if(!m||m==l)continue;let{worker:p,nodes:h,connected:E}=m;if(h)if(E===!1&&h[0].shard===u.shard&&node.url===u.url)for(let g of h)i(g,o.database);else{let g=h.filter(R=>{if(R)return R.name===u.name&&R.worker?(R.worker.postMessage({type:"unsubscribe-to-node",database:o.database,url:o.url,nodes:[R]}),!1):!0});g.length<h.length&&(m.nodes=g)}}},"connectedToNode");function i(o,c,l=o){let u=bi.workers.filter(f=>f.name==="http");t=t%u.length;let d=u[t++];Object.defineProperty(o,"worker",{value:d,configurable:!0}),d?d.postMessage({url:l.url,name:l.name,type:"subscribe-to-node",database:c,nodes:[o]}):yh({url:l.url,name:l.name,database:c,nodes:[o]})}a(i,"connectToNextWorker"),(0,bi.onMessageByType)("disconnected-from-node",nf),(0,bi.onMessageByType)("connected-to-node",Yl),(0,bi.onMessageByType)("request-cluster-status",s1)}function s1(e,t){let r=[];for(let[n,s]of rf)try{let i=po.get(s.url);at.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)o.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=t1(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){at.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function ta(e,t){let r=qt();e=e??Ai(t.url),t.name=e;try{if(t.ca){let s=new r1.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){at.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(at.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!Th.default.get(F.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=t1(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}at.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var bi,ST,at,e1,Th,r1,n1,t1,Qde,Jde,po,nf,Yl,rf,gT,ZV,Rh=ne(()=>{we();bi=b(tt());Ss();ST=require("worker_threads");tf();at=b(J()),e1=b(require("lodash")),Th=b(ae());H();r1=require("crypto"),n1=b(require("minimist")),{cloneDeep:t1}=e1.default,Qde=(0,n1.default)(process.argv),Jde=200,po=new Map,rf=new Map,gT=new Map,ZV=[];a(KC,"startOnMainThread");a(s1,"requestClusterStatus");ST.parentPort&&(nf=a(e=>{ST.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Yl=a(e=>{ST.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,bi.onMessageByType)("subscribe-to-node",e=>{yh(e)}),(0,bi.onMessageByType)("unsubscribe-from-node",e=>{TT(e)}));a(ta,"ensureNode")});var ys=v(Gt=>{"use strict";var Er=require("path"),{watch:Xde}=require("chokidar"),Wn=require("fs-extra"),sf=require("node-forge"),d1=require("net"),{generateKeyPair:YC,X509Certificate:ra,createPrivateKey:f1,randomBytes:Zde}=require("node:crypto"),efe=require("util");YC=efe.promisify(YC);var Pt=sf.pki,Ii=require("joi"),{v4:m1}=require("uuid"),{validateBySchema:QC}=ot(),{forComponent:tfe}=J(),Ts=ae(),Ks=(H(),M(W)),{CONFIG_PARAMS:zl}=Ks,wi=tN(),{ClientError:pc}=_e(),RT=require("node:tls"),{relative:p1,join:rfe}=require("node:path"),{CERTIFICATE_VALUES:o1}=wi,nfe=el(),WC=St(),{table:sfe,getDatabases:ife,databases:yT}=(we(),M(mt)),{getJWTRSAKeys:a1}=(Vd(),M(ah)),Je=tfe("tls").conditional;Gt.generateKeys=ZC;Gt.updateConfigCert=R1;Gt.createCsr=ffe;Gt.signCertificate=mfe;Gt.setCertTable=of;Gt.loadCertificates=S1;Gt.reviewSelfSignedCert=tO;Gt.createTLSSelector=A1;Gt.listCertificates=w1;Gt.addCertificate=Sfe;Gt.removeCertificate=yfe;Gt.createNatsCerts=Efe;Gt.generateCertsKeys=hfe;Gt.getReplicationCert=Ah;Gt.getReplicationCertAuth=dfe;Gt.renewSelfSigned=_fe;Gt.hostnamesFromCert=nO;Gt.getKey=Rfe;Gt.getHostnamesFromCertificate=bfe;Gt.getPrimaryHostName=rO;Gt.generateSerialNumber=IT;var{urlToNodeName:h1,getThisNodeUrl:ofe,getThisNodeName:AT,clearThisNodeName:afe}=(Ss(),M(na)),{readFileSync:cfe,statSync:E1}=require("node:fs"),pBe=ae(),{getTicketKeys:lfe,onMessageFromWorkers:ufe}=tt(),{isMainThread:_1}=require("worker_threads"),{TLSSocket:g1,createSecureContext:hBe}=require("node:tls"),JC=3650,bh=["127.0.0.1","localhost","::1"],XC=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];function IT(){let e=Zde(8);return e[0]=e[0]&127|1,e.toString("hex")}a(IT,"generateSerialNumber");ufe(async e=>{e.type===Ks.ITC_EVENT_TYPES.RESTART&&(Ts.initSync(!0),await tO())});var an;function Ec(){return an||(an=ife().system.hdb_certificate,an||(an=sfe({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),an}a(Ec,"getCertTable");async function Ah(){let e=A1("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(AT());if(!r)return;let n=new ra(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(Ah,"getReplicationCert");async function dfe(){Ec();let e=(await Ah()).options.cert,r=new ra(e).issuer.match(/CN=(.*)/)?.[1];return an.get(r)}a(dfe,"getReplicationCertAuth");var c1,hc=new Map;function S1(){if(c1)return;c1=!0;let e=[{configKey:zl.TLS},{configKey:zl.OPERATIONSAPI_TLS}];Ec();let t=Er.dirname(WC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=WC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&p1(rfe(t,"keys"),o);c&&l1(o,l=>{hc.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&_1){let d;l1(u,f=>{if(o1.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=b1(u),h=new ra(p),E;try{E=rO(h)}catch(y){Je.error?.("error extracting host name from certificate",y);return}if(E==null){Je.error?.("No host name found on certificate");return}if(h.checkIssued(new ra(o1.cert)))return;let g=an.primaryStore.get(E),R=E1(u).mtimeMs,S=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&R<=S){R<S&&Je.info?.(`Certificate ${E} at ${u} is older (${new Date(R)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=an.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:R,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject?.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(S1,"loadCertificates");function l1(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&_1&&Je.warn?.(`Reloading ${r}:`,i),n=c,t(b1(i)))}catch(c){Je.error?.(`Error loading ${r}:`,i,c)}},"loadFile");Wn.existsSync(e)?s(e,E1(e)):Je.error?.(`${r} file not found:`,e),Xde(e,{persistent:!1}).on("change",s)}a(l1,"loadAndWatch");function zC(){let e=ofe();if(e==null){let t=bh[0];return Je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return h1(e)}a(zC,"getHost");function bT(){let e=AT();if(e==null){let t=bh[0];return Je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(bT,"getCommonName");async function ffe(){let e=await Ah(),t=Pt.certificateFromPem(e.options.cert),r=Pt.privateKeyFromPem(e.options.key);Je.info?.("Creating CSR with cert named:",e.name);let n=Pt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:bT()},...XC];Je.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:T1()}];return Je.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),sf.pki.certificationRequestToPem(n)}a(ffe,"createCsr");function T1(){let e=bh.includes(bT())?bh:[...bh,bT()];return e.includes(zC())||e.push(zC()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>d1.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(T1,"certExtensions");async function mfe(e){let t={},r=Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;Ec();for await(let d of an.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(hc.has(d.private_key_name)){n=hc.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Wn.exists(Er.join(r,d.private_key_name))){n=Wn.readFile(Er.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await jC();s=d.ca,n=d.private_key}n=Pt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Pt.certificateFromPem(s.certificate);Je.info?.("Signing CSR with cert named",s.name);let o=Pt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return Je.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=sf.pki.createCertificate();c.serialNumber=IT(),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+JC),Je.info?.("sign cert setting validity:",c.validity),Je.info?.("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),Je.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;Je.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,sf.md.sha256.create()),t.certificate=Pt.certificateToPem(c)}else Je.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(mfe,"signCertificate");async function pfe(e,t){await of({name:AT(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await of({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Pt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(pfe,"createCertificateTable");async function of(e){let t;try{t=new ra(e.certificate)}catch(r){Je.error?.(`Failed to parse certificate for ${e.name}:`,r.message),Je.debug?.("Certificate record details:",JSON.stringify(e,null,2));let n=new Error(`Invalid certificate format for ${e.name}: ${r.message}. This may be due to corrupted certificate data during transfer or encoding issues.`);throw n.code="INVALID_CERTIFICATE_FORMAT",n.cause=r,n}e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},Ec(),await an.patch(e)}a(of,"setCertTable");async function ZC(){let e=await YC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Pt.publicKeyFromPem(e.publicKey),privateKey:Pt.privateKeyFromPem(e.privateKey)}}a(ZC,"generateKeys");async function eO(e,t,r){let n=Pt.createCertificate();if(!t){let o=await Ah();t=Pt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=IT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+JC);let i=[{name:"commonName",value:bT()},...XC];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(T1()),n.sign(e,sf.md.sha256.create()),Pt.certificateToPem(n)}a(eO,"generateCertificates");async function jC(){let e=await w1(),t;for(let r of e){if(!r.is_authority)continue;let n=await I1(r.private_key_name);if(r.private_key_name&&n&&new ra(r.certificate).checkPrivateKey(f1(n))){Je.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;Je.trace?.("No CA found with matching private key")}a(jC,"getCertAuthority");async function y1(e,t,r=!0){let n=Pt.createCertificate();n.publicKey=t,n.serialNumber=IT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+JC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Ts.get(zl.REPLICATION_HOSTNAME)??h1(Ts.get(zl.REPLICATION_URL))??m1().split("-")[0]}`},...XC];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),n.sign(e,sf.md.sha256.create());let o=Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),c=Er.join(o,wi.PRIVATEKEY_PEM_NAME);return r&&await Wn.writeFile(c,Pt.privateKeyToPem(e)),n}a(y1,"generateCertAuthority");async function hfe(){let{privateKey:e,publicKey:t}=await ZC(),r=await y1(e,t),n=await eO(e,t,r);await pfe(n,r),R1()}a(hfe,"generateCertsKeys");async function Efe(){let e=await eO(Pt.privateKeyFromPem(wi.CERTIFICATE_VALUES.key),void 0,Pt.certificateFromPem(wi.CERTIFICATE_VALUES.cert)),t=Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),r=Er.join(t,wi.NATS_CERTIFICATE_PEM_NAME);await Wn.exists(r)||await Wn.writeFile(r,e);let n=Er.join(t,wi.NATS_CA_PEM_NAME);await Wn.exists(n)||await Wn.writeFile(n,wi.CERTIFICATE_VALUES.cert)}a(Efe,"createNatsCerts");async function _fe(){Ec();for await(let e of an.search([{attribute:"is_self_signed",value:!0}]))await an.delete(e.name);await tO()}a(_fe,"renewSelfSigned");async function tO(){afe(),await S1(),Ec();let e=await jC();if(!e){Je.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=a(u=>{try{return{key:Pt.privateKeyFromPem(Wn.readFileSync(u)),keyPath:u}}catch(d){return Je.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=Ts.get(zl.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=Ts.get(zl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let o=Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),c=p1(o,i);s||(Je.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await ZC(),Wn.existsSync(Er.join(o,wi.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${m1().split("-")[0]}.pem`),await Wn.writeFile(Er.join(o,c),Pt.privateKeyToPem(s)));let l=await y1(s,Pt.setRsaPublicKey(s.n,s.e),!1);await of({name:l.subject.getField("CN").value,uses:["https"],certificate:Pt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await Ah()){let r=AT();Je.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await jC();let n=Pt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await eO(Pt.privateKeyFromPem(e.private_key),s,n);await of({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(tO,"reviewSelfSignedCert");function R1(){let e=nfe(Object.keys(Ks.CONFIG_PARAM_MAP),!0),t=Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),r=Er.join(t,wi.PRIVATEKEY_PEM_NAME),n=Er.join(t,wi.NATS_CERTIFICATE_PEM_NAME),s=Er.join(t,wi.NATS_CA_PEM_NAME),i=Ks.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),WC.updateConfigValue(void 0,void 0,o,!1,!0)}a(R1,"updateConfigCert");function b1(e){return e.startsWith("-----BEGIN")?e:cfe(e,"utf8")}a(b1,"readPEM");var u1=RT.createSecureContext;RT.createSecureContext=function(e){if(!e.cert||!e.key)return u1(e);let t={...e};delete t.key,delete t.cert;let r=u1(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var gfe=g1.prototype._init;g1.prototype._init=function(e,t){gfe.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var Wl=new Map;function A1(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Wl.clear();let d=0;if(yT===void 0){c();return}for await(let f of yT.system.hdb_certificate.search([])){let m=f.certificate,p=new ra(m);f.is_authority&&(p.asString=m,Wl.set(p.subject,m))}for await(let f of yT.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:3;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await I1(f.private_key_name),E=f.certificate,g=new ra(E);if(Wl.has(g.issuer)&&(E+=`
|
|
18
|
-
`+Wl.get(g.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let R={ciphers:f.ciphers,ticketKeys:lfe(),availableCAs:Wl,ca:t&&Array.from(Wl.values()),cert:E,key:h,key_file:f.private_key_name,is_self_signed:f.is_self_signed};o&&(R.sessionIdContext=o.sessionIdContext);let S=f.hostnames??nO(g);Array.isArray(S)||(S=[S]);for(let I of S)I===zC()&&(p+=1);let y=RT.createSecureContext(R);y.name=f.name,y.options=R,y.quality=p,y.certificateAuthorities=Array.from(Wl),y.certStart=E.toString().slice(0,100);let N;for(let I of S)if(I){I[0]==="*"&&(s=!0,I=I.slice(1)),d1.isIP(I)&&(N=!0);let $=r.get(I)?.quality??0;Je.trace?.("Assigning TLS for hostname",I,"if",p,">",$),p>$&&r.set(I,y)}else Je.error?.("No hostname found for certificate at",RT.certificate);Je.trace?.("Adding TLS",y.name,"for",o.ports||"client","cert named",f.name,"hostnames",S,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=y,d=p,o&&(o.defaultContext=y))}catch(m){Je.error?.("Error applying TLS for",f.name,m)}o?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}a(u,"updateTLS"),yT?.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){Je.info?.("TLS requested for",o||"(no SNI)");let l=o;for(;;){let d=r.get(l);if(d)return Je.debug?.("Found certificate for",o,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}o?Je.debug?.("No certificate found to match",o,"using the default certificate"):Je.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Je.info?.("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(A1,"createTLSSelector");async function I1(e){let t=hc.get(e);return!t&&e?await Wn.readFile(Er.join(Ts.get(zl.ROOTPATH),Ks.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(I1,"getPrivateKeyByName");async function w1(){Ec();let e=[];for await(let t of an.search([]))e.push(t);return e}a(w1,"listCertificates");async function Sfe(e){let t=QC(e,Ii.object({name:Ii.string().required(),certificate:Ii.string().required(),is_authority:Ii.boolean().required(),private_key:Ii.string(),hosts:Ii.array(),uses:Ii.array()}));if(t)throw new pc(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new ra(n),c=!1,l=!1,u;for(let[p,h]of hc)!s&&!c&&o.checkPrivateKey(f1(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new pc("A suitable private key was not found for this certificate");let d;if(!r){try{d=rO(o)}catch(p){Je.error?.(p)}if(d==null)throw new pc("Error extracting certificate host name, please provide a name parameter")}let f=Tfe(r??d);s&&!c&&!l&&(await Wn.writeFile(Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME,f+".pem"),s),hc.set(f,s));let m={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(m.private_key_name=u??f+".pem"),e.ciphers&&(m.ciphers=e.ciphers),await of(m),"Successfully added certificate: "+f}a(Sfe,"addCertificate");function Tfe(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(Tfe,"sanitizeName");async function yfe(e){let t=QC(e,Ii.object({name:Ii.string().required()}));if(t)throw new pc(t.message);let{name:r}=e;Ec();let n=await an.get(r);if(!n)throw new pc(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await an.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(Je.info?.("Removing private key named",s),await Wn.remove(Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME,s)))}return await an.delete(r),"Successfully removed "+r}a(yfe,"removeCertificate");function rO(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||nO(e)[0]}a(rO,"getPrimaryHostName");function nO(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}a(nO,"hostnamesFromCert");async function Rfe(e){if(e.bypass_auth!==!0)throw new pc("Unauthorized","401");let t=QC(e,Ii.object({name:Ii.string().required()}));if(t)throw new pc(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await a1()).privateKey;if(r===".jwtPublic")return(await a1()).publicKey;if(hc.get(r))return hc.get(e.name);throw new pc("Key not found")}a(Rfe,"getKey");function bfe(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}a(bfe,"getHostnamesFromCertificate")});var Q1={};ye(Q1,{BACK_PRESSURE_RATIO_POSITION:()=>W1,CONFIRMATION_STATUS_POSITION:()=>Y1,LATENCY_POSITION:()=>PT,NodeReplicationConnection:()=>cf,OPERATION_REQUEST:()=>cO,RECEIVED_TIME_POSITION:()=>uO,RECEIVED_VERSION_POSITION:()=>lO,RECEIVING_STATUS_POSITION:()=>dO,RECEIVING_STATUS_RECEIVING:()=>j1,RECEIVING_STATUS_WAITING:()=>z1,SENDING_TIME_POSITION:()=>wh,createWebSocket:()=>LT,databaseSubscriptions:()=>gc,replicateOverWS:()=>Nh,tableUpdateListeners:()=>pO});async function LT(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=it(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!oO){let l=(0,G1.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),oO=u.secureContexts}if(i=oO.get(s),i&&de.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,V1.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&((af?.caCount!==sa.size||af?.derivedFromContext!==i)&&(af=$1.createSecureContext({...i.options,ca:[...sa,...i.options.availableCAs.values()]}),af.caCount=sa.size,af.derivedFromContext=i),c.secureContext=af),new k1.WebSocket(e,"harperdb-replication-v1",c)}function Nh(e,t,r){let n=t.port||t.securePort,s=mO.pid%1e3+"-"+H1.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);de.debug?.(s,"Initializing replication connection",r);let i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||gc,f,m,p=!1,h=t.subscription;h?.then&&h.then(A=>{h=A,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&<()[u],g,R=new Map,S=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let y,N,I,$,ee,q,k,j=6e4,Y,le=0,fe=0,te=0,ge=F1.default.get(F.REPLICATION_BLOBTIMEOUT)??12e4,be=new Map,Ye=[],Ge=0,Ar;if(t.url){let A=a(()=>{ee&&fe===e._socket?.bytesRead&&te===e._socket?.bytesWritten?e.terminate():(ee=performance.now(),e.ping(),fe=e._socket?.bytesRead,te=e._socket?.bytesWritten)},"sendPing");I=setInterval(A,x1).unref(),A()}else tr();e._socket?.setMaxListeners(200);function tr(){clearTimeout($),fe=e._socket?.bytesRead,te=e._socket?.bytesWritten,$=setTimeout(()=>{fe===e._socket?.bytesRead&&te===e._socket?.bytesWritten&&(de.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},x1*2).unref()}a(tr,"resetPingTimer");let Qr=0,xr=0,Ou=!1,jc=3e4;function Ut(){if(pn?.length>0){let A=performance.now(),U=A-xr;Qr=(Qr*jc+(Ou?U:0))/(jc+U),m&&(m[W1]=Qr),xr=A}}a(Ut,"updateBackPressureRatio"),setInterval(Ut,jc).unref();function oi(){if(!(!g||!u))return m||(m=Zd(f,u,g)),m}a(oi,"getSharedStatus"),u&&Qc(u);let Ua,c_,mm=[],l_=[],pm,Me=[],u_=[],Bb=[],Pu=150,Gi=25,Ds=0,hm=0,Em=!1,Do,Mn,pn,Br;e.on("message",Lu);async function Lu(A){if(r=await r,!r){de.error?.(s,"No authorization provided"),Fr(1008,"Unauthorized");return}_m(A),e.off("message",Lu),e.on("message",_m)}a(Lu,"onWSMessageWhenAuthorized");function _m(A){le=performance.now();try{let U=A.dataView=new al(A.buffer,A.byteOffset,A.byteLength);if(A[0]>127){let z=(0,ct.decode)(A),[Q,B,Ee]=z;switch(Q){case C1:{if(B){if(g){if(g!==B){de.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${B}, disconnecting`),e.send((0,ct.encode)([Ih])),Fr(1008,"Node name mismatch");return}}else if(g=B,t.connection?.tentativeNode){let ue=t.connection.tentativeNode;ue.name=g,t.connection.tentativeNode=null,ta(g,ue)}if(t.connection&&(t.connection.nodeName=g),de.debug?.(s,"received node name:",g,"db:",u??z[2]),!u)try{Qc(u=z[2]),u==="system"&&(Ua=fc(t,(ue,ce)=>{Fa(ce)&&K(ce)}),e.on("close",()=>{Ua?.remove()}))}catch(ue){de.warn?.(s,"Error setting database",ue),e.send((0,ct.encode)([Ih])),Fr(1008,ue.message);return}gm()}break}case v1:{de.debug?.(s,"Received table definitions for",B.map(ue=>ue.table));for(let ue of B){let ce=z[2];ue.database=ce;let xe;if(Fa(ce)){if(u==="system")ve[ce]?.[ue.table]||(xe=D(ue,ve[ce]?.[ue.table]));else{if(ce!=="data"&&!ve[ce]){de.warn?.("Database not found",ce);return}xe=D(ue,ve[ce]?.[ue.table])}f||(f=xe?.auditStore),E||(E=lt()?.[ce])}}break}case Ih:Fr();break;case cO:try{let ue=r?.replicates||r?.subscribers||r?.name;de.debug?.("Received operation request",B,"from",g),server.operation(B,{user:r},!ue).then(ce=>{de.debug?.("Requested request from finished",g,ce),Array.isArray(ce)&&(ce={results:ce}),ce.requestId=B.requestId,e.send((0,ct.encode)([NT,ce]))},ce=>{de.debug?.("Failed requested operation from",g,ce),e.send((0,ct.encode)([NT,{requestId:B.requestId,error:sO(ce)}]))})}catch(ue){e.send((0,ct.encode)([NT,{requestId:B.requestId,error:sO(ue)}]))}break;case NT:let{resolve:me,reject:pe}=R.get(B.requestId);de.debug?.("Received completed operation request",g,B),B.error?pe(new Error(B.error)):me(B),R.delete(B.requestId);break;case iO:let se=z[3];if(!E){u?de.error?.(s,"No database found for",u):de.error?.(s,"Database name never received"),Fr();return}let ie=E[se];ie=D({table:se,database:u,attributes:B.attributes,schemaDefined:B.schemaDefined},ie),mm[Ee]={name:se,decoder:new ct.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:B.typedStructs,structures:B.structures}),getEntry(ue){return ie.primaryStore.getEntry(ue)},rootStore:ie.primaryStore.rootStore};break;case O1:Br=f?YV(B,f):new Map,pm=z[2],de.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${pm}`);break;case P1:let Oe=Ee;Bb[Oe]=B;break;case M1:oi()[Y1]=B,de.trace?.(s,"received and broadcasting committed update",B),oi().buffer.notify();break;case D1:y=B,h.send({type:"end_txn",localTime:y,remoteNodeIds:S});break;case CT:{let ue=z[1],{fileId:ce,size:xe,finished:Ce,error:Le}=ue,De=be.get(ce);de.debug?.("Received blob",ce,"has stream",!!De,"connectedToBlob",!!De?.connectedToBlob,"length",z[2].length,"finished",Ce),De||(De=new aO.PassThrough,De.expectedSize=xe,be.set(ce,De)),De.lastChunk=Date.now();let ht=z[2];Ve(ht.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{Ce?(Le?(De.on("error",()=>{}),De.destroy(new Error("Blob error: "+Le+" for record "+(De.recordId??"unknown")+" from "+g))):De.end(ht),De.connectedToBlob&&be.delete(ce)):De.write(ht)}catch(Nt){de.error?.(`Error receiving blob for ${De.recordId} from ${g} and streaming to storage`,Nt),be.delete(ce)}break}case L1:{let ue=B,ce;try{let xe=z[3],Ce=l_[Ee]||(l_[Ee]=E[z[4]]);if(!Ce)return de.warn?.("Unknown table id trying to handle record request",Ee);let Le=Ce.primaryStore.getBinaryFast(Symbol.for("structures")),De=Le?.length??0;if(De>0&&De!==hm){hm=De;let Nt=(0,ct.decode)(Le);e.send((0,ct.encode)([iO,{typedStructs:Nt.typed,structures:Nt.named},Ee,Ce.tableName]))}let ht=Ce.primaryStore.getBinaryFast(xe);if(ht){let Nt=Ce.primaryStore.decoder.decode(ht,{valueAsBuffer:!0}),xt=ut||{};xt.version=(0,K1.getLastVersion)(),ut&&ut[zu]&Zr&&(Nt=Buffer.from(Nt),Vm(()=>Ce.primaryStore.decoder.decode(ht),f_=>xa(f_,xe),Ce.primaryStore.rootStore)),ce=(0,ct.encode)([wT,ue,{value:Nt,expiresAt:xt.expiresAt,version:xt.version,residencyId:xt.residencyId,nodeId:xt.nodeId,user:xt.user}])}else ce=(0,ct.encode)([wT,ue])}catch(xe){ce=(0,ct.encode)([wT,ue,{error:xe.message}])}e.send(ce);break}case wT:{let{resolve:ue,reject:ce,tableId:xe,key:Ce}=R.get(z[1]),Le=z[2];if(Le?.error)ce(new Error(Le.error));else if(Le){let De;j_(()=>{let ht=mm[xe].decoder.decode(Le.value);Le.value=ht,Le.key=Ce,ue(Le)||De&&setTimeout(()=>De.forEach(Y_),6e4).unref()},f?.rootStore,ht=>{let Nt=Ba(ht,Ce);return De||(De=[]),De.push(Nt),Nt})}else ue();R.delete(z[1]);break}case N1:{pn=B;let ue,ce,xe=!1;if(h){if(u!==h.databaseName&&!h.then){de.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(de.debug?.(s,"received subscription request for",u,"at",pn),!h){let Pe;h=new Promise(rr=>{de.debug?.("Waiting for subscription to database "+u),Pe=rr}),h.ready=Pe,gc.set(u,h)}if(r.name)ce=qt().subscribe(r.name),ce.then(async Pe=>{ue=Pe;for await(let rr of ue){let Et=rr.value;if(!(Et?.replicates===!0||Et?.replicates?.receives||Et?.subscriptions?.some(kr=>(kr.database||kr.schema)===u&&kr.publish!==!1))){xe=!0,Fr(1008,`Unauthorized database subscription to ${u}`);return}}},Pe=>{de.error?.(s,"Error subscribing to HDB nodes",Pe)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,ct.encode)([Ih])),Fr(1008,`Unauthorized database subscription to ${u}`);return}if(Mn&&(de.debug?.(s,"stopping previous subscription",u),Mn.emit("close")),pn.length===0)return;let Ce=pn[0],Le=a(Pe=>{if(Pe&&(Ce.replicateByDefault?!Ce.tables.includes(Pe.tableName):Ce.tables.includes(Pe.tableName)))return{table:Pe}},"tableToTableEntry"),De={txnTime:0},ht,Nt,xt=1/0,f_,m_=a((Pe,rr)=>{if(Pe.type==="end_txn"){De.txnTime&&(o[i]!==66&&de.error?.("Invalid encoding of message"),C(9),C(og),O(f_=rr),Vv()),i=c,De.txnTime=0;return}let Et=Pe.nodeId,kr=Pe.tableId,Ct=Nt[kr];if(!Ct&&(Ct=Nt[kr]=Le(h.tableById[kr]),!Ct))return de.debug?.("Not subscribed to table",kr);let Ms=Ct.table,Yt=Ms.primaryStore,ai=Yt.encoder;(Pe.extendedType&_g||!ai.typedStructs)&&(ai._mergeStructures(ai.getStructures()),ai.typedStructs&&(ai.lastTypedStructuresLength=ai.typedStructs.length));let vu=ht[Et];if(!(vu&&vu.startTime<rr&&(!vu.endTime||vu.endTime>rr)))return OT&&de.trace?.(s,"skipping replication update",Pe.recordId,"to:",g,"from:",Et,"subscribed:",ht),Kv();OT&&de.trace?.(s,"sending replication update",Pe.recordId,"to:",g,"from:",Et,"subscribed:",ht);let Fb=Pe.version;De.txnTime!==Fb&&(De.txnTime&&(OT&&de.trace?.(s,"new txn time, sending queued txn",De.txnTime),o[i]!==66&&de.error?.("Invalid encoding of message"),Vv()),De.txnTime=Fb,i=c,O(Fb));let Jc=Pe.residencyId,kb=d_(Jc,Ms),p_;if(kb&&!kb.includes(g)){let $i=d_(Pe.previousResidencyId,Ms);if($i&&!$i.includes(g)&&(Pe.type==="put"||Pe.type==="patch")||Ms.getResidencyById)return Kv();let Xc=Pe.recordId;de.trace?.(s,"sending invalidation",Xc,g,"from",Et);let Sm=0;Jc&&(Sm|=cl),Pe.previousResidencyId&&(Sm|=ll);let Gb,h_=null;for(let Yv in Ms.indices){if(!h_){if(Gb=Pe.getValue(Yt,!0),!Gb)break;h_={}}h_[Yv]=Gb[Yv]}p_=ul(Pe.version,kr,Xc,null,Et,Pe.user,Pe.type==="put"||Pe.type==="patch"?"invalidate":Pe.type,ai.encode(h_),Sm,Jc,Pe.previousResidencyId,Pe.expiresAt)}function Kv(){return de.trace?.(s,"skipping audit record",Pe.recordId),q||(q=setTimeout(()=>{q=null,(f_||0)+U1/2<xt&&(OT&&de.trace?.(s,"sending skipped sequence update",xt),e.send((0,ct.encode)([D1,xt])))},U1).unref()),new Promise(setImmediate)}a(Kv,"skipAuditRecord");let Hb=ai.typedStructs,qb=ai.structures;if((Hb?.length!=Ct.typed_length||qb?.length!=Ct.structure_length)&&(Ct.typed_length=Hb?.length,Ct.structure_length=qb.length,de.debug?.(s,"send table struct",Ct.typed_length,Ct.structure_length),Ct.sentName||(Ct.sentName=!0),e.send((0,ct.encode)([iO,{typedStructs:Hb,structures:qb,attributes:Ms.attributes,schemaDefined:Ms.schemaDefined},kr,Ct.table.tableName]))),Jc&&!u_[Jc]&&(e.send((0,ct.encode)([P1,kb,Jc])),u_[Jc]=!0),p_)C(p_.length),P(p_);else{let $i=Pe.encoded;Pe.extendedType&Zr&&Vm(()=>Pe.getValue(Yt),Sm=>xa(Sm,Pe.recordId),Yt.rootStore);let Xc=$i[0]===66?8:0;C($i.length-Xc),P($i,Xc),de.trace?.("wrote record",Pe.recordId,"length:",$i.length)}if(e._socket.writableNeedDrain){let $i=performance.now();return Ou=!0,Ut(),new Promise(Xc=>{de.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",()=>{Xc(),Ou=!1,Ut()})})}else return Ge>Gi?new Promise($i=>{Ar=$i}):new Promise(setImmediate)},"sendAuditRecord"),Vv=a(()=>{c-i>8?(e.send(o.subarray(i,c)),de.debug?.(s,"Sent message, size:",c-i),u!=="system"&&Ve(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):de.debug?.(s,"skipping empty transaction")},"sendQueuedData");Mn=new fO.EventEmitter,Mn.once("close",()=>{xe=!0,ue?.end()});for(let{startTime:Pe}of pn)Pe<xt&&(xt=Pe);(ce||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,Nt=h.tableById.map(Le),ht=[];for(let{name:rr,startTime:Et,endTime:kr}of pn){let Ct=_T(rr,f);de.debug?.("subscription to",rr,"using local id",Ct,"starting",Et),ht[Ct]={startTime:Et,endTime:kr}}K(u),Ua||(Ua=Hl(rr=>{rr.databaseName===u&&K(u)}),c_=Xp(rr=>{rr===u&&(e.send((0,ct.encode)([Ih])),Fr())}),e.on("close",()=>{Ua?.remove(),c_?.remove()})),e.send((0,ct.encode)([O1,Eh(h.auditStore),pn.map(({name:rr})=>rr)]));let Pe=!0;do{isFinite(xt)||(de.warn?.("Invalid sequence id "+xt),Fr(1008,"Invalid sequence id"+xt));let rr;if(Pe&&!xe&&(Pe=!1,xt===0)){de.info?.("Replicating all tables to",g);let Et=Date.now(),kr=DT(f);for(let Ct in E){if(!Le(Ct))continue;let Ms=E[Ct];for(let Yt of Ms.primaryStore.getRange({snapshot:!1,versions:!0})){if(xe)return;de.trace?.(s,"Copying record from",u,Ct,Yt.key,Yt.localTime),Et=Math.max(Yt.localTime??1,Et),rr=!0,oi()[wh]=1;let ai=ul(Yt.version,Ms.tableId,Yt.key,null,kr,null,"put",Vm(()=>Ms.primaryStore.encoder.encode(Yt.value),vu=>xa(vu,Yt.key)),Yt.metadataFlags&-256,Yt.residencyId,null,Yt.expiresAt);await m_({recordId:Yt.key,tableId:Ms.tableId,type:"put",getValue(){return Yt.value},encoded:ai,version:Yt.version,residencyId:Yt.residencyId,nodeId:kr,extendedType:Yt.metadataFlags},Yt.localTime)}}De.txnTime||(De.txnTime=Et,O(Et)),m_({type:"end_txn"},Et),oi()[wh]=0,xt=Et}for(let{key:Et,value:kr}of f.getRange({start:xt||1,exclusiveStart:!0,snapshot:!1})){if(xe)return;let Ct=It(kr);de.debug?.("sending audit record",Et,Ct.recordId),oi()[wh]=Et,xt=Et,await m_(Ct,Et),Mn.startTime=Et,rr=!0}rr&&m_({type:"end_txn"},xt),oi()[wh]=0,await tB(f)}while(!xe)}).catch(Pe=>{de.error?.(s,"Error handling subscription to node",Pe),Fr(1008,"Error handling subscription to node")});break}}return}U.position=8;let w=!0,L,G;do{oi();let z=U.readInt();if(z===9&&U.getUint8(U.position)==og){U.position++,y=G=U.readFloat64(),m[lO]=y,m[uO]=Date.now(),m[dO]=z1,h.send({type:"end_txn",localTime:y,remoteNodeIds:S}),de.trace?.("received remote sequence update",y,u);break}let Q=U.position,B=It(A,Q,Q+z),Ee=mm[B.tableId];Ee||de.error?.(`No table found with an id of ${B.tableId}`);let me;B.residencyId&&(me=Bb[B.residencyId],de.trace?.(s,"received residency list",me,B.type,B.recordId));try{let pe=B.recordId;j_(()=>{L={table:Ee.name,id:B.recordId,type:B.type,nodeId:Br.get(B.nodeId),residencyList:me,timestamp:B.version,value:B.getValue(Ee),user:B.user,beginTxn:w,expiresAt:B.expiresAt}},f?.rootStore,se=>Ba(se,pe))}catch(pe){throw pe.message+="typed structures for current decoder"+JSON.stringify(Ee.decoder.typedStructs),pe}w=!1,de.debug?.(s,"received replication message",B.type,"id",L.id,"version",new Date(B.version),"nodeId",L.nodeId),m[lO]=B.version,m[uO]=Date.now(),m[dO]=j1,h.send(L),U.position=Q+z}while(U.position<A.byteLength);Ds++,u!=="system"&&Ve(A.byteLength,"bytes-received",`${g}.${u}.${L?.table||"unknown_table"}`,"replication","ingest"),Ds>Pu&&!Em&&(Em=!0,e.pause(),de.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),h.send({type:"end_txn",localTime:y,remoteNodeIds:S,async onCommit(){if(L){let z=Date.now()-L.timestamp;u!=="system"&&Ve(z,"replication-latency",g+"."+u+"."+L.table,L.type,"ingest")}Ds--,Em&&(Em=!1,e.resume(),de.debug?.(`Replication resuming ${g}`)),Ye.length>0&&await Promise.all(Ye),de.trace?.("All blobs finished"),!N&&G&&(de.trace?.(s,"queuing confirmation of a commit at",G),setTimeout(()=>{e.send((0,ct.encode)([M1,N])),de.trace?.(s,"sent confirmation of a commit at",N),N=null},Ife)),N=G,de.debug?.("last sequence committed",new Date(G),u)}})}catch(U){de.error?.(s,"Error handling incoming replication message",U)}}a(_m,"onWSMessage"),e.on("ping",tr),e.on("pong",()=>{if(t.connection){let A=performance.now()-ee;t.connection.latency=A,oi()&&(m[PT]=A),t.isSubscriptionConnection&&Yl({name:g,database:u,url:t.url,latency:A})}ee=null}),e.on("close",(A,U)=>{clearInterval(I),clearTimeout($),clearInterval(k),Mn&&Mn.emit("close"),Do&&Do.end();for(let[w,{reject:L}]of R)L(new Error(`Connection closed ${U?.toString()} ${A}`));de.debug?.(s,"closed",A,U?.toString())});function Fr(A,U){try{e.isFinished=!0,de.debug?.(s,"closing",g,u,A,U),e.close(A,U),t.connection?.emit("finished")}catch(w){de.error?.(s,"Error closing connection",w)}}a(Fr,"close");let Du=new Set;async function xa(A,U){let w=W_(A);if(Du.has(w)){de.debug?.("Blob already being sent",w);return}Du.add(w);try{let L;Ge++;for await(let G of A.stream())L&&(de.debug?.("Sending blob chunk",w,"length",L.length),e.send((0,ct.encode)([CT,{fileId:w,size:A.size},L]))),L=G,e._socket.writableNeedDrain&&(de.debug?.("draining",w),await new Promise(z=>e._socket.once("drain",z)),de.debug?.("drained",w)),Ve(G.length,"bytes-sent",`${g}.${u}`,"replication","blob");de.debug?.("Sending final blob chunk",w,"length",L.length),e.send((0,ct.encode)([CT,{fileId:w,size:A.size,finished:!0},L]))}catch(L){de.warn?.("Error sending blob",L,"blob id",w,"for record",U),e.send((0,ct.encode)([CT,{fileId:w,finished:!0,error:sO(L)},Buffer.alloc(0)]))}finally{Du.delete(w),Ge--,Ge<Gi&&Ar?.()}}a(xa,"sendBlobs");function Ba(A,U){let w=W_(A),L=be.get(w);de.debug?.("Received transaction with blob",w,"has stream",!!L,"ended",!!L?.writableEnded),L?L.writableEnded&&be.delete(w):(L=new aO.PassThrough,be.set(w,L)),L.connectedToBlob=!0,L.lastChunk=Date.now(),L.recordId=U,A.size===void 0&&L.expectedSize&&(A.size=L.expectedSize);let G=L.blob??createBlob(L,A);L.blob=G;let z=qo(()=>$m(G).saving,h.auditStore?.rootStore);return z&&(z.blobId=w,Ye.push(z),z.finally(()=>{de.debug?.(`Finished receiving blob stream ${w}`),Ye.splice(Ye.indexOf(z),1)})),G}a(Ba,"receiveBlobs");function gm(){if(p||(p=!0,t.connection?.on("subscriptions-updated",gm)),!f&&h&&(f=h.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let A=new Map;f||(f=h?.auditStore);try{for(let L of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let G of L.value.nodes||[])G.lastTxnTime>(A.get(G.id)??0)&&A.set(G.id,G.lastTxnTime)}catch(L){if(!L.message.includes("Can not re"))throw L}let U=t.connection?.nodeSubscriptions?.[0];S=[];let w=t.connection?.nodeSubscriptions.map((L,G)=>{let z=[],{replicateByDefault:Q}=L;if(L.subscriptions){for(let pe of L.subscriptions)if(pe.subscribe&&(pe.schema||pe.database)===u){let se=pe.table;E?.[se]?.replicate!==!1&&z.push(se)}Q=!1}else for(let pe in E)(Q?E[pe].replicate===!1:E[pe].replicate)&&z.push(pe);let B=f&&_T(L.name,f),Ee=h?.dbisDB?.get([Symbol.for("seq"),B])??1,me=Math.max(Ee?.seqId??1,(typeof L.startTime=="string"?new Date(L.startTime).getTime():L.startTime)??1);if(de.debug?.("Starting time recorded in db",L.name,B,u,Ee?.seqId,"start time:",me,new Date(me)),U!==L){let pe=f&&_T(U.name,f),se=h?.dbisDB?.get([Symbol.for("seq"),pe])??1;for(let ie of se?.nodes||[])ie.name===L.name&&(me=ie.seqId,de.debug?.("Using sequence id from proxy node",U.name,me))}return B===void 0?de.warn("Starting subscription request from node",L,"but no node id found"):S.push(B),A.get(B)>me&&(me=A.get(B),de.debug?.("Updating start time from more recent txn recorded",U.name,me)),me===1&&(L.isLeader?(de.warn?.(`Requesting full copy of database ${u} from ${L.url}`),me=0):me=Date.now()-6e4),de.trace?.(s,"defining subscription request",L.name,u,new Date(me)),{name:L.name,replicateByDefault:Q,tables:z,startTime:me,isLeader:L.isLeader,endTime:L.endTime}});if(w)if(de.debug?.(s,"sending subscription request",w,h?.dbisDB?.path),clearTimeout(Y),w.length>0)e.send((0,ct.encode)([N1,w]));else{let L=a(()=>{let G=performance.now();Y=setTimeout(()=>{le<=G?Fr(1008,"Connection has no subscriptions and is no longer used"):L()},j).unref()},"scheduleClose");L()}}a(gm,"sendSubscriptionRequestUpdate");function d_(A,U){if(!A)return;let w=Me[A];return w||(w=U.getResidencyRecord(A),Me[A]=w),w}a(d_,"getResidence");function Fa(A){return!(_c&&_c!="*"&&!_c[A]&&!_c.includes?.(A)&&!_c.some?.(U=>U.name===A))}a(Fa,"checkDatabaseAccess");function Qc(A){if(h=h||d.get(A),!Fa(A))throw new Error(`Access to database "${A}" is not permitted`);h||de.warn?.(`No database named "${A}" was declared and registered`),f=h?.auditStore,E||(E=lt()?.[A]);let U=it();if(U===g)throw U?new Error("Should not connect to self",U):new Error("Node name not defined");return Mu(U,A),!0}a(Qc,"setDatabase");function Mu(A,U){let w=lt()?.[U],L=[];for(let G in w){let z=w[G];L.push({table:G,schemaDefined:z.schemaDefined,attributes:z.attributes.map(Q=>({name:Q.name,type:Q.type,isPrimaryKey:Q.isPrimaryKey}))})}de.trace?.("Sending database info for node",A,"database name",U),e.send((0,ct.encode)([C1,A,U,L]))}a(Mu,"sendNodeDBName");function K(A){let U=lt()?.[A],w=[];for(let L in U){if(pn&&!pn.some(z=>z.replicateByDefault?!z.tables.includes(L):z.tables.includes(L)))continue;let G=U[L];w.push({table:L,schemaDefined:G.schemaDefined,attributes:G.attributes.map(z=>({name:z.name,type:z.type,isPrimaryKey:z.isPrimaryKey}))})}e.send((0,ct.encode)([v1,w,A]))}a(K,"sendDBSchema"),k=setInterval(()=>{for(let[A,U]of be)U.lastChunk+ge<Date.now()&&(de.warn?.(`Timeout waiting for blob stream to finish ${A} for record ${U.recordId??"unknown"} from ${g}`),be.delete(A),U.end())},ge).unref();let _=1,T=[];return{end(){Do&&Do.end(),Mn&&Mn.emit("close")},getRecord(A){let U=_++;return new Promise((w,L)=>{let G=[L1,U,A.table.tableId,A.id];T[A.table.tableId]||(G.push(A.table.tableName),T[A.table.tableId]=!0),e.send((0,ct.encode)(G)),le=performance.now(),R.set(U,{tableId:A.table.tableId,key:A.id,resolve(z){let{table:Q,entry:B}=A;if(w(z),z)return Q._recordRelocate(B,z)},reject:L})})},sendOperation(A){let U=_++;return A.requestId=U,e.send((0,ct.encode)([cO,A])),new Promise((w,L)=>{R.set(U,{resolve:w,reject:L})})}};function C(A){x(5),A<128?o[c++]=A:A<16384?(l.setUint16(c,A|32768),c+=2):A<1056964608?(l.setUint32(c,A|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,A),c+=5)}function P(A,U=0,w=A.length){let L=w-U;x(L),A.copy(o,c,U,w),c+=L}function O(A){x(8),l.setFloat64(c,A),c+=8}function x(A){if(A+16>o.length-c){let U=Buffer.allocUnsafeSlow(c+A-i+65536>>10<<11);o.copy(U,0,i,c),c=c-i,i=0,o=U,l=new DataView(o.buffer,0,o.length)}}function D(A,U){let w=A.database??"data";U||(U={});let L=U.schemaDefined,G=!1,z=A.schemaDefined,Q=U.attributes||[];for(let B=0;B<A.attributes?.length;B++){let Ee=A.attributes[B],me=Q.find(pe=>pe.name===Ee.name);(!me||me.type!==Ee.type)&&(L?de.error?.(`Schema for '${u}.${A.table}' is defined locally, but attribute '${Ee.name}: ${Ee.type}' from '${g}' does not match local attribute ${me?"'"+me.name+": "+me.type+"'":"which does not exist"}`):(G=!0,z||(Ee.indexed=!0),me?Q[Q.indexOf(me)]=Ee:Q.push(Ee)))}return G?(de.debug?.("(Re)creating",A),Xe({table:A.table,database:A.database,schemaDefined:A.schemaDefined,attributes:Q,...U})):U}}var F1,ct,k1,H1,q1,fO,G1,$1,mO,V1,aO,K1,Afe,sO,de,N1,C1,O1,Ih,P1,iO,L1,wT,cO,NT,D1,M1,v1,CT,Y1,lO,uO,wh,PT,dO,W1,z1,j1,pO,gc,OT,U1,Ife,x1,oO,af,B1,cf,hO=ne(()=>{we();Ki();VC();pI();Ss();F1=b(ae());H();dl();ct=require("msgpackr"),k1=require("ws"),H1=require("worker_threads"),q1=b(J());Rh();fO=require("events"),G1=b(ys()),$1=b(require("node:tls"));tf();mO=b(require("node:process")),V1=require("node:net");is();ss();aO=require("node:stream"),K1=require("lmdb"),{forComponent:Afe,errorToString:sO}=q1.default,de=Afe("replication").conditional,N1=129,C1=140,O1=141,Ih=142,P1=130,iO=132,L1=133,wT=134,cO=136,NT=137,D1=143,M1=144,v1=145,CT=146,Y1=0,lO=1,uO=2,wh=3,PT=4,dO=5,W1=6,z1=0,j1=1,pO=new Map,gc=new Map,OT=!0,U1=300,Ife=2,x1=3e4;a(LT,"createWebSocket");B1=500,cf=class extends fO.EventEmitter{static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=B1;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions;latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;url;subscription;databaseName;nodeName;authorization;constructor(t,r,n,s,i){super(),this.url=t,this.subscription=r,this.databaseName=n,this.authorization=i,this.nodeName=this.nodeName??Ai(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await LT(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;de.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${mO.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),de[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=B1,this.nodeSubscriptions&&Yl({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=Nh(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(de.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?de.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):de.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&nf({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();de.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};a(Nh,"replicateOverWS")});function Sc(e,t){let r=e.toString("base64"),n=[`-----BEGIN ${t}-----`];for(let s=0;s<r.length;s+=64)n.push(r.substring(s,s+64));return n.push(`-----END ${t}-----`),n.join(`
|
|
19
|
-
`)}function X1(e){let t=[],r=e;for(;r?.raw;){let n={cert:r.raw};if(r.issuerCertificate&&r.issuerCertificate!==r&&r.issuerCertificate.raw&&(n.issuer=r.issuerCertificate.raw),t.push(n),r.issuerCertificate&&r.issuerCertificate!==r)r=r.issuerCertificate;else break}return t}function gO(e){try{let t=jl(e),n=ho.Certificate.fromBER(t).extensions?.find(c=>c.extnID==="2.5.29.31");if(!n)return ia.debug?.("Certificate has no CRL Distribution Points extension"),[];let s=oa.fromBER(n.extnValue.valueBlock.valueHexView);if(s.offset===-1)throw new Error("Failed to parse ASN.1 structure in CRL Distribution Points extension");let i=new ho.CRLDistributionPoints({schema:s.result}),o=[];for(let c of i.distributionPoints)if(c.distributionPoint&&Array.isArray(c.distributionPoint)){for(let l of c.distributionPoint)if(l.type===6&&typeof l.value=="string"){let u=l.value;(u.startsWith("http://")||u.startsWith("https://"))&&o.push(u)}}return ia.debug?.(`Found ${o.length} CRL distribution points: ${o}`),o}catch(t){return ia.warn?.(`Failed to extract CRL distribution points: ${t}`),[]}}function Z1(e){try{let t=jl(e),r=ho.Certificate.fromBER(t),n=[],s=[];for(let i of r.extensions||[])if(i.extnID==="2.5.29.31")try{let o=oa.fromBER(i.extnValue.valueBlock.valueHexView);if(o.offset!==-1){let c=new ho.CRLDistributionPoints({schema:o.result});for(let l of c.distributionPoints)if(l.distributionPoint&&Array.isArray(l.distributionPoint)){for(let u of l.distributionPoint)if(u.type===6&&typeof u.value=="string"){let d=u.value;(d.startsWith("http://")||d.startsWith("https://"))&&n.push(d)}}}}catch(o){ia.warn?.(`Failed to parse CRL Distribution Points extension: ${o}`)}else if(i.extnID==="1.3.6.1.5.5.7.1.1")try{let o=oa.fromBER(i.extnValue.valueBlock.valueHexView);if(o.offset!==-1&&o.result instanceof oa.Sequence){for(let c of o.result.valueBlock.value)if(c instanceof oa.Sequence&&c.valueBlock.value.length>=2){let l=c.valueBlock.value[0],u=c.valueBlock.value[1];if(l instanceof oa.ObjectIdentifier&&l.valueBlock.toString()==="1.3.6.1.5.5.7.48.1"&&u.idBlock.tagNumber===6){let d=String.fromCharCode(...Array.from(u.valueBlock.valueHexView));(d.startsWith("http://")||d.startsWith("https://"))&&s.push(d)}}}}catch(o){ia.warn?.(`Failed to parse Authority Information Access extension: ${o}`)}return ia.debug?.(`Found ${n.length} CRL distribution points and ${s.length} OCSP responder URLs`),{crlUrls:n,ocspUrls:s}}catch(t){return ia.warn?.(`Failed to extract revocation URLs: ${t}`),{crlUrls:[],ocspUrls:[]}}}function jl(e){let t=e.replace(/-----BEGIN [^-]+-----/g,"").replace(/-----END [^-]+-----/g,"").replace(/\s/g,""),r=atob(t),n=new ArrayBuffer(r.length),s=new Uint8Array(n);for(let i=0;i<r.length;i++)s[i]=r.charCodeAt(i);return n}function MT(e,t,r,n){let s={certPem:e,issuerPem:t,method:r,...n},i=(0,_O.createHash)("sha256").update(JSON.stringify(s)).digest("hex");return`${r}:${i}`}function SO(e,t){return`${e}:${t}`}function eK(e){try{let t=jl(e),n=ho.Certificate.fromBER(t).serialNumber.valueBlock.valueHexView;return Array.from(n).map(s=>s.toString(16).padStart(2,"0")).join("")}catch(t){throw ia.error?.(`Failed to extract serial number: ${t}`),new Error(`Failed to extract certificate serial number: ${t.message}`)}}function TO(e){try{let t=jl(e),r=ho.Certificate.fromBER(t),n=r.extensions?.find(i=>i.extnID==="2.5.29.35");if(n){let i=new ho.AuthorityKeyIdentifier({schema:n.parsedValue});if(i.keyIdentifier){let o=i.keyIdentifier.valueBlock.valueHexView;return Array.from(o).map(c=>c.toString(16).padStart(2,"0")).join("")}}let s=r.issuer.typesAndValues.map(i=>`${i.type}=${i.value.valueBlock.value}`).join(",");return(0,_O.createHash)("sha256").update(s).digest("hex")}catch(t){throw ia.error?.(`Failed to extract issuer key ID: ${t}`),new Error(`Failed to extract issuer key ID: ${t.message}`)}}function vT(){return EO||(EO=Xe({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]})),EO}var _O,ho,oa,J1,ia,EO,UT=ne(()=>{_O=require("node:crypto"),ho=b(require("pkijs")),oa=b(require("asn1js")),J1=b(wr());we();ia=(0,J1.loggerWithTag)("cert-verification-utils");a(Sc,"bufferToPem");a(X1,"extractCertificateChain");a(gO,"extractCRLDistributionPoints");a(Z1,"extractRevocationUrls");a(jl,"pemToBuffer");a(MT,"createCacheKey");a(SO,"createRevokedCertificateId");a(eK,"extractSerialNumber");a(TO,"extractIssuerKeyId");EO=null;a(vT,"getCertificateCacheTable")});function tK(e){let{error:t,value:r}=Ofe.validate(e,{abortEarly:!1,allowUnknown:!1});if(t){let n=t.details.map(s=>s.message).join("; ");throw new Error(`Invalid certificate verification configuration: ${n}`)}return r}var Wr,wfe,lf,uf,yO,Nfe,Cfe,Ofe,rK=ne(()=>{Wr=b(require("joi")),wfe="fail-closed",lf={timeout:5e3,cacheTtl:36e5,errorCacheTtl:3e5,failureMode:"fail-closed"},uf={timeout:1e4,cacheTtl:864e5,failureMode:"fail-closed",gracePeriod:864e5},yO=Wr.default.string().valid("fail-open","fail-closed"),Nfe=Wr.default.alternatives().try(Wr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...uf}),Wr.default.object({enabled:Wr.default.boolean().default(!0),timeout:Wr.default.number().min(1e3).default(uf.timeout).messages({"number.min":"CRL timeout must be at least 1000ms (1 second)"}),cacheTtl:Wr.default.number().min(1e3).default(uf.cacheTtl).messages({"number.min":"CRL cacheTtl must be at least 1000ms (1 second)"}),failureMode:yO.default(uf.failureMode),gracePeriod:Wr.default.number().min(0).default(uf.gracePeriod).messages({"number.min":"CRL gracePeriod must be at least 0ms"})})),Cfe=Wr.default.alternatives().try(Wr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...lf}),Wr.default.object({enabled:Wr.default.boolean().default(!0),timeout:Wr.default.number().min(1e3).default(lf.timeout).messages({"number.min":"OCSP timeout must be at least 1000ms (1 second)"}),cacheTtl:Wr.default.number().min(1e3).default(lf.cacheTtl).messages({"number.min":"OCSP cacheTtl must be at least 1000ms (1 second)"}),errorCacheTtl:Wr.default.number().min(1e3).default(lf.errorCacheTtl).messages({"number.min":"OCSP errorCacheTtl must be at least 1000ms (1 second)"}),failureMode:yO.default(lf.failureMode)})),Ofe=Wr.default.object({failureMode:yO.default(wfe),crl:Nfe.default({enabled:!0,...uf}),ocsp:Cfe.default({enabled:!0,...lf})});a(tK,"validateAndParseCertificateVerificationConfig")});function dK(e){if(typeof e=="boolean"||e==null){if(e===RO&&bO)return Eo.trace?.("Using cached validation error result (primitive) - returning disabled"),!1;if(e===RO&&xT!==null)return Eo.trace?.("Using cached certificate verification config (primitive)"),xT;Eo.trace?.("Parsing and caching certificate verification config (primitive)"),RO=e;try{return xT=iK(e),bO=null,xT}catch(n){return bO=n,Eo.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}if(sK.get(e))return Eo.trace?.("Using cached validation error result (object) - returning disabled"),!1;let r=nK.get(e);if(r!==void 0)return Eo.trace?.("Using cached certificate verification config (object)"),r;Eo.trace?.("Parsing and caching certificate verification config (object)");try{let n=iK(e);return nK.set(e,n),n}catch(n){return sK.set(e,n),Eo.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}function iK(e){if(Eo.trace?.(`getCertificateVerificationConfig called with: ${JSON.stringify({mtlsConfig:e})}`),!e)return!1;let t=e===!0?void 0:e.certificateVerification;return Eo.trace?.(`Certificate verification config: ${JSON.stringify({verificationConfig:t})}`),t==null||t===!1?!1:tK(t===!0?{}:t)}var oK,aK,Eo,cK,lK,uK,nK,RO,xT,sK,bO,AO=ne(()=>{oK=b(wr()),aK=b(Rt());rK();Eo=(0,oK.loggerWithTag)("cert-verification-config"),cK=10080*60*1e3,lK=3e5,uK=`Harper/${aK.packageJson.version} CRL-Client`,nK=new WeakMap,RO=null,xT=null,sK=new WeakMap,bO=null;a(dK,"getCachedCertificateVerificationConfig");a(iK,"getCertificateVerificationConfig")});function Ch(e){return e===mK||e===Pfe}function Lfe(e){return e===pK||e===hK}function IO(e){return e===mK?pK:hK}function Dfe(){if(fK)return;fK=!0;let e=Ql.CryptoEngine.prototype,t=Ql.Certificate.prototype,r={getHashAlgorithm:e.getHashAlgorithm,getAlgorithmByOID:e.getAlgorithmByOID,getAlgorithmParameters:e.getAlgorithmParameters,verifyWithPublicKey:e.verifyWithPublicKey,certificateVerify:t.verify,getPublicKey:t.getPublicKey};e.getHashAlgorithm=function(...n){let[s]=n;return Ch(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return Ch(s)?{name:IO(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return Lfe(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=Ql.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(Ch(i)){let o=IO(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),o,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(Ch(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),o=s.toSchema().toBER(!1),c=new Oh.X509Certificate(Buffer.from(i)),l=new Oh.X509Certificate(Buffer.from(o));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,o]=n,c=o.algorithm.algorithmId;if(Ch(c)){let l=IO(c);try{let u=this.crypto?.subtle||this.subtle||Ql.getCrypto(!0)?.subtle||Oh.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",o.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return"unusedBits"in i.valueBlock&&i.valueBlock.unusedBits>0&&(f=f.slice(0,f.length-1)),await u.verify(l,d,f,s)}catch{return!1}}return r.verifyWithPublicKey.call(this,...n)})}var Ql,Oh,mK,Pfe,pK,hK,fK,EK=ne(()=>{Ql=b(require("pkijs")),Oh=require("node:crypto"),mK="1.3.101.112",Pfe="1.3.101.113",pK="Ed25519",hK="Ed448",fK=!1;a(Ch,"isEd25519OrEd448");a(Lfe,"isEdDSAAlgorithmName");a(IO,"getEdDSAAlgorithmName");a(Dfe,"applyEd25519Patch");Dfe()});var TK={};ye(TK,{CRLSignatureVerificationError:()=>Ph,performCRLCheck:()=>Ufe,verifyCRL:()=>CO});function Mfe(){return BT||(BT=vT(),BT.sourcedFrom(df)),BT}function vfe(){return FT||(FT=Xe({table:"hdb_crl_cache",database:"system",attributes:[{name:"distribution_point",isPrimaryKey:!0},{name:"issuer_dn"},{name:"crl_blob"},{name:"this_update"},{name:"next_update"},{name:"signature_valid"},{name:"expiresAt",expiresAt:!0,indexed:!0}]}),FT.sourcedFrom(NO)),FT}function gK(){return wO||(wO=Xe({table:"hdb_revoked_certificates",database:"system",attributes:[{name:"composite_id",isPrimaryKey:!0},{name:"serial_number",indexed:!0},{name:"issuer_key_id",indexed:!0},{name:"revocation_date"},{name:"revocation_reason"},{name:"crl_source",indexed:!0},{name:"crl_next_update"},{name:"expiresAt",expiresAt:!0,indexed:!0}]})),wO}async function CO(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=Sc(e,"CERTIFICATE"),i=Sc(t,"CERTIFICATE"),o=n??gO(s);if(o.length===0)return{valid:!0,status:"no-crl-distribution-points",method:"crl"};let c=MT(s,i,"crl"),l=await Mfe().get(c,{certPem:s,issuerPem:i,distributionPoint:o[0],config:{crl:r??{}}});if(!l)return Pr.error?.("Cache fetch returned null - this indicates a source configuration issue"),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"crl"}:(Pr.warn?.("CRL cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"});let u=l,d=l.wasLoadedFromSource?.();return Pr.trace?.(`CRL ${d?"source fetch":"cache hit"} for certificate`),{valid:u.status==="good",status:u.status,cached:!d,method:u.method||"crl"}}catch(s){return Pr.error?.(`CRL verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"crl"}:(Pr.warn?.("CRL check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"})}}async function Ufe(e,t,r,n){let s=n??gO(e);if(s.length===0)return{status:"good"};let i=eK(e),o=TO(t),c=SO(o,i);try{let u=await gK().get(c);if(u){let f=Date.now(),m=u;return m.crl_next_update>f?{status:"revoked",reason:m.revocation_reason||"unspecified",source:m.crl_source}:m.crl_next_update+r.gracePeriod>f?(Pr.warn?.("Using expired CRL data within grace period"),{status:"revoked",reason:m.revocation_reason||"unspecified",source:m.crl_source}):(Pr.warn?.("CRL data is too old, treating as unknown"),{status:"unknown",reason:"crl-expired"})}let d=await xfe(s,t,r);return d.upToDate?{status:"good",source:d.source}:(Pr.warn?.("CRL data is stale or missing, treating as unknown"),{status:"unknown",reason:d.reason||"crl-unavailable"})}catch(l){return Pr.error?.(`CRL lookup error: ${l}`),{status:"unknown",reason:l.message}}}async function xfe(e,t,r){let n=Date.now();for(let s of e)try{let i=vfe(),o=null,c=null;try{c=await i.get(s),(c&&c.next_update>n||c&&c.next_update+r.gracePeriod>n)&&(o=c)}catch{}o||(o=await SK(s,t,r.timeout));let l=o.next_update;if(l>n){if(!c)try{await i.put(s,o)}catch{}return{upToDate:!0,source:s}}else return l+r.gracePeriod>n?{upToDate:!0,source:s}:{upToDate:!1,reason:"crl-expired"}}catch(i){if(i instanceof Ph)throw i}return{upToDate:!1,reason:"no-current-crl-data"}}async function SK(e,t,r){let n=new AbortController,s=setTimeout(()=>n.abort(),r);try{let i=await fetch(e,{signal:n.signal,headers:{"User-Agent":uK}});if(clearTimeout(s),!i.ok)throw new Error(`CRL download failed: ${i.status}`);let o=Buffer.from(await i.arrayBuffer()),c,l=o.toString("utf8");l.includes("-----BEGIN X509 CRL-----")?c=Buffer.from(jl(l)):c=o;let u=kT.CertificateRevocationList.fromBER(c),d=kT.Certificate.fromBER(jl(t)),f=await u.verify({issuerCertificate:d});if(!f){let g=`CRL signature verification failed for: ${e}`;throw Pr.error?.(g),new Ph(g)}let m=u.thisUpdate.value.getTime(),p=u.nextUpdate?.value.getTime()??m+cK,h=d.issuer.typesAndValues.map(g=>`${g.type}=${g.value.valueBlock.value}`).join(","),E={distribution_point:e,issuer_dn:h,crl_blob:o,this_update:m,next_update:p,signature_valid:f,expiresAt:p};return Bfe(u,t,e,p).catch(g=>{Pr.error?.(`Error processing revoked certificates: ${g}`)}),E}finally{clearTimeout(s)}}async function Bfe(e,t,r,n){let s=gK(),i=TO(t),o=r;try{await Ffe(s,o)}catch(c){Pr.warn?.(`Failed to clear existing CRL entries: ${c}`)}if(e.revokedCertificates)for(let c of e.revokedCertificates)try{let l=c.userCertificate.valueBlock.valueHexView;if(!l){Pr.warn?.("Could not extract serial number from revoked certificate");continue}let u=Array.from(l).map(h=>h.toString(16).padStart(2,"0")).join(""),d=SO(i,u),f=c.revocationDate.value.getTime(),p={composite_id:d,serial_number:u,issuer_key_id:i,revocation_date:f,revocation_reason:"unspecified",crl_source:o,crl_next_update:n,expiresAt:n};await s.create(p.composite_id,p)}catch(l){Pr.warn?.(`Failed to process revoked certificate: ${l}`)}}async function Ffe(e,t){try{let r=e.search([{attribute:"crl_source",value:t}]);for await(let n of r)try{await e.delete(n.composite_id)}catch(s){Pr.warn?.(`Failed to delete revoked certificate entry: ${s}`)}}catch(r){throw Pr.error?.(`Failed to search for existing CRL entries: ${r}`),r}}var kT,_K,Ph,Pr,BT,NO,FT,wO,OO=ne(()=>{kT=b(require("pkijs")),_K=b(wr());we();Ko();UT();AO();PO();Ph=class extends Error{static{a(this,"CRLSignatureVerificationError")}constructor(t){super(t),this.name="CRLSignatureVerificationError"}},Pr=(0,_K.loggerWithTag)("crl-verification");a(Mfe,"getCertificateCacheTable");NO=class extends ur{static{a(this,"CertificateRevocationListSource")}async get(t){let n=this.getContext()?.requestContext;if(!n?.distributionPoint||!n?.issuerPem)throw new Error(`No CRL data provided for cache key: ${t}`);let{distributionPoint:s,issuerPem:i,config:o}=n;try{let c=await SK(s,i,o.timeout),l=c.next_update,u=Date.now()+o.cacheTtl,d=Math.min(l,u);return{...c,expiresAt:d}}catch(c){if(Pr.error?.(`CRL fetch error for: ${s} - ${c}`),o.failureMode==="fail-closed"){let l=Date.now()+lK;return{crl_id:t,distribution_point:s,issuer_dn:"unknown",crl_blob:Buffer.alloc(0),this_update:Date.now(),next_update:l,signature_valid:!1,expiresAt:l}}return Pr.warn?.("CRL fetch failed, not caching (fail-open mode)"),null}}};a(vfe,"getCRLCacheTable");a(gK,"getRevokedCertificateTable");a(CO,"verifyCRL");a(Ufe,"performCRLCheck");a(xfe,"checkCRLFreshness");a(SK,"downloadAndParseCRL");a(Bfe,"processRevokedCertificates");a(Ffe,"clearExistingCRLEntries")});async function kfe(){LO||(LO=(await Promise.resolve().then(()=>(OO(),TK))).performCRLCheck),DO||(DO=(await Promise.resolve().then(()=>(MO(),RK))).performOCSPCheck)}var yK,WBe,LO,DO,df,PO=ne(()=>{Ko();yK=b(wr()),WBe=(0,yK.loggerWithTag)("cert-verification-source");a(kfe,"loadVerificationFunctions");df=class extends ur{static{a(this,"CertificateVerificationSource")}async get(t){let r=t.id,s=this.getContext()?.requestContext;if(!s||!s.certPem||!s.issuerPem)return null;let{certPem:i,issuerPem:o,ocspUrls:c,config:l}=s,u;r.startsWith("crl:")?u="crl":r.startsWith("ocsp:")?u="ocsp":u="unknown",await kfe();let d,f;if(u==="crl"){f=l.crl;let p=s.distributionPoint?[s.distributionPoint]:void 0;d=await LO(i,o,f,p)}else if(u==="ocsp")f=l.ocsp,d=await DO(i,o,f,c);else throw new Error(`Unsupported verification method: ${u} for ID: ${r}`);let m=Date.now()+f.cacheTtl;return{certificate_id:r,status:d.status,reason:d.reason,checked_at:Date.now(),expiresAt:m,method:u}}}});var RK={};ye(RK,{performOCSPCheck:()=>qfe,verifyOCSP:()=>vO});function Hfe(){return qT||(qT=vT(),qT.sourcedFrom(df)),qT}async function vO(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=Sc(e,"CERTIFICATE"),i=Sc(t,"CERTIFICATE"),o=MT(s,i,"ocsp"),c=await Hfe().get(o,{certPem:s,issuerPem:i,ocspUrls:n,config:{ocsp:r??{}}});if(!c)return r.failureMode==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(HT.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return HT.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(s){return HT.error?.(`OCSP verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"ocsp"}:(HT.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function qfe(e,t,r,n){try{let s=await(0,bK.getCertStatus)(e,{ca:t,timeout:r.timeout,...n?.length&&{ocspUrl:n[0]}});switch(s.status){case"good":return{status:"good"};case"revoked":return{status:"revoked",reason:s.revocationReason?.toString()||"unspecified"};default:return{status:"unknown",reason:"unknown-status"}}}catch(s){return{status:"unknown",reason:s.name==="AbortError"?"timeout":"ocsp-error"}}}var bK,AK,HT,qT,MO=ne(()=>{EK();bK=require("easy-ocsp"),AK=b(wr());UT();PO();HT=(0,AK.loggerWithTag)("ocsp-verification");a(Hfe,"getCertificateCacheTable");a(vO,"verifyOCSP");a(qfe,"performOCSPCheck")});async function ff(e,t){cn.debug?.(`verifyCertificate called for: ${e.subject?.CN||"unknown"}`);let r=dK(t);if(r===!1)return cn.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=X1(e);if(cn.trace?.(`Certificate chain length: ${n.length}`),n.length<2||!n[0].issuer)return cn.debug?.("Certificate chain insufficient for revocation checking - need certificate and issuer"),{valid:!0,status:"no-issuer-cert",method:"disabled"};let s=Sc(n[0].cert,"CERTIFICATE"),{crlUrls:i,ocspUrls:o}=Z1(s);if(cn.debug?.(`Certificate extensions: CRL distribution points=${i.length}, OCSP URLs=${o.length}`),i.length>0)if(r.crl.enabled)try{cn.debug?.("Attempting CRL verification");let c=await CO(n[0].cert,n[0].issuer,r.crl,i);if(c.status==="good"||c.status==="revoked")return cn.debug?.(`CRL verification result: ${c.status}`),c;cn.debug?.(`CRL verification inconclusive: ${c.status}, trying OCSP fallback`)}catch(c){cn.warn?.(`CRL verification failed: ${c}`)}else cn.debug?.("Skipping CRL - disabled in configuration");else cn.debug?.("Skipping CRL - no distribution points in certificate");if(o.length>0)if(r.ocsp.enabled)try{cn.debug?.("Attempting OCSP verification");let c=await vO(n[0].cert,n[0].issuer,r.ocsp,o);return cn.debug?.(`OCSP verification result: ${c.status}`),c}catch(c){cn.warn?.(`OCSP verification failed: ${c}`)}else cn.debug?.("Skipping OCSP - disabled in configuration");else cn.debug?.("Skipping OCSP - no responder URLs in certificate");return r.failureMode==="fail-closed"?{valid:!1,status:"no-verification-available",method:"disabled"}:{valid:!0,status:"verification-unavailable-allowed",method:"disabled"}}var IK,cn,GT=ne(()=>{IK=b(wr());UT();AO();MO();OO();cn=(0,IK.loggerWithTag)("cert-verification");a(ff,"verifyCertificate")});var na={};ye(na,{buildReplicationMtlsConfig:()=>vK,clearThisNodeName:()=>Qfe,disableReplication:()=>Kfe,enabledDatabases:()=>_c,forEachReplicatedDatabase:()=>fc,getThisNodeId:()=>DT,getThisNodeName:()=>it,getThisNodeUrl:()=>mc,hostnameToUrl:()=>YT,lastTimeInAuditStore:()=>_h,monitorNodeCAs:()=>UK,replicateOperation:()=>Xfe,replicationCertificateAuthorities:()=>sa,sendOperationToNode:()=>Lh,servers:()=>$fe,setReplicator:()=>BK,start:()=>Vfe,startOnMainThread:()=>KC,subscribeToNode:()=>yh,unsubscribeFromNode:()=>TT,urlToNodeName:()=>Ai});function vK(e){return e?.mtls&&typeof e.mtls=="object"?e.mtls:!0}function Vfe(e){if(!e.port&&!e.securePort&&(e.port=Ys.default.get(F.OPERATIONSAPI_NETWORK_PORT),e.securePort=Ys.default.get(F.OPERATIONSAPI_NETWORK_SECUREPORT)),!it())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let i of Sh(e))t.set(Ai(i.url),i);Yfe(e);let r=vK(e);e={isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e,mtls:r};let n=Be.ws(async(i,o,c,l)=>{if(wt.debug("Incoming WS connection received "+o.url),o.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return l(i,o,c);i._socket.unref(),Nh(i,e,c.then(()=>o?.user)),i.on("error",u=>{u.code!=="ECONNREFUSED"&&wt.error("Error in connection to "+this.url,u.message)})},e);e.runFirst=!0,Be.http(async(i,o)=>{if(i.isWebSocket&&i.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){wt.debug("Incoming replication WS connection received, authorized: "+i.authorized),!i.authorized&&i._nodeRequest.socket.authorizationError&&wt.error(`Incoming client connection from ${i.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,i._nodeRequest.socket.authorizationError);let c=qt().primaryStore;if(i.authorized&&i.peerCertificate.subjectaltname){let l=(0,DK.getHostnamesFromCertificate)(i.peerCertificate),u;for(let d of l)if(u=d&&(c.get(d)||t.get(d)),u)break;if(u){let d=await ff(i.peerCertificate,e.mtls);if(!d.valid){wt.warn("Certificate verification failed:",d.status,"for node",u.name,"certificate serial number",i.peerCertificate.serialNumber);return}if(u?.revoked_certificates?.includes(i.peerCertificate.serialNumber)){wt.warn("Revoked certificate used in attempt to connect to node",u.name,"certificate serial number",i.peerCertificate.serialNumber);return}else i.user=u}else wt.warn(`No node found for certificate common name/SANs: ${l}, available nodes are ${Array.from(c.getRange({}).filter(({value:d})=>d).map(({key:d})=>d)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let l=c.get(i.ip)||t.get(i.ip);l?i.user=l:wt.warn(`No node found for IP address ${i.ip}, available nodes are ${Array.from(new Set([...c.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return o(i)},e);let s=[];for(let i of n)if(i.secureContexts){let o=a(()=>{let c=new Set(i.secureContexts.values());i.defaultContext&&c.add(i.defaultContext);for(let l of c)try{let u=Array.from(sa);l.options.availableCAs&&u.push(...l.options.availableCAs.values());let d={...l.options,ca:u};l.updatedContext=KT.createSecureContext(d)}catch(u){wt.error("Error creating replication TLS config",u)}},"updateContexts");i.secureContextsListeners.push(o),s.push(o),Ys.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1&&o()}UK(()=>{for(let i of s)i()})}function UK(e){let t=0;ef(r=>{r?.ca&&(sa.add(r.ca),sa.size!==t&&(t=sa.size,e?.()))})}function Kfe(e=!0){MK=e}function Yfe(e){MK||(lt(),_c=e.databases,fc(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||gc;for(let[s,i]of VT){let o=i.get(r);o&&(o.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];BK(r,s,e),pO.get(s)?.forEach(i=>i(s))}}))}function BK(e,t,r){if(!t)return console.error(`Attempt to replicate non-existent table ${t.name} from database ${e}`);if(t.replicate===!1||t.sources?.some(s=>s.isReplicator))return;let n;t.sourcedFrom(class xK extends ur{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||gc,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(wt.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new ns,i.set(e,o),o.tableById=c,o.auditStore=t.auditStore,o.dbisDB=t.dbisDB,o.databaseName=e,l&&l(o),o;this.subscription=o}static subscribeOnThisThread(i,o){return!0}static async load(i){if(i){let o=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),o]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===Be.hostname)continue;let E=zfe(h,xK.subscription,e);if(E?.isConnected){let g=Zd(t.auditStore,e,h)[PT];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new PK.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:Gfe++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;wt.warn("Error in load from node",Jl,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function Wfe(e,t,r,n,s,i){let o=t+"-"+e,c=VT.get(o);c||(c=new Map,VT.set(o,c));let l=c.get(n);if(l)return l;if(r)return c.set(n,l=new cf(t,r,n,s,i)),l.connect(),l.once("finished",()=>c.delete(n)),l}function zfe(e,t,r){let n=wK.get(Jl);n||(n=new Map,wK.set(Jl,n));let s=n.get(r);if(s)return s;let i=qt().primaryStore.get(e);return i?.url&&(s=new cf(i.url,t,r,Jl,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Lh(e,t,r){r||(r={}),r.serverName=e.name;let n=await LT(e.url,r),s=Nh(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{wt.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{wt.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function yh(e){try{LK.isMainThread&&wt.warn("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=gc.get(e.database);if(!t){let n;t=new Promise(s=>{wt.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,gc.set(e.database,t)}let r=Wfe(e.nodes[0].url,e.url,t,e.database,e.name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>gh(n,e.database)),e.replicateByDefault)}catch(t){wt.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function TT({url:e,nodes:t,database:r}){wt.trace("Unsubscribing from node",e,r,"nodes",Array.from(qt().primaryStore.getRange({})));let n=e+"-"+(t[0]?.url??e),s=VT.get(n);if(s){let i=s.get(r);i&&(i.unsubscribe(),s.delete(r))}}function jfe(){if(UO!==void 0)return UO;let e=Ys.default.get(F.OPERATIONSAPI_TLS_CERTIFICATE)||Ys.default.get(F.TLS_CERTIFICATE);if(e)return UO=new CK.X509Certificate((0,OK.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function it(){return Jl||(Jl=Ys.default.get("replication_hostname")??Ai(Ys.default.get("replication_url"))??jfe()??NK("operationsapi_network_secureport")??NK("operationsapi_network_port")??"127.0.0.1")}function Qfe(){Jl=void 0}function NK(e){let t=Ys.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function $T(e){let t=Ys.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function DT(e){return Eh(e)?.[it()]}function mc(){let e=Ys.default.get("replication_url");return e||YT(it())}function YT(e){let t=$T("replication_port");if(t)return`ws://${e}:${t}`;if(t=$T("replication_secureport"),t)return`wss://${e}:${t}`;if(t=$T("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=$T("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Ai(e){if(e)return new URL(e).hostname}function fc(e,t){for(let n of Object.getOwnPropertyNames(ve))r(n);return Xp(n=>{r(n)}),Hl((n,s)=>{r(n.databaseName)});function r(n){let s=ve[n];wt.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):Jfe(n)&&t(s,n,!1)}a(r,"forDatabase")}function Jfe(e){let t=ve[e];for(let r in t)if(t[r].replicate)return!0}function _h(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Xfe(e){let t={message:""};if(e.replicated){e.replicated=!1,wt.trace?.("Replicating operation",e.operation,"to nodes",Be.nodes.map(n=>n.name));let r=await Promise.allSettled(Be.nodes.map(n=>Lh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Be.nodes[s]?.name,i})}return t}var Ys,wt,CK,OK,KT,PK,LK,DK,MK,Gfe,$fe,sa,_c,VT,wK,UO,Jl,Ss=ne(()=>{we();Ko();Fu();hO();Hr();Ys=b(ae()),wt=b(J()),CK=require("crypto");GT();OK=require("fs");Rh();tf();H();VC();KT=b(require("node:tls")),PK=b(_e()),LK=require("worker_threads"),DK=b(ys()),Gfe=1,$fe=[],sa=Ys.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1?new Set(KT.rootCertificates):new Set;a(vK,"buildReplicationMtlsConfig");a(Vfe,"start");a(UK,"monitorNodeCAs");a(Kfe,"disableReplication");a(Yfe,"assignReplicationSource");a(BK,"setReplicator");VT=new Map;a(Wfe,"getSubscriptionConnection");wK=new Map;a(zfe,"getRetrievalConnectionByName");a(Lh,"sendOperationToNode");a(yh,"subscribeToNode");a(TT,"unsubscribeFromNode");a(jfe,"getCommonNameFromCert");a(it,"getThisNodeName");a(Qfe,"clearThisNodeName");Object.defineProperty(Be,"hostname",{get(){return it()}});a(NK,"getHostFromListeningPort");a($T,"getPortFromListeningPort");a(DT,"getThisNodeId");Be.replication={getThisNodeId:DT,exportIdMapping:Eh};a(mc,"getThisNodeUrl");a(YT,"hostnameToUrl");a(Ai,"urlToNodeName");a(fc,"forEachReplicatedDatabase");a(Jfe,"hasExplicitlyReplicatedTable");a(_h,"lastTimeInAuditStore");a(Xfe,"replicateOperation")});var Mh=v((_Fe,GK)=>{"use strict";var mf=pV(),{validateBySchema:Dh}=ot(),{commonValidators:pf,schemaRegex:xO}=Xi(),_r=require("joi"),Zfe=J(),eme=require("uuid").v4,jT=zo(),hf=(H(),M(W)),tme=require("util"),Tc=fs(),{handleHDBError:aa,hdbErrors:rme,ClientError:Xl}=_e(),{HDB_ERROR_MSGS:WT,HTTP_STATUS_CODES:ca}=rme,{SchemaEventMsg:QT}=ls(),FK=Ht(),{getDatabases:nme}=(we(),M(mt)),{transformReq:Ef}=oe(),{replicateOperation:kK}=(Ss(),M(na)),{cleanupOrphans:sme}=(ss(),M(Q_)),zT=_r.string().min(1).max(pf.schema_length.maximum).pattern(xO).messages({"string.pattern.base":"{:#label} "+pf.schema_format.message}),ime=_r.string().min(1).max(pf.schema_length.maximum).pattern(xO).messages({"string.pattern.base":"{:#label} "+pf.schema_format.message}).required(),ome=_r.string().min(1).max(pf.schema_length.maximum).pattern(xO).messages({"string.pattern.base":"{:#label} "+pf.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();GK.exports={createSchema:ame,createSchemaStructure:HK,createTable:cme,createTableStructure:qK,createAttribute:mme,dropSchema:lme,dropTable:ume,dropAttribute:dme,getBackup:pme,cleanupOrphanBlobs:hme};async function ame(e){let t=await HK(e);return jT.signalSchemaChange(new QT(process.pid,e.operation,e.schema)),t}a(ame,"createSchema");async function HK(e){let t=Dh(e,_r.object({database:zT,schema:zT}));if(t)throw new Xl(t.message);if(Ef(e),!await mf.checkSchemaExists(e.schema))throw aa(new Error,WT.SCHEMA_EXISTS_ERR(e.schema),ca.BAD_REQUEST,hf.LOG_LEVELS.ERROR,WT.SCHEMA_EXISTS_ERR(e.schema),!0);return await Tc.createSchema(e),`database '${e.schema}' successfully created`}a(HK,"createSchemaStructure");async function cme(e){return Ef(e),e.hash_attribute=e.primary_key??e.hash_attribute,await qK(e)}a(cme,"createTable");async function qK(e){let t=Dh(e,_r.object({database:zT,schema:zT,table:ime,residence:_r.array().items(_r.string().min(1)).optional(),hash_attribute:ome}));if(t)throw new Xl(t.message);if(!await mf.checkSchemaTableExists(e.schema,e.table))throw aa(new Error,WT.TABLE_EXISTS_ERR(e.schema,e.table),ca.BAD_REQUEST,hf.LOG_LEVELS.ERROR,WT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:eme(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Tc.createTable(n,e);else throw aa(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",ca.BAD_REQUEST);else await Tc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(qK,"createTableStructure");async function lme(e){let t=Dh(e,_r.object({database:_r.string(),schema:_r.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Xl(t.message);Ef(e);let r=await mf.checkSchemaExists(e.schema);if(r)throw aa(new Error,r,ca.NOT_FOUND,hf.LOG_LEVELS.ERROR,r,!0);let n=await mf.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await Tc.dropSchema(e),jT.signalSchemaChange(new QT(process.pid,e.operation,e.schema)),await FK.purgeSchemaTableStreams(e.schema,s);let i=await kK(e);return i.message=`successfully deleted '${e.schema}'`,i}a(lme,"dropSchema");async function ume(e){let t=Dh(e,_r.object({database:_r.string(),schema:_r.string(),table:_r.string().required()}));if(t)throw new Xl(t.message);Ef(e);let r=await mf.checkSchemaTableExists(e.schema,e.table);if(r)throw aa(new Error,r,ca.NOT_FOUND,hf.LOG_LEVELS.ERROR,r,!0);await Tc.dropTable(e),await FK.purgeTableStream(e.schema,e.table);let n=await kK(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(ume,"dropTable");async function dme(e){let t=Dh(e,_r.object({database:_r.string(),schema:_r.string(),table:_r.string().required(),attribute:_r.string().required()}));if(t)throw new Xl(t.message);Ef(e);let r=await mf.checkSchemaTableExists(e.schema,e.table);if(r)throw aa(new Error,r,ca.NOT_FOUND,hf.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw aa(new Error,"You cannot drop a hash attribute",ca.BAD_REQUEST,void 0,void 0,!0);if(hf.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw aa(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,ca.BAD_REQUEST,void 0,void 0,!0);try{return await Tc.dropAttribute(e),fme(e),jT.signalSchemaChange(new QT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Zfe.error(`Got an error deleting attribute ${tme.inspect(e)}.`),n}}a(dme,"dropAttribute");function fme(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(fme,"dropAttributeFromGlobal");async function mme(e){Ef(e);let t=nme()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw aa(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,ca.BAD_REQUEST,void 0,void 0,!0);return await Tc.createAttribute(e),jT.signalSchemaChange(new QT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(mme,"createAttribute");function pme(e){return Tc.getBackup(e)}a(pme,"getBackup");function hme(e){if(!e.database)throw new Xl('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new Xl(`Unknown database '${e.database}'`);return sme(databases[e.database]),{message:"Orphaned blobs cleanup started, check logs for progress"}}a(hme,"cleanupOrphanBlobs")});var VK=v((SFe,$K)=>{"use strict";var{OPERATIONS_ENUM:Eme}=(H(),M(W)),BO=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Eme.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};$K.exports=BO});var FO=v((RFe,jK)=>{"use strict";var _me=fs(),yFe=VK(),JT=oe(),XT=(H(),M(W)),gme=ae(),{handleHDBError:KK,hdbErrors:Sme}=_e(),{HDB_ERROR_MSGS:YK,HTTP_STATUS_CODES:WK}=Sme,Tme=Object.values(XT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),zK="To use this operation audit log must be enabled in harperdb-config.yaml";jK.exports=yme;async function yme(e){if(JT.isEmpty(e.schema))throw new Error(YK.SCHEMA_REQUIRED_ERR);if(JT.isEmpty(e.table))throw new Error(YK.TABLE_REQUIRED_ERR);if(!gme.get(XT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw KK(new Error,zK,WK.BAD_REQUEST,XT.LOG_LEVELS.ERROR,zK,!0);let t=JT.checkSchemaTableExist(e.schema,e.table);if(t)throw KK(new Error,t,WK.NOT_FOUND,XT.LOG_LEVELS.ERROR,t,!0);if(!JT.isEmpty(e.search_type)&&Tme.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await _me.readAuditLog(e)}a(yme,"readAuditLog")});var JK=v((AFe,QK)=>{"use strict";var{OPERATIONS_ENUM:Rme}=(H(),M(W)),kO=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Rme.GET_BACKUP,this.schema=t,this.table=r}};QK.exports=kO});var eY=v((CFe,ZK)=>{"use strict";var bme=fs(),wFe=JK(),HO=oe(),Ame=(H(),M(W)),NFe=ae(),{handleHDBError:Ime,hdbErrors:wme}=_e(),{HDB_ERROR_MSGS:XK,HTTP_STATUS_CODES:Nme}=wme;ZK.exports=Cme;async function Cme(e){if(HO.isEmpty(e.schema))throw new Error(XK.SCHEMA_REQUIRED_ERR);if(HO.isEmpty(e.table))throw new Error(XK.TABLE_REQUIRED_ERR);let t=HO.checkSchemaTableExist(e.schema,e.table);if(t)throw Ime(new Error,t,Nme.NOT_FOUND,Ame.LOG_LEVELS.ERROR,t,!0);return await bme.getBackup(readAuditLogObject)}a(Cme,"getBackup")});var sY=v((PFe,nY)=>{"use strict";var Ome=ae(),yc=require("joi"),Pme=ot(),tY=require("moment"),Lme=require("fs-extra"),qO=require("path"),Dme=require("lodash"),vh=(H(),M(W)),{LOG_LEVELS:Zl}=(H(),M(W)),Mme="YYYY-MM-DD hh:mm:ss",vme=qO.resolve(__dirname,"../logs");nY.exports=function(e){return Pme.validateBySchema(e,Ume)};var Ume=yc.object({from:yc.custom(rY),until:yc.custom(rY),level:yc.valid(Zl.NOTIFY,Zl.FATAL,Zl.ERROR,Zl.WARN,Zl.INFO,Zl.DEBUG,Zl.TRACE),order:yc.valid("asc","desc"),limit:yc.number().min(1),start:yc.number().min(0),log_name:yc.custom(xme)});function rY(e,t){if(tY(e,tY.ISO_8601).format(Mme)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(rY,"validateDatetime");function xme(e,t){if(Dme.invert(vh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Ome.get(vh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?vh.LOG_NAMES.HDB:e,i=s===vh.LOG_NAMES.INSTALL?qO.join(vme,vh.LOG_NAMES.INSTALL):qO.join(n,s);return Lme.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(xme,"validateReadLogPath")});var $O=v((DFe,oY)=>{"use strict";var ZT=(H(),M(W)),Bme=J(),Fme=ae(),kme=sY(),GO=require("path"),iY=require("fs-extra"),{once:Hme}=require("events"),{handleHDBError:qme,hdbErrors:Gme}=_e(),{PACKAGE_ROOT:$me}=Rt(),{replicateOperation:Vme}=(Ss(),M(na)),Kme=GO.join($me,"logs"),Yme=1e3,Wme=200;oY.exports=zme;async function zme(e){let t=kme(e);if(t)throw qme(t,t.message,Gme.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Vme(e),n=Fme.get(ZT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?ZT.LOG_NAMES.HDB:e.log_name,i=s===ZT.LOG_NAMES.INSTALL?GO.join(Kme,ZT.LOG_NAMES.INSTALL):GO.join(n,s),o=e.level!==void 0,c=o?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?Yme:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,g=0;p==="desc"&&!u&&!f&&(g=Math.max(iY.statSync(i).size-(E+5)*Wme,0));let R=iY.createReadStream(i,{start:g});R.on("error",q=>{Bme.error(q)});let S=0,y=[],N="",I;R.on("data",q=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;q=N+q;let j=0,Y;for(;(Y=k.exec(q))&&!R.destroyed;){I&&(I.message=q.slice(j,Y.index),$(I));let[le,fe,te]=Y,ge=te.split("] ["),be=ge[0],Ye=ge[1];ge.splice(0,2),I={timestamp:fe,thread:be,level:Ye,tags:ge,message:""},j=Y.index+le.length}N=q.slice(j)}),R.on("end",q=>{R.destroyed||I&&(I.message=N.trim(),$(I))}),R.resume();function $(q){let k,j,Y;switch(!0){case(o&&l&&d):k=new Date(q.timestamp),j=new Date(u),Y=new Date(f),q.level===c&&k>=j&&k<=Y&&S<h?S++:q.level===c&&k>=j&&k<=Y&&(_o(q,p,y),S++,S===E&&R.destroy());break;case(o&&l):k=new Date(q.timestamp),j=new Date(u),q.level===c&&k>=j&&S<h?S++:q.level===c&&k>=j&&(_o(q,p,y),S++,S===E&&R.destroy());break;case(o&&d):k=new Date(q.timestamp),Y=new Date(f),q.level===c&&k<=Y&&S<h?S++:q.level===c&&k<=Y&&(_o(q,p,y),S++,S===E&&R.destroy());break;case(l&&d):k=new Date(q.timestamp),j=new Date(u),Y=new Date(f),k>=j&&k<=Y&&S<h?S++:k>=j&&k<=Y&&(_o(q,p,y),S++,S===E&&R.destroy());break;case o:q.level===c&&S<h?S++:q.level===c&&(_o(q,p,y),S++,S===E&&R.destroy());break;case l:k=new Date(q.timestamp),j=new Date(u),k>=j&&S<h?S++:k>=j&&S>=h&&(_o(q,p,y),S++,S===E&&R.destroy());break;case d:k=new Date(q.timestamp),Y=new Date(f),k<=Y&&S<h?S++:k<=Y&&S>=h&&(_o(q,p,y),S++,S===E&&R.destroy());break;default:S<h?S++:(_o(q,p,y),S++,S===E&&R.destroy())}}a($,"onLogMessage"),await Hme(R,"close");let ee=await r;if(ee.replicated){for(let q of y)q.node=server.hostname;for(let q of ee.replicated){let k=q.node;if(q.status==="failed")_o({timestamp:new Date().toISOString(),level:"error",node:k,message:`Error retrieving logs: ${q.reason}`},p,y);else for(let j of q.results)j.node=k,_o(j,p,y)}}return y}a(zme,"readLog");function _o(e,t,r){t==="desc"?jme(e,r):t==="asc"?Qme(e,r):r.push(e)}a(_o,"pushLineToResult");function jme(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(jme,"insertDescending");function Qme(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(Qme,"insertAscending")});var ey=v((FFe,uY)=>{"use strict";var VO=require("joi"),{string:_f,boolean:aY,date:Jme}=VO.types(),Xme=ot(),{validateSchemaExists:vFe,validateTableExists:UFe,validateSchemaName:xFe}=Xi(),Zme=(H(),M(W)),epe=pt(),cY=ae();cY.initSync();var BFe=_f.invalid(cY.get(Zme.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(epe.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),lY={operation:_f.valid("add_node","update_node","set_node_replication"),node_name:_f.optional(),subscriptions:VO.array().items({table:_f.optional(),schema:_f.optional(),database:_f.optional(),subscribe:aY.required(),publish:aY.required().custom(rpe),start_time:Jme.iso()})};function tpe(e){return Xme.validateBySchema(e,VO.object(lY))}a(tpe,"addUpdateNodeValidator");function rpe(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(rpe,"checkForFalsy");uY.exports={addUpdateNodeValidator:tpe,validationSchema:lY}});var Rc=v((HFe,dY)=>{"use strict";var KO=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},YO=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};dY.exports={Node:KO,NodeSubscription:YO}});var mY=v((GFe,fY)=>{"use strict";var npe=(H(),M(W)).OPERATIONS_ENUM,WO=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=npe.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};fY.exports=WO});var Uh=v((VFe,pY)=>{"use strict";var zO=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},jO=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)}};pY.exports={RemotePayloadObject:zO,RemotePayloadSubscription:jO}});var EY=v((YFe,hY)=>{"use strict";var QO=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}};hY.exports=QO});var gY=v((XFe,_Y)=>{"use strict";var spe=EY(),zFe=Wt(),jFe=_t(),ipe=J(),{getSchemaPath:QFe,getTransactionAuditStorePath:JFe}=bt(),{getDatabases:ope}=(we(),M(mt));_Y.exports=ape;async function ape(e){let t=new spe;try{let r=ope()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats();t.schema=e.schema,t.table=e.name,t.record_count=n.entryCount,t.transaction_log_record_count=s.entryCount}catch(r){ipe.warn(`unable to stat table dbi due to ${r}`)}return t}a(ape,"lmdbGetTableSize")});var TY=v((eke,SY)=>{"use strict";var JO=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}};SY.exports=JO});var Bh=v((oke,AY)=>{"use strict";var cpe=require("fs-extra"),lpe=require("path"),wn=require("systeminformation"),bc=J(),yY=Ht(),rke=pt(),gf=(H(),M(W)),upe=gY(),dpe=dc(),{getThreadInfo:RY}=tt(),xh=ae();xh.initSync();var fpe=TY(),{openEnvironment:nke}=_t(),{getSchemaPath:ske}=bt(),{database:ike,databases:XO}=(we(),M(mt)),ty;AY.exports={getHDBProcessInfo:rP,getNetworkInfo:sP,getDiskInfo:nP,getMemoryInfo:tP,getCPUInfo:eP,getTimeInfo:ZO,getSystemInformation:iP,systemInformation:mpe,getTableSize:oP,getMetrics:aP};function ZO(){return wn.time()}a(ZO,"getTimeInfo");async function eP(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...d}=await wn.cpu();d.cpu_speed=await wn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:R,...S}=await wn.currentLoad();return S.cpus=[],R.forEach(y=>{let{rawLoad:N,rawLoadIdle:I,rawLoadIrq:$,rawLoadNice:ee,rawLoadSystem:q,rawLoadUser:k,...j}=y;S.cpus.push(j)}),d.current_load=S,d}catch(e){return bc.error(`error in getCPUInfo: ${e}`),{}}}a(eP,"getCPUInfo");async function tP(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await wn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return bc.error(`error in getMemoryInfo: ${e}`),{}}}a(tP,"getMemoryInfo");async function rP(){let e={core:[],clustering:[]};try{let t=await wn.processes(),r;try{r=Number.parseInt(await cpe.readFile(lpe.join(xh.get(gf.CONFIG_PARAMS.ROOTPATH),gf.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===gf.NODE_ERROR_CODES.ENOENT)bc.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 bc.error(`error in getHDBProcessInfo: ${t}`),e}}a(rP,"getHDBProcessInfo");async function nP(){let e={};try{if(!xh.get(gf.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await wn.disksIO();e.io=i;let{rxSec:o,txSec:c,wxSec:l,...u}=await wn.fsStats();return e.read_write=u,e.size=await wn.fsSize(),e}catch(t){return bc.error(`error in getDiskInfo: ${t}`),e}}a(nP,"getDiskInfo");async function sP(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return xh.get(gf.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await wn.networkInterfaceDefault(),e.latency=await wn.inetChecksite("google.com"),(await wn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await wn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return bc.error(`error in getNetworkInfo: ${t}`),e}}a(sP,"getNetworkInfo");async function iP(){if(ty!==void 0)return ty;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await wn.osInfo();e=c;let l=await wn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,ty=e,ty}catch(t){return bc.error(`error in getSystemInformation: ${t}`),e}}a(iP,"getSystemInformation");async function oP(){let e=[],t=await dpe.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await upe(n));return e}a(oP,"getTableSize");async function aP(){let e={};for(let t in XO){let r=e[t]={},n=r.tables={};for(let s in XO[t])try{let i=XO[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){bc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(aP,"getMetrics");async function bY(){if(xh.get(gf.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await yY.getNATSReferences(),t=await yY.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(bY,"getNatsStreamInfo");async function mpe(e){let t=new fpe;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await iP(),t.time=ZO(),t.cpu=await eP(),t.memory=await tP(),t.disk=await nP(),t.network=await sP(),t.harperdb_processes=await rP(),t.table_size=await oP(),t.metrics=await aP(),t.threads=await RY(),t.replication=await bY(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await iP();break;case"time":t.time=ZO();break;case"cpu":t.cpu=await eP();break;case"memory":t.memory=await tP();break;case"disk":t.disk=await nP();break;case"network":t.network=await sP();break;case"harperdb_processes":t.harperdb_processes=await rP();break;case"table_size":t.table_size=await oP();break;case"database_metrics":case"metrics":t.metrics=await aP();break;case"threads":t.threads=await RY();break;case"replication":t.replication=await bY();break;default:break}return t}a(mpe,"systemInformation")});var Ws=v((dke,CY)=>{"use strict";var ppe=_n(),cP=oe(),hpe=require("util"),eu=(H(),M(W)),IY=ae();IY.initSync();var Epe=dC(),wY=Sn(),{Node:cke,NodeSubscription:lke}=Rc(),_pe=dd(),gpe=mY(),{RemotePayloadObject:Spe,RemotePayloadSubscription:Tpe}=Uh(),{handleHDBError:ype,hdbErrors:Rpe}=_e(),{HTTP_STATUS_CODES:bpe,HDB_ERROR_MSGS:Ape}=Rpe,Ipe=pi(),wpe=Bh(),{packageJson:Npe}=Rt(),{getDatabases:Cpe}=(we(),M(mt)),uke=hpe.promisify(Epe.authorize),Ope=wY.searchByHash,Ppe=wY.searchByValue;CY.exports={isEmpty:Lpe,getNodeRecord:Dpe,upsertNodeRecord:Mpe,buildNodePayloads:vpe,checkClusteringEnabled:Upe,getAllNodeRecords:xpe,getSystemInfo:Bpe,reverseSubscription:NY};function Lpe(e){return e==null}a(Lpe,"isEmpty");async function Dpe(e){let t=new _pe(eu.SYSTEM_SCHEMA_NAME,eu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Ope(t)}a(Dpe,"getNodeRecord");async function Mpe(e){let t=new gpe(eu.SYSTEM_SCHEMA_NAME,eu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return ppe.upsert(t)}a(Mpe,"upsertNodeRecord");function NY(e){if(cP.isEmpty(e.subscribe)||cP.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(NY,"reverseSubscription");function vpe(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:u}=c,d=cP.getTableHashAttribute(l,u),{subscribe:f,publish:m}=NY(c),p=Cpe()[l]?.[u],h=new Tpe(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new Spe(r,t,s,n)}a(vpe,"buildNodePayloads");function Upe(){if(!IY.get(eu.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ype(new Error,Ape.CLUSTERING_NOT_ENABLED,bpe.BAD_REQUEST,void 0,void 0,!0)}a(Upe,"checkClusteringEnabled");async function xpe(){let e=new Ipe(eu.SYSTEM_SCHEMA_NAME,eu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Ppe(e))}a(xpe,"getAllNodeRecords");async function Bpe(){let e=await wpe.getSystemInformation();return{hdb_version:Npe.version,node_version:e.node_version,platform:e.platform}}a(Bpe,"getSystemInfo")});var lP=v((mke,xY)=>{"use strict";var ry=Ht(),OY=oe(),PY=pt(),LY=(H(),M(W)),ny=J(),DY=Mh(),Fpe=md(),{RemotePayloadObject:kpe}=Uh(),{handleHDBError:MY,hdbErrors:Hpe}=_e(),{HTTP_STATUS_CODES:vY}=Hpe,{NodeSubscription:UY}=Rc();xY.exports=qpe;async function qpe(e,t){let r;try{r=await ry.request(`${t}.${PY.REQUEST_SUFFIX}`,new kpe(LY.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),ny.trace("Response from remote describe all request:",r)}catch(o){ny.error(`addNode received error from describe all request to remote node: ${o}`);let c=ry.requestErrorHandler(o,"add_node",t);throw MY(new Error,c,vY.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===PY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw MY(new Error,o,vY.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===LY.SYSTEM_SCHEMA_NAME){await ry.createLocalTableStream(l,c);let h=new UY(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let u=OY.doesSchemaExist(l),d=n[l]!==void 0,f=c?OY.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(o);continue}if(!u&&d&&(ny.trace(`addNode creating schema: ${l}`),await DY.createSchema({operation:"create_schema",schema:l})),!f&&m){ny.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Fpe(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await DY.createTable(h)}await ry.createLocalTableStream(l,c);let p=new UY(l,c,o.publish,o.subscribe);p.start_time=o.start_time,i.push(p)}return{added:i,skipped:s}}a(qpe,"reviewSubscriptions")});var Sf={};ye(Sf,{addNodeBack:()=>uP,removeNodeBack:()=>dP,setNode:()=>Kpe});async function Kpe(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=Ai(t)):t=YT(r);let n=(0,FY.validateBySchema)(e,Vpe);if(n)throw(0,la.handleHDBError)(n,n.message,$pe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new la.ClientError("url or hostname is required for remove_node operation");let p=r,h=qt(),E=await h.get(p);if(!E)throw new la.ClientError(p+" does not exist");try{await Lh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?it():p},void 0)}catch(g){Rs.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new la.ClientError("url required for this operation");let s=mc();if(s==null)throw new la.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,zs.getReplicationCert)();let p=await(0,zs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,zs.createCsr)(),Rs.info("Sending CSR to target node:",t)):p&&(c=p.certificate,Rs.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,Ic.get)(F.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,Ic.get)(F.REPLICATION_SHARD)!==void 0&&(l.shard=(0,Ic.get)(F.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(BY):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=BY(e);l.subscribe=p.subscribe,l.publish=p.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await Lh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,Rs.warn("Error adding node:",t,"to cluster:",p),d=p}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&(Rs.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,zs.setCertTable)({name:Gpe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,zs.setCertTable)({name:it(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let p={url:s,ca:c,replicates:!0,subscriptions:null};(0,Ic.get)(F.REPLICATION_SHARD)!==void 0&&(p.shard=(0,Ic.get)(F.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await ta(it(),p)}await ta(u?u.nodeName:f.name??Ai(t),f);let m;return e.operation==="update_node"?m=`Successfully updated '${t}'`:m=`Successfully added '${t}' to cluster`,d&&(m+=" but there was an error updating target node: "+d.message),m}async function uP(e){Rs.trace("addNodeBack received request:",e);let t=await(0,zs.signCertificate)(e),r;e.csr?(r=t.signingCA,Rs.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,Rs.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,zs.getReplicationCertAuth)();if(n.replicates){let i={url:mc(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,Ic.get)(F.REPLICATION_SHARD)!==void 0&&(i.shard=(0,Ic.get)(F.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await ta(it(),i)}return await ta(e.hostname,n),t.nodeName=it(),t.usingCA=s?.certificate,Rs.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function dP(e){Rs.trace("removeNodeBack received request:",e),await qt().delete(e.name)}function BY(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var zs,FY,Ac,Ic,Rs,la,Gpe,$pe,Vpe,Tf=ne(()=>{zs=b(ys()),FY=b(ot()),Ac=b(require("joi")),Ic=b(ae());H();Rh();tf();Ss();Rs=b(J()),la=b(_e()),{pki:Gpe}=require("node-forge"),{HTTP_STATUS_CODES:$pe}=la.hdbErrors,Vpe=Ac.default.object({hostname:Ac.default.string(),verify_tls:Ac.default.boolean(),replicates:Ac.default.boolean(),subscriptions:Ac.default.array(),revoked_certificates:Ac.default.array(),shard:Ac.default.number()});a(Kpe,"setNode");a(uP,"addNodeBack");a(dP,"removeNodeBack");a(BY,"reverseSubscription")});var cy=v((Rke,HY)=>{"use strict";var{handleHDBError:sy,hdbErrors:Ype}=_e(),{HTTP_STATUS_CODES:iy}=Ype,{addUpdateNodeValidator:Wpe}=ey(),oy=J(),ay=(H(),M(W)),kY=pt(),zpe=oe(),Fh=Ht(),kh=Ws(),fP=ae(),jpe=lP(),{Node:Qpe,NodeSubscription:Jpe}=Rc(),{broadcast:Xpe}=tt(),{setNode:Zpe}=(Tf(),M(Sf)),Tke=ae(),yke=(H(),M(W)),ehe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",the="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",rhe=fP.get(ay.CONFIG_PARAMS.CLUSTERING_NODENAME);HY.exports=nhe;async function nhe(e,t=!1){if(oy.trace("addNode called with:",e),fP.get(ay.CONFIG_PARAMS.REPLICATION_URL)||fP.get(ay.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Zpe(e);kh.checkClusteringEnabled();let r=Wpe(e);if(r)throw sy(r,r.message,iy.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await kh.getNodeRecord(n);if(!zpe.isEmptyOrZeroLength(f))throw sy(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,iy.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await jpe(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=ehe,o;let c=kh.buildNodePayloads(s,rhe,ay.OPERATIONS_ENUM.ADD_NODE,await kh.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let p=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new Jpe(p.schema,p.table,p.publish,p.subscribe))}oy.trace("addNode sending remote payload:",c);let u;try{u=await Fh.request(`${n}.${kY.REQUEST_SUFFIX}`,c)}catch(f){oy.error(`addNode received error from request: ${f}`);for(let p=0,h=s.length;p<h;p++){let E=s[p];E.publish=!1,E.subscribe=!1,await Fh.updateRemoteConsumer(E,n)}let m=Fh.requestErrorHandler(f,"add_node",n);throw sy(new Error,m,iy.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===kY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw sy(new Error,f,iy.INTERNAL_SERVER_ERROR,"error",f)}oy.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await Fh.updateRemoteConsumer(p,n),p.subscribe===!0&&await Fh.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new Qpe(n,l,u.system_info);return await kh.upsertNodeRecord(d),Xpe({type:"nats_update"}),i.length>0?o.message=the:o.message=`Successfully added '${n}' to manifest`,o}a(nhe,"addNode")});var EP=v((Ike,GY)=>{"use strict";var{handleHDBError:mP,hdbErrors:she}=_e(),{HTTP_STATUS_CODES:pP}=she,{addUpdateNodeValidator:ihe}=ey(),Hh=J(),ly=(H(),M(W)),qY=pt(),Ake=oe(),qh=Ht(),Gh=Ws(),hP=ae(),{cloneDeep:ohe}=require("lodash"),ahe=lP(),{Node:che,NodeSubscription:lhe}=Rc(),{broadcast:uhe}=tt(),{setNode:dhe}=(Tf(),M(Sf)),fhe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",mhe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",phe=hP.get(ly.CONFIG_PARAMS.CLUSTERING_NODENAME);GY.exports=hhe;async function hhe(e){if(Hh.trace("updateNode called with:",e),hP.get(ly.CONFIG_PARAMS.REPLICATION_URL)??hP.get(ly.CONFIG_PARAMS.REPLICATION_HOSTNAME))return dhe(e);Gh.checkClusteringEnabled();let t=ihe(e);if(t)throw mP(t,t.message,pP.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Gh.getNodeRecord(r);s.length>0&&(n=ohe(s));let{added:i,skipped:o}=await ahe(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=fhe,c;let l=Gh.buildNodePayloads(i,phe,ly.OPERATIONS_ENUM.UPDATE_NODE,await Gh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];Hh.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}Hh.trace("updateNode sending remote payload:",l);let u;try{u=await qh.request(`${r}.${qY.REQUEST_SUFFIX}`,l)}catch(d){Hh.error(`updateNode received error from request: ${d}`);let f=qh.requestErrorHandler(d,"update_node",r);throw mP(new Error,f,pP.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===qY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw mP(new Error,d,pP.INTERNAL_SERVER_ERROR,"error",d)}Hh.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await qh.updateRemoteConsumer(m,r),m.subscribe===!0?await qh.updateConsumerIterator(m.schema,m.table,r,"start"):await qh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new che(r,[],u.system_info)]),await Ehe(n[0],i,u.system_info),o.length>0?c.message=mhe:c.message=`Successfully updated '${r}'`,c}a(hhe,"updateNode");async function Ehe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===o.schema&&d.table===o.table){d.publish=o.publish,d.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new lhe(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Gh.upsertNodeRecord(n),uhe({type:"nats_update"})}a(Ehe,"updateNodeTable")});var WY=v((Nke,YY)=>{"use strict";var KY=require("joi"),{string:$Y}=KY.types(),_he=ot(),VY=(H(),M(W)),ghe=ae(),She=pt();YY.exports=The;function The(e){let t=$Y.invalid(ghe.get(VY.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(She.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=KY.object({operation:$Y.valid(VY.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return _he.validateBySchema(e,r)}a(The,"removeNodeValidator")});var uy=v((Oke,XY)=>{"use strict";var{handleHDBError:zY,hdbErrors:yhe}=_e(),{HTTP_STATUS_CODES:jY}=yhe,Rhe=WY(),$h=J(),QY=Ws(),bhe=oe(),yf=(H(),M(W)),JY=pt(),_P=Ht(),gP=ae(),{RemotePayloadObject:Ahe}=Uh(),{NodeSubscription:Ihe}=Rc(),whe=fd(),Nhe=rc(),{broadcast:Che}=tt(),{setNode:Ohe}=(Tf(),M(Sf)),Phe=gP.get(yf.CONFIG_PARAMS.CLUSTERING_NODENAME);XY.exports=Lhe;async function Lhe(e){if($h.trace("removeNode called with:",e),gP.get(yf.CONFIG_PARAMS.REPLICATION_URL)??gP.get(yf.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Ohe(e);QY.checkClusteringEnabled();let t=Rhe(e);if(t)throw zY(t,t.message,jY.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await QY.getNodeRecord(r);if(bhe.isEmptyOrZeroLength(n))throw zY(new Error,`Node '${r}' was not found.`,jY.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Ahe(yf.OPERATIONS_ENUM.REMOVE_NODE,Phe,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await _P.updateConsumerIterator(d.schema,d.table,r,"stop");try{await _P.updateRemoteConsumer(new Ihe(d.schema,d.table,!1,!1),r)}catch(f){$h.error(f)}}try{i=await _P.request(`${r}.${JY.REQUEST_SUFFIX}`,s),$h.trace("Remove node reply from remote node:",r,i)}catch(l){$h.error("removeNode received error from request:",l),o=!0}let c=new whe(yf.SYSTEM_SCHEMA_NAME,yf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Nhe.deleteRecord(c),Che({type:"nats_update"}),i?.status===JY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?($h.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(Lhe,"removeNode")});var tW=v((Lke,eW)=>{"use strict";var ZY=require("joi"),{string:Dhe,array:Mhe}=ZY.types(),vhe=ot(),Uhe=ey();eW.exports=xhe;function xhe(e){let t=ZY.object({operation:Dhe.valid("configure_cluster").required(),connections:Mhe.items(Uhe.validationSchema).required()});return vhe.validateBySchema(e,t)}a(xhe,"configureClusterValidator")});var SP=v((Mke,oW)=>{"use strict";var rW=(H(),M(W)),dy=J(),Bhe=oe(),Fhe=ae(),khe=uy(),Hhe=cy(),qhe=Ws(),Ghe=tW(),{handleHDBError:nW,hdbErrors:$he}=_e(),{HTTP_STATUS_CODES:sW}=$he,Vhe="Configure cluster complete.",Khe="Failed to configure the cluster. Check the logs for more details.",Yhe="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";oW.exports=Whe;async function Whe(e){dy.trace("configure cluster called with:",e);let t=Ghe(e);if(t)throw nW(t,t.message,sW.BAD_REQUEST,void 0,void 0,!0);let r=await qhe.getAllNodeRecords(),n=[];if(Fhe.get(rW.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await iW(khe,{operation:rW.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}dy.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let f=e.connections[d],m=await iW(Hhe,f,f.node_name);s.push(m)}dy.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(dy.error(m.node_name,m?.error?.message,m?.error?.stack),o.includes(m.node_name)||o.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(Bhe.isEmptyOrZeroLength(o))return{message:Vhe,connections:c};if(l)return{message:Yhe,failed_nodes:o,connections:c};throw nW(new Error,Khe,sW.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Whe,"configureCluster");async function iW(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(iW,"functionWrapper")});var uW=v((Uke,lW)=>{"use strict";var Vh=require("joi"),zhe=ot(),{validateSchemaExists:aW,validateTableExists:jhe,validateSchemaName:cW}=Xi(),Qhe=Vh.object({operation:Vh.string().valid("purge_stream"),schema:Vh.string().custom(aW).custom(cW).optional(),database:Vh.string().custom(aW).custom(cW).optional(),table:Vh.string().custom(jhe).required()});function Jhe(e){return zhe.validateBySchema(e,Qhe)}a(Jhe,"purgeStreamValidator");lW.exports=Jhe});var TP=v((Bke,dW)=>{"use strict";var{handleHDBError:Xhe,hdbErrors:Zhe}=_e(),{HTTP_STATUS_CODES:eEe}=Zhe,tEe=uW(),rEe=Ht(),nEe=Ws();dW.exports=sEe;async function sEe(e){e.schema=e.schema??e.database;let t=tEe(e);if(t)throw Xhe(t,t.message,eEe.BAD_REQUEST,void 0,void 0,!0);nEe.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await rEe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(sEe,"purgeStream")});var bP=v((kke,SW)=>{"use strict";var RP=Ws(),iEe=Ht(),my=ae(),Rf=(H(),M(W)),tu=pt(),oEe=oe(),yP=J(),{RemotePayloadObject:aEe}=Uh(),{ErrorCode:fW}=require("nats"),{parentPort:mW}=require("worker_threads"),{onMessageByType:cEe}=tt(),{getThisNodeName:lEe}=(Ss(),M(na)),{requestClusterStatus:uEe}=(Rh(),M(i1)),{getReplicationSharedStatus:dEe,getHDBNodeTable:fEe}=(tf(),M(XV)),{CONFIRMATION_STATUS_POSITION:mEe,RECEIVED_VERSION_POSITION:pW,RECEIVED_TIME_POSITION:pEe,SENDING_TIME_POSITION:hEe,RECEIVING_STATUS_POSITION:EEe,RECEIVING_STATUS_RECEIVING:_Ee,BACK_PRESSURE_RATIO_POSITION:gEe}=(hO(),M(Q1)),hW=my.get(Rf.CONFIG_PARAMS.CLUSTERING_ENABLED),EW=my.get(Rf.CONFIG_PARAMS.CLUSTERING_NODENAME);SW.exports={clusterStatus:SEe,buildNodeStatus:gW};var _W;cEe("cluster-status",async e=>{_W(e)});async function SEe(){if(my.get(Rf.CONFIG_PARAMS.REPLICATION_URL)||my.get(Rf.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;mW?(mW.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{_W=i})):n=uEe();for(let i of n.connections){let o=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=dEe(u,l,o);c.lastCommitConfirmed=fy(d[mEe]),c.lastReceivedRemoteTime=fy(d[pW]),c.lastReceivedLocalTime=fy(d[pEe]),c.lastReceivedVersion=d[pW],c.sendingMessage=fy(d[hEe]),c.backPressurePercent=d[gEe]*100,c.lastReceivedStatus=d[EEe]===_Ee?"Receiving":"Waiting"}}n.node_name=lEe();let s=fEe().primaryStore.get(n.node_name);return s?.shard&&(n.shard=s.shard),s?.url&&(n.url=s.url),n.is_enabled=!0,n}let e={node_name:EW,is_enabled:hW,connections:[]};if(!hW)return e;let t=await RP.getAllNodeRecords();if(oEe.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(gW(t[n],e.connections));return await Promise.allSettled(r),e}a(SEe,"clusterStatus");function fy(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(fy,"asDate");async function gW(e,t){let r=e.name,n=new aEe(Rf.OPERATIONS_ENUM.CLUSTER_STATUS,EW,void 0,await RP.getSystemInfo()),s,i,o=tu.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await iEe.request(tu.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===tu.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=tu.CLUSTER_STATUS_STATUSES.CLOSED,yP.error(`Error getting node status from ${r} `,s))}catch(l){yP.warn(`Error getting node status from ${r}`,l),l.code===fW.NoResponders?o=tu.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===fW.Timeout?o=tu.CLUSTER_STATUS_STATUSES.TIMEOUT:o=tu.CLUSTER_STATUS_STATUSES.CLOSED}let c=new TEe(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Rf.PRE_4_0_0_VERSION&&await RP.upsertNodeRecord(l)}catch(l){yP.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(gW,"buildNodeStatus");function TEe(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(TEe,"NodeStatusObject")});var IP=v((qke,TW)=>{"use strict";var{handleHDBError:yEe,hdbErrors:REe}=_e(),{HTTP_STATUS_CODES:bEe}=REe,AEe=Ht(),IEe=Ws(),AP=oe(),py=require("joi"),wEe=ot(),NEe=2e3,CEe=py.object({timeout:py.number().min(1),connected_nodes:py.boolean(),routes:py.boolean()});TW.exports=OEe;async function OEe(e){IEe.checkClusteringEnabled();let t=wEe.validateBySchema(e,CEe);if(t)throw yEe(t,t.message,bEe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||AP.autoCastBoolean(n),o=s===void 0||AP.autoCastBoolean(s),c={nodes:[]},l=await AEe.getServerList(r??NEe),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,p=l[d].data;if(m.name.endsWith("-hub")){let h={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[m.name]&&u[m.name].forEach(E=>{h.connected_nodes.includes(E.name.slice(0,-4))||h.connected_nodes.push(E.name.slice(0,-4))})),o&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:AP.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(OEe,"clusterNetwork")});var AW=v(($ke,bW)=>{"use strict";var wP=require("joi"),yW=ot(),{routeConstraints:RW}=nN();bW.exports={setRoutesValidator:PEe,deleteRoutesValidator:LEe};function PEe(e){let t=wP.object({server:wP.valid("hub","leaf"),routes:RW.required()});return yW.validateBySchema(e,t)}a(PEe,"setRoutesValidator");function LEe(e){let t=wP.object({routes:RW.required()});return yW.validateBySchema(e,t)}a(LEe,"deleteRoutesValidator")});var hy=v((Kke,LW)=>{"use strict";var ua=St(),NP=oe(),js=(H(),M(W)),bf=ae(),IW=AW(),{handleHDBError:wW,hdbErrors:DEe}=_e(),{HTTP_STATUS_CODES:NW}=DEe,CW="cluster routes successfully set",OW="cluster routes successfully deleted";LW.exports={setRoutes:vEe,getRoutes:UEe,deleteRoutes:xEe};function MEe(e){let t=ua.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let o=0,c=e.routes.length;o<c;o++){let l=e.routes[o];l.port=NP.autoCast(l.port);let u=r.some(f=>f.host===l.host&&f.port===l.port),d=n.some(f=>f.host===l.host&&f.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?ua.updateConfigValue(js.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):ua.updateConfigValue(js.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:CW,set:i,skipped:s}}a(MEe,"setRoutesNats");function vEe(e){let t=IW.setRoutesValidator(e);if(t)throw wW(t,t.message,NW.BAD_REQUEST,void 0,void 0,!0);if(bf.get(js.CONFIG_PARAMS.CLUSTERING_ENABLED))return MEe(e);let r=[],n=[],s=bf.get(js.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{PW(s,i)?n.push(i):(s.push(i),r.push(i))}),ua.updateConfigValue(js.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:CW,set:r,skipped:n}}a(vEe,"setRoutes");function PW(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}a(PW,"existsInArray");function UEe(){if(bf.get(js.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=ua.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return bf.get(js.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(UEe,"getRoutes");function xEe(e){let t=IW.deleteRoutesValidator(e);if(t)throw wW(t,t.message,NW.BAD_REQUEST,void 0,void 0,!0);if(bf.get(js.CONFIG_PARAMS.CLUSTERING_ENABLED))return BEe(e);let r=[],n=[],s=bf.get(js.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{PW(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),ua.updateConfigValue(js.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:OW,deleted:r,skipped:n}}a(xEe,"deleteRoutes");function BEe(e){let t=ua.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],o=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,p=r.length;m<p;m++){let h=r[m];if(d.host===h.host&&d.port===h.port){r.splice(m,1),f=!0,o=!0,s.push(d);break}}if(!f){let m=!0;for(let p=0,h=n.length;p<h;p++){let E=n[p];if(d.host===E.host&&d.port===E.port){n.splice(p,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return o&&(r=NP.isEmptyOrZeroLength(r)?null:r,ua.updateConfigValue(js.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=NP.isEmptyOrZeroLength(n)?null:n,ua.updateConfigValue(js.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:OW,deleted:s,skipped:i}}a(BEe,"deleteRoutesNats")});var MW=v((Wke,DW)=>{"use strict";var FEe=pt(),CP=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,f,m,p,h){this.port=t,o===null&&(o=void 0),this.server_name=r+FEe.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:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};DW.exports=CP});var xW=v((jke,UW)=>{"use strict";var vW=pt(),OP=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+vW.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+vW.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};UW.exports=OP});var FW=v((Jke,BW)=>{"use strict";var PP=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};BW.exports=PP});var HW=v((Zke,kW)=>{"use strict";var kEe=pt(),LP=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+kEe.SERVER_SUFFIX.ADMIN,this.password=r}};kW.exports=LP});var Sy=v((tHe,$W)=>{"use strict";var ru=require("path"),nu=require("fs-extra"),HEe=MW(),qEe=xW(),GEe=FW(),$Ee=HW(),DP=Es(),If=oe(),zn=St(),_y=(H(),M(W)),Kh=pt(),{CONFIG_PARAMS:or}=_y,wf=J(),Yh=ae(),qW=so(),MP=Ht(),VEe=ys(),Af="clustering",KEe=1e4,GW=50;$W.exports={generateNatsConfig:WEe,removeNatsConfig:zEe,getHubConfigPath:YEe};function YEe(){let e=Yh.get(or.ROOTPATH);return ru.join(e,Af,Kh.NATS_CONFIG_FILES.HUB_SERVER)}a(YEe,"getHubConfigPath");async function WEe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Yh.get(or.ROOTPATH);nu.ensureDirSync(ru.join(r,"clustering","leaf")),Yh.initSync();let n=zn.getConfigFromFile(or.CLUSTERING_TLS_CERT_AUTH),s=zn.getConfigFromFile(or.CLUSTERING_TLS_PRIVATEKEY),i=zn.getConfigFromFile(or.CLUSTERING_TLS_CERTIFICATE);!await nu.exists(i)&&!await nu.exists(!n)&&await VEe.createNatsCerts();let o=ru.join(r,Af,Kh.PID_FILES.HUB),c=ru.join(r,Af,Kh.PID_FILES.LEAF),l=zn.getConfigFromFile(or.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=ru.join(r,Af,Kh.NATS_CONFIG_FILES.HUB_SERVER),d=ru.join(r,Af,Kh.NATS_CONFIG_FILES.LEAF_SERVER),f=zn.getConfigFromFile(or.CLUSTERING_TLS_INSECURE),m=zn.getConfigFromFile(or.CLUSTERING_TLS_VERIFY),p=zn.getConfigFromFile(or.CLUSTERING_NODENAME),h=zn.getConfigFromFile(or.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await MP.checkNATSServerInstalled()||gy("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await DP.listUsers(),g=zn.getConfigFromFile(or.CLUSTERING_USER),R=await DP.getClusterUser();(If.isEmpty(R)||R.active!==!0)&&gy(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Ey(or.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Ey(or.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Ey(or.CLUSTERING_HUBSERVER_NETWORK_PORT),await Ey(or.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[j,Y]of E.entries())Y.role?.role===_y.ROLE_TYPES_ENUM.CLUSTER_USER&&Y.active&&(S.push(new $Ee(Y.username,qW.decrypt(Y.hash))),y.push(new GEe(Y.username,qW.decrypt(Y.hash))));let N=[],{hub_routes:I}=zn.getClusteringRoutes();if(!If.isEmptyOrZeroLength(I))for(let j of I)N.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${j.host}:${j.port}`);let $=new HEe(zn.getConfigFromFile(or.CLUSTERING_HUBSERVER_NETWORK_PORT),p,o,i,s,n,f,m,h,zn.getConfigFromFile(or.CLUSTERING_HUBSERVER_CLUSTER_NAME),zn.getConfigFromFile(or.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,S,y);n==null&&(delete $.tls.ca_file,delete $.leafnodes.tls.ca_file),t=If.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===_y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await nu.writeJson(u,$),wf.trace(`Hub server config written to ${u}`));let ee=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,q=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,k=new qEe(zn.getConfigFromFile(or.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[ee],[q],S,y,i,s,n,f);n==null&&delete k.tls.ca_file,(t===void 0||t===_y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await nu.writeJson(d,k),wf.trace(`Leaf server config written to ${d}`))}a(WEe,"generateNatsConfig");async function Ey(e){let t=Yh.get(e);return If.isEmpty(t)&&gy(`port undefined for '${e}'`),await If.isPortTaken(t)&&gy(`'${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(Ey,"isPortAvailable");function gy(e){let t=`Error generating clustering config: ${e}`;wf.error(t),console.error(t),process.exit(1)}a(gy,"generateNatsConfigError");async function zEe(e){let{port:t,config_file:r}=MP.getServerConfig(e),{username:n,decrypt_hash:s}=await DP.getClusterUser(),i=0,o=2e3;for(;i<GW;){try{let d=await MP.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){wf.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=GW)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 u=o*(i*2);u>3e4&&wf.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await If.asyncSetTimeout(u)}let c="0".repeat(KEe),l=ru.join(Yh.get(or.ROOTPATH),Af,r);await nu.writeFile(l,c),await nu.remove(l),wf.notify(e,"started.")}a(zEe,"removeNatsConfig")});var jW=v((nHe,zW)=>{"use strict";var bs=ae(),et=(H(),M(W)),Wh=pt(),da=require("path"),{PACKAGE_ROOT:yy}=Rt(),VW=ae(),Ty=oe(),Nf="/dev/null",jEe=da.join(yy,"launchServiceScripts"),KW=da.join(yy,"utility/scripts"),QEe=da.join(KW,et.HDB_RESTART_SCRIPT),YW=da.resolve(yy,"dependencies",`${process.platform}-${process.arch}`,Wh.NATS_BINARY_NAME);function WW(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return Ty.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Ty.getEnvCliRootPath()),{name:et.PROCESS_DESCRIPTORS.HDB,script:et.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:yy}}a(WW,"generateMainServerConfig");var JEe=9930;function XEe(){bs.initSync(!0);let e=bs.get(et.CONFIG_PARAMS.ROOTPATH),t=da.join(e,"clustering",Wh.NATS_CONFIG_FILES.HUB_SERVER),r=da.join(bs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=VW.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Wh.LOG_LEVEL_FLAGS[bs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==JEe?"-"+n:""),binFile:YW,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Nf,i.error_file=Nf),i}a(XEe,"generateNatsHubServerConfig");var ZEe=9940;function e_e(){bs.initSync(!0);let e=bs.get(et.CONFIG_PARAMS.ROOTPATH),t=da.join(e,"clustering",Wh.NATS_CONFIG_FILES.LEAF_SERVER),r=da.join(bs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=VW.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Wh.LOG_LEVEL_FLAGS[bs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==ZEe?"-"+n:""),binFile:YW,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Nf,i.error_file=Nf),i}a(e_e,"generateNatsLeafServerConfig");function t_e(){bs.initSync();let e=da.join(bs.get(et.CONFIG_PARAMS.LOGGING_ROOT),et.LOG_NAMES.HDB),t={name:et.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,binFile:et.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:jEe,autorestart:!1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Nf,t.error_file=Nf),t}a(t_e,"generateClusteringUpgradeV4ServiceConfig");function r_e(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.RESTART_HDB};return Ty.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Ty.getEnvCliRootPath()),{...{name:et.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:KW},script:QEe}}a(r_e,"generateRestart");function n_e(){return{apps:[WW()]}}a(n_e,"generateAllServiceConfigs");zW.exports={generateAllServiceConfigs:n_e,generateMainServerConfig:WW,generateRestart:r_e,generateNatsHubServerConfig:XEe,generateNatsLeafServerConfig:e_e,generateClusteringUpgradeV4ServiceConfig:t_e}});var Cf=v((oHe,rz)=>{"use strict";var Lr=(H(),M(W)),iHe=oe(),ma=Sy(),Ry=Ht(),fa=pt(),wc=jW(),UP=ae(),Nc=J(),s_e=Ws(),{startWorker:QW,onMessageFromWorkers:i_e}=tt(),JW=require("fs"),o_e=require("node:path"),a_e=(H(),M(W)),{setTimeout:c_e}=require("node:timers/promises"),{execFile:l_e,fork:u_e}=require("node:child_process");rz.exports={start:Cc,restart:f_e,kill:E_e,startAllServices:__e,startService:ZW,restartHdb:m_e,startClusteringProcesses:ez,startClusteringThreads:tz,isHdbRestartRunning:p_e,getHdbPid:h_e,cleanupChildrenProcesses:zh,reloadClustering:S_e,expectedRestartOfChildren:XW};i_e(e=>{e.type==="restart"&&UP.initSync(!0)});var go=[],d_e=10,vP;function Cc(e,t=!1){let r=typeof e.args=="string"?e.args.split(" "):e.args;e.silent=!0,e.detached=!0;let n=e.script?u_e(e.script,r,e):l_e(e.binFile,r,e);n.name=e.name,n.config=e,n.on("error",(o,c)=>{console.error(o,c)}),n.on("exit",async o=>{let c=go.indexOf(n);c>-1&&go.splice(c,1),!vP&&o!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<d_e&&(JW.existsSync(ma.getHubConfigPath())?Cc(e):(await ma.generateNatsConfig(!0),Cc(e),await new Promise(l=>setTimeout(l,3e3)),await ma.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ma.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(o){let c=UP.get(Lr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(o);){if(u.index&&fa.LOG_LEVEL_HIERARCHY[c]>=fa.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===fa.LOG_LEVELS.ERR||f===fa.LOG_LEVELS.WRN?Nc.OUTPUTS.STDERR:Nc.OUTPUTS.STDOUT;Nc.logCustomLevel(f||"info",h,s,o.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=fa.LOG_LEVELS[p]}if(fa.LOG_LEVEL_HIERARCHY[c]>=fa.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===fa.LOG_LEVELS.ERR||f===fa.LOG_LEVELS.WRN?Nc.OUTPUTS.STDERR:Nc.OUTPUTS.STDOUT;Nc.logCustomLevel(f||"info",m,s,o.toString().slice(d).trim())}}a(i,"extractMessages"),n.stdout.on("data",i),n.stderr.on("data",i),n.unref(),go.length===0&&(t||(process.on("exit",zh),process.on("SIGINT",zh),process.on("SIGQUIT",zh),process.on("SIGTERM",zh))),go.push(n)}a(Cc,"start");function zh(e=!0){if(!vP&&(vP=!0,go.length!==0))if(Nc.info("Killing child processes..."),go.map(t=>t.kill()),e)process.exit(0);else return c_e(2e3)}a(zh,"cleanupChildrenProcesses");function f_e(e){XW();for(let t of go)t.name===e&&t.kill()}a(f_e,"restart");function XW(){for(let e of go)e.config&&(e.config.restarts=0)}a(XW,"expectedRestartOfChildren");async function m_e(){await Cc(wc.generateRestart())}a(m_e,"restartHdb");async function p_e(){let e=await list();for(let t in e)if(e[t].name===Lr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(p_e,"isHdbRestartRunning");function h_e(){let e=UP.getHdbBasePath();if(!e)return;let t=o_e.join(e,a_e.HDB_PID_FILE),r=T_e(t);if(!(!r||r===process.pid)&&y_e(r))return r}a(h_e,"getHdbPid");function E_e(){for(let e of go)e.kill();go=[]}a(E_e,"kill");async function __e(){await ez(),await tz(),await Cc(wc.generateAllServiceConfigs())}a(__e,"startAllServices");async function ZW(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Lr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=wc.generateMainServerConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=wc.generateNatsIngestServiceConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=wc.generateNatsReplyServiceConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=wc.generateNatsHubServerConfig(),await Cc(r,t),await ma.removeNatsConfig(e);return;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=wc.generateNatsLeafServerConfig(),await Cc(r,t),await ma.removeNatsConfig(e);return;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=wc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}Cc(r,t)}a(ZW,"startService");var g_e;async function ez(e=!1){for(let t in Lr.CLUSTERING_PROCESSES){let r=Lr.CLUSTERING_PROCESSES[t];await ZW(r,e)}}a(ez,"startClusteringProcesses");async function tz(){g_e=QW(Lr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Lr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Ry.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Ry.updateLocalStreams();let e=await s_e.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Lr.PRE_4_0_0_VERSION){Nc.info("Starting clustering upgrade 4.0.0 process"),QW(Lr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(tz,"startClusteringThreads");async function S_e(){await ma.generateNatsConfig(!0),await Ry.reloadNATSHub(),await Ry.reloadNATSLeaf(),await ma.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ma.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(S_e,"reloadClustering");function T_e(e){try{return Number.parseInt(JW.readFileSync(e,"utf8"),10)}catch{return null}}a(T_e,"readPidFile");function y_e(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}a(y_e,"isProcessRunning")});var FP={};ye(FP,{compactOnStart:()=>R_e,copyDb:()=>cz});async function R_e(){Oc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,xP.get)(F.ROOTPATH),t=new Map,r=lt();(0,BP.updateConfigValue)(F.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,by.join)(e,"backup",n+".mdb"),o=(0,by.join)(e,Zc,n+"-copy.mdb"),c=0;try{c=await nz(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Oc.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:o,backupDest:i,recordCount:c}),await cz(n,o),console.log("Backing up",n,"to",i);try{await(0,su.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{vd()}catch(n){Oc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{dbPath:s,copyDest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,su.move)(i,s,{overwrite:!0}),await(0,su.remove)((0,by.join)(e,Zc,`${n}-copy.mdb-lock`));try{vd()}catch(n){Oc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Oc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,BP.updateConfigValue)(F.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,su.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw vd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let o=!0,c=await nz(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
17
|
+
`,"")}a(UV,"runCommand");async function wde(){try{await rde.access(UC)}catch{return!1}let e=await UV(`${UC} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return nde.eq(t,Ade)}a(wde,"checkNATSServerInstalled");async function HC(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await MV.getClusterUser();if(Kl(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Ri.trace("create nats connection called");let i=await hde({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Yr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Yr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Yr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ri.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Ri.error("Error with Nats client connection, connection closed",o),i===In&&xV()}),i}a(HC,"createConnection");function xV(){In=void 0,Gl=void 0,$l=void 0,Vl=void 0}a(xV,"clearClientCache");async function Nde(){In&&(await In.drain(),In=void 0,Gl=void 0,$l=void 0,Vl=void 0)}a(Nde,"closeConnection");var In,Vl;async function ph(){return Vl||(Vl=HC(Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),In=await Vl),In||Vl}a(ph,"getConnection");async function hh(){if(Gl)return Gl;Kl(In)&&await ph();let{domain:e}=jd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Kl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Gl=await In.jetstreamManager({domain:e,timeout:6e4}),Gl}a(hh,"getJetStreamManager");async function BV(){if($l)return $l;Kl(In)&&await ph();let{domain:e}=jd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Kl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return $l=In.jetstream({domain:e,timeout:6e4}),$l}a(BV,"getJetStream");async function mo(){let e=In||await ph(),t=Gl||await hh(),r=$l||await BV();return{connection:e,jsm:t,js:r}}a(mo,"getNATSReferences");async function Cde(e){let t=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await MV.getClusterUser(),s=await HC(t,r,n),i=kC(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let f=vV.decode(d.data);f.response_time=Date.now()-l,c.push(f)}})();return l=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 mT.asyncSetTimeout(e),await o.drain(),await s.close(),await u,c}a(Cde,"getServerList");async function qC(e,t){let{jsm:r}=await mo(),n=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Ede.File,retention:_de.Limits,subjects:t,discard:gde.Old,maxMsgs:s,maxBytes:i,maxAge:n})}a(qC,"createLocalStream");async function FV(){let{jsm:e}=await mo(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(FV,"listStreams");async function Ode(e){let{jsm:t}=await mo();await t.streams.delete(e)}a(Ode,"deleteLocalStream");async function Pde(e){let{connection:t}=await mo(),r=[],n=kC(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(vV.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(Pde,"listRemoteStreams");async function Lde(e,t=void 0,r=void 0){let{jsm:n,js:s}=await mo(),i=OV(),o={durable_name:i,ack_policy:BC.Explicit};t&&(o.deliver_policy=FC.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=xC(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(on.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(Lde,"viewStream");async function*Dde(e,t=void 0,r=void 0){let{jsm:n,js:s}=await mo(),i=OV(),o={durable_name:i,ack_policy:BC.Explicit};t&&(o.deliver_policy=FC.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=xC(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(on.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}a(Dde,"viewStreamIterator");async function Mde(e,t,r,n){Ri.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=kV(n,r);let{js:s}=await mo(),i=await hT(),o=`${e}.${i}`,c=await Rde(()=>n instanceof Uint8Array?n:DV.encode(n));try{Ri.trace(`publishToStream publishing to subject: ${o}`),yde(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return qV(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Ri.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await qC(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(Mde,"publishToStream");function kV(e,t){t===void 0&&(t=Tde());let r=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(on.MSG_HEADERS.ORIGIN)&&r&&t.append(on.MSG_HEADERS.ORIGIN,r),t}a(kV,"addNatsMsgHeader");function jd(e){e=e.toLowerCase();let t=mh.join(Yr.get(rt.CONFIG_PARAMS.ROOTPATH),bde);if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Kl(vC)&&(vC={port:dh.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:dh.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.HUB,config_file:on.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:mh.join(t,on.PID_FILES.HUB),hdbNatsPath:t}),vC;if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Kl(MC)&&(MC={port:dh.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:dh.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.LEAF,config_file:on.NATS_CONFIG_FILES.LEAF_SERVER,domain:dh.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.LEAF,pid_file_path:mh.join(t,on.PID_FILES.LEAF),hdbNatsPath:t}),MC;Ri.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(jd,"getServerConfig");async function HV(e,t,r,n){try{await e.consumers.add(t,{ack_policy:BC.Explicit,durable_name:r,deliver_policy:FC.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(HV,"createConsumer");async function vde(e,t,r){await e.consumers.delete(t,r)}a(vde,"removeConsumer");function Ude(e){return e.split(".")[1]}a(Ude,"extractServerName");async function xde(e,t,r=6e4,n=kC()){if(!mT.isObject(t))throw new Error("data param must be an object");let s=DV.encode(t),{connection:i}=await mo(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return xC(c.data)}a(xde,"request");function GC(e){return new Promise(async(t,r)=>{let n=ade(UC,["--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(GC,"reloadNATS");async function Bde(){let{pid_file_path:e}=jd(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await GC(e)}a(Bde,"reloadNATSHub");async function Fde(){let{pid_file_path:e}=jd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await GC(e)}a(Fde,"reloadNATSLeaf");function kde(e,t,r){let n;switch(e.code){case CV.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case CV.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(kde,"requestErrorHandler");async function Hde(e,t){let r=t+on.SERVER_SUFFIX.LEAF,{connection:n}=await mo(),{jsm:s}=await zde(r),{schema:i,table:o}=e,c=pT.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await qV(async()=>{if(e.subscribe===!0)await HV(s,c,n.info.server_name,l);else try{await vde(s,c,n.info.server_name)}catch(u){Ri.trace(u)}})}a(Hde,"updateRemoteConsumer");async function qde(e,t,r,n){let s=pT.createNatsTableStreamName(e,t),i=r+on.SERVER_SUFFIX.LEAF,o={type:rt.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!LV&&mde()<Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=DC();await c(o)}await dde(o),n==="stop"&&await mT.asyncSetTimeout(1e3)}a(qde,"updateConsumerIterator");function qV(e){return ude.writeTransaction(rt.SYSTEM_SCHEMA_NAME,rt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(qV,"exclusiveLock");async function GV(e,t){let r=pT.createNatsTableStreamName(e,t),n=await hT(),s=Kde(e,t,n);await qC(r,[s])}a(GV,"createLocalTableStream");async function Gde(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await GV(n,s)}}a(Gde,"createTableStreams");async function $V(e,t,r=void 0){if(Yr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=pT.createNatsTableStreamName(e,t),{domain:s}=jd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await ph()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Ri.warn(n);else throw n}}a($V,"purgeTableStream");async function $de(e,t){if(Yr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await $V(e,t[r])}a($de,"purgeSchemaTableStreams");async function Vde(e){return(await hh()).streams.info(e)}a(Vde,"getStreamInfo");function Kde(e,t,r){return`${on.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Kde,"createSubjectName");async function hT(){if(fh)return fh;if(fh=(await hh())?.nc?.info?.server_name,fh===void 0)throw new Error("Unable to get jetstream manager server name");return fh}a(hT,"getJsmServerName");async function Yde(){let e=await hh(),t=await hT(),r=await FV();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Wde(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");Ri.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(Yde,"updateLocalStreams");function Wde(e){let{config:t}=e,r=!1,n=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Yr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Yr.get(rt.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(Wde,"updateStreamLimits");async function zde(e){let t,r;try{t=await In.jetstream({domain:e}),r=await In.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Ri.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(zde,"connectToRemoteJS")});function $C(e){let t=e.get(ET),r=t?(0,Qd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=nt(),s=!1;r.nodeName=nt();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:_h(e)??1,nodes:[]})})}i[n]=0,e.putSync(ET,(0,Qd.pack)(r))}return r}function Eh(e){return $C(e).remoteNameToId}function YV(e,t){let r=$C(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync(ET,(0,Qd.pack)(r)),s}function _T(e,t){let r=$C(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(ET,(0,Qd.pack)(r))}return KV.trace?.("The remote node name map",e,n,s),s}var KV,Qd,ET,VC=se(()=>{KV=b(wr());Ss();Qd=require("msgpackr"),ET=Symbol.for("remote-ids");a($C,"getIdMappingRecord");a(Eh,"exportIdMapping");a(YV,"remoteToLocalNodeId");a(_T,"getIdOfRemoteNode")});var XV={};ye(XV,{commitsAwaitingReplication:()=>Xd,getHDBNodeTable:()=>qt,getReplicationSharedStatus:()=>Zd,iterateRoutes:()=>Sh,shouldReplicateToNode:()=>gh,subscribeToNodeUpdates:()=>ef});function qt(){return WV||(WV=Xe({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function Zd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(64),n&&{callback:n}))}function ef(e){qt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;JV.debug?.("adding node",n,"on node",nt()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==nt()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of qt().search({}))if(i.shard!=null){let o=s.get(i.shard);o||s.set(i.shard,o=[]),o.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function gh(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&qt().primaryStore.get(nt())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function jde(){ef(e=>{fc({},(t,r)=>{let n=e.name,s=zV.get(n);if(s||zV.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=Zd(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of Xd.get(r)||[])u>l&&u<=c&&d();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*Sh(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=Jd.default.get(F.REPLICATION_SECUREPORT)??(!Jd.default.get(F.REPLICATION_PORT)&&Jd.default.get(F.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Jd.default.get(F.REPLICATION_PORT)||Jd.default.get(F.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){jV.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,startTime:t.startTime,revoked_certificates:t.revokedCertificates}}}var jV,QV,Jd,JV,WV,zV,Xd,tf=se(()=>{we();Ss();Um();jV=require("worker_threads"),QV=b(_e()),Jd=b(ae());H();JV=b(wr());server.nodes=[];a(qt,"getHDBNodeTable");a(Zd,"getReplicationSharedStatus");a(ef,"subscribeToNodeUpdates");a(gh,"shouldReplicateToNode");zV=new Map;nx((e,t,r)=>{if(r>server.nodes.length)throw new QV.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Xd||(Xd=new Map,jde());let n=Xd.get(e);return n||(n=[],Xd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(jde,"startSubscriptionToReplications");a(Sh,"iterateRoutes")});var i1={};ye(i1,{connectedToNode:()=>Yl,disconnectedFromNode:()=>nf,ensureNode:()=>ta,requestClusterStatus:()=>s1,startOnMainThread:()=>KC});async function KC(e){let t=0,r=lt();for(let o of Object.getOwnPropertyNames(r)){let c=r[o];for(let l in c){let u=c[l];if(u.auditStore){gT.set(o,_h(u.auditStore));break}}}bi.whenThreadsStarted.then(async()=>{let o=[];for await(let u of r.system.hdb_nodes?.search([])||[])o.push(u);let c=nt();function l(){let u=qt().primaryStore.get(c);if(u!==null){let d=e.url??mc();if(u===void 0||u.url!==d||u.shard!==e.shard)return ta(c,{name:c,url:d,shard:e.shard,replicates:!0})}}a(l,"ensureThisNode"),qt().primaryStore.get(c)&&l();for(let u of Sh(e))try{let d=!u.subscriptions;if(d&&await l(),d&&u.replicates==null&&(u.replicates=!0),ZV.push(u),o.find(f=>f.url===u.url))continue;s(u)}catch(d){console.error(d)}ef(s)});let n;function s(o,c=o?.name){let l=nt()&&c===nt()||mc()&&o?.url===mc();if(l){let m=!!o?.replicates;if(n!==void 0&&n!==m)for(let p of qt().search([]))p.replicates&&p.name!==c&&s(p,p.name);n=m}if(at.trace("Setting up node replication for",o),!o){for(let[m,p]of po){let h;for(let[E,{worker:g,nodes:R}]of p){let S=R[0];if(S&&S.name==c){h=!0;for(let[y,{worker:N}]of p)p.delete(y),at.warn("Node was deleted, unsubscribing from node",c,y,m),N?.postMessage({type:"unsubscribe-from-node",node:c,nodes:R,database:y,url:m});break}}if(h){po.get(m).iterator.remove(),po.delete(m);return}}return}if(l)return;if(!o.url){at.info(`Node ${o.name} is missing url`);return}let u=po.get(o.url);if(u&&u.iterator.remove(),!(o.replicates===!0||o.replicates?.sends)&&!o.subscriptions?.length&&!u)return;if(at.info(`Added node ${o.name} at ${o.url} for process ${nt()}`),o.replicates&&o.subscriptions&&(o={...o,subscriptions:null}),o.name){for(let[m,p]of rf)if(o.url===p.url){rf.delete(m);break}rf.set(o.name,o)}let d=lt();if(u||(u=new Map,po.set(o.url,u)),u.iterator=fc(e,(m,p,h)=>{h?f(p,!0):f(p,!1)}),o.subscriptions)for(let m of o.subscriptions){let p=m.database||m.schema;d[p]||(at.warn(`Database ${p} not found for node ${o.name}, making a subscription anyway`),f(p,!1))}function f(m,p){at.trace("Setting up replication for database",m,"on node",o.name);let h=u.get(m),E,g=[{replicateByDefault:p,...o}];gT.has(m)&&Th.default.get(F.REPLICATION_FAILOVER)&&(g.push({replicateByDefault:p,name:nt(),startTime:gT.get(m),endTime:Date.now(),replicates:!0}),gT.delete(m));let R=gh(o,m),S=bi.workers.filter(y=>y.name==="http");if(h){if(E=h.worker,h.nodes=g,R)return}else R&&(t=t%S.length,E=S[t++],E||at.warn("No http workers available to subscribe to node",o.name,o.url),u.set(m,{worker:E,nodes:g,url:o.url}),E?.on("exit",()=>{u.get(m)?.worker===E&&(u.delete(m),f(m,p))}));if(R){let y=Qde.HDB_LEADER_URL??process.env.HDB_LEADER_URL??ZV[0]?.url??Array.from(qt().primaryStore.getRange({}).filter(N=>N.name!==nt()))[0]?.url;g[0].isLeader=!y||g[0].url===y,setTimeout(()=>{let N={...g[0],type:"subscribe-to-node",database:m,nodes:g};E?E.postMessage(N):yh(N)},Jde)}else{at.info("Node no longer should be used, unsubscribing from node",{replicates:o.replicates,databaseName:m,node:o,subscriptions:o.subscriptions,hasDatabase:!!d[m],thisReplicates:qt().primaryStore.get(nt())?.replicates}),qt().primaryStore.get(nt())?.replicates||(n=!1,at.info("Disabling replication, this node name",nt(),qt().primaryStore.get(nt()),m));let y={type:"unsubscribe-from-node",database:m,url:o.url,name:o.name,nodes:g};E?E.postMessage(y):TT(y)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),nf=a(function(o){try{at.info("Disconnected from node",o.name,o.url,"finished",!!o.finished);let c=Array.from(rf.keys()),l=c.sort(),u=l.indexOf(o.name||Ai(o.url));if(u===-1){at.warn("Disconnected node not found in node map",o.name,c);return}let d=po.get(o.url),f=d?.get(o.database);if(!f){at.warn("Disconnected node not found in replication map",o.database,d);return}if(f.connected=!1,o.finished||!Th.default.get(F.REPLICATION_FAILOVER))return;let m=f.nodes[0];if(!(m.replicates===!0||m.replicates?.sends||m.subscriptions?.length))return;let p=m.shard,h=(u+1)%l.length;for(;u!==h;){let E=l[h],g=rf.get(E);d=po.get(g.url);let R=d?.get(o.database);if(!R||R.connected===!1||R.nodes[0].shard!==p){h=(h+1)%l.length;continue}let{nodes:S}=R,y=!1;for(let N of f.nodes){if(S.some(I=>I.name===N.name)){at.info(`Disconnected node is already failing over to ${E} for ${o.database}`);continue}N.endTime<Date.now()||(S.push(N),at.info(`Failing over ${o.database} from ${o.name} to ${E}`),i(N,o.database,R.nodes[0]),y=!0)}f.nodes=[f.nodes[0]],y||at.info(`Disconnected node ${o.name} has no nodes to fail over to ${E}`);return}at.warn("Unable to find any other node to fail over to",o.name,o.url)}catch(c){at.error("Error failing over node",c)}},"disconnectedFromNode"),Yl=a(function(o){let c=po.get(o.url),l=c?.get(o.database);if(!l){at.warn("Connected node not found in replication map, this may be because the node is being removed",o.database,c);return}l.connected=!0,l.latency=o.latency;let u=l.nodes[0];if(!u){at.warn("Newly connected node has no node subscriptions",o.database,l);return}if(!u.name){at.debug("Connected node is not named yet",o.database,l);return}if(!Th.default.get(F.REPLICATION_FAILOVER))return;l.nodes=[u];let d=!1;for(let f of po.values()){let m=f.get(o.database);if(!m||m==l)continue;let{worker:p,nodes:h,connected:E}=m;if(h)if(E===!1&&h[0].shard===u.shard&&node.url===u.url)for(let g of h)i(g,o.database);else{let g=h.filter(R=>{if(R)return R.name===u.name&&R.worker?(R.worker.postMessage({type:"unsubscribe-to-node",database:o.database,url:o.url,nodes:[R]}),!1):!0});g.length<h.length&&(m.nodes=g)}}},"connectedToNode");function i(o,c,l=o){let u=bi.workers.filter(f=>f.name==="http");t=t%u.length;let d=u[t++];Object.defineProperty(o,"worker",{value:d,configurable:!0}),d?d.postMessage({url:l.url,name:l.name,type:"subscribe-to-node",database:c,nodes:[o]}):yh({url:l.url,name:l.name,database:c,nodes:[o]})}a(i,"connectToNextWorker"),(0,bi.onMessageByType)("disconnected-from-node",nf),(0,bi.onMessageByType)("connected-to-node",Yl),(0,bi.onMessageByType)("request-cluster-status",s1)}function s1(e,t){let r=[];for(let[n,s]of rf)try{let i=po.get(s.url);at.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)o.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=t1(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){at.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function ta(e,t){let r=qt();e=e??Ai(t.url),t.name=e;try{if(t.ca){let s=new r1.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){at.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(at.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!Th.default.get(F.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=t1(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}at.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var bi,ST,at,e1,Th,r1,n1,t1,Qde,Jde,po,nf,Yl,rf,gT,ZV,Rh=se(()=>{we();bi=b(tt());Ss();ST=require("worker_threads");tf();at=b(J()),e1=b(require("lodash")),Th=b(ae());H();r1=require("crypto"),n1=b(require("minimist")),{cloneDeep:t1}=e1.default,Qde=(0,n1.default)(process.argv),Jde=200,po=new Map,rf=new Map,gT=new Map,ZV=[];a(KC,"startOnMainThread");a(s1,"requestClusterStatus");ST.parentPort&&(nf=a(e=>{ST.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Yl=a(e=>{ST.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,bi.onMessageByType)("subscribe-to-node",e=>{yh(e)}),(0,bi.onMessageByType)("unsubscribe-from-node",e=>{TT(e)}));a(ta,"ensureNode")});var ys=v(Gt=>{"use strict";var Er=require("path"),{watch:Xde}=require("chokidar"),Wn=require("fs-extra"),sf=require("node-forge"),d1=require("net"),{generateKeyPair:YC,X509Certificate:ra,createPrivateKey:f1,randomBytes:Zde}=require("node:crypto"),efe=require("util");YC=efe.promisify(YC);var Pt=sf.pki,Ii=require("joi"),{v4:m1}=require("uuid"),{validateBySchema:QC}=ot(),{forComponent:tfe}=J(),Ts=ae(),Ks=(H(),M(W)),{CONFIG_PARAMS:zl}=Ks,wi=tN(),{ClientError:pc}=_e(),RT=require("node:tls"),{relative:p1,join:rfe}=require("node:path"),{CERTIFICATE_VALUES:o1}=wi,nfe=el(),WC=St(),{table:sfe,getDatabases:ife,databases:yT}=(we(),M(mt)),{getJWTRSAKeys:a1}=(Vd(),M(ah)),Je=tfe("tls").conditional;Gt.generateKeys=ZC;Gt.updateConfigCert=R1;Gt.createCsr=ffe;Gt.signCertificate=mfe;Gt.setCertTable=of;Gt.loadCertificates=S1;Gt.reviewSelfSignedCert=tO;Gt.createTLSSelector=A1;Gt.listCertificates=w1;Gt.addCertificate=Sfe;Gt.removeCertificate=yfe;Gt.createNatsCerts=Efe;Gt.generateCertsKeys=hfe;Gt.getReplicationCert=Ah;Gt.getReplicationCertAuth=dfe;Gt.renewSelfSigned=_fe;Gt.hostnamesFromCert=nO;Gt.getKey=Rfe;Gt.getHostnamesFromCertificate=bfe;Gt.getPrimaryHostName=rO;Gt.generateSerialNumber=IT;var{urlToNodeName:h1,getThisNodeUrl:ofe,getThisNodeName:AT,clearThisNodeName:afe}=(Ss(),M(na)),{readFileSync:cfe,statSync:E1}=require("node:fs"),pBe=ae(),{getTicketKeys:lfe,onMessageFromWorkers:ufe}=tt(),{isMainThread:_1}=require("worker_threads"),{TLSSocket:g1,createSecureContext:hBe}=require("node:tls"),JC=3650,bh=["127.0.0.1","localhost","::1"],XC=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];function IT(){let e=Zde(8);return e[0]=e[0]&127|1,e.toString("hex")}a(IT,"generateSerialNumber");ufe(async e=>{e.type===Ks.ITC_EVENT_TYPES.RESTART&&(Ts.initSync(!0),await tO())});var an;function Ec(){return an||(an=ife().system.hdb_certificate,an||(an=sfe({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),an}a(Ec,"getCertTable");async function Ah(){let e=A1("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(AT());if(!r)return;let n=new ra(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(Ah,"getReplicationCert");async function dfe(){Ec();let e=(await Ah()).options.cert,r=new ra(e).issuer.match(/CN=(.*)/)?.[1];return an.get(r)}a(dfe,"getReplicationCertAuth");var c1,hc=new Map;function S1(){if(c1)return;c1=!0;let e=[{configKey:zl.TLS},{configKey:zl.OPERATIONSAPI_TLS}];Ec();let t=Er.dirname(WC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=WC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&p1(rfe(t,"keys"),o);c&&l1(o,l=>{hc.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&_1){let d;l1(u,f=>{if(o1.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=b1(u),h=new ra(p),E;try{E=rO(h)}catch(y){Je.error?.("error extracting host name from certificate",y);return}if(E==null){Je.error?.("No host name found on certificate");return}if(h.checkIssued(new ra(o1.cert)))return;let g=an.primaryStore.get(E),R=E1(u).mtimeMs,S=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&R<=S){R<S&&Je.info?.(`Certificate ${E} at ${u} is older (${new Date(R)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=an.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:R,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject?.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(S1,"loadCertificates");function l1(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&_1&&Je.warn?.(`Reloading ${r}:`,i),n=c,t(b1(i)))}catch(c){Je.error?.(`Error loading ${r}:`,i,c)}},"loadFile");Wn.existsSync(e)?s(e,E1(e)):Je.error?.(`${r} file not found:`,e),Xde(e,{persistent:!1}).on("change",s)}a(l1,"loadAndWatch");function zC(){let e=ofe();if(e==null){let t=bh[0];return Je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return h1(e)}a(zC,"getHost");function bT(){let e=AT();if(e==null){let t=bh[0];return Je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(bT,"getCommonName");async function ffe(){let e=await Ah(),t=Pt.certificateFromPem(e.options.cert),r=Pt.privateKeyFromPem(e.options.key);Je.info?.("Creating CSR with cert named:",e.name);let n=Pt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:bT()},...XC];Je.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:T1()}];return Je.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),sf.pki.certificationRequestToPem(n)}a(ffe,"createCsr");function T1(){let e=bh.includes(bT())?bh:[...bh,bT()];return e.includes(zC())||e.push(zC()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>d1.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(T1,"certExtensions");async function mfe(e){let t={},r=Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;Ec();for await(let d of an.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(hc.has(d.private_key_name)){n=hc.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Wn.exists(Er.join(r,d.private_key_name))){n=Wn.readFile(Er.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await jC();s=d.ca,n=d.private_key}n=Pt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Pt.certificateFromPem(s.certificate);Je.info?.("Signing CSR with cert named",s.name);let o=Pt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return Je.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=sf.pki.createCertificate();c.serialNumber=IT(),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+JC),Je.info?.("sign cert setting validity:",c.validity),Je.info?.("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),Je.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;Je.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,sf.md.sha256.create()),t.certificate=Pt.certificateToPem(c)}else Je.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(mfe,"signCertificate");async function pfe(e,t){await of({name:AT(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await of({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Pt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(pfe,"createCertificateTable");async function of(e){let t;try{t=new ra(e.certificate)}catch(r){Je.error?.(`Failed to parse certificate for ${e.name}:`,r.message),Je.debug?.("Certificate record details:",JSON.stringify(e,null,2));let n=new Error(`Invalid certificate format for ${e.name}: ${r.message}. This may be due to corrupted certificate data during transfer or encoding issues.`);throw n.code="INVALID_CERTIFICATE_FORMAT",n.cause=r,n}e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},Ec(),await an.patch(e)}a(of,"setCertTable");async function ZC(){let e=await YC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Pt.publicKeyFromPem(e.publicKey),privateKey:Pt.privateKeyFromPem(e.privateKey)}}a(ZC,"generateKeys");async function eO(e,t,r){let n=Pt.createCertificate();if(!t){let o=await Ah();t=Pt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=IT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+JC);let i=[{name:"commonName",value:bT()},...XC];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(T1()),n.sign(e,sf.md.sha256.create()),Pt.certificateToPem(n)}a(eO,"generateCertificates");async function jC(){let e=await w1(),t;for(let r of e){if(!r.is_authority)continue;let n=await I1(r.private_key_name);if(r.private_key_name&&n&&new ra(r.certificate).checkPrivateKey(f1(n))){Je.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;Je.trace?.("No CA found with matching private key")}a(jC,"getCertAuthority");async function y1(e,t,r=!0){let n=Pt.createCertificate();n.publicKey=t,n.serialNumber=IT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+JC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Ts.get(zl.REPLICATION_HOSTNAME)??h1(Ts.get(zl.REPLICATION_URL))??m1().split("-")[0]}`},...XC];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),n.sign(e,sf.md.sha256.create());let o=Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),c=Er.join(o,wi.PRIVATEKEY_PEM_NAME);return r&&await Wn.writeFile(c,Pt.privateKeyToPem(e)),n}a(y1,"generateCertAuthority");async function hfe(){let{privateKey:e,publicKey:t}=await ZC(),r=await y1(e,t),n=await eO(e,t,r);await pfe(n,r),R1()}a(hfe,"generateCertsKeys");async function Efe(){let e=await eO(Pt.privateKeyFromPem(wi.CERTIFICATE_VALUES.key),void 0,Pt.certificateFromPem(wi.CERTIFICATE_VALUES.cert)),t=Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),r=Er.join(t,wi.NATS_CERTIFICATE_PEM_NAME);await Wn.exists(r)||await Wn.writeFile(r,e);let n=Er.join(t,wi.NATS_CA_PEM_NAME);await Wn.exists(n)||await Wn.writeFile(n,wi.CERTIFICATE_VALUES.cert)}a(Efe,"createNatsCerts");async function _fe(){Ec();for await(let e of an.search([{attribute:"is_self_signed",value:!0}]))await an.delete(e.name);await tO()}a(_fe,"renewSelfSigned");async function tO(){afe(),await S1(),Ec();let e=await jC();if(!e){Je.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=a(u=>{try{return{key:Pt.privateKeyFromPem(Wn.readFileSync(u)),keyPath:u}}catch(d){return Je.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=Ts.get(zl.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=Ts.get(zl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let o=Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),c=p1(o,i);s||(Je.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await ZC(),Wn.existsSync(Er.join(o,wi.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${m1().split("-")[0]}.pem`),await Wn.writeFile(Er.join(o,c),Pt.privateKeyToPem(s)));let l=await y1(s,Pt.setRsaPublicKey(s.n,s.e),!1);await of({name:l.subject.getField("CN").value,uses:["https"],certificate:Pt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await Ah()){let r=AT();Je.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await jC();let n=Pt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await eO(Pt.privateKeyFromPem(e.private_key),s,n);await of({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(tO,"reviewSelfSignedCert");function R1(){let e=nfe(Object.keys(Ks.CONFIG_PARAM_MAP),!0),t=Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),r=Er.join(t,wi.PRIVATEKEY_PEM_NAME),n=Er.join(t,wi.NATS_CERTIFICATE_PEM_NAME),s=Er.join(t,wi.NATS_CA_PEM_NAME),i=Ks.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),WC.updateConfigValue(void 0,void 0,o,!1,!0)}a(R1,"updateConfigCert");function b1(e){return e.startsWith("-----BEGIN")?e:cfe(e,"utf8")}a(b1,"readPEM");var u1=RT.createSecureContext;RT.createSecureContext=function(e){if(!e.cert||!e.key)return u1(e);let t={...e};delete t.key,delete t.cert;let r=u1(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var gfe=g1.prototype._init;g1.prototype._init=function(e,t){gfe.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var Wl=new Map;function A1(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Wl.clear();let d=0;if(yT===void 0){c();return}for await(let f of yT.system.hdb_certificate.search([])){let m=f.certificate,p=new ra(m);f.is_authority&&(p.asString=m,Wl.set(p.subject,m))}for await(let f of yT.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:3;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await I1(f.private_key_name),E=f.certificate,g=new ra(E);if(Wl.has(g.issuer)&&(E+=`
|
|
18
|
+
`+Wl.get(g.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let R={ciphers:f.ciphers,ticketKeys:lfe(),availableCAs:Wl,ca:t&&Array.from(Wl.values()),cert:E,key:h,key_file:f.private_key_name,is_self_signed:f.is_self_signed};o&&(R.sessionIdContext=o.sessionIdContext);let S=f.hostnames??nO(g);Array.isArray(S)||(S=[S]);for(let I of S)I===zC()&&(p+=1);let y=RT.createSecureContext(R);y.name=f.name,y.options=R,y.quality=p,y.certificateAuthorities=Array.from(Wl),y.certStart=E.toString().slice(0,100);let N;for(let I of S)if(I){I[0]==="*"&&(s=!0,I=I.slice(1)),d1.isIP(I)&&(N=!0);let $=r.get(I)?.quality??0;Je.trace?.("Assigning TLS for hostname",I,"if",p,">",$),p>$&&r.set(I,y)}else Je.error?.("No hostname found for certificate at",RT.certificate);Je.trace?.("Adding TLS",y.name,"for",o.ports||"client","cert named",f.name,"hostnames",S,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=y,d=p,o&&(o.defaultContext=y))}catch(m){Je.error?.("Error applying TLS for",f.name,m)}o?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}a(u,"updateTLS"),yT?.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){Je.info?.("TLS requested for",o||"(no SNI)");let l=o;for(;;){let d=r.get(l);if(d)return Je.debug?.("Found certificate for",o,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}o?Je.debug?.("No certificate found to match",o,"using the default certificate"):Je.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Je.info?.("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(A1,"createTLSSelector");async function I1(e){let t=hc.get(e);return!t&&e?await Wn.readFile(Er.join(Ts.get(zl.ROOTPATH),Ks.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(I1,"getPrivateKeyByName");async function w1(){Ec();let e=[];for await(let t of an.search([]))e.push(t);return e}a(w1,"listCertificates");async function Sfe(e){let t=QC(e,Ii.object({name:Ii.string().required(),certificate:Ii.string().required(),is_authority:Ii.boolean().required(),private_key:Ii.string(),hosts:Ii.array(),uses:Ii.array()}));if(t)throw new pc(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new ra(n),c=!1,l=!1,u;for(let[p,h]of hc)!s&&!c&&o.checkPrivateKey(f1(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new pc("A suitable private key was not found for this certificate");let d;if(!r){try{d=rO(o)}catch(p){Je.error?.(p)}if(d==null)throw new pc("Error extracting certificate host name, please provide a name parameter")}let f=Tfe(r??d);s&&!c&&!l&&(await Wn.writeFile(Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME,f+".pem"),s),hc.set(f,s));let m={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(m.private_key_name=u??f+".pem"),e.ciphers&&(m.ciphers=e.ciphers),await of(m),"Successfully added certificate: "+f}a(Sfe,"addCertificate");function Tfe(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(Tfe,"sanitizeName");async function yfe(e){let t=QC(e,Ii.object({name:Ii.string().required()}));if(t)throw new pc(t.message);let{name:r}=e;Ec();let n=await an.get(r);if(!n)throw new pc(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await an.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(Je.info?.("Removing private key named",s),await Wn.remove(Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME,s)))}return await an.delete(r),"Successfully removed "+r}a(yfe,"removeCertificate");function rO(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||nO(e)[0]}a(rO,"getPrimaryHostName");function nO(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}a(nO,"hostnamesFromCert");async function Rfe(e){if(e.bypass_auth!==!0)throw new pc("Unauthorized","401");let t=QC(e,Ii.object({name:Ii.string().required()}));if(t)throw new pc(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await a1()).privateKey;if(r===".jwtPublic")return(await a1()).publicKey;if(hc.get(r))return hc.get(e.name);throw new pc("Key not found")}a(Rfe,"getKey");function bfe(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}a(bfe,"getHostnamesFromCertificate")});var Q1={};ye(Q1,{BACK_PRESSURE_RATIO_POSITION:()=>W1,CONFIRMATION_STATUS_POSITION:()=>Y1,LATENCY_POSITION:()=>PT,NodeReplicationConnection:()=>cf,OPERATION_REQUEST:()=>cO,RECEIVED_TIME_POSITION:()=>uO,RECEIVED_VERSION_POSITION:()=>lO,RECEIVING_STATUS_POSITION:()=>dO,RECEIVING_STATUS_RECEIVING:()=>j1,RECEIVING_STATUS_WAITING:()=>z1,SENDING_TIME_POSITION:()=>wh,createWebSocket:()=>LT,databaseSubscriptions:()=>gc,replicateOverWS:()=>Nh,tableUpdateListeners:()=>pO});async function LT(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=nt(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!oO){let l=(0,G1.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),oO=u.secureContexts}if(i=oO.get(s),i&&de.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,V1.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&((af?.caCount!==sa.size||af?.derivedFromContext!==i)&&(af=$1.createSecureContext({...i.options,ca:[...sa,...i.options.availableCAs.values()]}),af.caCount=sa.size,af.derivedFromContext=i),c.secureContext=af),new k1.WebSocket(e,"harperdb-replication-v1",c)}function Nh(e,t,r){let n=t.port||t.securePort,s=mO.pid%1e3+"-"+H1.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);de.debug?.(s,"Initializing replication connection",r);let i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||gc,f,m,p=!1,h=t.subscription;h?.then&&h.then(A=>{h=A,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&<()[u],g,R=new Map,S=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let y,N,I,$,ee,q,k,j=6e4,Y,le=0,fe=0,te=0,ge=F1.default.get(F.REPLICATION_BLOBTIMEOUT)??12e4,be=new Map,Ye=[],Ge=0,Ar;if(t.url){let A=a(()=>{ee&&fe===e._socket?.bytesRead&&te===e._socket?.bytesWritten?e.terminate():(ee=performance.now(),e.ping(),fe=e._socket?.bytesRead,te=e._socket?.bytesWritten)},"sendPing");I=setInterval(A,x1).unref(),A()}else tr();e._socket?.setMaxListeners(200);function tr(){clearTimeout($),fe=e._socket?.bytesRead,te=e._socket?.bytesWritten,$=setTimeout(()=>{fe===e._socket?.bytesRead&&te===e._socket?.bytesWritten&&(de.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},x1*2).unref()}a(tr,"resetPingTimer");let Qr=0,xr=0,Ou=!1,jc=3e4;function Ut(){if(pn?.length>0){let A=performance.now(),U=A-xr;Qr=(Qr*jc+(Ou?U:0))/(jc+U),m&&(m[W1]=Qr),xr=A}}a(Ut,"updateBackPressureRatio"),setInterval(Ut,jc).unref();function oi(){if(!(!g||!u))return m||(m=Zd(f,u,g)),m}a(oi,"getSharedStatus"),u&&Qc(u);let Ua,c_,mm=[],l_=[],pm,Me=[],u_=[],Bb=[],Pu=150,Gi=25,Ds=0,hm=0,Em=!1,Do,Mn,pn,Br;e.on("message",Lu);async function Lu(A){if(r=await r,!r){de.error?.(s,"No authorization provided"),Fr(1008,"Unauthorized");return}_m(A),e.off("message",Lu),e.on("message",_m)}a(Lu,"onWSMessageWhenAuthorized");function _m(A){le=performance.now();try{let U=A.dataView=new al(A.buffer,A.byteOffset,A.byteLength);if(A[0]>127){let z=(0,ct.decode)(A),[Q,B,Ee]=z;switch(Q){case C1:{if(B){if(g){if(g!==B){de.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${B}, disconnecting`),e.send((0,ct.encode)([Ih])),Fr(1008,"Node name mismatch");return}}else if(g=B,t.connection?.tentativeNode){let ue=t.connection.tentativeNode;ue.name=g,t.connection.tentativeNode=null,ta(g,ue)}if(t.connection&&(t.connection.nodeName=g),de.debug?.(s,"received node name:",g,"db:",u??z[2]),!u)try{Qc(u=z[2]),u==="system"&&(Ua=fc(t,(ue,ce)=>{Fa(ce)&&K(ce)}),e.on("close",()=>{Ua?.remove()}))}catch(ue){de.warn?.(s,"Error setting database",ue),e.send((0,ct.encode)([Ih])),Fr(1008,ue.message);return}gm()}break}case v1:{de.debug?.(s,"Received table definitions for",B.map(ue=>ue.table));for(let ue of B){let ce=z[2];ue.database=ce;let xe;if(Fa(ce)){if(u==="system")ve[ce]?.[ue.table]||(xe=D(ue,ve[ce]?.[ue.table]));else{if(ce!=="data"&&!ve[ce]){de.warn?.("Database not found",ce);return}xe=D(ue,ve[ce]?.[ue.table])}f||(f=xe?.auditStore),E||(E=lt()?.[ce])}}break}case Ih:Fr();break;case cO:try{let ue=r?.replicates||r?.subscribers||r?.name;de.debug?.("Received operation request",B,"from",g),server.operation(B,{user:r},!ue).then(ce=>{de.debug?.("Requested request from finished",g,ce),Array.isArray(ce)&&(ce={results:ce}),ce.requestId=B.requestId,e.send((0,ct.encode)([NT,ce]))},ce=>{de.debug?.("Failed requested operation from",g,ce),e.send((0,ct.encode)([NT,{requestId:B.requestId,error:sO(ce)}]))})}catch(ue){e.send((0,ct.encode)([NT,{requestId:B.requestId,error:sO(ue)}]))}break;case NT:let{resolve:me,reject:pe}=R.get(B.requestId);de.debug?.("Received completed operation request",g,B),B.error?pe(new Error(B.error)):me(B),R.delete(B.requestId);break;case iO:let re=z[3];if(!E){u?de.error?.(s,"No database found for",u):de.error?.(s,"Database name never received"),Fr();return}let ie=E[re];ie=D({table:re,database:u,attributes:B.attributes,schemaDefined:B.schemaDefined},ie),mm[Ee]={name:re,decoder:new ct.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:B.typedStructs,structures:B.structures}),getEntry(ue){return ie.primaryStore.getEntry(ue)},rootStore:ie.primaryStore.rootStore};break;case O1:Br=f?YV(B,f):new Map,pm=z[2],de.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${pm}`);break;case P1:let Oe=Ee;Bb[Oe]=B;break;case M1:oi()[Y1]=B,de.trace?.(s,"received and broadcasting committed update",B),oi().buffer.notify();break;case D1:y=B,h.send({type:"end_txn",localTime:y,remoteNodeIds:S});break;case CT:{let ue=z[1],{fileId:ce,size:xe,finished:Ce,error:Le}=ue,De=be.get(ce);de.debug?.("Received blob",ce,"has stream",!!De,"connectedToBlob",!!De?.connectedToBlob,"length",z[2].length,"finished",Ce),De||(De=new aO.PassThrough,De.expectedSize=xe,be.set(ce,De)),De.lastChunk=Date.now();let ht=z[2];Ve(ht.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{Ce?(Le?(De.on("error",()=>{}),De.destroy(new Error("Blob error: "+Le+" for record "+(De.recordId??"unknown")+" from "+g))):De.end(ht),De.connectedToBlob&&be.delete(ce)):De.write(ht)}catch(Nt){de.error?.(`Error receiving blob for ${De.recordId} from ${g} and streaming to storage`,Nt),be.delete(ce)}break}case L1:{let ue=B,ce;try{let xe=z[3],Ce=l_[Ee]||(l_[Ee]=E[z[4]]);if(!Ce)return de.warn?.("Unknown table id trying to handle record request",Ee);let Le=Ce.primaryStore.getBinaryFast(Symbol.for("structures")),De=Le?.length??0;if(De>0&&De!==hm){hm=De;let Nt=(0,ct.decode)(Le);e.send((0,ct.encode)([iO,{typedStructs:Nt.typed,structures:Nt.named},Ee,Ce.tableName]))}let ht=Ce.primaryStore.getBinaryFast(xe);if(ht){let Nt=Ce.primaryStore.decoder.decode(ht,{valueAsBuffer:!0}),xt=ut||{};xt.version=(0,K1.getLastVersion)(),ut&&ut[zu]&Zr&&(Nt=Buffer.from(Nt),Vm(()=>Ce.primaryStore.decoder.decode(ht),f_=>xa(f_,xe),Ce.primaryStore.rootStore)),ce=(0,ct.encode)([wT,ue,{value:Nt,expiresAt:xt.expiresAt,version:xt.version,residencyId:xt.residencyId,nodeId:xt.nodeId,user:xt.user}])}else ce=(0,ct.encode)([wT,ue])}catch(xe){ce=(0,ct.encode)([wT,ue,{error:xe.message}])}e.send(ce);break}case wT:{let{resolve:ue,reject:ce,tableId:xe,key:Ce}=R.get(z[1]),Le=z[2];if(Le?.error)ce(new Error(Le.error));else if(Le){let De;j_(()=>{let ht=mm[xe].decoder.decode(Le.value);Le.value=ht,Le.key=Ce,ue(Le)||De&&setTimeout(()=>De.forEach(Y_),6e4).unref()},f?.rootStore,ht=>{let Nt=Ba(ht,Ce);return De||(De=[]),De.push(Nt),Nt})}else ue();R.delete(z[1]);break}case N1:{pn=B;let ue,ce,xe=!1;if(h){if(u!==h.databaseName&&!h.then){de.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(de.debug?.(s,"received subscription request for",u,"at",pn),!h){let Pe;h=new Promise(rr=>{de.debug?.("Waiting for subscription to database "+u),Pe=rr}),h.ready=Pe,gc.set(u,h)}if(r.name)ce=qt().subscribe(r.name),ce.then(async Pe=>{ue=Pe;for await(let rr of ue){let Et=rr.value;if(!(Et?.replicates===!0||Et?.replicates?.receives||Et?.subscriptions?.some(kr=>(kr.database||kr.schema)===u&&kr.publish!==!1))){xe=!0,Fr(1008,`Unauthorized database subscription to ${u}`);return}}},Pe=>{de.error?.(s,"Error subscribing to HDB nodes",Pe)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,ct.encode)([Ih])),Fr(1008,`Unauthorized database subscription to ${u}`);return}if(Mn&&(de.debug?.(s,"stopping previous subscription",u),Mn.emit("close")),pn.length===0)return;let Ce=pn[0],Le=a(Pe=>{if(Pe&&(Ce.replicateByDefault?!Ce.tables.includes(Pe.tableName):Ce.tables.includes(Pe.tableName)))return{table:Pe}},"tableToTableEntry"),De={txnTime:0},ht,Nt,xt=1/0,f_,m_=a((Pe,rr)=>{if(Pe.type==="end_txn"){De.txnTime&&(o[i]!==66&&de.error?.("Invalid encoding of message"),C(9),C(og),O(f_=rr),Vv()),i=c,De.txnTime=0;return}let Et=Pe.nodeId,kr=Pe.tableId,Ct=Nt[kr];if(!Ct&&(Ct=Nt[kr]=Le(h.tableById[kr]),!Ct))return de.debug?.("Not subscribed to table",kr);let Ms=Ct.table,Yt=Ms.primaryStore,ai=Yt.encoder;(Pe.extendedType&_g||!ai.typedStructs)&&(ai._mergeStructures(ai.getStructures()),ai.typedStructs&&(ai.lastTypedStructuresLength=ai.typedStructs.length));let vu=ht[Et];if(!(vu&&vu.startTime<rr&&(!vu.endTime||vu.endTime>rr)))return OT&&de.trace?.(s,"skipping replication update",Pe.recordId,"to:",g,"from:",Et,"subscribed:",ht),Kv();OT&&de.trace?.(s,"sending replication update",Pe.recordId,"to:",g,"from:",Et,"subscribed:",ht);let Fb=Pe.version;De.txnTime!==Fb&&(De.txnTime&&(OT&&de.trace?.(s,"new txn time, sending queued txn",De.txnTime),o[i]!==66&&de.error?.("Invalid encoding of message"),Vv()),De.txnTime=Fb,i=c,O(Fb));let Jc=Pe.residencyId,kb=d_(Jc,Ms),p_;if(kb&&!kb.includes(g)){let $i=d_(Pe.previousResidencyId,Ms);if($i&&!$i.includes(g)&&(Pe.type==="put"||Pe.type==="patch")||Ms.getResidencyById)return Kv();let Xc=Pe.recordId;de.trace?.(s,"sending invalidation",Xc,g,"from",Et);let Sm=0;Jc&&(Sm|=cl),Pe.previousResidencyId&&(Sm|=ll);let Gb,h_=null;for(let Yv in Ms.indices){if(!h_){if(Gb=Pe.getValue(Yt,!0),!Gb)break;h_={}}h_[Yv]=Gb[Yv]}p_=ul(Pe.version,kr,Xc,null,Et,Pe.user,Pe.type==="put"||Pe.type==="patch"?"invalidate":Pe.type,ai.encode(h_),Sm,Jc,Pe.previousResidencyId,Pe.expiresAt)}function Kv(){return de.trace?.(s,"skipping audit record",Pe.recordId),q||(q=setTimeout(()=>{q=null,(f_||0)+U1/2<xt&&(OT&&de.trace?.(s,"sending skipped sequence update",xt),e.send((0,ct.encode)([D1,xt])))},U1).unref()),new Promise(setImmediate)}a(Kv,"skipAuditRecord");let Hb=ai.typedStructs,qb=ai.structures;if((Hb?.length!=Ct.typed_length||qb?.length!=Ct.structure_length)&&(Ct.typed_length=Hb?.length,Ct.structure_length=qb.length,de.debug?.(s,"send table struct",Ct.typed_length,Ct.structure_length),Ct.sentName||(Ct.sentName=!0),e.send((0,ct.encode)([iO,{typedStructs:Hb,structures:qb,attributes:Ms.attributes,schemaDefined:Ms.schemaDefined},kr,Ct.table.tableName]))),Jc&&!u_[Jc]&&(e.send((0,ct.encode)([P1,kb,Jc])),u_[Jc]=!0),p_)C(p_.length),P(p_);else{let $i=Pe.encoded;Pe.extendedType&Zr&&Vm(()=>Pe.getValue(Yt),Sm=>xa(Sm,Pe.recordId),Yt.rootStore);let Xc=$i[0]===66?8:0;C($i.length-Xc),P($i,Xc),de.trace?.("wrote record",Pe.recordId,"length:",$i.length)}if(e._socket.writableNeedDrain){let $i=performance.now();return Ou=!0,Ut(),new Promise(Xc=>{de.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",()=>{Xc(),Ou=!1,Ut()})})}else return Ge>Gi?new Promise($i=>{Ar=$i}):new Promise(setImmediate)},"sendAuditRecord"),Vv=a(()=>{c-i>8?(e.send(o.subarray(i,c)),de.debug?.(s,"Sent message, size:",c-i),u!=="system"&&Ve(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):de.debug?.(s,"skipping empty transaction")},"sendQueuedData");Mn=new fO.EventEmitter,Mn.once("close",()=>{xe=!0,ue?.end()});for(let{startTime:Pe}of pn)Pe<xt&&(xt=Pe);(ce||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,Nt=h.tableById.map(Le),ht=[];for(let{name:rr,startTime:Et,endTime:kr}of pn){let Ct=_T(rr,f);de.debug?.("subscription to",rr,"using local id",Ct,"starting",Et),ht[Ct]={startTime:Et,endTime:kr}}K(u),Ua||(Ua=Hl(rr=>{rr.databaseName===u&&K(u)}),c_=Xp(rr=>{rr===u&&(e.send((0,ct.encode)([Ih])),Fr())}),e.on("close",()=>{Ua?.remove(),c_?.remove()})),e.send((0,ct.encode)([O1,Eh(h.auditStore),pn.map(({name:rr})=>rr)]));let Pe=!0;do{isFinite(xt)||(de.warn?.("Invalid sequence id "+xt),Fr(1008,"Invalid sequence id"+xt));let rr;if(Pe&&!xe&&(Pe=!1,xt===0)){de.info?.("Replicating all tables to",g);let Et=Date.now(),kr=DT(f);for(let Ct in E){if(!Le(Ct))continue;let Ms=E[Ct];for(let Yt of Ms.primaryStore.getRange({snapshot:!1,versions:!0})){if(xe)return;de.trace?.(s,"Copying record from",u,Ct,Yt.key,Yt.localTime),Et=Math.max(Yt.localTime??1,Et),rr=!0,oi()[wh]=1;let ai=ul(Yt.version,Ms.tableId,Yt.key,null,kr,null,"put",Vm(()=>Ms.primaryStore.encoder.encode(Yt.value),vu=>xa(vu,Yt.key)),Yt.metadataFlags&-256,Yt.residencyId,null,Yt.expiresAt);await m_({recordId:Yt.key,tableId:Ms.tableId,type:"put",getValue(){return Yt.value},encoded:ai,version:Yt.version,residencyId:Yt.residencyId,nodeId:kr,extendedType:Yt.metadataFlags},Yt.localTime)}}De.txnTime||(De.txnTime=Et,O(Et)),m_({type:"end_txn"},Et),oi()[wh]=0,xt=Et}for(let{key:Et,value:kr}of f.getRange({start:xt||1,exclusiveStart:!0,snapshot:!1})){if(xe)return;let Ct=It(kr);de.debug?.("sending audit record",Et,Ct.recordId),oi()[wh]=Et,xt=Et,await m_(Ct,Et),Mn.startTime=Et,rr=!0}rr&&m_({type:"end_txn"},xt),oi()[wh]=0,await tB(f)}while(!xe)}).catch(Pe=>{de.error?.(s,"Error handling subscription to node",Pe),Fr(1008,"Error handling subscription to node")});break}}return}U.position=8;let w=!0,L,G;do{oi();let z=U.readInt();if(z===9&&U.getUint8(U.position)==og){U.position++,y=G=U.readFloat64(),m[lO]=y,m[uO]=Date.now(),m[dO]=z1,h.send({type:"end_txn",localTime:y,remoteNodeIds:S}),de.trace?.("received remote sequence update",y,u);break}let Q=U.position,B=It(A,Q,Q+z),Ee=mm[B.tableId];Ee||de.error?.(`No table found with an id of ${B.tableId}`);let me;B.residencyId&&(me=Bb[B.residencyId],de.trace?.(s,"received residency list",me,B.type,B.recordId));let pe=B.recordId;try{j_(()=>{L={table:Ee.name,id:B.recordId,type:B.type,nodeId:Br.get(B.nodeId),residencyList:me,timestamp:B.version,value:B.getValue(Ee),user:B.user,beginTxn:w,expiresAt:B.expiresAt}},f?.rootStore,re=>Ba(re,pe))}catch(re){throw re.message+=" record id: "+pe,re.message+=" typed structures for current decoder"+JSON.stringify(Ee.decoder.typedStructs),re.message+=" structures for current decoder"+JSON.stringify(Ee.decoder.structures),re}w=!1,de.debug?.(s,"received replication message",B.type,"id",L.id,"version",new Date(B.version),"nodeId",L.nodeId),m[lO]=B.version,m[uO]=Date.now(),m[dO]=j1,h.send(L),U.position=Q+z}while(U.position<A.byteLength);Ds++,u!=="system"&&Ve(A.byteLength,"bytes-received",`${g}.${u}.${L?.table||"unknown_table"}`,"replication","ingest"),Ds>Pu&&!Em&&(Em=!0,e.pause(),de.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),h.send({type:"end_txn",localTime:y,remoteNodeIds:S,async onCommit(){if(L){let z=Date.now()-L.timestamp;u!=="system"&&Ve(z,"replication-latency",g+"."+u+"."+L.table,L.type,"ingest")}Ds--,Em&&(Em=!1,e.resume(),de.debug?.(`Replication resuming ${g}`)),Ye.length>0&&await Promise.all(Ye),de.trace?.("All blobs finished"),!N&&G&&(de.trace?.(s,"queuing confirmation of a commit at",G),setTimeout(()=>{e.send((0,ct.encode)([M1,N])),de.trace?.(s,"sent confirmation of a commit at",N),N=null},Ife)),N=G,de.debug?.("last sequence committed",new Date(G),u)}})}catch(U){de.error?.(s,"Error handling incoming replication message",U)}}a(_m,"onWSMessage"),e.on("ping",tr),e.on("pong",()=>{if(t.connection){let A=performance.now()-ee;t.connection.latency=A,oi()&&(m[PT]=A),t.isSubscriptionConnection&&Yl({name:g,database:u,url:t.url,latency:A})}ee=null}),e.on("close",(A,U)=>{clearInterval(I),clearTimeout($),clearInterval(k),Mn&&Mn.emit("close"),Do&&Do.end();for(let[w,{reject:L}]of R)L(new Error(`Connection closed ${U?.toString()} ${A}`));de.debug?.(s,"closed",A,U?.toString())});function Fr(A,U){try{e.isFinished=!0,de.debug?.(s,"closing",g,u,A,U),e.close(A,U),t.connection?.emit("finished")}catch(w){de.error?.(s,"Error closing connection",w)}}a(Fr,"close");let Du=new Set;async function xa(A,U){let w=W_(A);if(Du.has(w)){de.debug?.("Blob already being sent",w);return}Du.add(w);try{let L;Ge++;for await(let G of A.stream())L&&(de.debug?.("Sending blob chunk",w,"length",L.length),e.send((0,ct.encode)([CT,{fileId:w,size:A.size},L]))),L=G,e._socket.writableNeedDrain&&(de.debug?.("draining",w),await new Promise(z=>e._socket.once("drain",z)),de.debug?.("drained",w)),Ve(G.length,"bytes-sent",`${g}.${u}`,"replication","blob");de.debug?.("Sending final blob chunk",w,"length",L.length),e.send((0,ct.encode)([CT,{fileId:w,size:A.size,finished:!0},L]))}catch(L){de.warn?.("Error sending blob",L,"blob id",w,"for record",U),e.send((0,ct.encode)([CT,{fileId:w,finished:!0,error:sO(L)},Buffer.alloc(0)]))}finally{Du.delete(w),Ge--,Ge<Gi&&Ar?.()}}a(xa,"sendBlobs");function Ba(A,U){let w=W_(A),L=be.get(w);de.debug?.("Received transaction with blob",w,"has stream",!!L,"ended",!!L?.writableEnded),L?L.writableEnded&&be.delete(w):(L=new aO.PassThrough,be.set(w,L)),L.connectedToBlob=!0,L.lastChunk=Date.now(),L.recordId=U,A.size===void 0&&L.expectedSize&&(A.size=L.expectedSize);let G=L.blob??createBlob(L,A);L.blob=G;let z=qo(()=>$m(G).saving,h.auditStore?.rootStore);return z&&(z.blobId=w,Ye.push(z),z.finally(()=>{de.debug?.(`Finished receiving blob stream ${w}`),Ye.splice(Ye.indexOf(z),1)})),G}a(Ba,"receiveBlobs");function gm(){if(p||(p=!0,t.connection?.on("subscriptions-updated",gm)),!f&&h&&(f=h.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let A=new Map;f||(f=h?.auditStore);try{for(let L of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let G of L.value.nodes||[])G.lastTxnTime>(A.get(G.id)??0)&&A.set(G.id,G.lastTxnTime)}catch(L){if(!L.message.includes("Can not re"))throw L}let U=t.connection?.nodeSubscriptions?.[0];S=[];let w=t.connection?.nodeSubscriptions.map((L,G)=>{let z=[],{replicateByDefault:Q}=L;if(L.subscriptions){for(let pe of L.subscriptions)if(pe.subscribe&&(pe.schema||pe.database)===u){let re=pe.table;E?.[re]?.replicate!==!1&&z.push(re)}Q=!1}else for(let pe in E)(Q?E[pe].replicate===!1:E[pe].replicate)&&z.push(pe);let B=f&&_T(L.name,f),Ee=h?.dbisDB?.get([Symbol.for("seq"),B])??1,me=Math.max(Ee?.seqId??1,(typeof L.startTime=="string"?new Date(L.startTime).getTime():L.startTime)??1);if(de.debug?.("Starting time recorded in db",L.name,B,u,Ee?.seqId,"start time:",me,new Date(me)),U!==L){let pe=f&&_T(U.name,f),re=h?.dbisDB?.get([Symbol.for("seq"),pe])??1;for(let ie of re?.nodes||[])ie.name===L.name&&(me=ie.seqId,de.debug?.("Using sequence id from proxy node",U.name,me))}return B===void 0?de.warn("Starting subscription request from node",L,"but no node id found"):S.push(B),A.get(B)>me&&(me=A.get(B),de.debug?.("Updating start time from more recent txn recorded",U.name,me)),me===1&&(L.isLeader?(de.warn?.(`Requesting full copy of database ${u} from ${L.url}`),me=0):me=Date.now()-6e4),de.trace?.(s,"defining subscription request",L.name,u,new Date(me)),{name:L.name,replicateByDefault:Q,tables:z,startTime:me,isLeader:L.isLeader,endTime:L.endTime}});if(w)if(de.debug?.(s,"sending subscription request",w,h?.dbisDB?.path),clearTimeout(Y),w.length>0)e.send((0,ct.encode)([N1,w]));else{let L=a(()=>{let G=performance.now();Y=setTimeout(()=>{le<=G?Fr(1008,"Connection has no subscriptions and is no longer used"):L()},j).unref()},"scheduleClose");L()}}a(gm,"sendSubscriptionRequestUpdate");function d_(A,U){if(!A)return;let w=Me[A];return w||(w=U.getResidencyRecord(A),Me[A]=w),w}a(d_,"getResidence");function Fa(A){return!(_c&&_c!="*"&&!_c[A]&&!_c.includes?.(A)&&!_c.some?.(U=>U.name===A))}a(Fa,"checkDatabaseAccess");function Qc(A){if(h=h||d.get(A),!Fa(A))throw new Error(`Access to database "${A}" is not permitted`);h||de.warn?.(`No database named "${A}" was declared and registered`),f=h?.auditStore,E||(E=lt()?.[A]);let U=nt();if(U===g)throw U?new Error("Should not connect to self",U):new Error("Node name not defined");return Mu(U,A),!0}a(Qc,"setDatabase");function Mu(A,U){let w=lt()?.[U],L=[];for(let G in w){let z=w[G];L.push({table:G,schemaDefined:z.schemaDefined,attributes:z.attributes.map(Q=>({name:Q.name,type:Q.type,isPrimaryKey:Q.isPrimaryKey}))})}de.trace?.("Sending database info for node",A,"database name",U),e.send((0,ct.encode)([C1,A,U,L]))}a(Mu,"sendNodeDBName");function K(A){let U=lt()?.[A],w=[];for(let L in U){if(pn&&!pn.some(z=>z.replicateByDefault?!z.tables.includes(L):z.tables.includes(L)))continue;let G=U[L];w.push({table:L,schemaDefined:G.schemaDefined,attributes:G.attributes.map(z=>({name:z.name,type:z.type,isPrimaryKey:z.isPrimaryKey}))})}e.send((0,ct.encode)([v1,w,A]))}a(K,"sendDBSchema"),k=setInterval(()=>{for(let[A,U]of be)U.lastChunk+ge<Date.now()&&(de.warn?.(`Timeout waiting for blob stream to finish ${A} for record ${U.recordId??"unknown"} from ${g}`),be.delete(A),U.end())},ge).unref();let _=1,T=[];return{end(){Do&&Do.end(),Mn&&Mn.emit("close")},getRecord(A){let U=_++;return new Promise((w,L)=>{let G=[L1,U,A.table.tableId,A.id];T[A.table.tableId]||(G.push(A.table.tableName),T[A.table.tableId]=!0),e.send((0,ct.encode)(G)),le=performance.now(),R.set(U,{tableId:A.table.tableId,key:A.id,resolve(z){let{table:Q,entry:B}=A;if(w(z),z)return Q._recordRelocate(B,z)},reject:L})})},sendOperation(A){let U=_++;return A.requestId=U,e.send((0,ct.encode)([cO,A])),new Promise((w,L)=>{R.set(U,{resolve:w,reject:L})})}};function C(A){x(5),A<128?o[c++]=A:A<16384?(l.setUint16(c,A|32768),c+=2):A<1056964608?(l.setUint32(c,A|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,A),c+=5)}function P(A,U=0,w=A.length){let L=w-U;x(L),A.copy(o,c,U,w),c+=L}function O(A){x(8),l.setFloat64(c,A),c+=8}function x(A){if(A+16>o.length-c){let U=Buffer.allocUnsafeSlow(c+A-i+65536>>10<<11);o.copy(U,0,i,c),c=c-i,i=0,o=U,l=new DataView(o.buffer,0,o.length)}}function D(A,U){let w=A.database??"data";U||(U={});let L=U.schemaDefined,G=!1,z=A.schemaDefined,Q=U.attributes||[];for(let B=0;B<A.attributes?.length;B++){let Ee=A.attributes[B],me=Q.find(pe=>pe.name===Ee.name);(!me||me.type!==Ee.type)&&(L?de.error?.(`Schema for '${u}.${A.table}' is defined locally, but attribute '${Ee.name}: ${Ee.type}' from '${g}' does not match local attribute ${me?"'"+me.name+": "+me.type+"'":"which does not exist"}`):(G=!0,z||(Ee.indexed=!0),me?Q[Q.indexOf(me)]=Ee:Q.push(Ee)))}return G?(de.debug?.("(Re)creating",A),Xe({table:A.table,database:A.database,schemaDefined:A.schemaDefined,attributes:Q,...U})):U}}var F1,ct,k1,H1,q1,fO,G1,$1,mO,V1,aO,K1,Afe,sO,de,N1,C1,O1,Ih,P1,iO,L1,wT,cO,NT,D1,M1,v1,CT,Y1,lO,uO,wh,PT,dO,W1,z1,j1,pO,gc,OT,U1,Ife,x1,oO,af,B1,cf,hO=se(()=>{we();Ki();VC();pI();Ss();F1=b(ae());H();dl();ct=require("msgpackr"),k1=require("ws"),H1=require("worker_threads"),q1=b(J());Rh();fO=require("events"),G1=b(ys()),$1=b(require("node:tls"));tf();mO=b(require("node:process")),V1=require("node:net");is();ss();aO=require("node:stream"),K1=require("lmdb"),{forComponent:Afe,errorToString:sO}=q1.default,de=Afe("replication").conditional,N1=129,C1=140,O1=141,Ih=142,P1=130,iO=132,L1=133,wT=134,cO=136,NT=137,D1=143,M1=144,v1=145,CT=146,Y1=0,lO=1,uO=2,wh=3,PT=4,dO=5,W1=6,z1=0,j1=1,pO=new Map,gc=new Map,OT=!0,U1=300,Ife=2,x1=3e4;a(LT,"createWebSocket");B1=500,cf=class extends fO.EventEmitter{static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=B1;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions;latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;url;subscription;databaseName;nodeName;authorization;constructor(t,r,n,s,i){super(),this.url=t,this.subscription=r,this.databaseName=n,this.authorization=i,this.nodeName=this.nodeName??Ai(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await LT(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;de.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${mO.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),de[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=B1,this.nodeSubscriptions&&Yl({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=Nh(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(de.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?de.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):de.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&nf({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();de.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};a(Nh,"replicateOverWS")});function Sc(e,t){let r=e.toString("base64"),n=[`-----BEGIN ${t}-----`];for(let s=0;s<r.length;s+=64)n.push(r.substring(s,s+64));return n.push(`-----END ${t}-----`),n.join(`
|
|
19
|
+
`)}function X1(e){let t=[],r=e;for(;r?.raw;){let n={cert:r.raw};if(r.issuerCertificate&&r.issuerCertificate!==r&&r.issuerCertificate.raw&&(n.issuer=r.issuerCertificate.raw),t.push(n),r.issuerCertificate&&r.issuerCertificate!==r)r=r.issuerCertificate;else break}return t}function gO(e){try{let t=jl(e),n=ho.Certificate.fromBER(t).extensions?.find(c=>c.extnID==="2.5.29.31");if(!n)return ia.debug?.("Certificate has no CRL Distribution Points extension"),[];let s=oa.fromBER(n.extnValue.valueBlock.valueHexView);if(s.offset===-1)throw new Error("Failed to parse ASN.1 structure in CRL Distribution Points extension");let i=new ho.CRLDistributionPoints({schema:s.result}),o=[];for(let c of i.distributionPoints)if(c.distributionPoint&&Array.isArray(c.distributionPoint)){for(let l of c.distributionPoint)if(l.type===6&&typeof l.value=="string"){let u=l.value;(u.startsWith("http://")||u.startsWith("https://"))&&o.push(u)}}return ia.debug?.(`Found ${o.length} CRL distribution points: ${o}`),o}catch(t){return ia.warn?.(`Failed to extract CRL distribution points: ${t}`),[]}}function Z1(e){try{let t=jl(e),r=ho.Certificate.fromBER(t),n=[],s=[];for(let i of r.extensions||[])if(i.extnID==="2.5.29.31")try{let o=oa.fromBER(i.extnValue.valueBlock.valueHexView);if(o.offset!==-1){let c=new ho.CRLDistributionPoints({schema:o.result});for(let l of c.distributionPoints)if(l.distributionPoint&&Array.isArray(l.distributionPoint)){for(let u of l.distributionPoint)if(u.type===6&&typeof u.value=="string"){let d=u.value;(d.startsWith("http://")||d.startsWith("https://"))&&n.push(d)}}}}catch(o){ia.warn?.(`Failed to parse CRL Distribution Points extension: ${o}`)}else if(i.extnID==="1.3.6.1.5.5.7.1.1")try{let o=oa.fromBER(i.extnValue.valueBlock.valueHexView);if(o.offset!==-1&&o.result instanceof oa.Sequence){for(let c of o.result.valueBlock.value)if(c instanceof oa.Sequence&&c.valueBlock.value.length>=2){let l=c.valueBlock.value[0],u=c.valueBlock.value[1];if(l instanceof oa.ObjectIdentifier&&l.valueBlock.toString()==="1.3.6.1.5.5.7.48.1"&&u.idBlock.tagNumber===6){let d=String.fromCharCode(...Array.from(u.valueBlock.valueHexView));(d.startsWith("http://")||d.startsWith("https://"))&&s.push(d)}}}}catch(o){ia.warn?.(`Failed to parse Authority Information Access extension: ${o}`)}return ia.debug?.(`Found ${n.length} CRL distribution points and ${s.length} OCSP responder URLs`),{crlUrls:n,ocspUrls:s}}catch(t){return ia.warn?.(`Failed to extract revocation URLs: ${t}`),{crlUrls:[],ocspUrls:[]}}}function jl(e){let t=e.replace(/-----BEGIN [^-]+-----/g,"").replace(/-----END [^-]+-----/g,"").replace(/\s/g,""),r=atob(t),n=new ArrayBuffer(r.length),s=new Uint8Array(n);for(let i=0;i<r.length;i++)s[i]=r.charCodeAt(i);return n}function MT(e,t,r,n){let s={certPem:e,issuerPem:t,method:r,...n},i=(0,_O.createHash)("sha256").update(JSON.stringify(s)).digest("hex");return`${r}:${i}`}function SO(e,t){return`${e}:${t}`}function eK(e){try{let t=jl(e),n=ho.Certificate.fromBER(t).serialNumber.valueBlock.valueHexView;return Array.from(n).map(s=>s.toString(16).padStart(2,"0")).join("")}catch(t){throw ia.error?.(`Failed to extract serial number: ${t}`),new Error(`Failed to extract certificate serial number: ${t.message}`)}}function TO(e){try{let t=jl(e),r=ho.Certificate.fromBER(t),n=r.extensions?.find(i=>i.extnID==="2.5.29.35");if(n){let i=new ho.AuthorityKeyIdentifier({schema:n.parsedValue});if(i.keyIdentifier){let o=i.keyIdentifier.valueBlock.valueHexView;return Array.from(o).map(c=>c.toString(16).padStart(2,"0")).join("")}}let s=r.issuer.typesAndValues.map(i=>`${i.type}=${i.value.valueBlock.value}`).join(",");return(0,_O.createHash)("sha256").update(s).digest("hex")}catch(t){throw ia.error?.(`Failed to extract issuer key ID: ${t}`),new Error(`Failed to extract issuer key ID: ${t.message}`)}}function vT(){return EO||(EO=Xe({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]})),EO}var _O,ho,oa,J1,ia,EO,UT=se(()=>{_O=require("node:crypto"),ho=b(require("pkijs")),oa=b(require("asn1js")),J1=b(wr());we();ia=(0,J1.loggerWithTag)("cert-verification-utils");a(Sc,"bufferToPem");a(X1,"extractCertificateChain");a(gO,"extractCRLDistributionPoints");a(Z1,"extractRevocationUrls");a(jl,"pemToBuffer");a(MT,"createCacheKey");a(SO,"createRevokedCertificateId");a(eK,"extractSerialNumber");a(TO,"extractIssuerKeyId");EO=null;a(vT,"getCertificateCacheTable")});function tK(e){let{error:t,value:r}=Ofe.validate(e,{abortEarly:!1,allowUnknown:!1});if(t){let n=t.details.map(s=>s.message).join("; ");throw new Error(`Invalid certificate verification configuration: ${n}`)}return r}var Wr,wfe,lf,uf,yO,Nfe,Cfe,Ofe,rK=se(()=>{Wr=b(require("joi")),wfe="fail-closed",lf={timeout:5e3,cacheTtl:36e5,errorCacheTtl:3e5,failureMode:"fail-closed"},uf={timeout:1e4,cacheTtl:864e5,failureMode:"fail-closed",gracePeriod:864e5},yO=Wr.default.string().valid("fail-open","fail-closed"),Nfe=Wr.default.alternatives().try(Wr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...uf}),Wr.default.object({enabled:Wr.default.boolean().default(!0),timeout:Wr.default.number().min(1e3).default(uf.timeout).messages({"number.min":"CRL timeout must be at least 1000ms (1 second)"}),cacheTtl:Wr.default.number().min(1e3).default(uf.cacheTtl).messages({"number.min":"CRL cacheTtl must be at least 1000ms (1 second)"}),failureMode:yO.default(uf.failureMode),gracePeriod:Wr.default.number().min(0).default(uf.gracePeriod).messages({"number.min":"CRL gracePeriod must be at least 0ms"})})),Cfe=Wr.default.alternatives().try(Wr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...lf}),Wr.default.object({enabled:Wr.default.boolean().default(!0),timeout:Wr.default.number().min(1e3).default(lf.timeout).messages({"number.min":"OCSP timeout must be at least 1000ms (1 second)"}),cacheTtl:Wr.default.number().min(1e3).default(lf.cacheTtl).messages({"number.min":"OCSP cacheTtl must be at least 1000ms (1 second)"}),errorCacheTtl:Wr.default.number().min(1e3).default(lf.errorCacheTtl).messages({"number.min":"OCSP errorCacheTtl must be at least 1000ms (1 second)"}),failureMode:yO.default(lf.failureMode)})),Ofe=Wr.default.object({failureMode:yO.default(wfe),crl:Nfe.default({enabled:!0,...uf}),ocsp:Cfe.default({enabled:!0,...lf})});a(tK,"validateAndParseCertificateVerificationConfig")});function dK(e){if(typeof e=="boolean"||e==null){if(e===RO&&bO)return Eo.trace?.("Using cached validation error result (primitive) - returning disabled"),!1;if(e===RO&&xT!==null)return Eo.trace?.("Using cached certificate verification config (primitive)"),xT;Eo.trace?.("Parsing and caching certificate verification config (primitive)"),RO=e;try{return xT=iK(e),bO=null,xT}catch(n){return bO=n,Eo.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}if(sK.get(e))return Eo.trace?.("Using cached validation error result (object) - returning disabled"),!1;let r=nK.get(e);if(r!==void 0)return Eo.trace?.("Using cached certificate verification config (object)"),r;Eo.trace?.("Parsing and caching certificate verification config (object)");try{let n=iK(e);return nK.set(e,n),n}catch(n){return sK.set(e,n),Eo.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}function iK(e){if(Eo.trace?.(`getCertificateVerificationConfig called with: ${JSON.stringify({mtlsConfig:e})}`),!e)return!1;let t=e===!0?void 0:e.certificateVerification;return Eo.trace?.(`Certificate verification config: ${JSON.stringify({verificationConfig:t})}`),t==null||t===!1?!1:tK(t===!0?{}:t)}var oK,aK,Eo,cK,lK,uK,nK,RO,xT,sK,bO,AO=se(()=>{oK=b(wr()),aK=b(Rt());rK();Eo=(0,oK.loggerWithTag)("cert-verification-config"),cK=10080*60*1e3,lK=3e5,uK=`Harper/${aK.packageJson.version} CRL-Client`,nK=new WeakMap,RO=null,xT=null,sK=new WeakMap,bO=null;a(dK,"getCachedCertificateVerificationConfig");a(iK,"getCertificateVerificationConfig")});function Ch(e){return e===mK||e===Pfe}function Lfe(e){return e===pK||e===hK}function IO(e){return e===mK?pK:hK}function Dfe(){if(fK)return;fK=!0;let e=Ql.CryptoEngine.prototype,t=Ql.Certificate.prototype,r={getHashAlgorithm:e.getHashAlgorithm,getAlgorithmByOID:e.getAlgorithmByOID,getAlgorithmParameters:e.getAlgorithmParameters,verifyWithPublicKey:e.verifyWithPublicKey,certificateVerify:t.verify,getPublicKey:t.getPublicKey};e.getHashAlgorithm=function(...n){let[s]=n;return Ch(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return Ch(s)?{name:IO(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return Lfe(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=Ql.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(Ch(i)){let o=IO(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),o,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(Ch(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),o=s.toSchema().toBER(!1),c=new Oh.X509Certificate(Buffer.from(i)),l=new Oh.X509Certificate(Buffer.from(o));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,o]=n,c=o.algorithm.algorithmId;if(Ch(c)){let l=IO(c);try{let u=this.crypto?.subtle||this.subtle||Ql.getCrypto(!0)?.subtle||Oh.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",o.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return"unusedBits"in i.valueBlock&&i.valueBlock.unusedBits>0&&(f=f.slice(0,f.length-1)),await u.verify(l,d,f,s)}catch{return!1}}return r.verifyWithPublicKey.call(this,...n)})}var Ql,Oh,mK,Pfe,pK,hK,fK,EK=se(()=>{Ql=b(require("pkijs")),Oh=require("node:crypto"),mK="1.3.101.112",Pfe="1.3.101.113",pK="Ed25519",hK="Ed448",fK=!1;a(Ch,"isEd25519OrEd448");a(Lfe,"isEdDSAAlgorithmName");a(IO,"getEdDSAAlgorithmName");a(Dfe,"applyEd25519Patch");Dfe()});var TK={};ye(TK,{CRLSignatureVerificationError:()=>Ph,performCRLCheck:()=>Ufe,verifyCRL:()=>CO});function Mfe(){return BT||(BT=vT(),BT.sourcedFrom(df)),BT}function vfe(){return FT||(FT=Xe({table:"hdb_crl_cache",database:"system",attributes:[{name:"distribution_point",isPrimaryKey:!0},{name:"issuer_dn"},{name:"crl_blob"},{name:"this_update"},{name:"next_update"},{name:"signature_valid"},{name:"expiresAt",expiresAt:!0,indexed:!0}]}),FT.sourcedFrom(NO)),FT}function gK(){return wO||(wO=Xe({table:"hdb_revoked_certificates",database:"system",attributes:[{name:"composite_id",isPrimaryKey:!0},{name:"serial_number",indexed:!0},{name:"issuer_key_id",indexed:!0},{name:"revocation_date"},{name:"revocation_reason"},{name:"crl_source",indexed:!0},{name:"crl_next_update"},{name:"expiresAt",expiresAt:!0,indexed:!0}]})),wO}async function CO(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=Sc(e,"CERTIFICATE"),i=Sc(t,"CERTIFICATE"),o=n??gO(s);if(o.length===0)return{valid:!0,status:"no-crl-distribution-points",method:"crl"};let c=MT(s,i,"crl"),l=await Mfe().get(c,{certPem:s,issuerPem:i,distributionPoint:o[0],config:{crl:r??{}}});if(!l)return Pr.error?.("Cache fetch returned null - this indicates a source configuration issue"),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"crl"}:(Pr.warn?.("CRL cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"});let u=l,d=l.wasLoadedFromSource?.();return Pr.trace?.(`CRL ${d?"source fetch":"cache hit"} for certificate`),{valid:u.status==="good",status:u.status,cached:!d,method:u.method||"crl"}}catch(s){return Pr.error?.(`CRL verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"crl"}:(Pr.warn?.("CRL check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"})}}async function Ufe(e,t,r,n){let s=n??gO(e);if(s.length===0)return{status:"good"};let i=eK(e),o=TO(t),c=SO(o,i);try{let u=await gK().get(c);if(u){let f=Date.now(),m=u;return m.crl_next_update>f?{status:"revoked",reason:m.revocation_reason||"unspecified",source:m.crl_source}:m.crl_next_update+r.gracePeriod>f?(Pr.warn?.("Using expired CRL data within grace period"),{status:"revoked",reason:m.revocation_reason||"unspecified",source:m.crl_source}):(Pr.warn?.("CRL data is too old, treating as unknown"),{status:"unknown",reason:"crl-expired"})}let d=await xfe(s,t,r);return d.upToDate?{status:"good",source:d.source}:(Pr.warn?.("CRL data is stale or missing, treating as unknown"),{status:"unknown",reason:d.reason||"crl-unavailable"})}catch(l){return Pr.error?.(`CRL lookup error: ${l}`),{status:"unknown",reason:l.message}}}async function xfe(e,t,r){let n=Date.now();for(let s of e)try{let i=vfe(),o=null,c=null;try{c=await i.get(s),(c&&c.next_update>n||c&&c.next_update+r.gracePeriod>n)&&(o=c)}catch{}o||(o=await SK(s,t,r.timeout));let l=o.next_update;if(l>n){if(!c)try{await i.put(s,o)}catch{}return{upToDate:!0,source:s}}else return l+r.gracePeriod>n?{upToDate:!0,source:s}:{upToDate:!1,reason:"crl-expired"}}catch(i){if(i instanceof Ph)throw i}return{upToDate:!1,reason:"no-current-crl-data"}}async function SK(e,t,r){let n=new AbortController,s=setTimeout(()=>n.abort(),r);try{let i=await fetch(e,{signal:n.signal,headers:{"User-Agent":uK}});if(clearTimeout(s),!i.ok)throw new Error(`CRL download failed: ${i.status}`);let o=Buffer.from(await i.arrayBuffer()),c,l=o.toString("utf8");l.includes("-----BEGIN X509 CRL-----")?c=Buffer.from(jl(l)):c=o;let u=kT.CertificateRevocationList.fromBER(c),d=kT.Certificate.fromBER(jl(t)),f=await u.verify({issuerCertificate:d});if(!f){let g=`CRL signature verification failed for: ${e}`;throw Pr.error?.(g),new Ph(g)}let m=u.thisUpdate.value.getTime(),p=u.nextUpdate?.value.getTime()??m+cK,h=d.issuer.typesAndValues.map(g=>`${g.type}=${g.value.valueBlock.value}`).join(","),E={distribution_point:e,issuer_dn:h,crl_blob:o,this_update:m,next_update:p,signature_valid:f,expiresAt:p};return Bfe(u,t,e,p).catch(g=>{Pr.error?.(`Error processing revoked certificates: ${g}`)}),E}finally{clearTimeout(s)}}async function Bfe(e,t,r,n){let s=gK(),i=TO(t),o=r;try{await Ffe(s,o)}catch(c){Pr.warn?.(`Failed to clear existing CRL entries: ${c}`)}if(e.revokedCertificates)for(let c of e.revokedCertificates)try{let l=c.userCertificate.valueBlock.valueHexView;if(!l){Pr.warn?.("Could not extract serial number from revoked certificate");continue}let u=Array.from(l).map(h=>h.toString(16).padStart(2,"0")).join(""),d=SO(i,u),f=c.revocationDate.value.getTime(),p={composite_id:d,serial_number:u,issuer_key_id:i,revocation_date:f,revocation_reason:"unspecified",crl_source:o,crl_next_update:n,expiresAt:n};await s.create(p.composite_id,p)}catch(l){Pr.warn?.(`Failed to process revoked certificate: ${l}`)}}async function Ffe(e,t){try{let r=e.search([{attribute:"crl_source",value:t}]);for await(let n of r)try{await e.delete(n.composite_id)}catch(s){Pr.warn?.(`Failed to delete revoked certificate entry: ${s}`)}}catch(r){throw Pr.error?.(`Failed to search for existing CRL entries: ${r}`),r}}var kT,_K,Ph,Pr,BT,NO,FT,wO,OO=se(()=>{kT=b(require("pkijs")),_K=b(wr());we();Ko();UT();AO();PO();Ph=class extends Error{static{a(this,"CRLSignatureVerificationError")}constructor(t){super(t),this.name="CRLSignatureVerificationError"}},Pr=(0,_K.loggerWithTag)("crl-verification");a(Mfe,"getCertificateCacheTable");NO=class extends ur{static{a(this,"CertificateRevocationListSource")}async get(t){let n=this.getContext()?.requestContext;if(!n?.distributionPoint||!n?.issuerPem)throw new Error(`No CRL data provided for cache key: ${t}`);let{distributionPoint:s,issuerPem:i,config:o}=n;try{let c=await SK(s,i,o.timeout),l=c.next_update,u=Date.now()+o.cacheTtl,d=Math.min(l,u);return{...c,expiresAt:d}}catch(c){if(Pr.error?.(`CRL fetch error for: ${s} - ${c}`),o.failureMode==="fail-closed"){let l=Date.now()+lK;return{crl_id:t,distribution_point:s,issuer_dn:"unknown",crl_blob:Buffer.alloc(0),this_update:Date.now(),next_update:l,signature_valid:!1,expiresAt:l}}return Pr.warn?.("CRL fetch failed, not caching (fail-open mode)"),null}}};a(vfe,"getCRLCacheTable");a(gK,"getRevokedCertificateTable");a(CO,"verifyCRL");a(Ufe,"performCRLCheck");a(xfe,"checkCRLFreshness");a(SK,"downloadAndParseCRL");a(Bfe,"processRevokedCertificates");a(Ffe,"clearExistingCRLEntries")});async function kfe(){LO||(LO=(await Promise.resolve().then(()=>(OO(),TK))).performCRLCheck),DO||(DO=(await Promise.resolve().then(()=>(MO(),RK))).performOCSPCheck)}var yK,WBe,LO,DO,df,PO=se(()=>{Ko();yK=b(wr()),WBe=(0,yK.loggerWithTag)("cert-verification-source");a(kfe,"loadVerificationFunctions");df=class extends ur{static{a(this,"CertificateVerificationSource")}async get(t){let r=t.id,s=this.getContext()?.requestContext;if(!s||!s.certPem||!s.issuerPem)return null;let{certPem:i,issuerPem:o,ocspUrls:c,config:l}=s,u;r.startsWith("crl:")?u="crl":r.startsWith("ocsp:")?u="ocsp":u="unknown",await kfe();let d,f;if(u==="crl"){f=l.crl;let p=s.distributionPoint?[s.distributionPoint]:void 0;d=await LO(i,o,f,p)}else if(u==="ocsp")f=l.ocsp,d=await DO(i,o,f,c);else throw new Error(`Unsupported verification method: ${u} for ID: ${r}`);let m=Date.now()+f.cacheTtl;return{certificate_id:r,status:d.status,reason:d.reason,checked_at:Date.now(),expiresAt:m,method:u}}}});var RK={};ye(RK,{performOCSPCheck:()=>qfe,verifyOCSP:()=>vO});function Hfe(){return qT||(qT=vT(),qT.sourcedFrom(df)),qT}async function vO(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=Sc(e,"CERTIFICATE"),i=Sc(t,"CERTIFICATE"),o=MT(s,i,"ocsp"),c=await Hfe().get(o,{certPem:s,issuerPem:i,ocspUrls:n,config:{ocsp:r??{}}});if(!c)return r.failureMode==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(HT.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return HT.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(s){return HT.error?.(`OCSP verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"ocsp"}:(HT.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function qfe(e,t,r,n){try{let s=await(0,bK.getCertStatus)(e,{ca:t,timeout:r.timeout,...n?.length&&{ocspUrl:n[0]}});switch(s.status){case"good":return{status:"good"};case"revoked":return{status:"revoked",reason:s.revocationReason?.toString()||"unspecified"};default:return{status:"unknown",reason:"unknown-status"}}}catch(s){return{status:"unknown",reason:s.name==="AbortError"?"timeout":"ocsp-error"}}}var bK,AK,HT,qT,MO=se(()=>{EK();bK=require("easy-ocsp"),AK=b(wr());UT();PO();HT=(0,AK.loggerWithTag)("ocsp-verification");a(Hfe,"getCertificateCacheTable");a(vO,"verifyOCSP");a(qfe,"performOCSPCheck")});async function ff(e,t){cn.debug?.(`verifyCertificate called for: ${e.subject?.CN||"unknown"}`);let r=dK(t);if(r===!1)return cn.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=X1(e);if(cn.trace?.(`Certificate chain length: ${n.length}`),n.length<2||!n[0].issuer)return cn.debug?.("Certificate chain insufficient for revocation checking - need certificate and issuer"),{valid:!0,status:"no-issuer-cert",method:"disabled"};let s=Sc(n[0].cert,"CERTIFICATE"),{crlUrls:i,ocspUrls:o}=Z1(s);if(cn.debug?.(`Certificate extensions: CRL distribution points=${i.length}, OCSP URLs=${o.length}`),i.length>0)if(r.crl.enabled)try{cn.debug?.("Attempting CRL verification");let c=await CO(n[0].cert,n[0].issuer,r.crl,i);if(c.status==="good"||c.status==="revoked")return cn.debug?.(`CRL verification result: ${c.status}`),c;cn.debug?.(`CRL verification inconclusive: ${c.status}, trying OCSP fallback`)}catch(c){cn.warn?.(`CRL verification failed: ${c}`)}else cn.debug?.("Skipping CRL - disabled in configuration");else cn.debug?.("Skipping CRL - no distribution points in certificate");if(o.length>0)if(r.ocsp.enabled)try{cn.debug?.("Attempting OCSP verification");let c=await vO(n[0].cert,n[0].issuer,r.ocsp,o);return cn.debug?.(`OCSP verification result: ${c.status}`),c}catch(c){cn.warn?.(`OCSP verification failed: ${c}`)}else cn.debug?.("Skipping OCSP - disabled in configuration");else cn.debug?.("Skipping OCSP - no responder URLs in certificate");return r.failureMode==="fail-closed"?{valid:!1,status:"no-verification-available",method:"disabled"}:{valid:!0,status:"verification-unavailable-allowed",method:"disabled"}}var IK,cn,GT=se(()=>{IK=b(wr());UT();AO();MO();OO();cn=(0,IK.loggerWithTag)("cert-verification");a(ff,"verifyCertificate")});var na={};ye(na,{buildReplicationMtlsConfig:()=>vK,clearThisNodeName:()=>Qfe,disableReplication:()=>Kfe,enabledDatabases:()=>_c,forEachReplicatedDatabase:()=>fc,getThisNodeId:()=>DT,getThisNodeName:()=>nt,getThisNodeUrl:()=>mc,hostnameToUrl:()=>YT,lastTimeInAuditStore:()=>_h,monitorNodeCAs:()=>UK,replicateOperation:()=>Xfe,replicationCertificateAuthorities:()=>sa,sendOperationToNode:()=>Lh,servers:()=>$fe,setReplicator:()=>BK,start:()=>Vfe,startOnMainThread:()=>KC,subscribeToNode:()=>yh,unsubscribeFromNode:()=>TT,urlToNodeName:()=>Ai});function vK(e){return e?.mtls&&typeof e.mtls=="object"?e.mtls:!0}function Vfe(e){if(!e.port&&!e.securePort&&(e.port=Ys.default.get(F.OPERATIONSAPI_NETWORK_PORT),e.securePort=Ys.default.get(F.OPERATIONSAPI_NETWORK_SECUREPORT)),!nt())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let i of Sh(e))t.set(Ai(i.url),i);Yfe(e);let r=vK(e);e={isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e,mtls:r};let n=Be.ws(async(i,o,c,l)=>{if(wt.debug("Incoming WS connection received "+o.url),o.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return l(i,o,c);i._socket.unref(),Nh(i,e,c.then(()=>o?.user)),i.on("error",u=>{u.code!=="ECONNREFUSED"&&wt.error("Error in connection to "+this.url,u.message)})},e);e.runFirst=!0,Be.http(async(i,o)=>{if(i.isWebSocket&&i.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){wt.debug("Incoming replication WS connection received, authorized: "+i.authorized),!i.authorized&&i._nodeRequest.socket.authorizationError&&wt.error(`Incoming client connection from ${i.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,i._nodeRequest.socket.authorizationError);let c=qt().primaryStore;if(i.authorized&&i.peerCertificate.subjectaltname){let l=(0,DK.getHostnamesFromCertificate)(i.peerCertificate),u;for(let d of l)if(u=d&&(c.get(d)||t.get(d)),u)break;if(u){let d=await ff(i.peerCertificate,e.mtls);if(!d.valid){wt.warn("Certificate verification failed:",d.status,"for node",u.name,"certificate serial number",i.peerCertificate.serialNumber);return}if(u?.revoked_certificates?.includes(i.peerCertificate.serialNumber)){wt.warn("Revoked certificate used in attempt to connect to node",u.name,"certificate serial number",i.peerCertificate.serialNumber);return}else i.user=u}else wt.warn(`No node found for certificate common name/SANs: ${l}, available nodes are ${Array.from(c.getRange({}).filter(({value:d})=>d).map(({key:d})=>d)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let l=c.get(i.ip)||t.get(i.ip);l?i.user=l:wt.warn(`No node found for IP address ${i.ip}, available nodes are ${Array.from(new Set([...c.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return o(i)},e);let s=[];for(let i of n)if(i.secureContexts){let o=a(()=>{let c=new Set(i.secureContexts.values());i.defaultContext&&c.add(i.defaultContext);for(let l of c)try{let u=Array.from(sa);l.options.availableCAs&&u.push(...l.options.availableCAs.values());let d={...l.options,ca:u};l.updatedContext=KT.createSecureContext(d)}catch(u){wt.error("Error creating replication TLS config",u)}},"updateContexts");i.secureContextsListeners.push(o),s.push(o),Ys.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1&&o()}UK(()=>{for(let i of s)i()})}function UK(e){let t=0;ef(r=>{r?.ca&&(sa.add(r.ca),sa.size!==t&&(t=sa.size,e?.()))})}function Kfe(e=!0){MK=e}function Yfe(e){MK||(lt(),_c=e.databases,fc(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||gc;for(let[s,i]of VT){let o=i.get(r);o&&(o.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];BK(r,s,e),pO.get(s)?.forEach(i=>i(s))}}))}function BK(e,t,r){if(!t)return console.error(`Attempt to replicate non-existent table ${t.name} from database ${e}`);if(t.replicate===!1||t.sources?.some(s=>s.isReplicator))return;let n;t.sourcedFrom(class xK extends ur{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||gc,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(wt.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new ns,i.set(e,o),o.tableById=c,o.auditStore=t.auditStore,o.dbisDB=t.dbisDB,o.databaseName=e,l&&l(o),o;this.subscription=o}static subscribeOnThisThread(i,o){return!0}static async load(i){if(i){let o=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),o]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===Be.hostname)continue;let E=zfe(h,xK.subscription,e);if(E?.isConnected){let g=Zd(t.auditStore,e,h)[PT];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new PK.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:Gfe++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;wt.warn("Error in load from node",Jl,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function Wfe(e,t,r,n,s,i){let o=t+"-"+e,c=VT.get(o);c||(c=new Map,VT.set(o,c));let l=c.get(n);if(l)return l;if(r)return c.set(n,l=new cf(t,r,n,s,i)),l.connect(),l.once("finished",()=>c.delete(n)),l}function zfe(e,t,r){let n=wK.get(Jl);n||(n=new Map,wK.set(Jl,n));let s=n.get(r);if(s)return s;let i=qt().primaryStore.get(e);return i?.url&&(s=new cf(i.url,t,r,Jl,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Lh(e,t,r){r||(r={}),r.serverName=e.name;let n=await LT(e.url,r),s=Nh(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{wt.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{wt.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function yh(e){try{LK.isMainThread&&wt.warn("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=gc.get(e.database);if(!t){let n;t=new Promise(s=>{wt.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,gc.set(e.database,t)}let r=Wfe(e.nodes[0].url,e.url,t,e.database,e.name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>gh(n,e.database)),e.replicateByDefault)}catch(t){wt.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function TT({url:e,nodes:t,database:r}){wt.trace("Unsubscribing from node",e,r,"nodes",Array.from(qt().primaryStore.getRange({})));let n=e+"-"+(t[0]?.url??e),s=VT.get(n);if(s){let i=s.get(r);i&&(i.unsubscribe(),s.delete(r))}}function jfe(){if(UO!==void 0)return UO;let e=Ys.default.get(F.OPERATIONSAPI_TLS_CERTIFICATE)||Ys.default.get(F.TLS_CERTIFICATE);if(e)return UO=new CK.X509Certificate((0,OK.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function nt(){return Jl||(Jl=Ys.default.get("replication_hostname")??Ai(Ys.default.get("replication_url"))??jfe()??NK("operationsapi_network_secureport")??NK("operationsapi_network_port")??"127.0.0.1")}function Qfe(){Jl=void 0}function NK(e){let t=Ys.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function $T(e){let t=Ys.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function DT(e){return Eh(e)?.[nt()]}function mc(){let e=Ys.default.get("replication_url");return e||YT(nt())}function YT(e){let t=$T("replication_port");if(t)return`ws://${e}:${t}`;if(t=$T("replication_secureport"),t)return`wss://${e}:${t}`;if(t=$T("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=$T("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Ai(e){if(e)return new URL(e).hostname}function fc(e,t){for(let n of Object.getOwnPropertyNames(ve))r(n);return Xp(n=>{r(n)}),Hl((n,s)=>{r(n.databaseName)});function r(n){let s=ve[n];wt.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):Jfe(n)&&t(s,n,!1)}a(r,"forDatabase")}function Jfe(e){let t=ve[e];for(let r in t)if(t[r].replicate)return!0}function _h(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Xfe(e){let t={message:""};if(e.replicated){e.replicated=!1,wt.trace?.("Replicating operation",e.operation,"to nodes",Be.nodes.map(n=>n.name));let r=await Promise.allSettled(Be.nodes.map(n=>Lh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Be.nodes[s]?.name,i})}return t}var Ys,wt,CK,OK,KT,PK,LK,DK,MK,Gfe,$fe,sa,_c,VT,wK,UO,Jl,Ss=se(()=>{we();Ko();Fu();hO();Hr();Ys=b(ae()),wt=b(J()),CK=require("crypto");GT();OK=require("fs");Rh();tf();H();VC();KT=b(require("node:tls")),PK=b(_e()),LK=require("worker_threads"),DK=b(ys()),Gfe=1,$fe=[],sa=Ys.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1?new Set(KT.rootCertificates):new Set;a(vK,"buildReplicationMtlsConfig");a(Vfe,"start");a(UK,"monitorNodeCAs");a(Kfe,"disableReplication");a(Yfe,"assignReplicationSource");a(BK,"setReplicator");VT=new Map;a(Wfe,"getSubscriptionConnection");wK=new Map;a(zfe,"getRetrievalConnectionByName");a(Lh,"sendOperationToNode");a(yh,"subscribeToNode");a(TT,"unsubscribeFromNode");a(jfe,"getCommonNameFromCert");a(nt,"getThisNodeName");a(Qfe,"clearThisNodeName");Object.defineProperty(Be,"hostname",{get(){return nt()}});a(NK,"getHostFromListeningPort");a($T,"getPortFromListeningPort");a(DT,"getThisNodeId");Be.replication={getThisNodeId:DT,exportIdMapping:Eh};a(mc,"getThisNodeUrl");a(YT,"hostnameToUrl");a(Ai,"urlToNodeName");a(fc,"forEachReplicatedDatabase");a(Jfe,"hasExplicitlyReplicatedTable");a(_h,"lastTimeInAuditStore");a(Xfe,"replicateOperation")});var Mh=v((_Fe,GK)=>{"use strict";var mf=pV(),{validateBySchema:Dh}=ot(),{commonValidators:pf,schemaRegex:xO}=Xi(),_r=require("joi"),Zfe=J(),eme=require("uuid").v4,jT=zo(),hf=(H(),M(W)),tme=require("util"),Tc=fs(),{handleHDBError:aa,hdbErrors:rme,ClientError:Xl}=_e(),{HDB_ERROR_MSGS:WT,HTTP_STATUS_CODES:ca}=rme,{SchemaEventMsg:QT}=ls(),FK=Ht(),{getDatabases:nme}=(we(),M(mt)),{transformReq:Ef}=oe(),{replicateOperation:kK}=(Ss(),M(na)),{cleanupOrphans:sme}=(ss(),M(Q_)),zT=_r.string().min(1).max(pf.schema_length.maximum).pattern(xO).messages({"string.pattern.base":"{:#label} "+pf.schema_format.message}),ime=_r.string().min(1).max(pf.schema_length.maximum).pattern(xO).messages({"string.pattern.base":"{:#label} "+pf.schema_format.message}).required(),ome=_r.string().min(1).max(pf.schema_length.maximum).pattern(xO).messages({"string.pattern.base":"{:#label} "+pf.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();GK.exports={createSchema:ame,createSchemaStructure:HK,createTable:cme,createTableStructure:qK,createAttribute:mme,dropSchema:lme,dropTable:ume,dropAttribute:dme,getBackup:pme,cleanupOrphanBlobs:hme};async function ame(e){let t=await HK(e);return jT.signalSchemaChange(new QT(process.pid,e.operation,e.schema)),t}a(ame,"createSchema");async function HK(e){let t=Dh(e,_r.object({database:zT,schema:zT}));if(t)throw new Xl(t.message);if(Ef(e),!await mf.checkSchemaExists(e.schema))throw aa(new Error,WT.SCHEMA_EXISTS_ERR(e.schema),ca.BAD_REQUEST,hf.LOG_LEVELS.ERROR,WT.SCHEMA_EXISTS_ERR(e.schema),!0);return await Tc.createSchema(e),`database '${e.schema}' successfully created`}a(HK,"createSchemaStructure");async function cme(e){return Ef(e),e.hash_attribute=e.primary_key??e.hash_attribute,await qK(e)}a(cme,"createTable");async function qK(e){let t=Dh(e,_r.object({database:zT,schema:zT,table:ime,residence:_r.array().items(_r.string().min(1)).optional(),hash_attribute:ome}));if(t)throw new Xl(t.message);if(!await mf.checkSchemaTableExists(e.schema,e.table))throw aa(new Error,WT.TABLE_EXISTS_ERR(e.schema,e.table),ca.BAD_REQUEST,hf.LOG_LEVELS.ERROR,WT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:eme(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Tc.createTable(n,e);else throw aa(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",ca.BAD_REQUEST);else await Tc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(qK,"createTableStructure");async function lme(e){let t=Dh(e,_r.object({database:_r.string(),schema:_r.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Xl(t.message);Ef(e);let r=await mf.checkSchemaExists(e.schema);if(r)throw aa(new Error,r,ca.NOT_FOUND,hf.LOG_LEVELS.ERROR,r,!0);let n=await mf.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await Tc.dropSchema(e),jT.signalSchemaChange(new QT(process.pid,e.operation,e.schema)),await FK.purgeSchemaTableStreams(e.schema,s);let i=await kK(e);return i.message=`successfully deleted '${e.schema}'`,i}a(lme,"dropSchema");async function ume(e){let t=Dh(e,_r.object({database:_r.string(),schema:_r.string(),table:_r.string().required()}));if(t)throw new Xl(t.message);Ef(e);let r=await mf.checkSchemaTableExists(e.schema,e.table);if(r)throw aa(new Error,r,ca.NOT_FOUND,hf.LOG_LEVELS.ERROR,r,!0);await Tc.dropTable(e),await FK.purgeTableStream(e.schema,e.table);let n=await kK(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(ume,"dropTable");async function dme(e){let t=Dh(e,_r.object({database:_r.string(),schema:_r.string(),table:_r.string().required(),attribute:_r.string().required()}));if(t)throw new Xl(t.message);Ef(e);let r=await mf.checkSchemaTableExists(e.schema,e.table);if(r)throw aa(new Error,r,ca.NOT_FOUND,hf.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw aa(new Error,"You cannot drop a hash attribute",ca.BAD_REQUEST,void 0,void 0,!0);if(hf.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw aa(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,ca.BAD_REQUEST,void 0,void 0,!0);try{return await Tc.dropAttribute(e),fme(e),jT.signalSchemaChange(new QT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Zfe.error(`Got an error deleting attribute ${tme.inspect(e)}.`),n}}a(dme,"dropAttribute");function fme(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(fme,"dropAttributeFromGlobal");async function mme(e){Ef(e);let t=nme()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw aa(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,ca.BAD_REQUEST,void 0,void 0,!0);return await Tc.createAttribute(e),jT.signalSchemaChange(new QT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(mme,"createAttribute");function pme(e){return Tc.getBackup(e)}a(pme,"getBackup");function hme(e){if(!e.database)throw new Xl('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new Xl(`Unknown database '${e.database}'`);return sme(databases[e.database]),{message:"Orphaned blobs cleanup started, check logs for progress"}}a(hme,"cleanupOrphanBlobs")});var VK=v((SFe,$K)=>{"use strict";var{OPERATIONS_ENUM:Eme}=(H(),M(W)),BO=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Eme.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};$K.exports=BO});var FO=v((RFe,jK)=>{"use strict";var _me=fs(),yFe=VK(),JT=oe(),XT=(H(),M(W)),gme=ae(),{handleHDBError:KK,hdbErrors:Sme}=_e(),{HDB_ERROR_MSGS:YK,HTTP_STATUS_CODES:WK}=Sme,Tme=Object.values(XT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),zK="To use this operation audit log must be enabled in harperdb-config.yaml";jK.exports=yme;async function yme(e){if(JT.isEmpty(e.schema))throw new Error(YK.SCHEMA_REQUIRED_ERR);if(JT.isEmpty(e.table))throw new Error(YK.TABLE_REQUIRED_ERR);if(!gme.get(XT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw KK(new Error,zK,WK.BAD_REQUEST,XT.LOG_LEVELS.ERROR,zK,!0);let t=JT.checkSchemaTableExist(e.schema,e.table);if(t)throw KK(new Error,t,WK.NOT_FOUND,XT.LOG_LEVELS.ERROR,t,!0);if(!JT.isEmpty(e.search_type)&&Tme.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await _me.readAuditLog(e)}a(yme,"readAuditLog")});var JK=v((AFe,QK)=>{"use strict";var{OPERATIONS_ENUM:Rme}=(H(),M(W)),kO=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Rme.GET_BACKUP,this.schema=t,this.table=r}};QK.exports=kO});var eY=v((CFe,ZK)=>{"use strict";var bme=fs(),wFe=JK(),HO=oe(),Ame=(H(),M(W)),NFe=ae(),{handleHDBError:Ime,hdbErrors:wme}=_e(),{HDB_ERROR_MSGS:XK,HTTP_STATUS_CODES:Nme}=wme;ZK.exports=Cme;async function Cme(e){if(HO.isEmpty(e.schema))throw new Error(XK.SCHEMA_REQUIRED_ERR);if(HO.isEmpty(e.table))throw new Error(XK.TABLE_REQUIRED_ERR);let t=HO.checkSchemaTableExist(e.schema,e.table);if(t)throw Ime(new Error,t,Nme.NOT_FOUND,Ame.LOG_LEVELS.ERROR,t,!0);return await bme.getBackup(readAuditLogObject)}a(Cme,"getBackup")});var sY=v((PFe,nY)=>{"use strict";var Ome=ae(),yc=require("joi"),Pme=ot(),tY=require("moment"),Lme=require("fs-extra"),qO=require("path"),Dme=require("lodash"),vh=(H(),M(W)),{LOG_LEVELS:Zl}=(H(),M(W)),Mme="YYYY-MM-DD hh:mm:ss",vme=qO.resolve(__dirname,"../logs");nY.exports=function(e){return Pme.validateBySchema(e,Ume)};var Ume=yc.object({from:yc.custom(rY),until:yc.custom(rY),level:yc.valid(Zl.NOTIFY,Zl.FATAL,Zl.ERROR,Zl.WARN,Zl.INFO,Zl.DEBUG,Zl.TRACE),order:yc.valid("asc","desc"),limit:yc.number().min(1),start:yc.number().min(0),log_name:yc.custom(xme)});function rY(e,t){if(tY(e,tY.ISO_8601).format(Mme)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(rY,"validateDatetime");function xme(e,t){if(Dme.invert(vh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Ome.get(vh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?vh.LOG_NAMES.HDB:e,i=s===vh.LOG_NAMES.INSTALL?qO.join(vme,vh.LOG_NAMES.INSTALL):qO.join(n,s);return Lme.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(xme,"validateReadLogPath")});var $O=v((DFe,oY)=>{"use strict";var ZT=(H(),M(W)),Bme=J(),Fme=ae(),kme=sY(),GO=require("path"),iY=require("fs-extra"),{once:Hme}=require("events"),{handleHDBError:qme,hdbErrors:Gme}=_e(),{PACKAGE_ROOT:$me}=Rt(),{replicateOperation:Vme}=(Ss(),M(na)),Kme=GO.join($me,"logs"),Yme=1e3,Wme=200;oY.exports=zme;async function zme(e){let t=kme(e);if(t)throw qme(t,t.message,Gme.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Vme(e),n=Fme.get(ZT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?ZT.LOG_NAMES.HDB:e.log_name,i=s===ZT.LOG_NAMES.INSTALL?GO.join(Kme,ZT.LOG_NAMES.INSTALL):GO.join(n,s),o=e.level!==void 0,c=o?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?Yme:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,g=0;p==="desc"&&!u&&!f&&(g=Math.max(iY.statSync(i).size-(E+5)*Wme,0));let R=iY.createReadStream(i,{start:g});R.on("error",q=>{Bme.error(q)});let S=0,y=[],N="",I;R.on("data",q=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;q=N+q;let j=0,Y;for(;(Y=k.exec(q))&&!R.destroyed;){I&&(I.message=q.slice(j,Y.index),$(I));let[le,fe,te]=Y,ge=te.split("] ["),be=ge[0],Ye=ge[1];ge.splice(0,2),I={timestamp:fe,thread:be,level:Ye,tags:ge,message:""},j=Y.index+le.length}N=q.slice(j)}),R.on("end",q=>{R.destroyed||I&&(I.message=N.trim(),$(I))}),R.resume();function $(q){let k,j,Y;switch(!0){case(o&&l&&d):k=new Date(q.timestamp),j=new Date(u),Y=new Date(f),q.level===c&&k>=j&&k<=Y&&S<h?S++:q.level===c&&k>=j&&k<=Y&&(_o(q,p,y),S++,S===E&&R.destroy());break;case(o&&l):k=new Date(q.timestamp),j=new Date(u),q.level===c&&k>=j&&S<h?S++:q.level===c&&k>=j&&(_o(q,p,y),S++,S===E&&R.destroy());break;case(o&&d):k=new Date(q.timestamp),Y=new Date(f),q.level===c&&k<=Y&&S<h?S++:q.level===c&&k<=Y&&(_o(q,p,y),S++,S===E&&R.destroy());break;case(l&&d):k=new Date(q.timestamp),j=new Date(u),Y=new Date(f),k>=j&&k<=Y&&S<h?S++:k>=j&&k<=Y&&(_o(q,p,y),S++,S===E&&R.destroy());break;case o:q.level===c&&S<h?S++:q.level===c&&(_o(q,p,y),S++,S===E&&R.destroy());break;case l:k=new Date(q.timestamp),j=new Date(u),k>=j&&S<h?S++:k>=j&&S>=h&&(_o(q,p,y),S++,S===E&&R.destroy());break;case d:k=new Date(q.timestamp),Y=new Date(f),k<=Y&&S<h?S++:k<=Y&&S>=h&&(_o(q,p,y),S++,S===E&&R.destroy());break;default:S<h?S++:(_o(q,p,y),S++,S===E&&R.destroy())}}a($,"onLogMessage"),await Hme(R,"close");let ee=await r;if(ee.replicated){for(let q of y)q.node=server.hostname;for(let q of ee.replicated){let k=q.node;if(q.status==="failed")_o({timestamp:new Date().toISOString(),level:"error",node:k,message:`Error retrieving logs: ${q.reason}`},p,y);else for(let j of q.results)j.node=k,_o(j,p,y)}}return y}a(zme,"readLog");function _o(e,t,r){t==="desc"?jme(e,r):t==="asc"?Qme(e,r):r.push(e)}a(_o,"pushLineToResult");function jme(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(jme,"insertDescending");function Qme(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(Qme,"insertAscending")});var ey=v((FFe,uY)=>{"use strict";var VO=require("joi"),{string:_f,boolean:aY,date:Jme}=VO.types(),Xme=ot(),{validateSchemaExists:vFe,validateTableExists:UFe,validateSchemaName:xFe}=Xi(),Zme=(H(),M(W)),epe=pt(),cY=ae();cY.initSync();var BFe=_f.invalid(cY.get(Zme.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(epe.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),lY={operation:_f.valid("add_node","update_node","set_node_replication"),node_name:_f.optional(),subscriptions:VO.array().items({table:_f.optional(),schema:_f.optional(),database:_f.optional(),subscribe:aY.required(),publish:aY.required().custom(rpe),start_time:Jme.iso()})};function tpe(e){return Xme.validateBySchema(e,VO.object(lY))}a(tpe,"addUpdateNodeValidator");function rpe(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(rpe,"checkForFalsy");uY.exports={addUpdateNodeValidator:tpe,validationSchema:lY}});var Rc=v((HFe,dY)=>{"use strict";var KO=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},YO=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};dY.exports={Node:KO,NodeSubscription:YO}});var mY=v((GFe,fY)=>{"use strict";var npe=(H(),M(W)).OPERATIONS_ENUM,WO=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=npe.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};fY.exports=WO});var Uh=v((VFe,pY)=>{"use strict";var zO=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},jO=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)}};pY.exports={RemotePayloadObject:zO,RemotePayloadSubscription:jO}});var EY=v((YFe,hY)=>{"use strict";var QO=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}};hY.exports=QO});var gY=v((XFe,_Y)=>{"use strict";var spe=EY(),zFe=Wt(),jFe=_t(),ipe=J(),{getSchemaPath:QFe,getTransactionAuditStorePath:JFe}=bt(),{getDatabases:ope}=(we(),M(mt));_Y.exports=ape;async function ape(e){let t=new spe;try{let r=ope()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats();t.schema=e.schema,t.table=e.name,t.record_count=n.entryCount,t.transaction_log_record_count=s.entryCount}catch(r){ipe.warn(`unable to stat table dbi due to ${r}`)}return t}a(ape,"lmdbGetTableSize")});var TY=v((eke,SY)=>{"use strict";var JO=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}};SY.exports=JO});var Bh=v((oke,AY)=>{"use strict";var cpe=require("fs-extra"),lpe=require("path"),wn=require("systeminformation"),bc=J(),yY=Ht(),rke=pt(),gf=(H(),M(W)),upe=gY(),dpe=dc(),{getThreadInfo:RY}=tt(),xh=ae();xh.initSync();var fpe=TY(),{openEnvironment:nke}=_t(),{getSchemaPath:ske}=bt(),{database:ike,databases:XO}=(we(),M(mt)),ty;AY.exports={getHDBProcessInfo:rP,getNetworkInfo:sP,getDiskInfo:nP,getMemoryInfo:tP,getCPUInfo:eP,getTimeInfo:ZO,getSystemInformation:iP,systemInformation:mpe,getTableSize:oP,getMetrics:aP};function ZO(){return wn.time()}a(ZO,"getTimeInfo");async function eP(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...d}=await wn.cpu();d.cpu_speed=await wn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:R,...S}=await wn.currentLoad();return S.cpus=[],R.forEach(y=>{let{rawLoad:N,rawLoadIdle:I,rawLoadIrq:$,rawLoadNice:ee,rawLoadSystem:q,rawLoadUser:k,...j}=y;S.cpus.push(j)}),d.current_load=S,d}catch(e){return bc.error(`error in getCPUInfo: ${e}`),{}}}a(eP,"getCPUInfo");async function tP(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await wn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return bc.error(`error in getMemoryInfo: ${e}`),{}}}a(tP,"getMemoryInfo");async function rP(){let e={core:[],clustering:[]};try{let t=await wn.processes(),r;try{r=Number.parseInt(await cpe.readFile(lpe.join(xh.get(gf.CONFIG_PARAMS.ROOTPATH),gf.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===gf.NODE_ERROR_CODES.ENOENT)bc.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 bc.error(`error in getHDBProcessInfo: ${t}`),e}}a(rP,"getHDBProcessInfo");async function nP(){let e={};try{if(!xh.get(gf.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await wn.disksIO();e.io=i;let{rxSec:o,txSec:c,wxSec:l,...u}=await wn.fsStats();return e.read_write=u,e.size=await wn.fsSize(),e}catch(t){return bc.error(`error in getDiskInfo: ${t}`),e}}a(nP,"getDiskInfo");async function sP(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return xh.get(gf.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await wn.networkInterfaceDefault(),e.latency=await wn.inetChecksite("google.com"),(await wn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await wn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return bc.error(`error in getNetworkInfo: ${t}`),e}}a(sP,"getNetworkInfo");async function iP(){if(ty!==void 0)return ty;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await wn.osInfo();e=c;let l=await wn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,ty=e,ty}catch(t){return bc.error(`error in getSystemInformation: ${t}`),e}}a(iP,"getSystemInformation");async function oP(){let e=[],t=await dpe.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await upe(n));return e}a(oP,"getTableSize");async function aP(){let e={};for(let t in XO){let r=e[t]={},n=r.tables={};for(let s in XO[t])try{let i=XO[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){bc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(aP,"getMetrics");async function bY(){if(xh.get(gf.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await yY.getNATSReferences(),t=await yY.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(bY,"getNatsStreamInfo");async function mpe(e){let t=new fpe;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await iP(),t.time=ZO(),t.cpu=await eP(),t.memory=await tP(),t.disk=await nP(),t.network=await sP(),t.harperdb_processes=await rP(),t.table_size=await oP(),t.metrics=await aP(),t.threads=await RY(),t.replication=await bY(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await iP();break;case"time":t.time=ZO();break;case"cpu":t.cpu=await eP();break;case"memory":t.memory=await tP();break;case"disk":t.disk=await nP();break;case"network":t.network=await sP();break;case"harperdb_processes":t.harperdb_processes=await rP();break;case"table_size":t.table_size=await oP();break;case"database_metrics":case"metrics":t.metrics=await aP();break;case"threads":t.threads=await RY();break;case"replication":t.replication=await bY();break;default:break}return t}a(mpe,"systemInformation")});var Ws=v((dke,CY)=>{"use strict";var ppe=_n(),cP=oe(),hpe=require("util"),eu=(H(),M(W)),IY=ae();IY.initSync();var Epe=dC(),wY=Sn(),{Node:cke,NodeSubscription:lke}=Rc(),_pe=dd(),gpe=mY(),{RemotePayloadObject:Spe,RemotePayloadSubscription:Tpe}=Uh(),{handleHDBError:ype,hdbErrors:Rpe}=_e(),{HTTP_STATUS_CODES:bpe,HDB_ERROR_MSGS:Ape}=Rpe,Ipe=pi(),wpe=Bh(),{packageJson:Npe}=Rt(),{getDatabases:Cpe}=(we(),M(mt)),uke=hpe.promisify(Epe.authorize),Ope=wY.searchByHash,Ppe=wY.searchByValue;CY.exports={isEmpty:Lpe,getNodeRecord:Dpe,upsertNodeRecord:Mpe,buildNodePayloads:vpe,checkClusteringEnabled:Upe,getAllNodeRecords:xpe,getSystemInfo:Bpe,reverseSubscription:NY};function Lpe(e){return e==null}a(Lpe,"isEmpty");async function Dpe(e){let t=new _pe(eu.SYSTEM_SCHEMA_NAME,eu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Ope(t)}a(Dpe,"getNodeRecord");async function Mpe(e){let t=new gpe(eu.SYSTEM_SCHEMA_NAME,eu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return ppe.upsert(t)}a(Mpe,"upsertNodeRecord");function NY(e){if(cP.isEmpty(e.subscribe)||cP.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(NY,"reverseSubscription");function vpe(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:u}=c,d=cP.getTableHashAttribute(l,u),{subscribe:f,publish:m}=NY(c),p=Cpe()[l]?.[u],h=new Tpe(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new Spe(r,t,s,n)}a(vpe,"buildNodePayloads");function Upe(){if(!IY.get(eu.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ype(new Error,Ape.CLUSTERING_NOT_ENABLED,bpe.BAD_REQUEST,void 0,void 0,!0)}a(Upe,"checkClusteringEnabled");async function xpe(){let e=new Ipe(eu.SYSTEM_SCHEMA_NAME,eu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Ppe(e))}a(xpe,"getAllNodeRecords");async function Bpe(){let e=await wpe.getSystemInformation();return{hdb_version:Npe.version,node_version:e.node_version,platform:e.platform}}a(Bpe,"getSystemInfo")});var lP=v((mke,xY)=>{"use strict";var ry=Ht(),OY=oe(),PY=pt(),LY=(H(),M(W)),ny=J(),DY=Mh(),Fpe=md(),{RemotePayloadObject:kpe}=Uh(),{handleHDBError:MY,hdbErrors:Hpe}=_e(),{HTTP_STATUS_CODES:vY}=Hpe,{NodeSubscription:UY}=Rc();xY.exports=qpe;async function qpe(e,t){let r;try{r=await ry.request(`${t}.${PY.REQUEST_SUFFIX}`,new kpe(LY.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),ny.trace("Response from remote describe all request:",r)}catch(o){ny.error(`addNode received error from describe all request to remote node: ${o}`);let c=ry.requestErrorHandler(o,"add_node",t);throw MY(new Error,c,vY.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===PY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw MY(new Error,o,vY.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===LY.SYSTEM_SCHEMA_NAME){await ry.createLocalTableStream(l,c);let h=new UY(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let u=OY.doesSchemaExist(l),d=n[l]!==void 0,f=c?OY.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(o);continue}if(!u&&d&&(ny.trace(`addNode creating schema: ${l}`),await DY.createSchema({operation:"create_schema",schema:l})),!f&&m){ny.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Fpe(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await DY.createTable(h)}await ry.createLocalTableStream(l,c);let p=new UY(l,c,o.publish,o.subscribe);p.start_time=o.start_time,i.push(p)}return{added:i,skipped:s}}a(qpe,"reviewSubscriptions")});var Sf={};ye(Sf,{addNodeBack:()=>uP,removeNodeBack:()=>dP,setNode:()=>Kpe});async function Kpe(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=Ai(t)):t=YT(r);let n=(0,FY.validateBySchema)(e,Vpe);if(n)throw(0,la.handleHDBError)(n,n.message,$pe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new la.ClientError("url or hostname is required for remove_node operation");let p=r,h=qt(),E=await h.get(p);if(!E)throw new la.ClientError(p+" does not exist");try{await Lh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?nt():p},void 0)}catch(g){Rs.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new la.ClientError("url required for this operation");let s=mc();if(s==null)throw new la.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,zs.getReplicationCert)();let p=await(0,zs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,zs.createCsr)(),Rs.info("Sending CSR to target node:",t)):p&&(c=p.certificate,Rs.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,Ic.get)(F.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,Ic.get)(F.REPLICATION_SHARD)!==void 0&&(l.shard=(0,Ic.get)(F.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(BY):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=BY(e);l.subscribe=p.subscribe,l.publish=p.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await Lh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,Rs.warn("Error adding node:",t,"to cluster:",p),d=p}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&(Rs.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,zs.setCertTable)({name:Gpe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,zs.setCertTable)({name:nt(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let p={url:s,ca:c,replicates:!0,subscriptions:null};(0,Ic.get)(F.REPLICATION_SHARD)!==void 0&&(p.shard=(0,Ic.get)(F.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await ta(nt(),p)}await ta(u?u.nodeName:f.name??Ai(t),f);let m;return e.operation==="update_node"?m=`Successfully updated '${t}'`:m=`Successfully added '${t}' to cluster`,d&&(m+=" but there was an error updating target node: "+d.message),m}async function uP(e){Rs.trace("addNodeBack received request:",e);let t=await(0,zs.signCertificate)(e),r;e.csr?(r=t.signingCA,Rs.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,Rs.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,zs.getReplicationCertAuth)();if(n.replicates){let i={url:mc(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,Ic.get)(F.REPLICATION_SHARD)!==void 0&&(i.shard=(0,Ic.get)(F.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await ta(nt(),i)}return await ta(e.hostname,n),t.nodeName=nt(),t.usingCA=s?.certificate,Rs.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function dP(e){Rs.trace("removeNodeBack received request:",e),await qt().delete(e.name)}function BY(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var zs,FY,Ac,Ic,Rs,la,Gpe,$pe,Vpe,Tf=se(()=>{zs=b(ys()),FY=b(ot()),Ac=b(require("joi")),Ic=b(ae());H();Rh();tf();Ss();Rs=b(J()),la=b(_e()),{pki:Gpe}=require("node-forge"),{HTTP_STATUS_CODES:$pe}=la.hdbErrors,Vpe=Ac.default.object({hostname:Ac.default.string(),verify_tls:Ac.default.boolean(),replicates:Ac.default.boolean(),subscriptions:Ac.default.array(),revoked_certificates:Ac.default.array(),shard:Ac.default.number()});a(Kpe,"setNode");a(uP,"addNodeBack");a(dP,"removeNodeBack");a(BY,"reverseSubscription")});var cy=v((Rke,HY)=>{"use strict";var{handleHDBError:sy,hdbErrors:Ype}=_e(),{HTTP_STATUS_CODES:iy}=Ype,{addUpdateNodeValidator:Wpe}=ey(),oy=J(),ay=(H(),M(W)),kY=pt(),zpe=oe(),Fh=Ht(),kh=Ws(),fP=ae(),jpe=lP(),{Node:Qpe,NodeSubscription:Jpe}=Rc(),{broadcast:Xpe}=tt(),{setNode:Zpe}=(Tf(),M(Sf)),Tke=ae(),yke=(H(),M(W)),ehe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",the="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",rhe=fP.get(ay.CONFIG_PARAMS.CLUSTERING_NODENAME);HY.exports=nhe;async function nhe(e,t=!1){if(oy.trace("addNode called with:",e),fP.get(ay.CONFIG_PARAMS.REPLICATION_URL)||fP.get(ay.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Zpe(e);kh.checkClusteringEnabled();let r=Wpe(e);if(r)throw sy(r,r.message,iy.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await kh.getNodeRecord(n);if(!zpe.isEmptyOrZeroLength(f))throw sy(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,iy.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await jpe(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=ehe,o;let c=kh.buildNodePayloads(s,rhe,ay.OPERATIONS_ENUM.ADD_NODE,await kh.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let p=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new Jpe(p.schema,p.table,p.publish,p.subscribe))}oy.trace("addNode sending remote payload:",c);let u;try{u=await Fh.request(`${n}.${kY.REQUEST_SUFFIX}`,c)}catch(f){oy.error(`addNode received error from request: ${f}`);for(let p=0,h=s.length;p<h;p++){let E=s[p];E.publish=!1,E.subscribe=!1,await Fh.updateRemoteConsumer(E,n)}let m=Fh.requestErrorHandler(f,"add_node",n);throw sy(new Error,m,iy.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===kY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw sy(new Error,f,iy.INTERNAL_SERVER_ERROR,"error",f)}oy.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await Fh.updateRemoteConsumer(p,n),p.subscribe===!0&&await Fh.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new Qpe(n,l,u.system_info);return await kh.upsertNodeRecord(d),Xpe({type:"nats_update"}),i.length>0?o.message=the:o.message=`Successfully added '${n}' to manifest`,o}a(nhe,"addNode")});var EP=v((Ike,GY)=>{"use strict";var{handleHDBError:mP,hdbErrors:she}=_e(),{HTTP_STATUS_CODES:pP}=she,{addUpdateNodeValidator:ihe}=ey(),Hh=J(),ly=(H(),M(W)),qY=pt(),Ake=oe(),qh=Ht(),Gh=Ws(),hP=ae(),{cloneDeep:ohe}=require("lodash"),ahe=lP(),{Node:che,NodeSubscription:lhe}=Rc(),{broadcast:uhe}=tt(),{setNode:dhe}=(Tf(),M(Sf)),fhe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",mhe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",phe=hP.get(ly.CONFIG_PARAMS.CLUSTERING_NODENAME);GY.exports=hhe;async function hhe(e){if(Hh.trace("updateNode called with:",e),hP.get(ly.CONFIG_PARAMS.REPLICATION_URL)??hP.get(ly.CONFIG_PARAMS.REPLICATION_HOSTNAME))return dhe(e);Gh.checkClusteringEnabled();let t=ihe(e);if(t)throw mP(t,t.message,pP.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Gh.getNodeRecord(r);s.length>0&&(n=ohe(s));let{added:i,skipped:o}=await ahe(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=fhe,c;let l=Gh.buildNodePayloads(i,phe,ly.OPERATIONS_ENUM.UPDATE_NODE,await Gh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];Hh.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}Hh.trace("updateNode sending remote payload:",l);let u;try{u=await qh.request(`${r}.${qY.REQUEST_SUFFIX}`,l)}catch(d){Hh.error(`updateNode received error from request: ${d}`);let f=qh.requestErrorHandler(d,"update_node",r);throw mP(new Error,f,pP.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===qY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw mP(new Error,d,pP.INTERNAL_SERVER_ERROR,"error",d)}Hh.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await qh.updateRemoteConsumer(m,r),m.subscribe===!0?await qh.updateConsumerIterator(m.schema,m.table,r,"start"):await qh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new che(r,[],u.system_info)]),await Ehe(n[0],i,u.system_info),o.length>0?c.message=mhe:c.message=`Successfully updated '${r}'`,c}a(hhe,"updateNode");async function Ehe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===o.schema&&d.table===o.table){d.publish=o.publish,d.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new lhe(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Gh.upsertNodeRecord(n),uhe({type:"nats_update"})}a(Ehe,"updateNodeTable")});var WY=v((Nke,YY)=>{"use strict";var KY=require("joi"),{string:$Y}=KY.types(),_he=ot(),VY=(H(),M(W)),ghe=ae(),She=pt();YY.exports=The;function The(e){let t=$Y.invalid(ghe.get(VY.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(She.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=KY.object({operation:$Y.valid(VY.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return _he.validateBySchema(e,r)}a(The,"removeNodeValidator")});var uy=v((Oke,XY)=>{"use strict";var{handleHDBError:zY,hdbErrors:yhe}=_e(),{HTTP_STATUS_CODES:jY}=yhe,Rhe=WY(),$h=J(),QY=Ws(),bhe=oe(),yf=(H(),M(W)),JY=pt(),_P=Ht(),gP=ae(),{RemotePayloadObject:Ahe}=Uh(),{NodeSubscription:Ihe}=Rc(),whe=fd(),Nhe=rc(),{broadcast:Che}=tt(),{setNode:Ohe}=(Tf(),M(Sf)),Phe=gP.get(yf.CONFIG_PARAMS.CLUSTERING_NODENAME);XY.exports=Lhe;async function Lhe(e){if($h.trace("removeNode called with:",e),gP.get(yf.CONFIG_PARAMS.REPLICATION_URL)??gP.get(yf.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Ohe(e);QY.checkClusteringEnabled();let t=Rhe(e);if(t)throw zY(t,t.message,jY.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await QY.getNodeRecord(r);if(bhe.isEmptyOrZeroLength(n))throw zY(new Error,`Node '${r}' was not found.`,jY.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Ahe(yf.OPERATIONS_ENUM.REMOVE_NODE,Phe,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await _P.updateConsumerIterator(d.schema,d.table,r,"stop");try{await _P.updateRemoteConsumer(new Ihe(d.schema,d.table,!1,!1),r)}catch(f){$h.error(f)}}try{i=await _P.request(`${r}.${JY.REQUEST_SUFFIX}`,s),$h.trace("Remove node reply from remote node:",r,i)}catch(l){$h.error("removeNode received error from request:",l),o=!0}let c=new whe(yf.SYSTEM_SCHEMA_NAME,yf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Nhe.deleteRecord(c),Che({type:"nats_update"}),i?.status===JY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?($h.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(Lhe,"removeNode")});var tW=v((Lke,eW)=>{"use strict";var ZY=require("joi"),{string:Dhe,array:Mhe}=ZY.types(),vhe=ot(),Uhe=ey();eW.exports=xhe;function xhe(e){let t=ZY.object({operation:Dhe.valid("configure_cluster").required(),connections:Mhe.items(Uhe.validationSchema).required()});return vhe.validateBySchema(e,t)}a(xhe,"configureClusterValidator")});var SP=v((Mke,oW)=>{"use strict";var rW=(H(),M(W)),dy=J(),Bhe=oe(),Fhe=ae(),khe=uy(),Hhe=cy(),qhe=Ws(),Ghe=tW(),{handleHDBError:nW,hdbErrors:$he}=_e(),{HTTP_STATUS_CODES:sW}=$he,Vhe="Configure cluster complete.",Khe="Failed to configure the cluster. Check the logs for more details.",Yhe="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";oW.exports=Whe;async function Whe(e){dy.trace("configure cluster called with:",e);let t=Ghe(e);if(t)throw nW(t,t.message,sW.BAD_REQUEST,void 0,void 0,!0);let r=await qhe.getAllNodeRecords(),n=[];if(Fhe.get(rW.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await iW(khe,{operation:rW.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}dy.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let f=e.connections[d],m=await iW(Hhe,f,f.node_name);s.push(m)}dy.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(dy.error(m.node_name,m?.error?.message,m?.error?.stack),o.includes(m.node_name)||o.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(Bhe.isEmptyOrZeroLength(o))return{message:Vhe,connections:c};if(l)return{message:Yhe,failed_nodes:o,connections:c};throw nW(new Error,Khe,sW.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Whe,"configureCluster");async function iW(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(iW,"functionWrapper")});var uW=v((Uke,lW)=>{"use strict";var Vh=require("joi"),zhe=ot(),{validateSchemaExists:aW,validateTableExists:jhe,validateSchemaName:cW}=Xi(),Qhe=Vh.object({operation:Vh.string().valid("purge_stream"),schema:Vh.string().custom(aW).custom(cW).optional(),database:Vh.string().custom(aW).custom(cW).optional(),table:Vh.string().custom(jhe).required()});function Jhe(e){return zhe.validateBySchema(e,Qhe)}a(Jhe,"purgeStreamValidator");lW.exports=Jhe});var TP=v((Bke,dW)=>{"use strict";var{handleHDBError:Xhe,hdbErrors:Zhe}=_e(),{HTTP_STATUS_CODES:eEe}=Zhe,tEe=uW(),rEe=Ht(),nEe=Ws();dW.exports=sEe;async function sEe(e){e.schema=e.schema??e.database;let t=tEe(e);if(t)throw Xhe(t,t.message,eEe.BAD_REQUEST,void 0,void 0,!0);nEe.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await rEe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(sEe,"purgeStream")});var bP=v((kke,SW)=>{"use strict";var RP=Ws(),iEe=Ht(),my=ae(),Rf=(H(),M(W)),tu=pt(),oEe=oe(),yP=J(),{RemotePayloadObject:aEe}=Uh(),{ErrorCode:fW}=require("nats"),{parentPort:mW}=require("worker_threads"),{onMessageByType:cEe}=tt(),{getThisNodeName:lEe}=(Ss(),M(na)),{requestClusterStatus:uEe}=(Rh(),M(i1)),{getReplicationSharedStatus:dEe,getHDBNodeTable:fEe}=(tf(),M(XV)),{CONFIRMATION_STATUS_POSITION:mEe,RECEIVED_VERSION_POSITION:pW,RECEIVED_TIME_POSITION:pEe,SENDING_TIME_POSITION:hEe,RECEIVING_STATUS_POSITION:EEe,RECEIVING_STATUS_RECEIVING:_Ee,BACK_PRESSURE_RATIO_POSITION:gEe}=(hO(),M(Q1)),hW=my.get(Rf.CONFIG_PARAMS.CLUSTERING_ENABLED),EW=my.get(Rf.CONFIG_PARAMS.CLUSTERING_NODENAME);SW.exports={clusterStatus:SEe,buildNodeStatus:gW};var _W;cEe("cluster-status",async e=>{_W(e)});async function SEe(){if(my.get(Rf.CONFIG_PARAMS.REPLICATION_URL)||my.get(Rf.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;mW?(mW.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{_W=i})):n=uEe();for(let i of n.connections){let o=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=dEe(u,l,o);c.lastCommitConfirmed=fy(d[mEe]),c.lastReceivedRemoteTime=fy(d[pW]),c.lastReceivedLocalTime=fy(d[pEe]),c.lastReceivedVersion=d[pW],c.sendingMessage=fy(d[hEe]),c.backPressurePercent=d[gEe]*100,c.lastReceivedStatus=d[EEe]===_Ee?"Receiving":"Waiting"}}n.node_name=lEe();let s=fEe().primaryStore.get(n.node_name);return s?.shard&&(n.shard=s.shard),s?.url&&(n.url=s.url),n.is_enabled=!0,n}let e={node_name:EW,is_enabled:hW,connections:[]};if(!hW)return e;let t=await RP.getAllNodeRecords();if(oEe.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(gW(t[n],e.connections));return await Promise.allSettled(r),e}a(SEe,"clusterStatus");function fy(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(fy,"asDate");async function gW(e,t){let r=e.name,n=new aEe(Rf.OPERATIONS_ENUM.CLUSTER_STATUS,EW,void 0,await RP.getSystemInfo()),s,i,o=tu.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await iEe.request(tu.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===tu.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=tu.CLUSTER_STATUS_STATUSES.CLOSED,yP.error(`Error getting node status from ${r} `,s))}catch(l){yP.warn(`Error getting node status from ${r}`,l),l.code===fW.NoResponders?o=tu.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===fW.Timeout?o=tu.CLUSTER_STATUS_STATUSES.TIMEOUT:o=tu.CLUSTER_STATUS_STATUSES.CLOSED}let c=new TEe(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Rf.PRE_4_0_0_VERSION&&await RP.upsertNodeRecord(l)}catch(l){yP.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(gW,"buildNodeStatus");function TEe(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(TEe,"NodeStatusObject")});var IP=v((qke,TW)=>{"use strict";var{handleHDBError:yEe,hdbErrors:REe}=_e(),{HTTP_STATUS_CODES:bEe}=REe,AEe=Ht(),IEe=Ws(),AP=oe(),py=require("joi"),wEe=ot(),NEe=2e3,CEe=py.object({timeout:py.number().min(1),connected_nodes:py.boolean(),routes:py.boolean()});TW.exports=OEe;async function OEe(e){IEe.checkClusteringEnabled();let t=wEe.validateBySchema(e,CEe);if(t)throw yEe(t,t.message,bEe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||AP.autoCastBoolean(n),o=s===void 0||AP.autoCastBoolean(s),c={nodes:[]},l=await AEe.getServerList(r??NEe),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,p=l[d].data;if(m.name.endsWith("-hub")){let h={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[m.name]&&u[m.name].forEach(E=>{h.connected_nodes.includes(E.name.slice(0,-4))||h.connected_nodes.push(E.name.slice(0,-4))})),o&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:AP.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(OEe,"clusterNetwork")});var AW=v(($ke,bW)=>{"use strict";var wP=require("joi"),yW=ot(),{routeConstraints:RW}=nN();bW.exports={setRoutesValidator:PEe,deleteRoutesValidator:LEe};function PEe(e){let t=wP.object({server:wP.valid("hub","leaf"),routes:RW.required()});return yW.validateBySchema(e,t)}a(PEe,"setRoutesValidator");function LEe(e){let t=wP.object({routes:RW.required()});return yW.validateBySchema(e,t)}a(LEe,"deleteRoutesValidator")});var hy=v((Kke,LW)=>{"use strict";var ua=St(),NP=oe(),js=(H(),M(W)),bf=ae(),IW=AW(),{handleHDBError:wW,hdbErrors:DEe}=_e(),{HTTP_STATUS_CODES:NW}=DEe,CW="cluster routes successfully set",OW="cluster routes successfully deleted";LW.exports={setRoutes:vEe,getRoutes:UEe,deleteRoutes:xEe};function MEe(e){let t=ua.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let o=0,c=e.routes.length;o<c;o++){let l=e.routes[o];l.port=NP.autoCast(l.port);let u=r.some(f=>f.host===l.host&&f.port===l.port),d=n.some(f=>f.host===l.host&&f.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?ua.updateConfigValue(js.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):ua.updateConfigValue(js.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:CW,set:i,skipped:s}}a(MEe,"setRoutesNats");function vEe(e){let t=IW.setRoutesValidator(e);if(t)throw wW(t,t.message,NW.BAD_REQUEST,void 0,void 0,!0);if(bf.get(js.CONFIG_PARAMS.CLUSTERING_ENABLED))return MEe(e);let r=[],n=[],s=bf.get(js.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{PW(s,i)?n.push(i):(s.push(i),r.push(i))}),ua.updateConfigValue(js.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:CW,set:r,skipped:n}}a(vEe,"setRoutes");function PW(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}a(PW,"existsInArray");function UEe(){if(bf.get(js.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=ua.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return bf.get(js.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(UEe,"getRoutes");function xEe(e){let t=IW.deleteRoutesValidator(e);if(t)throw wW(t,t.message,NW.BAD_REQUEST,void 0,void 0,!0);if(bf.get(js.CONFIG_PARAMS.CLUSTERING_ENABLED))return BEe(e);let r=[],n=[],s=bf.get(js.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{PW(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),ua.updateConfigValue(js.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:OW,deleted:r,skipped:n}}a(xEe,"deleteRoutes");function BEe(e){let t=ua.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],o=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,p=r.length;m<p;m++){let h=r[m];if(d.host===h.host&&d.port===h.port){r.splice(m,1),f=!0,o=!0,s.push(d);break}}if(!f){let m=!0;for(let p=0,h=n.length;p<h;p++){let E=n[p];if(d.host===E.host&&d.port===E.port){n.splice(p,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return o&&(r=NP.isEmptyOrZeroLength(r)?null:r,ua.updateConfigValue(js.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=NP.isEmptyOrZeroLength(n)?null:n,ua.updateConfigValue(js.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:OW,deleted:s,skipped:i}}a(BEe,"deleteRoutesNats")});var MW=v((Wke,DW)=>{"use strict";var FEe=pt(),CP=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,f,m,p,h){this.port=t,o===null&&(o=void 0),this.server_name=r+FEe.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:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};DW.exports=CP});var xW=v((jke,UW)=>{"use strict";var vW=pt(),OP=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+vW.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+vW.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};UW.exports=OP});var FW=v((Jke,BW)=>{"use strict";var PP=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};BW.exports=PP});var HW=v((Zke,kW)=>{"use strict";var kEe=pt(),LP=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+kEe.SERVER_SUFFIX.ADMIN,this.password=r}};kW.exports=LP});var Sy=v((tHe,$W)=>{"use strict";var ru=require("path"),nu=require("fs-extra"),HEe=MW(),qEe=xW(),GEe=FW(),$Ee=HW(),DP=Es(),If=oe(),zn=St(),_y=(H(),M(W)),Kh=pt(),{CONFIG_PARAMS:or}=_y,wf=J(),Yh=ae(),qW=so(),MP=Ht(),VEe=ys(),Af="clustering",KEe=1e4,GW=50;$W.exports={generateNatsConfig:WEe,removeNatsConfig:zEe,getHubConfigPath:YEe};function YEe(){let e=Yh.get(or.ROOTPATH);return ru.join(e,Af,Kh.NATS_CONFIG_FILES.HUB_SERVER)}a(YEe,"getHubConfigPath");async function WEe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Yh.get(or.ROOTPATH);nu.ensureDirSync(ru.join(r,"clustering","leaf")),Yh.initSync();let n=zn.getConfigFromFile(or.CLUSTERING_TLS_CERT_AUTH),s=zn.getConfigFromFile(or.CLUSTERING_TLS_PRIVATEKEY),i=zn.getConfigFromFile(or.CLUSTERING_TLS_CERTIFICATE);!await nu.exists(i)&&!await nu.exists(!n)&&await VEe.createNatsCerts();let o=ru.join(r,Af,Kh.PID_FILES.HUB),c=ru.join(r,Af,Kh.PID_FILES.LEAF),l=zn.getConfigFromFile(or.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=ru.join(r,Af,Kh.NATS_CONFIG_FILES.HUB_SERVER),d=ru.join(r,Af,Kh.NATS_CONFIG_FILES.LEAF_SERVER),f=zn.getConfigFromFile(or.CLUSTERING_TLS_INSECURE),m=zn.getConfigFromFile(or.CLUSTERING_TLS_VERIFY),p=zn.getConfigFromFile(or.CLUSTERING_NODENAME),h=zn.getConfigFromFile(or.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await MP.checkNATSServerInstalled()||gy("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await DP.listUsers(),g=zn.getConfigFromFile(or.CLUSTERING_USER),R=await DP.getClusterUser();(If.isEmpty(R)||R.active!==!0)&&gy(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Ey(or.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Ey(or.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Ey(or.CLUSTERING_HUBSERVER_NETWORK_PORT),await Ey(or.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[j,Y]of E.entries())Y.role?.role===_y.ROLE_TYPES_ENUM.CLUSTER_USER&&Y.active&&(S.push(new $Ee(Y.username,qW.decrypt(Y.hash))),y.push(new GEe(Y.username,qW.decrypt(Y.hash))));let N=[],{hub_routes:I}=zn.getClusteringRoutes();if(!If.isEmptyOrZeroLength(I))for(let j of I)N.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${j.host}:${j.port}`);let $=new HEe(zn.getConfigFromFile(or.CLUSTERING_HUBSERVER_NETWORK_PORT),p,o,i,s,n,f,m,h,zn.getConfigFromFile(or.CLUSTERING_HUBSERVER_CLUSTER_NAME),zn.getConfigFromFile(or.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,S,y);n==null&&(delete $.tls.ca_file,delete $.leafnodes.tls.ca_file),t=If.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===_y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await nu.writeJson(u,$),wf.trace(`Hub server config written to ${u}`));let ee=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,q=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,k=new qEe(zn.getConfigFromFile(or.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[ee],[q],S,y,i,s,n,f);n==null&&delete k.tls.ca_file,(t===void 0||t===_y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await nu.writeJson(d,k),wf.trace(`Leaf server config written to ${d}`))}a(WEe,"generateNatsConfig");async function Ey(e){let t=Yh.get(e);return If.isEmpty(t)&&gy(`port undefined for '${e}'`),await If.isPortTaken(t)&&gy(`'${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(Ey,"isPortAvailable");function gy(e){let t=`Error generating clustering config: ${e}`;wf.error(t),console.error(t),process.exit(1)}a(gy,"generateNatsConfigError");async function zEe(e){let{port:t,config_file:r}=MP.getServerConfig(e),{username:n,decrypt_hash:s}=await DP.getClusterUser(),i=0,o=2e3;for(;i<GW;){try{let d=await MP.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){wf.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=GW)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 u=o*(i*2);u>3e4&&wf.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await If.asyncSetTimeout(u)}let c="0".repeat(KEe),l=ru.join(Yh.get(or.ROOTPATH),Af,r);await nu.writeFile(l,c),await nu.remove(l),wf.notify(e,"started.")}a(zEe,"removeNatsConfig")});var jW=v((nHe,zW)=>{"use strict";var bs=ae(),et=(H(),M(W)),Wh=pt(),da=require("path"),{PACKAGE_ROOT:yy}=Rt(),VW=ae(),Ty=oe(),Nf="/dev/null",jEe=da.join(yy,"launchServiceScripts"),KW=da.join(yy,"utility/scripts"),QEe=da.join(KW,et.HDB_RESTART_SCRIPT),YW=da.resolve(yy,"dependencies",`${process.platform}-${process.arch}`,Wh.NATS_BINARY_NAME);function WW(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return Ty.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Ty.getEnvCliRootPath()),{name:et.PROCESS_DESCRIPTORS.HDB,script:et.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:yy}}a(WW,"generateMainServerConfig");var JEe=9930;function XEe(){bs.initSync(!0);let e=bs.get(et.CONFIG_PARAMS.ROOTPATH),t=da.join(e,"clustering",Wh.NATS_CONFIG_FILES.HUB_SERVER),r=da.join(bs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=VW.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=Wh.LOG_LEVEL_FLAGS[bs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==JEe?"-"+n:""),binFile:YW,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Nf,i.error_file=Nf),i}a(XEe,"generateNatsHubServerConfig");var ZEe=9940;function e_e(){bs.initSync(!0);let e=bs.get(et.CONFIG_PARAMS.ROOTPATH),t=da.join(e,"clustering",Wh.NATS_CONFIG_FILES.LEAF_SERVER),r=da.join(bs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=VW.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=Wh.LOG_LEVEL_FLAGS[bs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==ZEe?"-"+n:""),binFile:YW,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Nf,i.error_file=Nf),i}a(e_e,"generateNatsLeafServerConfig");function t_e(){bs.initSync();let e=da.join(bs.get(et.CONFIG_PARAMS.LOGGING_ROOT),et.LOG_NAMES.HDB),t={name:et.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,binFile:et.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:jEe,autorestart:!1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Nf,t.error_file=Nf),t}a(t_e,"generateClusteringUpgradeV4ServiceConfig");function r_e(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.RESTART_HDB};return Ty.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Ty.getEnvCliRootPath()),{...{name:et.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:KW},script:QEe}}a(r_e,"generateRestart");function n_e(){return{apps:[WW()]}}a(n_e,"generateAllServiceConfigs");zW.exports={generateAllServiceConfigs:n_e,generateMainServerConfig:WW,generateRestart:r_e,generateNatsHubServerConfig:XEe,generateNatsLeafServerConfig:e_e,generateClusteringUpgradeV4ServiceConfig:t_e}});var Cf=v((oHe,rz)=>{"use strict";var Lr=(H(),M(W)),iHe=oe(),ma=Sy(),Ry=Ht(),fa=pt(),wc=jW(),UP=ae(),Nc=J(),s_e=Ws(),{startWorker:QW,onMessageFromWorkers:i_e}=tt(),JW=require("fs"),o_e=require("node:path"),a_e=(H(),M(W)),{setTimeout:c_e}=require("node:timers/promises"),{execFile:l_e,fork:u_e}=require("node:child_process");rz.exports={start:Cc,restart:f_e,kill:E_e,startAllServices:__e,startService:ZW,restartHdb:m_e,startClusteringProcesses:ez,startClusteringThreads:tz,isHdbRestartRunning:p_e,getHdbPid:h_e,cleanupChildrenProcesses:zh,reloadClustering:S_e,expectedRestartOfChildren:XW};i_e(e=>{e.type==="restart"&&UP.initSync(!0)});var go=[],d_e=10,vP;function Cc(e,t=!1){let r=typeof e.args=="string"?e.args.split(" "):e.args;e.silent=!0,e.detached=!0;let n=e.script?u_e(e.script,r,e):l_e(e.binFile,r,e);n.name=e.name,n.config=e,n.on("error",(o,c)=>{console.error(o,c)}),n.on("exit",async o=>{let c=go.indexOf(n);c>-1&&go.splice(c,1),!vP&&o!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<d_e&&(JW.existsSync(ma.getHubConfigPath())?Cc(e):(await ma.generateNatsConfig(!0),Cc(e),await new Promise(l=>setTimeout(l,3e3)),await ma.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ma.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(o){let c=UP.get(Lr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(o);){if(u.index&&fa.LOG_LEVEL_HIERARCHY[c]>=fa.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===fa.LOG_LEVELS.ERR||f===fa.LOG_LEVELS.WRN?Nc.OUTPUTS.STDERR:Nc.OUTPUTS.STDOUT;Nc.logCustomLevel(f||"info",h,s,o.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=fa.LOG_LEVELS[p]}if(fa.LOG_LEVEL_HIERARCHY[c]>=fa.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===fa.LOG_LEVELS.ERR||f===fa.LOG_LEVELS.WRN?Nc.OUTPUTS.STDERR:Nc.OUTPUTS.STDOUT;Nc.logCustomLevel(f||"info",m,s,o.toString().slice(d).trim())}}a(i,"extractMessages"),n.stdout.on("data",i),n.stderr.on("data",i),n.unref(),go.length===0&&(t||(process.on("exit",zh),process.on("SIGINT",zh),process.on("SIGQUIT",zh),process.on("SIGTERM",zh))),go.push(n)}a(Cc,"start");function zh(e=!0){if(!vP&&(vP=!0,go.length!==0))if(Nc.info("Killing child processes..."),go.map(t=>t.kill()),e)process.exit(0);else return c_e(2e3)}a(zh,"cleanupChildrenProcesses");function f_e(e){XW();for(let t of go)t.name===e&&t.kill()}a(f_e,"restart");function XW(){for(let e of go)e.config&&(e.config.restarts=0)}a(XW,"expectedRestartOfChildren");async function m_e(){await Cc(wc.generateRestart())}a(m_e,"restartHdb");async function p_e(){let e=await list();for(let t in e)if(e[t].name===Lr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(p_e,"isHdbRestartRunning");function h_e(){let e=UP.getHdbBasePath();if(!e)return;let t=o_e.join(e,a_e.HDB_PID_FILE),r=T_e(t);if(!(!r||r===process.pid)&&y_e(r))return r}a(h_e,"getHdbPid");function E_e(){for(let e of go)e.kill();go=[]}a(E_e,"kill");async function __e(){await ez(),await tz(),await Cc(wc.generateAllServiceConfigs())}a(__e,"startAllServices");async function ZW(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Lr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=wc.generateMainServerConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=wc.generateNatsIngestServiceConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=wc.generateNatsReplyServiceConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=wc.generateNatsHubServerConfig(),await Cc(r,t),await ma.removeNatsConfig(e);return;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=wc.generateNatsLeafServerConfig(),await Cc(r,t),await ma.removeNatsConfig(e);return;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=wc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}Cc(r,t)}a(ZW,"startService");var g_e;async function ez(e=!1){for(let t in Lr.CLUSTERING_PROCESSES){let r=Lr.CLUSTERING_PROCESSES[t];await ZW(r,e)}}a(ez,"startClusteringProcesses");async function tz(){g_e=QW(Lr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Lr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Ry.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Ry.updateLocalStreams();let e=await s_e.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Lr.PRE_4_0_0_VERSION){Nc.info("Starting clustering upgrade 4.0.0 process"),QW(Lr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(tz,"startClusteringThreads");async function S_e(){await ma.generateNatsConfig(!0),await Ry.reloadNATSHub(),await Ry.reloadNATSLeaf(),await ma.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ma.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(S_e,"reloadClustering");function T_e(e){try{return Number.parseInt(JW.readFileSync(e,"utf8"),10)}catch{return null}}a(T_e,"readPidFile");function y_e(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}a(y_e,"isProcessRunning")});var FP={};ye(FP,{compactOnStart:()=>R_e,copyDb:()=>cz});async function R_e(){Oc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,xP.get)(F.ROOTPATH),t=new Map,r=lt();(0,BP.updateConfigValue)(F.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,by.join)(e,"backup",n+".mdb"),o=(0,by.join)(e,Zc,n+"-copy.mdb"),c=0;try{c=await nz(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Oc.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:o,backupDest:i,recordCount:c}),await cz(n,o),console.log("Backing up",n,"to",i);try{await(0,su.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{vd()}catch(n){Oc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{dbPath:s,copyDest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,su.move)(i,s,{overwrite:!0}),await(0,su.remove)((0,by.join)(e,Zc,`${n}-copy.mdb-lock`));try{vd()}catch(n){Oc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Oc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,BP.updateConfigValue)(F.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,su.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw vd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let o=!0,c=await nz(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
20
20
|
Total record count before compaction: ${i}, total after: ${c}.
|
|
21
|
-
Database backup has not been removed and can be found here: ${s}`;Oc.error(l),console.error(l)}(0,xP.get)(F.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,su.remove)(s))}}async function nz(e){let t=await(0,az.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function Of(){}async function cz(e,t){console.log(`Copying database ${e} to ${t}`);let r=lt()[e];if(!r)throw new Error(`Source database not found: ${e}`);let n;for(let f in r){let m=r[f];m.primaryStore.put=Of,m.primaryStore.remove=Of;for(let p in m.indices){let h=m.indices[p];h.put=Of,h.remove=Of}m.auditStore&&(m.auditStore.put=Of,m.auditStore.remove=Of),n=m.primaryStore.rootStore}if(!n)throw new Error(`Source database does not have any tables: ${e}`);let s=n.dbisDb,i=n.auditStore,o=(0,sz.open)(new iz.default(t)),c=o.openDB(Ay.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:p}of s.getRange({transaction:d})){let h=p.is_hash_attribute||p.isPrimaryKey,E,g;if(h&&(E=p.compression,g=LS(),g?p.compression=g:delete p.compression,E?.dictionary?.toString()===g?.dictionary?.toString()&&(E=null,g=null)),c.put(m,p),!(h||p.indexed))continue;let R=new oz.OpenDBIObject(!h,h);R.encoding="binary",R.compression=E;let S=n.openDB(m,R);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",R.compression=g;let y=o.openDB(m,R);y.encoder=null,console.log("copying",m,"from",e,"to",t),await f(S,y,h,d)}if(i){let m=n.openDB(Ay.AUDIT_STORE_NAME,zm);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,p,h,E){let g=0,R=0,S=1e7,y=null;for(;S-- >0;)try{for(let N of m.getKeys({start:y,transaction:E}))try{y=N;let{value:I,version:$}=m.getEntry(N,{transaction:E});l=p.put(N,I,h?$:void 0),g++,E.openTimer&&(E.openTimer=0),R+=(N?.length||10)+I.length,u++>5e3&&(await l,console.log("copied",g,"entries",R,"bytes"),u=0)}catch(I){console.error("Error copying record",typeof N=="symbol"?"symbol":N,"from",e,"to",t,I)}console.log("finish copying, copied",g,"entries",R,"bytes");return}catch{if(typeof y=="string"){if(y==="z")return console.error("Reached end of dbi",y,"for",e,"to",t);y=y.slice(0,-2)+"z"}else if(typeof y=="number")y++;else return console.error("Unknown key type",y,"for",e,"to",t)}}a(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),o.close()}}var sz,by,su,xP,iz,oz,Ay,az,BP,Oc,kP=
|
|
21
|
+
Database backup has not been removed and can be found here: ${s}`;Oc.error(l),console.error(l)}(0,xP.get)(F.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,su.remove)(s))}}async function nz(e){let t=await(0,az.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function Of(){}async function cz(e,t){console.log(`Copying database ${e} to ${t}`);let r=lt()[e];if(!r)throw new Error(`Source database not found: ${e}`);let n;for(let f in r){let m=r[f];m.primaryStore.put=Of,m.primaryStore.remove=Of;for(let p in m.indices){let h=m.indices[p];h.put=Of,h.remove=Of}m.auditStore&&(m.auditStore.put=Of,m.auditStore.remove=Of),n=m.primaryStore.rootStore}if(!n)throw new Error(`Source database does not have any tables: ${e}`);let s=n.dbisDb,i=n.auditStore,o=(0,sz.open)(new iz.default(t)),c=o.openDB(Ay.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:p}of s.getRange({transaction:d})){let h=p.is_hash_attribute||p.isPrimaryKey,E,g;if(h&&(E=p.compression,g=LS(),g?p.compression=g:delete p.compression,E?.dictionary?.toString()===g?.dictionary?.toString()&&(E=null,g=null)),c.put(m,p),!(h||p.indexed))continue;let R=new oz.OpenDBIObject(!h,h);R.encoding="binary",R.compression=E;let S=n.openDB(m,R);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",R.compression=g;let y=o.openDB(m,R);y.encoder=null,console.log("copying",m,"from",e,"to",t),await f(S,y,h,d)}if(i){let m=n.openDB(Ay.AUDIT_STORE_NAME,zm);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,p,h,E){let g=0,R=0,S=1e7,y=null;for(;S-- >0;)try{for(let N of m.getKeys({start:y,transaction:E}))try{y=N;let{value:I,version:$}=m.getEntry(N,{transaction:E});l=p.put(N,I,h?$:void 0),g++,E.openTimer&&(E.openTimer=0),R+=(N?.length||10)+I.length,u++>5e3&&(await l,console.log("copied",g,"entries",R,"bytes"),u=0)}catch(I){console.error("Error copying record",typeof N=="symbol"?"symbol":N,"from",e,"to",t,I)}console.log("finish copying, copied",g,"entries",R,"bytes");return}catch{if(typeof y=="string"){if(y==="z")return console.error("Reached end of dbi",y,"for",e,"to",t);y=y.slice(0,-2)+"z"}else if(typeof y=="number")y++;else return console.error("Unknown key type",y,"for",e,"to",t)}}a(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),o.close()}}var sz,by,su,xP,iz,oz,Ay,az,BP,Oc,kP=se(()=>{we();sz=require("lmdb"),by=require("path"),su=require("fs-extra"),xP=b(ae()),iz=b(ap()),oz=b(op()),Ay=b(Wt());H();Ki();az=b(dc()),BP=b(St()),Oc=b(J());a(R_e,"compactOnStart");a(nz,"getTotalDBRecordCount");a(Of,"noop");a(cz,"copyDb")});var qP=v((fHe,lz)=>{"use strict";var jh=ae();jh.initSync();var Pf=require("fs-extra"),HP=require("path"),Lf=(H(),M(W)),b_e=require("crypto"),A_e=require("uuid").v4;lz.exports=I_e;function I_e(){if(jh.getHdbBasePath()!==void 0){let e=HP.join(jh.getHdbBasePath(),Lf.LICENSE_KEY_DIR_NAME,Lf.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=HP.join(jh.getHdbBasePath(),Lf.LICENSE_KEY_DIR_NAME,Lf.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=HP.join(jh.getHdbBasePath(),Lf.LICENSE_KEY_DIR_NAME,Lf.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Pf.accessSync(r),Pf.accessSync(e),Pf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=A_e(),i=b_e.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Pf.writeFileSync(r,s),Pf.writeFileSync(e,i.privateKey),Pf.writeFileSync(t,i.publicKey)}else throw n}}}a(I_e,"checkJWTTokenExist")});var dz=v((pHe,uz)=>{"use strict";var GP=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};uz.exports={HdbInfoInsertObject:GP}});var pz=v((EHe,mz)=>{"use strict";var fz=(H(),M(W)),$P=class{static{a(this,"UpgradeObject")}constructor(t,r){this[fz.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[fz.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};mz.exports={UpgradeObject:$P}});var Iy=v((gHe,Ez)=>{"use strict";var Qs=require("prompt"),Df=require("chalk"),hz=J(),Ni=require("os"),VP=el(),KP=["yes","y"];async function w_e(e){let t=`${Ni.EOL}`+Df.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ni.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ni.EOL}${Ni.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ni.EOL}`;Qs.override=VP(["CONFIRM_UPGRADE"]),Qs.start(),Qs.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Df.magenta(`${Ni.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Qs.get([r])}catch(s){return hz.error("There was an error when prompting user about an upgrade."),hz.error(s),!1}return KP.includes(n.CONFIRM_UPGRADE)}a(w_e,"forceUpdatePrompt");async function N_e(e){let t=`${Ni.EOL}`+Df.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ni.EOL}`);Qs.override=VP(["CONFIRM_DOWNGRADE"]),Qs.start(),Qs.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Df.magenta(`${Ni.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Qs.get([r]);return KP.includes(n.CONFIRM_DOWNGRADE)}a(N_e,"forceDowngradePrompt");async function C_e(){let e=`${Ni.EOL}`+Df.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Qs.override=VP(["GENERATE_CERTS"]),Qs.start(),Qs.message=e;let t={properties:{GENERATE_CERTS:{description:Df.magenta(`${Ni.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Qs.get([t]);return KP.includes(r.GENERATE_CERTS)}a(C_e,"upgradeCertsPrompt");Ez.exports={forceUpdatePrompt:w_e,forceDowngradePrompt:N_e,upgradeCertsPrompt:C_e}});var wy=v((THe,_z)=>{"use strict";var YP=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};_z.exports=YP});var Sz=v((wHe,gz)=>{"use strict";var O_e=oe(),P_e=St(),RHe=J(),bHe=require("path"),AHe=require("fs"),IHe=(H(),M(W));gz.exports={getOldPropsValue:L_e};function L_e(e,t,r=!1){let n=t.getRaw(e);return O_e.isNotEmptyAndHasValue(n)?n:r?P_e.getDefaultConfig(e):""}a(L_e,"getOldPropsValue")});var bz=v((CHe,Rz)=>{"use strict";var Pc=require("path"),Lc=require("fs-extra"),D_e=require("properties-reader"),M_e=wy(),gr=J(),{getOldPropsValue:Tt}=Sz(),{HDB_SETTINGS_NAMES:Te,CONFIG_PARAMS:iu}=(H(),M(W)),ou=St(),Ny=ae(),Tz=oe(),So=(H(),M(W)),WP=new M_e("3.1.0"),yz=[];function v_e(){let e=D_e(Ny.get(Te.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),gr.info(t);let r=` ;Settings for the HarperDB process.
|
|
22
22
|
|
|
23
23
|
;The directory selected during install where the database files reside.
|
|
24
24
|
${Te.HDB_ROOT_KEY} = ${Tt(Te.HDB_ROOT_KEY,e)}
|
|
@@ -91,17 +91,17 @@ ${Te.MAX_CUSTOM_FUNCTION_PROCESSES} = ${ou.getDefaultConfig(iu.HTTP_THREADS)}
|
|
|
91
91
|
|
|
92
92
|
Reindexing upgrade started for transaction logs`),pa.notify("Reindexing upgrade started for transaction logs"),await Iz(zP,!0,e)),pa.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Jh?", but errors occurred":"")}a($_e,"reindexUpgrade");async function Iz(e,t,r){let n=await To.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=ha.join(e,o.toString());if(o===".DS_Store")continue;let l=await To.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&To.statSync(ha.join(c,f)).isDirectory())try{await V_e(o,f,t),Nn.info(`Reindexing started for ${o}.${f}`),pa.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${f}`),await Y_e(o,f,c,t,r),Nn.info(`Reindexing completed for ${o}.${f}`),pa.notify(`Reindexing completed for ${o}.${f}`)}catch(m){Jh=!0,m.schema_path=c,m.table_name=f,pa.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),pa.error(m),Nn.error(m),console.error(m)}}}if(!Jh)try{await To.rm(Oy,{recursive:!0})}catch{}}a(Iz,"processTables");async function V_e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=ha.join(Oy,s);await To.ensureDir(Oy),await To.writeFile(i,""),Nn=q_e({level:"debug",formatters:{bindings(){}}},i)}a(V_e,"initPinoLogger");var K_e=20;async function Y_e(e,t,r,n,s){let i;try{i=await As.openEnvironment(r,t,n)}catch(S){if(S.message==="MDB_INVALID: File is not an LMDB file"){pa.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),Nn.error(S);return}throw S}let o=j_e(i.dbis),c=As.openDBI(i,o),l=Object.keys(i.dbis),u=As.statDBI(i,o);Nn.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new H_e.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});d.start(u.entryCount,0,{});let f=await As.createEnvironment(r,t,!1);As.createDBI(f,o,!1,!0);let m=[];try{for(let S of c.getRange({start:!1}))S.value={...S.value},m.push(S),n||e==="system"&&(t==="hdb_schema"&&(S.key=S.key.toString(),S.value.name=S.value.name.toString()),t==="hdb_table"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.name=S.value.name.toString()),t==="hdb_attribute"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.table=S.value.table.toString(),S.value.attribute=S.value.attribute.toString())),m.length>K_e&&await p();await p()}catch(S){throw Jh=!0,Nn.error(S),S}async function p(){let S,y=m.map(({value:I})=>I);n?S=await Promise.all(y.map(I=>W_e(f,I))):S=await x_e(f,o,l.filter(I=>I!=="__blob__"),y,!1);for(let I=0,$=m.length;I<$;I++){let{key:ee,value:q}=m[I];Nn.info(`Record hash value: ${ee} hash: ${o}`);let k;n?k=S[I]:k=S.written_hashes.indexOf(ee)>-1,Qh(k,!0),z_e(f,o,q[o],n),Nn.info(`Insert success, written hashes: ${S.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&pa.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),Nn.info(`${d.value}/${d.total} records inserted`)}a(p,"finishOutstanding"),d.stop();let h=As.statDBI(i,o),E=As.statDBI(f,o);if(Nn.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${E.entryCount}`),Qh.deepStrictEqual(h.entryCount,E.entryCount),await As.closeEnvironment(i),await As.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let S=ha.join(r,t),y=ha.join(S,"data.mdb"),N=ha.join(S,"lock.mdb");await To.unlink(y),await To.unlink(N),await To.rmdir(S),Nn.info(`Deleted old environment files from schema folder: ${y}, ${N}`)}let g=await As.openEnvironment(r,t),R=As.statDBI(g,o);Nn.info(`New stats: ${JSON.stringify(E)}. New stats after move: ${JSON.stringify(R)}`),Qh.deepStrictEqual(R.entryCount,E.entryCount),await As.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}a(Y_e,"processTable");async function W_e(e,t){As.initializeDBIs(e,Dc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Dc.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Dc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Dc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),k_e.isEmpty(t.user_name)||e.dbis[Dc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Dc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(W_e,"insertTransaction");function z_e(e,t,r,n){let i=e.dbis[t].get(r);Qh.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Dc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Dc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!F_e.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];wz(e,c,f,r)}else wz(e,c,l,r)}a(z_e,"validateIndices");function wz(e,t,r,n){try{let s=!1,i=B_e.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||Nn.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),Qh.deepStrictEqual(s,!0)}catch(s){Jh=!0,Nn.error(s),console.error(s)}}a(wz,"validateIndex");function j_e(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(j_e,"getHashDBI")});var Mz=v((MHe,Dz)=>{"use strict";var Py=require("path"),Mc=require("fs-extra"),Q_e=wy(),au=J(),Oz=St(),jP=ae(),Ci=(H(),M(W)),Ly=oe(),J_e=require("properties-reader"),X_e=pi(),Z_e=sh(),ege=Sn(),DHe=require("util"),tge=ege.searchByValue,rge=_n(),nge=hy(),sge=pt(),ige=Cz(),Pz=ys(),oge=Iy(),eE=new Q_e("4.0.0"),Lz=[],Xh,Zh;async function age(){try{if(await oge.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Xh){let t=Ly.changeExtension(Xh,".bak");await Mc.move(Xh,t)}if(Zh){let t=Ly.changeExtension(Zh,".bak");await Mc.move(Zh,t)}await Pz.generateKeys()}else console.log("Using existing certificates."),Pz.updateConfigCert(Xh,Zh,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(age,"generateNewKeys");async function cge(){console.log("Updating HarperDB nodes."),au.info("Updating HarperDB nodes.");let e=[];try{let t=new X_e(Ci.SYSTEM_SCHEMA_NAME,Ci.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await tge(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!sge.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let d=`Node name '${node_record.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(d),d}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let d=0,f=c.subscriptions.length;d<f;d++){let m=c.subscriptions[d],p=m.channel.split(":");u.push({schema:p[0],table:p[1],publish:m.publish,subscribe:m.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:Ci.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(Ly.isEmptyOrZeroLength(n))return;let s=new Z_e(Ci.SYSTEM_SCHEMA_NAME,Ci.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await rge.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{nge.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(cge,"updateNodes");async function lge(){let e=jP.get(Ci.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(Py.join("config","settings.js"))){au.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),au.info(t);let r=Py.dirname(e),n=jP.get(Ci.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=Py.join(n,"backup","4_0_0_upgrade_settings.bak"),i=Py.join(n,Ci.HDB_CONFIG_FILE);try{au.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Mc.copySync(e,s)}catch(f){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),f}try{au.info(`Creating new/upgraded settings file at '${new_settings_path}'`),console.log(`Creating new/upgraded settings file at '${new_settings_path}'`),au.info("Updating env variables with new settings values");let f=Oz.initOldConfig(e);Xh=f[Ci.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],Zh=f[Ci.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],Oz.createConfigFile(f)}catch(f){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),f}let o=Ly.getPropsFilePath();Mc.accessSync(o,Mc.constants.F_OK|Mc.constants.R_OK);let l=J_e(o).get(Ci.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
|
|
93
93
|
install_user = ${l}`;try{Mc.writeFileSync(o,u)}catch(f){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),f}try{jP.initSync(!0)}catch(f){throw console.error("Unable to initialize new properties. Please check the log for details."),f}let d="New settings file for 4.0.0 upgrade successfully created.";try{Mc.removeSync(r),console.log(d),au.info(d)}catch(f){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),f}}a(lge,"updateSettingsFile400");eE.async_functions.push(lge);eE.async_functions.push(age);eE.async_functions.push(ige);eE.async_functions.push(cge);Lz.push(eE);Dz.exports=Lz});var Bz=v((UHe,xz)=>{var uge=wy(),{databases:dge,table:fge}=(we(),M(mt)),mge=eo(),QP=J(),vz=new uge("4.7.0"),Uz=[];async function pge(){let e=dge.system?.hdb_license;if(!e){QP.debug?.("system.hdb_license table not found; no migration necessary");return}return QP.debug?.("Dropping existing system.hdb_license table"),await e.dropTable(),QP.debug?.("Creating new usage block system.hdb_license table"),fge(mge.hdb_license)}a(pge,"convertToUsageBlockLicenses");vz.async_functions.push(pge);Uz.push(vz);xz.exports=Uz});var JP=v((BHe,Gz)=>{"use strict";var cu=oe(),hge=(H(),M(W)),Fz=J(),{DATA_VERSION:Ege,UPGRADE_VERSION:_ge}=hge.UPGRADE_JSON_FIELD_NAMES_ENUM,kz=bz(),Dy=Mz(),Hz=Bz(),vc=new Map;kz&&kz.forEach(e=>{vc.set(e.version,e)});Dy&&Dy.forEach(e=>{vc.set(e.version,e)});Dy&&Dy.forEach(e=>{vc.set(e.version,e)});Hz&&Hz.forEach(e=>{vc.set(e.version,e)});function gge(){return[...vc.keys()].sort(cu.compareVersions)}a(gge,"getSortedVersions");function qz(e){let t=e[Ege],r=e[_ge];return cu.isEmptyOrZeroLength(t)||cu.isEmptyOrZeroLength(r)?(Fz.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),Fz.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...vc.keys()].sort(cu.compareVersions).filter(function(n){return cu.compareVersions(n,t)>0&&cu.compareVersions(n,r)<=0})}a(qz,"getVersionsForUpgrade");function Sge(e){return qz(e).length>0}a(Sge,"hasUpgradesRequired");function Tge(e){return cu.isEmptyOrZeroLength(e)?null:vc.has(e)?vc.get(e):null}a(Tge,"getDirectiveByVersion");Gz.exports={getSortedVersions:gge,getDirectiveByVersion:Tge,getVersionsForUpgrade:qz,hasUpgradesRequired:Sge}});var vy=v((kHe,Wz)=>{"use strict";var yge=require("util"),XP=require("chalk"),Rge=require("os"),Vz=_n(),bge=Sn(),Is=(H(),M(W)),Kz=dz(),eL=vw(),{UpgradeObject:$z}=pz(),{forceDowngradePrompt:Age}=Iy(),{packageJson:Ige}=Rt(),My=J(),Mf=oe(),tL=Ei(),wge=(we(),M(mt)),Nge=JP(),Cge=yge.promisify(tL.setSchemaDataToGlobal),Oge=bge.searchByValue,Pge="info_id",Lge="2.9.9",Dge="3.0.0";async function Mge(e){let t=new Kz.HdbInfoInsertObject(1,e,e),r=new eL.InsertObject(Is.OPERATIONS_ENUM.INSERT,Is.SYSTEM_SCHEMA_NAME,Is.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Is.INFO_TABLE_HASH_ATTRIBUTE,[t]);return tL.setSchemaDataToGlobal(),Vz.insert(r)}a(Mge,"insertHdbInstallInfo");async function ZP(e){let t,r=await Yz(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new Kz.HdbInfoInsertObject(i,e,e);let o=new eL.InsertObject(Is.OPERATIONS_ENUM.INSERT,Is.SYSTEM_SCHEMA_NAME,Is.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Is.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await Cge(),Vz.insert(o)}a(ZP,"insertHdbUpgradeInfo");async function Yz(){let e=new eL.NoSQLSeachObject(Is.SYSTEM_SCHEMA_NAME,Is.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Pge,Is.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Oge(e))}catch(r){console.error(r)}return t}a(Yz,"getAllHdbInfoRecords");async function vge(){let e=await Yz();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(vge,"getLatestHdbInfoRecord");async function Uge(){My.info("Checking if HDB software has been updated");try{let e=Ige.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await vge(),r;if(Mf.isEmpty(t))r=Lge;else if(r=t.data_version_num,Mf.compareVersions(r.toString(),e.toString())>0){if(!Mf.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(XP.yellow(`This instance's data was last run on version ${r}`)),console.error(XP.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${Rge.EOL}${Is.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Mf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(XP.yellow(`This instance's data was last run on version ${r}`)),await Age(new $z(r,e))?await ZP(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(tL.setSchemaDataToGlobal(),xge(r),e.toString()===r.toString())return;let n=new $z(r,e);if(Nge.hasUpgradesRequired(n))return n;Mf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await ZP(n.upgrade_version),My.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw My.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),My.fatal(e),e}}a(Uge,"getVersionUpdateInfo");function xge(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${Is.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in wge.databases.system))throw console.log(t),new Error(t);if(!Mf.isEmpty(e)&&e<Dge)throw console.log(t),new Error(t)}a(xge,"checkIfInstallIsSupported");Wz.exports={insertHdbInstallInfo:Mge,insertHdbUpgradeInfo:ZP,getVersionUpdateInfo:Uge}});var Jz=v((qHe,Qz)=>{"use strict";var Uy=require("joi"),{boolean:Bge,string:rL,number:Fge}=Uy.types(),zz=require("fs-extra"),tE=(H(),M(W)),jz=require("path"),kge=ot();Qz.exports=Hge;function Hge(e){let t=rL.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=Uy.object({[tE.INSTALL_PROMPTS.ROOTPATH]:Uy.custom(qge),[tE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Uy.alternatives([Fge.min(0),rL]).allow("null",null),[tE.INSTALL_PROMPTS.TC_AGREEMENT]:rL.valid("yes","YES","Yes"),[tE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[tE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Bge});return kge.validateBySchema(e,r)}a(Hge,"installValidator");function qge(e,t){if(zz.existsSync(jz.join(e,"system/hdb_user/data.mdb"))||zz.existsSync(jz.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(qge,"validateRootAvailable")});var Zz=v(($He,Xz)=>{"use strict";var{mkdirpSync:Gge,copySync:$ge}=require("fs-extra"),Uc=require("path"),rE=(H(),M(W)),{PACKAGE_ROOT:Vge}=Rt(),sL=J(),Kge=fs(),nL=eo(),Yge=bt(),{NON_REPLICATING_SYSTEM_TABLES:Wge}=(we(),M(mt));Xz.exports=zge;async function zge(e){sL.trace("Mounting HarperDB"),lu(e),lu(Uc.join(e,"backup")),lu(Uc.join(e,"keys")),lu(Uc.join(e,"keys",rE.LICENSE_FILE_NAME)),lu(Uc.join(e,"log")),lu(Uc.join(e,"database")),lu(Uc.join(e,"components")),$ge(Uc.resolve(Vge,"./utility/install/README.md"),Uc.join(e,"README.md")),await jge()}a(zge,"mountHdb");async function jge(){let e=md(),t=Object.keys(nL);for(let r of t){let n=nL[r].hash_attribute;try{Yge.initSystemSchemaPaths(rE.SYSTEM_SCHEMA_NAME,r);let s=new e(rE.SYSTEM_SCHEMA_NAME,r,n);s.attributes=nL[r].attributes;let i=s.attributes.find(({attribute:o})=>o===n);i.isPrimaryKey=!0,Wge.includes(r)||(s.audit=!0),await Kge.createTable(r,s)}catch(s){throw sL.error(`issue creating environment for ${rE.SYSTEM_SCHEMA_NAME}.${r}: ${s}`),s}}}a(jge,"createLMDBTables");function lu(e){Gge(e,{mode:rE.HDB_FILE_PERMISSIONS}),sL.info(`Directory ${e} created`)}a(lu,"makeDirectory")});var mj=v((WHe,fj)=>{"use strict";var aL=require("os"),sj=require("inquirer"),Xs=require("fs-extra"),Qge=require("properties-reader"),du=require("chalk"),Ro=require("path"),Jge=require("human-readable-ids").hri,iL,Xge=require("yaml"),Sr=J(),xc=ae(),nE=oe(),By=el(),ij=vy(),{packageJson:oj}=Rt(),he=(H(),M(W)),{CONFIG_PARAM_MAP:KHe,CONFIG_PARAMS:$t}=he,Zge=Jz(),eSe=Zz(),cL=St(),tSe=Es(),rSe=eh(),nSe=qP(),sSe=Ei(),iSe=require("util").promisify,oSe=iSe(sSe.setSchemaDataToGlobal),ej=ys(),uu=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),un=a(e=>du.magenta.bold(e),"HDB_PROMPT_MSG"),aSe="https://harperdb.io/legal/end-user-license-agreement",Bc=aL.EOL,Ea="",cSe="yes",tj="Starting HarperDB install...",rj="HarperDB installation was successful.",nj="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",lSe="An out of date version of HarperDB is already installed.",oL="It appears that HarperDB is already installed. Exiting install...",uSe="Aborting install",YHe=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),dSe=new RegExp(/^[^\s.,*>]+$/),fSe=aL.homedir(),mSe=Ro.join(fSe,he.HDB_ROOT_DIR_NAME),pSe="HDB_ADMIN",hSe="CLUSTER_USER",ESe="dev",_Se="localhost",xy={[$t.HTTP_CORS]:!0,[$t.HTTP_CORSACCESSLIST]:["*"],[$t.HTTP_PORT]:9926,[$t.AUTHENTICATION_AUTHORIZELOCAL]:!0,[$t.THREADS_COUNT]:1,[$t.THREADS_DEBUG]:!0,[$t.LOGGING_STDSTREAMS]:!0,[$t.LOGGING_LEVEL]:"info",[$t.OPERATIONSAPI_NETWORK_PORT]:9925,[$t.LOCALSTUDIO_ENABLED]:!0},ln={DESTINATION:"Please enter a destination for HarperDB:",HDB_USERNAME:"Please enter a username for the administrative user:",HDB_PASS:"Please enter a password for the administrative user:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:",DEFAULTS_MODE:"Default Config - dev (easy access/debugging) or prod (security/performance): (dev/prod)",REPLICATION_HOSTNAME:"Please enter the hostname for this server:"},Fc=By([he.INSTALL_PROMPTS.HDB_CONFIG]),yo,aj=!1,lL=!1,cj=!1;fj.exports={install:lj,updateConfigEnv:CSe,setIgnoreExisting:OSe};lj.createSuperUser=dj;async function lj(){console.log(un(Bc+tj+Bc)),Sr.notify(tj);let e;Fc[he.INSTALL_PROMPTS.HDB_CONFIG]&&(e=gSe());let t=TSe();Object.assign(t,e),t[he.INSTALL_PROMPTS.TC_AGREEMENT]&&t[he.INSTALL_PROMPTS.ROOTPATH]&&t[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[he.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(cj=!0,t[he.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=Zge(t);if(r)throw r.message;await ySe(),await RSe(t);let n=await SSe(t);yo=n[he.INSTALL_PROMPTS.ROOTPATH],Fc[he.INSTALL_PROMPTS.HDB_CONFIG]&&Ro.dirname(Fc[he.INSTALL_PROMPTS.HDB_CONFIG])===yo&&(aj=!0),!lL&&!Fc[he.INSTALL_PROMPTS.HDB_CONFIG]&&await Xs.pathExists(Ro.join(yo,he.HDB_CONFIG_FILE))&&(console.error(oL),process.exit()),iL||(iL=(await import("ora")).default);let s=iL({prefixText:un("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),nE.isEmpty(yo))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");xc.setHdbBasePath(yo),await eSe(yo),await bSe(),await ASe(n),Sr.initLogSettings(!0),await dj(n),await wSe(n),await ej.updateConfigCert(),await ej.generateCertsKeys(),await NSe(),nSe(),s.stop(),console.log(un(Bc+rj+Bc)),Sr.notify(rj)}a(lj,"install");function gSe(){let e=Xge.parseDocument(Xs.readFileSync(Fc[he.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=cL.flattenConfig(e.toJSON());return t[he.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[he.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(gSe,"getConfigFromFile");async function SSe(e){Sr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:uu,when:_a(e[he.INSTALL_PROMPTS.ROOTPATH],ln.DESTINATION),name:he.INSTALL_PROMPTS.ROOTPATH,prefix:Ea,default:mSe,validate:a(async s=>Js(s)?Js(s):await Xs.pathExists(Ro.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:un(ln.DESTINATION)},{type:"input",transformer:uu,when:_a(e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],ln.HDB_USERNAME),name:he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Ea,default:pSe,validate:a(s=>Js(s)?Js(s):(t=s,!0),"validate"),message:un(ln.HDB_USERNAME)},{type:"password",when:_a(e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],ln.HDB_PASS),name:he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Ea,validate:a(s=>Js(s)?Js(s):!0,"validate"),message:un(ln.HDB_PASS)},{type:"input",transformer:uu,when:_a(e[he.INSTALL_PROMPTS.DEFAULTS_MODE],ln.DEFAULTS_MODE),name:he.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:Ea,default:ESe,validate:a(s=>Js(s)?Js(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:un(ln.DEFAULTS_MODE)}];if(cj||r.push({type:"input",name:he.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:uu,when:_a(e[he.INSTALL_PROMPTS.REPLICATION_HOSTNAME],ln.REPLICATION_HOSTNAME),prefix:Ea,default:_Se,message:un(ln.REPLICATION_HOSTNAME)}),nE.autoCastBoolean(e[he.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:uu,when:_a(e[he.INSTALL_PROMPTS.CLUSTERING_NODENAME],ln.NODE_NAME),name:he.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Ea,default:Jge.random(),validate:a(i=>dSe.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:un(ln.NODE_NAME)},{type:"input",transformer:uu,when:_a(e[he.INSTALL_PROMPTS.CLUSTERING_USER],ln.CLUSTER_USERNAME),name:he.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Ea,default:hSe,validate:a(i=>Js(i)?Js(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:un(ln.CLUSTER_USERNAME)},{type:"password",when:_a(e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD],ln.CLUSTER_PASS),name:he.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Ea,validate:a(i=>Js(i)?Js(i):!0,"validate"),message:un(ln.CLUSTER_PASS)}];r.push(...s)}let n=await sj.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(SSe,"installPrompts");function _a(e,t){return e!==void 0?(t.includes("password")?(console.log(`${un(t)} ${du.gray("[hidden]")}`),Sr.trace(`${un(t)} [hidden]`)):(console.log(`${un(t)} ${e}`),Sr.trace(`${un(t)} ${e}`)),!1):!0}a(_a,"displayCmdEnvVar");function Js(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Js,"checkForEmptyValue");function TSe(){let e=Object.keys(he.INSTALL_PROMPTS),t=By(e),r=By(Object.keys(he.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=he.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(TSe,"checkForPromptOverride");async function ySe(){Sr.trace("Checking for existing install.");let e=nE.getPropsFilePath(),t=await Xs.pathExists(e),r;if(t){Sr.trace(`Install found an existing boot prop file at:${e}`);let n=Qge(e),s=cL.getConfigValue(he.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(he.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Xs.pathExists(s)}if(!t&&nE.noBootFile()&&(r=!0),r&&!lL){if(Sr.trace(`Install found existing HDB config at:${e}`),await ij.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${oj.version}. Exiting install...`;console.log(Bc+du.magenta.bold(lSe)),console.log(du.magenta.bold(s)),Sr.error(s)}else console.log(Bc+du.magenta.bold(oL)),Sr.error(oL);process.exit(0)}}a(ySe,"checkForExistingInstall");async function RSe(e){Sr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${aSe}${Bc}and can be viewed by typing or copying and pasting the URL into your web browser.${Bc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:Ea,transformer:uu,when:_a(e[he.INSTALL_PROMPTS.TC_AGREEMENT],t),name:he.INSTALL_PROMPTS.TC_AGREEMENT,message:un(t),validate:a(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:du.yellow("Please enter 'yes' or 'no'"),"validate")},n=await sj.prompt([r]);n[he.INSTALL_PROMPTS.TC_AGREEMENT]&&n[he.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==cSe&&(console.log(du.yellow(nj)),Sr.error(nj),process.exit(0))}a(RSe,"termsAgreement");async function bSe(){let e=Ro.join(yo,he.HDB_CONFIG_FILE),t;try{t=aL.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
|
|
94
|
-
install_user = ${t}`,n=nE.getHomeDir(),s=Ro.join(n,he.HDB_HOME_DIR_NAME),i=Ro.join(s,he.LICENSE_KEY_DIR_NAME);try{Xs.mkdirpSync(s,{mode:he.HDB_FILE_PERMISSIONS}),Xs.mkdirpSync(i,{mode:he.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${he.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Ro.join(s,he.BOOT_PROPS_FILE_NAME);try{await Xs.writeFile(o,r)}catch(c){throw Sr.error(`There was an error creating the boot file at path: ${o}`),c}xc.setProperty(he.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),xc.setProperty(he.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),xc.setProperty(xc.BOOT_PROPS_FILE_PATH,o)}}a(bSe,"createBootPropertiesFile");async function ASe(e){Sr.trace("Creating HarperDB config file");let t=By(Object.keys(he.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[he.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in xy){if(r===$t.HTTP_PORT&&t[$t.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??xy[r],t[$t.HTTP_SECUREPORT]=null;continue}else if(r===$t.HTTP_PORT)continue;if(r===$t.OPERATIONSAPI_NETWORK_PORT&&t[$t.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??xy[r],t[$t.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===$t.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=xy[r])}}else t[$t.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[$t.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[$t.HTTP_PORT.toLowerCase()]&&(t[$t.HTTP_SECUREPORT]=null);try{Fc[he.INSTALL_PROMPTS.HDB_CONFIG]||cL.createConfigFile(t),xc.initSync()}catch(r){ISe(r)}}a(ASe,"createConfigFile");function ISe(e){Sr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(uSe);let t=Ro.resolve(xc.get(xc.BOOT_PROPS_FILE_PATH),"../");t&&Xs.removeSync(t),yo&&(aj?Xs.readdirSync(yo,{withFileTypes:!0}).forEach(n=>{let s=Ro.join(n.path,n.name);s!==Fc[he.INSTALL_PROMPTS.HDB_CONFIG]&&Xs.removeSync(s)}):Xs.removeSync(yo)),process.exit(1)}a(ISe,"rollbackInstall");async function uj(e,t){Sr.trace("Creating admin user"),await oSe();let r;try{r=await rSe.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await tSe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(uj,"createAdminUser");async function dj(e){Sr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await uj(t,r),delete e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(dj,"createSuperUser");async function wSe(e){Sr.trace("Creating Cluster user.");let t;e[he.INSTALL_PROMPTS.CLUSTERING_USER]&&e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[he.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await uj({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[he.INSTALL_PROMPTS.CLUSTERING_USER],delete e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(wSe,"createClusterUser");async function NSe(){let e=oj.version;if(e)await ij.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(NSe,"insertHdbVersionInfo");function CSe(e){Fc[he.INSTALL_PROMPTS.HDB_CONFIG]=e}a(CSe,"updateConfigEnv");function OSe(e){lL=e}a(OSe,"setIgnoreExisting")});var dL={};ye(dL,{isHdbInstalled:()=>PSe});function PSe(e,t){try{uL.default.statSync((0,Fy.getPropsFilePath)()),uL.default.statSync(e.get(bm.SETTINGS_PATH_KEY))}catch(r){if((0,Fy.noBootFile)())return!0;if(r.code==="ENOENT")return!1;throw t.error(`Error checking for HDB install - ${r}`),r}return!0}var uL,Fy,fL=
|
|
94
|
+
install_user = ${t}`,n=nE.getHomeDir(),s=Ro.join(n,he.HDB_HOME_DIR_NAME),i=Ro.join(s,he.LICENSE_KEY_DIR_NAME);try{Xs.mkdirpSync(s,{mode:he.HDB_FILE_PERMISSIONS}),Xs.mkdirpSync(i,{mode:he.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${he.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Ro.join(s,he.BOOT_PROPS_FILE_NAME);try{await Xs.writeFile(o,r)}catch(c){throw Sr.error(`There was an error creating the boot file at path: ${o}`),c}xc.setProperty(he.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),xc.setProperty(he.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),xc.setProperty(xc.BOOT_PROPS_FILE_PATH,o)}}a(bSe,"createBootPropertiesFile");async function ASe(e){Sr.trace("Creating HarperDB config file");let t=By(Object.keys(he.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[he.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in xy){if(r===$t.HTTP_PORT&&t[$t.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??xy[r],t[$t.HTTP_SECUREPORT]=null;continue}else if(r===$t.HTTP_PORT)continue;if(r===$t.OPERATIONSAPI_NETWORK_PORT&&t[$t.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??xy[r],t[$t.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===$t.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=xy[r])}}else t[$t.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[$t.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[$t.HTTP_PORT.toLowerCase()]&&(t[$t.HTTP_SECUREPORT]=null);try{Fc[he.INSTALL_PROMPTS.HDB_CONFIG]||cL.createConfigFile(t),xc.initSync()}catch(r){ISe(r)}}a(ASe,"createConfigFile");function ISe(e){Sr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(uSe);let t=Ro.resolve(xc.get(xc.BOOT_PROPS_FILE_PATH),"../");t&&Xs.removeSync(t),yo&&(aj?Xs.readdirSync(yo,{withFileTypes:!0}).forEach(n=>{let s=Ro.join(n.path,n.name);s!==Fc[he.INSTALL_PROMPTS.HDB_CONFIG]&&Xs.removeSync(s)}):Xs.removeSync(yo)),process.exit(1)}a(ISe,"rollbackInstall");async function uj(e,t){Sr.trace("Creating admin user"),await oSe();let r;try{r=await rSe.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await tSe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(uj,"createAdminUser");async function dj(e){Sr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await uj(t,r),delete e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(dj,"createSuperUser");async function wSe(e){Sr.trace("Creating Cluster user.");let t;e[he.INSTALL_PROMPTS.CLUSTERING_USER]&&e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[he.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await uj({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[he.INSTALL_PROMPTS.CLUSTERING_USER],delete e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(wSe,"createClusterUser");async function NSe(){let e=oj.version;if(e)await ij.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(NSe,"insertHdbVersionInfo");function CSe(e){Fc[he.INSTALL_PROMPTS.HDB_CONFIG]=e}a(CSe,"updateConfigEnv");function OSe(e){lL=e}a(OSe,"setIgnoreExisting")});var dL={};ye(dL,{isHdbInstalled:()=>PSe});function PSe(e,t){try{uL.default.statSync((0,Fy.getPropsFilePath)()),uL.default.statSync(e.get(bm.SETTINGS_PATH_KEY))}catch(r){if((0,Fy.noBootFile)())return!0;if(r.code==="ENOENT")return!1;throw t.error(`Error checking for HDB install - ${r}`),r}return!0}var uL,Fy,fL=se(()=>{H();uL=b(require("node:fs")),Fy=b(oe());a(PSe,"isHdbInstalled")});var Ej=v((QHe,hj)=>{"use strict";var mL=oe(),ws=J(),pj=JP();hj.exports={processDirectives:LSe};async function LSe(e){console.log("Starting upgrade process...");let t=pj.getVersionsForUpgrade(e),r=vSe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;ws.notify(c),console.log(c);let l=[],u=[];try{l=DSe(o.sync_functions)}catch(d){throw ws.error(`Error while running an upgrade script for ${o.version}`),d}try{u=await MSe(o.async_functions)}catch(d){throw ws.error(`Error while running an upgrade script for ${o.version}`),d}n.push(...l,...u)}return n}a(LSe,"processDirectives");function DSe(e){if(mL.isEmptyOrZeroLength(e))return ws.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ws.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(ws.info(`Running function ${r.name}`),!(r instanceof Function)){ws.info("Variable being processed is not a function");continue}let n=r();ws.info(n),t.push(n)}return t}a(DSe,"runSyncFunctions");async function MSe(e){if(mL.isEmptyOrZeroLength(e))return ws.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ws.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(ws.info(`Running function ${s.name}`),!(s instanceof Function)){ws.info("Variable being processed is not a function");continue}let i=await s();ws.info(i),t.push(i)}return t}a(MSe,"runAsyncFunctions");function vSe(e){if(mL.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=pj.getDirectiveByVersion(r);n&&t.push(n)}return t}a(vSe,"getUpgradeDirectivesToInstall")});var Rj=v((ZHe,yj)=>{"use strict";var Sj=ae();Sj.initSync();var USe=require("chalk"),ga=J(),vf=(H(),M(W)),xSe=Ej(),XHe=oe(),BSe=(fL(),M(dL)),Tj=vy(),FSe=Iy(),kSe=Ei(),{packageJson:_j}=Rt(),HSe=require("util").promisify,qSe=HSe(kSe.setSchemaDataToGlobal),gj,{UPGRADE_VERSION:pL}=vf.UPGRADE_JSON_FIELD_NAMES_ENUM;yj.exports={upgrade:GSe};async function GSe(e){await qSe(),gj===void 0&&(gj=Cf()),BSe.isHdbInstalled(Sj,ga)||(ky("Harper is not installed. Harper must be installed before running an upgrade.",vf.LOG_LEVELS.ERROR),process.exit(1));let r=e;r||(r=await Tj.getVersionUpdateInfo(),r||(console.log("HarperDB version is current"),process.exit(0))),ky(`This version of HarperDB is ${_j.version}`,vf.LOG_LEVELS.INFO);let n=r[pL]??_j.version;n||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${vf.HDB_SUPPORT_ADDRESS}`),ga.notify("Missing new version field from upgrade info object"),process.exit(1));let s,i=0;try{s=await FSe.forceUpdatePrompt(r)}catch(o){ga.error("There was an error when prompting user about upgrade."),ga.error(o),s=!1,i=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(i)),ga.info(`Starting upgrade to version ${n}`),await $Se(r),ky(`HarperDB was successfully upgraded to version ${r[pL]}`,vf.LOG_LEVELS.INFO)}a(GSe,"upgrade");async function $Se(e){try{await xSe.processDirectives(e)}catch(t){throw ky("There was an error during the data upgrade. Please check the logs.",vf.LOG_LEVELS.ERROR),t}try{await Tj.insertHdbUpgradeInfo(e[pL])}catch(t){ga.error("Error updating the 'hdb_info' system table."),ga.error(t)}}a($Se,"runUpgrade");function ky(e,t=void 0){t||(t=ga.info),ga[t](e),console.log(USe.magenta(e))}a(ky,"printToLogAndConsole")});var bj={};ye(bj,{SERVERS:()=>Uf,portServer:()=>hL,setPortServerMap:()=>Hy});function Hy(e,t){let r=hL.get(e)??[];hL.set(e,[...r,t])}var Uf,hL,EL=se(()=>{Uf={},hL=new Map;a(Hy,"setPortServerMap")});function KSe(e){if(typeof e!="string")throw new qy(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new qy(`Unable to split license into components; license must be a string with three dot-separated parts; got: ${e}`);throw u.cause=l,u}if(t.length!==3)throw new xf(`License must have three dot-separated parts; got ${t.length}`);let[r,n,s]=t,i=VSe.getKey();if(!(0,$y.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new gL("License signature is invalid");return{header:c(r),payload:c(n),signature:c(s)};function c(l){return Buffer.from(l,"base64url").toString("utf8")}}function YSe(e){if(e?.typ!=="Harper-License")throw new sE(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new sE(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function WSe(e,t){return e.required?typeof t===e.type:typeof t>"u"||typeof t===e.type}function zSe(e){let t={id:{required:!0,type:"string"},region:{required:!1,type:"string"},expiration:{required:!0,type:"string"},level:{required:!0,type:"number"},reads:{required:!0,type:"number"},writes:{required:!0,type:"number"},readBytes:{required:!0,type:"number"},writeBytes:{required:!0,type:"number"},realTimeMessages:{required:!0,type:"number"},realTimeBytes:{required:!0,type:"number"},cpuTime:{required:!0,type:"number"},storage:{required:!0,type:"number"},autoRenew:{required:!1,type:"boolean"}};for(let r in t){let{required:n,type:s}=t[r],i=n?`required attribute '${r}'`:`optional attribute '${r}', when present,`;if(!WSe(t[r],e[r]))throw new Gy(`Invalid license payload; ${i} must be a ${s}; got: ${typeof e[r]}`)}}function Ij(e){let{header:t,payload:r}=KSe(e),n;try{n=JSON.parse(t)}catch(i){let o=new sE;throw o.cause=i,o}YSe(n);let s;try{s=JSON.parse(r)}catch(i){let o=new Gy;throw o.cause=i,o}return zSe(s),s}var $y,Aj,_L,qy,xf,gL,sE,Gy,VSe,wj=se(()=>{$y=require("node:crypto"),Aj=b(ae());H();_L=class{static{a(this,"PublicKey")}pem;constructor(t){t&&(t==="test"||t==="development")?this.pem=`-----BEGIN PUBLIC KEY-----
|
|
95
95
|
MCowBQYDK2VwAyEAO301jvpO12znGdK/Izrre518pgmQNk9hSMXf4wDMucM=
|
|
96
96
|
-----END PUBLIC KEY-----
|
|
97
97
|
`:this.pem=`-----BEGIN PUBLIC KEY-----
|
|
98
98
|
MCowBQYDK2VwAyEAMtpzMn9YfS0fGaDLcAmYQx2OH8kVevwbNyQ1RIj5cvw=
|
|
99
99
|
-----END PUBLIC KEY-----
|
|
100
|
-
`}getKey(){return(0,$y.createPublicKey)(this.pem)}toString(){return this.pem}},qy=class extends TypeError{static{a(this,"LicenseEncodingError")}},xf=class extends TypeError{static{a(this,"InvalidLicenseError")}},gL=class extends xf{static{a(this,"InvalidLicenseSignatureError")}},sE=class extends xf{static{a(this,"InvalidHeaderError")}},Gy=class extends xf{static{a(this,"InvalidPayloadError")}},VSe=new _L(Aj.get(F.LICENSE_MODE));a(KSe,"validateLicenseSignature");a(YSe,"validateLicenseHeader");a(WSe,"valid");a(zSe,"validateLicensePayload");a(Ij,"validateLicense")});var Vy={};ye(Vy,{getActiveLicense:()=>bL,getUsageLicenses:()=>xj,getUsageLicensesOp:()=>IL,installUsageLicense:()=>RL,installUsageLicenseOp:()=>yL,isActiveLicense:()=>vj,isLicensed:()=>AL,loadAndWatchLicensesDir:()=>JSe,recordUsage:()=>Uj});async function yL(e){let t=e.license;try{await RL(t)}catch(r){let n=new Oj.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function RL(e){let t=Ij(e),{id:r}=t;if(await ve.system.hdb_license.get(r))throw new TL(`A usage license with ${r} already exists`);return bo.info?.("Installing usage license:",t),ve.system.hdb_license.put(r,t)}function vj(e){return(e.usedReads??0)<e.reads&&(e.usedReadBytes??0)<e.readBytes&&(e.usedWrites??0)<e.writes&&(e.usedWriteBytes??0)<e.writeBytes&&(e.usedRealTimeMessages??0)<e.realTimeMessages&&(e.usedRealTimeBytes??0)<e.realTimeBytes&&(e.usedCpuTime??0)<e.cpuTime&&(e.usedStorage??0)<e.storage||e.reads===-1&&e.readBytes===-1&&e.writes===-1&&e.writeBytes===-1&&e.realTimeMessages===-1&&e.realTimeBytes===-1&&e.cpuTime===-1&&e.storage===-1}async function bL(){let e=Pj.get(F.LICENSE_REGION),t={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:new Date().toISOString()}]};e!==void 0&&t.conditions.push({attribute:"region",comparator:"equals",value:e});let r=ve.system.hdb_license?.search(t);for await(let n of r??[])if(vj(n))return n}async function AL(){return await bL()!==void 0}async function Uj(e){Sa=bo.forComponent("license"),Sa.trace?.("Recording usage into license from analytics");let t,r=(await bL())?.id;if(r){Sa.trace?.("Found license to record usage into:",r);let n={};At(n,()=>{t=ve.system.hdb_license.update(r,n);for(let s of e)switch(Sa.trace?.("Processing analytics record:",s),s.metric){case"db-read":Sa.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":Sa.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":Sa.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",s.count),t.addTo("usedRealTimeBytes",s.mean*s.count);break;case"cpu-usage":s.path==="user"&&(Sa.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:Sa.trace?.("Skipping metric:",s.metric)}})}else if(!process.env.DEV_MODE){let n="This server does not have valid usage licenses, this should only be used for educational and development purposes.";Nj||(console.error(n),Nj=!0),Cj===void 0&&(Cj=setInterval(()=>{bo.notify(n)},jSe).unref())}}function IL(e){let t={};return e.region&&(t.region=e.region),xj(t)}function xj(e){let t=[],r=typeof e=="object"?Object.keys(e):[];return r.length>0&&r.forEach(n=>{t.push({attribute:n,comparator:"equals",value:e[n]})}),ve.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function QSe(e){bo.trace?.("Loading usage license from file:",e);let t=await Dj.readFile(e,{encoding:"utf-8"});try{await RL(t)}catch(r){bo.error?.("Failed to install usage license from file:",e,r)}}function JSe(){let e=SL.default.join(SL.default.dirname(Lj.getConfigFilePath()),"licenses");(0,Mj.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",QSe)}var Oj,bo,Pj,SL,Lj,Dj,Mj,TL,Nj,Cj,jSe,Sa,iE=ne(()=>{wj();Oj=b(_e()),bo=b(J());is();Ga();Pj=b(ae());H();we();SL=b(require("node:path")),Lj=b(St()),Dj=b(require("node:fs/promises")),Mj=require("chokidar"),TL=class extends Error{static{a(this,"ExistingLicenseError")}};a(yL,"installUsageLicenseOp");a(RL,"installUsageLicense");Nj=!1,jSe=6e5;a(vj,"isActiveLicense");a(bL,"getActiveLicense");a(AL,"isLicensed");a(Uj,"recordUsage");jA(Uj);a(IL,"getUsageLicensesOp");a(xj,"getUsageLicenses");a(QSe,"loadLicenseFile");a(JSe,"loadAndWatchLicensesDir")});var Qy={};ye(Qy,{deliverSocket:()=>zj,getHttpOptions:()=>tTe,getRequestId:()=>Xj,handleApplication:()=>eTe,httpServer:()=>ML,logRequest:()=>cE,proxyRequest:()=>rTe,registerServer:()=>LL,suppressHandleApplicationWarning:()=>ZSe});function eTe(e){lE=e.options.getAll(),e.options.on("change",t=>{lE=e.options.getAll()})}function tTe(){return lE}function zj(e,t,r){let n=e?.read?e:new qj.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Uf[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=Uf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Ta.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function rTe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=Bj.get(s),r){case"connection":i=zj(void 0,t),Bj.set(s,i),i.write=(c,l,u)=>(Yy.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(Yy.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Yy.parentPort.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}}function LL(e,t,r=!0){t||(t=Dr.default.get(F.HTTP_PORT));let n=Uf[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",Hj),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Uf[t]=e;e.on("unhandled",Hj)}function DL(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Dr.default.get(F.HTTP_PORT)!=null&&t.push({port:Dr.default.get(F.HTTP_PORT),secure:Dr.default.get(F.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Dr.default.get(F.HTTP_SECUREPORT)!=null&&t.push({port:Dr.default.get(F.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Dr.default.get(F.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,Gj.resolvePath)(Dr.default.get(F.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function ML(e,t){let r=[];for(let{port:n,secure:s}of DL(t))r.push(jj(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?OL[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,LL(e,n,!1)),Wy[n]=zy(OL,n);return r}function jj(e,t,r,n){if(Hy(e,{protocol_name:t?"HTTPS":"HTTP",name:Jy()}),!Ky[e]){let s=r?"operationsApi_network":"http",i=Dr.default.get(s+"_keepAliveTimeout"),o=Dr.default.get(s+"_timeout"),c=Dr.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Dr.default.get(F.HTTP_MAXHEADERSIZE)},u=Dr.default.get(s+"_mtls"),d=Dr.default.get(s+"_mtls_required"),f;if(t){let E=Dr.default.get("tls");f=Dr.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,$j.getTicketKeys)(),SNICallback:(0,Vj.createTLSSelector)(r?"operations-api":"server",u),ciphers:E.ciphers??E[0]?.ciphers})}let m=a(async(E,g)=>{let R=performance.now(),S=0;try{let N=new uc(E,g);r&&(N.isOperationsServer=!0),lE.logging?.id&&(N.requestId=S=Xj());let I=await Wy[e](N);if(!I){if(N._nodeResponse.statusCode){cE(E,N._nodeResponse.statusCode,S,performance.now()-R);return}I=Qj(N)}if(I.headers?.set||(I.headers=new qs(I.headers)),await AL()?I.headers.set("Server","HarperDB"):I.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),I.status===-1){for(let te of I.headers||[])g.setHeader(te[0],te[1]);return E.baseRequest=N,g.baseResponse=I,Ky[e].emit("unhandled",E,g)}let $=I.status||200;g.statusCode=$;let ee=performance.now(),q=ee-R,k=I.body,j,Y=!1;if(!I.handlesHeaders){let te=I.headers||new qs;k?k.length>=0?(typeof k=="string"?te.set("Content-Length",Buffer.byteLength(k)):te.set("Content-Length",k.length),j=!0):k instanceof vs&&(k.size?te.set("Content-Length",k.size):k.on&&(Y=!0,k.on("size",be=>{g.headersSent||g.setHeader("Content-Length",be)})),k=k.stream()):(te.set("Content-Length","0"),j=!0);let ge=`hdb;dur=${q.toFixed(2)}`;if(I.wasCacheMiss&&(ge+=", miss"),qp(te,"Server-Timing",ge,!0),!g.headersSent)if(Y){if(te)if(te[Symbol.iterator])for(let[be,Ye]of te)g.setHeader(be,Ye);else for(let be in te)g.setHeader(be,te[be])}else g.writeHead($,te&&(te[Symbol.iterator]?Array.from(te):te));j&&g.end(k)}let le=N.handlerPath,fe=N.method;if(Ve(q,"duration",le,fe,I.wasCacheMiss==null?void 0:I.wasCacheMiss?"cache-miss":"cache-hit"),tn($<400,"success",le,fe),tn(1,"response_"+$,le,fe),cE(E,$,S,q),!j)if(k instanceof ReadableStream&&(k=CL.Readable.fromWeb(k)),(k[Symbol.iterator]||k[Symbol.asyncIterator])&&(k=CL.Readable.from(k)),k?.pipe){k.pipe(g),k.destroy&&g.on("close",()=>{k.destroy()});let te=0;k.on("data",ge=>{te+=ge.length}),k.on("end",()=>{Ve(performance.now()-ee,"transfer",le,fe),Ve(te,"bytes-sent",le,fe)})}else k?.then?k.then(te=>{g.end(te)},y):g.end(k)}catch(N){y(N)}function y(N){let I=N.headers,$=N.statusCode||500;g.writeHead($,I&&(I[Symbol.iterator]?Array.from(I):I)),g.end(XSe(N)),cE(E,$,S,performance.now()-R),N.statusCode?N.statusCode===500?Ta.default.warn(N):Ta.default.info(N):Ta.default.error(N)}a(y,"onError")},"requestHandler"),p=ES(m,(E,g)=>{g.statusCode=503,g.end("Service unavailable, exceeded request queue limit"),Ve(!0,"service-unavailable",e)},Dr.default.get(s+"_requestQueueLimit")),h=Ky[e]=(t?f?Kj.createSecureServer:Yj.createServer:jy.createServer)(l,(E,g)=>{let R=E.method;R==="GET"||R==="OPTIONS"||R==="HEAD"?m(E,g):p(E,g)});i>=0&&(h.keepAliveTimeout=i),c>=0&&(h.headersTimeout=c),t&&(h.ports||(h.ports=[]),h.ports.push(e),l.SNICallback.initialize(h),u&&(h.mtlsConfig=u),h.on("secureConnection",E=>{E._parent.startTime&&Ve(performance.now()-E._parent.startTime,"tls-handshake",e),Ve(E.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),LL(h,e)}return Ky[e]}function zy(e,t){let r=Qj;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),"nextCallback")}}return r}function Qj(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new qs}}function nTe(e,t){ML(e,{requestOnly:!0,...t})}function Jj(e,t){for(let{port:r}of DL(t))Fj[t?.runFirst?"unshift":"push"]({listener:e,port:r}),PL[r]=zy(Fj,r)}function sTe(e,t){let r=[];for(let{port:n,secure:s}of DL(t)){Hy(n,{protocol_name:s?"WSS":"WS",name:Jy()});let i=jj(n,s,t?.isOperationsServer,t?.mtls);oE[n]||(oE[n]=new Wj.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),oE[n].on("connection",(o,c)=>{try{let l=new uc(c);l.isWebSocket=!0;let u=Wy[n](l);Ta.default.debug("Received WS connection, calling listeners",wL),kj[n](o,l,u)}catch(l){Ta.default.warn("Error in handling WS connection",l)}}),Jj((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):oE[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),oE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{PL[n]&&PL[n](o,c,l)})),r.push(i),wL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),kj[n]=zy(wL,n),Wy[n]=zy(OL,n)}return r}function Hj(e,t){t.writeHead(404),t.end(`Not found
|
|
101
|
-
`),cE(e,404,0,e.requestId)}function cE(e,t,r,n){let s=lE.logging;if(s){NL||(NL=Ta.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";NL[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+iTe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function iTe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function Xj(){return aE||(aE=new BigInt64Array([1n]),aE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",aE.buffer))),Number(Atomics.add(aE,0,1n))}var qj,Ta,Yy,Dr,Gj,$j,Vj,Kj,Yj,jy,CL,Wj,XSe,oE,Ky,Wy,OL,lE,ZSe,Bj,Fj,PL,wL,kj,NL,aE,vL=
|
|
100
|
+
`}getKey(){return(0,$y.createPublicKey)(this.pem)}toString(){return this.pem}},qy=class extends TypeError{static{a(this,"LicenseEncodingError")}},xf=class extends TypeError{static{a(this,"InvalidLicenseError")}},gL=class extends xf{static{a(this,"InvalidLicenseSignatureError")}},sE=class extends xf{static{a(this,"InvalidHeaderError")}},Gy=class extends xf{static{a(this,"InvalidPayloadError")}},VSe=new _L(Aj.get(F.LICENSE_MODE));a(KSe,"validateLicenseSignature");a(YSe,"validateLicenseHeader");a(WSe,"valid");a(zSe,"validateLicensePayload");a(Ij,"validateLicense")});var Vy={};ye(Vy,{getActiveLicense:()=>bL,getUsageLicenses:()=>xj,getUsageLicensesOp:()=>IL,installUsageLicense:()=>RL,installUsageLicenseOp:()=>yL,isActiveLicense:()=>vj,isLicensed:()=>AL,loadAndWatchLicensesDir:()=>JSe,recordUsage:()=>Uj});async function yL(e){let t=e.license;try{await RL(t)}catch(r){let n=new Oj.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function RL(e){let t=Ij(e),{id:r}=t;if(await ve.system.hdb_license.get(r))throw new TL(`A usage license with ${r} already exists`);return bo.info?.("Installing usage license:",t),ve.system.hdb_license.put(r,t)}function vj(e){return(e.usedReads??0)<e.reads&&(e.usedReadBytes??0)<e.readBytes&&(e.usedWrites??0)<e.writes&&(e.usedWriteBytes??0)<e.writeBytes&&(e.usedRealTimeMessages??0)<e.realTimeMessages&&(e.usedRealTimeBytes??0)<e.realTimeBytes&&(e.usedCpuTime??0)<e.cpuTime&&(e.usedStorage??0)<e.storage||e.reads===-1&&e.readBytes===-1&&e.writes===-1&&e.writeBytes===-1&&e.realTimeMessages===-1&&e.realTimeBytes===-1&&e.cpuTime===-1&&e.storage===-1}async function bL(){let e=Pj.get(F.LICENSE_REGION),t={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:new Date().toISOString()}]};e!==void 0&&t.conditions.push({attribute:"region",comparator:"equals",value:e});let r=ve.system.hdb_license?.search(t);for await(let n of r??[])if(vj(n))return n}async function AL(){return await bL()!==void 0}async function Uj(e){Sa=bo.forComponent("license"),Sa.trace?.("Recording usage into license from analytics");let t,r=(await bL())?.id;if(r){Sa.trace?.("Found license to record usage into:",r);let n={};At(n,()=>{t=ve.system.hdb_license.update(r,n);for(let s of e)switch(Sa.trace?.("Processing analytics record:",s),s.metric){case"db-read":Sa.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":Sa.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":Sa.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",s.count),t.addTo("usedRealTimeBytes",s.mean*s.count);break;case"cpu-usage":s.path==="user"&&(Sa.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:Sa.trace?.("Skipping metric:",s.metric)}})}else if(!process.env.DEV_MODE){let n="This server does not have valid usage licenses, this should only be used for educational and development purposes.";Nj||(console.error(n),Nj=!0),Cj===void 0&&(Cj=setInterval(()=>{bo.notify(n)},jSe).unref())}}function IL(e){let t={};return e.region&&(t.region=e.region),xj(t)}function xj(e){let t=[],r=typeof e=="object"?Object.keys(e):[];return r.length>0&&r.forEach(n=>{t.push({attribute:n,comparator:"equals",value:e[n]})}),ve.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function QSe(e){bo.trace?.("Loading usage license from file:",e);let t=await Dj.readFile(e,{encoding:"utf-8"});try{await RL(t)}catch(r){bo.error?.("Failed to install usage license from file:",e,r)}}function JSe(){let e=SL.default.join(SL.default.dirname(Lj.getConfigFilePath()),"licenses");(0,Mj.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",QSe)}var Oj,bo,Pj,SL,Lj,Dj,Mj,TL,Nj,Cj,jSe,Sa,iE=se(()=>{wj();Oj=b(_e()),bo=b(J());is();Ga();Pj=b(ae());H();we();SL=b(require("node:path")),Lj=b(St()),Dj=b(require("node:fs/promises")),Mj=require("chokidar"),TL=class extends Error{static{a(this,"ExistingLicenseError")}};a(yL,"installUsageLicenseOp");a(RL,"installUsageLicense");Nj=!1,jSe=6e5;a(vj,"isActiveLicense");a(bL,"getActiveLicense");a(AL,"isLicensed");a(Uj,"recordUsage");jA(Uj);a(IL,"getUsageLicensesOp");a(xj,"getUsageLicenses");a(QSe,"loadLicenseFile");a(JSe,"loadAndWatchLicensesDir")});var Qy={};ye(Qy,{deliverSocket:()=>zj,getHttpOptions:()=>tTe,getRequestId:()=>Xj,handleApplication:()=>eTe,httpServer:()=>ML,logRequest:()=>cE,proxyRequest:()=>rTe,registerServer:()=>LL,suppressHandleApplicationWarning:()=>ZSe});function eTe(e){lE=e.options.getAll(),e.options.on("change",t=>{lE=e.options.getAll()})}function tTe(){return lE}function zj(e,t,r){let n=e?.read?e:new qj.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Uf[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=Uf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Ta.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function rTe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=Bj.get(s),r){case"connection":i=zj(void 0,t),Bj.set(s,i),i.write=(c,l,u)=>(Yy.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(Yy.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Yy.parentPort.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}}function LL(e,t,r=!0){t||(t=Dr.default.get(F.HTTP_PORT));let n=Uf[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",Hj),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Uf[t]=e;e.on("unhandled",Hj)}function DL(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Dr.default.get(F.HTTP_PORT)!=null&&t.push({port:Dr.default.get(F.HTTP_PORT),secure:Dr.default.get(F.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Dr.default.get(F.HTTP_SECUREPORT)!=null&&t.push({port:Dr.default.get(F.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Dr.default.get(F.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,Gj.resolvePath)(Dr.default.get(F.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function ML(e,t){let r=[];for(let{port:n,secure:s}of DL(t))r.push(jj(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?OL[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,LL(e,n,!1)),Wy[n]=zy(OL,n);return r}function jj(e,t,r,n){if(Hy(e,{protocol_name:t?"HTTPS":"HTTP",name:Jy()}),!Ky[e]){let s=r?"operationsApi_network":"http",i=Dr.default.get(s+"_keepAliveTimeout"),o=Dr.default.get(s+"_timeout"),c=Dr.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Dr.default.get(F.HTTP_MAXHEADERSIZE)},u=Dr.default.get(s+"_mtls"),d=Dr.default.get(s+"_mtls_required"),f;if(t){let E=Dr.default.get("tls");f=Dr.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,$j.getTicketKeys)(),SNICallback:(0,Vj.createTLSSelector)(r?"operations-api":"server",u),ciphers:E.ciphers??E[0]?.ciphers})}let m=a(async(E,g)=>{let R=performance.now(),S=0;try{let N=new uc(E,g);r&&(N.isOperationsServer=!0),lE.logging?.id&&(N.requestId=S=Xj());let I=await Wy[e](N);if(!I){if(N._nodeResponse.statusCode){cE(E,N._nodeResponse.statusCode,S,performance.now()-R);return}I=Qj(N)}if(I.headers?.set||(I.headers=new qs(I.headers)),await AL()?I.headers.set("Server","HarperDB"):I.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),I.status===-1){for(let te of I.headers||[])g.setHeader(te[0],te[1]);return E.baseRequest=N,g.baseResponse=I,Ky[e].emit("unhandled",E,g)}let $=I.status||200;g.statusCode=$;let ee=performance.now(),q=ee-R,k=I.body,j,Y=!1;if(!I.handlesHeaders){let te=I.headers||new qs;k?k.length>=0?(typeof k=="string"?te.set("Content-Length",Buffer.byteLength(k)):te.set("Content-Length",k.length),j=!0):k instanceof vs&&(k.size?te.set("Content-Length",k.size):k.on&&(Y=!0,k.on("size",be=>{g.headersSent||g.setHeader("Content-Length",be)})),k=k.stream()):(te.set("Content-Length","0"),j=!0);let ge=`hdb;dur=${q.toFixed(2)}`;if(I.wasCacheMiss&&(ge+=", miss"),qp(te,"Server-Timing",ge,!0),!g.headersSent)if(Y){if(te)if(te[Symbol.iterator])for(let[be,Ye]of te)g.setHeader(be,Ye);else for(let be in te)g.setHeader(be,te[be])}else g.writeHead($,te&&(te[Symbol.iterator]?Array.from(te):te));j&&g.end(k)}let le=N.handlerPath,fe=N.method;if(Ve(q,"duration",le,fe,I.wasCacheMiss==null?void 0:I.wasCacheMiss?"cache-miss":"cache-hit"),tn($<400,"success",le,fe),tn(1,"response_"+$,le,fe),cE(E,$,S,q),!j)if(k instanceof ReadableStream&&(k=CL.Readable.fromWeb(k)),(k[Symbol.iterator]||k[Symbol.asyncIterator])&&(k=CL.Readable.from(k)),k?.pipe){k.pipe(g),k.destroy&&g.on("close",()=>{k.destroy()});let te=0;k.on("data",ge=>{te+=ge.length}),k.on("end",()=>{Ve(performance.now()-ee,"transfer",le,fe),Ve(te,"bytes-sent",le,fe)})}else k?.then?k.then(te=>{g.end(te)},y):g.end(k)}catch(N){y(N)}function y(N){let I=N.headers,$=N.statusCode||500;g.writeHead($,I&&(I[Symbol.iterator]?Array.from(I):I)),g.end(XSe(N)),cE(E,$,S,performance.now()-R),N.statusCode?N.statusCode===500?Ta.default.warn(N):Ta.default.info(N):Ta.default.error(N)}a(y,"onError")},"requestHandler"),p=ES(m,(E,g)=>{g.statusCode=503,g.end("Service unavailable, exceeded request queue limit"),Ve(!0,"service-unavailable",e)},Dr.default.get(s+"_requestQueueLimit")),h=Ky[e]=(t?f?Kj.createSecureServer:Yj.createServer:jy.createServer)(l,(E,g)=>{let R=E.method;R==="GET"||R==="OPTIONS"||R==="HEAD"?m(E,g):p(E,g)});i>=0&&(h.keepAliveTimeout=i),c>=0&&(h.headersTimeout=c),t&&(h.ports||(h.ports=[]),h.ports.push(e),l.SNICallback.initialize(h),u&&(h.mtlsConfig=u),h.on("secureConnection",E=>{E._parent.startTime&&Ve(performance.now()-E._parent.startTime,"tls-handshake",e),Ve(E.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),LL(h,e)}return Ky[e]}function zy(e,t){let r=Qj;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),"nextCallback")}}return r}function Qj(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new qs}}function nTe(e,t){ML(e,{requestOnly:!0,...t})}function Jj(e,t){for(let{port:r}of DL(t))Fj[t?.runFirst?"unshift":"push"]({listener:e,port:r}),PL[r]=zy(Fj,r)}function sTe(e,t){let r=[];for(let{port:n,secure:s}of DL(t)){Hy(n,{protocol_name:s?"WSS":"WS",name:Jy()});let i=jj(n,s,t?.isOperationsServer,t?.mtls);oE[n]||(oE[n]=new Wj.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),oE[n].on("connection",(o,c)=>{try{let l=new uc(c);l.isWebSocket=!0;let u=Wy[n](l);Ta.default.debug("Received WS connection, calling listeners",wL),kj[n](o,l,u)}catch(l){Ta.default.warn("Error in handling WS connection",l)}}),Jj((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):oE[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),oE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{PL[n]&&PL[n](o,c,l)})),r.push(i),wL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),kj[n]=zy(wL,n),Wy[n]=zy(OL,n)}return r}function Hj(e,t){t.writeHead(404),t.end(`Not found
|
|
101
|
+
`),cE(e,404,0,e.requestId)}function cE(e,t,r,n){let s=lE.logging;if(s){NL||(NL=Ta.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";NL[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+iTe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function iTe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function Xj(){return aE||(aE=new BigInt64Array([1n]),aE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",aE.buffer))),Number(Atomics.add(aE,0,1n))}var qj,Ta,Yy,Dr,Gj,$j,Vj,Kj,Yj,jy,CL,Wj,XSe,oE,Ky,Wy,OL,lE,ZSe,Bj,Fj,PL,wL,kj,NL,aE,vL=se(()=>{qj=require("node:net"),Ta=b(J()),Yy=require("node:worker_threads"),Dr=b(ae());H();Gj=b(St()),$j=b(tt()),Vj=b(ys()),Kj=require("node:http2"),Yj=require("node:https"),jy=require("node:http");rh();Gp();ss();is();CL=require("node:stream");Hr();EL();uE();NN();Wj=require("ws");iE();({errorToString:XSe}=Ta.default);Be.http=ML;Be.request=nTe;Be.ws=sTe;Be.upgrade=Jj;oE={},Ky={},Wy={},OL=[],lE={},ZSe=!0;a(eTe,"handleApplication");a(tTe,"getHttpOptions");a(zj,"deliverSocket");Bj=new Map;a(rTe,"proxyRequest");a(LL,"registerServer");a(DL,"getPorts");a(ML,"httpServer");a(jj,"getHTTPServer");a(zy,"makeCallbackChain");a(Qj,"unhandled");a(nTe,"onRequest");Object.defineProperty(jy.IncomingMessage.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});Fj=[],PL={};a(Jj,"onUpgrade");wL=[],kj={};a(sTe,"onWebSocket");a(Hj,"defaultNotFound");a(cE,"logRequest");a(iTe,"headersToString");a(Xj,"getRequestId")});var xL=v(fE=>{"use strict";E_();var{isMainThread:UL,parentPort:Zj,threadId:Xy,workerData:oTe}=require("node:worker_threads"),{createServer:aTe}=require("node:net"),{unlinkSync:t2,existsSync:cTe}=require("fs"),r2;fE.whenComponentsLoaded=new Promise(e=>{r2=e});var Oi=J(),Zs=ae(),Ns=(H(),M(W)),{server:lTe}=(Hr(),M(Im)),{createServer:uTe}=require("node:tls"),{restartNumber:dTe,getWorkerIndex:Bf}=tt(),{createReuseportFd:dE}=(rh(),M(I$)),{createTLSSelector:fTe}=ys(),{resolvePath:mTe}=St(),{startupLog:pTe}=Zy(),{SERVERS:Ff,setPortServerMap:e2,portServer:hTe}=(EL(),M(bj)),ETe=(vL(),M(Qy)),_Te=li(),n2=Zs.get(Ns.CONFIG_PARAMS.THREADS_DEBUG),gTe=Zs.get(Ns.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);lTe.socket=STe;if(n2){let e;if(UL)e=Zs.get(Ns.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Oi.info("Could not close debugger",t)}});else{let t=Zs.get(Ns.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Bf()>=0&&(e=t+Bf())}if(e){let t=Zs.get(Ns.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Zs.get(Ns.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Oi.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&UL)try{require("inspector").open(9229)}catch(e){dTe<=1&&Oi.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.isHandled||e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&Oi.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:Sqe,CONFIG_PARAMS:Tqe}=Ns;Zs.initSync();fE.globals=_Te;fE.listenOnPorts=i2;fE.startServers=s2;function s2(){let e=Zs.get(Ns.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=tR().loadRootComponents(!0).then(()=>{Zj?.on("message",n=>{let{port:s,fd:i,data:o}=n;if(i)deliverSocket(i,s,o);else if(n.requestId)ETe.proxyRequest(n);else if(n.type===Ns.ITC_EVENT_TYPES.SHUTDOWN){Oi.trace("received shutdown request",Xy);for(let c in Ff){let l=Ff[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(h=>h.description.includes("connections")),m=0,p=setInterval(()=>{m++;let h=m>=100,E=l[f][h?"all":"idle"]();if(E.length===0){h&&clearInterval(p);return}m===1?Oi.info(`Closing ${E.length} idle connections`):h&&Oi.warn(`Forcefully closing ${E.length} active connections`);for(let g=0,R=E.length;g<R;g++){let S=E[g].socket;S._httpMessage&&!S._httpMessage.finished&&!h||(h?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
|
|
102
102
|
Connection: close\r
|
|
103
103
|
\r
|
|
104
|
-
`))}},25).unref()}l.close?.(()=>{if(Zs.get(Ns.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Bf()==0)try{t2(mTe(Zs.get(Ns.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,Xy),l.cantCleanupProperly||Oi.warn("Had to forcefully exit the thread",Xy),process.exit(0)},5e3).unref()})}if(n2||process.env.DEV_MODE)try{require("inspector").close()}catch(c){Oi.info("Could not close debugger",c)}}}).ref();let r;dE&&!gTe&&(r=i2()),Promise.resolve(r).then(()=>{if(Bf()===0)try{pTe(hTe)}catch(n){console.error("Error displaying start-up log",n)}Zj?.postMessage({type:Ns.ITC_EVENT_TYPES.CHILD_STARTED})})});return r2(t),t}a(s2,"startServers");function i2(){let e=[];for(let t in Ff){let r=Ff[t];if(t.includes?.("/")&&Bf()==0){cTe(t)&&t2(t),e.push(new Promise((o,c)=>{r.listen({path:t},()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),Oi.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=Zs.get(Ns.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let o=typeof s=="string"?s.split("-"):s,c=Bf();if(c<o[0]||c>o[1])continue}let i;try{let o=t.lastIndexOf(":");o>0?dE?n={fd:dE(+t.slice(o+1).replace(/[\[\]]/g,""),t.slice(0,o))}:n={host:+t.slice(o+1).replace(/[\[\]]/g,""),port:t.slice(0,o)}:dE?n={fd:dE(+t,"::")}:n={port:t}}catch(o){console.error(`Unable to bind to port ${t}`,o);continue}e.push(new Promise((o,c)=>{r.listen(n,()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),Oi.trace("Listening on port "+t,Xy)}).on("error",c)}))}return Promise.all(e)}a(i2,"listenOnPorts");!UL&&!oTe?.noServerStart&&s2();function STe(e,t){let r=(uE(),M(eR)).getComponentName,n;if(t.securePort){e2(t.securePort,{protocol_name:"TLS",name:r()});let s=fTe("server",t.mtls),i=Zs.get("tls");n=uTe({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,ciphers:i.ciphers??i[0]?.ciphers,SNICallback:s},e),s.initialize(n),Ff[t.securePort]=n}return t.port&&(e2(t.port,{protocol_name:"TCP",name:r()}),n=aTe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Ff[t.port]=n),n}a(STe,"onSocket")});var m2={};ye(m2,{startHTTPThreads:()=>TTe,startSocketServer:()=>HL,updateWorkerIdleness:()=>f2});async function TTe(e=2,t){WA().catch(r=>$f.error?.("Error recording hostname for analytics:",r));try{if(t)FL(0,1,!0);else{let{loadRootComponents:r}=tR();if(e===0)return(0,Ao.setMainIsWorker)(!0),await xL().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)FL(r,e);return Promise.all(d2)}finally{(0,Ao.threadsHaveStarted)()}}function FL(e,t=1,r){if(BL++,(0,Ao.startWorker)("server/threads/threadServer.js",{name:Jb.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===zb.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});d2.push(s),await s,kf.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=nR.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=kf.indexOf(n);o>-1&&kf.splice(o,1)}if(a(i,"removeWorker"),Hf){let o=Hf;Hf=[];for(let c of o)u2[c.localPort](null,c)}}}),r){let n=setInterval(()=>{kL?kL=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Ao.shutdownWorkers)(),BL=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function HL(e=0,t){if(typeof e=="string")try{(0,sR.existsSync)(e)&&(0,sR.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=yTe:r=RTe(t):r=qL;let n=(0,qf.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=u2[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),kL=!0,r(i,(o,c)=>{if(!o){if(o2){let u=i._socket||new qf.Socket({handle:i,writable:!0,readable:!0});o2.deliverSocket(u,e,c),u.resume()}else BL>0?(Hf.length===0&&setTimeout(()=>{Hf.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(),i.localPort=e,Hf.push(i)):(console.log("start up a dynamic thread to handle request"),FL(0));Ve(!1,"socket-routed");return}o.requests++;let l=i.fd;if(l>=0)o.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new qf.Socket({handle:i,writable:!0,readable:!0});ITe(u,o,e)}Ve(!0,"socket-routed")})},$f.info(`HarperDB ${l2.packageJson.version} Server running on port ${e}`)),n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function qL(e,t){let r,n=0;for(let s of kf){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=rR)return rR=i,t(r);n=i}rR=0,t(r)}function yTe(e,t){let r={};e.getpeername(r);let n=r.address,s=Gf.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);qL(e,o=>{Gf.set(n,{worker:o,lastUsed:i}),t(o)})}function RTe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new qf.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],u=Gf.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);qL(n,f=>{Gf.set(l,{worker:f,lastUsed:d}),s(f,o)})})}a(r,"findByHeaderAffinity")}function f2(){rR=0;for(let e of kf)e.expectedIdle=e.recentELU.idle+bTe,e.requests=1;kf.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function ITe(e,t,r){let n=ATe++;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(),nR.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")),nR.delete(n)),s.event=="destroy"&&(e.destroy(),nR.delete(n))})}var Ao,qf,$f,sR,c2,l2,kf,Hf,u2,o2,BL,d2,kL,rR,a2,Gf,bTe,nR,ATe,GL=ne(()=>{Ao=b(tt()),qf=require("net");H();$f=b(J()),sR=require("fs");is();c2=require("worker_threads"),l2=b(Rt()),kf=[],Hf=[],u2=[],BL=0,d2=[];c2.isMainThread&&process.on("uncaughtException",e=>{if(e.code!=="ECONNRESET"){if(e.code==="EIO"){$f.disableStdio();return}console.error("uncaughtException",e)}});a(TTe,"startHTTPThreads");a(FL,"startHTTPWorker");a(HL,"startSocketServer");rR=0;a(qL,"findMostIdleWorker");a2=36e5,Gf=new Map;a(yTe,"findByRemoteAddressAffinity");a(RTe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Gf)r.lastUsed+a2<e&&Gf.delete(t)},a2).unref();bTe=1e3;a(f2,"updateWorkerIdleness");(0,Ao.setMonitorListener)(f2);nR=new Map,ATe=1;a(ITe,"proxySocket")});var Zy=v(oR=>{"use strict";var Re=ae();Re.initSync();Wf();var dn=(H(),M(W)),{CONFIG_PARAMS:Fe}=dn,ar=J(),Kf=require("fs-extra"),kc=require("path"),wTe=qP(),{install:NTe}=mj(),$L=require("chalk"),{packageJson:CTe,PACKAGE_ROOT:OTe}=Rt(),Yf=oe(),PTe=(fL(),M(dL)),VL=St(),h2=el(),p2=Sy(),LTe=Rj(),{compactOnStart:DTe}=(kP(),M(FP)),MTe=require("minimist"),vTe=ys(),{startHTTPThreads:UTe}=(GL(),M(m2)),xTe=vy(),{isMainThread:BTe}=require("worker_threads"),Iqe=eo(),wqe=dc(),Nqe=aw(),Cqe=md(),iR=(H(),M(W)),{getHdbPid:FTe}=Cf(),Hc,Vf,E2=!1,kTe="Upgrade complete. Starting HarperDB.",HTe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",qTe="HarperDB not found, starting install process.",GTe="There was an error during install, check install_log.log for more details. Exiting.",$Te="HarperDB successfully started.";function VTe(){process.on("unhandledRejection",(e,t)=>{ar.error("Unhandled promise rejection: Promise",t,"reason:",e)})}a(VTe,"addUnhandleRejectionListener");function KTe(){if(!E2){let e=a(()=>{Kf.removeSync(kc.join(Re.get(dn.CONFIG_PARAMS.ROOTPATH),dn.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(KTe,"addExitListeners");async function _2(e=!1,t=!1){if(console.log($L.magenta("Starting HarperDB...")),VTe(),ar.suppressLogging?.(()=>{console.log($L.magenta(""+Kf.readFileSync(kc.join(OTe,"utility/install/ascii_logo.txt"))))}),ar.debug("Checking to make sure hdb is installed"),PTe.isHdbInstalled(Re,ar)===!1){console.log(qTe);try{await NTe()}catch(o){console.error(GTe,o),ar.error(o),process.exit(1)}}if(!e){let o=h2(Object.keys(dn.CONFIG_PARAM_MAP),!0);!Yf.isEmpty(o)&&!Yf.isEmptyOrZeroLength(Object.keys(o))&&VL.updateConfigValue(void 0,void 0,o,!0,!0)}let r=Vf?.service==="clustering";Vf?.service&&!r&&(console.error("Unrecognized service argument"),ar.debug("Unrecognized service argument"),process.exit(1));let n=FTe();n&&(r||(ar.debug("Error: HarperDB is already running"),console.error(`Error: HarperDB is already running (pid: ${n})`),process.exit(4))),Hc===void 0&&(Hc=Cf()),ar.debug("Checking for service clustering"),r&&(n||(console.error("HarperDB must be running to start clustering."),process.exit()),Re.get(dn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await p2.generateNatsConfig(),await Hc.startClusteringProcesses(!0),process.exit()),KTe(),t&&await Kf.writeFile(kc.join(Re.get(iR.CONFIG_PARAMS.ROOTPATH),iR.HDB_PID_FILE),`${process.pid}`),ar.info("HarperDB PID",process.pid);let s;try{let o=await xTe.getVersionUpdateInfo();o!==void 0&&(s=o[dn.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await LTe.upgrade(o),console.log(kTe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,o),ar.error(o)):(console.error(HTe,o),ar.error(o)),process.exit(1)}wTe(),zTe(),await vTe.reviewSelfSignedCert(),Yf.autoCastBoolean(Re.get(dn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&BTe&&await p2.generateNatsConfig(t)}a(_2,"initialize");async function YTe(e=!1){try{Vf=MTe(process.argv),Vf.ROOTPATH&&VL.updateConfigObject("settings_path",kc.join(Vf.ROOTPATH,dn.HDB_CONFIG_FILE)),await _2(e,!0),Re.get(dn.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await DTe();let t=process.env.IS_SCRIPTED_SERVICE&&!Vf.service;Yf.autoCastBoolean(Re.get(dn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(await Hc.startClusteringProcesses(),await Hc.startClusteringThreads()),await UTe(process.env.DEV_MODE?1:Re.get(iR.CONFIG_PARAMS.THREADS_COUNT)??Re.get(iR.CONFIG_PARAMS.THREADS)),t||g2()}catch(t){console.error(t),ar.error(t),process.exit(1)}}a(YTe,"main");function g2(){ar.suppressLogging(()=>{console.log($L.magenta(`HarperDB ${CTe.version} successfully started`))}),ar.notify($Te)}a(g2,"started");async function WTe(e=!0){E2=!e;try{Hc===void 0&&(Hc=Cf()),ar.debug("initializing processManagement..."),await _2(),ar.debug("Starting new main process"),await Hc.startService(dn.PROCESS_DESCRIPTORS.HDB,!0),g2(),e&&process.exit(0)}catch(t){console.error(t),ar.error(t),process.exit(1)}}a(WTe,"launch");function zTe(){let e=kc.join(Re.get(dn.CONFIG_PARAMS.ROOTPATH),dn.LICENSE_KEY_DIR_NAME,dn.LICENSE_FILE_NAME),t=kc.join(e,dn.LICENSE_FILE_NAME),r=kc.join(e,dn.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=h2(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Yf.isEmpty(n)||Yf.isEmpty(s))return;Kf.mkdirpSync(e),Kf.writeFileSync(r,n),Kf.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),ar.error(s)}}a(zTe,"writeLicenseFromVars");oR.launch=WTe;oR.main=YTe;oR.startupLog=jTe;function jTe(e){let r=a(p=>p.padEnd(20),"pad"),n=`
|
|
104
|
+
`))}},25).unref()}l.close?.(()=>{if(Zs.get(Ns.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Bf()==0)try{t2(mTe(Zs.get(Ns.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,Xy),l.cantCleanupProperly||Oi.warn("Had to forcefully exit the thread",Xy),process.exit(0)},5e3).unref()})}if(n2||process.env.DEV_MODE)try{require("inspector").close()}catch(c){Oi.info("Could not close debugger",c)}}}).ref();let r;dE&&!gTe&&(r=i2()),Promise.resolve(r).then(()=>{if(Bf()===0)try{pTe(hTe)}catch(n){console.error("Error displaying start-up log",n)}Zj?.postMessage({type:Ns.ITC_EVENT_TYPES.CHILD_STARTED})})});return r2(t),t}a(s2,"startServers");function i2(){let e=[];for(let t in Ff){let r=Ff[t];if(t.includes?.("/")&&Bf()==0){cTe(t)&&t2(t),e.push(new Promise((o,c)=>{r.listen({path:t},()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),Oi.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=Zs.get(Ns.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let o=typeof s=="string"?s.split("-"):s,c=Bf();if(c<o[0]||c>o[1])continue}let i;try{let o=t.lastIndexOf(":");o>0?dE?n={fd:dE(+t.slice(o+1).replace(/[\[\]]/g,""),t.slice(0,o))}:n={host:+t.slice(o+1).replace(/[\[\]]/g,""),port:t.slice(0,o)}:dE?n={fd:dE(+t,"::")}:n={port:t}}catch(o){console.error(`Unable to bind to port ${t}`,o);continue}e.push(new Promise((o,c)=>{r.listen(n,()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),Oi.trace("Listening on port "+t,Xy)}).on("error",c)}))}return Promise.all(e)}a(i2,"listenOnPorts");!UL&&!oTe?.noServerStart&&s2();function STe(e,t){let r=(uE(),M(eR)).getComponentName,n;if(t.securePort){e2(t.securePort,{protocol_name:"TLS",name:r()});let s=fTe("server",t.mtls),i=Zs.get("tls");n=uTe({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,ciphers:i.ciphers??i[0]?.ciphers,SNICallback:s},e),s.initialize(n),Ff[t.securePort]=n}return t.port&&(e2(t.port,{protocol_name:"TCP",name:r()}),n=aTe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Ff[t.port]=n),n}a(STe,"onSocket")});var m2={};ye(m2,{startHTTPThreads:()=>TTe,startSocketServer:()=>HL,updateWorkerIdleness:()=>f2});async function TTe(e=2,t){WA().catch(r=>$f.error?.("Error recording hostname for analytics:",r));try{if(t)FL(0,1,!0);else{let{loadRootComponents:r}=tR();if(e===0)return(0,Ao.setMainIsWorker)(!0),await xL().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)FL(r,e);return Promise.all(d2)}finally{(0,Ao.threadsHaveStarted)()}}function FL(e,t=1,r){if(BL++,(0,Ao.startWorker)("server/threads/threadServer.js",{name:Jb.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===zb.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});d2.push(s),await s,kf.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=nR.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=kf.indexOf(n);o>-1&&kf.splice(o,1)}if(a(i,"removeWorker"),Hf){let o=Hf;Hf=[];for(let c of o)u2[c.localPort](null,c)}}}),r){let n=setInterval(()=>{kL?kL=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Ao.shutdownWorkers)(),BL=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function HL(e=0,t){if(typeof e=="string")try{(0,sR.existsSync)(e)&&(0,sR.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=yTe:r=RTe(t):r=qL;let n=(0,qf.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=u2[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),kL=!0,r(i,(o,c)=>{if(!o){if(o2){let u=i._socket||new qf.Socket({handle:i,writable:!0,readable:!0});o2.deliverSocket(u,e,c),u.resume()}else BL>0?(Hf.length===0&&setTimeout(()=>{Hf.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(),i.localPort=e,Hf.push(i)):(console.log("start up a dynamic thread to handle request"),FL(0));Ve(!1,"socket-routed");return}o.requests++;let l=i.fd;if(l>=0)o.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new qf.Socket({handle:i,writable:!0,readable:!0});ITe(u,o,e)}Ve(!0,"socket-routed")})},$f.info(`HarperDB ${l2.packageJson.version} Server running on port ${e}`)),n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function qL(e,t){let r,n=0;for(let s of kf){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=rR)return rR=i,t(r);n=i}rR=0,t(r)}function yTe(e,t){let r={};e.getpeername(r);let n=r.address,s=Gf.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);qL(e,o=>{Gf.set(n,{worker:o,lastUsed:i}),t(o)})}function RTe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new qf.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],u=Gf.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);qL(n,f=>{Gf.set(l,{worker:f,lastUsed:d}),s(f,o)})})}a(r,"findByHeaderAffinity")}function f2(){rR=0;for(let e of kf)e.expectedIdle=e.recentELU.idle+bTe,e.requests=1;kf.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function ITe(e,t,r){let n=ATe++;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(),nR.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")),nR.delete(n)),s.event=="destroy"&&(e.destroy(),nR.delete(n))})}var Ao,qf,$f,sR,c2,l2,kf,Hf,u2,o2,BL,d2,kL,rR,a2,Gf,bTe,nR,ATe,GL=se(()=>{Ao=b(tt()),qf=require("net");H();$f=b(J()),sR=require("fs");is();c2=require("worker_threads"),l2=b(Rt()),kf=[],Hf=[],u2=[],BL=0,d2=[];c2.isMainThread&&process.on("uncaughtException",e=>{if(e.code!=="ECONNRESET"){if(e.code==="EIO"){$f.disableStdio();return}console.error("uncaughtException",e)}});a(TTe,"startHTTPThreads");a(FL,"startHTTPWorker");a(HL,"startSocketServer");rR=0;a(qL,"findMostIdleWorker");a2=36e5,Gf=new Map;a(yTe,"findByRemoteAddressAffinity");a(RTe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Gf)r.lastUsed+a2<e&&Gf.delete(t)},a2).unref();bTe=1e3;a(f2,"updateWorkerIdleness");(0,Ao.setMonitorListener)(f2);nR=new Map,ATe=1;a(ITe,"proxySocket")});var Zy=v(oR=>{"use strict";var Re=ae();Re.initSync();Wf();var dn=(H(),M(W)),{CONFIG_PARAMS:Fe}=dn,ar=J(),Kf=require("fs-extra"),kc=require("path"),wTe=qP(),{install:NTe}=mj(),$L=require("chalk"),{packageJson:CTe,PACKAGE_ROOT:OTe}=Rt(),Yf=oe(),PTe=(fL(),M(dL)),VL=St(),h2=el(),p2=Sy(),LTe=Rj(),{compactOnStart:DTe}=(kP(),M(FP)),MTe=require("minimist"),vTe=ys(),{startHTTPThreads:UTe}=(GL(),M(m2)),xTe=vy(),{isMainThread:BTe}=require("worker_threads"),Iqe=eo(),wqe=dc(),Nqe=aw(),Cqe=md(),iR=(H(),M(W)),{getHdbPid:FTe}=Cf(),Hc,Vf,E2=!1,kTe="Upgrade complete. Starting HarperDB.",HTe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",qTe="HarperDB not found, starting install process.",GTe="There was an error during install, check install_log.log for more details. Exiting.",$Te="HarperDB successfully started.";function VTe(){process.on("unhandledRejection",(e,t)=>{ar.error("Unhandled promise rejection: Promise",t,"reason:",e)})}a(VTe,"addUnhandleRejectionListener");function KTe(){if(!E2){let e=a(()=>{Kf.removeSync(kc.join(Re.get(dn.CONFIG_PARAMS.ROOTPATH),dn.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(KTe,"addExitListeners");async function _2(e=!1,t=!1){if(console.log($L.magenta("Starting HarperDB...")),VTe(),ar.suppressLogging?.(()=>{console.log($L.magenta(""+Kf.readFileSync(kc.join(OTe,"utility/install/ascii_logo.txt"))))}),ar.debug("Checking to make sure hdb is installed"),PTe.isHdbInstalled(Re,ar)===!1){console.log(qTe);try{await NTe()}catch(o){console.error(GTe,o),ar.error(o),process.exit(1)}}if(!e){let o=h2(Object.keys(dn.CONFIG_PARAM_MAP),!0);!Yf.isEmpty(o)&&!Yf.isEmptyOrZeroLength(Object.keys(o))&&VL.updateConfigValue(void 0,void 0,o,!0,!0)}let r=Vf?.service==="clustering";Vf?.service&&!r&&(console.error("Unrecognized service argument"),ar.debug("Unrecognized service argument"),process.exit(1));let n=FTe();n&&(r||(ar.debug("Error: HarperDB is already running"),console.error(`Error: HarperDB is already running (pid: ${n})`),process.exit(4))),Hc===void 0&&(Hc=Cf()),ar.debug("Checking for service clustering"),r&&(n||(console.error("HarperDB must be running to start clustering."),process.exit()),Re.get(dn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await p2.generateNatsConfig(),await Hc.startClusteringProcesses(!0),process.exit()),KTe(),t&&await Kf.writeFile(kc.join(Re.get(iR.CONFIG_PARAMS.ROOTPATH),iR.HDB_PID_FILE),`${process.pid}`),ar.info("HarperDB PID",process.pid);let s;try{let o=await xTe.getVersionUpdateInfo();o!==void 0&&(s=o[dn.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await LTe.upgrade(o),console.log(kTe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,o),ar.error(o)):(console.error(HTe,o),ar.error(o)),process.exit(1)}wTe(),zTe(),await vTe.reviewSelfSignedCert(),Yf.autoCastBoolean(Re.get(dn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&BTe&&await p2.generateNatsConfig(t)}a(_2,"initialize");async function YTe(e=!1){try{Vf=MTe(process.argv),Vf.ROOTPATH&&VL.updateConfigObject("settings_path",kc.join(Vf.ROOTPATH,dn.HDB_CONFIG_FILE)),await _2(e,!0),Re.get(dn.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await DTe();let t=process.env.IS_SCRIPTED_SERVICE&&!Vf.service;Yf.autoCastBoolean(Re.get(dn.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(await Hc.startClusteringProcesses(),await Hc.startClusteringThreads()),await UTe(process.env.DEV_MODE?1:Re.get(iR.CONFIG_PARAMS.THREADS_COUNT)??Re.get(iR.CONFIG_PARAMS.THREADS)),t||g2()}catch(t){console.error(t),ar.error(t),process.exit(1)}}a(YTe,"main");function g2(){ar.suppressLogging(()=>{console.log($L.magenta(`HarperDB ${CTe.version} successfully started`))}),ar.notify($Te)}a(g2,"started");async function WTe(e=!0){E2=!e;try{Hc===void 0&&(Hc=Cf()),ar.debug("initializing processManagement..."),await _2(),ar.debug("Starting new main process"),await Hc.startService(dn.PROCESS_DESCRIPTORS.HDB,!0),g2(),e&&process.exit(0)}catch(t){console.error(t),ar.error(t),process.exit(1)}}a(WTe,"launch");function zTe(){let e=kc.join(Re.get(dn.CONFIG_PARAMS.ROOTPATH),dn.LICENSE_KEY_DIR_NAME,dn.LICENSE_FILE_NAME),t=kc.join(e,dn.LICENSE_FILE_NAME),r=kc.join(e,dn.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=h2(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Yf.isEmpty(n)||Yf.isEmpty(s))return;Kf.mkdirpSync(e),Kf.writeFileSync(r,n),Kf.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),ar.error(s)}}a(zTe,"writeLicenseFromVars");oR.launch=WTe;oR.main=YTe;oR.startupLog=jTe;function jTe(e){let r=a(p=>p.padEnd(20),"pad"),n=`
|
|
105
105
|
`;Re.get(Fe.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${Re.get(Fe.REPLICATION_HOSTNAME)}
|
|
106
106
|
`),Re.get(Fe.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${Re.get(Fe.REPLICATION_URL)}
|
|
107
107
|
`),n+=`${r("Worker Threads:")}${Re.get(Fe.THREADS_COUNT)}
|
|
@@ -118,8 +118,8 @@ Connection: close\r
|
|
|
118
118
|
`);let m=Re.get(Fe.HTTP_PORT)?`HTTP: ${Re.get(Fe.HTTP_PORT)}, `:"";m+=Re.get(Fe.HTTP_SECUREPORT)?`HTTPS: ${Re.get(Fe.HTTP_SECUREPORT)}, `:"",m.length>21&&(m=m.slice(0,-2));for(let p of l)d[p]?n+=`${r(p+": ")}${d[p].slice(0,-2)}
|
|
119
119
|
`:n+=`${r(p+": ")}${m}
|
|
120
120
|
`;console.log(n),Re.get(Fe.LOGGING_STDSTREAMS)&&ar.logsAtLevel("info")&&ar.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}a(jTe,"startupLog")});var Wf=v((vqe,A2)=>{"use strict";var QTe=require("minimist"),{isMainThread:zL,parentPort:mE,threadId:Lqe}=require("worker_threads"),Vt=(H(),M(W)),Pi=J(),JTe=oe(),aR=Sy(),KL=Ht(),Dqe=pt(),XTe=St(),fu=Cf(),S2=Bh(),{compactOnStart:ZTe}=(kP(),M(FP)),Mqe=el(),{restartWorkers:WL,onMessageByType:eye,shutdownWorkersNow:tye}=tt(),{handleHDBError:rye,hdbErrors:nye}=_e(),{HTTP_STATUS_CODES:sye}=nye,pE=ae(),{sendOperationToNode:T2,getThisNodeName:iye,monitorNodeCAs:oye}=(Ss(),M(na)),aye=require("node:path"),{unlinkSync:cye}=require("node:fs");pE.initSync();var YL=`Restarting HarperDB. This may take up to ${Vt.RESTART_TIMEOUT_MS/1e3} seconds.`,y2="Clustering is not enabled so cannot be restarted",lye="Invalid service",ya;A2.exports={restart:b2,restartService:jL};zL&&eye(Vt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await jL({service:e.workerType}):b2({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function b2(e){ya=Object.keys(e).length===0;let t=QTe(process.argv);if(t.service){await jL(t);return}if(ya){let r=fu.getHdbPid();return console.error(r?"Restarting Harper...":"Starting Harper..."),Zy().launch(!0),YL}return zL?(Pi.notify(YL),pE.get(Vt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await ZTe(),process.env.HARPER_EXIT_ON_RESTART&&(Pi.warn("Exiting Harper process to trigger a container restart"),process.exit(0)),setTimeout(async()=>{Pi.debug("Shutdown workers"),await tye(),await fu.cleanupChildrenProcesses(!1),await cye(aye.join(pE.get(Vt.CONFIG_PARAMS.ROOTPATH),Vt.HDB_PID_FILE),`${process.pid}`),Pi.debug("Starting new process..."),Zy().launch(!0)},50)):mE.postMessage({type:Vt.ITC_EVENT_TYPES.RESTART}),YL}a(b2,"restart");async function jL(e){let{service:t}=e;if(Vt.HDB_PROCESS_SERVICES[t]===void 0)throw rye(new Error,lye,sye.BAD_REQUEST,void 0,void 0,!0);if(fu.expectedRestartOfChildren(),!zL){e.replicated&&oye(),mE.postMessage({type:Vt.ITC_EVENT_TYPES.RESTART,workerType:t}),mE.ref(),await new Promise(s=>{mE.on("message",i=>{i.type==="restart-complete"&&(s(),mE.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===iye())continue;let i;try{({job_id:i}=await T2(s,e))}catch(o){n.push({node:s.name,message:o.message});continue}n.push(await new Promise((o,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let p=new Error("Timed out waiting for restart job to complete");p.replicated=n,c(p)}let m=(await T2(s,{operation:"get_job",id:i})).results[0];if(m.status==="COMPLETE"&&(clearInterval(d),o({node:s.name,message:m.message})),m.status==="ERROR"){clearInterval(d);let p=new Error(m.message);p.replicated=n,c(p)}},250)}))}return{replicated:n}}return}let r;switch(t){case Vt.HDB_PROCESS_SERVICES.clustering:if(!pE.get(Vt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=y2;break}ya&&console.log("Restarting clustering"),Pi.notify("Restarting clustering"),await uye();break;case Vt.HDB_PROCESS_SERVICES.clustering_config:case Vt.HDB_PROCESS_SERVICES["clustering config"]:if(!pE.get(Vt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=y2;break}ya&&console.log("Restarting clusteringConfig"),Pi.notify("Restarting clustering_config"),await fu.reloadClustering();break;case"custom_functions":case"custom functions":case Vt.HDB_PROCESS_SERVICES.harperdb:case Vt.HDB_PROCESS_SERVICES.http_workers:case Vt.HDB_PROCESS_SERVICES.http:ya&&console.log("Restarting httpWorkers"),Pi.notify("Restarting http_workers"),ya?await fu.restart(Vt.PROCESS_DESCRIPTORS.HDB):await WL("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Pi.error(r),ya&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(jL,"restartService");async function uye(){if(!XTe.getConfigFromFile(Vt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await S2.getHDBProcessInfo()).clustering.length===0)Pi.trace("Clustering not running, restart will start clustering services"),await aR.generateNatsConfig(!0),await fu.startClusteringProcesses(),await fu.startClusteringThreads(),await R2(),ya&&await KL.closeConnection();else{await aR.generateNatsConfig(!0),(await S2.getHDBProcessInfo()).clustering.forEach(s=>{Pi.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await JTe.asyncSetTimeout(3e3),await R2(),await KL.updateLocalStreams(),ya&&await KL.closeConnection(),Pi.trace("Restart clustering restarting ingest and reply service threads");let r=WL(Vt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),n=WL(Vt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await r,await n}}a(uye,"restartClustering");async function R2(){await aR.removeNatsConfig(Vt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await aR.removeNatsConfig(Vt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(R2,"removeNatsConfig")});var U2=v((Bqe,v2)=>{"use strict";var xqe=require("lodash"),jn=(H(),M(W)),{handleHDBError:I2,hdbErrors:dye}=_e(),{HDB_ERROR_MSGS:fye,HTTP_STATUS_CODES:mye}=dye,QL=J();v2.exports={getRolePermissions:hye};var mu=Object.create(null),pye=a(e=>({key:e,perms:{}}),"permsTemplateObj"),O2=a((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),P2=a((e=!1,t=!1,r=!1,n=!1)=>({[jn.PERMS_CRUD_ENUM.READ]:e,[jn.PERMS_CRUD_ENUM.INSERT]:t,[jn.PERMS_CRUD_ENUM.UPDATE]:r,[jn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),JL=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...P2(t,r,n,s)}),"tablePermsTemplate"),w2=a((e,t=P2())=>({attribute_name:e,describe:M2(t),[hE]:t[hE],[XL]:t[XL],[ZL]:t[ZL]}),"attrPermsTemplate"),N2=a((e,t=!1)=>({attribute_name:e,describe:t,[hE]:t}),"timestampAttrPermsTemplate"),{READ:hE,INSERT:XL,UPDATE:ZL}=jn.PERMS_CRUD_ENUM,L2=Object.values(jn.PERMS_CRUD_ENUM),D2=[hE,XL,ZL];function hye(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[jn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(mu[t]&&mu[t].key===n)return mu[t].perms;let s=Eye(e,r);return mu[t]?mu[t].key=n:mu[t]=pye(n),mu[t].perms=s,s}catch(r){if(!e[jn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[jn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<jn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${role_name}' must be updated to align with new structure from the 2.2.0 release.`;throw QL.error(n),QL.debug(r),I2(new Error,fye.OUTDATED_PERMS_TRANSLATION_ERROR,mye.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
121
|
-
${r.stack}`;throw QL.error(n),I2(new Error)}}}a(hye,"getRolePermissions");function Eye(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[jn.SYSTEM_SCHEMA_NAME]=n[jn.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]=_ye(t[i]);return}r[i]=O2(),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],l=t[i][o],u=gye(c,l);r[i].describe||L2.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=JL()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=JL()})}),r}a(Eye,"translateRolePermissions");function _ye(e){let t=O2(!0);return Object.keys(e).forEach(r=>{t.tables[r]=JL(!0,!0,!0,!0,!0)}),t}a(_ye,"createStructureUserPermissions");function gye(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,d)=>{let{attribute_name:f}=d,m=d;return jn.TIME_STAMP_NAMES.includes(f)&&(m=N2(f,d[hE])),u[f]=m,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=w2(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=M2(d),s.attribute_permissions.push(d),c||Sye(d,l)}else if(u!==o){let d;jn.TIME_STAMP_NAMES.includes(u)?d=N2(u):d=w2(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=C2(s),s}else return e.describe=C2(e),e}a(gye,"getTableAttrPerms");function C2(e){return L2.filter(t=>e[t]).length>0}a(C2,"getSchemaTableDescribePerm");function M2(e){return D2.filter(t=>e[t]).length>0}a(M2,"getAttributeDescribePerm");function Sye(e,t){D2.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Sye,"checkForHashPerms")});var EE={};ye(EE,{authentication:()=>V2,bypassAuth:()=>Lye,login:()=>tD,logout:()=>rD,start:()=>Dye});function Lye(){$2=!0}async function V2(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let p=e.isOperationsServer?Nye?wye:[]:Iye?Aye:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=Cn.get(F.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new qs([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return lR&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}o.push("Access-Control-Allow-Origin",i),lR&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(lR){i||(i=r.host);let p=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let E of h)if(E.startsWith(p)){let g=E.indexOf(";");l=E.slice(p.length,g===-1?E.length:g),u=await x2.get(l);break}e.session=u||(u={})}let d=a((p,h,E)=>{let g=new yye(p,h,ka.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=E,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),h===ci.SUCCESS?cR.info?.(g):cR.error?.(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&cR.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await ff(e.peerCertificate,e.mtlsConfig);if(!p.valid)return cR.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:Bo({error:"Certificate revoked or verification failed"},e)});let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await Be.getUser(h,null,e),d(h,ci.SUCCESS,"mTLS")):bye("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=pu.get(n),!f){let p=n.indexOf(" "),h=n.slice(0,p),E=n.slice(p+1),g,R;try{switch(h){case"Basic":let S=atob(E),y=S.indexOf(":");g=S.slice(0,y),R=S.slice(y+1),f=g||R?await Be.getUser(g,R,e):null;break;case"Bearer":try{f=await uC(E)}catch(N){if(N.message==="invalid token")try{return await zS(E),c({status:-1})}catch{throw N}}break}}catch(S){return Oye&&(pu.get(E)||(pu.set(E,E),d(g,ci.FAILURE,h))),c({status:401,body:Bo({error:S.message},e)})}pu.set(n,f),Cye&&d(f.username,ci.SUCCESS,h)}e.user=f}else u?.user?e.user=await Be.getUser(u.user,null,e):($2&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,F2.getSuperUser)());lR&&(e.session.update=function(p){let h=Cn.get(F.AUTHENTICATION_COOKIE_EXPIRES),E=e.protocol==="https"||r.host?.startsWith("localhost:")||r.host?.startsWith("127.0.0.1:")||r.host?.startsWith("::1");if(!l){l=(0,k2.v4)();let g=Cn.get(F.AUTHENTICATION_COOKIE_DOMAINS),R=h?new Date(Date.now()+(0,eD.convertToMS)(h)).toUTCString():Pye,S=r.host&&g?.find(I=>{I.startsWith(".")&&(I=I.slice(1));let $=r.host.indexOf(":");return($!==-1?r.host.slice(0,$):r.host).endsWith(I)}),N=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${R}; HttpOnly`;S&&(N+=`; Domain=${S}`),E&&(N+="; SameSite=None; Secure"),o?o.push("Set-Cookie",N):m?.headers?.set&&m.headers.set("Set-Cookie",N)}return E&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),p.id=l,x2.put(p,{expiresAt:h?Date.now()+(0,eD.convertToMS)(h):void 0})},e.login=async function(p,h){let E=e.user=await Be.authenticateUser(p,h,e);e.session.update({user:E&&(E.getId?.()??E.username)})});let m=await t(e);return m&&(m.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Bs.loginPath?(m.status=302,m.headers.set("Location",Bs.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let d=l.headers;d||(l.headers=d=new qs);for(let f=0;f<u;){let m=o[f++];d.set(m,o[f++])}}return o=null,l}a(c,"applyResponseHeaders")}function Dye({server:e,port:t,securePort:r}){e.http(V2,t||r?{port:t,securePort:r}:{port:"all"}),B2||(B2=!0,setInterval(()=>{pu=new Map},Cn.get(F.AUTHENTICATION_CACHETTL)).unref(),Rye.addListener(()=>{pu=new Map}))}async function tD(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 rD(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var F2,k2,Cn,H2,q2,eD,Tye,yye,Rye,G2,bye,cR,Aye,Iye,wye,Nye,x2,lR,$2,Cye,Oye,Pye,pu,B2,uR=ne(()=>{F2=b(Es());Hr();ja();Vd();we();k2=require("uuid"),Cn=b(ae());H();H2=b(J()),q2=b(kp());Gp();eD=b(oe());GT();ko();({forComponent:Tye,AuthAuditLog:yye}=H2.default),{user:Rye}=q2.default,G2=Tye("authentication"),{debug:bye}=G2,cR=G2.withTag("auth-event");Cn.initSync();Aye=Cn.get(F.HTTP_CORSACCESSLIST),Iye=Cn.get(F.HTTP_CORS),wye=Cn.get(F.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Nye=Cn.get(F.OPERATIONSAPI_NETWORK_CORS),x2=Xe({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),lR=Cn.get(F.AUTHENTICATION_ENABLESESSIONS)??!0,$2=process.env.AUTHENTICATION_AUTHORIZELOCAL??Cn.get(F.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Cye=Cn.get(F.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Oye=Cn.get(F.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Pye="Tue, 01 Oct 8307 19:33:20 GMT",pu=new Map;Be.onInvalidatedUser(()=>{pu=new Map});a(Lye,"bypassAuth");a(V2,"authentication");a(Dye,"start");a(tD,"login");a(rD,"logout")});var J2=v((zqe,Q2)=>{"use strict";var Ie=require("joi"),K2=require("fs-extra"),Y2=require("path"),Cs=ot(),W2=ae(),z2=(H(),M(W)),j2=J(),{hdbErrors:Mye}=_e(),{HDB_ERROR_MSGS:On}=Mye,Ra=/^[a-zA-Z0-9-_]+$/,vye=/^[a-zA-Z0-9-_]+$/;Q2.exports={getDropCustomFunctionValidator:xye,setCustomFunctionValidator:Bye,addComponentValidator:qye,dropCustomFunctionProjectValidator:Gye,packageComponentValidator:$ye,deployComponentValidator:Vye,setComponentFileValidator:Fye,getComponentFileValidator:Hye,dropComponentFileValidator:kye,addSSHKeyValidator:Kye,updateSSHKeyValidator:Yye,deleteSSHKeyValidator:Wye,setSSHKnownHostsValidator:zye};function dR(e,t,r){try{let n=W2.get(z2.CONFIG_PARAMS.COMPONENTSROOT),s=Y2.join(n,t);return K2.existsSync(s)?e?t:r.message(On.PROJECT_EXISTS):e?r.message(On.NO_PROJECT):t}catch(n){return j2.error(n),r.message(On.VALIDATION_ERR)}}a(dR,"checkProjectExists");function _E(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(_E,"checkFilePath");function Uye(e,t,r,n){try{let s=W2.get(z2.CONFIG_PARAMS.COMPONENTSROOT),i=Y2.join(s,e,t,r+".js");return K2.existsSync(i)?r:n.message(On.NO_FILE)}catch(s){return j2.error(s),n.message(On.VALIDATION_ERR)}}a(Uye,"checkFileExists");function xye(e){let t=Ie.object({project:Ie.string().pattern(Ra).custom(dR.bind(null,!0)).required().messages({"string.pattern.base":On.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().pattern(Ra).custom(Uye.bind(null,e.project,e.type)).custom(_E).required().messages({"string.pattern.base":On.BAD_FILE_NAME})});return Cs.validateBySchema(e,t)}a(xye,"getDropCustomFunctionValidator");function Bye(e){let t=Ie.object({project:Ie.string().pattern(Ra).custom(dR.bind(null,!0)).required().messages({"string.pattern.base":On.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().custom(_E).required(),function_content:Ie.string().required()});return Cs.validateBySchema(e,t)}a(Bye,"setCustomFunctionValidator");function Fye(e){let t=Ie.object({project:Ie.string().pattern(Ra).required().messages({"string.pattern.base":On.BAD_PROJECT_NAME}),file:Ie.string().custom(_E).required(),payload:Ie.string().allow("").optional(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Cs.validateBySchema(e,t)}a(Fye,"setComponentFileValidator");function kye(e){let t=Ie.object({project:Ie.string().pattern(Ra).required().messages({"string.pattern.base":On.BAD_PROJECT_NAME}),file:Ie.string().custom(_E).optional()});return Cs.validateBySchema(e,t)}a(kye,"dropComponentFileValidator");function Hye(e){let t=Ie.object({project:Ie.string().required(),file:Ie.string().custom(_E).required(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Cs.validateBySchema(e,t)}a(Hye,"getComponentFileValidator");function qye(e){let t=Ie.object({project:Ie.string().pattern(Ra).custom(dR.bind(null,!1)).required().messages({"string.pattern.base":On.BAD_PROJECT_NAME}),template:Ie.string().optional(),install:Ie.object({command:Ie.string().optional(),timeout:Ie.number().optional()}).optional()});return Cs.validateBySchema(e,t)}a(qye,"addComponentValidator");function Gye(e){let t=Ie.object({project:Ie.string().pattern(Ra).custom(dR.bind(null,!0)).required().messages({"string.pattern.base":On.BAD_PROJECT_NAME})});return Cs.validateBySchema(e,t)}a(Gye,"dropCustomFunctionProjectValidator");function $ye(e){let t=Ie.object({project:Ie.string().pattern(Ra).required().messages({"string.pattern.base":On.BAD_PROJECT_NAME}),skip_node_modules:Ie.boolean(),skip_symlinks:Ie.boolean()});return Cs.validateBySchema(e,t)}a($ye,"packageComponentValidator");function Vye(e){let t=Ie.object({project:Ie.string().pattern(Ra).required().messages({"string.pattern.base":On.BAD_PROJECT_NAME}),package:Ie.string().optional(),restart:Ie.alternatives().try(Ie.boolean(),Ie.string().valid("rolling")).optional()});return Cs.validateBySchema(e,t)}a(Vye,"deployComponentValidator");function Kye(e){let t=Ie.object({name:Ie.string().pattern(vye).required().messages({"string.pattern.base":On.BAD_SSH_KEY_NAME}),key:Ie.string().required(),host:Ie.string().required(),hostname:Ie.string().required(),known_hosts:Ie.string().optional()});return Cs.validateBySchema(e,t)}a(Kye,"addSSHKeyValidator");function Yye(e){let t=Ie.object({name:Ie.string().required(),key:Ie.string().required()});return Cs.validateBySchema(e,t)}a(Yye,"updateSSHKeyValidator");function Wye(e){let t=Ie.object({name:Ie.string().required()});return Cs.validateBySchema(e,t)}a(Wye,"deleteSSHKeyValidator");function zye(e){let t=Ie.object({known_hosts:Ie.string().required()});return Cs.validateBySchema(e,t)}a(zye,"setSSHKnownHostsValidator")});var t4={};ye(t4,{packageDirectory:()=>jye});function jye(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];Z2.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,X2.join)("cache","webpack")):void 0,map:a(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,e4.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var X2,Z2,e4,r4=ne(()=>{X2=require("path"),Z2=b(require("tar-fs")),e4=require("node:zlib");a(jye,"packageDirectory")});var mR={};ye(mR,{Application:()=>fR,assertApplicationConfig:()=>c4,extractApplication:()=>l4,installApplication:()=>u4,installApplications:()=>Jye,nonInteractiveSpawn:()=>gE,prepareApplication:()=>d4});function c4(e,t){if(typeof t.package!="string")throw new TypeError(`Invalid 'package' property for application ${e}: expected string, got ${typeof t.package}`);if("install"in t){if(typeof t.install!="object"||t.install===null)throw new TypeError(`Invalid 'install' property for application ${e}: expected object, got ${typeof t.install}`);if("command"in t.install&&typeof t.install.command!="string")throw new TypeError(`Invalid 'install.command' property for application ${e}: expected string, got ${typeof t.install.command}`);if("timeout"in t.install&&(typeof t.install.timeout!="number"||t.install.timeout<0))throw new TypeError(`Invalid 'install.timeout' property for application ${e}: expected non-negativenumber, got ${typeof t.install.timeout}`)}}async function l4(e){if(!e.payload&&!e.packageIdentifier)throw new Error("Either payload or package must be provided");if(e.payload&&e.packageIdentifier)throw new Error("Both payload and package cannot be provided");let t,r;if(e.payload)r=s4.Readable.from(e.payload instanceof Buffer?e.payload:Buffer.from(e.payload,"base64"));else{let s=(0,Qn.dirname)(e.dirPath);if(e.packageIdentifier.startsWith("file:")){let i=e.packageIdentifier.slice(5);try{let o=await(0,ft.stat)(i);if(o.isDirectory()){await(0,ft.symlink)(i,e.dirPath,"dir");return}if(!o.isFile())throw new Error(`File path specified in package identifier is not a file or directory: ${i}`);t=i,r=(0,Gc.createReadStream)(t)}catch(o){throw o.code==="ENOENT"?new Error(`File path specified in package identifier does not exist: ${i}`):o}}else{let{stdout:i}=await gE(e.name,"npm",["pack",e.packageIdentifier],s);t=(0,Qn.join)(s,i.trim()),r=(0,Gc.createReadStream)(t)}}try{await(0,ft.access)(e.dirPath,ft.constants.F_OK),await(0,ft.rm)(e.dirPath,{recursive:!0,force:!0})}catch(s){if(s.code!=="ENOENT")throw s}await(0,ft.mkdir)(e.dirPath,{recursive:!0}),await(0,i4.pipeline)(r,(0,a4.default)(),(0,o4.extract)(e.dirPath));let n=await(0,ft.readdir)(e.dirPath,{withFileTypes:!0});if(n.length===1&&n[0].isDirectory()){let s=(0,Qn.join)(e.dirPath,n[0].name),i=await(0,ft.mkdtemp)(e.dirPath);await(0,ft.cp)(s,i,{recursive:!0}),await(0,ft.rm)(s,{recursive:!0,force:!0}),await(0,ft.cp)(i,e.dirPath,{recursive:!0}),await(0,ft.rm)(i,{recursive:!0,force:!0})}t&&await(0,ft.rm)(t,{force:!0})}async function u4(e){try{await(0,ft.access)((0,Qn.join)(e.dirPath,"package.json"),ft.constants.F_OK)}catch(i){if(i.code!=="ENOENT")throw i;e.logger.debug(`Application ${e.name} has no package.json; skipping install`);return}try{await(0,ft.access)((0,Qn.join)(e.dirPath,"node_modules"),ft.constants.F_OK),e.logger.debug(`Application ${e.name} already has node_modules; skipping install`);return}catch(i){if(i.code!=="ENOENT")throw i}if(e.install?.command){let[i,...o]=e.install.command.split(" "),{stderr:c,code:l}=await gE(e.name,i,o,e.dirPath,e.install?.timeout);if(l===0)return;throw zf(e.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using custom install command: ${e.install.command}. Exit code: ${l}`)}let t=JSON.parse(await(0,ft.readFile)((0,Qn.join)(e.dirPath,"package.json"),"utf8")),{packageManager:r}=t.devEngines||{};if(r){let i=r.onFail,o=["ignore","warn","error"];i==="download"?(e.logger.warn('Harper currently does not support `devEngines.packageManager.onFail = "download"`. Defaulting to "error"'),i="error"):i&&!o.includes(i)&&(e.logger.error(`Invalid \`devEngines.packageManager.onFail\` value: "${i}". Expected one of ${o.map(u=>`"${u}"`).join(", ")}. Defaulting to "error"`),i="error"),i=i||"error";let{stderr:c,code:l}=await gE(e.name,r.name,["install"],e.dirPath,e.install?.timeout);if(l===0)return;if(i==="error")throw zf(r.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`);i==="warn"&&(zf(r.name,c,"warn"),e.logger.warn(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`))}let{stderr:n,code:s}=await gE(e.name,"npm",["install","--force"],e.dirPath);if(s!==0)throw zf(e.name,n,"error"),new Error(`Failed to install dependencies for ${e.name} using npm default. Exit code: ${s}`)}function Qye(e){return e.includes(":")?e:e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?`npm:${e}`:(0,Qn.extname)(e)||(0,Gc.existsSync)(e)?`file:${e}`:`github:${e}`}function d4(e){return l4(e).then(()=>u4(e))}async function Jye(){let e=(0,jf.getConfigObj)(),t=(0,jf.getConfigValue)(F.COMPONENTSROOT);await(0,ft.mkdir)(t,{recursive:!0});let r=[];for(let[s,i]of Object.entries(e)){if(typeof i!="object"||i===null||!("package"in i))continue;c4(s,i);let o=new fR({name:s,packageIdentifier:i.package,install:i.install});r.push(d4(o))}let n=await Promise.allSettled(r);qc.default.debug(n),qc.default.info("All root applications loaded")}function Xye(){let e=(0,jf.getConfigValue)(F.ROOTPATH),t=(0,Qn.join)(e,"ssh");if((0,Gc.existsSync)(t)){for(let r of(0,Gc.readdirSync)(t))if(r.includes(".key"))return`ssh -F ${(0,Qn.join)(t,"config")} -o UserKnownHostsFile=${(0,Qn.join)(t,"known_hosts")}`}}function gE(e,t,r,n,s=300*1e3){return new Promise((i,o)=>{qc.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Executing \`${t} ${r.join(" ")}\` in ${n}`);let c={...process.env},l=Xye();l&&(c.GIT_SSH_COMMAND=l);let u=(0,n4.spawn)(t,r,{shell:!0,cwd:n,env:c,stdio:["ignore","pipe","pipe"]}),d=setTimeout(()=>{u.kill(),o(new Error(`Command\`${t} ${r.join(" ")}\` timed out after ${s}ms`))},s),f="";u.stdout.on("data",p=>{f+=p.toString(),qc.default.loggerWithTag(`${e}:spawn:${t}:stdout`).debug(p.toString())});let m="";u.stderr.on("data",p=>{m+=p.toString()}),u.on("error",p=>{clearTimeout(d),m&&zf(e,t,m),o(p)}),u.on("close",p=>{clearTimeout(d),m&&zf(e,t,m),qc.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Process exited with code ${p}`),i({stdout:f,stderr:m,code:p})})})}function zf(e,t,r,n="debug"){let s=qc.default.loggerWithTag(`${e}:spawn:${t}:stderr`);for(let i of r.split(`
|
|
122
|
-
`))s[n](i)}var jf,qc,Qn,ft,n4,Gc,s4,i4,o4,a4,fR,pR=ne(()=>{jf=b(St());H();qc=b(J()),Qn=require("node:path"),ft=require("node:fs/promises"),n4=require("node:child_process"),Gc=require("node:fs"),s4=require("node:stream"),i4=require("node:stream/promises"),o4=require("tar-fs"),a4=b(require("gunzip-maybe"));a(c4,"assertApplicationConfig");a(l4,"extractApplication");a(u4,"installApplication");fR=class{static{a(this,"Application")}name;payload;packageIdentifier;install;dirPath;logger;constructor({name:t,payload:r,packageIdentifier:n,install:s}){this.name=t,this.payload=r,this.packageIdentifier=n&&Qye(n),this.install=s,this.dirPath=(0,Qn.join)((0,jf.getConfigValue)(F.COMPONENTSROOT),t),this.logger=qc.default.loggerWithTag(t)}};a(Qye,"derivePackageIdentifier");a(d4,"prepareApplication");a(Jye,"installApplications");a(Xye,"getGitSSHCommand");a(gE,"nonInteractiveSpawn");a(zf,"printStderr")});var iD=v(cr=>{"use strict";var $e=require("node:path"),{isMainThread:Zye}=require("node:worker_threads"),Ue=require("fs-extra"),nD=require("fast-glob"),sD=require("normalize-path"),Jn=J2(),Qt=J(),Lt=(H(),M(W)),Tr=ae(),hR=St(),eRe=oe(),{PACKAGE_ROOT:tRe}=Rt(),{handleHDBError:Jt,hdbErrors:rRe}=_e(),Zqe=ae(),{HDB_ERROR_MSGS:hu,HTTP_STATUS_CODES:Xt}=rRe,f4=tt(),{replicateOperation:Li}=(Ss(),M(na)),{packageDirectory:nRe}=(r4(),M(t4)),eGe=$e.join(tRe,"application-template"),sRe=Tr.get(Lt.CONFIG_PARAMS.ROOTPATH),$c=$e.join(sRe,"ssh"),ba=$e.join($c,"known_hosts"),{Resources:iRe}=(ja(),M(uI)),{Application:m4,prepareApplication:p4}=(pR(),M(mR));function oRe(){Qt.trace("getting custom api status");let e={};try{e={port:Tr.get(Lt.CONFIG_PARAMS.HTTP_PORT),directory:Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Jt(new Error,hu.FUNCTION_STATUS,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,t)}return e}a(oRe,"customFunctionsStatus");function aRe(){Qt.trace("getting custom api endpoints");let e={},t=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT);try{nD.sync(sD(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:nD.sync(sD(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:nD.sync(sD(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Jt(new Error,hu.GET_FUNCTIONS,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,r)}return e}a(aRe,"getCustomFunctions");function cRe(e){e.project&&(e.project=$e.parse(e.project).name),e.file&&(e.file=$e.parse(e.file).name);let t=Jn.getDropCustomFunctionValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);Qt.trace("getting custom api endpoint file content");let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=$e.join(r,n,s,i+".js");try{return Ue.readFileSync(o,{encoding:"utf8"})}catch(c){throw Jt(new Error,hu.GET_FUNCTION,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,c)}}a(cRe,"getCustomFunction");async function lRe(e){e.project&&(e.project=$e.parse(e.project).name),e.file&&(e.file=$e.parse(e.file).name);let t=Jn.setCustomFunctionValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);Qt.trace("setting custom function file content");let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Ue.outputFileSync($e.join(r,n,s,i+".js"),o);let c=await Li(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Jt(new Error,hu.SET_FUNCTION,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,c)}}a(lRe,"setCustomFunction");async function uRe(e){e.project&&(e.project=$e.parse(e.project).name),e.file&&(e.file=$e.parse(e.file).name);let t=Jn.getDropCustomFunctionValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);Qt.trace("dropping custom function file");let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Ue.unlinkSync($e.join(r,n,s,i+".js"));let o=await Li(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw Jt(new Error,hu.DROP_FUNCTION,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,o)}}a(uRe,"dropCustomFunction");async function dRe(e){e.project&&(e.project=$e.parse(e.project).name);let t=Jn.addComponentValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);Qt.trace("adding component");let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,install:s}=e,i=e.template||"https://github.com/harperdb/application-template";try{let o=$e.join(r,n);Ue.mkdirSync(o,{recursive:!0});let c=new m4({name:n,packageIdentifier:i,install:s});await p4(c);let l=await Li(e);return l.message=`Successfully added project: ${n}`,l}catch(o){throw Jt(new Error,hu.ADD_FUNCTION,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,o)}}a(dRe,"addComponent");async function fRe(e){e.project&&(e.project=$e.parse(e.project).name);let t=Jn.dropCustomFunctionProjectValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);Qt.trace("dropping custom function project");let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Tr.get(Lt.CONFIG_PARAMS.APPS);if(!eRe.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 hR.updateConfigValue(Lt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=$e.join(r,n);Ue.rmSync(i,{recursive:!0});let o=await Li(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw Jt(new Error,hu.DROP_FUNCTION_PROJECT,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,i)}}a(fRe,"dropCustomFunctionProject");async function mRe(e){e.project&&(e.project=$e.parse(e.project).name);let t=Jn.packageComponentValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Qt.trace("packaging component",n);let s;try{s=await Ue.realpath($e.join(r,n))}catch(o){if(o.code!==Lt.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Ue.realpath($e.join(Tr.get(Lt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===Lt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await nRe(s,e)).toString("base64");return{project:n,payload:i}}a(mRe,"packageComponent");async function pRe(e){e.project?e.project=$e.parse(e.project).name:e.package&&(e.project=hRe(e.package));let t=Jn.deployComponentValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);if(e.package){let l={package:e.package};(e.install_command||e.install_timeout)&&(l.install={command:e.install_command,timeout:e.install_timeout}),await hR.addConfig(e.project,l)}let r=new m4({name:e.project,payload:e.payload,packageIdentifier:e.package,install:{command:e.install_command,timeout:e.install_timeout}});if(await p4(r),Zye)return;let n=new iRe;n.isWorker=!0;let s=(uE(),M(eR)),i;if(s.setErrorReporter(l=>i=l),await s.loadComponent(r.dirPath,n),i)throw i;let o=e.restart==="rolling";e.restart=o?!1:e.restart;let c=await Li(e);if(e.restart===!0)f4.restartWorkers("http"),c.message=`Successfully deployed: ${r.name}, restarting HarperDB`;else if(o){let u=await(aD(),M(oD)).executeJob({operation:"restart_service",service:"http",replicated:!0});c.restartJobId=u.job_id,c.message=`Successfully deployed: ${r.name}, restarting HarperDB`}else c.message=`Successfully deployed: ${r.name}`;return c}a(pRe,"deployComponent");function hRe(e){if(e.startsWith("git+ssh://"))return $e.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return $e.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Ue.readFileSync($e.join(e,"package.json"),"utf8"));return $e.basename(t)}catch{}return $e.basename(e)}a(hRe,"getProjectNameFromPackage");async function ERe(){let e=hR.getConfiguration(),t=a(async(i,o)=>{try{let c=await Ue.readdir(i,{withFileTypes:!0});for(let l of c){let u=l.name;if(u.startsWith(".")||u==="node_modules")continue;let d=$e.join(i,u);if(l.isDirectory()||l.isSymbolicLink()){let f={name:u,entries:[]};o.entries.push(f),await t(d,f)}else{let f=await Ue.stat(d),m={name:$e.basename(u),mtime:f.mtime,size:f.size};o.entries.push(m)}}return o}catch(c){return Qt.warn("Error loading package",c),{error:c.toString(),entries:[]}}},"walkDir"),r=await t(Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{name:Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT).split($e.sep).slice(-1).pop(),entries:[]});for(let i of r.entries){let o=e[i.name]?.package;o&&(i.package=o)}let{internal:n}=(Bp(),M(RN)),s;try{s=await n.ComponentStatusRegistry.getAggregatedFromAllThreads(n.componentStatusRegistry)}catch(i){Qt.debug(`Failed to get component status from threads: ${i.message}`)}for(let i of r.entries)try{i.status=await n.componentStatusRegistry.getAggregatedStatusFor(i.name,s)}catch(o){Qt.debug(`Failed to get aggregated status for component ${i.name}: ${o.message}`),i.status={status:"unknown",message:"Failed to retrieve component status",lastChecked:{workers:{}}}}return r}a(ERe,"getComponents");async function _Re(e){let t=Jn.getComponentFileValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let s=await Ue.stat($e.join(r,e.project,e.file));return{message:await Ue.readFile($e.join(r,e.project,e.file),n),size:s.size,birthtime:s.birthtime,mtime:s.mtime}}catch(s){throw s.code===Lt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${$e.join(e.project,e.file)}'`):s}}a(_Re,"getComponentFile");async function gRe(e){let t=Jn.setComponentFileValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=$e.join(Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Ue.ensureFile(n),await Ue.outputFile(n,e.payload,r)):await Ue.ensureDir(n);let s=await Li(e);return s.message="Successfully set component: "+e.file,s}a(gRe,"setComponentFile");async function SRe(e){let t=Jn.dropComponentFileValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?$e.join(r,n):r,i=$e.join(Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),s),o=$e.join(Tr.get(Lt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Ue.pathExists(o)&&await Ue.unlink(o),await Ue.pathExists(i)&&await Ue.remove(i);let c=$e.join(Tr.get(Lt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Ue.pathExists(c)){let u=JSON.parse(await Ue.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Ue.writeFile(c,JSON.stringify(u,null,2),"utf8")}hR.deleteConfigFromFile([r]);let l=await Li(e);return e.restart===!0?(f4.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(SRe,"dropComponent");async function TRe(e){let t=Jn.addSSHKeyValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;Qt.trace("adding ssh key",r);let c=$e.join($c,r+".key"),l=$e.join($c,"config");if(await Ue.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Ue.outputFile(c,n),await Ue.chmod(c,"0600");let u=`#${r}
|
|
121
|
+
${r.stack}`;throw QL.error(n),I2(new Error)}}}a(hye,"getRolePermissions");function Eye(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[jn.SYSTEM_SCHEMA_NAME]=n[jn.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]=_ye(t[i]);return}r[i]=O2(),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],l=t[i][o],u=gye(c,l);r[i].describe||L2.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=JL()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=JL()})}),r}a(Eye,"translateRolePermissions");function _ye(e){let t=O2(!0);return Object.keys(e).forEach(r=>{t.tables[r]=JL(!0,!0,!0,!0,!0)}),t}a(_ye,"createStructureUserPermissions");function gye(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,d)=>{let{attribute_name:f}=d,m=d;return jn.TIME_STAMP_NAMES.includes(f)&&(m=N2(f,d[hE])),u[f]=m,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=w2(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=M2(d),s.attribute_permissions.push(d),c||Sye(d,l)}else if(u!==o){let d;jn.TIME_STAMP_NAMES.includes(u)?d=N2(u):d=w2(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=C2(s),s}else return e.describe=C2(e),e}a(gye,"getTableAttrPerms");function C2(e){return L2.filter(t=>e[t]).length>0}a(C2,"getSchemaTableDescribePerm");function M2(e){return D2.filter(t=>e[t]).length>0}a(M2,"getAttributeDescribePerm");function Sye(e,t){D2.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Sye,"checkForHashPerms")});var EE={};ye(EE,{authentication:()=>V2,bypassAuth:()=>Lye,login:()=>tD,logout:()=>rD,start:()=>Dye});function Lye(){$2=!0}async function V2(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let p=e.isOperationsServer?Nye?wye:[]:Iye?Aye:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=Cn.get(F.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new qs([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return lR&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}o.push("Access-Control-Allow-Origin",i),lR&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(lR){i||(i=r.host);let p=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let E of h)if(E.startsWith(p)){let g=E.indexOf(";");l=E.slice(p.length,g===-1?E.length:g),u=await x2.get(l);break}e.session=u||(u={})}let d=a((p,h,E)=>{let g=new yye(p,h,ka.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=E,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),h===ci.SUCCESS?cR.info?.(g):cR.error?.(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&cR.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await ff(e.peerCertificate,e.mtlsConfig);if(!p.valid)return cR.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:Bo({error:"Certificate revoked or verification failed"},e)});let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await Be.getUser(h,null,e),d(h,ci.SUCCESS,"mTLS")):bye("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=pu.get(n),!f){let p=n.indexOf(" "),h=n.slice(0,p),E=n.slice(p+1),g,R;try{switch(h){case"Basic":let S=atob(E),y=S.indexOf(":");g=S.slice(0,y),R=S.slice(y+1),f=g||R?await Be.getUser(g,R,e):null;break;case"Bearer":try{f=await uC(E)}catch(N){if(N.message==="invalid token")try{return await zS(E),c({status:-1})}catch{throw N}}break}}catch(S){return Oye&&(pu.get(E)||(pu.set(E,E),d(g,ci.FAILURE,h))),c({status:401,body:Bo({error:S.message},e)})}pu.set(n,f),Cye&&d(f.username,ci.SUCCESS,h)}e.user=f}else u?.user?e.user=await Be.getUser(u.user,null,e):($2&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,F2.getSuperUser)());lR&&(e.session.update=function(p){let h=Cn.get(F.AUTHENTICATION_COOKIE_EXPIRES),E=e.protocol==="https"||r.host?.startsWith("localhost:")||r.host?.startsWith("127.0.0.1:")||r.host?.startsWith("::1");if(!l){l=(0,k2.v4)();let g=Cn.get(F.AUTHENTICATION_COOKIE_DOMAINS),R=h?new Date(Date.now()+(0,eD.convertToMS)(h)).toUTCString():Pye,S=r.host&&g?.find(I=>{I.startsWith(".")&&(I=I.slice(1));let $=r.host.indexOf(":");return($!==-1?r.host.slice(0,$):r.host).endsWith(I)}),N=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${R}; HttpOnly`;S&&(N+=`; Domain=${S}`),E&&(N+="; SameSite=None; Secure"),o?o.push("Set-Cookie",N):m?.headers?.set&&m.headers.set("Set-Cookie",N)}return E&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),p.id=l,x2.put(p,{expiresAt:h?Date.now()+(0,eD.convertToMS)(h):void 0})},e.login=async function(p,h){let E=e.user=await Be.authenticateUser(p,h,e);e.session.update({user:E&&(E.getId?.()??E.username)})});let m=await t(e);return m&&(m.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Bs.loginPath?(m.status=302,m.headers.set("Location",Bs.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let d=l.headers;d||(l.headers=d=new qs);for(let f=0;f<u;){let m=o[f++];d.set(m,o[f++])}}return o=null,l}a(c,"applyResponseHeaders")}function Dye({server:e,port:t,securePort:r}){e.http(V2,t||r?{port:t,securePort:r}:{port:"all"}),B2||(B2=!0,setInterval(()=>{pu=new Map},Cn.get(F.AUTHENTICATION_CACHETTL)).unref(),Rye.addListener(()=>{pu=new Map}))}async function tD(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 rD(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var F2,k2,Cn,H2,q2,eD,Tye,yye,Rye,G2,bye,cR,Aye,Iye,wye,Nye,x2,lR,$2,Cye,Oye,Pye,pu,B2,uR=se(()=>{F2=b(Es());Hr();ja();Vd();we();k2=require("uuid"),Cn=b(ae());H();H2=b(J()),q2=b(kp());Gp();eD=b(oe());GT();ko();({forComponent:Tye,AuthAuditLog:yye}=H2.default),{user:Rye}=q2.default,G2=Tye("authentication"),{debug:bye}=G2,cR=G2.withTag("auth-event");Cn.initSync();Aye=Cn.get(F.HTTP_CORSACCESSLIST),Iye=Cn.get(F.HTTP_CORS),wye=Cn.get(F.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Nye=Cn.get(F.OPERATIONSAPI_NETWORK_CORS),x2=Xe({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),lR=Cn.get(F.AUTHENTICATION_ENABLESESSIONS)??!0,$2=process.env.AUTHENTICATION_AUTHORIZELOCAL??Cn.get(F.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Cye=Cn.get(F.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Oye=Cn.get(F.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Pye="Tue, 01 Oct 8307 19:33:20 GMT",pu=new Map;Be.onInvalidatedUser(()=>{pu=new Map});a(Lye,"bypassAuth");a(V2,"authentication");a(Dye,"start");a(tD,"login");a(rD,"logout")});var J2=v((zqe,Q2)=>{"use strict";var Ie=require("joi"),K2=require("fs-extra"),Y2=require("path"),Cs=ot(),W2=ae(),z2=(H(),M(W)),j2=J(),{hdbErrors:Mye}=_e(),{HDB_ERROR_MSGS:On}=Mye,Ra=/^[a-zA-Z0-9-_]+$/,vye=/^[a-zA-Z0-9-_]+$/;Q2.exports={getDropCustomFunctionValidator:xye,setCustomFunctionValidator:Bye,addComponentValidator:qye,dropCustomFunctionProjectValidator:Gye,packageComponentValidator:$ye,deployComponentValidator:Vye,setComponentFileValidator:Fye,getComponentFileValidator:Hye,dropComponentFileValidator:kye,addSSHKeyValidator:Kye,updateSSHKeyValidator:Yye,deleteSSHKeyValidator:Wye,setSSHKnownHostsValidator:zye};function dR(e,t,r){try{let n=W2.get(z2.CONFIG_PARAMS.COMPONENTSROOT),s=Y2.join(n,t);return K2.existsSync(s)?e?t:r.message(On.PROJECT_EXISTS):e?r.message(On.NO_PROJECT):t}catch(n){return j2.error(n),r.message(On.VALIDATION_ERR)}}a(dR,"checkProjectExists");function _E(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(_E,"checkFilePath");function Uye(e,t,r,n){try{let s=W2.get(z2.CONFIG_PARAMS.COMPONENTSROOT),i=Y2.join(s,e,t,r+".js");return K2.existsSync(i)?r:n.message(On.NO_FILE)}catch(s){return j2.error(s),n.message(On.VALIDATION_ERR)}}a(Uye,"checkFileExists");function xye(e){let t=Ie.object({project:Ie.string().pattern(Ra).custom(dR.bind(null,!0)).required().messages({"string.pattern.base":On.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().pattern(Ra).custom(Uye.bind(null,e.project,e.type)).custom(_E).required().messages({"string.pattern.base":On.BAD_FILE_NAME})});return Cs.validateBySchema(e,t)}a(xye,"getDropCustomFunctionValidator");function Bye(e){let t=Ie.object({project:Ie.string().pattern(Ra).custom(dR.bind(null,!0)).required().messages({"string.pattern.base":On.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().custom(_E).required(),function_content:Ie.string().required()});return Cs.validateBySchema(e,t)}a(Bye,"setCustomFunctionValidator");function Fye(e){let t=Ie.object({project:Ie.string().pattern(Ra).required().messages({"string.pattern.base":On.BAD_PROJECT_NAME}),file:Ie.string().custom(_E).required(),payload:Ie.string().allow("").optional(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Cs.validateBySchema(e,t)}a(Fye,"setComponentFileValidator");function kye(e){let t=Ie.object({project:Ie.string().pattern(Ra).required().messages({"string.pattern.base":On.BAD_PROJECT_NAME}),file:Ie.string().custom(_E).optional()});return Cs.validateBySchema(e,t)}a(kye,"dropComponentFileValidator");function Hye(e){let t=Ie.object({project:Ie.string().required(),file:Ie.string().custom(_E).required(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Cs.validateBySchema(e,t)}a(Hye,"getComponentFileValidator");function qye(e){let t=Ie.object({project:Ie.string().pattern(Ra).custom(dR.bind(null,!1)).required().messages({"string.pattern.base":On.BAD_PROJECT_NAME}),template:Ie.string().optional(),install:Ie.object({command:Ie.string().optional(),timeout:Ie.number().optional()}).optional()});return Cs.validateBySchema(e,t)}a(qye,"addComponentValidator");function Gye(e){let t=Ie.object({project:Ie.string().pattern(Ra).custom(dR.bind(null,!0)).required().messages({"string.pattern.base":On.BAD_PROJECT_NAME})});return Cs.validateBySchema(e,t)}a(Gye,"dropCustomFunctionProjectValidator");function $ye(e){let t=Ie.object({project:Ie.string().pattern(Ra).required().messages({"string.pattern.base":On.BAD_PROJECT_NAME}),skip_node_modules:Ie.boolean(),skip_symlinks:Ie.boolean()});return Cs.validateBySchema(e,t)}a($ye,"packageComponentValidator");function Vye(e){let t=Ie.object({project:Ie.string().pattern(Ra).required().messages({"string.pattern.base":On.BAD_PROJECT_NAME}),package:Ie.string().optional(),restart:Ie.alternatives().try(Ie.boolean(),Ie.string().valid("rolling")).optional()});return Cs.validateBySchema(e,t)}a(Vye,"deployComponentValidator");function Kye(e){let t=Ie.object({name:Ie.string().pattern(vye).required().messages({"string.pattern.base":On.BAD_SSH_KEY_NAME}),key:Ie.string().required(),host:Ie.string().required(),hostname:Ie.string().required(),known_hosts:Ie.string().optional()});return Cs.validateBySchema(e,t)}a(Kye,"addSSHKeyValidator");function Yye(e){let t=Ie.object({name:Ie.string().required(),key:Ie.string().required()});return Cs.validateBySchema(e,t)}a(Yye,"updateSSHKeyValidator");function Wye(e){let t=Ie.object({name:Ie.string().required()});return Cs.validateBySchema(e,t)}a(Wye,"deleteSSHKeyValidator");function zye(e){let t=Ie.object({known_hosts:Ie.string().required()});return Cs.validateBySchema(e,t)}a(zye,"setSSHKnownHostsValidator")});var t4={};ye(t4,{packageDirectory:()=>jye});function jye(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];Z2.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,X2.join)("cache","webpack")):void 0,map:a(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,e4.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var X2,Z2,e4,r4=se(()=>{X2=require("path"),Z2=b(require("tar-fs")),e4=require("node:zlib");a(jye,"packageDirectory")});var mR={};ye(mR,{Application:()=>fR,assertApplicationConfig:()=>c4,extractApplication:()=>l4,installApplication:()=>u4,installApplications:()=>Jye,nonInteractiveSpawn:()=>gE,prepareApplication:()=>d4});function c4(e,t){if(typeof t.package!="string")throw new TypeError(`Invalid 'package' property for application ${e}: expected string, got ${typeof t.package}`);if("install"in t){if(typeof t.install!="object"||t.install===null)throw new TypeError(`Invalid 'install' property for application ${e}: expected object, got ${typeof t.install}`);if("command"in t.install&&typeof t.install.command!="string")throw new TypeError(`Invalid 'install.command' property for application ${e}: expected string, got ${typeof t.install.command}`);if("timeout"in t.install&&(typeof t.install.timeout!="number"||t.install.timeout<0))throw new TypeError(`Invalid 'install.timeout' property for application ${e}: expected non-negativenumber, got ${typeof t.install.timeout}`)}}async function l4(e){if(!e.payload&&!e.packageIdentifier)throw new Error("Either payload or package must be provided");if(e.payload&&e.packageIdentifier)throw new Error("Both payload and package cannot be provided");let t,r;if(e.payload)r=s4.Readable.from(e.payload instanceof Buffer?e.payload:Buffer.from(e.payload,"base64"));else{let s=(0,Qn.dirname)(e.dirPath);if(e.packageIdentifier.startsWith("file:")){let i=e.packageIdentifier.slice(5);try{let o=await(0,ft.stat)(i);if(o.isDirectory()){await(0,ft.symlink)(i,e.dirPath,"dir");return}if(!o.isFile())throw new Error(`File path specified in package identifier is not a file or directory: ${i}`);t=i,r=(0,Gc.createReadStream)(t)}catch(o){throw o.code==="ENOENT"?new Error(`File path specified in package identifier does not exist: ${i}`):o}}else{let{stdout:i}=await gE(e.name,"npm",["pack",e.packageIdentifier],s);t=(0,Qn.join)(s,i.trim()),r=(0,Gc.createReadStream)(t)}}try{await(0,ft.access)(e.dirPath,ft.constants.F_OK),await(0,ft.rm)(e.dirPath,{recursive:!0,force:!0})}catch(s){if(s.code!=="ENOENT")throw s}await(0,ft.mkdir)(e.dirPath,{recursive:!0}),await(0,i4.pipeline)(r,(0,a4.default)(),(0,o4.extract)(e.dirPath));let n=await(0,ft.readdir)(e.dirPath,{withFileTypes:!0});if(n.length===1&&n[0].isDirectory()){let s=(0,Qn.join)(e.dirPath,n[0].name),i=await(0,ft.mkdtemp)(e.dirPath);await(0,ft.cp)(s,i,{recursive:!0}),await(0,ft.rm)(s,{recursive:!0,force:!0}),await(0,ft.cp)(i,e.dirPath,{recursive:!0}),await(0,ft.rm)(i,{recursive:!0,force:!0})}t&&await(0,ft.rm)(t,{force:!0})}async function u4(e){try{await(0,ft.access)((0,Qn.join)(e.dirPath,"package.json"),ft.constants.F_OK)}catch(i){if(i.code!=="ENOENT")throw i;e.logger.debug(`Application ${e.name} has no package.json; skipping install`);return}try{await(0,ft.access)((0,Qn.join)(e.dirPath,"node_modules"),ft.constants.F_OK),e.logger.debug(`Application ${e.name} already has node_modules; skipping install`);return}catch(i){if(i.code!=="ENOENT")throw i}if(e.install?.command){let[i,...o]=e.install.command.split(" "),{stderr:c,code:l}=await gE(e.name,i,o,e.dirPath,e.install?.timeout);if(l===0)return;throw zf(e.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using custom install command: ${e.install.command}. Exit code: ${l}`)}let t=JSON.parse(await(0,ft.readFile)((0,Qn.join)(e.dirPath,"package.json"),"utf8")),{packageManager:r}=t.devEngines||{};if(r){let i=r.onFail,o=["ignore","warn","error"];i==="download"?(e.logger.warn('Harper currently does not support `devEngines.packageManager.onFail = "download"`. Defaulting to "error"'),i="error"):i&&!o.includes(i)&&(e.logger.error(`Invalid \`devEngines.packageManager.onFail\` value: "${i}". Expected one of ${o.map(u=>`"${u}"`).join(", ")}. Defaulting to "error"`),i="error"),i=i||"error";let{stderr:c,code:l}=await gE(e.name,r.name,["install"],e.dirPath,e.install?.timeout);if(l===0)return;if(i==="error")throw zf(r.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`);i==="warn"&&(zf(r.name,c,"warn"),e.logger.warn(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`))}let{stderr:n,code:s}=await gE(e.name,"npm",["install","--force"],e.dirPath);if(s!==0)throw zf(e.name,n,"error"),new Error(`Failed to install dependencies for ${e.name} using npm default. Exit code: ${s}`)}function Qye(e){return e.includes(":")?e:e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?`npm:${e}`:(0,Qn.extname)(e)||(0,Gc.existsSync)(e)?`file:${e}`:`github:${e}`}function d4(e){return l4(e).then(()=>u4(e))}async function Jye(){let e=(0,jf.getConfigObj)(),t=(0,jf.getConfigValue)(F.COMPONENTSROOT);await(0,ft.mkdir)(t,{recursive:!0});let r=[];for(let[s,i]of Object.entries(e)){if(typeof i!="object"||i===null||!("package"in i))continue;c4(s,i);let o=new fR({name:s,packageIdentifier:i.package,install:i.install});r.push(d4(o))}let n=await Promise.allSettled(r);qc.default.debug(n),qc.default.info("All root applications loaded")}function Xye(){let e=(0,jf.getConfigValue)(F.ROOTPATH),t=(0,Qn.join)(e,"ssh");if((0,Gc.existsSync)(t)){for(let r of(0,Gc.readdirSync)(t))if(r.includes(".key"))return`ssh -F ${(0,Qn.join)(t,"config")} -o UserKnownHostsFile=${(0,Qn.join)(t,"known_hosts")}`}}function gE(e,t,r,n,s=300*1e3){return new Promise((i,o)=>{qc.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Executing \`${t} ${r.join(" ")}\` in ${n}`);let c={...process.env},l=Xye();l&&(c.GIT_SSH_COMMAND=l);let u=(0,n4.spawn)(t,r,{shell:!0,cwd:n,env:c,stdio:["ignore","pipe","pipe"]}),d=setTimeout(()=>{u.kill(),o(new Error(`Command\`${t} ${r.join(" ")}\` timed out after ${s}ms`))},s),f="";u.stdout.on("data",p=>{f+=p.toString(),qc.default.loggerWithTag(`${e}:spawn:${t}:stdout`).debug(p.toString())});let m="";u.stderr.on("data",p=>{m+=p.toString()}),u.on("error",p=>{clearTimeout(d),m&&zf(e,t,m),o(p)}),u.on("close",p=>{clearTimeout(d),m&&zf(e,t,m),qc.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Process exited with code ${p}`),i({stdout:f,stderr:m,code:p})})})}function zf(e,t,r,n="debug"){let s=qc.default.loggerWithTag(`${e}:spawn:${t}:stderr`);for(let i of r.split(`
|
|
122
|
+
`))s[n](i)}var jf,qc,Qn,ft,n4,Gc,s4,i4,o4,a4,fR,pR=se(()=>{jf=b(St());H();qc=b(J()),Qn=require("node:path"),ft=require("node:fs/promises"),n4=require("node:child_process"),Gc=require("node:fs"),s4=require("node:stream"),i4=require("node:stream/promises"),o4=require("tar-fs"),a4=b(require("gunzip-maybe"));a(c4,"assertApplicationConfig");a(l4,"extractApplication");a(u4,"installApplication");fR=class{static{a(this,"Application")}name;payload;packageIdentifier;install;dirPath;logger;constructor({name:t,payload:r,packageIdentifier:n,install:s}){this.name=t,this.payload=r,this.packageIdentifier=n&&Qye(n),this.install=s,this.dirPath=(0,Qn.join)((0,jf.getConfigValue)(F.COMPONENTSROOT),t),this.logger=qc.default.loggerWithTag(t)}};a(Qye,"derivePackageIdentifier");a(d4,"prepareApplication");a(Jye,"installApplications");a(Xye,"getGitSSHCommand");a(gE,"nonInteractiveSpawn");a(zf,"printStderr")});var iD=v(cr=>{"use strict";var $e=require("node:path"),{isMainThread:Zye}=require("node:worker_threads"),Ue=require("fs-extra"),nD=require("fast-glob"),sD=require("normalize-path"),Jn=J2(),Qt=J(),Lt=(H(),M(W)),Tr=ae(),hR=St(),eRe=oe(),{PACKAGE_ROOT:tRe}=Rt(),{handleHDBError:Jt,hdbErrors:rRe}=_e(),Zqe=ae(),{HDB_ERROR_MSGS:hu,HTTP_STATUS_CODES:Xt}=rRe,f4=tt(),{replicateOperation:Li}=(Ss(),M(na)),{packageDirectory:nRe}=(r4(),M(t4)),eGe=$e.join(tRe,"application-template"),sRe=Tr.get(Lt.CONFIG_PARAMS.ROOTPATH),$c=$e.join(sRe,"ssh"),ba=$e.join($c,"known_hosts"),{Resources:iRe}=(ja(),M(uI)),{Application:m4,prepareApplication:p4}=(pR(),M(mR));function oRe(){Qt.trace("getting custom api status");let e={};try{e={port:Tr.get(Lt.CONFIG_PARAMS.HTTP_PORT),directory:Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Jt(new Error,hu.FUNCTION_STATUS,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,t)}return e}a(oRe,"customFunctionsStatus");function aRe(){Qt.trace("getting custom api endpoints");let e={},t=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT);try{nD.sync(sD(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:nD.sync(sD(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:nD.sync(sD(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Jt(new Error,hu.GET_FUNCTIONS,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,r)}return e}a(aRe,"getCustomFunctions");function cRe(e){e.project&&(e.project=$e.parse(e.project).name),e.file&&(e.file=$e.parse(e.file).name);let t=Jn.getDropCustomFunctionValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);Qt.trace("getting custom api endpoint file content");let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=$e.join(r,n,s,i+".js");try{return Ue.readFileSync(o,{encoding:"utf8"})}catch(c){throw Jt(new Error,hu.GET_FUNCTION,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,c)}}a(cRe,"getCustomFunction");async function lRe(e){e.project&&(e.project=$e.parse(e.project).name),e.file&&(e.file=$e.parse(e.file).name);let t=Jn.setCustomFunctionValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);Qt.trace("setting custom function file content");let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Ue.outputFileSync($e.join(r,n,s,i+".js"),o);let c=await Li(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Jt(new Error,hu.SET_FUNCTION,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,c)}}a(lRe,"setCustomFunction");async function uRe(e){e.project&&(e.project=$e.parse(e.project).name),e.file&&(e.file=$e.parse(e.file).name);let t=Jn.getDropCustomFunctionValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);Qt.trace("dropping custom function file");let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Ue.unlinkSync($e.join(r,n,s,i+".js"));let o=await Li(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw Jt(new Error,hu.DROP_FUNCTION,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,o)}}a(uRe,"dropCustomFunction");async function dRe(e){e.project&&(e.project=$e.parse(e.project).name);let t=Jn.addComponentValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);Qt.trace("adding component");let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,install:s}=e,i=e.template||"https://github.com/harperdb/application-template";try{let o=$e.join(r,n);Ue.mkdirSync(o,{recursive:!0});let c=new m4({name:n,packageIdentifier:i,install:s});await p4(c);let l=await Li(e);return l.message=`Successfully added project: ${n}`,l}catch(o){throw Jt(new Error,hu.ADD_FUNCTION,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,o)}}a(dRe,"addComponent");async function fRe(e){e.project&&(e.project=$e.parse(e.project).name);let t=Jn.dropCustomFunctionProjectValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);Qt.trace("dropping custom function project");let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Tr.get(Lt.CONFIG_PARAMS.APPS);if(!eRe.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 hR.updateConfigValue(Lt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=$e.join(r,n);Ue.rmSync(i,{recursive:!0});let o=await Li(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw Jt(new Error,hu.DROP_FUNCTION_PROJECT,Xt.INTERNAL_SERVER_ERROR,Qt.ERR,i)}}a(fRe,"dropCustomFunctionProject");async function mRe(e){e.project&&(e.project=$e.parse(e.project).name);let t=Jn.packageComponentValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Qt.trace("packaging component",n);let s;try{s=await Ue.realpath($e.join(r,n))}catch(o){if(o.code!==Lt.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Ue.realpath($e.join(Tr.get(Lt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===Lt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await nRe(s,e)).toString("base64");return{project:n,payload:i}}a(mRe,"packageComponent");async function pRe(e){e.project?e.project=$e.parse(e.project).name:e.package&&(e.project=hRe(e.package));let t=Jn.deployComponentValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);if(e.package){let l={package:e.package};(e.install_command||e.install_timeout)&&(l.install={command:e.install_command,timeout:e.install_timeout}),await hR.addConfig(e.project,l)}let r=new m4({name:e.project,payload:e.payload,packageIdentifier:e.package,install:{command:e.install_command,timeout:e.install_timeout}});if(await p4(r),Zye)return;let n=new iRe;n.isWorker=!0;let s=(uE(),M(eR)),i;if(s.setErrorReporter(l=>i=l),await s.loadComponent(r.dirPath,n),i)throw i;let o=e.restart==="rolling";e.restart=o?!1:e.restart;let c=await Li(e);if(e.restart===!0)f4.restartWorkers("http"),c.message=`Successfully deployed: ${r.name}, restarting HarperDB`;else if(o){let u=await(aD(),M(oD)).executeJob({operation:"restart_service",service:"http",replicated:!0});c.restartJobId=u.job_id,c.message=`Successfully deployed: ${r.name}, restarting HarperDB`}else c.message=`Successfully deployed: ${r.name}`;return c}a(pRe,"deployComponent");function hRe(e){if(e.startsWith("git+ssh://"))return $e.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return $e.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Ue.readFileSync($e.join(e,"package.json"),"utf8"));return $e.basename(t)}catch{}return $e.basename(e)}a(hRe,"getProjectNameFromPackage");async function ERe(){let e=hR.getConfiguration(),t=a(async(i,o)=>{try{let c=await Ue.readdir(i,{withFileTypes:!0});for(let l of c){let u=l.name;if(u.startsWith(".")||u==="node_modules")continue;let d=$e.join(i,u);if(l.isDirectory()||l.isSymbolicLink()){let f={name:u,entries:[]};o.entries.push(f),await t(d,f)}else{let f=await Ue.stat(d),m={name:$e.basename(u),mtime:f.mtime,size:f.size};o.entries.push(m)}}return o}catch(c){return Qt.warn("Error loading package",c),{error:c.toString(),entries:[]}}},"walkDir"),r=await t(Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{name:Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT).split($e.sep).slice(-1).pop(),entries:[]});for(let i of r.entries){let o=e[i.name]?.package;o&&(i.package=o)}let{internal:n}=(Bp(),M(RN)),s;try{s=await n.ComponentStatusRegistry.getAggregatedFromAllThreads(n.componentStatusRegistry)}catch(i){Qt.debug(`Failed to get component status from threads: ${i.message}`)}for(let i of r.entries)try{i.status=await n.componentStatusRegistry.getAggregatedStatusFor(i.name,s)}catch(o){Qt.debug(`Failed to get aggregated status for component ${i.name}: ${o.message}`),i.status={status:"unknown",message:"Failed to retrieve component status",lastChecked:{workers:{}}}}return r}a(ERe,"getComponents");async function _Re(e){let t=Jn.getComponentFileValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let s=await Ue.stat($e.join(r,e.project,e.file));return{message:await Ue.readFile($e.join(r,e.project,e.file),n),size:s.size,birthtime:s.birthtime,mtime:s.mtime}}catch(s){throw s.code===Lt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${$e.join(e.project,e.file)}'`):s}}a(_Re,"getComponentFile");async function gRe(e){let t=Jn.setComponentFileValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=$e.join(Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Ue.ensureFile(n),await Ue.outputFile(n,e.payload,r)):await Ue.ensureDir(n);let s=await Li(e);return s.message="Successfully set component: "+e.file,s}a(gRe,"setComponentFile");async function SRe(e){let t=Jn.dropComponentFileValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?$e.join(r,n):r,i=$e.join(Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),s),o=$e.join(Tr.get(Lt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Ue.pathExists(o)&&await Ue.unlink(o),await Ue.pathExists(i)&&await Ue.remove(i);let c=$e.join(Tr.get(Lt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Ue.pathExists(c)){let u=JSON.parse(await Ue.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Ue.writeFile(c,JSON.stringify(u,null,2),"utf8")}hR.deleteConfigFromFile([r]);let l=await Li(e);return e.restart===!0?(f4.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(SRe,"dropComponent");async function TRe(e){let t=Jn.addSSHKeyValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;Qt.trace("adding ssh key",r);let c=$e.join($c,r+".key"),l=$e.join($c,"config");if(await Ue.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Ue.outputFile(c,n),await Ue.chmod(c,"0600");let u=`#${r}
|
|
123
123
|
Host ${s}
|
|
124
124
|
HostName ${i}
|
|
125
125
|
User git
|
|
@@ -129,10 +129,10 @@ Host ${s}
|
|
|
129
129
|
`)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}o&&await Ue.appendFile(ba,o);let f=await Li(e);return f.message=`Added ssh key: ${r}${d}`,f}a(TRe,"addSSHKey");async function yRe(e){let t=Jn.updateSSHKeyValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{name:r,key:n}=e;Qt.trace("updating ssh key",r);let s=$e.join($c,r+".key");if(!await Ue.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Ue.outputFile(s,n);let i=await Li(e);return i.message=`Updated ssh key: ${r}`,i}a(yRe,"updateSSHKey");async function RRe(e){let t=Jn.deleteSSHKeyValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{name:r}=e;Qt.trace("deleting ssh key",r);let n=$e.join($c,r+".key"),s=$e.join($c,"config");if(!await Ue.pathExists(n))throw new Error("Key does not exist");let i=await Ue.readFile(s,"utf8"),o=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(o,""),await Ue.outputFile(s,i),Ue.removeSync(n);let c=await Li(e);return c.message=`Deleted ssh key: ${r}`,c}a(RRe,"deleteSSHKey");async function bRe(e){let t=[];return await Ue.pathExists($c)&&(await Ue.readdir($c)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}a(bRe,"listSSHKeys");async function ARe(e){let t=Jn.setSSHKnownHostsValidator(e);if(t)throw Jt(t,t.message,Xt.BAD_REQUEST);let{known_hosts:r}=e;await Ue.outputFile(ba,r);let n=await Li(e);return n.message="Known hosts successfully set",n}a(ARe,"setSSHKnownHosts");async function IRe(e){return await Ue.pathExists(ba)?{known_hosts:await Ue.readFile(ba,"utf8")}:{known_hosts:null}}a(IRe,"getSSHKnownHosts");cr.customFunctionsStatus=oRe;cr.getCustomFunctions=aRe;cr.getCustomFunction=cRe;cr.setCustomFunction=lRe;cr.dropCustomFunction=uRe;cr.addComponent=dRe;cr.dropCustomFunctionProject=fRe;cr.packageComponent=mRe;cr.deployComponent=pRe;cr.getComponents=ERe;cr.getComponentFile=_Re;cr.setComponentFile=gRe;cr.dropComponent=SRe;cr.addSSHKey=TRe;cr.updateSSHKey=yRe;cr.deleteSSHKey=RRe;cr.listSSHKeys=bRe;cr.setSSHKnownHosts=ARe;cr.getSSHKnownHosts=IRe});var cD=v((nGe,E4)=>{"use strict";var ei=require("joi"),h4=ot();E4.exports={readTransactionLogValidator:wRe,deleteTransactionLogsBeforeValidator:NRe};function wRe(e){let t=ei.object({schema:ei.string(),database:ei.string(),table:ei.string().required(),from:ei.date().timestamp(),to:ei.date().timestamp(),limit:ei.number().min(1)});return h4.validateBySchema(e,t)}a(wRe,"readTransactionLogValidator");function NRe(e){let t=ei.object({schema:ei.string(),database:ei.string(),table:ei.string().required(),timestamp:ei.date().timestamp().required()});return h4.validateBySchema(e,t)}a(NRe,"deleteTransactionLogsBeforeValidator")});var gR=v((iGe,R4)=>{"use strict";var lD=(H(),M(W)),SE=Ht(),_4=oe(),g4=ae(),S4=so(),T4=J(),{handleHDBError:ER,hdbErrors:CRe}=_e(),{HTTP_STATUS_CODES:_R}=CRe,{readTransactionLogValidator:ORe,deleteTransactionLogsBeforeValidator:PRe}=cD(),y4=fs(),LRe="Logs successfully deleted from transaction log.",DRe="All logs successfully deleted from transaction log.";R4.exports={readTransactionLog:MRe,deleteTransactionLogsBefore:URe};async function MRe(e){let t=ORe(e);if(t)throw ER(t,t.message,_R.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=_4.checkSchemaTableExist(e.database,e.table);if(r)throw ER(new Error,r,_R.NOT_FOUND,void 0,void 0,!0);return g4.get(lD.CONFIG_PARAMS.CLUSTERING_ENABLED)?await vRe(e):(T4.info("Reading HarperDB logs used by Plexus"),(e.from||e.to)&&(e.search_type="timestamp",e.search_values=[e.from??0],e.to&&(e.search_values[1]=e.to)),y4.readAuditLog(e))}a(MRe,"readTransactionLog");async function*vRe(e){let t=S4.createNatsTableStreamName(e.database,e.table),r=await SE.viewStreamIterator(t,parseInt(e.from),e.limit);for await(let n of r){let s=Math.floor(n?.nats_timestamp/1e6);if(e.to&&s>e.to)break;let i={operation:n?.entry?.operation,user:n?.entry?.__origin?.user,timestamp:s,records:n?.entry?.records,attributes:n?.entry?.attributes};n?.entry?.operation===lD.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}a(vRe,"readTransactionLogNats");async function URe(e){let t=PRe(e);if(t)throw ER(t,t.message,_R.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!g4.get(lD.CONFIG_PARAMS.CLUSTERING_ENABLED))return T4.info("Delete transaction logs called for Plexus"),y4.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=_4.checkSchemaTableExist(r,n);if(i)throw ER(new Error,i,_R.NOT_FOUND,void 0,void 0,!0);let o=S4.createNatsTableStreamName(r,n),{jsm:c}=await SE.getNATSReferences(),l=await SE.getStreamInfo(o),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=LRe,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=DRe):f=(await SE.viewStream(o,parseInt(s),1))[0].nats_sequence,await SE.purgeTableStream(r,n,{seq:f}),d}a(URe,"deleteTransactionLogsBefore")});var uD=v((aGe,A4)=>{"use strict";var SR=require("joi"),xRe=require("path"),{handleHDBError:BRe,hdbErrors:FRe}=_e(),{HTTP_STATUS_CODES:kRe}=FRe,HRe=ot(),b4=J();A4.exports={installModules:VRe};var{CONFIG_PARAMS:qRe}=(H(),M(W)),{getConfigValue:GRe}=St(),{nonInteractiveSpawn:$Re}=(pR(),M(mR));async function VRe(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";b4.warn(t,e.projects);let r=YRe(e);if(r)throw BRe(r,r.message,kRe.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=GRe(qRe.COMPONENTSROOT),o={},c=["install","--force","--omit=dev","--json"];s&&c.push("--dry-run");for(let l of n){o[l]={npm_output:null,npm_error:null};let u=xRe.join(i,l);try{let{stdout:d,stderr:f}=$Re(l,"npm",c,u);d=d?d.replace(`
|
|
130
130
|
`,""):null,f=f?f.replace(`
|
|
131
131
|
`,""):null;try{o[l].npm_output=JSON.parse(d)}catch{o[l].npm_output=d}try{o[l].npm_error=JSON.parse(f)}catch{o[l].npm_error=f}}catch(d){d.stderr?o[l].npm_error=KRe(d.stderr):o[l].npm_error=d.message;continue}}return b4.info(`finished installModules with response ${o}`),o.warning=t,o}a(VRe,"installModules");function KRe(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
|
|
132
|
-
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(KRe,"parseNPMStdErr");function YRe(e){let t=SR.object({projects:SR.array().min(1).items(SR.string()).required(),dry_run:SR.boolean().default(!1)});return HRe.validateBySchema(e,t)}a(YRe,"modulesValidator")});var pD={};ye(pD,{describeMetric:()=>P4,describeMetricOp:()=>mD,get:()=>C4,getOp:()=>dD,listMetrics:()=>O4,listMetricsOp:()=>fD});async function zRe(e){return(await ag().get(e)).hostname}function I4(e,t){return e.length===0||e.includes(t)}function dD(e){return TE.trace?.("get_analytics request:",e),C4(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function N4(e){return"conditions"in e?{...e,conditions:e.conditions.map(N4)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function C4(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(N4));let o=t??[];I4(o,"id")||o.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i,allowConditionsOnDynamicAttributes:!0};return o.length>0&&(c.select=o),TE.trace?.("get_analytics hdb_analytics.search request:",JSON.stringify(c)),(await databases.system.hdb_analytics.search(c)).map(async u=>{let d=u.id[1];return u.id=u.id[0],I4(o,"node")&&(TE.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await zRe(d)),TE.trace?.("get_analytics result:",JSON.stringify(u)),u})}function fD(e){return O4(e.metric_types)}async function O4(e=["builtin"]){let t=[],r=Object.values(Go);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,o=await databases.system.hdb_analytics.search(s);for await(let c of o)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function mD(e){return P4(e.metric)}async function P4(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let o in s)n.push({name:o,type:typeof s[o]});let i={attributes:n};return TE.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var w4,WRe,TE,hD=ne(()=>{w4=b(J());qA();GA();({forComponent:WRe}=w4.default),TE=WRe("analytics").conditional;a(zRe,"lookupHostname");a(I4,"isSelected");a(dD,"getOp");a(N4,"conformCondition");a(C4,"get");a(fD,"listMetricsOp");a(O4,"listMetrics");a(mD,"describeMetricOp");a(P4,"describeMetric")});var TR,yR,yE,RR=ne(()=>{TR={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},yR=Object.keys(TR),yE="primary"});function D4(e){return L4.validateBySchema(e,XRe)}var RE,L4,jRe,QRe,JRe,XRe,M4=ne(()=>{RE=b(require("joi")),L4=b(ot());RR();jRe=yR,QRe=Object.entries(TR).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),JRe=a(()=>{let e=RE.default.string().min(1).max(512);return Object.entries(TR).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:RE.default.string().valid(...r.allowedValues).messages({"any.only":QRe[t]})}))}),e.required()},"createStatusValidationSchema"),XRe=RE.default.object({id:RE.default.string().valid(...jRe).required(),status:JRe()});a(D4,"validateStatus")});function v4(){ED||(ED=Aa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),_D=new Uint8Array(ED))}function U4(){v4(),_D[0]=1}function x4(){return v4(),_D[0]===1}var ED,_D,gD=ne(()=>{bE();a(v4,"ensureInitialized");a(U4,"requestRestart");a(x4,"restartNeeded")});var bD={};ye(bD,{DEFAULT_STATUS_ID:()=>yE,STATUS_IDS:()=>yR,Status:()=>Aa,clear:()=>TD,get:()=>yD,set:()=>RD});function IE(){return SD||(SD=Xe({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),SD}function TD({id:e}){return AE.debug?.("clearStatus",e),IE().delete(e)}async function ebe(){AE.debug?.("getAllStatus");let e=IE().get({}),t=await xp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=x4();return{systemStatus:e,componentStatus:r,restartRequired:n}}function yD({id:e}){return e?(AE.debug?.("getStatus",e),IE().get(e)):(AE.debug?.("getStatus","all"),ebe())}function RD({status:e,id:t=yE}){let r=D4({status:e,id:t});if(r)throw(0,bR.handleHDBError)(r,r.message,ZRe.BAD_REQUEST);return AE.debug?.("setStatus",t,e),IE().put(t,{status:e})}var bR,B4,ZRe,SD,Aa,AE,bE=ne(()=>{we();bR=b(_e()),B4=b(wr());M4();RR();Bp();gD();RR();({HTTP_STATUS_CODES:ZRe}=bR.hdbErrors);a(IE,"getStatusTable");Aa={get primaryStore(){return IE().primaryStore}},AE=(0,B4.loggerWithTag)("status");a(TD,"clearStatus");a(ebe,"getAllStatus");a(yD,"getStatus");a(RD,"setStatus")});var ND={};ye(ND,{getFingerprint:()=>ID,getRegistrationInfo:()=>AD,setLicense:()=>wD});function AD(){return{version:F4.packageJson.version,deprecated:!0}}function ID(){return{message:"this-is-deprecated",deprecated:!0}}function wD(){return{deprecated:!0}}var F4,CD=ne(()=>{F4=b(Rt());a(AD,"getRegistrationInfo");a(ID,"getFingerprint");a(wD,"setLicense")});var H4=v((NGe,k4)=>{"use strict";var wE=require("alasql"),Eu=require("recursive-iterator"),Di=J(),tbe=oe(),NE=(H(),M(W)),OD=class{static{a(this,"sqlStatementBucket")}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,nbe(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=>NE.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=>!NE.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][NE.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=rbe(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(o).filter(u=>!NE.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new wE.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function rbe(e){return e.filter(t=>t[NE.PERMS_CRUD_ENUM.READ])}a(rbe,"filterReadRestrictedAttrs");function nbe(e,t,r,n,s){sbe(e,t,r,n,s)}a(nbe,"interpretAST");function CE(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(CE,"addSchemaTableToMap");function sbe(e,t,r,n,s){if(!e){Di.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof wE.yy.Insert?cbe(e,t,r):e instanceof wE.yy.Select?ibe(e,t,r,n,s):e instanceof wE.yy.Update?obe(e,t,r):e instanceof wE.yy.Delete?abe(e,t,r):Di.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(sbe,"getRecordAttributesAST");function ibe(e,t,r,n,s){if(!e){Di.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(tbe.isEmptyOrZeroLength(i)){Di.error("No schema specified");return}e.from.forEach(c=>{CE(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),CE(c.table,t,r,n,s)});let o=new Eu(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{Di.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new Eu(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let d=u.tableid?u.tableid:l;if(!t.get(i).has(d))if(r.has(d))d=r.get(d);else{Di.info(`table specified as ${d} not found.`);continue}t.get(i).get(d).indexOf(u.columnid)<0&&t.get(i).get(d).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Eu(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,f=s.get(d);if(!t.get(f).has(d))if(r.has(d))d=r.get(d);else{Di.info(`table specified as ${d} not found.`);continue}t.get(f).get(d).indexOf(u.columnid)<0&&t.get(f).get(d).push(u.columnid)}}),e.order){let c=new Eu(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,d=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(d).has(u))if(r.has(u))u=r.get(u);else{Di.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}a(ibe,"getSelectAttributes");function obe(e,t,r){if(!e){Di.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Eu(e.columns),s=e.table.databaseid;CE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&PD(e.table.tableid,s,i.columnid,t,r)}a(obe,"getUpdateAttributes");function abe(e,t,r){if(!e){Di.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Eu(e.where),s=e.table.databaseid;CE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&PD(e.table.tableid,s,i.columnid,t,r)}a(abe,"getDeleteAttributes");function cbe(e,t,r){if(!e){Di.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Eu(e.columns),s=e.into.databaseid;CE(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&PD(e.into.tableid,s,i.columnid,t,r)}a(cbe,"getInsertAttributes");function PD(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(PD,"pushAttribute");k4.exports=OD});var NR=v((OGe,nQ)=>{"use strict";var LD=_n(),AR=Sn(),Os=Mh(),LE=dc(),DD=rc(),lbe=FO(),ube=eY(),DE=Es(),IR=eh(),Mr=J(),dbe=$O(),fbe=cy(),mbe=EP(),pbe=uy(),hbe=SP(),Ebe=TP(),_be=bP(),gbe=IP(),MD=hy(),Ia=oe(),$4=Wf(),Pn=(H(),M(W)),V4=U2(),Sbe=Bh(),K4=(Vd(),M(ah)),Y4=(uR(),M(EE)),W4=St(),yr=iD(),z4=gR(),Tbe=uD(),Qf=ys(),j4=(Tf(),M(Sf)),vD=(hD(),M(pD)),UD=(bE(),M(bD)),Q4=(iE(),M(Vy)),xD=(CD(),M(ND)),J4=IC(),{handleHDBError:Xn,hdbErrors:X4}=_e(),{HDB_ERROR_MSGS:fn,HTTP_STATUS_CODES:OE}=X4,Z=new Map,Z4="delete",Vc="insert",ti="read",_u="update",PE="describe",q4=LE.describeSchema.name,G4=LE.describeTable.name,eQ={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},ybe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},Rbe="catchup",bbe="handleGetJob",Abe="handleGetJobsByStartDate",wR={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Ibe=[Os.createTable.name,Os.createAttribute.name,Os.dropTable.name,Os.dropAttribute.name],tQ={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},re=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};Z.set(LD.insert.name,new re(!1,[Vc]));Z.set(LD.update.name,new re(!1,[_u]));Z.set(LD.upsert.name,new re(!1,[Vc,_u]));Z.set(AR.searchByConditions.name,new re(!1,[ti]));Z.set(AR.searchByHash.name,new re(!1,[ti]));Z.set(AR.searchByValue.name,new re(!1,[ti]));Z.set(AR.search.name,new re(!1,[ti]));Z.set(Os.createSchema.name,new re(!0,[]));Z.set(Os.createTable.name,new re(!0,[]));Z.set(Os.createAttribute.name,new re(!1,[Vc]));Z.set(Os.dropSchema.name,new re(!0,[]));Z.set(Os.dropTable.name,new re(!0,[]));Z.set(Os.dropAttribute.name,new re(!0,[]));Z.set(LE.describeSchema.name,new re(!1,[ti]));Z.set(LE.describeTable.name,new re(!1,[ti]));Z.set(DD.deleteRecord.name,new re(!1,[Z4]));Z.set(DE.addUser.name,new re(!0,[]));Z.set(DE.alterUser.name,new re(!0,[]));Z.set(DE.dropUser.name,new re(!0,[]));Z.set(DE.listUsersExternal.name,new re(!0,[]));Z.set(IR.listRoles.name,new re(!0,[]));Z.set(IR.addRole.name,new re(!0,[]));Z.set(IR.alterRole.name,new re(!0,[]));Z.set(IR.dropRole.name,new re(!0,[]));Z.set(dbe.name,new re(!0,[]));Z.set(fbe.name,new re(!0,[]));Z.set(mbe.name,new re(!0,[]));Z.set(pbe.name,new re(!0,[]));Z.set(hbe.name,new re(!0,[]));Z.set(Ebe.name,new re(!0,[]));Z.set(MD.setRoutes.name,new re(!0,[]));Z.set(MD.getRoutes.name,new re(!0,[]));Z.set(MD.deleteRoutes.name,new re(!0,[]));Z.set(W4.setConfiguration.name,new re(!0,[]));Z.set(_be.clusterStatus.name,new re(!0,[]));Z.set(gbe.name,new re(!0,[]));Z.set(DD.deleteFilesBefore.name,new re(!0,[]));Z.set(DD.deleteAuditLogsBefore.name,new re(!0,[]));Z.set($4.restart.name,new re(!0,[]));Z.set($4.restartService.name,new re(!0,[]));Z.set(lbe.name,new re(!0,[]));Z.set(ube.name,new re(!0,[ti]));Z.set(Os.cleanupOrphanBlobs.name,new re(!0,[]));Z.set(Sbe.systemInformation.name,new re(!0,[]));Z.set(W4.getConfiguration.name,new re(!0,[]));Z.set(z4.readTransactionLog.name,new re(!0,[]));Z.set(z4.deleteTransactionLogsBefore.name,new re(!0,[]));Z.set(Tbe.installModules.name,new re(!0,[]));Z.set(Qf.createCsr.name,new re(!0,[]));Z.set(Qf.signCertificate.name,new re(!0,[]));Z.set(Qf.listCertificates.name,new re(!0,[]));Z.set(Qf.addCertificate.name,new re(!0,[]));Z.set(Qf.removeCertificate.name,new re(!0,[]));Z.set(Qf.getKey.name,new re(!0,[]));Z.set(j4.addNodeBack.name,new re(!0,[]));Z.set(j4.removeNodeBack.name,new re(!0,[]));Z.set(vD.getOp.name,new re(!1,[ti]));Z.set(vD.listMetricsOp.name,new re(!1,[ti]));Z.set(vD.describeMetricOp.name,new re(!1,[ti]));Z.set(UD.clear.name,new re(!0,[]));Z.set(UD.get.name,new re(!0,[]));Z.set(UD.set.name,new re(!0,[]));Z.set(Q4.installUsageLicenseOp.name,new re(!0,[]));Z.set(Q4.getUsageLicensesOp.name,new re(!0,[]));Z.set(xD.getFingerprint.name,new re(!0,[]));Z.set(xD.setLicense.name,new re(!0,[]));Z.set(K4.createTokens.name,new re(!1,[]));Z.set(K4.refreshOperationToken.name,new re(!1,[]));Z.set(Y4.login.name,new re(!1,[]));Z.set(Y4.logout.name,new re(!1,[]));Z.set(yr.customFunctionsStatus.name,new re(!0,[]));Z.set(yr.getCustomFunctions.name,new re(!0,[]));Z.set(yr.getComponents.name,new re(!0,[]));Z.set(yr.getComponentFile.name,new re(!0,[]));Z.set(yr.setComponentFile.name,new re(!0,[]));Z.set(yr.dropComponent.name,new re(!0,[]));Z.set(yr.getCustomFunction.name,new re(!0,[]));Z.set(yr.setCustomFunction.name,new re(!0,[]));Z.set(yr.dropCustomFunction.name,new re(!0,[]));Z.set(yr.addComponent.name,new re(!0,[]));Z.set(yr.dropCustomFunctionProject.name,new re(!0,[]));Z.set(yr.packageComponent.name,new re(!0,[]));Z.set(yr.deployComponent.name,new re(!0,[]));Z.set(yr.addSSHKey.name,new re(!0,[]));Z.set(yr.updateSSHKey.name,new re(!0,[]));Z.set(yr.deleteSSHKey.name,new re(!0,[]));Z.set(yr.listSSHKeys.name,new re(!0,[]));Z.set(yr.setSSHKnownHosts.name,new re(!0,[]));Z.set(yr.getSSHKnownHosts.name,new re(!0,[]));Z.set(xD.getRegistrationInfo.name,new re(!1,[]));Z.set(DE.userInfo.name,new re(!1,[]));Z.set(LE.describeAll.name,new re(!1,[]));Z.set(bbe,new re(!1,[]));Z.set(Abe,new re(!0,[]));Z.set(Rbe,new re(!0,[]));Z.set(wR.CSV_DATA_LOAD,new re(!1,[Vc,_u]));Z.set(wR.CSV_URL_LOAD,new re(!1,[Vc,_u]));Z.set(wR.CSV_FILE_LOAD,new re(!1,[Vc,_u]));Z.set(wR.IMPORT_FROM_S3,new re(!1,[Vc,_u]));Z.set(tQ.EXPORT_TO_S3,new re(!0,[]));Z.set(tQ.EXPORT_LOCAL,new re(!0,[]));Z.set(Pn.VALID_SQL_OPS_ENUM.DELETE,new re(!1,[Z4]));Z.set(Pn.VALID_SQL_OPS_ENUM.SELECT,new re(!1,[ti]));Z.set(Pn.VALID_SQL_OPS_ENUM.INSERT,new re(!1,[Vc]));Z.set(Pn.VALID_SQL_OPS_ENUM.UPDATE,new re(!1,[_u]));nQ.exports={verifyPerms:Nbe,verifyPermsAst:wbe,verifyBulkLoadAttributePerms:Obe};function wbe(e,t,r){if(Ia.isEmptyOrZeroLength(e))throw Mr.info("verify_perms_ast has an empty user parameter"),Xn(new Error);if(Ia.isEmptyOrZeroLength(t))throw Mr.info("verify_perms_ast has an empty user parameter"),Xn(new Error);if(Ia.isEmptyOrZeroLength(r))throw Mr.info("verify_perms_ast has a null operation parameter"),Xn(new Error);try{let n=H4(),s=require("alasql"),i=new J4,o=new n(e),c=o.getSchemas(),l=new Map;if((!c||c.length===0)&&o.affected_attributes&&o.affected_attributes.size>0)throw Mr.info("No schemas defined in verifyPermsAst(), will not continue."),Xn(new Error);let u=!!t.role.permission.super_user,d=c.includes("system");if(d&&eQ[r])throw Xn(new Error,fn.DROP_SYSTEM,OE.FORBIDDEN);if(u&&!d)return null;let f=V4.getRolePermissions(t.role);t.role.permission=f,!u&&e instanceof s.yy.Select&&(e=o.updateAttributeWildcardsForRolePerms(f));for(let p=0;p<c.length;p++){let h=o.getTablesBySchemaName(c[p]);h&&l.set(c[p],h)}let m=rQ(t,r,l,i);return m||(l.forEach((p,h)=>{for(let E=0;E<p.length;E++){let g=o.getAttributesBySchemaTableName(h,p[E]),R=FD(t.role.permission,h,p[E]);BD(g,R,r,p[E],h,i)}}),i.getPermsResponse())}catch(n){throw Xn(n)}}a(wbe,"verifyPermsAst");function Nbe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Mr.info("null required parameter in verifyPerms"),Xn(new Error,fn.DEFAULT_INVALID_REQUEST,OE.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 J4;if(Ia.isEmptyOrZeroLength(e.hdb_user?.role)||Ia.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Mr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(fn.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=o.has(Pn.SYSTEM_SCHEMA_NAME)||s===Pn.SYSTEM_SCHEMA_NAME;if(l&&d&&ybe[e.operation]&&(i===Pn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Pn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Pn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&eQ[r])throw Xn(new Error,fn.DROP_SYSTEM,OE.FORBIDDEN);if(l&&!d||u===!0&&(r===Os.createSchema.name||r===Os.dropSchema.name))return null;if(Ibe.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let f=V4.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===q4||r===G4)&&!f.super_user){if(s===Pn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(fn.SCHEMA_PERM_ERROR(s));if(r===q4&&(!f[s]||!f[s][PE]))return c.handleInvalidItem(fn.SCHEMA_NOT_FOUND(s));if(r===G4&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][PE]))return c.handleInvalidItem(fn.TABLE_NOT_FOUND(s,i))}let m=rQ(e.hdb_user,r,o,c,n);if(m)return m;if(Z.get(r)&&Z.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Pn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],g=f[s].tables[i];g[Pn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(S=>S[Pn.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=E)}let p=Cbe(e),h=FD(e.hdb_user?.role?.permission,s,i);return BD(p,h,r,i,s,c,n),c.getPermsResponse()}a(Nbe,"verifyPerms");function rQ(e,t,r,n,s){if(Ia.arrayHasEmptyValues([e,t,r]))throw Mr.info("hasPermissions has an invalid parameter"),Xn(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||Z.get(t).requires_su))return null;if(!Z.get(t))throw Mr.info(`operation ${t} not found.`),Xn(new Error,fn.OP_NOT_FOUND(t),OE.BAD_REQUEST);if(Z.get(t)&&Z.get(t).requires_su)return Mr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(fn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][PE]===!1){n.addInvalidItem(fn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(fn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=o[l].tables[d];if(!f||f[PE]===!1)n.addInvalidItem(fn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=Z.get(t).perms;!Ia.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],g=f[E];(g==null||g===!1)&&(Mr.info(`Required ${E} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(E))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let p=fn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Mr.error(p),Mr.error(m),Xn(X4.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}a(rQ,"hasPermissions");function BD(e,t,r,n,s,i,o){if(!e||!t)throw Mr.info("no attributes specified in checkAttributePerms."),Xn(new Error);let c=Z.get(r).perms;if(!c||c==="")throw Mr.info(`no permissions found for ${r} in checkAttributePerms().`),Xn(new Error);if(Ia.isEmptyOrZeroLength(t))return Mr.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[PE]===!1){i.addInvalidItem(fn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(Pn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==ti)throw Xn(new Error,fn.SYSTEM_TIMESTAMP_PERMS_ERR,OE.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(fn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(BD,"checkAttributePerms");function Cbe(e){let t=new Set;try{if(e.action)return t;if(e.operation===Pn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{let n=r.attribute;r.search_attribute!==void 0&&(n=r.search_attribute),t.add(n)}),e&&(e.attribute||e.search_attribute)){let r=e.attribute;e.search_attribute!==void 0&&(r=e.search_attribute),t.add(r)}if(!e.records||e.records.length===0){if(!e.get_attributes||e.get_attributes.length===0)return t;for(let r of e.get_attributes)t.add(r)}else for(let r of e.records){let n=Object.keys(r);for(let s of n)t.add(s)}}catch(r){Mr.info(r)}return t}a(Cbe,"getRecordAttributes");function FD(e,t,r){let n=new Map;if(Ia.isEmpty(e))return Mr.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{Mr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(FD,"getAttributePermissions");function Obe(e,t,r,n,s,i,o){let c=new Set(i),l=FD(e,n,s);BD(c,l,t,s,n,o,r)}a(Obe,"verifyBulkLoadAttributePerms")});var HD=v((LGe,sQ)=>{"use strict";var kD=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};sQ.exports=kD});var YD=v((BGe,yQ)=>{"use strict";var CR=_n(),PR=_C(),Pbe=require("needle"),Mi=(H(),M(W)),MGe=pt(),Jf=oe(),{handleHDBError:Zt,hdbErrors:mQ}=_e(),{HTTP_STATUS_CODES:mn,HDB_ERROR_MSGS:vr,CHECK_LOGS_WRAPPER:Su}=mQ,Xf=J(),qD=require("papaparse");Jf.promisifyPapaParse();var vi=require("fs-extra"),Lbe=require("path"),{chain:iQ}=require("stream-chain"),oQ=require("stream-json/streamers/StreamArray"),aQ=require("stream-json/utils/Batch"),cQ=require("stream-chain/utils/comp"),{finished:lQ}=require("stream"),Dbe=ae(),pQ=gC(),Mbe=SC(),{BulkLoadFileObject:$D,BulkLoadDataObject:vbe}=Z$(),VD=IC(),{verifyBulkLoadAttributePerms:hQ}=NR(),vGe=HD(),UGe=Ht(),xGe=so(),{databases:Ube}=(we(),M(mt)),{coerceType:xbe}=(bg(),M(bG)),uQ="No records parsed from csv file.",gu=`${Dbe.get("HDB_ROOT")}/tmp`,{schemaRegex:Bbe}=Xi(),dQ=1024*1024*2,fQ=5e3,Fbe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};yQ.exports={csvDataLoad:kbe,csvURLLoad:Hbe,csvFileLoad:qbe,importFromS3:Gbe};async function kbe(e,t){let r=PR.dataObject(e);if(r)throw Zt(r,r.message,mn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=gQ(e.schema,e.table),i=qD.parse(e.data,{header:!0,skipEmptyLines:!0,transform:GD.bind(null,s),dynamicTyping:!1}),o=new VD;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&hQ(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 Zt(new Error,c,mn.BAD_REQUEST,void 0,void 0,!0);let l=new vbe(e.action,e.schema,e.table,i.data);return n=await pQ.callOperationFunctionAsAwait(SQ,l,null),n.message===uQ?uQ:TQ(n.records,n.number_written)}catch(s){throw Tu(s)}}a(kbe,"csvDataLoad");async function Hbe(e){let t=PR.urlObject(e);if(t)throw Zt(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${gu}/${r}`;try{await $be(e,r)}catch(s){throw Xf.error(vr.DOWNLOAD_FILE_ERR(r)+" - "+s),Zt(s,Su(vr.DOWNLOAD_FILE_ERR(r)))}try{let s=new $D(this.job_operation_function.name,e.action,e.schema,e.table,n,Mi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await KD(s);return await OR(n),i}catch(s){throw await OR(n),Tu(s)}}a(Hbe,"csvURLLoad");async function qbe(e){let t=PR.fileObject(e);if(t)throw Zt(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r=new $D(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Mi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await KD(r)}catch(n){throw Tu(n)}}a(qbe,"csvFileLoad");async function Gbe(e){let t=PR.s3FileObject(e);if(t)throw Zt(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Lbe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${gu}/${s}`;let i=new $D(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await Vbe(s,e);let o=await KD(i);return await OR(r),o}catch(n){throw await OR(r),Tu(n)}}a(Gbe,"importFromS3");async function $be(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Pbe("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 Zt(n,s,n.statusCode,Mi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Ybe(r,e.csv_url),await Kbe(t,r.raw)}a($be,"downloadCSVFile");async function Vbe(e,t){try{let r=`${gu}/${e}`;await vi.mkdirp(gu),await vi.writeFile(`${gu}/${e}`,"",{flag:"a+"});let n=await vi.createWriteStream(r),s=await Mbe.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(){Xf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Xf.error(vr.S3_DOWNLOAD_ERR+" - "+r),Zt(r,Su(vr.S3_DOWNLOAD_ERR))}}a(Vbe,"downloadFileFromS3");async function Kbe(e,t){try{await vi.mkdirp(gu),await vi.writeFile(`${gu}/${e}`,t)}catch(r){throw Xf.error(vr.WRITE_TEMP_FILE_ERR),Zt(r,Su(vr.DEFAULT_BULK_LOAD_ERR))}}a(Kbe,"writeFileToTempFolder");async function OR(e){if(e)try{await vi.access(e),await vi.unlink(e)}catch{Xf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(OR,"deleteTempFile");function Ybe(e,t){if(e.statusCode!==mQ.HTTP_STATUS_CODES.OK)throw Zt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,mn.BAD_REQUEST);if(!Fbe[e.headers["content-type"]])throw Zt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,mn.BAD_REQUEST);if(!e.raw)throw Zt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,mn.BAD_REQUEST)}a(Ybe,"validateURLResponse");async function KD(e){try{let t;switch(e.file_type){case Mi.VALID_S3_FILE_TYPES.CSV:t=await Wbe(e);break;case Mi.VALID_S3_FILE_TYPES.JSON:t=await zbe(e);break;default:throw Zt(new Error,vr.DEFAULT_BULK_LOAD_ERR,mn.BAD_REQUEST,Mi.LOG_LEVELS.ERROR,vr.INVALID_FILE_EXT_ERR(e))}return TQ(t.records,t.number_written)}catch(t){throw Tu(t)}}a(KD,"fileLoad");async function EQ(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 CR.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&hQ(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Zt(c);r(l)}}a(EQ,"validateChunk");async function _Q(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Jf.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Jf.isEmpty(c)&&!Jf.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await pQ.callOperationFunctionAsAwait(SQ,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Zt(c,Su(vr.INSERT_CSV_ERR),mn.INTERNAL_SERVER_ERROR,Mi.LOG_LEVELS.ERROR,vr.INSERT_CSV_ERR+" - "+c);r(l)}}a(_Q,"insertChunk");async function Wbe(e){let t={records:0,number_written:0},r=gQ(e.schema,e.table);try{let n=new VD,s=vi.createReadStream(e.file_path,{highWaterMark:dQ});s.setEncoding("utf8"),await qD.parsePromise(s,EQ.bind(null,e,n),GD.bind(null,r));let i=n.getPermsResponse();if(i)throw Zt(new Error,i,mn.BAD_REQUEST);return s=vi.createReadStream(e.file_path,{highWaterMark:dQ}),s.setEncoding("utf8"),await qD.parsePromise(s,_Q.bind(null,e,t),GD.bind(null,r)),s.destroy(),t}catch(n){throw Zt(n,Su(vr.PAPA_PARSE_ERR),mn.INTERNAL_SERVER_ERROR,Mi.LOG_LEVELS.ERROR,vr.PAPA_PARSE_ERR+n)}}a(Wbe,"callPapaParse");function gQ(e,t){let r=Ube[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>xbe(i,s));return n}a(gQ,"createTransformMap");function GD(e,t,r){let n=e.get(r);return n?n(t):Jf.autoCast(t)}a(GD,"typeFunction");async function zbe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new VD,s=iQ([vi.createReadStream(e.file_path,{encoding:"utf-8"}),oQ.withParser(),c=>c.value,new aQ({batchSize:fQ}),cQ(async c=>{await EQ(e,n,r,c)})]);await new Promise((c,l)=>{lQ(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Zt(new Error,i,mn.BAD_REQUEST);let o=iQ([vi.createReadStream(e.file_path,{encoding:"utf-8"}),oQ.withParser(),c=>c.value,new aQ({batchSize:fQ}),cQ(async c=>{await _Q(e,t,r,c)})]);return await new Promise((c,l)=>{lQ(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw Zt(n,Su(vr.INSERT_JSON_ERR),mn.INTERNAL_SERVER_ERROR,Mi.LOG_LEVELS.ERROR,vr.INSERT_JSON_ERR+n)}}a(zbe,"insertJson");async function SQ(e){let t={};try{e.data&&e.data.length>0&&jbe(e.data[0])?t=await Qbe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Xf.info(t.message))}catch(r){throw Tu(r)}return t}a(SQ,"callBulkFileLoad");function jbe(e){let t=Object.keys(e);for(let r of t)if(!Bbe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(jbe,"validateColumnNames");async function Qbe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=CR.insert;break;case"update":i=CR.update;break;case"upsert":i=CR.upsert;break;default:throw Zt(new Error,vr.INVALID_ACTION_PARAM_ERR(n),mn.BAD_REQUEST,Mi.LOG_LEVELS.ERROR,vr.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 d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)o.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=Jf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Tu(o)}}a(Qbe,"bulkFileLoad");function TQ(e,t){return`successfully loaded ${t} of ${e} records`}a(TQ,"buildResponseMsg");function Tu(e){return Zt(e,Su(vr.DEFAULT_BULK_LOAD_ERR),mn.INTERNAL_SERVER_ERROR,Mi.LOG_LEVELS.ERROR,vr.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Tu,"buildTopLevelErrMsg")});var IQ=v((HGe,AQ)=>{"use strict";var Jbe=Sn(),Xbe=Ei(),RQ=J(),Zbe=_n(),kGe=oT(),eAe=require("clone"),zD=require("alasql"),tAe=tS(),bQ=require("util"),rAe=bQ.promisify(Xbe.getTableSchema),nAe=bQ.promisify(Jbe.search),sAe=(H(),M(W)),WD=oe();tAe(zD);AQ.exports={update:oAe};var iAe="There was a problem performing this update. Please check the logs and try again.";async function oAe({statement:e,hdb_user:t}){let r=await rAe(e.table.databaseid,e.table.tableid),n=aAe(e.columns);WD.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=eAe(s),c=WD.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=zD.parse(l).statements[0],d=await nAe(u),f=cAe(n,d);return lAe(o,f,t)}a(oAe,"update");function aAe(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=zD.compile(`SELECT ${r.expression.toString()} AS [${sAe.FUNC_VAL}] FROM ?`)}),t}catch(t){throw RQ.error(t),new Error(iAe)}}a(aAe,"createUpdateRecord");function cAe(e,t){return WD.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(cAe,"buildUpdateRecords");async function lAe(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Zbe.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){RQ.error(`Error delete new_attributes from update response: ${i}`)}return s}a(lAe,"updateRecords")});var NQ=v((VGe,wQ)=>{var uAe=require("alasql"),dAe=Sn(),fAe=J(),mAe=fs(),QD=require("util"),jD=oe(),pAe=(H(),M(W)),hAe=Ei(),GGe=oT(),$Ge=_n(),EAe="record",_Ae="successfully deleted",gAe=QD.callbackify(RAe),SAe=QD.promisify(dAe.search),TAe=QD.promisify(hAe.getTableSchema);wQ.exports={convertDelete:gAe};function yAe(e){return`${e.deleted_hashes.length} ${EAe}${e.deleted_hashes.length===1?"":"s"} ${_Ae}`}a(yAe,"generateReturnMessage");async function RAe({statement:e,hdb_user:t}){let r=await TAe(e.table.databaseid,e.table.tableid);jD.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=jD.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=uAe.parse(o).statements[0],l={operation:pAe.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await SAe(c);let u=await mAe.deleteRecords(l);return jD.isEmptyOrZeroLength(u.message)&&(u.message=yAe(u)),delete u.txn_time,u}catch(u){throw fAe.error(u),u.hdb_code?u.message:u}}a(RAe,"convertDelete")});var vE=v((YGe,DQ)=>{"use strict";DQ.exports={evaluateSQL:UAe,processAST:LQ,convertSQLToAST:PQ,checkASTPermissions:OQ};var bAe=_n(),CQ=require("util"),AAe=CQ.callbackify(bAe.insert),IAe=Sn().search,wAe=IQ().update,NAe=CQ.callbackify(wAe),CAe=NQ().convertDelete,Kc=require("alasql"),OAe=NR(),LR=J(),PAe=tS(),LAe=oe(),ME=(H(),M(W)),{hdbErrors:DAe,handleHDBError:JD}=_e(),{HTTP_STATUS_CODES:XD}=DAe;PAe(Kc);var MAe=403,vAe="There was a problem performing this insert. Please check the logs and try again.",ZD=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function UAe(e,t){let r=e.parsed_sql_object;if(!r){r=PQ(e.sql);let n,s=r.ast.statements[0];if(s instanceof Kc.yy.Insert?n=s.into.databaseid:s instanceof Kc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Kc.yy.Update||s instanceof Kc.yy.Delete?n=s.table.databaseid:LR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Kc.yy.Select)&&LAe.isEmptyOrZeroLength(n))return t("No schema specified",null)}LQ(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(UAe,"evaluateSQL");function OQ(e,t){let r;try{r=OAe.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(OQ,"checkASTPermissions");function PQ(e){let t=new ZD;if(!e)throw JD(new Error,"The 'sql' parameter is missing from the request body",XD.BAD_REQUEST);try{let r=e.trim(),n=Kc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
133
|
-
`);throw n[1]?JD(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,XD.BAD_REQUEST):JD(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",XD.BAD_REQUEST)}return t}a(PQ,"convertSQLToAST");function LQ(e,t,r){try{let n=xAe;if(!e.bypass_auth&&!t.permissions_checked){let i=OQ(e,t);if(i&&i.length>0)return r(MAe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case ME.VALID_SQL_OPS_ENUM.SELECT:n=IAe,s=t.ast.statements[0];break;case ME.VALID_SQL_OPS_ENUM.INSERT:n=BAe;break;case ME.VALID_SQL_OPS_ENUM.UPDATE:n=NAe;break;case ME.VALID_SQL_OPS_ENUM.DELETE:n=CAe;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(LQ,"processAST");function xAe(e,t){LR.info(e),t("unknown sql statement")}a(xAe,"nullFunction");function BAe({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=FAe(i,e.values)}catch(o){return r(o)}AAe(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){LR.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(BAe,"convertInsert");function FAe(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]]=Kc.compile(`SELECT ${s.toString()} AS [${ME.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw LR.error(r),new Error(vAe)}}a(FAe,"createDataObjects")});var rM=v((zGe,HQ)=>{"use strict";var tM=Sn(),kAe=SC(),{AsyncParser:HAe}=require("json2csv"),DR=require("stream"),Ps=oe(),eM=require("fs-extra"),qAe=require("path"),ri=J(),{promisify:UQ}=require("util"),UE=oe(),{handleHDBError:Rr,hdbErrors:GAe}=_e(),{HDB_ERROR_MSGS:Zn,HTTP_STATUS_CODES:br}=GAe,{streamAsJSON:$Ae}=(hA(),M(px)),{Upload:VAe}=require("@aws-sdk/lib-storage"),{toCsvStream:KAe}=(ko(),M(Ax)),MQ=["search_by_value","search_by_hash","sql","search_by_conditions"],vQ=["json","csv"],xQ="json",BQ="csv",YAe="Successfully exported JSON locally.",WAe="Successfully exported CSV locally.",zAe=1e3,jAe=tM.searchByHash,QAe=tM.searchByValue,JAe=UQ(DR.finished);HQ.exports={export_to_s3:tIe,export_local:XAe};async function XAe(e){ri.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=FQ(e);if(!Ps.isEmpty(t))throw ri.error(t),Rr(new Error,t,br.BAD_REQUEST,void 0,void 0,!0);if(Ps.isEmpty(e.path))throw ri.error(Zn.MISSING_VALUE("path")),Rr(new Error,Zn.MISSING_VALUE("path"),br.BAD_REQUEST,void 0,void 0,!0);let r=(Ps.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(qAe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Ps.buildFolderPath(e.path,r);await ZAe(e.path);let s=await kQ(e);return await eIe(n,e.format,s)}a(XAe,"export_local");async function ZAe(e){if(ri.trace("in confirmPath"),Ps.isEmptyOrZeroLength(e))throw Rr(new Error,`Invalid path: ${e}`,br.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await eM.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${directory_path}' does not exist`:r.code==="EACCES"?n=`access to path '${directory_path}' is denied`:n=r.message,ri.error(n),Rr(new Error,n,br.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${directory_path}' is not a directory, please supply a valid folder path`;throw ri.error(r),Rr(new Error,r,br.BAD_REQUEST,void 0,void 0,!0)}return!0}a(ZAe,"confirmPath");async function eIe(e,t,r){if(ri.trace("in saveToLocal"),UE.isEmptyOrZeroLength(e))throw Rr(new Error,Zn.INVALID_VALUE("file_path"),br.BAD_REQUEST,void 0,void 0,!0);if(UE.isEmptyOrZeroLength(t))throw Rr(new Error,Zn.INVALID_VALUE("Source format"),br.BAD_REQUEST,void 0,void 0,!0);if(UE.isEmpty(r))throw Rr(new Error,Zn.NOT_FOUND("Data"),br.BAD_REQUEST,void 0,void 0,!0);if(t===xQ){let n=eM.createWriteStream(e);return $Ae(r).pipe(n),await JAe(n),{message:YAe,path:e}}else if(t===BQ){let n=eM.createWriteStream(e),s=DR.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new HAe(i,c).fromInput(s).toOutput(n).promise(!1),{message:WAe,path:e}}throw Rr(new Error,Zn.INVALID_VALUE("format"),br.BAD_REQUEST)}a(eIe,"saveToLocal");async function tIe(e){if(!e.s3||Object.keys(e.s3).length===0)throw Rr(new Error,Zn.MISSING_VALUE("S3 object"),br.BAD_REQUEST);if(Ps.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Rr(new Error,Zn.MISSING_VALUE("aws_access_key_id"),br.BAD_REQUEST);if(Ps.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Rr(new Error,Zn.MISSING_VALUE("aws_secret_access_key"),br.BAD_REQUEST);if(Ps.isEmptyOrZeroLength(e.s3.bucket))throw Rr(new Error,Zn.MISSING_VALUE("bucket"),br.BAD_REQUEST);if(Ps.isEmptyOrZeroLength(e.s3.key))throw Rr(new Error,Zn.MISSING_VALUE("key"),br.BAD_REQUEST);if(Ps.isEmptyOrZeroLength(e.s3.region))throw Rr(new Error,Zn.MISSING_VALUE("region"),br.BAD_REQUEST);let t=FQ(e);if(!Ps.isEmpty(t))throw Rr(new Error,t,br.BAD_REQUEST);ri.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await kQ(e)}catch(l){throw ri.error(l),l}let n,s=await kAe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new DR.PassThrough;if(e.format===BQ){i=e.s3.key+".csv";let l=KAe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===xQ){i=e.s3.key+".json";let l=new DR.Readable;l.pipe(o),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let p=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=p,f!==0&&f%zAe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw Rr(new Error,Zn.INVALID_VALUE("format"),br.BAD_REQUEST);return new VAe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(tIe,"export_to_s3");function FQ(e){if(ri.trace("in exportCoreValidation"),Ps.isEmpty(e.format))return"format missing";if(vQ.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${vQ.join(", ")}`;let t=e.search_operation.operation;if(Ps.isEmpty(t))return"search_operation.operation missing";if(MQ.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${MQ.join(", ")}`}a(FQ,"exportCoreValidation");async function kQ(e){ri.trace("in getRecords");let t,r;if(UE.isEmpty(e.search_operation)||UE.isEmptyOrZeroLength(e.search_operation.operation))throw Rr(new Error,Zn.INVALID_VALUE("Search operation"),br.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=QAe;break;case"search_by_hash":t=jAe;break;case"search_by_conditions":t=tM.searchByConditions;break;case"sql":{let n=vE();t=UQ(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,ri.error(r),Rr(new Error,r,br.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(kQ,"getRecords")});var GQ=v((QGe,qQ)=>{"use strict";var nM=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};qQ.exports=nM});var KQ=v((XGe,VQ)=>{"use strict";var rIe=(H(),M(W)),$Q=require("moment"),nIe=require("uuid").v4,sM=class{static{a(this,"JobObject")}constructor(){this.id=nIe(),this.type=void 0,this.start_datetime=$Q().valueOf(),this.created_datetime=$Q().valueOf(),this.end_datetime=void 0,this.status=rIe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};VQ.exports=sM});var oM=v((e$e,ZQ)=>{"use strict";var sIe=require("uuid").v4,QQ=_n(),JQ=Sn(),iIe=pi(),oIe=dd(),aIe=GQ(),Dt=(H(),M(W)),cIe=KQ(),lIe=sh(),Ui=J(),uIe=Dm(),Zf=oe(),{promisify:dIe}=require("util"),yu=require("moment"),MR=_C(),YQ=Ow(),{deleteTransactionLogsBeforeValidator:fIe}=cD(),{handleHDBError:WQ,hdbErrors:mIe,ClientError:pIe}=_e(),{HTTP_STATUS_CODES:zQ}=mIe,jQ=JQ.searchByValue,hIe=JQ.searchByHash,EIe=QQ.insert,_Ie=QQ.update,iM;ZQ.exports={addJob:TIe,updateJob:RIe,handleGetJob:gIe,handleGetJobsByStartDate:SIe,getJobById:XQ};async function gIe(e){if(e.id===void 0)throw new pIe("'id' is required");let t=await XQ(e.id);return Zf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}a(gIe,"handleGetJob");async function SIe(e){try{let t=await yIe(e);if(Ui.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=yu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=yu(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 Ui.error(r),new Error(r)}}a(SIe,"handleGetJobsByStartDate");async function TIe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Zf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Ui.info(d),t.error=d,t}if(!Dt.JOB_TYPE_ENUM[e.operation])return Ui.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Dt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=MR.fileObject(e);break;case Dt.OPERATIONS_ENUM.CSV_URL_LOAD:n=MR.urlObject(e);break;case Dt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=MR.dataObject(e);break;case Dt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=MR.s3FileObject(e);break;case Dt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Dt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=YQ(e,"date");break;case Dt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=YQ(e,"timestamp");break;case Dt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=fIe(e);break;case Dt.OPERATIONS_ENUM.RESTART_SERVICE:if(Dt.HDB_PROCESS_SERVICES[e.service]===void 0)throw WQ(new Error,"Invalid service",zQ.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw WQ(n,n.message,zQ.BAD_REQUEST,void 0,void 0,!0);let s=new cIe;s.type=e.operation===Dt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Dt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new iIe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await jQ(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ui.error(f),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=sIe();try{o=await jQ(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ui.error(f),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Ui.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new uIe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await EIe(l)}catch(d){return Ui.error(`There was an error inserting a job for job type: ${e.operation} -- ${d}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let d=`Created a job with type ${s.type} and id ${s.id}`;t.message=d,t.createdJob=s,t.success=!0,Ui.trace(d)}return t}a(TIe,"addJob");async function yIe(e){let t=yu(e.from_date,yu.ISO_8601),r=yu(e.to_date,yu.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 aIe(n,e.hdb_user);try{if(!iM){let i=vE();iM=dIe(i.evaluateSQL)}return await iM(s)}catch(i){throw Ui.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(yIe,"getJobsInDateRange");async function XQ(e){if(Zf.isEmptyOrZeroLength(e))return Zf.errorizeMessage("Invalid job ID specified.");let t=new oIe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await hIe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Ui.error(n),Zf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(XQ,"getJobById");async function RIe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Zf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Dt.JOB_STATUS_ENUM.COMPLETE||e.status===Dt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=yu().valueOf());let t=new lIe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await _Ie(t),r}a(RIe,"updateJob")});var aJ=v((r$e,oJ)=>{"use strict";var eJ=oe(),Ur=(H(),M(W)),bIe=require("moment"),vR=YD(),xE=J(),tJ=oM(),rJ=rM(),nJ=rc(),sJ=tt(),AIe=gR(),IIe=Wf(),{parentPort:wIe,isMainThread:iJ}=require("worker_threads"),{onMessageByType:NIe}=tt(),aM=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function CIe(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(eJ.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(eJ.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ur.JOB_TYPE_ENUM.csv_file_load:await Io(e,vR.csvFileLoad);break;case Ur.JOB_TYPE_ENUM.csv_url_load:await Io(e,vR.csvURLLoad);break;case Ur.JOB_TYPE_ENUM.csv_data_load:await Io(e,vR.csvDataLoad);break;case Ur.JOB_TYPE_ENUM.import_from_s3:await Io(e,vR.importFromS3);break;case Ur.JOB_TYPE_ENUM.empty_trash:break;case Ur.JOB_TYPE_ENUM.export_local:await Io(e,rJ.export_local);break;case Ur.JOB_TYPE_ENUM.export_to_s3:await Io(e,rJ.export_to_s3);break;case Ur.JOB_TYPE_ENUM.delete_files_before:case Ur.JOB_TYPE_ENUM.delete_records_before:await Io(e,nJ.deleteFilesBefore);break;case Ur.JOB_TYPE_ENUM.delete_audit_logs_before:await Io(e,nJ.deleteAuditLogsBefore);break;case Ur.JOB_TYPE_ENUM.delete_transaction_logs_before:await Io(e,AIe.deleteTransactionLogsBefore);break;case Ur.JOB_TYPE_ENUM.restart_service:return await Io(e,IIe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(CIe,"parseMessage");async function Io(e,t){try{e.job.status=Ur.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=bIe().valueOf(),await tJ.updateJob(e.job),await OIe(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):xE.error(`There was an error running ${t.name} job with id ${e.job.id}`),xE.error(n),e.job.message=n,e.job.status=Ur.JOB_STATUS_ENUM.ERROR;try{await tJ.updateJob(e.job)}catch(s){throw xE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Io,"runJob");async function OIe(e){xE.trace("launching job thread:",e),iJ?sJ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ur.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):wIe.postMessage({type:Ur.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(OIe,"launchJobThread");iJ&&NIe(Ur.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{sJ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ur.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){xE.error(r)}});oJ.exports={parseMessage:CIe,RunnerMessage:aM}});var lJ=v((s$e,cJ)=>{"use strict";var PIe=oe(),cM=ae(),Yc=(H(),M(W)),LIe=pt(),DIe=Ht(),wo=J(),MIe=HD(),vIe=so();cM.initSync();cJ.exports={postOperationHandler:xIe,sendOperationTransaction:BE};async function BE(e,t,r,n){if(e.schema===Yc.SYSTEM_SCHEMA_NAME)return;let s=UIe(e,t,r);s&&(wo.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await DIe.publishToStream(`${LIe.SUBJECT_PREFIXES.TXN}.${e.schema}`,vIe.createNatsTableStreamName(e.schema,e.table),n,s))}a(BE,"sendOperationTransaction");function UIe(e,t,r){if(PIe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Yc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}a(UIe,"convertCRUDOperationToTransaction");async function xIe(e,t,r){if(!cM.get(Yc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;wo.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=cM.get(Yc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new MIe(t.txn_time,n,s);switch(e.operation){case Yc.OPERATIONS_ENUM.INSERT:try{await BE(e,t.inserted_hashes,i,r)}catch(o){wo.error("There was an error calling clustering postOperationHandler for insert."),wo.error(o)}break;case Yc.OPERATIONS_ENUM.DELETE:try{await BE(e,t.deleted_hashes,i,r)}catch(o){wo.error("There was an error calling clustering postOperationHandler for delete."),wo.error(o)}break;case Yc.OPERATIONS_ENUM.UPDATE:try{await BE(e,t.update_hashes,i,r)}catch(o){wo.error("There was an error calling clustering postOperationHandler for update."),wo.error(o)}break;case Yc.OPERATIONS_ENUM.UPSERT:try{await BE(e,t.upserted_hashes,i,r)}catch(o){wo.error("There was an error calling clustering postOperationHandler for upsert."),wo.error(o)}break;default:break}return t}a(xIe,"postOperationHandler")});var X,uJ=ne(()=>{X=class{static{a(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var oD={};ye(oD,{chooseOperation:()=>PJ,executeJob:()=>ni,getOperationFunction:()=>LJ,operation:()=>_M,processLocalTransaction:()=>OJ});function kIe(e){if(!lM){let t=vE();lM=EM.promisify(t.evaluateSQL)}return lM(e)}async function OJ(e,t){try{if(e.body.operation!=="read_log"&&(qE.default.log_level===ym.INFO||qE.default.log_level===ym.DEBUG||qE.default.log_level===ym.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:o,...c}=e.body;Ln.info(c)}}catch(n){Ln.error(n)}let r=await NJ.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return HIe[e.body.operation]&&RJ.default.setSchemaDataToGlobal(n=>{n&&Ln.error(n)}),r}function PJ(e){let t;try{t=LJ(e)}catch(s){throw Ln.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=vE(),i=e.operation==="sql"?e.sql:e.search_operation.sql,o=s.convertSQLToAST(i);if(e.parsed_sql_object=o,!e.bypass_auth){let c=s.checkASTPermissions(e,o);if(c)throw Ln.error(`${dJ.FORBIDDEN} from operation ${e.operation}`),Ln.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,si.handleHDBError)(new Error,c,si.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.LOGIN&&e.operation!==V.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=yJ.default.verifyPerms(i,s);if(o)throw Ln.error(`${dJ.FORBIDDEN} from operation ${e.operation}`),Ln.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,si.handleHDBError)(new Error,o,si.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,si.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function LJ(e){if(Ln.trace(`getOperationFunction with operation: ${e.operation}`),fJ.has(e.operation))return fJ.get(e.operation);throw(0,si.handleHDBError)(new Error,si.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),si.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function _M(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=PJ(e);return OJ({body:e},n)}async function qIe(e){Ln.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[jb]=!0;let o;switch(i.operation){case V.INSERT:o=await bu.default.insert(i);break;case V.UPDATE:o=await bu.default.update(i);break;case V.UPSERT:o=await bu.default.upsert(i);break;case V.DELETE:o=await rm.default.deleteRecord(i);break;default:Ln.warn("invalid operation in catchup");break}await BIe.postOperationHandler(i,o,e)}catch(o){Ln.info("Invalid operation in transaction"),Ln.error(o)}}async function ni(e){(0,wJ.transformReq)(e);let t,r;try{if(r=await xR.default.addJob(e),r){t=r.createdJob,Ln.info("addJob result",r);let n=new mM.default.RunnerMessage(t,e);return{message:await mM.default.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}}catch(n){let s=n instanceof Error?n:null,i=`There was an error executing job: ${s&&"http_resp_msg"in s?s.http_resp_msg:n}`;throw Ln.error(i),(0,si.handleHDBError)(n,i)}}function GIe(){let e=new Map;return e.set(V.INSERT,new X(bu.default.insert)),e.set(V.UPDATE,new X(bu.default.update)),e.set(V.UPSERT,new X(bu.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new X(tm.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new X(tm.default.searchByHash)),e.set(V.SEARCH_BY_ID,new X(tm.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new X(tm.default.searchByValue)),e.set(V.SEARCH,new X(FIe)),e.set(V.SQL,new X(kIe)),e.set(V.CSV_DATA_LOAD,new X(ni,FE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new X(ni,FE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new X(ni,FE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new X(ni,FE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new X(xi.default.createSchema)),e.set(V.CREATE_DATABASE,new X(xi.default.createSchema)),e.set(V.CREATE_TABLE,new X(xi.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new X(xi.default.createAttribute)),e.set(V.DROP_SCHEMA,new X(xi.default.dropSchema)),e.set(V.DROP_DATABASE,new X(xi.default.dropSchema)),e.set(V.DROP_TABLE,new X(xi.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new X(xi.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new X(kE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new X(kE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new X(kE.default.describeTable)),e.set(V.DESCRIBE_ALL,new X(kE.default.describeAll)),e.set(V.DELETE,new X(rm.default.deleteRecord)),e.set(V.ADD_USER,new X(em.default.addUser)),e.set(V.ALTER_USER,new X(em.default.alterUser)),e.set(V.DROP_USER,new X(em.default.dropUser)),e.set(V.LIST_USERS,new X(em.default.listUsersExternal)),e.set(V.LIST_ROLES,new X(HE.default.listRoles)),e.set(V.ADD_ROLE,new X(HE.default.addRole)),e.set(V.ALTER_ROLE,new X(HE.default.alterRole)),e.set(V.DROP_ROLE,new X(HE.default.dropRole)),e.set(V.USER_INFO,new X(em.default.userInfo)),e.set(V.READ_LOG,new X(pJ.default)),e.set(V.ADD_NODE,new X(hJ.default)),e.set(V.UPDATE_NODE,new X(uM.default)),e.set(V.SET_NODE_REPLICATION,new X(uM.default)),e.set(V.REMOVE_NODE,new X(EJ.default)),e.set(V.CONFIGURE_CLUSTER,new X(_J.default)),e.set(V.PURGE_STREAM,new X(gJ.default)),e.set(V.SET_CONFIGURATION,new X(pM.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new X(SJ.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new X(TJ.default)),e.set(V.CLUSTER_SET_ROUTES,new X(UR.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new X(UR.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new X(UR.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new X(ni,dM.default.export_to_s3)),e.set(V.CREATE_CSR,new X(Ru.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new X(Ru.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new X(Ru.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new X(Ru.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new X(Ru.default.removeCertificate)),e.set(V.GET_KEY,new X(Ru.default.getKey)),e.set(V.ADD_NODE_BACK,new X(uP)),e.set(V.REMOVE_NODE_BACK,new X(dP)),e.set(V.DELETE_FILES_BEFORE,new X(ni,rm.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new X(ni,rm.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new X(ni,dM.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new X(xR.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new X(xR.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new X(AD)),e.set(V.GET_FINGERPRINT,new X(ID)),e.set(V.SET_LICENSE,new X(wD)),e.set(V.RESTART,new X(fM.default.restart)),e.set(V.RESTART_SERVICE,new X(ni,fM.default.restartService)),e.set(V.CATCHUP,new X(qIe)),e.set(V.SYSTEM_INFORMATION,new X(bJ.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new X(ni,rm.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new X(mJ.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new X(cC)),e.set(V.REFRESH_OPERATION_TOKEN,new X(lC)),e.set(V.LOGIN,new X(tD)),e.set(V.LOGOUT,new X(rD)),e.set(V.GET_CONFIGURATION,new X(pM.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new X(Mt.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new X(Mt.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new X(Mt.default.getComponentFile)),e.set(V.GET_COMPONENTS,new X(Mt.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new X(Mt.default.setComponentFile)),e.set(V.DROP_COMPONENT,new X(Mt.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new X(Mt.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new X(Mt.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new X(Mt.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new X(Mt.default.addComponent)),e.set(V.ADD_COMPONENT,new X(Mt.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new X(Mt.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new X(Mt.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new X(Mt.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new X(Mt.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new X(Mt.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new X(hM.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new X(ni,hM.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new X(AJ.default.installModules)),e.set(V.GET_BACKUP,new X(xi.default.getBackup)),e.set(V.CLEANUP_ORPHAN_BLOBS,new X(xi.default.cleanupOrphanBlobs)),e.set(V.ADD_SSH_KEY,new X(Mt.default.addSSHKey)),e.set(V.UPDATE_SSH_KEY,new X(Mt.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new X(Mt.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new X(Mt.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new X(Mt.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new X(Mt.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new X(dD)),e.set(V.LIST_METRICS,new X(fD)),e.set(V.DESCRIBE_METRIC,new X(mD)),e.set(V.GET_STATUS,new X(yD)),e.set(V.SET_STATUS,new X(RD)),e.set(V.CLEAR_STATUS,new X(TD)),e.set(V.INSTALL_USAGE_LICENSE,new X(yL)),e.set(V.GET_USAGE_LICENSES,new X(IL)),e}var tm,FE,xi,kE,rm,mJ,em,HE,Mt,qE,pJ,hJ,uM,EJ,_J,gJ,SJ,TJ,UR,dM,yJ,xR,si,fM,EM,bu,RJ,bJ,mM,pM,hM,AJ,IJ,wJ,Ru,NJ,CJ,dJ,Ln,BIe,FIe,lM,HIe,fJ,aD=ne(()=>{tm=b(Sn()),FE=b(YD()),xi=b(Mh()),kE=b(dc()),rm=b(rc()),mJ=b(FO()),em=b(Es()),HE=b(eh()),Mt=b(iD()),qE=b(J()),pJ=b($O()),hJ=b(cy()),uM=b(EP()),EJ=b(uy()),_J=b(SP()),gJ=b(TP()),SJ=b(bP()),TJ=b(IP()),UR=b(hy()),dM=b(rM()),yJ=b(NR()),xR=b(oM());H();si=b(_e()),fM=b(Wf()),EM=b(require("util")),bu=b(_n()),RJ=b(Ei()),bJ=b(Bh()),mM=b(aJ());Vd();uR();pM=b(St()),hM=b(gR()),AJ=b(uD()),IJ=b(li()),wJ=b(oe());Hr();Ru=b(ys());Tf();hD();NJ=b(gC()),CJ=b(lJ());bE();iE();CD();uJ();({HTTP_STATUS_CODES:dJ}=si.hdbErrors),Ln=qE.default.loggerWithTag("operation"),{transactToClusteringUtils:BIe}=CJ.default,FIe=EM.promisify(tm.default.search);a(kIe,"evaluateSQL");HIe={[V.CREATE_ATTRIBUTE]:!0,[V.CREATE_TABLE]:!0,[V.CREATE_SCHEMA]:!0,[V.DROP_ATTRIBUTE]:!0,[V.DROP_TABLE]:!0,[V.DROP_SCHEMA]:!0};a(OJ,"processLocalTransaction");fJ=GIe();Be.operation=_M;a(PJ,"chooseOperation");a(LJ,"getOperationFunction");(0,IJ._assignPackageExport)("operation",_M);a(_M,"operation");a(qIe,"catchup");a(ni,"executeJob");a(GIe,"initializeOperationFunctionMap")});var kR=v((d$e,UJ)=>{"use strict";var BR=(H(),M(W)),$Ie=oe(),Au=J(),{handleHDBError:FR,hdbErrors:GE}=_e(),{isMainThread:VIe}=require("worker_threads"),{Readable:KIe}=require("stream"),DJ=require("os"),YIe=require("util"),WIe=dC(),vJ=YIe.promisify(WIe.authorize),MJ=(aD(),M(oD)),{createGzip:zIe,constants:jIe}=require("zlib"),QIe=[BR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,BR.OPERATIONS_ENUM.LOGIN,BR.OPERATIONS_ENUM.LOGOUT];function JIe(e){let t=`Found an uncaught exception with message: ${e.message}. ${DJ.EOL}Stack: ${e.stack} ${DJ.EOL}Terminating ${VIe?"HDB":"thread"}.`;console.error(t),Au.fatal(t),process.exit(1)}a(JIe,"handleServerUncaughtException");function XIe(e,t,r){if(Au[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:GE.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(XIe,"serverErrorHandler");function ZIe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=FR(new Error,"Invalid JSON.",GE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if($Ie.isEmpty(e.body.operation)){let n=FR(new Error,"Request body must include an 'operation' property.",GE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(ZIe,"reqBodyValidationHandler");function ewe(e,t,r){let n;!QIe.includes(e.body.operation)||e.body.operation===BR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?vJ(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{Au.warn(i),Au.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let o=typeof i=="string"?{error:i}:{error:i.message};r(FR(i,o,GE.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(ewe,"authHandler");function twe(e,t,r){vJ(e,t).then(n=>{e.hdb_user=n,r()}).catch(n=>{Au.warn(n),Au.warn(`{"ip":"${e.socket?.remoteAddress}", "error":"${n.stack}"`);let s=typeof n=="string"?{error:n}:{error:n.message};r(FR(n,s,GE.HTTP_STATUS_CODES.UNAUTHORIZED),null)})}a(twe,"authAndEnsureUserOnRequest");async function rwe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=MJ.chooseOperation(e.body);let s=await MJ.processLocalTransaction(e,n);if(s instanceof KIe&&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(zIe({level:jIe.Z_BEST_SPEED})))}return s}catch(s){throw Au.error(s),s}}a(rwe,"handlePostRequest");UJ.exports={authHandler:ewe,authAndEnsureUserOnRequest:twe,handlePostRequest:rwe,handleServerUncaughtException:JIe,serverErrorHandler:XIe,reqBodyValidationHandler:ZIe}});var kJ=v((m$e,FJ)=>{"use strict";var nwe=require("fastify-plugin"),{handlePostRequest:xJ,authHandler:swe,reqBodyValidationHandler:iwe}=kR();async function owe(e){e.decorate("hdbCore",{preValidation:[iwe,swe],request:a(t=>BJ(xJ(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>BJ(xJ(t,r,!0)),"requestWithoutAuthentication")})}a(owe,"hdbCore");async function BJ(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(BJ,"convertAsyncIterators");FJ.exports=nwe(owe)});var qJ=v((E$e,HJ)=>{"use strict";var h$e=require("fs"),HR=ae();HR.initSync();var{CONFIG_PARAMS:gM}=(H(),M(W)),awe=1024*1024*1024;function cwe(e){let t=HR.get(gM.HTTP_TIMEOUT),r=HR.get(gM.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:awe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:HR.get(gM.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(cwe,"getServerOptions");HJ.exports=cwe});var VJ=v((g$e,$J)=>{"use strict";var SM=ae();SM.initSync();var{CONFIG_PARAMS:GJ}=(H(),M(W));function lwe(){let e=SM.get(GJ.HTTP_CORSACCESSLIST),t=SM.get(GJ.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(lwe,"getCORSOptions");$J.exports=lwe});var WJ=v((T$e,YJ)=>{"use strict";var KJ=ae();KJ.initSync();var uwe=(H(),M(W));function dwe(){return KJ.get(uwe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(dwe,"getHeaderTimeoutConfig");YJ.exports=dwe});var yM={};ye(yM,{customFunctionsServer:()=>pwe,ready:()=>a3,start:()=>mwe});function mwe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){wa||(wa=o3(t),Be.http((await wa).server));let o=await wa,c=(0,TM.dirname)(s),l=(0,TM.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!zJ.has(c)){zJ.add(c);try{o.register(Ewe(c,l))}catch(u){if(u.message==="Root plugin has already booted")yt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:a3}}async function pwe(){try{yt.info("In Custom Functions Fastify server"+process.cwd()),yt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),yt.debug(`Custom Functions server process ${process.pid} starting up.`),await hwe();let e=e3.get(F.HTTP_SECUREPORT)>0,t;try{t=wa=await o3(e)}catch(r){throw yt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw yt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){yt.error(`Custom Functions ${process.pid} Error: ${e}`),yt.error(e),process.exit(1)}}async function hwe(){try{yt.info("Custom Functions starting configuration."),await t3.setUsersWithRolesCache(),yt.info("Custom Functions completed configuration.")}catch(e){yt.error(e)}}function Ewe(e,t){return async function(r){try{yt.info("Custom Functions starting buildRoutes"),yt.trace("Loading fastify routes folder "+e),(0,jJ.existsSync)(e)&&r.register(ZJ.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:yt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?yt.error(s.message):s&&yt.error(s),o()})}catch(n){yt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function o3(e){yt.info("Custom Functions starting buildServer.");let t=(0,r3.default)(e),r=(0,QJ.default)(t);r.server.headersTimeout=(0,s3.default)(),r.setErrorHandler(i3.serverErrorHandler);let n=(0,n3.default)();return n&&r.register(JJ.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(XJ.default),await r.register(fwe),await r.after(),Hm(r),yt.info("Custom Functions completed buildServer."),r}function a3(){if(wa)return wa.then?wa.then(e=>e.ready()):wa.ready()}var TM,jJ,QJ,JJ,XJ,ZJ,e3,yt,fwe,t3,r3,n3,s3,i3,wa,zJ,c3=ne(()=>{TM=require("path"),jJ=require("fs"),QJ=b(require("fastify")),JJ=b(require("@fastify/cors")),XJ=b(sC()),ZJ=b(require("@fastify/autoload")),e3=b(ae());H();yt=b(J()),fwe=b(kJ()),t3=b(Es()),r3=b(qJ()),n3=b(VJ()),s3=b(WJ()),i3=b(kR());ko();Hr();zJ=new Set;a(mwe,"start");a(pwe,"customFunctionsServer");a(hwe,"setUp");a(Ewe,"buildRouteFolder");a(o3,"buildServer");a(a3,"ready")});var bM={};ye(bM,{handleApplication:()=>_we,suppressHandleApplicationWarning:()=>gwe});function _we(e){let t=new Map,r=new Map;e.options.on("change",(n,s)=>{if(n[0]==="files"||n[0]==="urlPath"){t.clear(),r.clear(),e.logger.info(`Static files reinitialized due to change in ${n.join(".")}`);return}}),e.handleEntry(n=>{switch(n.eventType){case"addDir":case"unlinkDir":let s=(0,sm.join)(n.absolutePath,"index.html");(0,nm.existsSync)(s)&&r[n.eventType==="addDir"?"set":"delete"](n.urlPath,s);break;case"add":t.set(n.urlPath,n.absolutePath),n.urlPath.endsWith("index.html")&&r.set((0,sm.dirname)(n.urlPath),n.absolutePath);break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,sm.dirname)(n.urlPath));break}}),e.server.http((n,s)=>{if(n.method!=="GET"||n.isWebSocket)return s(n);let i=e.options.get(["fallthrough"])??!0;if(typeof i!="boolean")throw new Error(`Invalid fallthrough option: ${i}. Must be a boolean.`);let o=t.get(n.pathname);if(!o){let d=e.options.get(["index"])??!1;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);d&&(o=r.get(n.pathname))}if(!o){let d=e.options.get(["extensions"])??[];if(!Array.isArray(d)||d.some(f=>typeof f!="string"))throw new Error(`Invalid extensions option: ${d}. Must be an array of strings.`);for(let f of d)if(o=t.get(`${n.pathname}.${f}`),o)break}if(o)return{handlesHeaders:!0,body:(0,RM.default)(n,(0,nm.realpathSync)(o))};if(i)return s(n);let c=e.options.get(["notFound"]);if(Swe(c),!c)return{status:404,body:"File not found"};let l=(0,sm.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,nm.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,RM.default)(n,(0,nm.realpathSync)(l))}},{runFirst:!0})}function Swe(e){if(!(e===void 0||typeof e=="string")){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(!("file"in e)||typeof e.file!="string")throw new Error(`Invalid \`notFound.file\` option: ${e.file}. Must be a string.`);if(!("statusCode"in e)||typeof e.statusCode!="number")throw new Error(`Invalid \`notFound.statusCode\` option: ${e.statusCode}. Must be a number.`);return}throw new Error(`Invalid notFound option: ${e}. Must be a string or an object with file and statusCode properties.`)}}var nm,sm,RM,gwe,l3=ne(()=>{nm=require("node:fs"),sm=require("node:path"),RM=b(require("send"));a(_we,"handleApplication");gwe=!0;a(Swe,"validateNotFoundOption")});var AM={};ye(AM,{start:()=>Twe});function Twe({override:e}){return{handleFile:a((t,r,n)=>{qR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,u3.parse)(t))){if(process.env[s]!==void 0)if(qR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)qR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var u3,qR,d3=ne(()=>{u3=require("dotenv"),qR=b(J());a(Twe,"start")});var IM={};ye(IM,{DataLoaderError:()=>Ls,DataLoaderResult:()=>im,EmptyFileError:()=>VR,FileParseError:()=>$R,InvalidPropertyTypeError:()=>KR,MissingRequiredPropertyError:()=>$E,RecordProcessingError:()=>VE,SystemDatabaseError:()=>YR,UnsupportedFileExtensionError:()=>GR,handleApplication:()=>Rwe,loadDataFile:()=>E3,suppressHandleApplicationWarning:()=>ywe});function Rwe(e){if((0,m3.getWorkerIndex)()!==0){No.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||E3(t,bn,ve).then(r=>{No.debug?.("Data loader processed file: %s: %s",(0,Na.basename)(t.absolutePath),r.message)})})}async function E3({contents:e,absolutePath:t,stats:r},n,s){let i=(0,Na.extname)(t)||"unknown",o;try{if(i===".yaml"||i===".yml")o=(0,f3.parseDocument)(e.toString()).toJSON();else if(i===".json")o=JSON.parse(e.toString());else throw new GR(t,i);o.mtime=r.mtimeMs}catch(f){throw f instanceof Ls?f:new $R(t,f)}if(!o)throw new VR(t);let{database:c,table:l,records:u}=o;if(!l)throw new $E(t,"table");if(!u)throw new $E(t,"records");if(!Array.isArray(u))throw new KR(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new YR(c,l);try{let f;if(c&&s[c]&&s[c][l])No.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])No.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{No.debug?.(`Table ${d} not found, creating new table`);let R=[];if(u.length>0){let S=u[0];Object.keys(S).map(y=>{let N={name:y,type:typeof S[y]};return y==="id"&&(N.isPrimaryKey=!0),N}).forEach(y=>{R.push(y)})}f=await Xe({database:c,table:l,attributes:R})}let m=u.length,p=0,h=0,E=0,g=100;for(let R=0;R<u.length;R+=g){let S=u.slice(R,R+g),y=[];for(let N of S)y.push(async()=>{try{let I=null,$=N.id;if($!==void 0&&(I=await f.get($)),!I)return p++,f.put(N);let ee=I.getUpdatedTime();return o.mtime>ee?(h++,f.put(N)):(E++,Promise.resolve({inserted:0,updated:0}))}catch(I){if(I instanceof Ls)No.error?.(`Record processing error: ${I.message}`);else{let $=new VE(d,I);No.error?.(`Record processing error: ${$.message}`)}return Promise.resolve({inserted:0,updated:0,error:I.message})}});await Promise.all(y.map(N=>N()))}if(p>0||h>0){let R=`Loaded ${p} new and updated ${h} records in ${d}`;return E>0&&(R+=` (${E} records skipped)`),No.info?.(R),new im(t,c,l,"success",p+h,R)}else if(E>0){let R=`All ${E} records in ${d} already up-to-date`;return No.info?.(R),new im(t,c,l,"skipped",m,R)}else{let R=`No records to process in ${d}`;return No.info?.(R),new im(t,c,l,"success",0,R)}}catch(f){throw f instanceof Ls?f:new VE(d,f)}}var Na,f3,m3,Ca,p3,h3,No,ywe,Ls,GR,$R,VR,$E,KR,YR,VE,im,_3=ne(()=>{Na=require("node:path"),f3=require("yaml");we();m3=b(tt()),Ca=b(Jr()),p3=b(_e()),h3=b(J()),No=h3.default.forComponent("dataLoader"),ywe=!0;a(Rwe,"handleApplication");a(E3,"loadDataFile");Ls=class extends p3.ClientError{static{a(this,"DataLoaderError")}constructor(t,r=Ca.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},GR=class extends Ls{static{a(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,Na.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,Ca.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},$R=class extends Ls{static{a(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,Na.basename)(t)}: ${r.message}`,Ca.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},VR=class extends Ls{static{a(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,Na.basename)(t)} is empty or invalid`,Ca.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},$E=class extends Ls{static{a(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,Na.basename)(t)} is missing required "${r}" property`,Ca.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},KR=class extends Ls{static{a(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,Na.basename)(t)} has invalid "${r}" property, expected ${n}`,Ca.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},YR=class extends Ls{static{a(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,Ca.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},VE=class extends Ls{static{a(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,Ca.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},im=class{static{a(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,o){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=o}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var wM={};ye(wM,{calculateRestHttpURL:()=>P3,hdbServer:()=>wwe,start:()=>wwe});async function wwe(e){try{Bi.default.debug("In Fastify server"+process.cwd()),Bi.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Bi.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=g3.default.isMaster,await Nwe();let t=e.securePort>0;om=Cwe(t,e.resources),await om.ready(),e||(e={}),e.isOperationsServer=!0;try{Be.http(om.server,e),om.server.closeIdleConnections||await om.listen({port:0,host:"::"})}catch(r){throw om.close(),Bi.default.error(r),Bi.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Bi.default.fatal(t),process.exit(1)}}async function Nwe(){return Bi.default.trace("Configuring HarperDB process."),w3.default.setSchemaDataToGlobal(),C3.default.setUsersWithRolesCache()}function Cwe(e,t){Bi.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let r=Lwe(e),n=(0,S3.default)(r);n.server.headersTimeout=Mwe(),n.setErrorHandler(Co.serverErrorHandler);let s=Dwe();s&&n.register(T3.default,s),n.register(function(o,c,l){o.setNotFoundHandler(function(u,d){n.server.emit("unhandled",u.raw,d.raw)}),l()}),n.register(b3.default),n.register(y3.default),Hm(n),n.get("/health",()=>"HarperDB is running."),n.register(R3.default,{root:A3.default.join(I3.PACKAGE_ROOT,"studio/web")});let i=Fi.default.get(bm.LOCAL_STUDIO_ON);return!N3.default.isEmpty(i)&&i.toString().toLowerCase()==="true"?n.get("/",(o,c)=>c.sendFile("index.html")):n.get("/",(o,c)=>c.sendFile("running.html")),n.get("/api/openapi/rest",{preValidation:[Co.authAndEnsureUserOnRequest]},Owe(t)),n.post("/",{preValidation:[Co.reqBodyValidationHandler,Co.authHandler],config:{isOperation:!0}},Pwe),Bi.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),n}function Owe(e){let t=Fi.default.get(F.HTTP_PORT),r=Fi.default.get(F.HTTP_SECUREPORT);return n=>n.hdb_user?.role?.permission?.super_user?FS(e,P3(t,r,n)):(Bi.default.warn(`{"ip":"${n.socket.remoteAddress}", "error":"attempt to access /api/openapi/rest without being super_user"`),new O3.ServerError("Forbidden",403))}function P3(e,t,r){let n=new URL(`${r.protocol}://${r.hostname}`);return r.hostname.toLowerCase()==="localhost"||r.hostname.match(/^[\d.:]+$/)?t?(n.port=t,n.protocol="https:"):e&&(n.port=e,n.protocol="http:"):(n.port="443",n.protocol="https:"),n.toString()}function Pwe(e,t){return e.body?.operation?.startsWith("restart")&&t.header("Connection","close"),(0,Co.handlePostRequest)(e,t)}function Lwe(e){let t=Fi.default.get(am.OPERATIONSAPI_NETWORK_TIMEOUT),r=Fi.default.get(am.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Awe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,http2:Fi.default.get(am.OPERATIONSAPI_NETWORK_HTTP2),https:e}}function Dwe(){let e=Fi.default.get(am.OPERATIONSAPI_NETWORK_CORS),t=Fi.default.get(am.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Iwe)&&(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}function Mwe(){return Fi.default.get(am.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??bwe}var g3,Fi,Bi,S3,T3,y3,R3,b3,A3,I3,w3,N3,C3,Co,O3,bwe,Awe,Iwe,am,om,L3=ne(()=>{g3=b(require("cluster")),Fi=b(ae());H();Bi=b(J()),S3=b(require("fastify")),T3=b(require("@fastify/cors")),y3=b(require("@fastify/compress")),R3=b(require("@fastify/static")),b3=b(sC()),A3=b(require("path")),I3=b(Rt()),w3=b(Ei()),N3=b(oe()),C3=b(Es());Hr();Co=b(kR());ko();ZN();O3=b(_e());Fi.default.initSync();bwe=6e4,Awe=1024*1024*1024,Iwe="TRUE",{CONFIG_PARAMS:am}=W;a(wwe,"operationsServer");a(Nwe,"setUp");a(Cwe,"buildServer");a(Owe,"restOpenAPIHandler");a(P3,"calculateRestHttpURL");a(Pwe,"handler");a(Lwe,"getServerOptions");a(Dwe,"getCORSOpts");a(Mwe,"getHeaderTimeoutConfig")});var DM={};ye(DM,{disableNATS:()=>Uwe,publishToStream:()=>jR,setNATSReplicator:()=>NM,setPublishToStream:()=>xwe,setSubscription:()=>LM,start:()=>vwe});function vwe(){KE.default.get(F.CLUSTERING_ENABLED)&&Fwe()}function Uwe(e=!0){x3=e}function xwe(e,t){jR=e,LM=t}function Fwe(){if(x3||process.env._DISABLE_NATS)return;let e=lt(),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];NM(s,r,i)}}Hl((r,n)=>{NM(r.tableName,r.databaseName,r),n&&F3(r)}),!D3&&(D3=!0)}function NM(e,t,r){if(t==="system"&&kwe.includes(e))return;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 ur{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){F3(i)}static subscribe(){let i=new ns;return LM(t,e,i),i}static subscribeOnThisThread(i){return i<(KE.default.get(F.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Bwe)}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 WR(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=B3;return i}a(n,"getNATSTransaction")}function F3(e){let t=KE.default.get(F.CLUSTERING_NODENAME);jR(`${OM.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,PM.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 M3,OM,PM,v3,U3,KE,zR,x3,jR,LM,Bwe,B3,D3,kwe,WR,CM,k3=ne(()=>{we();Ko();M3=b(Ht()),OM=b(pt()),PM=b(so());Fu();v3=b(DC()),U3=b(xn()),KE=b(ae());H();zR=b(J());a(vwe,"start");a(Uwe,"disableNATS");jR=M3.publishToStream,LM=v3.setSubscription;a(xwe,"setPublishToStream");Bwe=2;a(Fwe,"assignReplicationSource");kwe=["hdb_job","hdb_raw_analytics","hdb_info"];a(NM,"setNATSReplicator");a(F3,"publishSchema");WR=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=KE.default.get(F.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let o=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(zR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=o)),l.table===f&&l.operation===m?(o.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(jR(`${OM.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,PM.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw zR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},CM=class extends WR{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,U3.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};B3=new CM});async function V3({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await MM.get(e,{returnNonexistent:!0});i=new xM(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await MM.get(e);o&&o.delete()}i=new JR(e,t)}return n&&(n.id=e,n.user={username:t?.username},YE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function vM(){return QR++,QR>65500&&(QR=1),QR}function UM(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Bs.getMatch(n,"mqtt");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=new di(i.relativeURL);o.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return At(r,()=>s?t===void 0?c.delete(o,r):c.put(o,e.data,r):c.publish(o,e.data,r))}var q3,Wc,G3,$3,H3,MM,YE,QR,JR,xM,K3=ne(()=>{we();ja();q3=b(xn()),Wc=b(J());Ga();G3=b(tt()),$3=b(xL());Hr();Ag();H3=100,MM=Xe({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"}]}}]}),YE=Xe({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,G3.getWorkerIndex)()===0&&(async()=>{await $3.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of YE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Be.getUser(r.user.username));try{await UM(r,t,r)}catch{(0,Wc.warn)("Failed to publish will",t)}YE.delete(e.id)}})();a(V3,"getSession");QR=1;a(vM,"getNextMessageId");JR=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("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(S=>S.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:o,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};o&&(0,Wc.trace)("Resuming subscription from",s,"from",o);let p=Bs.getMatch(u,"mqtt");if(!p){let S=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw S.statusCode=404,S}m.url=p.relativeURL;let h;if(m.url.indexOf("+")>-1||(h=m.url.indexOf("#"))>-1){let S=m.url.slice(1);if(h--,h>-1&&h!==S.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,S.indexOf("+")===S.length-1)m.onlyChildren=!0,m.url="/"+S.slice(0,S.length-1);else{let y=S.split("/"),N;for(let ee=0;ee<y.length;ee++)if(y[ee].indexOf("+")>-1)if(y[ee]==="+")N=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&N)throw new Error("Filters can not be combined");let I=!0;y[y.length-1]==="#"&&(y.length--,I=!1),N&&(n=a(ee=>{let q=ee.id;if(!Array.isArray(q))if(q?.indexOf?.("/")>-1)q=q.split("/");else return!1;if(I&&q.length!==y.length)return!1;for(let k=0;k<y.length;k++)if(y[k]!=="+"&&y[k]!==q[k])return!1;return!0},"filter"));let $=y.indexOf("+");m.url="/"+($>-1?y.slice(0,$):y).concat("").join("/")}}else m.isCollection=!1;let E=p.path,g=p.Resource,R=await At(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let y=await g.subscribe(m,S);if(!y)return;if(!y[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let N=(async()=>{for await(let I of y)try{let $;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,$=this.needsAcknowledge(I)):(I.acknowledge?.(),$=vM());let ee=I.id;if(Array.isArray(ee)&&(ee=sd(ee)),ee==null&&(ee=""),await this.listener(E+"/"+ee,I.value,$,t)===!1)break;this.awaitingAcks?.size>H3?await new Promise(k=>setTimeout(k,this.awaitingAcks.size-H3)):await new Promise(setImmediate)}catch($){(0,Wc.warn)($)}})();return y});if(R)return R.topic=s,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=vM();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,{acknowledge:t.acknowledge})),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r.acknowledge())}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 UM(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();At(r,async()=>{try{if(!t){let n=await YE.get(this.sessionId);n?.doesExist()&&await UM(n,n.data,r)}}finally{await YE.delete(this.sessionId)}}).catch(n=>{(0,Wc.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(UM,"publish");xM=class extends JR{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.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=vM(),n={topic:t.topic,timestamp:t.localTime};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,Wc.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,q3.getNextMonotonicTime)()),(0,Wc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),MM.put(this.sessionRecord)}}});var BM={};ye(BM,{bypassAuth:()=>Hwe,start:()=>Gwe});function Hwe(){X3=!0}function Gwe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new J3.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);o.events.emit("connection",u),er.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=W3(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),o);u.on("message",p),u.on("close",h),u.on("error",E=>{er.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(o.events.emit("connection",u),er.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let p=u.getPeerCertificate(!0);if(p?.subject){let E=await ff(p,l);if(!E.valid)throw er.error?.("Certificate verification failed:",E.status,"for",p.subject.CN),new Error("Certificate revoked or verification failed")}let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,cm.get)(F.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&ZR.notify?.({username:d?.username,status:ci.SUCCESS,type:ka.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,cm.get)(F.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&ZR.error?.({username:h,status:ci.FAILURE,type:ka.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else er.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){o.events.emit("error",p,u),er.error?.(p)}else if(l.required)return er.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&qwe(u.remoteAddress)&&(d=await(0,z3.getSuperUser)(),er.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=W3(u,p=>u.write(p),null,d,o);u.on("data",f),u.on("close",m),u.on("error",p=>{er.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function W3(e,t,r,n,s){Y3||(Y3=!0,tp(f=>{XR>0&&f.push({metric:"mqtt-connections",connections:XR,byThread:!0})}));let i;XR++;let o,c={protocolVersion:4},l=(0,eb.parser)({protocolVersion:5});function u(f){l.parse(f)}a(u,"onMessage");function d(){XR--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),tn(!1,"connection","mqtt","disconnect"),er.debug?.("MQTT connection was closed",e.remoteAddress))}return a(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(y){e.close?.(1008,"Unauthorized"),er.info?.(y);return}let m=f.cmd;if(o)o.then&&await o;else if(m!=="connect"){er.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let p=f.topic,h=p?.indexOf("/",1),E=h>0?p.slice(0,h):p;Ve(f.length,"bytes-received",E,R(f),"mqtt");try{switch(o?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Be.getUser(f.username,f.password.toString(),r),(0,cm.get)(F.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&ZR.notify?.({username:n?.username,status:ci.SUCCESS,type:ka.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(j){return(0,cm.get)(F.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&ZR.error?.({username:f.username,status:ci.FAILURE,type:ka.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,j),tn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),tn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let j=e.deserialize||(e.deserialize=Fo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?j(f.will.payload):void 0,delete f.will.payload}o=V3({user:n,...f}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(j){return er.error?.(j),s.events.emit("auth-failed",f,e,j),tn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:j.code||5,returnCode:j.code||128})}s.events.emit("connected",o,e),tn(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let y=a(async(j,Y,le,fe)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",j);let te=j.indexOf("/",1),ge=te>0?j.slice(0,te):j;g({cmd:"publish",topic:j,payload:await S(Y),messageId:le||Math.floor(Math.random()*1e8),qos:fe.qos},ge);let be=e._socket??e;return be.writableNeedDrain?new Promise(Ye=>be.once("drain",Ye)):!be.closed}catch(te){return er.error?.(te),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(y),o.sessionWasPresent&&await o.resume();break;case"subscribe":let N=[];for(let j of f.subscriptions){let Y;try{let le=await o.addSubscription(j,j.qos>=1);Y=le?le.qos||0:c.protocolVersion<5?128:143}catch(le){s.events.emit("error",le,e,j,o),le.statusCode?le.statusCode===500?er.warn?.(le):er.info?.(le):er.error?.(le),Y=c.protocolVersion<5?128:le.statusCode===403?135:le.statusCode===404?143:128}N.push(Y)}await o.committed,g({cmd:"suback",granted:N,messageId:f.messageId});break;case"unsubscribe":{let j=[];for(let Y of f.unsubscriptions)j.push(o.removeSubscription(Y)?0:17);g({cmd:"unsuback",granted:j,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let I=f.qos===2?"pubrec":"puback",$=e.deserialize||(e.deserialize=Fo(r?.headers.get?.("content-type"))),q=(f.payload?.length||0)>0?$(f.payload):void 0,k;try{k=await o.publish(f,q)}catch(j){s.events.emit("error",j,e,f,o),er.warn?.(j),f.qos>0&&g({cmd:I,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:I,messageId:f.messageId,reasonCode:k===!1?144:0},f.topic);break;case"pubrec":g({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(f.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),tn(!0,"connection","mqtt","disconnect"),er.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(y){s.events.emit("error",y,e,f,o),er.error?.(y),g({cmd:"disconnect"})}function g(y,N){let I=(0,eb.generate)(y,c);t(I),Ve(I.length,"bytes-sent",N,R(y),"mqtt")}a(g,"sendPacket");function R(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}a(R,"packetMethodName");function S(y){return Bo(y,r)}a(S,"serialize")}),l.on("error",f=>{er.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var eb,z3,cm,j3,Q3,J3,ZR,er,X3,qwe,Y3,XR,Z3=ne(()=>{eb=require("mqtt-packet");K3();z3=b(Es());ko();is();Hr();cm=b(ae());H();j3=b(wr()),Q3=b(J()),J3=require("events");GT();ZR=(0,j3.loggerWithTag)("auth-event"),er=(0,Q3.forComponent)("mqtt"),X3=(0,cm.get)(F.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Hwe,"bypassAuth");qwe=a(e=>X3&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");a(Gwe,"start");XR=0;a(W3,"onSocket")});function tb(e,t){if(t?.includes(".."))throw new FM(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var FM,kM=ne(()=>{FM=class extends Error{static{a(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};a(tb,"resolveBaseURLPath")});function eX(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(o=>o[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var tX=ne(()=>{a(eX,"deriveCommonPatternBase")});function rb(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=a((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var HM=ne(()=>{a(rb,"deriveGlobOptions")});var rX,qM,WE,nX=ne(()=>{kM();tX();HM();rX=require("micromatch"),qM=class extends Error{static{a(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},WE=class{static{a(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=tb(this.name,this.config.urlPath),this.globOptions=rb(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new qM(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,rX.scan)(s).base),this.commonPatternBase=eX(this.patternBases)}}});function sX(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function Iu(e,t,r){t.startsWith("./")&&(t=t.slice(2));for(let n of e.patternBases)if(n.startsWith("./")&&(n=n.slice(2)),n!==""){if(r==="file"){if(t===n){let s=t.split("/");t=s[s.length-1];break}else if(sX(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(sX(n,t)){t=t.slice(n.length+1);break}}}return(0,iX.join)(e.baseURLPath,t)}var iX,GM=ne(()=>{iX=require("node:path");a(sX,"pathStartsWithBase");a(Iu,"deriveURLPath")});function oX(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var sb,aX,cX,$M,lX,uX,nb,dX=ne(()=>{sb=require("node:events");nX();aX=b(J()),cX=b(require("chokidar")),$M=require("node:path"),lX=require("node:fs/promises");GM();uX=require("micromatch"),nb=class extends sb.EventEmitter{static{a(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new WE(t,r,oX(n)),this.#r=s||aX.default.loggerWithTag(t),this.ready=(0,sb.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#n(...[t,r,n]){if(r===""&&(r="/"),!(0,uX.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,$M.join)(this.directory,r);switch(t){case"add":case"change":{let i=Iu(this.#e,r,"file");(0,lX.readFile)(s).then(o=>{let c={eventType:t,entryType:"file",contents:o,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=Iu(this.#e,r,"file"),o={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}case"addDir":case"unlinkDir":{let i=Iu(this.#e,r,"directory"),o={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}}}#s(t){this.emit("error",t)}#i(){this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,$M.join)(this.#e.directory,r));return this.#t=cX.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:a(r=>r!==this.#e.directory&&t.every(n=>!r.startsWith(n)),"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new WE(this.name,this.directory,oX(t)),this.#a()}};a(oX,"castConfig")});var ib,VM=ne(()=>{ib={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var ab,fX,mX,pX,hX,EX,KM,YM,WM,zM,jM,ob,_X=ne(()=>{ab=require("events"),fX=b(require("yaml")),mX=b(require("chokidar")),pX=require("node:fs/promises"),hX=require("util"),EX=b(J());VM();KM=class extends Error{static{a(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},YM=class extends Error{static{a(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},WM=class extends Error{static{a(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},zM=class extends Error{static{a(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},jM=class extends Error{static{a(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},ob=class extends ab.EventEmitter{static{a(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||EX.default.loggerWithTag(t),this.ready=(0,ab.once)(this,"ready"),this.#t=mX.default.watch(r,{persistent:!1}).on("add",this.#a.bind(this)).on("change",this.#a.bind(this)).on("error",this.#d.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#a.bind(this))}#a(){(0,pX.readFile)(this.#e,"utf-8").then(t=>{this.#n=fX.default.parse(t),this.#n&&this.#s in this.#n?this.#r?this.#f(this.#n[this.#s],this.#r):(this.#r=this.#n[this.#s],this.emit("ready",this.#r)):this.#r&&(this.#r=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#n?(this.#o(),this.emit("remove")):(this.#o(),this.emit("ready"));return}this.emit("error",t)})}#d(t){this.emit("error",new KM(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#o(),this.emit("remove")}#o(){this.#n=ib,this.#r=this.#n[this.#s]}#f(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let o=n.concat(s),c=this.#m(o);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(o,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#f(i,c,o):this.#u(o,i);continue}(0,hX.isDeepStrictEqual)(i,c)||this.#u(o,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#u(t,r){if(!this.#r)throw new YM;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new WM(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new zM(t,s);n=n[s]}if(n==null||typeof n!="object")throw new jM(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return structuredClone(this.#r)}getRoot(){return this.#n}}});var ub,gX,cb,lb,SX=ne(()=>{ub=require("node:events");dX();_X();gX=b(J());gD();cb=class extends Error{static{a(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},lb=class extends ub.EventEmitter{static{a(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=(0,gX.loggerWithTag)(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,ub.once)(this,"ready"),this.options=new ob(t,n,this.#i).on("error",this.#d.bind(this)).on("change",this.#f.bind(this)()).on("ready",this.#a.bind(this))}get logger(){return this.#i}get name(){return this.#r}get directory(){return this.#t}#a(){this.emit("ready")}#d(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#c(t){let r=new nb(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return a(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return t.files}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new cb);return}if(typeof t=="function"){if(this.#n)return this.#n.on("all",t);let s=this.#l();if(s)return this.#n=this.#c(s),this.#n.on("all",t);this.emit("error",new cb);return}let n=this.#c(t);return r?n.on("all",r):n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),U4()}}});function wu(e){return typeof e=="string"&&e.trim()!==""}function QM(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>wu(t))}function bX(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function $we(e){e.config.root&&zE.default.warn("Resource extension 'root' option is deprecated. Due to backwards compatibility reasons it does not act as assumed. The glob pattern will always be evaluated from the component directory root. The option is only used for the initial root directory handling. Please remove and modify the 'files' glob pattern instead.");let t=[];if(e.config.root&&typeof e.config.files!="string")throw new nv(e);let r=e.config.root;r&&(r.startsWith("/")&&(r=r.slice(1)),r.endsWith("/")||(r+="/"));let n=e.config.files;if(typeof n=="string"&&!n.includes("**/*")&&(n.indexOf("/*")>-1?r=n.slice(0,n.indexOf("/*")+1):n.indexOf("/")>-1&&(r=n.slice(0,n.lastIndexOf("/")+1))),r&&t.push(r),t.length===0){if(bX(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let o=(0,jE.join)(e.directory,i);db.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,o,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,o,e.resources))}return s}async function AX(e){let t=!1;if(t=await $we(e),t)return t;let r=await(0,TX.default)(e.globOptions.source,{cwd:e.directory,objectMode:!0,onlyFiles:e.globOptions.onlyFiles,onlyDirectories:e.globOptions.onlyDirectories,ignore:e.globOptions.ignore});for(let n of r){let s=(0,jE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=Iu(e,n.path,"directory");db.isMainThread&&e.module.setupDirectory&&(await e.module.setupDirectory(i,s,e.resources),t=!0),e.resources.isWorker&&e.module.handleDirectory&&(await e.module.handleDirectory(i,s,e.resources),t=!0)}else if(n.dirent.isFile()){let i=Iu(e,n.path,"file"),o=await(0,yX.readFile)(s);db.isMainThread&&e.module.setupFile?(await e.module.setupFile(o,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(o,i,s,e.resources),t=!0)}else zE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var db,TX,zE,jE,yX,RX,fb,ki,JM,XM,ZM,ev,tv,rv,nv,sv,iv,IX=ne(()=>{db=require("node:worker_threads"),TX=b(require("fast-glob")),zE=b(J());kM();HM();jE=require("node:path"),yX=require("node:fs/promises");GM();RX=require("micromatch"),fb=class{static{a(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!wu(this.config.files)&&!QM(this.config.files)&&!bX(this.config.files))throw new JM(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!QM(this.config.files.source)&&!wu(this.config.files.source))throw new XM(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new ZM(this);if(this.config.files.ignore!==void 0&&!QM(this.config.files.ignore)&&!wu(this.config.files.ignore))throw new ev(this)}if(this.config.root!==void 0&&!wu(this.config.root))throw new rv(this);if(this.config.path!==void 0&&!wu(this.config.path))throw new sv(this);if(this.config.path&&(zE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!wu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new iv(this);this.globOptions=rb(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new tv(this,r);return r.startsWith("/")&&(zE.default.warn("Leading '/' in 'files' glob pattern is deprecated. For backwards compatibility purposes, it is currently transformed to the relative path of the component, but in the future will result in an error. Paths are automatically derived from the root of the component directory. Please remove (e.g. '/web/*' -> 'web/*')."),r=r==="/"?".":r.slice(1)),r}),this.patternBases=this.globOptions.source.map(r=>(0,RX.scan)(r).base),this.baseURLPath=tb(this.name,this.config.urlPath)}},ki=class extends Error{static{a(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,jE.basename)(r.directory)}) ${t}`)}},JM=class extends ki{static{a(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},XM=class extends ki{static{a(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},ZM=class extends ki{static{a(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},ev=class extends ki{static{a(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},tv=class extends ki{static{a(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},rv=class extends ki{static{a(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},nv=class extends ki{static{a(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},sv=class extends ki{static{a(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},iv=class extends ki{static{a(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};a(wu,"isNonEmptyString");a(QM,"isArrayOfNonEmptyStrings");a(bX,"isObject");a($we,"handleRoots");a(AX,"processResourceExtensionComponent")});var eR={};ye(eR,{getComponentName:()=>Jy,loadComponent:()=>Eb,loadComponentDirectories:()=>OX,setErrorReporter:()=>Kwe});function OX(e,t){t&&(av=t),e&&(dv=e);let r=[];if((0,Kt.existsSync)(ov)){let s=(0,Kt.readdirSync)(ov,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,zr.join)(ov,o);r.push(Eb(c,av,Vb,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Eb(n,av,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{CX=!0})}function Kwe(e){pb=e}function Ywe(e){return new Promise((t,r)=>{let n=setTimeout(()=>{Aa.primaryStore.unlock(e,0),r(new Error("symlinking harperdb module timed out"))},1e4);if(Aa.primaryStore.attemptLock(e,0,()=>{clearTimeout(n),t()}))try{let s=(0,zr.join)(e,"node_modules");(0,Kt.existsSync)(s)||(0,Kt.mkdirSync)(s);let i=(0,zr.join)(s,"harperdb");if((0,Kt.existsSync)(i)){if((0,Kt.realpathSync)(i)===(0,Kt.realpathSync)(uv.PACKAGE_ROOT))return t();(0,Kt.rmSync)(i,{recursive:!0,force:!0})}(0,Kt.symlinkSync)(uv.PACKAGE_ROOT,i,"dir"),t()}finally{Aa.primaryStore.unlock(e,0)}})}function PX(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;return Aa.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(PX(e,t))})?Promise.race([t.handleApplication(e),new Promise((i,o)=>setTimeout(()=>o(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{Aa.primaryStore.unlock(e.name,0)}):new Promise((i,o)=>{n=i,s=setTimeout(()=>{o(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)})})}async function Eb(e,t,r,n,s,i){let o=(0,Kt.realpathSync)(e);if(mb.has(o))return mb.get(o);mb.set(o,!0),s&&(dv=s);try{let c,l=(0,zr.join)(e,"harperdb-config.yaml");if((0,Kt.existsSync)(l)?c=n?(0,_b.getConfigObj)():(0,lv.parseDocument)((0,Kt.readFileSync)(l,"utf8")).toJSON():!n&&(0,Kt.existsSync)(l=(0,zr.join)(e,"config.yaml"))?c=(0,lv.parseDocument)((0,Kt.readFileSync)(l,"utf8")).toJSON():c=ib,!n)try{await Ywe(e)}catch(m){Oa.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&Oa.default.error('You may need to enable developer mode in "Settings" / "System" (or "Update & Security") / "For developers", in order to enable symlinks so components can use `import from "harperdb"`')}let u=hb,d={};for(let m in c){let p=n?m:`${(0,zr.basename)(e)}.${m}`;hb=m;let h=c[m];if(!h)continue;co.loading(p);let E,g=h.package;try{if(g){let I=null;if(n)I=(0,zr.join)(e,"components",m);else{let $=e;for(I=(0,zr.join)($,"node_modules",m);!(0,Kt.existsSync)(I);){if($=(0,zr.dirname)($),$.length<(0,NX.getHdbBasePath)().length){I=null;break}I=(0,zr.join)($,"node_modules",m)}}if(I)E=await Eb(I,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=Vwe[m];if(!E){co.loaded(p,`Application component '${p}' processed`);continue}let R=a(I=>(I.origin=r,Xe(I)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,y=S?.securePort||S?.https&&S.port,N=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let I=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw co.failed(p,I,`Component '${p}' failed to load`),I}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&Oa.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let I=new lb(m,e,l,t,Be);await PX(I,E),co.loaded(p,`Component '${p}' loaded successfully`);continue}if(cv.isMainThread&&(E=await E.startOnMainThread?.({server:Be,ensureTable:R,port:N,securePort:y,resources:t,...h})||E,n&&S))for(let I of[N,y])try{if(+I&&!wX.includes(I)){let $=fv.get(F.HTTP_SESSIONAFFINITY);$&&Oa.default.warn("Session affinity is not recommended and may cause memory leaks"),($||!kS)&&(wX.push(I),HL(I,$))}}catch($){console.error("Error listening on socket",I,$,m)}if(t.isWorker&&(E=await E.start?.({server:Be,ensureTable:R,port:N,securePort:y,resources:t,...h})||E),dv.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let I=new fb({config:h,name:m,directory:e,module:E,resources:t});d[m]=await AX(I)}co.loaded(p,`Component '${p}' loaded successfully`)}catch(R){R.message=`Could not load component '${m}' for application '${(0,zr.basename)(e)}' due to: ${R.message}`,pb?.(R),((0,QE.getWorkerIndex)()===0?console:Oa.default).error(R),t.set(h.path||"/",new _l(R),null,!0),co.failed(p,R,`Could not load component '${p}'`)}}if(hb=u,cv.isMainThread&&!CX&&i&&(0,QE.watchDir)(e,async()=>OX()),c.extensionModule||c.pluginModule){let m=await US((0,zr.join)(e,c.extensionModule||c.pluginModule));return mb.set(o,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;pb?.(new Error(m)),((0,QE.getWorkerIndex)()===0?console:Oa.default).error(m),co.failed((0,zr.basename)(e),m)}for(let[m,p]of Object.entries(d))p||Oa.default.warn(`Component ${m} from (${(0,zr.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,pb?.(c),t.set("",new _l(c))}}var Kt,zr,cv,lv,fv,uv,Oa,QE,NX,_b,ov,dv,CX,av,Vwe,wX,mb,pb,hb,Jy,uE=ne(()=>{Kt=require("node:fs"),zr=require("node:path"),cv=require("node:worker_threads"),lv=require("yaml"),fv=b(ae()),uv=b(Rt());H();FG();zG();c$();p$();h$();P$();c3();l3();d3();Oa=b(J());_3();QE=b(tt());YN();Hr();we();GL();NX=b(ae());L3();uR();k3();Ss();Z3();_b=b(St());rh();lI();SX();IX();vL();bE();Bp();VM();ov=(0,_b.resolvePath)(fv.get(F.COMPONENTSROOT)),dv=new Map;a(OX,"loadComponentDirectories");Vwe={REST:qS,rest:qS,graphql:FN,graphqlSchema:xN,roles:KN,jsResource:WN,fastifyRoutes:yM,login:jN,static:bM,operationsApi:wM,customFunctions:{},http:Qy,clustering:DM,replication:na,authentication:EE,mqtt:BM,loadEnv:AM,logging:Oa.default,dataLoader:IM},wX=[],mb=new Map;a(Kwe,"setErrorReporter");Jy=a(()=>hb,"getComponentName");a(Ywe,"symlinkHarperModule");a(PX,"sequentiallyHandleApplication");a(Eb,"loadComponent")});var tR=v((s1e,LX)=>{var{isMainThread:mv}=require("worker_threads"),{getTables:Wwe}=(we(),M(mt)),{loadComponentDirectories:zwe,loadComponent:jwe}=(uE(),M(eR)),{resetResources:Qwe}=(ja(),M(uI)),Jwe=St(),{dirname:Xwe}=require("path"),{getConnection:Zwe}=Ht(),eNe=ae(),{CONFIG_PARAMS:tNe}=(H(),M(W)),{loadCertificates:rNe}=ys(),{installApplications:nNe}=(pR(),M(mR)),{loadAndWatchLicensesDir:sNe}=(iE(),M(Vy)),pv=new Map;async function iNe(e=!1){!mv&&eNe.get(tNe.CLUSTERING_ENABLED)&&Zwe();try{mv&&await nNe()}catch(n){console.error(n)}let t=Qwe();Wwe(),t.isWorker=e,mv&&sNe(),await rNe(),await jwe(Xwe(Jwe.getConfigFilePath()),t,"hdb",!0,pv),await zwe(pv,t);let r=[];for(let[n]of pv)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(iNe,"loadRootComponents");LX.exports.loadRootComponents=iNe});var tt=v((o1e,qi)=>{"use strict";E_();var{Worker:oNe,MessageChannel:aNe,parentPort:Oo,isMainThread:Sv,threadId:cNe,workerData:Po}=require("worker_threads"),{PACKAGE_ROOT:lNe}=Rt(),{join:UX,isAbsolute:uNe,extname:dNe}=require("path"),{server:xX}=(Hr(),M(Im)),{watch:fNe,readdir:mNe}=require("fs/promises"),{totalmem:DX}=require("os"),lm=(H(),M(W)),BX=ae(),Hi=J(),{randomBytes:pNe}=require("crypto"),{_assignPackageExport:hNe}=li(),MX=1024*1024,Pa=[],ii=[],ENe=50,Tv=1e4,_Ne="restart",FX="request_thread_info",kX="resource_report",HX="thread_info",qX="added-port",gNe="ack",hv;hNe("threads",ii);qi.exports={startWorker:Ev,restartWorkers:Rv,shutdownWorkers:WX,shutdownWorkersNow:bNe,workers:Pa,setMonitorListener:LNe,onMessageFromWorkers:ANe,onMessageByType:jX,broadcast:wNe,broadcastWithAcknowledgement:CNe,setChildListenerByType:RNe,getWorkerIndex:GX,getWorkerCount:$X,getTicketKeys:KX,setMainIsWorker:TNe,setTerminateTimeout:SNe,restartNumber:Po?.restartNumber||1};ii.onMessageByType=jX;ii.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ii.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};qi.exports.whenThreadsStarted=new Promise(e=>{qi.exports.threadsHaveStarted=e});var yv;function SNe(e){Tv=e}a(SNe,"setTerminateTimeout");function GX(){return Po?Po.workerIndex:yv?0:void 0}a(GX,"getWorkerIndex");function $X(){return Po?Po.workerCount:yv?1:void 0}a($X,"getWorkerCount");function TNe(e){yv=e,qi.exports.threadsHaveStarted()}a(TNe,"setMainIsWorker");var VX=1,gb;function KX(){return gb||(gb=Sv?pNe(48):Po.ticketKeys,gb)}a(KX,"getTicketKeys");Object.defineProperty(xX,"workerIndex",{get(){return GX()}});Object.defineProperty(xX,"workerCount",{get(){return $X()}});var YX={[FX](e,t){ONe(t)},[kX](e,t){PNe(t,e)}};function Ev(e,t={}){let r=process.constrainedMemory?.()||DX();r=Math.min(r,DX(),2e4*MX);let n=BX.get(lm.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/MX/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of ii){let u=new aNe;u.existingPort=l,i.push(u),o.push(u.port2)}dNe(e)||(e+=".js");let c=new oNe(uNe(e)?e:UX(lNe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:VX=t.threadCount,name:t.name,restartNumber:qi.exports.restartNumber,ticketKeys:KX()},transferList:o,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:qX,port:l,threadId:c.threadId},[l]);return Tb(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>Ev(e,t),c.on("error",l=>{Hi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Pa.splice(Pa.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<ENe?(t.unexpectedRestarts=c.unexpectedRestarts+1,Ev(e,t)):Hi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{YX[l.type]?.(l,c)}),Pa.push(c),MNe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(Ev,"startWorker");var yNe=[lm.THREAD_TYPES.HTTP];async function Rv(e=null,t=Math.max(VX>3,1),r=!0){if(Sv){try{process.chdir(process.cwd())}catch(o){Hi.error("Unable to reestablish current working directory",o)}if(r){let{loadRootComponents:o}=tR();await o()}qi.exports.restartNumber++,t<1&&(t=t*Pa.length);let n=[],s=[];for(let o of Pa.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Hi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:qi.exports.restartNumber,type:lm.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=yNe.indexOf(o.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Hi.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},Tv*2).unref();o.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),u()})});if(n.push(l),c&&r){let u=o.startCopy(),d=new Promise(f=>{let m=a(p=>{p.type===lm.ITC_EVENT_TYPES.CHILD_STARTED&&(Hi.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Hi.trace("Waiting for worker to start",u.threadId),u.on("message",m)});s.push(d),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}=Wf();r&&(e==="http"||!e)&&BX.get(lm.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Oo.postMessage({type:_Ne,workerType:e})}a(Rv,"restartWorkers");function RNe(e,t){YX[e]=t}a(RNe,"setChildListenerByType");function WX(e){return Rv(e,1/0,!1)}a(WX,"shutdownWorkers");function bNe(e){return WX(e),Promise.all(Pa.map(t=>t.terminate()))}a(bNe,"shutdownWorkersNow");var zX=[];function ANe(e){zX.push(e)}a(ANe,"onMessageFromWorkers");var _v=new Map;function jX(e,t){let r=_v.get(e);r||_v.set(e,r=[]),r.push(t)}a(jX,"onMessageByType");var INe=10;async function wNe(e,t){let r=0;for(let n of ii)try{n.postMessage(e),r++>INe&&(r=0,await new Promise(setImmediate))}catch(s){Hi.error("Unable to send message to worker",s)}t&&JX(e,null)}a(wNe,"broadcast");var Sb=new Map,NNe=1;function CNe(e){return new Promise(t=>{let r=0;for(let n of ii)try{let s=NNe++,i=a(()=>{Sb.delete(s),--r===0&&t(),n!==Oo&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Sb.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Sb)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Hi.error("Unable to send message to worker",s)}r===0&&t()})}a(CNe,"broadcastWithAcknowledgement");function ONe(e){e.postMessage({type:HX,workers:QX()})}a(ONe,"sendThreadInfo");function QX(){let e=Date.now();return Pa.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(QX,"getChildWorkerInfo");function PNe(e,t){e.resources=t,e.resources.updated=Date.now()}a(PNe,"recordResourceReport");var gv;function LNe(e){gv=e}a(LNe,"setMonitorListener");var DNe=1e3,vX=!1;function MNe(){vX||(vX=!0,setInterval(()=>{for(let e of Pa){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}gv&&gv()},DNe).unref())}a(MNe,"startMonitoring");var vNe=1e3;if(Oo&&Po?.addPorts){Tb(Oo);for(let e=0,t=Po.addPorts.length;e<t;e++){let r=Po.addPorts[e];r.threadId=Po.addThreadIds[e],Tb(r)}setInterval(()=>{let e=process.memoryUsage();Oo.postMessage({type:kX,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},vNe).unref(),hv=a(()=>new Promise((e,t)=>{Oo.on("message",r),Oo.postMessage({type:FX});function r(n){n.type===HX&&(Oo.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else hv=QX;qi.exports.getThreadInfo=hv;function Tb(e,t){ii.push(e),e.on("message",r=>{if(r.type===qX)r.port.threadId=r.threadId,Tb(r.port);else if(r.type===gNe){let n=Sb.get(r.id);n&&n()}else JX(r,e)}).on("close",()=>{ii.splice(ii.indexOf(e),1)}).on("exit",()=>{ii.splice(ii.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Tb,"addPort");function JX(e,t){for(let n of zX)n(e,t);let r=_v.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Hi.error(s)}}a(JX,"notifyMessageListeners");if(Sv){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await mNe(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(UX(s,o.name));try{for await(let{filename:o}of fNe(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await Rv(),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)}},"watchDir");qi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else Oo.on("message",async e=>{let{type:t}=e;t===lm.ITC_EVENT_TYPES.SHUTDOWN&&(qi.exports.restartNumber=e.restartNumber,Oo.unref(),setTimeout(()=>{Hi.warn("Thread did not voluntarily terminate",cNe),process.exit(0)},Tv).unref())})});var n6=v((u1e,r6)=>{"use strict";var{promises:um,createReadStream:UNe,createWriteStream:xNe}=require("fs"),{createGzip:BNe}=require("zlib"),{promisify:FNe}=require("util"),{pipeline:kNe}=require("stream"),HNe=FNe(kNe),Av=require("path"),t6=ae();t6.initSync();var yb=J(),{CONFIG_PARAMS:qNe,ITC_EVENT_TYPES:c1e}=(H(),M(W)),{onMessageFromWorkers:l1e}=tt(),{convertToMS:XX}=oe(),{onStorageReclamation:GNe}=(eg(),M(Hx)),$Ne=6e4,VNe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",KNe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",bv,ZX;r6.exports=YNe;function YNe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:o}){if(s===!1)return;let c=0;if(GNe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(VNe);if(!i)throw new Error(KNe);let l;if(t){let f=t.slice(-1),m=t.slice(0,-1);f==="G"?l=m*1e9:f==="M"?l=m*1e6:l=m*1e3}let u;r&&(u=XX(r));let d;return bv=Date.now(),yb.trace("Log rotate enabled, maxSize:",t,"interval:",r),ZX=setInterval(async()=>{if(l){let f;f=await um.stat(e.path),f.size>=l&&(d=await e6(e.path,i))}if(u&&Date.now()-bv>=u&&(d=await e6(e.path,i),bv=Date.now()),n||c){let f=XX(n??"1M")/(1+c);c=0;let m=await um.readdir(i);for(let p of m)try{let h=await um.stat(Av.join(i,p));Date.now()-h.mtimeMs>f&&await um.unlink(Av.join(i,p))}catch(h){yb.error("Error trying to remove log",p,h)}}},o??$Ne).unref(),{end(){clearInterval(ZX)},getLastRotatedLogPath(){return d}}}a(YNe,"logRotator");async function e6(e,t){let r=t6.get(qNe.LOGGING_ROTATION_COMPRESS),n=Av.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await um.rename(e,n),r&&(e=n,n+=".gz",await HNe(UNe(e),BNe(),xNe(n)),await um.unlink(e)),yb.closeLogFile(),yb.notify(`hdb.log rotated, old log moved to ${n}`),n}a(e6,"moveLogFile")});var c6={};ye(c6,{RootConfigWatcher:()=>Iv});var s6,i6,o6,Rb,a6,Iv,l6=ne(()=>{s6=b(require("chokidar")),i6=require("node:fs/promises"),o6=b(St()),Rb=require("node:stream"),a6=require("yaml"),Iv=class extends Rb.EventEmitter{static{a(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,o6.getConfigFilePath)(),this.ready=(0,Rb.once)(this,"ready"),this.#t=s6.default.watch(this.#e,{persistent:!1}).on("add",this.handleChange.bind(this)).on("change",this.handleChange.bind(this)).on("error",this.handleError.bind(this))}handleError(t){this.emit("error",t)}handleChange(){(0,i6.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,a6.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var J=v((h1e,Pb)=>{"use strict";var La=require("fs-extra"),{workerData:WNe,threadId:zNe,isMainThread:h6}=require("worker_threads"),ZE=require("path"),E6=require("yaml"),_6=require("properties-reader"),jr=(H(),M(W)),u6=el(),jNe=require("os"),{PACKAGE_ROOT:Mv}=Rt(),{_assignPackageExport:QNe}=li(),{Console:JNe}=require("console"),Nv=process.env.IS_SCRIPTED_SERVICE?function(){}:process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),d6=new Map,{join:Da}=ZE,f6=1e4,lr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},XNe={STDOUT:"stdOut",STDERR:"stdErr"},p1e=Da(Mv,"logs"),ZNe=Da(Mv,"config/yaml/",jr.HDB_DEFAULT_CONFIG_FILE),eCe=1e4,e_,t_,bb,Lo,Cv,wv,Ib,vt,es,wb,Nb,dm,XE,JE;function Ab(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=ZE.dirname(n)):t.root?n=Da(t.root,Cv):(n=vt.path,t.root||(t.root=ZE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=lr[t.level]??vt?.level??lr.info,g6(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(vt.path===e.path&&r)}a(Ab,"updateLogger");function g6(e){let t=e.conditional??(e.conditional={});t.notify=lr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=lr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=lr.error>=e.level?e.error.bind(e):void 0,t.warn=lr.warn>=e.level?e.warn.bind(e):void 0,t.info=lr.info>=e.level?e.info.bind(e):void 0,t.debug=lr.debug>=e.level?e.debug.bind(e):void 0,t.trace=lr.trace>=e.level?e.trace.bind(e):void 0}a(g6,"updateConditional");async function Ov(){JE||(JE=new TCe,await JE.ready,JE.on("change",Ov));let e=JE.config,t=e.logging??{};Ab(vt,t),Ib=vt.path,e_=t.console??!1,t.external&&Ab(es,t.external);for(let r in e){let n=e[r];n.logging?Ab(vt.forComponent(r),n.logging,r):vt.hasComponent(r)&&Ab(vt.forComponent(r),t,r)}}a(Ov,"updateLogSettings");var Pv=class extends JNe{static{a(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){Dn="trace",this.level<=lr.trace&&super.info(...t),Dn="info"}debug(...t){Dn="debug",this.level<=lr.debug&&super.info(...t),Dn="info"}info(...t){Dn="info",this.level<=lr.info&&super.info(...t),Dn="info"}warn(...t){Dn="warn",this.level<=lr.warn&&super.warn(...t),Dn="info"}error(...t){Dn="error",this.level<=lr.error&&super.error(...t),Dn="info"}fatal(...t){dm=!0;try{Dn="fatal",this.level<=lr.fatal&&super.error(...t),Dn="info"}finally{dm=!1}}notify(...t){dm=!0;try{Dn="notify",this.level<=lr.notify&&super.info(...t),Dn="info"}finally{dm=!1}}withTag(t){return T6(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};XE===void 0&&S6();Pb.exports={notify:lCe,fatal:uCe,error:Dv,warn:dCe,info:oCe,debug:cCe,trace:aCe,logLevel:Lo,loggerWithTag:T6,suppressLogging:sCe,initLogSettings:S6,logCustomLevel:fCe,closeLogFile:y6,createLogger:Ob,logsAtLevel:rCe,getLogFilePath:a(()=>Ib,"getLogFilePath"),forComponent:a(e=>vt.forComponent(e),"forComponent"),setMainLogger:gCe,setLogLevel:pCe,OUTPUTS:XNe,AuthAuditLog:SCe,start:Ov,startOnMainThread:Ov,errorToString:_Ce,disableStdio:tCe};function tCe(){Nv=a(function(){},"nativeStdWrite")}a(tCe,"disableStdio");Pb.exports.externalLogger={notify(...e){es.notify(...e)},fatal(...e){es.fatal(...e)},error(...e){es.error(...e)},warn(...e){es.warn(...e)},info(...e){es.info(...e)},debug(...e){es.debug(...e)},trace(...e){es.trace(...e)},withTag(e){return es.withTag(e)},loggerWithTag(e){return es.withTag(e)}};QNe("logger",Pb.exports.externalLogger);function rCe(e){return lr[Lo]<=lr[e]}a(rCe,"logsAtLevel");function S6(e=!1){try{if(XE===void 0||e){y6();let t=mCe(),r=u6(["ROOTPATH"]);try{XE=_6(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!La.pathExistsSync(Da(r.ROOTPATH,jr.HDB_CONFIG_FILE)))throw s}let n;if({level:Lo,configLogPath:wv,toFile:t_,logConsole:e_,rotation:n,toStream:bb}=hCe(r.ROOTPATH?Da(r.ROOTPATH,jr.HDB_CONFIG_FILE):XE.get("settings_path")),Cv=jr.LOG_NAMES.HDB,Ib=Da(wv,Cv),vt=Ob({path:Ib,level:Lo,stdStreams:bb,rotation:n}),es=vt.forComponent("external"),es.tag=null,h6)try{require("segfault-handler").registerHandler(Da(wv,"crash.log"))}catch{}}}catch(t){if(XE=void 0,t.code===jr.NODE_ERROR_CODES.ENOENT||t.code===jr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=u6(Object.keys(jr.CONFIG_PARAM_MAP),!0);for(let s in r){let i=jr.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let o=r[s];if(i===jr.CONFIG_PARAMS.LOGGING_LEVEL){Lo=o;continue}i===jr.CONFIG_PARAMS.LOGGING_CONSOLE&&(e_=i)}let{defaultLevel:n}=ECe();t_=!1,bb=!0,Lo=Lo===void 0?n:Lo,vt=Ob({level:Lo}),es=vt.forComponent("external"),es.tag=null;return}throw Dv("Error initializing log settings"),Dv(t),t}process.env.DEV_MODE&&(bb=!0),nCe()}a(S6,"initLogSettings");var zc=!0;function nCe(){t_&&(process.stdout.write=function(e){return typeof e=="string"&&zc&&e_&&(e=e.toString(),e[e.length-1]===`
|
|
132
|
+
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(KRe,"parseNPMStdErr");function YRe(e){let t=SR.object({projects:SR.array().min(1).items(SR.string()).required(),dry_run:SR.boolean().default(!1)});return HRe.validateBySchema(e,t)}a(YRe,"modulesValidator")});var pD={};ye(pD,{describeMetric:()=>P4,describeMetricOp:()=>mD,get:()=>C4,getOp:()=>dD,listMetrics:()=>O4,listMetricsOp:()=>fD});async function zRe(e){return(await ag().get(e)).hostname}function I4(e,t){return e.length===0||e.includes(t)}function dD(e){return TE.trace?.("get_analytics request:",e),C4(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function N4(e){return"conditions"in e?{...e,conditions:e.conditions.map(N4)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function C4(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(N4));let o=t??[];I4(o,"id")||o.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i,allowConditionsOnDynamicAttributes:!0};return o.length>0&&(c.select=o),TE.trace?.("get_analytics hdb_analytics.search request:",JSON.stringify(c)),(await databases.system.hdb_analytics.search(c)).map(async u=>{let d=u.id[1];return u.id=u.id[0],I4(o,"node")&&(TE.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await zRe(d)),TE.trace?.("get_analytics result:",JSON.stringify(u)),u})}function fD(e){return O4(e.metric_types)}async function O4(e=["builtin"]){let t=[],r=Object.values(Go);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,o=await databases.system.hdb_analytics.search(s);for await(let c of o)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function mD(e){return P4(e.metric)}async function P4(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let o in s)n.push({name:o,type:typeof s[o]});let i={attributes:n};return TE.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var w4,WRe,TE,hD=se(()=>{w4=b(J());qA();GA();({forComponent:WRe}=w4.default),TE=WRe("analytics").conditional;a(zRe,"lookupHostname");a(I4,"isSelected");a(dD,"getOp");a(N4,"conformCondition");a(C4,"get");a(fD,"listMetricsOp");a(O4,"listMetrics");a(mD,"describeMetricOp");a(P4,"describeMetric")});var TR,yR,yE,RR=se(()=>{TR={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},yR=Object.keys(TR),yE="primary"});function D4(e){return L4.validateBySchema(e,XRe)}var RE,L4,jRe,QRe,JRe,XRe,M4=se(()=>{RE=b(require("joi")),L4=b(ot());RR();jRe=yR,QRe=Object.entries(TR).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),JRe=a(()=>{let e=RE.default.string().min(1).max(512);return Object.entries(TR).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:RE.default.string().valid(...r.allowedValues).messages({"any.only":QRe[t]})}))}),e.required()},"createStatusValidationSchema"),XRe=RE.default.object({id:RE.default.string().valid(...jRe).required(),status:JRe()});a(D4,"validateStatus")});function v4(){ED||(ED=Aa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),_D=new Uint8Array(ED))}function U4(){v4(),_D[0]=1}function x4(){return v4(),_D[0]===1}var ED,_D,gD=se(()=>{bE();a(v4,"ensureInitialized");a(U4,"requestRestart");a(x4,"restartNeeded")});var bD={};ye(bD,{DEFAULT_STATUS_ID:()=>yE,STATUS_IDS:()=>yR,Status:()=>Aa,clear:()=>TD,get:()=>yD,set:()=>RD});function IE(){return SD||(SD=Xe({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),SD}function TD({id:e}){return AE.debug?.("clearStatus",e),IE().delete(e)}async function ebe(){AE.debug?.("getAllStatus");let e=IE().get({}),t=await xp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=x4();return{systemStatus:e,componentStatus:r,restartRequired:n}}function yD({id:e}){return e?(AE.debug?.("getStatus",e),IE().get(e)):(AE.debug?.("getStatus","all"),ebe())}function RD({status:e,id:t=yE}){let r=D4({status:e,id:t});if(r)throw(0,bR.handleHDBError)(r,r.message,ZRe.BAD_REQUEST);return AE.debug?.("setStatus",t,e),IE().put(t,{status:e})}var bR,B4,ZRe,SD,Aa,AE,bE=se(()=>{we();bR=b(_e()),B4=b(wr());M4();RR();Bp();gD();RR();({HTTP_STATUS_CODES:ZRe}=bR.hdbErrors);a(IE,"getStatusTable");Aa={get primaryStore(){return IE().primaryStore}},AE=(0,B4.loggerWithTag)("status");a(TD,"clearStatus");a(ebe,"getAllStatus");a(yD,"getStatus");a(RD,"setStatus")});var ND={};ye(ND,{getFingerprint:()=>ID,getRegistrationInfo:()=>AD,setLicense:()=>wD});function AD(){return{version:F4.packageJson.version,deprecated:!0}}function ID(){return{message:"this-is-deprecated",deprecated:!0}}function wD(){return{deprecated:!0}}var F4,CD=se(()=>{F4=b(Rt());a(AD,"getRegistrationInfo");a(ID,"getFingerprint");a(wD,"setLicense")});var H4=v((NGe,k4)=>{"use strict";var wE=require("alasql"),Eu=require("recursive-iterator"),Di=J(),tbe=oe(),NE=(H(),M(W)),OD=class{static{a(this,"sqlStatementBucket")}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,nbe(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=>NE.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=>!NE.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][NE.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=rbe(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(o).filter(u=>!NE.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new wE.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function rbe(e){return e.filter(t=>t[NE.PERMS_CRUD_ENUM.READ])}a(rbe,"filterReadRestrictedAttrs");function nbe(e,t,r,n,s){sbe(e,t,r,n,s)}a(nbe,"interpretAST");function CE(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(CE,"addSchemaTableToMap");function sbe(e,t,r,n,s){if(!e){Di.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof wE.yy.Insert?cbe(e,t,r):e instanceof wE.yy.Select?ibe(e,t,r,n,s):e instanceof wE.yy.Update?obe(e,t,r):e instanceof wE.yy.Delete?abe(e,t,r):Di.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(sbe,"getRecordAttributesAST");function ibe(e,t,r,n,s){if(!e){Di.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(tbe.isEmptyOrZeroLength(i)){Di.error("No schema specified");return}e.from.forEach(c=>{CE(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),CE(c.table,t,r,n,s)});let o=new Eu(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{Di.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new Eu(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let d=u.tableid?u.tableid:l;if(!t.get(i).has(d))if(r.has(d))d=r.get(d);else{Di.info(`table specified as ${d} not found.`);continue}t.get(i).get(d).indexOf(u.columnid)<0&&t.get(i).get(d).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Eu(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,f=s.get(d);if(!t.get(f).has(d))if(r.has(d))d=r.get(d);else{Di.info(`table specified as ${d} not found.`);continue}t.get(f).get(d).indexOf(u.columnid)<0&&t.get(f).get(d).push(u.columnid)}}),e.order){let c=new Eu(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,d=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(d).has(u))if(r.has(u))u=r.get(u);else{Di.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}a(ibe,"getSelectAttributes");function obe(e,t,r){if(!e){Di.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Eu(e.columns),s=e.table.databaseid;CE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&PD(e.table.tableid,s,i.columnid,t,r)}a(obe,"getUpdateAttributes");function abe(e,t,r){if(!e){Di.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Eu(e.where),s=e.table.databaseid;CE(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&PD(e.table.tableid,s,i.columnid,t,r)}a(abe,"getDeleteAttributes");function cbe(e,t,r){if(!e){Di.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Eu(e.columns),s=e.into.databaseid;CE(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&PD(e.into.tableid,s,i.columnid,t,r)}a(cbe,"getInsertAttributes");function PD(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(PD,"pushAttribute");k4.exports=OD});var NR=v((OGe,nQ)=>{"use strict";var LD=_n(),AR=Sn(),Os=Mh(),LE=dc(),DD=rc(),lbe=FO(),ube=eY(),DE=Es(),IR=eh(),Mr=J(),dbe=$O(),fbe=cy(),mbe=EP(),pbe=uy(),hbe=SP(),Ebe=TP(),_be=bP(),gbe=IP(),MD=hy(),Ia=oe(),$4=Wf(),Pn=(H(),M(W)),V4=U2(),Sbe=Bh(),K4=(Vd(),M(ah)),Y4=(uR(),M(EE)),W4=St(),yr=iD(),z4=gR(),Tbe=uD(),Qf=ys(),j4=(Tf(),M(Sf)),vD=(hD(),M(pD)),UD=(bE(),M(bD)),Q4=(iE(),M(Vy)),xD=(CD(),M(ND)),J4=IC(),{handleHDBError:Xn,hdbErrors:X4}=_e(),{HDB_ERROR_MSGS:fn,HTTP_STATUS_CODES:OE}=X4,Z=new Map,Z4="delete",Vc="insert",ti="read",_u="update",PE="describe",q4=LE.describeSchema.name,G4=LE.describeTable.name,eQ={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},ybe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},Rbe="catchup",bbe="handleGetJob",Abe="handleGetJobsByStartDate",wR={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Ibe=[Os.createTable.name,Os.createAttribute.name,Os.dropTable.name,Os.dropAttribute.name],tQ={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},ne=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};Z.set(LD.insert.name,new ne(!1,[Vc]));Z.set(LD.update.name,new ne(!1,[_u]));Z.set(LD.upsert.name,new ne(!1,[Vc,_u]));Z.set(AR.searchByConditions.name,new ne(!1,[ti]));Z.set(AR.searchByHash.name,new ne(!1,[ti]));Z.set(AR.searchByValue.name,new ne(!1,[ti]));Z.set(AR.search.name,new ne(!1,[ti]));Z.set(Os.createSchema.name,new ne(!0,[]));Z.set(Os.createTable.name,new ne(!0,[]));Z.set(Os.createAttribute.name,new ne(!1,[Vc]));Z.set(Os.dropSchema.name,new ne(!0,[]));Z.set(Os.dropTable.name,new ne(!0,[]));Z.set(Os.dropAttribute.name,new ne(!0,[]));Z.set(LE.describeSchema.name,new ne(!1,[ti]));Z.set(LE.describeTable.name,new ne(!1,[ti]));Z.set(DD.deleteRecord.name,new ne(!1,[Z4]));Z.set(DE.addUser.name,new ne(!0,[]));Z.set(DE.alterUser.name,new ne(!0,[]));Z.set(DE.dropUser.name,new ne(!0,[]));Z.set(DE.listUsersExternal.name,new ne(!0,[]));Z.set(IR.listRoles.name,new ne(!0,[]));Z.set(IR.addRole.name,new ne(!0,[]));Z.set(IR.alterRole.name,new ne(!0,[]));Z.set(IR.dropRole.name,new ne(!0,[]));Z.set(dbe.name,new ne(!0,[]));Z.set(fbe.name,new ne(!0,[]));Z.set(mbe.name,new ne(!0,[]));Z.set(pbe.name,new ne(!0,[]));Z.set(hbe.name,new ne(!0,[]));Z.set(Ebe.name,new ne(!0,[]));Z.set(MD.setRoutes.name,new ne(!0,[]));Z.set(MD.getRoutes.name,new ne(!0,[]));Z.set(MD.deleteRoutes.name,new ne(!0,[]));Z.set(W4.setConfiguration.name,new ne(!0,[]));Z.set(_be.clusterStatus.name,new ne(!0,[]));Z.set(gbe.name,new ne(!0,[]));Z.set(DD.deleteFilesBefore.name,new ne(!0,[]));Z.set(DD.deleteAuditLogsBefore.name,new ne(!0,[]));Z.set($4.restart.name,new ne(!0,[]));Z.set($4.restartService.name,new ne(!0,[]));Z.set(lbe.name,new ne(!0,[]));Z.set(ube.name,new ne(!0,[ti]));Z.set(Os.cleanupOrphanBlobs.name,new ne(!0,[]));Z.set(Sbe.systemInformation.name,new ne(!0,[]));Z.set(W4.getConfiguration.name,new ne(!0,[]));Z.set(z4.readTransactionLog.name,new ne(!0,[]));Z.set(z4.deleteTransactionLogsBefore.name,new ne(!0,[]));Z.set(Tbe.installModules.name,new ne(!0,[]));Z.set(Qf.createCsr.name,new ne(!0,[]));Z.set(Qf.signCertificate.name,new ne(!0,[]));Z.set(Qf.listCertificates.name,new ne(!0,[]));Z.set(Qf.addCertificate.name,new ne(!0,[]));Z.set(Qf.removeCertificate.name,new ne(!0,[]));Z.set(Qf.getKey.name,new ne(!0,[]));Z.set(j4.addNodeBack.name,new ne(!0,[]));Z.set(j4.removeNodeBack.name,new ne(!0,[]));Z.set(vD.getOp.name,new ne(!1,[ti]));Z.set(vD.listMetricsOp.name,new ne(!1,[ti]));Z.set(vD.describeMetricOp.name,new ne(!1,[ti]));Z.set(UD.clear.name,new ne(!0,[]));Z.set(UD.get.name,new ne(!0,[]));Z.set(UD.set.name,new ne(!0,[]));Z.set(Q4.installUsageLicenseOp.name,new ne(!0,[]));Z.set(Q4.getUsageLicensesOp.name,new ne(!0,[]));Z.set(xD.getFingerprint.name,new ne(!0,[]));Z.set(xD.setLicense.name,new ne(!0,[]));Z.set(K4.createTokens.name,new ne(!1,[]));Z.set(K4.refreshOperationToken.name,new ne(!1,[]));Z.set(Y4.login.name,new ne(!1,[]));Z.set(Y4.logout.name,new ne(!1,[]));Z.set(yr.customFunctionsStatus.name,new ne(!0,[]));Z.set(yr.getCustomFunctions.name,new ne(!0,[]));Z.set(yr.getComponents.name,new ne(!0,[]));Z.set(yr.getComponentFile.name,new ne(!0,[]));Z.set(yr.setComponentFile.name,new ne(!0,[]));Z.set(yr.dropComponent.name,new ne(!0,[]));Z.set(yr.getCustomFunction.name,new ne(!0,[]));Z.set(yr.setCustomFunction.name,new ne(!0,[]));Z.set(yr.dropCustomFunction.name,new ne(!0,[]));Z.set(yr.addComponent.name,new ne(!0,[]));Z.set(yr.dropCustomFunctionProject.name,new ne(!0,[]));Z.set(yr.packageComponent.name,new ne(!0,[]));Z.set(yr.deployComponent.name,new ne(!0,[]));Z.set(yr.addSSHKey.name,new ne(!0,[]));Z.set(yr.updateSSHKey.name,new ne(!0,[]));Z.set(yr.deleteSSHKey.name,new ne(!0,[]));Z.set(yr.listSSHKeys.name,new ne(!0,[]));Z.set(yr.setSSHKnownHosts.name,new ne(!0,[]));Z.set(yr.getSSHKnownHosts.name,new ne(!0,[]));Z.set(xD.getRegistrationInfo.name,new ne(!1,[]));Z.set(DE.userInfo.name,new ne(!1,[]));Z.set(LE.describeAll.name,new ne(!1,[]));Z.set(bbe,new ne(!1,[]));Z.set(Abe,new ne(!0,[]));Z.set(Rbe,new ne(!0,[]));Z.set(wR.CSV_DATA_LOAD,new ne(!1,[Vc,_u]));Z.set(wR.CSV_URL_LOAD,new ne(!1,[Vc,_u]));Z.set(wR.CSV_FILE_LOAD,new ne(!1,[Vc,_u]));Z.set(wR.IMPORT_FROM_S3,new ne(!1,[Vc,_u]));Z.set(tQ.EXPORT_TO_S3,new ne(!0,[]));Z.set(tQ.EXPORT_LOCAL,new ne(!0,[]));Z.set(Pn.VALID_SQL_OPS_ENUM.DELETE,new ne(!1,[Z4]));Z.set(Pn.VALID_SQL_OPS_ENUM.SELECT,new ne(!1,[ti]));Z.set(Pn.VALID_SQL_OPS_ENUM.INSERT,new ne(!1,[Vc]));Z.set(Pn.VALID_SQL_OPS_ENUM.UPDATE,new ne(!1,[_u]));nQ.exports={verifyPerms:Nbe,verifyPermsAst:wbe,verifyBulkLoadAttributePerms:Obe};function wbe(e,t,r){if(Ia.isEmptyOrZeroLength(e))throw Mr.info("verify_perms_ast has an empty user parameter"),Xn(new Error);if(Ia.isEmptyOrZeroLength(t))throw Mr.info("verify_perms_ast has an empty user parameter"),Xn(new Error);if(Ia.isEmptyOrZeroLength(r))throw Mr.info("verify_perms_ast has a null operation parameter"),Xn(new Error);try{let n=H4(),s=require("alasql"),i=new J4,o=new n(e),c=o.getSchemas(),l=new Map;if((!c||c.length===0)&&o.affected_attributes&&o.affected_attributes.size>0)throw Mr.info("No schemas defined in verifyPermsAst(), will not continue."),Xn(new Error);let u=!!t.role.permission.super_user,d=c.includes("system");if(d&&eQ[r])throw Xn(new Error,fn.DROP_SYSTEM,OE.FORBIDDEN);if(u&&!d)return null;let f=V4.getRolePermissions(t.role);t.role.permission=f,!u&&e instanceof s.yy.Select&&(e=o.updateAttributeWildcardsForRolePerms(f));for(let p=0;p<c.length;p++){let h=o.getTablesBySchemaName(c[p]);h&&l.set(c[p],h)}let m=rQ(t,r,l,i);return m||(l.forEach((p,h)=>{for(let E=0;E<p.length;E++){let g=o.getAttributesBySchemaTableName(h,p[E]),R=FD(t.role.permission,h,p[E]);BD(g,R,r,p[E],h,i)}}),i.getPermsResponse())}catch(n){throw Xn(n)}}a(wbe,"verifyPermsAst");function Nbe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Mr.info("null required parameter in verifyPerms"),Xn(new Error,fn.DEFAULT_INVALID_REQUEST,OE.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 J4;if(Ia.isEmptyOrZeroLength(e.hdb_user?.role)||Ia.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Mr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(fn.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=o.has(Pn.SYSTEM_SCHEMA_NAME)||s===Pn.SYSTEM_SCHEMA_NAME;if(l&&d&&ybe[e.operation]&&(i===Pn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Pn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Pn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&eQ[r])throw Xn(new Error,fn.DROP_SYSTEM,OE.FORBIDDEN);if(l&&!d||u===!0&&(r===Os.createSchema.name||r===Os.dropSchema.name))return null;if(Ibe.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let f=V4.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===q4||r===G4)&&!f.super_user){if(s===Pn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(fn.SCHEMA_PERM_ERROR(s));if(r===q4&&(!f[s]||!f[s][PE]))return c.handleInvalidItem(fn.SCHEMA_NOT_FOUND(s));if(r===G4&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][PE]))return c.handleInvalidItem(fn.TABLE_NOT_FOUND(s,i))}let m=rQ(e.hdb_user,r,o,c,n);if(m)return m;if(Z.get(r)&&Z.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Pn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],g=f[s].tables[i];g[Pn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(S=>S[Pn.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=E)}let p=Cbe(e),h=FD(e.hdb_user?.role?.permission,s,i);return BD(p,h,r,i,s,c,n),c.getPermsResponse()}a(Nbe,"verifyPerms");function rQ(e,t,r,n,s){if(Ia.arrayHasEmptyValues([e,t,r]))throw Mr.info("hasPermissions has an invalid parameter"),Xn(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||Z.get(t).requires_su))return null;if(!Z.get(t))throw Mr.info(`operation ${t} not found.`),Xn(new Error,fn.OP_NOT_FOUND(t),OE.BAD_REQUEST);if(Z.get(t)&&Z.get(t).requires_su)return Mr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(fn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][PE]===!1){n.addInvalidItem(fn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(fn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=o[l].tables[d];if(!f||f[PE]===!1)n.addInvalidItem(fn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=Z.get(t).perms;!Ia.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],g=f[E];(g==null||g===!1)&&(Mr.info(`Required ${E} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(E))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let p=fn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Mr.error(p),Mr.error(m),Xn(X4.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}a(rQ,"hasPermissions");function BD(e,t,r,n,s,i,o){if(!e||!t)throw Mr.info("no attributes specified in checkAttributePerms."),Xn(new Error);let c=Z.get(r).perms;if(!c||c==="")throw Mr.info(`no permissions found for ${r} in checkAttributePerms().`),Xn(new Error);if(Ia.isEmptyOrZeroLength(t))return Mr.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[PE]===!1){i.addInvalidItem(fn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(Pn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==ti)throw Xn(new Error,fn.SYSTEM_TIMESTAMP_PERMS_ERR,OE.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(fn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(BD,"checkAttributePerms");function Cbe(e){let t=new Set;try{if(e.action)return t;if(e.operation===Pn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{let n=r.attribute;r.search_attribute!==void 0&&(n=r.search_attribute),t.add(n)}),e&&(e.attribute||e.search_attribute)){let r=e.attribute;e.search_attribute!==void 0&&(r=e.search_attribute),t.add(r)}if(!e.records||e.records.length===0){if(!e.get_attributes||e.get_attributes.length===0)return t;for(let r of e.get_attributes)t.add(r)}else for(let r of e.records){let n=Object.keys(r);for(let s of n)t.add(s)}}catch(r){Mr.info(r)}return t}a(Cbe,"getRecordAttributes");function FD(e,t,r){let n=new Map;if(Ia.isEmpty(e))return Mr.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{Mr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(FD,"getAttributePermissions");function Obe(e,t,r,n,s,i,o){let c=new Set(i),l=FD(e,n,s);BD(c,l,t,s,n,o,r)}a(Obe,"verifyBulkLoadAttributePerms")});var HD=v((LGe,sQ)=>{"use strict";var kD=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};sQ.exports=kD});var YD=v((BGe,yQ)=>{"use strict";var CR=_n(),PR=_C(),Pbe=require("needle"),Mi=(H(),M(W)),MGe=pt(),Jf=oe(),{handleHDBError:Zt,hdbErrors:mQ}=_e(),{HTTP_STATUS_CODES:mn,HDB_ERROR_MSGS:vr,CHECK_LOGS_WRAPPER:Su}=mQ,Xf=J(),qD=require("papaparse");Jf.promisifyPapaParse();var vi=require("fs-extra"),Lbe=require("path"),{chain:iQ}=require("stream-chain"),oQ=require("stream-json/streamers/StreamArray"),aQ=require("stream-json/utils/Batch"),cQ=require("stream-chain/utils/comp"),{finished:lQ}=require("stream"),Dbe=ae(),pQ=gC(),Mbe=SC(),{BulkLoadFileObject:$D,BulkLoadDataObject:vbe}=Z$(),VD=IC(),{verifyBulkLoadAttributePerms:hQ}=NR(),vGe=HD(),UGe=Ht(),xGe=so(),{databases:Ube}=(we(),M(mt)),{coerceType:xbe}=(bg(),M(bG)),uQ="No records parsed from csv file.",gu=`${Dbe.get("HDB_ROOT")}/tmp`,{schemaRegex:Bbe}=Xi(),dQ=1024*1024*2,fQ=5e3,Fbe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};yQ.exports={csvDataLoad:kbe,csvURLLoad:Hbe,csvFileLoad:qbe,importFromS3:Gbe};async function kbe(e,t){let r=PR.dataObject(e);if(r)throw Zt(r,r.message,mn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=gQ(e.schema,e.table),i=qD.parse(e.data,{header:!0,skipEmptyLines:!0,transform:GD.bind(null,s),dynamicTyping:!1}),o=new VD;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&hQ(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 Zt(new Error,c,mn.BAD_REQUEST,void 0,void 0,!0);let l=new vbe(e.action,e.schema,e.table,i.data);return n=await pQ.callOperationFunctionAsAwait(SQ,l,null),n.message===uQ?uQ:TQ(n.records,n.number_written)}catch(s){throw Tu(s)}}a(kbe,"csvDataLoad");async function Hbe(e){let t=PR.urlObject(e);if(t)throw Zt(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${gu}/${r}`;try{await $be(e,r)}catch(s){throw Xf.error(vr.DOWNLOAD_FILE_ERR(r)+" - "+s),Zt(s,Su(vr.DOWNLOAD_FILE_ERR(r)))}try{let s=new $D(this.job_operation_function.name,e.action,e.schema,e.table,n,Mi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await KD(s);return await OR(n),i}catch(s){throw await OR(n),Tu(s)}}a(Hbe,"csvURLLoad");async function qbe(e){let t=PR.fileObject(e);if(t)throw Zt(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r=new $D(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Mi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await KD(r)}catch(n){throw Tu(n)}}a(qbe,"csvFileLoad");async function Gbe(e){let t=PR.s3FileObject(e);if(t)throw Zt(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Lbe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${gu}/${s}`;let i=new $D(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await Vbe(s,e);let o=await KD(i);return await OR(r),o}catch(n){throw await OR(r),Tu(n)}}a(Gbe,"importFromS3");async function $be(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Pbe("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 Zt(n,s,n.statusCode,Mi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Ybe(r,e.csv_url),await Kbe(t,r.raw)}a($be,"downloadCSVFile");async function Vbe(e,t){try{let r=`${gu}/${e}`;await vi.mkdirp(gu),await vi.writeFile(`${gu}/${e}`,"",{flag:"a+"});let n=await vi.createWriteStream(r),s=await Mbe.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(){Xf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Xf.error(vr.S3_DOWNLOAD_ERR+" - "+r),Zt(r,Su(vr.S3_DOWNLOAD_ERR))}}a(Vbe,"downloadFileFromS3");async function Kbe(e,t){try{await vi.mkdirp(gu),await vi.writeFile(`${gu}/${e}`,t)}catch(r){throw Xf.error(vr.WRITE_TEMP_FILE_ERR),Zt(r,Su(vr.DEFAULT_BULK_LOAD_ERR))}}a(Kbe,"writeFileToTempFolder");async function OR(e){if(e)try{await vi.access(e),await vi.unlink(e)}catch{Xf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(OR,"deleteTempFile");function Ybe(e,t){if(e.statusCode!==mQ.HTTP_STATUS_CODES.OK)throw Zt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,mn.BAD_REQUEST);if(!Fbe[e.headers["content-type"]])throw Zt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,mn.BAD_REQUEST);if(!e.raw)throw Zt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,mn.BAD_REQUEST)}a(Ybe,"validateURLResponse");async function KD(e){try{let t;switch(e.file_type){case Mi.VALID_S3_FILE_TYPES.CSV:t=await Wbe(e);break;case Mi.VALID_S3_FILE_TYPES.JSON:t=await zbe(e);break;default:throw Zt(new Error,vr.DEFAULT_BULK_LOAD_ERR,mn.BAD_REQUEST,Mi.LOG_LEVELS.ERROR,vr.INVALID_FILE_EXT_ERR(e))}return TQ(t.records,t.number_written)}catch(t){throw Tu(t)}}a(KD,"fileLoad");async function EQ(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 CR.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&hQ(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Zt(c);r(l)}}a(EQ,"validateChunk");async function _Q(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Jf.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Jf.isEmpty(c)&&!Jf.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await pQ.callOperationFunctionAsAwait(SQ,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Zt(c,Su(vr.INSERT_CSV_ERR),mn.INTERNAL_SERVER_ERROR,Mi.LOG_LEVELS.ERROR,vr.INSERT_CSV_ERR+" - "+c);r(l)}}a(_Q,"insertChunk");async function Wbe(e){let t={records:0,number_written:0},r=gQ(e.schema,e.table);try{let n=new VD,s=vi.createReadStream(e.file_path,{highWaterMark:dQ});s.setEncoding("utf8"),await qD.parsePromise(s,EQ.bind(null,e,n),GD.bind(null,r));let i=n.getPermsResponse();if(i)throw Zt(new Error,i,mn.BAD_REQUEST);return s=vi.createReadStream(e.file_path,{highWaterMark:dQ}),s.setEncoding("utf8"),await qD.parsePromise(s,_Q.bind(null,e,t),GD.bind(null,r)),s.destroy(),t}catch(n){throw Zt(n,Su(vr.PAPA_PARSE_ERR),mn.INTERNAL_SERVER_ERROR,Mi.LOG_LEVELS.ERROR,vr.PAPA_PARSE_ERR+n)}}a(Wbe,"callPapaParse");function gQ(e,t){let r=Ube[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>xbe(i,s));return n}a(gQ,"createTransformMap");function GD(e,t,r){let n=e.get(r);return n?n(t):Jf.autoCast(t)}a(GD,"typeFunction");async function zbe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new VD,s=iQ([vi.createReadStream(e.file_path,{encoding:"utf-8"}),oQ.withParser(),c=>c.value,new aQ({batchSize:fQ}),cQ(async c=>{await EQ(e,n,r,c)})]);await new Promise((c,l)=>{lQ(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Zt(new Error,i,mn.BAD_REQUEST);let o=iQ([vi.createReadStream(e.file_path,{encoding:"utf-8"}),oQ.withParser(),c=>c.value,new aQ({batchSize:fQ}),cQ(async c=>{await _Q(e,t,r,c)})]);return await new Promise((c,l)=>{lQ(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw Zt(n,Su(vr.INSERT_JSON_ERR),mn.INTERNAL_SERVER_ERROR,Mi.LOG_LEVELS.ERROR,vr.INSERT_JSON_ERR+n)}}a(zbe,"insertJson");async function SQ(e){let t={};try{e.data&&e.data.length>0&&jbe(e.data[0])?t=await Qbe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Xf.info(t.message))}catch(r){throw Tu(r)}return t}a(SQ,"callBulkFileLoad");function jbe(e){let t=Object.keys(e);for(let r of t)if(!Bbe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(jbe,"validateColumnNames");async function Qbe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=CR.insert;break;case"update":i=CR.update;break;case"upsert":i=CR.upsert;break;default:throw Zt(new Error,vr.INVALID_ACTION_PARAM_ERR(n),mn.BAD_REQUEST,Mi.LOG_LEVELS.ERROR,vr.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 d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)o.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=Jf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Tu(o)}}a(Qbe,"bulkFileLoad");function TQ(e,t){return`successfully loaded ${t} of ${e} records`}a(TQ,"buildResponseMsg");function Tu(e){return Zt(e,Su(vr.DEFAULT_BULK_LOAD_ERR),mn.INTERNAL_SERVER_ERROR,Mi.LOG_LEVELS.ERROR,vr.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Tu,"buildTopLevelErrMsg")});var IQ=v((HGe,AQ)=>{"use strict";var Jbe=Sn(),Xbe=Ei(),RQ=J(),Zbe=_n(),kGe=oT(),eAe=require("clone"),zD=require("alasql"),tAe=tS(),bQ=require("util"),rAe=bQ.promisify(Xbe.getTableSchema),nAe=bQ.promisify(Jbe.search),sAe=(H(),M(W)),WD=oe();tAe(zD);AQ.exports={update:oAe};var iAe="There was a problem performing this update. Please check the logs and try again.";async function oAe({statement:e,hdb_user:t}){let r=await rAe(e.table.databaseid,e.table.tableid),n=aAe(e.columns);WD.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=eAe(s),c=WD.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=zD.parse(l).statements[0],d=await nAe(u),f=cAe(n,d);return lAe(o,f,t)}a(oAe,"update");function aAe(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=zD.compile(`SELECT ${r.expression.toString()} AS [${sAe.FUNC_VAL}] FROM ?`)}),t}catch(t){throw RQ.error(t),new Error(iAe)}}a(aAe,"createUpdateRecord");function cAe(e,t){return WD.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(cAe,"buildUpdateRecords");async function lAe(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Zbe.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){RQ.error(`Error delete new_attributes from update response: ${i}`)}return s}a(lAe,"updateRecords")});var NQ=v((VGe,wQ)=>{var uAe=require("alasql"),dAe=Sn(),fAe=J(),mAe=fs(),QD=require("util"),jD=oe(),pAe=(H(),M(W)),hAe=Ei(),GGe=oT(),$Ge=_n(),EAe="record",_Ae="successfully deleted",gAe=QD.callbackify(RAe),SAe=QD.promisify(dAe.search),TAe=QD.promisify(hAe.getTableSchema);wQ.exports={convertDelete:gAe};function yAe(e){return`${e.deleted_hashes.length} ${EAe}${e.deleted_hashes.length===1?"":"s"} ${_Ae}`}a(yAe,"generateReturnMessage");async function RAe({statement:e,hdb_user:t}){let r=await TAe(e.table.databaseid,e.table.tableid);jD.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=jD.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=uAe.parse(o).statements[0],l={operation:pAe.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await SAe(c);let u=await mAe.deleteRecords(l);return jD.isEmptyOrZeroLength(u.message)&&(u.message=yAe(u)),delete u.txn_time,u}catch(u){throw fAe.error(u),u.hdb_code?u.message:u}}a(RAe,"convertDelete")});var vE=v((YGe,DQ)=>{"use strict";DQ.exports={evaluateSQL:UAe,processAST:LQ,convertSQLToAST:PQ,checkASTPermissions:OQ};var bAe=_n(),CQ=require("util"),AAe=CQ.callbackify(bAe.insert),IAe=Sn().search,wAe=IQ().update,NAe=CQ.callbackify(wAe),CAe=NQ().convertDelete,Kc=require("alasql"),OAe=NR(),LR=J(),PAe=tS(),LAe=oe(),ME=(H(),M(W)),{hdbErrors:DAe,handleHDBError:JD}=_e(),{HTTP_STATUS_CODES:XD}=DAe;PAe(Kc);var MAe=403,vAe="There was a problem performing this insert. Please check the logs and try again.",ZD=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function UAe(e,t){let r=e.parsed_sql_object;if(!r){r=PQ(e.sql);let n,s=r.ast.statements[0];if(s instanceof Kc.yy.Insert?n=s.into.databaseid:s instanceof Kc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Kc.yy.Update||s instanceof Kc.yy.Delete?n=s.table.databaseid:LR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Kc.yy.Select)&&LAe.isEmptyOrZeroLength(n))return t("No schema specified",null)}LQ(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(UAe,"evaluateSQL");function OQ(e,t){let r;try{r=OAe.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(OQ,"checkASTPermissions");function PQ(e){let t=new ZD;if(!e)throw JD(new Error,"The 'sql' parameter is missing from the request body",XD.BAD_REQUEST);try{let r=e.trim(),n=Kc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
133
|
+
`);throw n[1]?JD(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,XD.BAD_REQUEST):JD(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",XD.BAD_REQUEST)}return t}a(PQ,"convertSQLToAST");function LQ(e,t,r){try{let n=xAe;if(!e.bypass_auth&&!t.permissions_checked){let i=OQ(e,t);if(i&&i.length>0)return r(MAe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case ME.VALID_SQL_OPS_ENUM.SELECT:n=IAe,s=t.ast.statements[0];break;case ME.VALID_SQL_OPS_ENUM.INSERT:n=BAe;break;case ME.VALID_SQL_OPS_ENUM.UPDATE:n=NAe;break;case ME.VALID_SQL_OPS_ENUM.DELETE:n=CAe;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(LQ,"processAST");function xAe(e,t){LR.info(e),t("unknown sql statement")}a(xAe,"nullFunction");function BAe({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=FAe(i,e.values)}catch(o){return r(o)}AAe(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){LR.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(BAe,"convertInsert");function FAe(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]]=Kc.compile(`SELECT ${s.toString()} AS [${ME.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw LR.error(r),new Error(vAe)}}a(FAe,"createDataObjects")});var rM=v((zGe,HQ)=>{"use strict";var tM=Sn(),kAe=SC(),{AsyncParser:HAe}=require("json2csv"),DR=require("stream"),Ps=oe(),eM=require("fs-extra"),qAe=require("path"),ri=J(),{promisify:UQ}=require("util"),UE=oe(),{handleHDBError:Rr,hdbErrors:GAe}=_e(),{HDB_ERROR_MSGS:Zn,HTTP_STATUS_CODES:br}=GAe,{streamAsJSON:$Ae}=(hA(),M(px)),{Upload:VAe}=require("@aws-sdk/lib-storage"),{toCsvStream:KAe}=(ko(),M(Ax)),MQ=["search_by_value","search_by_hash","sql","search_by_conditions"],vQ=["json","csv"],xQ="json",BQ="csv",YAe="Successfully exported JSON locally.",WAe="Successfully exported CSV locally.",zAe=1e3,jAe=tM.searchByHash,QAe=tM.searchByValue,JAe=UQ(DR.finished);HQ.exports={export_to_s3:tIe,export_local:XAe};async function XAe(e){ri.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=FQ(e);if(!Ps.isEmpty(t))throw ri.error(t),Rr(new Error,t,br.BAD_REQUEST,void 0,void 0,!0);if(Ps.isEmpty(e.path))throw ri.error(Zn.MISSING_VALUE("path")),Rr(new Error,Zn.MISSING_VALUE("path"),br.BAD_REQUEST,void 0,void 0,!0);let r=(Ps.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(qAe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Ps.buildFolderPath(e.path,r);await ZAe(e.path);let s=await kQ(e);return await eIe(n,e.format,s)}a(XAe,"export_local");async function ZAe(e){if(ri.trace("in confirmPath"),Ps.isEmptyOrZeroLength(e))throw Rr(new Error,`Invalid path: ${e}`,br.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await eM.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${directory_path}' does not exist`:r.code==="EACCES"?n=`access to path '${directory_path}' is denied`:n=r.message,ri.error(n),Rr(new Error,n,br.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${directory_path}' is not a directory, please supply a valid folder path`;throw ri.error(r),Rr(new Error,r,br.BAD_REQUEST,void 0,void 0,!0)}return!0}a(ZAe,"confirmPath");async function eIe(e,t,r){if(ri.trace("in saveToLocal"),UE.isEmptyOrZeroLength(e))throw Rr(new Error,Zn.INVALID_VALUE("file_path"),br.BAD_REQUEST,void 0,void 0,!0);if(UE.isEmptyOrZeroLength(t))throw Rr(new Error,Zn.INVALID_VALUE("Source format"),br.BAD_REQUEST,void 0,void 0,!0);if(UE.isEmpty(r))throw Rr(new Error,Zn.NOT_FOUND("Data"),br.BAD_REQUEST,void 0,void 0,!0);if(t===xQ){let n=eM.createWriteStream(e);return $Ae(r).pipe(n),await JAe(n),{message:YAe,path:e}}else if(t===BQ){let n=eM.createWriteStream(e),s=DR.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new HAe(i,c).fromInput(s).toOutput(n).promise(!1),{message:WAe,path:e}}throw Rr(new Error,Zn.INVALID_VALUE("format"),br.BAD_REQUEST)}a(eIe,"saveToLocal");async function tIe(e){if(!e.s3||Object.keys(e.s3).length===0)throw Rr(new Error,Zn.MISSING_VALUE("S3 object"),br.BAD_REQUEST);if(Ps.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Rr(new Error,Zn.MISSING_VALUE("aws_access_key_id"),br.BAD_REQUEST);if(Ps.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Rr(new Error,Zn.MISSING_VALUE("aws_secret_access_key"),br.BAD_REQUEST);if(Ps.isEmptyOrZeroLength(e.s3.bucket))throw Rr(new Error,Zn.MISSING_VALUE("bucket"),br.BAD_REQUEST);if(Ps.isEmptyOrZeroLength(e.s3.key))throw Rr(new Error,Zn.MISSING_VALUE("key"),br.BAD_REQUEST);if(Ps.isEmptyOrZeroLength(e.s3.region))throw Rr(new Error,Zn.MISSING_VALUE("region"),br.BAD_REQUEST);let t=FQ(e);if(!Ps.isEmpty(t))throw Rr(new Error,t,br.BAD_REQUEST);ri.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await kQ(e)}catch(l){throw ri.error(l),l}let n,s=await kAe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new DR.PassThrough;if(e.format===BQ){i=e.s3.key+".csv";let l=KAe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===xQ){i=e.s3.key+".json";let l=new DR.Readable;l.pipe(o),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let p=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=p,f!==0&&f%zAe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw Rr(new Error,Zn.INVALID_VALUE("format"),br.BAD_REQUEST);return new VAe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(tIe,"export_to_s3");function FQ(e){if(ri.trace("in exportCoreValidation"),Ps.isEmpty(e.format))return"format missing";if(vQ.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${vQ.join(", ")}`;let t=e.search_operation.operation;if(Ps.isEmpty(t))return"search_operation.operation missing";if(MQ.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${MQ.join(", ")}`}a(FQ,"exportCoreValidation");async function kQ(e){ri.trace("in getRecords");let t,r;if(UE.isEmpty(e.search_operation)||UE.isEmptyOrZeroLength(e.search_operation.operation))throw Rr(new Error,Zn.INVALID_VALUE("Search operation"),br.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=QAe;break;case"search_by_hash":t=jAe;break;case"search_by_conditions":t=tM.searchByConditions;break;case"sql":{let n=vE();t=UQ(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,ri.error(r),Rr(new Error,r,br.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(kQ,"getRecords")});var GQ=v((QGe,qQ)=>{"use strict";var nM=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};qQ.exports=nM});var KQ=v((XGe,VQ)=>{"use strict";var rIe=(H(),M(W)),$Q=require("moment"),nIe=require("uuid").v4,sM=class{static{a(this,"JobObject")}constructor(){this.id=nIe(),this.type=void 0,this.start_datetime=$Q().valueOf(),this.created_datetime=$Q().valueOf(),this.end_datetime=void 0,this.status=rIe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};VQ.exports=sM});var oM=v((e$e,ZQ)=>{"use strict";var sIe=require("uuid").v4,QQ=_n(),JQ=Sn(),iIe=pi(),oIe=dd(),aIe=GQ(),Dt=(H(),M(W)),cIe=KQ(),lIe=sh(),Ui=J(),uIe=Dm(),Zf=oe(),{promisify:dIe}=require("util"),yu=require("moment"),MR=_C(),YQ=Ow(),{deleteTransactionLogsBeforeValidator:fIe}=cD(),{handleHDBError:WQ,hdbErrors:mIe,ClientError:pIe}=_e(),{HTTP_STATUS_CODES:zQ}=mIe,jQ=JQ.searchByValue,hIe=JQ.searchByHash,EIe=QQ.insert,_Ie=QQ.update,iM;ZQ.exports={addJob:TIe,updateJob:RIe,handleGetJob:gIe,handleGetJobsByStartDate:SIe,getJobById:XQ};async function gIe(e){if(e.id===void 0)throw new pIe("'id' is required");let t=await XQ(e.id);return Zf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}a(gIe,"handleGetJob");async function SIe(e){try{let t=await yIe(e);if(Ui.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=yu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=yu(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 Ui.error(r),new Error(r)}}a(SIe,"handleGetJobsByStartDate");async function TIe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Zf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Ui.info(d),t.error=d,t}if(!Dt.JOB_TYPE_ENUM[e.operation])return Ui.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Dt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=MR.fileObject(e);break;case Dt.OPERATIONS_ENUM.CSV_URL_LOAD:n=MR.urlObject(e);break;case Dt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=MR.dataObject(e);break;case Dt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=MR.s3FileObject(e);break;case Dt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Dt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=YQ(e,"date");break;case Dt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=YQ(e,"timestamp");break;case Dt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=fIe(e);break;case Dt.OPERATIONS_ENUM.RESTART_SERVICE:if(Dt.HDB_PROCESS_SERVICES[e.service]===void 0)throw WQ(new Error,"Invalid service",zQ.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw WQ(n,n.message,zQ.BAD_REQUEST,void 0,void 0,!0);let s=new cIe;s.type=e.operation===Dt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Dt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new iIe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await jQ(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ui.error(f),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=sIe();try{o=await jQ(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Ui.error(f),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Ui.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new uIe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await EIe(l)}catch(d){return Ui.error(`There was an error inserting a job for job type: ${e.operation} -- ${d}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let d=`Created a job with type ${s.type} and id ${s.id}`;t.message=d,t.createdJob=s,t.success=!0,Ui.trace(d)}return t}a(TIe,"addJob");async function yIe(e){let t=yu(e.from_date,yu.ISO_8601),r=yu(e.to_date,yu.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 aIe(n,e.hdb_user);try{if(!iM){let i=vE();iM=dIe(i.evaluateSQL)}return await iM(s)}catch(i){throw Ui.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(yIe,"getJobsInDateRange");async function XQ(e){if(Zf.isEmptyOrZeroLength(e))return Zf.errorizeMessage("Invalid job ID specified.");let t=new oIe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await hIe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Ui.error(n),Zf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(XQ,"getJobById");async function RIe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Zf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Dt.JOB_STATUS_ENUM.COMPLETE||e.status===Dt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=yu().valueOf());let t=new lIe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await _Ie(t),r}a(RIe,"updateJob")});var aJ=v((r$e,oJ)=>{"use strict";var eJ=oe(),Ur=(H(),M(W)),bIe=require("moment"),vR=YD(),xE=J(),tJ=oM(),rJ=rM(),nJ=rc(),sJ=tt(),AIe=gR(),IIe=Wf(),{parentPort:wIe,isMainThread:iJ}=require("worker_threads"),{onMessageByType:NIe}=tt(),aM=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function CIe(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(eJ.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(eJ.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ur.JOB_TYPE_ENUM.csv_file_load:await Io(e,vR.csvFileLoad);break;case Ur.JOB_TYPE_ENUM.csv_url_load:await Io(e,vR.csvURLLoad);break;case Ur.JOB_TYPE_ENUM.csv_data_load:await Io(e,vR.csvDataLoad);break;case Ur.JOB_TYPE_ENUM.import_from_s3:await Io(e,vR.importFromS3);break;case Ur.JOB_TYPE_ENUM.empty_trash:break;case Ur.JOB_TYPE_ENUM.export_local:await Io(e,rJ.export_local);break;case Ur.JOB_TYPE_ENUM.export_to_s3:await Io(e,rJ.export_to_s3);break;case Ur.JOB_TYPE_ENUM.delete_files_before:case Ur.JOB_TYPE_ENUM.delete_records_before:await Io(e,nJ.deleteFilesBefore);break;case Ur.JOB_TYPE_ENUM.delete_audit_logs_before:await Io(e,nJ.deleteAuditLogsBefore);break;case Ur.JOB_TYPE_ENUM.delete_transaction_logs_before:await Io(e,AIe.deleteTransactionLogsBefore);break;case Ur.JOB_TYPE_ENUM.restart_service:return await Io(e,IIe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(CIe,"parseMessage");async function Io(e,t){try{e.job.status=Ur.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=bIe().valueOf(),await tJ.updateJob(e.job),await OIe(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):xE.error(`There was an error running ${t.name} job with id ${e.job.id}`),xE.error(n),e.job.message=n,e.job.status=Ur.JOB_STATUS_ENUM.ERROR;try{await tJ.updateJob(e.job)}catch(s){throw xE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Io,"runJob");async function OIe(e){xE.trace("launching job thread:",e),iJ?sJ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ur.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):wIe.postMessage({type:Ur.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(OIe,"launchJobThread");iJ&&NIe(Ur.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{sJ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ur.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){xE.error(r)}});oJ.exports={parseMessage:CIe,RunnerMessage:aM}});var lJ=v((s$e,cJ)=>{"use strict";var PIe=oe(),cM=ae(),Yc=(H(),M(W)),LIe=pt(),DIe=Ht(),wo=J(),MIe=HD(),vIe=so();cM.initSync();cJ.exports={postOperationHandler:xIe,sendOperationTransaction:BE};async function BE(e,t,r,n){if(e.schema===Yc.SYSTEM_SCHEMA_NAME)return;let s=UIe(e,t,r);s&&(wo.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await DIe.publishToStream(`${LIe.SUBJECT_PREFIXES.TXN}.${e.schema}`,vIe.createNatsTableStreamName(e.schema,e.table),n,s))}a(BE,"sendOperationTransaction");function UIe(e,t,r){if(PIe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Yc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}a(UIe,"convertCRUDOperationToTransaction");async function xIe(e,t,r){if(!cM.get(Yc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;wo.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=cM.get(Yc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new MIe(t.txn_time,n,s);switch(e.operation){case Yc.OPERATIONS_ENUM.INSERT:try{await BE(e,t.inserted_hashes,i,r)}catch(o){wo.error("There was an error calling clustering postOperationHandler for insert."),wo.error(o)}break;case Yc.OPERATIONS_ENUM.DELETE:try{await BE(e,t.deleted_hashes,i,r)}catch(o){wo.error("There was an error calling clustering postOperationHandler for delete."),wo.error(o)}break;case Yc.OPERATIONS_ENUM.UPDATE:try{await BE(e,t.update_hashes,i,r)}catch(o){wo.error("There was an error calling clustering postOperationHandler for update."),wo.error(o)}break;case Yc.OPERATIONS_ENUM.UPSERT:try{await BE(e,t.upserted_hashes,i,r)}catch(o){wo.error("There was an error calling clustering postOperationHandler for upsert."),wo.error(o)}break;default:break}return t}a(xIe,"postOperationHandler")});var X,uJ=se(()=>{X=class{static{a(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var oD={};ye(oD,{chooseOperation:()=>PJ,executeJob:()=>ni,getOperationFunction:()=>LJ,operation:()=>_M,processLocalTransaction:()=>OJ});function kIe(e){if(!lM){let t=vE();lM=EM.promisify(t.evaluateSQL)}return lM(e)}async function OJ(e,t){try{if(e.body.operation!=="read_log"&&(qE.default.log_level===ym.INFO||qE.default.log_level===ym.DEBUG||qE.default.log_level===ym.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:o,...c}=e.body;Ln.info(c)}}catch(n){Ln.error(n)}let r=await NJ.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return HIe[e.body.operation]&&RJ.default.setSchemaDataToGlobal(n=>{n&&Ln.error(n)}),r}function PJ(e){let t;try{t=LJ(e)}catch(s){throw Ln.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=vE(),i=e.operation==="sql"?e.sql:e.search_operation.sql,o=s.convertSQLToAST(i);if(e.parsed_sql_object=o,!e.bypass_auth){let c=s.checkASTPermissions(e,o);if(c)throw Ln.error(`${dJ.FORBIDDEN} from operation ${e.operation}`),Ln.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,si.handleHDBError)(new Error,c,si.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.LOGIN&&e.operation!==V.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=yJ.default.verifyPerms(i,s);if(o)throw Ln.error(`${dJ.FORBIDDEN} from operation ${e.operation}`),Ln.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,si.handleHDBError)(new Error,o,si.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,si.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function LJ(e){if(Ln.trace(`getOperationFunction with operation: ${e.operation}`),fJ.has(e.operation))return fJ.get(e.operation);throw(0,si.handleHDBError)(new Error,si.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),si.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function _M(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=PJ(e);return OJ({body:e},n)}async function qIe(e){Ln.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[jb]=!0;let o;switch(i.operation){case V.INSERT:o=await bu.default.insert(i);break;case V.UPDATE:o=await bu.default.update(i);break;case V.UPSERT:o=await bu.default.upsert(i);break;case V.DELETE:o=await rm.default.deleteRecord(i);break;default:Ln.warn("invalid operation in catchup");break}await BIe.postOperationHandler(i,o,e)}catch(o){Ln.info("Invalid operation in transaction"),Ln.error(o)}}async function ni(e){(0,wJ.transformReq)(e);let t,r;try{if(r=await xR.default.addJob(e),r){t=r.createdJob,Ln.info("addJob result",r);let n=new mM.default.RunnerMessage(t,e);return{message:await mM.default.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}}catch(n){let s=n instanceof Error?n:null,i=`There was an error executing job: ${s&&"http_resp_msg"in s?s.http_resp_msg:n}`;throw Ln.error(i),(0,si.handleHDBError)(n,i)}}function GIe(){let e=new Map;return e.set(V.INSERT,new X(bu.default.insert)),e.set(V.UPDATE,new X(bu.default.update)),e.set(V.UPSERT,new X(bu.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new X(tm.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new X(tm.default.searchByHash)),e.set(V.SEARCH_BY_ID,new X(tm.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new X(tm.default.searchByValue)),e.set(V.SEARCH,new X(FIe)),e.set(V.SQL,new X(kIe)),e.set(V.CSV_DATA_LOAD,new X(ni,FE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new X(ni,FE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new X(ni,FE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new X(ni,FE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new X(xi.default.createSchema)),e.set(V.CREATE_DATABASE,new X(xi.default.createSchema)),e.set(V.CREATE_TABLE,new X(xi.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new X(xi.default.createAttribute)),e.set(V.DROP_SCHEMA,new X(xi.default.dropSchema)),e.set(V.DROP_DATABASE,new X(xi.default.dropSchema)),e.set(V.DROP_TABLE,new X(xi.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new X(xi.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new X(kE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new X(kE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new X(kE.default.describeTable)),e.set(V.DESCRIBE_ALL,new X(kE.default.describeAll)),e.set(V.DELETE,new X(rm.default.deleteRecord)),e.set(V.ADD_USER,new X(em.default.addUser)),e.set(V.ALTER_USER,new X(em.default.alterUser)),e.set(V.DROP_USER,new X(em.default.dropUser)),e.set(V.LIST_USERS,new X(em.default.listUsersExternal)),e.set(V.LIST_ROLES,new X(HE.default.listRoles)),e.set(V.ADD_ROLE,new X(HE.default.addRole)),e.set(V.ALTER_ROLE,new X(HE.default.alterRole)),e.set(V.DROP_ROLE,new X(HE.default.dropRole)),e.set(V.USER_INFO,new X(em.default.userInfo)),e.set(V.READ_LOG,new X(pJ.default)),e.set(V.ADD_NODE,new X(hJ.default)),e.set(V.UPDATE_NODE,new X(uM.default)),e.set(V.SET_NODE_REPLICATION,new X(uM.default)),e.set(V.REMOVE_NODE,new X(EJ.default)),e.set(V.CONFIGURE_CLUSTER,new X(_J.default)),e.set(V.PURGE_STREAM,new X(gJ.default)),e.set(V.SET_CONFIGURATION,new X(pM.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new X(SJ.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new X(TJ.default)),e.set(V.CLUSTER_SET_ROUTES,new X(UR.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new X(UR.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new X(UR.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new X(ni,dM.default.export_to_s3)),e.set(V.CREATE_CSR,new X(Ru.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new X(Ru.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new X(Ru.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new X(Ru.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new X(Ru.default.removeCertificate)),e.set(V.GET_KEY,new X(Ru.default.getKey)),e.set(V.ADD_NODE_BACK,new X(uP)),e.set(V.REMOVE_NODE_BACK,new X(dP)),e.set(V.DELETE_FILES_BEFORE,new X(ni,rm.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new X(ni,rm.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new X(ni,dM.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new X(xR.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new X(xR.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new X(AD)),e.set(V.GET_FINGERPRINT,new X(ID)),e.set(V.SET_LICENSE,new X(wD)),e.set(V.RESTART,new X(fM.default.restart)),e.set(V.RESTART_SERVICE,new X(ni,fM.default.restartService)),e.set(V.CATCHUP,new X(qIe)),e.set(V.SYSTEM_INFORMATION,new X(bJ.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new X(ni,rm.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new X(mJ.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new X(cC)),e.set(V.REFRESH_OPERATION_TOKEN,new X(lC)),e.set(V.LOGIN,new X(tD)),e.set(V.LOGOUT,new X(rD)),e.set(V.GET_CONFIGURATION,new X(pM.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new X(Mt.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new X(Mt.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new X(Mt.default.getComponentFile)),e.set(V.GET_COMPONENTS,new X(Mt.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new X(Mt.default.setComponentFile)),e.set(V.DROP_COMPONENT,new X(Mt.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new X(Mt.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new X(Mt.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new X(Mt.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new X(Mt.default.addComponent)),e.set(V.ADD_COMPONENT,new X(Mt.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new X(Mt.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new X(Mt.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new X(Mt.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new X(Mt.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new X(Mt.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new X(hM.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new X(ni,hM.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new X(AJ.default.installModules)),e.set(V.GET_BACKUP,new X(xi.default.getBackup)),e.set(V.CLEANUP_ORPHAN_BLOBS,new X(xi.default.cleanupOrphanBlobs)),e.set(V.ADD_SSH_KEY,new X(Mt.default.addSSHKey)),e.set(V.UPDATE_SSH_KEY,new X(Mt.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new X(Mt.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new X(Mt.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new X(Mt.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new X(Mt.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new X(dD)),e.set(V.LIST_METRICS,new X(fD)),e.set(V.DESCRIBE_METRIC,new X(mD)),e.set(V.GET_STATUS,new X(yD)),e.set(V.SET_STATUS,new X(RD)),e.set(V.CLEAR_STATUS,new X(TD)),e.set(V.INSTALL_USAGE_LICENSE,new X(yL)),e.set(V.GET_USAGE_LICENSES,new X(IL)),e}var tm,FE,xi,kE,rm,mJ,em,HE,Mt,qE,pJ,hJ,uM,EJ,_J,gJ,SJ,TJ,UR,dM,yJ,xR,si,fM,EM,bu,RJ,bJ,mM,pM,hM,AJ,IJ,wJ,Ru,NJ,CJ,dJ,Ln,BIe,FIe,lM,HIe,fJ,aD=se(()=>{tm=b(Sn()),FE=b(YD()),xi=b(Mh()),kE=b(dc()),rm=b(rc()),mJ=b(FO()),em=b(Es()),HE=b(eh()),Mt=b(iD()),qE=b(J()),pJ=b($O()),hJ=b(cy()),uM=b(EP()),EJ=b(uy()),_J=b(SP()),gJ=b(TP()),SJ=b(bP()),TJ=b(IP()),UR=b(hy()),dM=b(rM()),yJ=b(NR()),xR=b(oM());H();si=b(_e()),fM=b(Wf()),EM=b(require("util")),bu=b(_n()),RJ=b(Ei()),bJ=b(Bh()),mM=b(aJ());Vd();uR();pM=b(St()),hM=b(gR()),AJ=b(uD()),IJ=b(li()),wJ=b(oe());Hr();Ru=b(ys());Tf();hD();NJ=b(gC()),CJ=b(lJ());bE();iE();CD();uJ();({HTTP_STATUS_CODES:dJ}=si.hdbErrors),Ln=qE.default.loggerWithTag("operation"),{transactToClusteringUtils:BIe}=CJ.default,FIe=EM.promisify(tm.default.search);a(kIe,"evaluateSQL");HIe={[V.CREATE_ATTRIBUTE]:!0,[V.CREATE_TABLE]:!0,[V.CREATE_SCHEMA]:!0,[V.DROP_ATTRIBUTE]:!0,[V.DROP_TABLE]:!0,[V.DROP_SCHEMA]:!0};a(OJ,"processLocalTransaction");fJ=GIe();Be.operation=_M;a(PJ,"chooseOperation");a(LJ,"getOperationFunction");(0,IJ._assignPackageExport)("operation",_M);a(_M,"operation");a(qIe,"catchup");a(ni,"executeJob");a(GIe,"initializeOperationFunctionMap")});var kR=v((d$e,UJ)=>{"use strict";var BR=(H(),M(W)),$Ie=oe(),Au=J(),{handleHDBError:FR,hdbErrors:GE}=_e(),{isMainThread:VIe}=require("worker_threads"),{Readable:KIe}=require("stream"),DJ=require("os"),YIe=require("util"),WIe=dC(),vJ=YIe.promisify(WIe.authorize),MJ=(aD(),M(oD)),{createGzip:zIe,constants:jIe}=require("zlib"),QIe=[BR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,BR.OPERATIONS_ENUM.LOGIN,BR.OPERATIONS_ENUM.LOGOUT];function JIe(e){let t=`Found an uncaught exception with message: ${e.message}. ${DJ.EOL}Stack: ${e.stack} ${DJ.EOL}Terminating ${VIe?"HDB":"thread"}.`;console.error(t),Au.fatal(t),process.exit(1)}a(JIe,"handleServerUncaughtException");function XIe(e,t,r){if(Au[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:GE.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(XIe,"serverErrorHandler");function ZIe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=FR(new Error,"Invalid JSON.",GE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if($Ie.isEmpty(e.body.operation)){let n=FR(new Error,"Request body must include an 'operation' property.",GE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(ZIe,"reqBodyValidationHandler");function ewe(e,t,r){let n;!QIe.includes(e.body.operation)||e.body.operation===BR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?vJ(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{Au.warn(i),Au.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let o=typeof i=="string"?{error:i}:{error:i.message};r(FR(i,o,GE.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(ewe,"authHandler");function twe(e,t,r){vJ(e,t).then(n=>{e.hdb_user=n,r()}).catch(n=>{Au.warn(n),Au.warn(`{"ip":"${e.socket?.remoteAddress}", "error":"${n.stack}"`);let s=typeof n=="string"?{error:n}:{error:n.message};r(FR(n,s,GE.HTTP_STATUS_CODES.UNAUTHORIZED),null)})}a(twe,"authAndEnsureUserOnRequest");async function rwe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=MJ.chooseOperation(e.body);let s=await MJ.processLocalTransaction(e,n);if(s instanceof KIe&&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(zIe({level:jIe.Z_BEST_SPEED})))}return s}catch(s){throw Au.error(s),s}}a(rwe,"handlePostRequest");UJ.exports={authHandler:ewe,authAndEnsureUserOnRequest:twe,handlePostRequest:rwe,handleServerUncaughtException:JIe,serverErrorHandler:XIe,reqBodyValidationHandler:ZIe}});var kJ=v((m$e,FJ)=>{"use strict";var nwe=require("fastify-plugin"),{handlePostRequest:xJ,authHandler:swe,reqBodyValidationHandler:iwe}=kR();async function owe(e){e.decorate("hdbCore",{preValidation:[iwe,swe],request:a(t=>BJ(xJ(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>BJ(xJ(t,r,!0)),"requestWithoutAuthentication")})}a(owe,"hdbCore");async function BJ(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(BJ,"convertAsyncIterators");FJ.exports=nwe(owe)});var qJ=v((E$e,HJ)=>{"use strict";var h$e=require("fs"),HR=ae();HR.initSync();var{CONFIG_PARAMS:gM}=(H(),M(W)),awe=1024*1024*1024;function cwe(e){let t=HR.get(gM.HTTP_TIMEOUT),r=HR.get(gM.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:awe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:HR.get(gM.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(cwe,"getServerOptions");HJ.exports=cwe});var VJ=v((g$e,$J)=>{"use strict";var SM=ae();SM.initSync();var{CONFIG_PARAMS:GJ}=(H(),M(W));function lwe(){let e=SM.get(GJ.HTTP_CORSACCESSLIST),t=SM.get(GJ.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(lwe,"getCORSOptions");$J.exports=lwe});var WJ=v((T$e,YJ)=>{"use strict";var KJ=ae();KJ.initSync();var uwe=(H(),M(W));function dwe(){return KJ.get(uwe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(dwe,"getHeaderTimeoutConfig");YJ.exports=dwe});var yM={};ye(yM,{customFunctionsServer:()=>pwe,ready:()=>a3,start:()=>mwe});function mwe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){wa||(wa=o3(t),Be.http((await wa).server));let o=await wa,c=(0,TM.dirname)(s),l=(0,TM.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!zJ.has(c)){zJ.add(c);try{o.register(Ewe(c,l))}catch(u){if(u.message==="Root plugin has already booted")yt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:a3}}async function pwe(){try{yt.info("In Custom Functions Fastify server"+process.cwd()),yt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),yt.debug(`Custom Functions server process ${process.pid} starting up.`),await hwe();let e=e3.get(F.HTTP_SECUREPORT)>0,t;try{t=wa=await o3(e)}catch(r){throw yt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw yt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){yt.error(`Custom Functions ${process.pid} Error: ${e}`),yt.error(e),process.exit(1)}}async function hwe(){try{yt.info("Custom Functions starting configuration."),await t3.setUsersWithRolesCache(),yt.info("Custom Functions completed configuration.")}catch(e){yt.error(e)}}function Ewe(e,t){return async function(r){try{yt.info("Custom Functions starting buildRoutes"),yt.trace("Loading fastify routes folder "+e),(0,jJ.existsSync)(e)&&r.register(ZJ.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:yt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?yt.error(s.message):s&&yt.error(s),o()})}catch(n){yt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function o3(e){yt.info("Custom Functions starting buildServer.");let t=(0,r3.default)(e),r=(0,QJ.default)(t);r.server.headersTimeout=(0,s3.default)(),r.setErrorHandler(i3.serverErrorHandler);let n=(0,n3.default)();return n&&r.register(JJ.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(XJ.default),await r.register(fwe),await r.after(),Hm(r),yt.info("Custom Functions completed buildServer."),r}function a3(){if(wa)return wa.then?wa.then(e=>e.ready()):wa.ready()}var TM,jJ,QJ,JJ,XJ,ZJ,e3,yt,fwe,t3,r3,n3,s3,i3,wa,zJ,c3=se(()=>{TM=require("path"),jJ=require("fs"),QJ=b(require("fastify")),JJ=b(require("@fastify/cors")),XJ=b(sC()),ZJ=b(require("@fastify/autoload")),e3=b(ae());H();yt=b(J()),fwe=b(kJ()),t3=b(Es()),r3=b(qJ()),n3=b(VJ()),s3=b(WJ()),i3=b(kR());ko();Hr();zJ=new Set;a(mwe,"start");a(pwe,"customFunctionsServer");a(hwe,"setUp");a(Ewe,"buildRouteFolder");a(o3,"buildServer");a(a3,"ready")});var bM={};ye(bM,{handleApplication:()=>_we,suppressHandleApplicationWarning:()=>gwe});function _we(e){let t=new Map,r=new Map;e.options.on("change",(n,s)=>{if(n[0]==="files"||n[0]==="urlPath"){t.clear(),r.clear(),e.logger.info(`Static files reinitialized due to change in ${n.join(".")}`);return}}),e.handleEntry(n=>{switch(n.eventType){case"addDir":case"unlinkDir":let s=(0,sm.join)(n.absolutePath,"index.html");(0,nm.existsSync)(s)&&r[n.eventType==="addDir"?"set":"delete"](n.urlPath,s);break;case"add":t.set(n.urlPath,n.absolutePath),n.urlPath.endsWith("index.html")&&r.set((0,sm.dirname)(n.urlPath),n.absolutePath);break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,sm.dirname)(n.urlPath));break}}),e.server.http((n,s)=>{if(n.method!=="GET"||n.isWebSocket)return s(n);let i=e.options.get(["fallthrough"])??!0;if(typeof i!="boolean")throw new Error(`Invalid fallthrough option: ${i}. Must be a boolean.`);let o=t.get(n.pathname);if(!o){let d=e.options.get(["index"])??!1;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);d&&(o=r.get(n.pathname))}if(!o){let d=e.options.get(["extensions"])??[];if(!Array.isArray(d)||d.some(f=>typeof f!="string"))throw new Error(`Invalid extensions option: ${d}. Must be an array of strings.`);for(let f of d)if(o=t.get(`${n.pathname}.${f}`),o)break}if(o)return{handlesHeaders:!0,body:(0,RM.default)(n,(0,nm.realpathSync)(o))};if(i)return s(n);let c=e.options.get(["notFound"]);if(Swe(c),!c)return{status:404,body:"File not found"};let l=(0,sm.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,nm.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,RM.default)(n,(0,nm.realpathSync)(l))}},{runFirst:!0})}function Swe(e){if(!(e===void 0||typeof e=="string")){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(!("file"in e)||typeof e.file!="string")throw new Error(`Invalid \`notFound.file\` option: ${e.file}. Must be a string.`);if(!("statusCode"in e)||typeof e.statusCode!="number")throw new Error(`Invalid \`notFound.statusCode\` option: ${e.statusCode}. Must be a number.`);return}throw new Error(`Invalid notFound option: ${e}. Must be a string or an object with file and statusCode properties.`)}}var nm,sm,RM,gwe,l3=se(()=>{nm=require("node:fs"),sm=require("node:path"),RM=b(require("send"));a(_we,"handleApplication");gwe=!0;a(Swe,"validateNotFoundOption")});var AM={};ye(AM,{start:()=>Twe});function Twe({override:e}){return{handleFile:a((t,r,n)=>{qR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,u3.parse)(t))){if(process.env[s]!==void 0)if(qR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)qR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var u3,qR,d3=se(()=>{u3=require("dotenv"),qR=b(J());a(Twe,"start")});var IM={};ye(IM,{DataLoaderError:()=>Ls,DataLoaderResult:()=>im,EmptyFileError:()=>VR,FileParseError:()=>$R,InvalidPropertyTypeError:()=>KR,MissingRequiredPropertyError:()=>$E,RecordProcessingError:()=>VE,SystemDatabaseError:()=>YR,UnsupportedFileExtensionError:()=>GR,handleApplication:()=>Rwe,loadDataFile:()=>E3,suppressHandleApplicationWarning:()=>ywe});function Rwe(e){if((0,m3.getWorkerIndex)()!==0){No.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||E3(t,bn,ve).then(r=>{No.debug?.("Data loader processed file: %s: %s",(0,Na.basename)(t.absolutePath),r.message)})})}async function E3({contents:e,absolutePath:t,stats:r},n,s){let i=(0,Na.extname)(t)||"unknown",o;try{if(i===".yaml"||i===".yml")o=(0,f3.parseDocument)(e.toString()).toJSON();else if(i===".json")o=JSON.parse(e.toString());else throw new GR(t,i);o.mtime=r.mtimeMs}catch(f){throw f instanceof Ls?f:new $R(t,f)}if(!o)throw new VR(t);let{database:c,table:l,records:u}=o;if(!l)throw new $E(t,"table");if(!u)throw new $E(t,"records");if(!Array.isArray(u))throw new KR(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new YR(c,l);try{let f;if(c&&s[c]&&s[c][l])No.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])No.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{No.debug?.(`Table ${d} not found, creating new table`);let R=[];if(u.length>0){let S=u[0];Object.keys(S).map(y=>{let N={name:y,type:typeof S[y]};return y==="id"&&(N.isPrimaryKey=!0),N}).forEach(y=>{R.push(y)})}f=await Xe({database:c,table:l,attributes:R})}let m=u.length,p=0,h=0,E=0,g=100;for(let R=0;R<u.length;R+=g){let S=u.slice(R,R+g),y=[];for(let N of S)y.push(async()=>{try{let I=null,$=N.id;if($!==void 0&&(I=await f.get($)),!I)return p++,f.put(N);let ee=I.getUpdatedTime();return o.mtime>ee?(h++,f.put(N)):(E++,Promise.resolve({inserted:0,updated:0}))}catch(I){if(I instanceof Ls)No.error?.(`Record processing error: ${I.message}`);else{let $=new VE(d,I);No.error?.(`Record processing error: ${$.message}`)}return Promise.resolve({inserted:0,updated:0,error:I.message})}});await Promise.all(y.map(N=>N()))}if(p>0||h>0){let R=`Loaded ${p} new and updated ${h} records in ${d}`;return E>0&&(R+=` (${E} records skipped)`),No.info?.(R),new im(t,c,l,"success",p+h,R)}else if(E>0){let R=`All ${E} records in ${d} already up-to-date`;return No.info?.(R),new im(t,c,l,"skipped",m,R)}else{let R=`No records to process in ${d}`;return No.info?.(R),new im(t,c,l,"success",0,R)}}catch(f){throw f instanceof Ls?f:new VE(d,f)}}var Na,f3,m3,Ca,p3,h3,No,ywe,Ls,GR,$R,VR,$E,KR,YR,VE,im,_3=se(()=>{Na=require("node:path"),f3=require("yaml");we();m3=b(tt()),Ca=b(Jr()),p3=b(_e()),h3=b(J()),No=h3.default.forComponent("dataLoader"),ywe=!0;a(Rwe,"handleApplication");a(E3,"loadDataFile");Ls=class extends p3.ClientError{static{a(this,"DataLoaderError")}constructor(t,r=Ca.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},GR=class extends Ls{static{a(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,Na.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,Ca.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},$R=class extends Ls{static{a(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,Na.basename)(t)}: ${r.message}`,Ca.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},VR=class extends Ls{static{a(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,Na.basename)(t)} is empty or invalid`,Ca.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},$E=class extends Ls{static{a(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,Na.basename)(t)} is missing required "${r}" property`,Ca.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},KR=class extends Ls{static{a(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,Na.basename)(t)} has invalid "${r}" property, expected ${n}`,Ca.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},YR=class extends Ls{static{a(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,Ca.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},VE=class extends Ls{static{a(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,Ca.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},im=class{static{a(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,o){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=o}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var wM={};ye(wM,{calculateRestHttpURL:()=>P3,hdbServer:()=>wwe,start:()=>wwe});async function wwe(e){try{Bi.default.debug("In Fastify server"+process.cwd()),Bi.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Bi.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=g3.default.isMaster,await Nwe();let t=e.securePort>0;om=Cwe(t,e.resources),await om.ready(),e||(e={}),e.isOperationsServer=!0;try{Be.http(om.server,e),om.server.closeIdleConnections||await om.listen({port:0,host:"::"})}catch(r){throw om.close(),Bi.default.error(r),Bi.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Bi.default.fatal(t),process.exit(1)}}async function Nwe(){return Bi.default.trace("Configuring HarperDB process."),w3.default.setSchemaDataToGlobal(),C3.default.setUsersWithRolesCache()}function Cwe(e,t){Bi.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let r=Lwe(e),n=(0,S3.default)(r);n.server.headersTimeout=Mwe(),n.setErrorHandler(Co.serverErrorHandler);let s=Dwe();s&&n.register(T3.default,s),n.register(function(o,c,l){o.setNotFoundHandler(function(u,d){n.server.emit("unhandled",u.raw,d.raw)}),l()}),n.register(b3.default),n.register(y3.default),Hm(n),n.get("/health",()=>"HarperDB is running."),n.register(R3.default,{root:A3.default.join(I3.PACKAGE_ROOT,"studio/web")});let i=Fi.default.get(bm.LOCAL_STUDIO_ON);return!N3.default.isEmpty(i)&&i.toString().toLowerCase()==="true"?n.get("/",(o,c)=>c.sendFile("index.html")):n.get("/",(o,c)=>c.sendFile("running.html")),n.get("/api/openapi/rest",{preValidation:[Co.authAndEnsureUserOnRequest]},Owe(t)),n.post("/",{preValidation:[Co.reqBodyValidationHandler,Co.authHandler],config:{isOperation:!0}},Pwe),Bi.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),n}function Owe(e){let t=Fi.default.get(F.HTTP_PORT),r=Fi.default.get(F.HTTP_SECUREPORT);return n=>n.hdb_user?.role?.permission?.super_user?FS(e,P3(t,r,n)):(Bi.default.warn(`{"ip":"${n.socket.remoteAddress}", "error":"attempt to access /api/openapi/rest without being super_user"`),new O3.ServerError("Forbidden",403))}function P3(e,t,r){let n=new URL(`${r.protocol}://${r.hostname}`);return r.hostname.toLowerCase()==="localhost"||r.hostname.match(/^[\d.:]+$/)?t?(n.port=t,n.protocol="https:"):e&&(n.port=e,n.protocol="http:"):(n.port="443",n.protocol="https:"),n.toString()}function Pwe(e,t){return e.body?.operation?.startsWith("restart")&&t.header("Connection","close"),(0,Co.handlePostRequest)(e,t)}function Lwe(e){let t=Fi.default.get(am.OPERATIONSAPI_NETWORK_TIMEOUT),r=Fi.default.get(am.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Awe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,http2:Fi.default.get(am.OPERATIONSAPI_NETWORK_HTTP2),https:e}}function Dwe(){let e=Fi.default.get(am.OPERATIONSAPI_NETWORK_CORS),t=Fi.default.get(am.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Iwe)&&(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}function Mwe(){return Fi.default.get(am.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??bwe}var g3,Fi,Bi,S3,T3,y3,R3,b3,A3,I3,w3,N3,C3,Co,O3,bwe,Awe,Iwe,am,om,L3=se(()=>{g3=b(require("cluster")),Fi=b(ae());H();Bi=b(J()),S3=b(require("fastify")),T3=b(require("@fastify/cors")),y3=b(require("@fastify/compress")),R3=b(require("@fastify/static")),b3=b(sC()),A3=b(require("path")),I3=b(Rt()),w3=b(Ei()),N3=b(oe()),C3=b(Es());Hr();Co=b(kR());ko();ZN();O3=b(_e());Fi.default.initSync();bwe=6e4,Awe=1024*1024*1024,Iwe="TRUE",{CONFIG_PARAMS:am}=W;a(wwe,"operationsServer");a(Nwe,"setUp");a(Cwe,"buildServer");a(Owe,"restOpenAPIHandler");a(P3,"calculateRestHttpURL");a(Pwe,"handler");a(Lwe,"getServerOptions");a(Dwe,"getCORSOpts");a(Mwe,"getHeaderTimeoutConfig")});var DM={};ye(DM,{disableNATS:()=>Uwe,publishToStream:()=>jR,setNATSReplicator:()=>NM,setPublishToStream:()=>xwe,setSubscription:()=>LM,start:()=>vwe});function vwe(){KE.default.get(F.CLUSTERING_ENABLED)&&Fwe()}function Uwe(e=!0){x3=e}function xwe(e,t){jR=e,LM=t}function Fwe(){if(x3||process.env._DISABLE_NATS)return;let e=lt(),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];NM(s,r,i)}}Hl((r,n)=>{NM(r.tableName,r.databaseName,r),n&&F3(r)}),!D3&&(D3=!0)}function NM(e,t,r){if(t==="system"&&kwe.includes(e))return;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 ur{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){F3(i)}static subscribe(){let i=new ns;return LM(t,e,i),i}static subscribeOnThisThread(i){return i<(KE.default.get(F.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Bwe)}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 WR(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=B3;return i}a(n,"getNATSTransaction")}function F3(e){let t=KE.default.get(F.CLUSTERING_NODENAME);jR(`${OM.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,PM.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 M3,OM,PM,v3,U3,KE,zR,x3,jR,LM,Bwe,B3,D3,kwe,WR,CM,k3=se(()=>{we();Ko();M3=b(Ht()),OM=b(pt()),PM=b(so());Fu();v3=b(DC()),U3=b(xn()),KE=b(ae());H();zR=b(J());a(vwe,"start");a(Uwe,"disableNATS");jR=M3.publishToStream,LM=v3.setSubscription;a(xwe,"setPublishToStream");Bwe=2;a(Fwe,"assignReplicationSource");kwe=["hdb_job","hdb_raw_analytics","hdb_info"];a(NM,"setNATSReplicator");a(F3,"publishSchema");WR=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=KE.default.get(F.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let o=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(zR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=o)),l.table===f&&l.operation===m?(o.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(jR(`${OM.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,PM.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw zR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},CM=class extends WR{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,U3.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};B3=new CM});async function V3({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await MM.get(e,{returnNonexistent:!0});i=new xM(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await MM.get(e);o&&o.delete()}i=new JR(e,t)}return n&&(n.id=e,n.user={username:t?.username},YE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function vM(){return QR++,QR>65500&&(QR=1),QR}function UM(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Bs.getMatch(n,"mqtt");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=new di(i.relativeURL);o.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return At(r,()=>s?t===void 0?c.delete(o,r):c.put(o,e.data,r):c.publish(o,e.data,r))}var q3,Wc,G3,$3,H3,MM,YE,QR,JR,xM,K3=se(()=>{we();ja();q3=b(xn()),Wc=b(J());Ga();G3=b(tt()),$3=b(xL());Hr();Ag();H3=100,MM=Xe({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"}]}}]}),YE=Xe({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,G3.getWorkerIndex)()===0&&(async()=>{await $3.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of YE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Be.getUser(r.user.username));try{await UM(r,t,r)}catch{(0,Wc.warn)("Failed to publish will",t)}YE.delete(e.id)}})();a(V3,"getSession");QR=1;a(vM,"getNextMessageId");JR=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("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(S=>S.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:o,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};o&&(0,Wc.trace)("Resuming subscription from",s,"from",o);let p=Bs.getMatch(u,"mqtt");if(!p){let S=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw S.statusCode=404,S}m.url=p.relativeURL;let h;if(m.url.indexOf("+")>-1||(h=m.url.indexOf("#"))>-1){let S=m.url.slice(1);if(h--,h>-1&&h!==S.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,S.indexOf("+")===S.length-1)m.onlyChildren=!0,m.url="/"+S.slice(0,S.length-1);else{let y=S.split("/"),N;for(let ee=0;ee<y.length;ee++)if(y[ee].indexOf("+")>-1)if(y[ee]==="+")N=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&N)throw new Error("Filters can not be combined");let I=!0;y[y.length-1]==="#"&&(y.length--,I=!1),N&&(n=a(ee=>{let q=ee.id;if(!Array.isArray(q))if(q?.indexOf?.("/")>-1)q=q.split("/");else return!1;if(I&&q.length!==y.length)return!1;for(let k=0;k<y.length;k++)if(y[k]!=="+"&&y[k]!==q[k])return!1;return!0},"filter"));let $=y.indexOf("+");m.url="/"+($>-1?y.slice(0,$):y).concat("").join("/")}}else m.isCollection=!1;let E=p.path,g=p.Resource,R=await At(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let y=await g.subscribe(m,S);if(!y)return;if(!y[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let N=(async()=>{for await(let I of y)try{let $;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,$=this.needsAcknowledge(I)):(I.acknowledge?.(),$=vM());let ee=I.id;if(Array.isArray(ee)&&(ee=sd(ee)),ee==null&&(ee=""),await this.listener(E+"/"+ee,I.value,$,t)===!1)break;this.awaitingAcks?.size>H3?await new Promise(k=>setTimeout(k,this.awaitingAcks.size-H3)):await new Promise(setImmediate)}catch($){(0,Wc.warn)($)}})();return y});if(R)return R.topic=s,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=vM();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,{acknowledge:t.acknowledge})),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r.acknowledge())}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 UM(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();At(r,async()=>{try{if(!t){let n=await YE.get(this.sessionId);n?.doesExist()&&await UM(n,n.data,r)}}finally{await YE.delete(this.sessionId)}}).catch(n=>{(0,Wc.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(UM,"publish");xM=class extends JR{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.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=vM(),n={topic:t.topic,timestamp:t.localTime};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,Wc.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,q3.getNextMonotonicTime)()),(0,Wc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),MM.put(this.sessionRecord)}}});var BM={};ye(BM,{bypassAuth:()=>Hwe,start:()=>Gwe});function Hwe(){X3=!0}function Gwe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new J3.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);o.events.emit("connection",u),er.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=W3(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),o);u.on("message",p),u.on("close",h),u.on("error",E=>{er.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(o.events.emit("connection",u),er.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let p=u.getPeerCertificate(!0);if(p?.subject){let E=await ff(p,l);if(!E.valid)throw er.error?.("Certificate verification failed:",E.status,"for",p.subject.CN),new Error("Certificate revoked or verification failed")}let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,cm.get)(F.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&ZR.notify?.({username:d?.username,status:ci.SUCCESS,type:ka.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,cm.get)(F.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&ZR.error?.({username:h,status:ci.FAILURE,type:ka.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else er.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){o.events.emit("error",p,u),er.error?.(p)}else if(l.required)return er.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&qwe(u.remoteAddress)&&(d=await(0,z3.getSuperUser)(),er.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=W3(u,p=>u.write(p),null,d,o);u.on("data",f),u.on("close",m),u.on("error",p=>{er.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function W3(e,t,r,n,s){Y3||(Y3=!0,tp(f=>{XR>0&&f.push({metric:"mqtt-connections",connections:XR,byThread:!0})}));let i;XR++;let o,c={protocolVersion:4},l=(0,eb.parser)({protocolVersion:5});function u(f){l.parse(f)}a(u,"onMessage");function d(){XR--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),tn(!1,"connection","mqtt","disconnect"),er.debug?.("MQTT connection was closed",e.remoteAddress))}return a(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(y){e.close?.(1008,"Unauthorized"),er.info?.(y);return}let m=f.cmd;if(o)o.then&&await o;else if(m!=="connect"){er.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let p=f.topic,h=p?.indexOf("/",1),E=h>0?p.slice(0,h):p;Ve(f.length,"bytes-received",E,R(f),"mqtt");try{switch(o?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Be.getUser(f.username,f.password.toString(),r),(0,cm.get)(F.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&ZR.notify?.({username:n?.username,status:ci.SUCCESS,type:ka.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(j){return(0,cm.get)(F.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&ZR.error?.({username:f.username,status:ci.FAILURE,type:ka.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,j),tn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),tn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let j=e.deserialize||(e.deserialize=Fo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?j(f.will.payload):void 0,delete f.will.payload}o=V3({user:n,...f}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(j){return er.error?.(j),s.events.emit("auth-failed",f,e,j),tn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:j.code||5,returnCode:j.code||128})}s.events.emit("connected",o,e),tn(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let y=a(async(j,Y,le,fe)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",j);let te=j.indexOf("/",1),ge=te>0?j.slice(0,te):j;g({cmd:"publish",topic:j,payload:await S(Y),messageId:le||Math.floor(Math.random()*1e8),qos:fe.qos},ge);let be=e._socket??e;return be.writableNeedDrain?new Promise(Ye=>be.once("drain",Ye)):!be.closed}catch(te){return er.error?.(te),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(y),o.sessionWasPresent&&await o.resume();break;case"subscribe":let N=[];for(let j of f.subscriptions){let Y;try{let le=await o.addSubscription(j,j.qos>=1);Y=le?le.qos||0:c.protocolVersion<5?128:143}catch(le){s.events.emit("error",le,e,j,o),le.statusCode?le.statusCode===500?er.warn?.(le):er.info?.(le):er.error?.(le),Y=c.protocolVersion<5?128:le.statusCode===403?135:le.statusCode===404?143:128}N.push(Y)}await o.committed,g({cmd:"suback",granted:N,messageId:f.messageId});break;case"unsubscribe":{let j=[];for(let Y of f.unsubscriptions)j.push(o.removeSubscription(Y)?0:17);g({cmd:"unsuback",granted:j,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let I=f.qos===2?"pubrec":"puback",$=e.deserialize||(e.deserialize=Fo(r?.headers.get?.("content-type"))),q=(f.payload?.length||0)>0?$(f.payload):void 0,k;try{k=await o.publish(f,q)}catch(j){s.events.emit("error",j,e,f,o),er.warn?.(j),f.qos>0&&g({cmd:I,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:I,messageId:f.messageId,reasonCode:k===!1?144:0},f.topic);break;case"pubrec":g({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(f.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),tn(!0,"connection","mqtt","disconnect"),er.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(y){s.events.emit("error",y,e,f,o),er.error?.(y),g({cmd:"disconnect"})}function g(y,N){let I=(0,eb.generate)(y,c);t(I),Ve(I.length,"bytes-sent",N,R(y),"mqtt")}a(g,"sendPacket");function R(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}a(R,"packetMethodName");function S(y){return Bo(y,r)}a(S,"serialize")}),l.on("error",f=>{er.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var eb,z3,cm,j3,Q3,J3,ZR,er,X3,qwe,Y3,XR,Z3=se(()=>{eb=require("mqtt-packet");K3();z3=b(Es());ko();is();Hr();cm=b(ae());H();j3=b(wr()),Q3=b(J()),J3=require("events");GT();ZR=(0,j3.loggerWithTag)("auth-event"),er=(0,Q3.forComponent)("mqtt"),X3=(0,cm.get)(F.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Hwe,"bypassAuth");qwe=a(e=>X3&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");a(Gwe,"start");XR=0;a(W3,"onSocket")});function tb(e,t){if(t?.includes(".."))throw new FM(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var FM,kM=se(()=>{FM=class extends Error{static{a(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};a(tb,"resolveBaseURLPath")});function eX(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(o=>o[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var tX=se(()=>{a(eX,"deriveCommonPatternBase")});function rb(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=a((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var HM=se(()=>{a(rb,"deriveGlobOptions")});var rX,qM,WE,nX=se(()=>{kM();tX();HM();rX=require("micromatch"),qM=class extends Error{static{a(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},WE=class{static{a(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=tb(this.name,this.config.urlPath),this.globOptions=rb(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new qM(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,rX.scan)(s).base),this.commonPatternBase=eX(this.patternBases)}}});function sX(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function Iu(e,t,r){t.startsWith("./")&&(t=t.slice(2));for(let n of e.patternBases)if(n.startsWith("./")&&(n=n.slice(2)),n!==""){if(r==="file"){if(t===n){let s=t.split("/");t=s[s.length-1];break}else if(sX(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(sX(n,t)){t=t.slice(n.length+1);break}}}return(0,iX.join)(e.baseURLPath,t)}var iX,GM=se(()=>{iX=require("node:path");a(sX,"pathStartsWithBase");a(Iu,"deriveURLPath")});function oX(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var sb,aX,cX,$M,lX,uX,nb,dX=se(()=>{sb=require("node:events");nX();aX=b(J()),cX=b(require("chokidar")),$M=require("node:path"),lX=require("node:fs/promises");GM();uX=require("micromatch"),nb=class extends sb.EventEmitter{static{a(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new WE(t,r,oX(n)),this.#r=s||aX.default.loggerWithTag(t),this.ready=(0,sb.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#n(...[t,r,n]){if(r===""&&(r="/"),!(0,uX.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,$M.join)(this.directory,r);switch(t){case"add":case"change":{let i=Iu(this.#e,r,"file");(0,lX.readFile)(s).then(o=>{let c={eventType:t,entryType:"file",contents:o,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=Iu(this.#e,r,"file"),o={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}case"addDir":case"unlinkDir":{let i=Iu(this.#e,r,"directory"),o={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}}}#s(t){this.emit("error",t)}#i(){this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,$M.join)(this.#e.directory,r));return this.#t=cX.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:a(r=>r!==this.#e.directory&&t.every(n=>!r.startsWith(n)),"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new WE(this.name,this.directory,oX(t)),this.#a()}};a(oX,"castConfig")});var ib,VM=se(()=>{ib={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var ab,fX,mX,pX,hX,EX,KM,YM,WM,zM,jM,ob,_X=se(()=>{ab=require("events"),fX=b(require("yaml")),mX=b(require("chokidar")),pX=require("node:fs/promises"),hX=require("util"),EX=b(J());VM();KM=class extends Error{static{a(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},YM=class extends Error{static{a(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},WM=class extends Error{static{a(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},zM=class extends Error{static{a(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},jM=class extends Error{static{a(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},ob=class extends ab.EventEmitter{static{a(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||EX.default.loggerWithTag(t),this.ready=(0,ab.once)(this,"ready"),this.#t=mX.default.watch(r,{persistent:!1}).on("add",this.#a.bind(this)).on("change",this.#a.bind(this)).on("error",this.#d.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#a.bind(this))}#a(){(0,pX.readFile)(this.#e,"utf-8").then(t=>{this.#n=fX.default.parse(t),this.#n&&this.#s in this.#n?this.#r?this.#f(this.#n[this.#s],this.#r):(this.#r=this.#n[this.#s],this.emit("ready",this.#r)):this.#r&&(this.#r=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#n?(this.#o(),this.emit("remove")):(this.#o(),this.emit("ready"));return}this.emit("error",t)})}#d(t){this.emit("error",new KM(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#o(),this.emit("remove")}#o(){this.#n=ib,this.#r=this.#n[this.#s]}#f(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let o=n.concat(s),c=this.#m(o);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(o,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#f(i,c,o):this.#u(o,i);continue}(0,hX.isDeepStrictEqual)(i,c)||this.#u(o,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#u(t,r){if(!this.#r)throw new YM;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new WM(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new zM(t,s);n=n[s]}if(n==null||typeof n!="object")throw new jM(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return structuredClone(this.#r)}getRoot(){return this.#n}}});var ub,gX,cb,lb,SX=se(()=>{ub=require("node:events");dX();_X();gX=b(J());gD();cb=class extends Error{static{a(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},lb=class extends ub.EventEmitter{static{a(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=(0,gX.loggerWithTag)(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,ub.once)(this,"ready"),this.options=new ob(t,n,this.#i).on("error",this.#d.bind(this)).on("change",this.#f.bind(this)()).on("ready",this.#a.bind(this))}get logger(){return this.#i}get name(){return this.#r}get directory(){return this.#t}#a(){this.emit("ready")}#d(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#c(t){let r=new nb(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return a(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return t.files}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new cb);return}if(typeof t=="function"){if(this.#n)return this.#n.on("all",t);let s=this.#l();if(s)return this.#n=this.#c(s),this.#n.on("all",t);this.emit("error",new cb);return}let n=this.#c(t);return r?n.on("all",r):n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),U4()}}});function wu(e){return typeof e=="string"&&e.trim()!==""}function QM(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>wu(t))}function bX(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function $we(e){e.config.root&&zE.default.warn("Resource extension 'root' option is deprecated. Due to backwards compatibility reasons it does not act as assumed. The glob pattern will always be evaluated from the component directory root. The option is only used for the initial root directory handling. Please remove and modify the 'files' glob pattern instead.");let t=[];if(e.config.root&&typeof e.config.files!="string")throw new nv(e);let r=e.config.root;r&&(r.startsWith("/")&&(r=r.slice(1)),r.endsWith("/")||(r+="/"));let n=e.config.files;if(typeof n=="string"&&!n.includes("**/*")&&(n.indexOf("/*")>-1?r=n.slice(0,n.indexOf("/*")+1):n.indexOf("/")>-1&&(r=n.slice(0,n.lastIndexOf("/")+1))),r&&t.push(r),t.length===0){if(bX(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let o=(0,jE.join)(e.directory,i);db.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,o,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,o,e.resources))}return s}async function AX(e){let t=!1;if(t=await $we(e),t)return t;let r=await(0,TX.default)(e.globOptions.source,{cwd:e.directory,objectMode:!0,onlyFiles:e.globOptions.onlyFiles,onlyDirectories:e.globOptions.onlyDirectories,ignore:e.globOptions.ignore});for(let n of r){let s=(0,jE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=Iu(e,n.path,"directory");db.isMainThread&&e.module.setupDirectory&&(await e.module.setupDirectory(i,s,e.resources),t=!0),e.resources.isWorker&&e.module.handleDirectory&&(await e.module.handleDirectory(i,s,e.resources),t=!0)}else if(n.dirent.isFile()){let i=Iu(e,n.path,"file"),o=await(0,yX.readFile)(s);db.isMainThread&&e.module.setupFile?(await e.module.setupFile(o,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(o,i,s,e.resources),t=!0)}else zE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var db,TX,zE,jE,yX,RX,fb,ki,JM,XM,ZM,ev,tv,rv,nv,sv,iv,IX=se(()=>{db=require("node:worker_threads"),TX=b(require("fast-glob")),zE=b(J());kM();HM();jE=require("node:path"),yX=require("node:fs/promises");GM();RX=require("micromatch"),fb=class{static{a(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!wu(this.config.files)&&!QM(this.config.files)&&!bX(this.config.files))throw new JM(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!QM(this.config.files.source)&&!wu(this.config.files.source))throw new XM(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new ZM(this);if(this.config.files.ignore!==void 0&&!QM(this.config.files.ignore)&&!wu(this.config.files.ignore))throw new ev(this)}if(this.config.root!==void 0&&!wu(this.config.root))throw new rv(this);if(this.config.path!==void 0&&!wu(this.config.path))throw new sv(this);if(this.config.path&&(zE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!wu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new iv(this);this.globOptions=rb(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new tv(this,r);return r.startsWith("/")&&(zE.default.warn("Leading '/' in 'files' glob pattern is deprecated. For backwards compatibility purposes, it is currently transformed to the relative path of the component, but in the future will result in an error. Paths are automatically derived from the root of the component directory. Please remove (e.g. '/web/*' -> 'web/*')."),r=r==="/"?".":r.slice(1)),r}),this.patternBases=this.globOptions.source.map(r=>(0,RX.scan)(r).base),this.baseURLPath=tb(this.name,this.config.urlPath)}},ki=class extends Error{static{a(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,jE.basename)(r.directory)}) ${t}`)}},JM=class extends ki{static{a(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},XM=class extends ki{static{a(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},ZM=class extends ki{static{a(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},ev=class extends ki{static{a(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},tv=class extends ki{static{a(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},rv=class extends ki{static{a(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},nv=class extends ki{static{a(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},sv=class extends ki{static{a(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},iv=class extends ki{static{a(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};a(wu,"isNonEmptyString");a(QM,"isArrayOfNonEmptyStrings");a(bX,"isObject");a($we,"handleRoots");a(AX,"processResourceExtensionComponent")});var eR={};ye(eR,{getComponentName:()=>Jy,loadComponent:()=>Eb,loadComponentDirectories:()=>OX,setErrorReporter:()=>Kwe});function OX(e,t){t&&(av=t),e&&(dv=e);let r=[];if((0,Kt.existsSync)(ov)){let s=(0,Kt.readdirSync)(ov,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,zr.join)(ov,o);r.push(Eb(c,av,Vb,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Eb(n,av,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{CX=!0})}function Kwe(e){pb=e}function Ywe(e){return new Promise((t,r)=>{let n=setTimeout(()=>{Aa.primaryStore.unlock(e,0),r(new Error("symlinking harperdb module timed out"))},1e4);if(Aa.primaryStore.attemptLock(e,0,()=>{clearTimeout(n),t()}))try{let s=(0,zr.join)(e,"node_modules");(0,Kt.existsSync)(s)||(0,Kt.mkdirSync)(s);let i=(0,zr.join)(s,"harperdb");if((0,Kt.existsSync)(i)){if((0,Kt.realpathSync)(i)===(0,Kt.realpathSync)(uv.PACKAGE_ROOT))return t();(0,Kt.rmSync)(i,{recursive:!0,force:!0})}(0,Kt.symlinkSync)(uv.PACKAGE_ROOT,i,"dir"),t()}finally{Aa.primaryStore.unlock(e,0)}})}function PX(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;return Aa.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(PX(e,t))})?Promise.race([t.handleApplication(e),new Promise((i,o)=>setTimeout(()=>o(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{Aa.primaryStore.unlock(e.name,0)}):new Promise((i,o)=>{n=i,s=setTimeout(()=>{o(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)})})}async function Eb(e,t,r,n,s,i){let o=(0,Kt.realpathSync)(e);if(mb.has(o))return mb.get(o);mb.set(o,!0),s&&(dv=s);try{let c,l=(0,zr.join)(e,"harperdb-config.yaml");if((0,Kt.existsSync)(l)?c=n?(0,_b.getConfigObj)():(0,lv.parseDocument)((0,Kt.readFileSync)(l,"utf8")).toJSON():!n&&(0,Kt.existsSync)(l=(0,zr.join)(e,"config.yaml"))?c=(0,lv.parseDocument)((0,Kt.readFileSync)(l,"utf8")).toJSON():c=ib,!n)try{await Ywe(e)}catch(m){Oa.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&Oa.default.error('You may need to enable developer mode in "Settings" / "System" (or "Update & Security") / "For developers", in order to enable symlinks so components can use `import from "harperdb"`')}let u=hb,d={};for(let m in c){let p=n?m:`${(0,zr.basename)(e)}.${m}`;hb=m;let h=c[m];if(!h)continue;co.loading(p);let E,g=h.package;try{if(g){let I=null;if(n)I=(0,zr.join)(e,"components",m);else{let $=e;for(I=(0,zr.join)($,"node_modules",m);!(0,Kt.existsSync)(I);){if($=(0,zr.dirname)($),$.length<(0,NX.getHdbBasePath)().length){I=null;break}I=(0,zr.join)($,"node_modules",m)}}if(I)E=await Eb(I,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=Vwe[m];if(!E){co.loaded(p,`Application component '${p}' processed`);continue}let R=a(I=>(I.origin=r,Xe(I)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,y=S?.securePort||S?.https&&S.port,N=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let I=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw co.failed(p,I,`Component '${p}' failed to load`),I}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&Oa.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let I=new lb(m,e,l,t,Be);await PX(I,E),co.loaded(p,`Component '${p}' loaded successfully`);continue}if(cv.isMainThread&&(E=await E.startOnMainThread?.({server:Be,ensureTable:R,port:N,securePort:y,resources:t,...h})||E,n&&S))for(let I of[N,y])try{if(+I&&!wX.includes(I)){let $=fv.get(F.HTTP_SESSIONAFFINITY);$&&Oa.default.warn("Session affinity is not recommended and may cause memory leaks"),($||!kS)&&(wX.push(I),HL(I,$))}}catch($){console.error("Error listening on socket",I,$,m)}if(t.isWorker&&(E=await E.start?.({server:Be,ensureTable:R,port:N,securePort:y,resources:t,...h})||E),dv.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let I=new fb({config:h,name:m,directory:e,module:E,resources:t});d[m]=await AX(I)}co.loaded(p,`Component '${p}' loaded successfully`)}catch(R){R.message=`Could not load component '${m}' for application '${(0,zr.basename)(e)}' due to: ${R.message}`,pb?.(R),((0,QE.getWorkerIndex)()===0?console:Oa.default).error(R),t.set(h.path||"/",new _l(R),null,!0),co.failed(p,R,`Could not load component '${p}'`)}}if(hb=u,cv.isMainThread&&!CX&&i&&(0,QE.watchDir)(e,async()=>OX()),c.extensionModule||c.pluginModule){let m=await US((0,zr.join)(e,c.extensionModule||c.pluginModule));return mb.set(o,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;pb?.(new Error(m)),((0,QE.getWorkerIndex)()===0?console:Oa.default).error(m),co.failed((0,zr.basename)(e),m)}for(let[m,p]of Object.entries(d))p||Oa.default.warn(`Component ${m} from (${(0,zr.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,pb?.(c),t.set("",new _l(c))}}var Kt,zr,cv,lv,fv,uv,Oa,QE,NX,_b,ov,dv,CX,av,Vwe,wX,mb,pb,hb,Jy,uE=se(()=>{Kt=require("node:fs"),zr=require("node:path"),cv=require("node:worker_threads"),lv=require("yaml"),fv=b(ae()),uv=b(Rt());H();FG();zG();c$();p$();h$();P$();c3();l3();d3();Oa=b(J());_3();QE=b(tt());YN();Hr();we();GL();NX=b(ae());L3();uR();k3();Ss();Z3();_b=b(St());rh();lI();SX();IX();vL();bE();Bp();VM();ov=(0,_b.resolvePath)(fv.get(F.COMPONENTSROOT)),dv=new Map;a(OX,"loadComponentDirectories");Vwe={REST:qS,rest:qS,graphql:FN,graphqlSchema:xN,roles:KN,jsResource:WN,fastifyRoutes:yM,login:jN,static:bM,operationsApi:wM,customFunctions:{},http:Qy,clustering:DM,replication:na,authentication:EE,mqtt:BM,loadEnv:AM,logging:Oa.default,dataLoader:IM},wX=[],mb=new Map;a(Kwe,"setErrorReporter");Jy=a(()=>hb,"getComponentName");a(Ywe,"symlinkHarperModule");a(PX,"sequentiallyHandleApplication");a(Eb,"loadComponent")});var tR=v((s1e,LX)=>{var{isMainThread:mv}=require("worker_threads"),{getTables:Wwe}=(we(),M(mt)),{loadComponentDirectories:zwe,loadComponent:jwe}=(uE(),M(eR)),{resetResources:Qwe}=(ja(),M(uI)),Jwe=St(),{dirname:Xwe}=require("path"),{getConnection:Zwe}=Ht(),eNe=ae(),{CONFIG_PARAMS:tNe}=(H(),M(W)),{loadCertificates:rNe}=ys(),{installApplications:nNe}=(pR(),M(mR)),{loadAndWatchLicensesDir:sNe}=(iE(),M(Vy)),pv=new Map;async function iNe(e=!1){!mv&&eNe.get(tNe.CLUSTERING_ENABLED)&&Zwe();try{mv&&await nNe()}catch(n){console.error(n)}let t=Qwe();Wwe(),t.isWorker=e,mv&&sNe(),await rNe(),await jwe(Xwe(Jwe.getConfigFilePath()),t,"hdb",!0,pv),await zwe(pv,t);let r=[];for(let[n]of pv)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(iNe,"loadRootComponents");LX.exports.loadRootComponents=iNe});var tt=v((o1e,qi)=>{"use strict";E_();var{Worker:oNe,MessageChannel:aNe,parentPort:Oo,isMainThread:Sv,threadId:cNe,workerData:Po}=require("worker_threads"),{PACKAGE_ROOT:lNe}=Rt(),{join:UX,isAbsolute:uNe,extname:dNe}=require("path"),{server:xX}=(Hr(),M(Im)),{watch:fNe,readdir:mNe}=require("fs/promises"),{totalmem:DX}=require("os"),lm=(H(),M(W)),BX=ae(),Hi=J(),{randomBytes:pNe}=require("crypto"),{_assignPackageExport:hNe}=li(),MX=1024*1024,Pa=[],ii=[],ENe=50,Tv=1e4,_Ne="restart",FX="request_thread_info",kX="resource_report",HX="thread_info",qX="added-port",gNe="ack",hv;hNe("threads",ii);qi.exports={startWorker:Ev,restartWorkers:Rv,shutdownWorkers:WX,shutdownWorkersNow:bNe,workers:Pa,setMonitorListener:LNe,onMessageFromWorkers:ANe,onMessageByType:jX,broadcast:wNe,broadcastWithAcknowledgement:CNe,setChildListenerByType:RNe,getWorkerIndex:GX,getWorkerCount:$X,getTicketKeys:KX,setMainIsWorker:TNe,setTerminateTimeout:SNe,restartNumber:Po?.restartNumber||1};ii.onMessageByType=jX;ii.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ii.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};qi.exports.whenThreadsStarted=new Promise(e=>{qi.exports.threadsHaveStarted=e});var yv;function SNe(e){Tv=e}a(SNe,"setTerminateTimeout");function GX(){return Po?Po.workerIndex:yv?0:void 0}a(GX,"getWorkerIndex");function $X(){return Po?Po.workerCount:yv?1:void 0}a($X,"getWorkerCount");function TNe(e){yv=e,qi.exports.threadsHaveStarted()}a(TNe,"setMainIsWorker");var VX=1,gb;function KX(){return gb||(gb=Sv?pNe(48):Po.ticketKeys,gb)}a(KX,"getTicketKeys");Object.defineProperty(xX,"workerIndex",{get(){return GX()}});Object.defineProperty(xX,"workerCount",{get(){return $X()}});var YX={[FX](e,t){ONe(t)},[kX](e,t){PNe(t,e)}};function Ev(e,t={}){let r=process.constrainedMemory?.()||DX();r=Math.min(r,DX(),2e4*MX);let n=BX.get(lm.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/MX/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of ii){let u=new aNe;u.existingPort=l,i.push(u),o.push(u.port2)}dNe(e)||(e+=".js");let c=new oNe(uNe(e)?e:UX(lNe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:VX=t.threadCount,name:t.name,restartNumber:qi.exports.restartNumber,ticketKeys:KX()},transferList:o,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:qX,port:l,threadId:c.threadId},[l]);return Tb(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>Ev(e,t),c.on("error",l=>{Hi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Pa.splice(Pa.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<ENe?(t.unexpectedRestarts=c.unexpectedRestarts+1,Ev(e,t)):Hi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{YX[l.type]?.(l,c)}),Pa.push(c),MNe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(Ev,"startWorker");var yNe=[lm.THREAD_TYPES.HTTP];async function Rv(e=null,t=Math.max(VX>3,1),r=!0){if(Sv){try{process.chdir(process.cwd())}catch(o){Hi.error("Unable to reestablish current working directory",o)}if(r){let{loadRootComponents:o}=tR();await o()}qi.exports.restartNumber++,t<1&&(t=t*Pa.length);let n=[],s=[];for(let o of Pa.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Hi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:qi.exports.restartNumber,type:lm.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=yNe.indexOf(o.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Hi.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},Tv*2).unref();o.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),u()})});if(n.push(l),c&&r){let u=o.startCopy(),d=new Promise(f=>{let m=a(p=>{p.type===lm.ITC_EVENT_TYPES.CHILD_STARTED&&(Hi.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Hi.trace("Waiting for worker to start",u.threadId),u.on("message",m)});s.push(d),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}=Wf();r&&(e==="http"||!e)&&BX.get(lm.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Oo.postMessage({type:_Ne,workerType:e})}a(Rv,"restartWorkers");function RNe(e,t){YX[e]=t}a(RNe,"setChildListenerByType");function WX(e){return Rv(e,1/0,!1)}a(WX,"shutdownWorkers");function bNe(e){return WX(e),Promise.all(Pa.map(t=>t.terminate()))}a(bNe,"shutdownWorkersNow");var zX=[];function ANe(e){zX.push(e)}a(ANe,"onMessageFromWorkers");var _v=new Map;function jX(e,t){let r=_v.get(e);r||_v.set(e,r=[]),r.push(t)}a(jX,"onMessageByType");var INe=10;async function wNe(e,t){let r=0;for(let n of ii)try{n.postMessage(e),r++>INe&&(r=0,await new Promise(setImmediate))}catch(s){Hi.error("Unable to send message to worker",s)}t&&JX(e,null)}a(wNe,"broadcast");var Sb=new Map,NNe=1;function CNe(e){return new Promise(t=>{let r=0;for(let n of ii)try{let s=NNe++,i=a(()=>{Sb.delete(s),--r===0&&t(),n!==Oo&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Sb.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Sb)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Hi.error("Unable to send message to worker",s)}r===0&&t()})}a(CNe,"broadcastWithAcknowledgement");function ONe(e){e.postMessage({type:HX,workers:QX()})}a(ONe,"sendThreadInfo");function QX(){let e=Date.now();return Pa.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(QX,"getChildWorkerInfo");function PNe(e,t){e.resources=t,e.resources.updated=Date.now()}a(PNe,"recordResourceReport");var gv;function LNe(e){gv=e}a(LNe,"setMonitorListener");var DNe=1e3,vX=!1;function MNe(){vX||(vX=!0,setInterval(()=>{for(let e of Pa){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}gv&&gv()},DNe).unref())}a(MNe,"startMonitoring");var vNe=1e3;if(Oo&&Po?.addPorts){Tb(Oo);for(let e=0,t=Po.addPorts.length;e<t;e++){let r=Po.addPorts[e];r.threadId=Po.addThreadIds[e],Tb(r)}setInterval(()=>{let e=process.memoryUsage();Oo.postMessage({type:kX,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},vNe).unref(),hv=a(()=>new Promise((e,t)=>{Oo.on("message",r),Oo.postMessage({type:FX});function r(n){n.type===HX&&(Oo.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else hv=QX;qi.exports.getThreadInfo=hv;function Tb(e,t){ii.push(e),e.on("message",r=>{if(r.type===qX)r.port.threadId=r.threadId,Tb(r.port);else if(r.type===gNe){let n=Sb.get(r.id);n&&n()}else JX(r,e)}).on("close",()=>{ii.splice(ii.indexOf(e),1)}).on("exit",()=>{ii.splice(ii.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Tb,"addPort");function JX(e,t){for(let n of zX)n(e,t);let r=_v.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Hi.error(s)}}a(JX,"notifyMessageListeners");if(Sv){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await mNe(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(UX(s,o.name));try{for await(let{filename:o}of fNe(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await Rv(),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)}},"watchDir");qi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else Oo.on("message",async e=>{let{type:t}=e;t===lm.ITC_EVENT_TYPES.SHUTDOWN&&(qi.exports.restartNumber=e.restartNumber,Oo.unref(),setTimeout(()=>{Hi.warn("Thread did not voluntarily terminate",cNe),process.exit(0)},Tv).unref())})});var n6=v((u1e,r6)=>{"use strict";var{promises:um,createReadStream:UNe,createWriteStream:xNe}=require("fs"),{createGzip:BNe}=require("zlib"),{promisify:FNe}=require("util"),{pipeline:kNe}=require("stream"),HNe=FNe(kNe),Av=require("path"),t6=ae();t6.initSync();var yb=J(),{CONFIG_PARAMS:qNe,ITC_EVENT_TYPES:c1e}=(H(),M(W)),{onMessageFromWorkers:l1e}=tt(),{convertToMS:XX}=oe(),{onStorageReclamation:GNe}=(eg(),M(Hx)),$Ne=6e4,VNe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",KNe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",bv,ZX;r6.exports=YNe;function YNe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:o}){if(s===!1)return;let c=0;if(GNe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(VNe);if(!i)throw new Error(KNe);let l;if(t){let f=t.slice(-1),m=t.slice(0,-1);f==="G"?l=m*1e9:f==="M"?l=m*1e6:l=m*1e3}let u;r&&(u=XX(r));let d;return bv=Date.now(),yb.trace("Log rotate enabled, maxSize:",t,"interval:",r),ZX=setInterval(async()=>{if(l){let f;f=await um.stat(e.path),f.size>=l&&(d=await e6(e.path,i))}if(u&&Date.now()-bv>=u&&(d=await e6(e.path,i),bv=Date.now()),n||c){let f=XX(n??"1M")/(1+c);c=0;let m=await um.readdir(i);for(let p of m)try{let h=await um.stat(Av.join(i,p));Date.now()-h.mtimeMs>f&&await um.unlink(Av.join(i,p))}catch(h){yb.error("Error trying to remove log",p,h)}}},o??$Ne).unref(),{end(){clearInterval(ZX)},getLastRotatedLogPath(){return d}}}a(YNe,"logRotator");async function e6(e,t){let r=t6.get(qNe.LOGGING_ROTATION_COMPRESS),n=Av.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await um.rename(e,n),r&&(e=n,n+=".gz",await HNe(UNe(e),BNe(),xNe(n)),await um.unlink(e)),yb.closeLogFile(),yb.notify(`hdb.log rotated, old log moved to ${n}`),n}a(e6,"moveLogFile")});var c6={};ye(c6,{RootConfigWatcher:()=>Iv});var s6,i6,o6,Rb,a6,Iv,l6=se(()=>{s6=b(require("chokidar")),i6=require("node:fs/promises"),o6=b(St()),Rb=require("node:stream"),a6=require("yaml"),Iv=class extends Rb.EventEmitter{static{a(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,o6.getConfigFilePath)(),this.ready=(0,Rb.once)(this,"ready"),this.#t=s6.default.watch(this.#e,{persistent:!1}).on("add",this.handleChange.bind(this)).on("change",this.handleChange.bind(this)).on("error",this.handleError.bind(this))}handleError(t){this.emit("error",t)}handleChange(){(0,i6.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,a6.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var J=v((h1e,Pb)=>{"use strict";var La=require("fs-extra"),{workerData:WNe,threadId:zNe,isMainThread:h6}=require("worker_threads"),ZE=require("path"),E6=require("yaml"),_6=require("properties-reader"),jr=(H(),M(W)),u6=el(),jNe=require("os"),{PACKAGE_ROOT:Mv}=Rt(),{_assignPackageExport:QNe}=li(),{Console:JNe}=require("console"),Nv=process.env.IS_SCRIPTED_SERVICE?function(){}:process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),d6=new Map,{join:Da}=ZE,f6=1e4,lr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},XNe={STDOUT:"stdOut",STDERR:"stdErr"},p1e=Da(Mv,"logs"),ZNe=Da(Mv,"config/yaml/",jr.HDB_DEFAULT_CONFIG_FILE),eCe=1e4,e_,t_,bb,Lo,Cv,wv,Ib,vt,es,wb,Nb,dm,XE,JE;function Ab(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=ZE.dirname(n)):t.root?n=Da(t.root,Cv):(n=vt.path,t.root||(t.root=ZE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=lr[t.level]??vt?.level??lr.info,g6(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(vt.path===e.path&&r)}a(Ab,"updateLogger");function g6(e){let t=e.conditional??(e.conditional={});t.notify=lr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=lr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=lr.error>=e.level?e.error.bind(e):void 0,t.warn=lr.warn>=e.level?e.warn.bind(e):void 0,t.info=lr.info>=e.level?e.info.bind(e):void 0,t.debug=lr.debug>=e.level?e.debug.bind(e):void 0,t.trace=lr.trace>=e.level?e.trace.bind(e):void 0}a(g6,"updateConditional");async function Ov(){JE||(JE=new TCe,await JE.ready,JE.on("change",Ov));let e=JE.config,t=e.logging??{};Ab(vt,t),Ib=vt.path,e_=t.console??!1,t.external&&Ab(es,t.external);for(let r in e){let n=e[r];n.logging?Ab(vt.forComponent(r),n.logging,r):vt.hasComponent(r)&&Ab(vt.forComponent(r),t,r)}}a(Ov,"updateLogSettings");var Pv=class extends JNe{static{a(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){Dn="trace",this.level<=lr.trace&&super.info(...t),Dn="info"}debug(...t){Dn="debug",this.level<=lr.debug&&super.info(...t),Dn="info"}info(...t){Dn="info",this.level<=lr.info&&super.info(...t),Dn="info"}warn(...t){Dn="warn",this.level<=lr.warn&&super.warn(...t),Dn="info"}error(...t){Dn="error",this.level<=lr.error&&super.error(...t),Dn="info"}fatal(...t){dm=!0;try{Dn="fatal",this.level<=lr.fatal&&super.error(...t),Dn="info"}finally{dm=!1}}notify(...t){dm=!0;try{Dn="notify",this.level<=lr.notify&&super.info(...t),Dn="info"}finally{dm=!1}}withTag(t){return T6(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};XE===void 0&&S6();Pb.exports={notify:lCe,fatal:uCe,error:Dv,warn:dCe,info:oCe,debug:cCe,trace:aCe,logLevel:Lo,loggerWithTag:T6,suppressLogging:sCe,initLogSettings:S6,logCustomLevel:fCe,closeLogFile:y6,createLogger:Ob,logsAtLevel:rCe,getLogFilePath:a(()=>Ib,"getLogFilePath"),forComponent:a(e=>vt.forComponent(e),"forComponent"),setMainLogger:gCe,setLogLevel:pCe,OUTPUTS:XNe,AuthAuditLog:SCe,start:Ov,startOnMainThread:Ov,errorToString:_Ce,disableStdio:tCe};function tCe(){Nv=a(function(){},"nativeStdWrite")}a(tCe,"disableStdio");Pb.exports.externalLogger={notify(...e){es.notify(...e)},fatal(...e){es.fatal(...e)},error(...e){es.error(...e)},warn(...e){es.warn(...e)},info(...e){es.info(...e)},debug(...e){es.debug(...e)},trace(...e){es.trace(...e)},withTag(e){return es.withTag(e)},loggerWithTag(e){return es.withTag(e)}};QNe("logger",Pb.exports.externalLogger);function rCe(e){return lr[Lo]<=lr[e]}a(rCe,"logsAtLevel");function S6(e=!1){try{if(XE===void 0||e){y6();let t=mCe(),r=u6(["ROOTPATH"]);try{XE=_6(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!La.pathExistsSync(Da(r.ROOTPATH,jr.HDB_CONFIG_FILE)))throw s}let n;if({level:Lo,configLogPath:wv,toFile:t_,logConsole:e_,rotation:n,toStream:bb}=hCe(r.ROOTPATH?Da(r.ROOTPATH,jr.HDB_CONFIG_FILE):XE.get("settings_path")),Cv=jr.LOG_NAMES.HDB,Ib=Da(wv,Cv),vt=Ob({path:Ib,level:Lo,stdStreams:bb,rotation:n}),es=vt.forComponent("external"),es.tag=null,h6)try{require("segfault-handler").registerHandler(Da(wv,"crash.log"))}catch{}}}catch(t){if(XE=void 0,t.code===jr.NODE_ERROR_CODES.ENOENT||t.code===jr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=u6(Object.keys(jr.CONFIG_PARAM_MAP),!0);for(let s in r){let i=jr.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let o=r[s];if(i===jr.CONFIG_PARAMS.LOGGING_LEVEL){Lo=o;continue}i===jr.CONFIG_PARAMS.LOGGING_CONSOLE&&(e_=i)}let{defaultLevel:n}=ECe();t_=!1,bb=!0,Lo=Lo===void 0?n:Lo,vt=Ob({level:Lo}),es=vt.forComponent("external"),es.tag=null;return}throw Dv("Error initializing log settings"),Dv(t),t}process.env.DEV_MODE&&(bb=!0),nCe()}a(S6,"initLogSettings");var zc=!0;function nCe(){t_&&(process.stdout.write=function(e){return typeof e=="string"&&zc&&e_&&(e=e.toString(),e[e.length-1]===`
|
|
134
134
|
`&&(e=e.slice(0,-1)),Nb(e)),Nv.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&zc&&e_&&(e[e.length-1]===`
|
|
135
135
|
`&&(e=e.slice(0,-1)),Nb(e)),Nv.apply(process.stderr,arguments)})}a(nCe,"stdioLogging");function T6(e,t,r=vt){return e=e.replace(/ /g,"-"),{notify:n(r.notify,"notify"),fatal:n(r.fatal,"fatal"),error:n(r.error,"error"),warn:n(r.warn,"warn"),info:n(r.info,"info"),debug:n(r.debug,"debug"),trace:n(r.trace,"trace")};function n(s,i){return!t||r.level<=lr[i]?function(...o){Cb=e;try{return s.call(r,...o)}finally{Cb=void 0}}:null}a(n,"logWithTag")}a(T6,"loggerWithTag");function sCe(e){try{zc=!1,e()}finally{zc=!0}}a(sCe,"suppressLogging");var iCe=WNe?.name?.replace(/ /g,"-")||"main",Dn="info",Lv,Cb;function Ob({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:o}){t||(t="info");let c=lr[t],l;function u(p){if(t_)if(l.logToStdstreams){f(p.replace(/\x1b\[[0-9;]*m/g,"")),zc=!1;try{process.stdout.write(p)}finally{zc=!0}}else f(p);else r&&process.stdout.write(p)}a(u,"logStdOut");function d(p){if(t_){if(f(p),r){zc=!1;try{process.stderr.write(p)}finally{zc=!0}}}else r&&process.stderr.write(p)}a(d,"logStdErr");let f=e&&p6(e,n,s);function m(p){return{write(h){let E=[Dn];E.unshift(Lv||iCe+"/"+zNe),Cb&&E.push(Cb),l.tag&&E.push(l.tag),p(`[${E.join("] [")}]: ${h}`)}}}if(a(m,"logPrepend"),s&&(Nb=f),l=new Pv({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),g6(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(p){e=p,f=p6(e,l.rotation,s),s&&(Nb=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!o){let p=new Map;l.forComponent=function(h){let E=p.get(h);return E||(E=Ob({path:e,level:t,stdStreams:r,isExternalInstance:h==="external",rotation:n,writeToLog:i,component:!0}),p.set(h,E)),E},l.hasComponent=function(h){return p.has(h)}}return l}a(Ob,"createLogger");var m6=100;function p6(e,t,r){let n=d6.get(e),s,i,o,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,d6.set(e,n)),h6&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let h=n6();try{n.rotator=h({logger:n,...t})}catch(E){n("Error initializing log rotator",E)}},100));let u=0;return n;function d(h){u++;let E=`${new Date().toISOString()} ${h}${h.endsWith(`
|
|
136
136
|
`)?"":`
|
|
137
137
|
`}`;c?(c.length<f6?c.push(E):c.length===f6&&c.push(`Maximum log buffer rate reached, logs will be throttled
|
|
138
|
-
`),dm&&(clearTimeout(o),f())):dm||l<performance.now()+m6?f(E):(l=Math.min(l,performance.now()+m6),c=[E],o=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();La.appendFileSync(s,c?c.join(""):h);let g=performance.now();l=Math.max(g,l)+(g-E)*50}else i||console.log(c?c.join(""):h);c&&(c=null)}function m(){try{La.closeSync(s)}catch{}s=null,r&&(wb=null)}function p(h){if(!s){try{s=La.openSync(e,"a"),r&&(wb=s)}catch(E){if(E.code==="ENOENT"&&!h)return La.mkdirpSync(ZE.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},eCe).unref()}}}a(p6,"getFileLogger");function oCe(...e){vt.info(...e)}a(oCe,"info");function aCe(...e){vt.trace(...e)}a(aCe,"trace");function Dv(...e){vt.error(...e)}a(Dv,"error");function cCe(...e){vt.debug(...e)}a(cCe,"debug");function lCe(...e){vt.notify(...e)}a(lCe,"notify");function uCe(...e){vt.fatal(...e)}a(uCe,"fatal");function dCe(...e){vt.warn(...e)}a(dCe,"warn");function fCe(e,t,r,...n){Lv=r.service_name;try{vt[e](...n)}finally{Lv=void 0}}a(fCe,"logCustomLevel");function mCe(){let e;try{e=jNe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Da(e,jr.HDB_HOME_DIR_NAME,jr.BOOT_PROPS_FILE_NAME);return La.existsSync(t)||(t=Da(Mv,"utility/hdb_boot_properties.file")),t}a(mCe,"getPropsFilePath");function pCe(e){Lo=e}a(pCe,"setLogLevel");function hCe(e){try{if(e.includes("config/settings.js")){let l=_6(e);return{level:l.get(jr.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:ZE.dirname(l.get(jr.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get(jr.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get(jr.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=E6.parseDocument(La.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),o=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:o,rotation:c}}catch(t){if(t.code===jr.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(hCe,"getLogConfig");function ECe(){try{let e=E6.parseDocument(La.readFileSync(ZNe,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{defaultLevel:t,defaultToFile:r,defaultToStream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(ECe,"getDefaultConfig");function _Ce(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}a(_Ce,"errorToString");function gCe(e){vt=e}a(gCe,"setMainLogger");function y6(){try{La.closeSync(wb)}catch{}wb=null}a(y6,"closeLogFile");function SCe(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(SCe,"AuthAuditLog");var{RootConfigWatcher:TCe}=(l6(),M(c6))});var ae=v((I6,w6)=>{"use strict";var vv=require("fs-extra"),Nu=require("path"),R6=require("os"),yCe=require("properties-reader"),n_=J(),r_=oe(),qe=(H(),M(W)),Lb=St(),RCe="Error initializing environment manager",Db="BOOT_PROPS_FILE_PATH",b6=!1,bCe={[qe.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[qe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ma={};Object.assign(I6,w6.exports={BOOT_PROPS_FILE_PATH:Db,getHdbBasePath:ACe,setHdbBasePath:ICe,get:A6,initSync:NCe,setProperty:nt,initTestEnvironment:CCe});function ACe(){return Ma[qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(ACe,"getHdbBasePath");function ICe(e){Ma[qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(ICe,"setHdbBasePath");function A6(e){let t=Lb.getConfigValue(e);return t===void 0?Ma[e]:t}a(A6,"get");function nt(e,t){bCe[e]&&(Ma[e]=t),Lb.updateConfigObject(e,t)}a(nt,"setProperty");function wCe(){let e;try{e=r_.getPropsFilePath(),vv.accessSync(e,vv.constants.F_OK|vv.constants.R_OK),b6=!0;let t=yCe(e);return Ma[qe.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(qe.HDB_SETTINGS_NAMES.INSTALL_USER),Ma[qe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(qe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ma[Db]=e,!0}catch{return n_.trace(`Environment manager found no properties file at ${e}`),!1}}a(wCe,"doesPropFileExist");function NCe(e=!1){try{(b6||wCe()||r_.noBootFile()||e)&&(Lb.initConfig(e),Ma[qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Lb.getConfigValue(qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){n_.error(RCe),n_.error(t),console.error(t),process.exit(1)}}a(NCe,"initSync");function CCe(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,l=Nu.join(__dirname,"../../","unitTests");Ma[Db]=Nu.join(l,"hdb_boot_properties.file"),nt(qe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Nu.join(l,"settings.test")),nt(qe.HDB_SETTINGS_NAMES.INSTALL_USER,R6.userInfo()?R6.userInfo().username:void 0),nt(qe.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),nt(qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Nu.join(l,"envDir","log")),nt(qe.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),nt(qe.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),nt(qe.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),nt(qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Nu.join(l,"envDir")),nt(qe.CONFIG_PARAMS.STORAGE_PATH,Nu.join(l,"envDir")),s&&(nt(qe.CONFIG_PARAMS.HTTP_SECUREPORT,A6(qe.CONFIG_PARAMS.HTTP_PORT)),nt(qe.CONFIG_PARAMS.HTTP_PORT,null)),nt(qe.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),nt(qe.CONFIG_PARAMS.HTTP_PORT,9926),nt(qe.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),nt(qe.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),nt(qe.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,r_.isEmpty(i)?!1:i),nt(qe.CONFIG_PARAMS.HTTP_CORS,r_.isEmpty(i)?!1:i),nt(qe.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),nt(qe.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),nt(qe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),nt(qe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),nt(qe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Nu.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),nt(qe.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,r_.isEmpty(c)?!1:c),o&&(nt("CORS_ACCESSLIST",o),nt(qe.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(nt(qe.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),nt(qe.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(nt(qe.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),nt(qe.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(nt(qe.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),nt(qe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Db}. Please check your boot props and settings files`;n_.fatal(r),n_.error(t)}}a(CCe,"initTestEnvironment")});var L6=v((g1e,P6)=>{"use strict";var O6=require("joi"),{string:s_,boolean:N6,array:OCe}=O6.types(),C6=(H(),M(W)),PCe=ot();P6.exports=LCe;function LCe(e){let t=O6.object({operation:s_.valid(C6.OPERATIONS_ENUM.ADD_NODE,C6.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:s_.required(),subscriptions:OCe.items({schema:s_.required(),table:s_.optional(),hash_attribute:s_.optional(),subscribe:N6.required(),publish:N6.required()}).min(1).required()});return PCe.validateBySchema(e,t)}a(LCe,"updateRemoteSourceValidator")});var i_=v((T1e,D6)=>{"use strict";var Uv=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,n=void 0){this.status=t,this.message=r,this.system_info=n}};D6.exports=Uv});var x6=v((R1e,U6)=>{"use strict";var DCe=L6(),va=J(),xv=pt(),MCe=(H(),M(W)),Bv=Ws(),Cu=Ht(),M6=Mh(),vCe=md(),{Node:UCe,NodeSubscription:v6}=Rc(),Fv=i_(),kv=oe(),xCe=ae(),{cloneDeep:BCe}=require("lodash"),{broadcast:FCe}=tt();U6.exports=kCe;async function kCe(e){try{let t=DCe(e);if(t)return va.error(`Validation error in updateRemoteSource: ${t.message}`),new Fv(xv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:n,system_info:s}=e,i=[],o=BCe(await Bv.getNodeRecord(n)),c=!kv.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&va.trace(`Existing record found for ${n}, updating records subscriptions`);for(let u=0,d=r.length;u<d;u++){let f=r[u],m=f.schema,p=f.table;if(!kv.doesSchemaExist(m)){va.trace(`updateRemoteSource creating schema: ${m}`);try{await M6.createSchema({operation:"create_schema",schema:m})}catch(h){va.error(h)}}if(p&&!kv.doesTableExist(m,p)){let h=new vCe(m,p,f.hash_attribute);f.attributes&&(h.attributes=f.attributes),va.trace(`updateRemoteSource creating table: ${p} in schema: ${m} with attributes: ${JSON.stringify(f.attributes)}`);try{await M6.createTable(h)}catch(E){va.error(E)}}if(va.trace(`Creating local stream for ${m}.${p}`),await Cu.createLocalTableStream(m,p),c?(await Cu.updateConsumerIterator(m,p,n,"stop"),await Cu.updateRemoteConsumer(f,n),f.subscribe===!0&&await Cu.updateConsumerIterator(m,p,n,"start")):(await Cu.updateRemoteConsumer(f,n),f.subscribe===!0?await Cu.updateConsumerIterator(m,p,n,"start"):await Cu.updateConsumerIterator(m,p,n,"stop")),c){let h=!1;for(let E=0,g=o.subscriptions.length;E<g;E++){let R=o.subscriptions[E];if(R.schema===m&&R.table===p){R.publish=f.publish,R.subscribe=f.subscribe,h=!0;break}}h||o.subscriptions.push(new v6(m,p,f.publish,f.subscribe))}else i.push(new v6(m,p,f.publish,f.subscribe))}c||(o=new UCe(n,i,void 0),va.trace(`No record found for ${n}, creating a new one`));let l=Object.create({});return Object.assign(l,o),l.system_info=s,await Bv.upsertNodeRecord(l),FCe({type:"nats_update"}),new Fv(xv.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${xCe.get(MCe.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await Bv.getSystemInfo())}catch(t){va.error(t);let r=t.message?t.message:t;return new Fv(xv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(kCe,"updateRemoteSource")});var H6=v((A1e,k6)=>{"use strict";var F6=require("joi"),{string:B6}=F6.types(),HCe=(H(),M(W)),qCe=ot();k6.exports=GCe;function GCe(e){let t=F6.object({operation:B6.valid(HCe.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:B6.required()});return qCe.validateBySchema(e,t)}a(GCe,"removeRemoteSourceValidator")});var $6=v((w1e,G6)=>{"use strict";var $Ce=H6(),Mb=J(),vb=pt(),Hv=(H(),M(W)),VCe=Ws(),KCe=oe(),q6=Ht(),YCe=ae(),Ub=i_(),{NodeSubscription:WCe}=Rc(),zCe=fd(),jCe=rc(),{broadcast:QCe}=tt(),JCe=YCe.get(Hv.CONFIG_PARAMS.CLUSTERING_NODENAME);G6.exports=XCe;async function XCe(e){try{let t=$Ce(e);if(t)return Mb.error(`Validation error in removeRemoteSource: ${t.message}`),new Ub(vb.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,n=await VCe.getNodeRecord(r);if(KCe.isEmptyOrZeroLength(n)){let i=`No record found for node '${r}'`;return Mb.error(i),new Ub(vb.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];Mb.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let l=new WCe(c.schema,c.table,!1,!1);await q6.updateConsumerIterator(c.schema,c.table,r,"stop"),await q6.updateRemoteConsumer(l,r)}let s=new zCe(Hv.SYSTEM_SCHEMA_NAME,Hv.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await jCe.deleteRecord(s),QCe({type:"nats_update"}),new Ub(vb.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${JCe} successfully removed node '${r}'.`)}catch(t){Mb.error(t);let r=t.message?t.message:t;return new Ub(vb.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(XCe,"removeRemoteSource")});var W6=v((C1e,Y6)=>{"use strict";var xb=J(),o_=(H(),M(W)),V6=pt(),qv=ae(),ZCe=oe(),K6=i_(),eOe=Ws(),tOe=sh(),rOe=_n();Y6.exports=nOe;async function nOe(e){try{xb.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=ZCe.ms_to_time(t),n=new sOe(qv.get(o_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),qv.get(o_.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)??qv.get(o_.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT),r,await eOe.getSystemInfo());try{let s={name:e.node_name,system_info:e.system_info},i=new tOe(o_.SYSTEM_SCHEMA_NAME,o_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[s]);await rOe.update(i)}catch(s){xb.error("Get remote config encountered an error updating system info for node:",e.node_name,s)}return xb.trace("getRemoteSourceConfig response:",n),new K6(V6.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,n)}catch(t){xb.error(t);let r=t.message?t.message:t;return new K6(V6.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(nOe,"getRemoteSourceConfig");function sOe(e,t,r,n){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=n}a(sOe,"ConfigResponseObject")});var J6=v((P1e,Q6)=>{"use strict";E_();var z6=ae();z6.initSync();var j6=Ht(),a_=J(),fm=(H(),M(W)),Gv=pt(),iOe=x6(),oOe=$6(),aOe=W6(),cOe=i_(),{encode:lOe,decode:uOe}=require("msgpackr"),dOe=Ei(),fOe=dc(),mOe=require("util"),pOe=(H(),M(W)),{isMainThread:hOe,parentPort:EOe}=require("worker_threads");tt();var _Oe=mOe.promisify(dOe.setSchemaDataToGlobal),$v=z6.get(fm.CONFIG_PARAMS.CLUSTERING_NODENAME);Q6.exports=gOe;async function gOe(){try{a_.notify("Starting reply service."),await _Oe();let e=await j6.getConnection(),t=`${$v}.__request__`,r=e.subscribe(t,{queue:$v});await SOe(r)}catch(e){a_.error(e)}}a(gOe,"initialize");async function SOe(e){for await(let t of e){let r=uOe(t.data),n;switch(r.operation){case fm.OPERATIONS_ENUM.ADD_NODE:case fm.OPERATIONS_ENUM.UPDATE_NODE:n=await iOe(r);break;case fm.OPERATIONS_ENUM.REMOVE_NODE:n=await oOe(r);break;case fm.OPERATIONS_ENUM.CLUSTER_STATUS:n=await aOe(r);break;case fm.OPERATIONS_ENUM.DESCRIBE_ALL:n=await TOe();break;default:let s=`node '${$v}' reply service received unrecognized request operation`;a_.error(s),n=new cOe(Gv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,s)}a_.trace(n),t.respond(lOe(n))}}a(SOe,"handleRequest");async function TOe(){try{return{status:Gv.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await fOe.describeAll({bypass_auth:!0})}}catch(e){return a_.error(e),{status:Gv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(TOe,"getRemoteDescribeAll");hOe||EOe.on("message",async e=>{let{type:t}=e;t===pOe.ITC_EVENT_TYPES.SHUTDOWN&&j6.closeConnection()})});var yOe=J6();(async()=>{try{await yOe()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|
|
138
|
+
`),dm&&(clearTimeout(o),f())):dm||l<performance.now()+m6?f(E):(l=Math.min(l,performance.now()+m6),c=[E],o=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();La.appendFileSync(s,c?c.join(""):h);let g=performance.now();l=Math.max(g,l)+(g-E)*50}else i||console.log(c?c.join(""):h);c&&(c=null)}function m(){try{La.closeSync(s)}catch{}s=null,r&&(wb=null)}function p(h){if(!s){try{s=La.openSync(e,"a"),r&&(wb=s)}catch(E){if(E.code==="ENOENT"&&!h)return La.mkdirpSync(ZE.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},eCe).unref()}}}a(p6,"getFileLogger");function oCe(...e){vt.info(...e)}a(oCe,"info");function aCe(...e){vt.trace(...e)}a(aCe,"trace");function Dv(...e){vt.error(...e)}a(Dv,"error");function cCe(...e){vt.debug(...e)}a(cCe,"debug");function lCe(...e){vt.notify(...e)}a(lCe,"notify");function uCe(...e){vt.fatal(...e)}a(uCe,"fatal");function dCe(...e){vt.warn(...e)}a(dCe,"warn");function fCe(e,t,r,...n){Lv=r.service_name;try{vt[e](...n)}finally{Lv=void 0}}a(fCe,"logCustomLevel");function mCe(){let e;try{e=jNe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Da(e,jr.HDB_HOME_DIR_NAME,jr.BOOT_PROPS_FILE_NAME);return La.existsSync(t)||(t=Da(Mv,"utility/hdb_boot_properties.file")),t}a(mCe,"getPropsFilePath");function pCe(e){Lo=e}a(pCe,"setLogLevel");function hCe(e){try{if(e.includes("config/settings.js")){let l=_6(e);return{level:l.get(jr.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:ZE.dirname(l.get(jr.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get(jr.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get(jr.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=E6.parseDocument(La.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),o=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:o,rotation:c}}catch(t){if(t.code===jr.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(hCe,"getLogConfig");function ECe(){try{let e=E6.parseDocument(La.readFileSync(ZNe,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{defaultLevel:t,defaultToFile:r,defaultToStream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(ECe,"getDefaultConfig");function _Ce(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}a(_Ce,"errorToString");function gCe(e){vt=e}a(gCe,"setMainLogger");function y6(){try{La.closeSync(wb)}catch{}wb=null}a(y6,"closeLogFile");function SCe(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(SCe,"AuthAuditLog");var{RootConfigWatcher:TCe}=(l6(),M(c6))});var ae=v((I6,w6)=>{"use strict";var vv=require("fs-extra"),Nu=require("path"),R6=require("os"),yCe=require("properties-reader"),n_=J(),r_=oe(),qe=(H(),M(W)),Lb=St(),RCe="Error initializing environment manager",Db="BOOT_PROPS_FILE_PATH",b6=!1,bCe={[qe.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[qe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ma={};Object.assign(I6,w6.exports={BOOT_PROPS_FILE_PATH:Db,getHdbBasePath:ACe,setHdbBasePath:ICe,get:A6,initSync:NCe,setProperty:st,initTestEnvironment:CCe});function ACe(){return Ma[qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(ACe,"getHdbBasePath");function ICe(e){Ma[qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(ICe,"setHdbBasePath");function A6(e){let t=Lb.getConfigValue(e);return t===void 0?Ma[e]:t}a(A6,"get");function st(e,t){bCe[e]&&(Ma[e]=t),Lb.updateConfigObject(e,t)}a(st,"setProperty");function wCe(){let e;try{e=r_.getPropsFilePath(),vv.accessSync(e,vv.constants.F_OK|vv.constants.R_OK),b6=!0;let t=yCe(e);return Ma[qe.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(qe.HDB_SETTINGS_NAMES.INSTALL_USER),Ma[qe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(qe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ma[Db]=e,!0}catch{return n_.trace(`Environment manager found no properties file at ${e}`),!1}}a(wCe,"doesPropFileExist");function NCe(e=!1){try{(b6||wCe()||r_.noBootFile()||e)&&(Lb.initConfig(e),Ma[qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Lb.getConfigValue(qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){n_.error(RCe),n_.error(t),console.error(t),process.exit(1)}}a(NCe,"initSync");function CCe(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,l=Nu.join(__dirname,"../../","unitTests");Ma[Db]=Nu.join(l,"hdb_boot_properties.file"),st(qe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Nu.join(l,"settings.test")),st(qe.HDB_SETTINGS_NAMES.INSTALL_USER,R6.userInfo()?R6.userInfo().username:void 0),st(qe.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),st(qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Nu.join(l,"envDir","log")),st(qe.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),st(qe.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),st(qe.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),st(qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Nu.join(l,"envDir")),st(qe.CONFIG_PARAMS.STORAGE_PATH,Nu.join(l,"envDir")),s&&(st(qe.CONFIG_PARAMS.HTTP_SECUREPORT,A6(qe.CONFIG_PARAMS.HTTP_PORT)),st(qe.CONFIG_PARAMS.HTTP_PORT,null)),st(qe.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),st(qe.CONFIG_PARAMS.HTTP_PORT,9926),st(qe.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),st(qe.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),st(qe.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,r_.isEmpty(i)?!1:i),st(qe.CONFIG_PARAMS.HTTP_CORS,r_.isEmpty(i)?!1:i),st(qe.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),st(qe.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),st(qe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),st(qe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),st(qe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Nu.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),st(qe.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,r_.isEmpty(c)?!1:c),o&&(st("CORS_ACCESSLIST",o),st(qe.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(st(qe.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),st(qe.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(st(qe.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),st(qe.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(st(qe.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),st(qe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Db}. Please check your boot props and settings files`;n_.fatal(r),n_.error(t)}}a(CCe,"initTestEnvironment")});var L6=v((g1e,P6)=>{"use strict";var O6=require("joi"),{string:s_,boolean:N6,array:OCe}=O6.types(),C6=(H(),M(W)),PCe=ot();P6.exports=LCe;function LCe(e){let t=O6.object({operation:s_.valid(C6.OPERATIONS_ENUM.ADD_NODE,C6.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:s_.required(),subscriptions:OCe.items({schema:s_.required(),table:s_.optional(),hash_attribute:s_.optional(),subscribe:N6.required(),publish:N6.required()}).min(1).required()});return PCe.validateBySchema(e,t)}a(LCe,"updateRemoteSourceValidator")});var i_=v((T1e,D6)=>{"use strict";var Uv=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,n=void 0){this.status=t,this.message=r,this.system_info=n}};D6.exports=Uv});var x6=v((R1e,U6)=>{"use strict";var DCe=L6(),va=J(),xv=pt(),MCe=(H(),M(W)),Bv=Ws(),Cu=Ht(),M6=Mh(),vCe=md(),{Node:UCe,NodeSubscription:v6}=Rc(),Fv=i_(),kv=oe(),xCe=ae(),{cloneDeep:BCe}=require("lodash"),{broadcast:FCe}=tt();U6.exports=kCe;async function kCe(e){try{let t=DCe(e);if(t)return va.error(`Validation error in updateRemoteSource: ${t.message}`),new Fv(xv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:n,system_info:s}=e,i=[],o=BCe(await Bv.getNodeRecord(n)),c=!kv.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&va.trace(`Existing record found for ${n}, updating records subscriptions`);for(let u=0,d=r.length;u<d;u++){let f=r[u],m=f.schema,p=f.table;if(!kv.doesSchemaExist(m)){va.trace(`updateRemoteSource creating schema: ${m}`);try{await M6.createSchema({operation:"create_schema",schema:m})}catch(h){va.error(h)}}if(p&&!kv.doesTableExist(m,p)){let h=new vCe(m,p,f.hash_attribute);f.attributes&&(h.attributes=f.attributes),va.trace(`updateRemoteSource creating table: ${p} in schema: ${m} with attributes: ${JSON.stringify(f.attributes)}`);try{await M6.createTable(h)}catch(E){va.error(E)}}if(va.trace(`Creating local stream for ${m}.${p}`),await Cu.createLocalTableStream(m,p),c?(await Cu.updateConsumerIterator(m,p,n,"stop"),await Cu.updateRemoteConsumer(f,n),f.subscribe===!0&&await Cu.updateConsumerIterator(m,p,n,"start")):(await Cu.updateRemoteConsumer(f,n),f.subscribe===!0?await Cu.updateConsumerIterator(m,p,n,"start"):await Cu.updateConsumerIterator(m,p,n,"stop")),c){let h=!1;for(let E=0,g=o.subscriptions.length;E<g;E++){let R=o.subscriptions[E];if(R.schema===m&&R.table===p){R.publish=f.publish,R.subscribe=f.subscribe,h=!0;break}}h||o.subscriptions.push(new v6(m,p,f.publish,f.subscribe))}else i.push(new v6(m,p,f.publish,f.subscribe))}c||(o=new UCe(n,i,void 0),va.trace(`No record found for ${n}, creating a new one`));let l=Object.create({});return Object.assign(l,o),l.system_info=s,await Bv.upsertNodeRecord(l),FCe({type:"nats_update"}),new Fv(xv.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${xCe.get(MCe.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await Bv.getSystemInfo())}catch(t){va.error(t);let r=t.message?t.message:t;return new Fv(xv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(kCe,"updateRemoteSource")});var H6=v((A1e,k6)=>{"use strict";var F6=require("joi"),{string:B6}=F6.types(),HCe=(H(),M(W)),qCe=ot();k6.exports=GCe;function GCe(e){let t=F6.object({operation:B6.valid(HCe.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:B6.required()});return qCe.validateBySchema(e,t)}a(GCe,"removeRemoteSourceValidator")});var $6=v((w1e,G6)=>{"use strict";var $Ce=H6(),Mb=J(),vb=pt(),Hv=(H(),M(W)),VCe=Ws(),KCe=oe(),q6=Ht(),YCe=ae(),Ub=i_(),{NodeSubscription:WCe}=Rc(),zCe=fd(),jCe=rc(),{broadcast:QCe}=tt(),JCe=YCe.get(Hv.CONFIG_PARAMS.CLUSTERING_NODENAME);G6.exports=XCe;async function XCe(e){try{let t=$Ce(e);if(t)return Mb.error(`Validation error in removeRemoteSource: ${t.message}`),new Ub(vb.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,n=await VCe.getNodeRecord(r);if(KCe.isEmptyOrZeroLength(n)){let i=`No record found for node '${r}'`;return Mb.error(i),new Ub(vb.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];Mb.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let l=new WCe(c.schema,c.table,!1,!1);await q6.updateConsumerIterator(c.schema,c.table,r,"stop"),await q6.updateRemoteConsumer(l,r)}let s=new zCe(Hv.SYSTEM_SCHEMA_NAME,Hv.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await jCe.deleteRecord(s),QCe({type:"nats_update"}),new Ub(vb.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${JCe} successfully removed node '${r}'.`)}catch(t){Mb.error(t);let r=t.message?t.message:t;return new Ub(vb.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(XCe,"removeRemoteSource")});var W6=v((C1e,Y6)=>{"use strict";var xb=J(),o_=(H(),M(W)),V6=pt(),qv=ae(),ZCe=oe(),K6=i_(),eOe=Ws(),tOe=sh(),rOe=_n();Y6.exports=nOe;async function nOe(e){try{xb.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=ZCe.ms_to_time(t),n=new sOe(qv.get(o_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),qv.get(o_.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)??qv.get(o_.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT),r,await eOe.getSystemInfo());try{let s={name:e.node_name,system_info:e.system_info},i=new tOe(o_.SYSTEM_SCHEMA_NAME,o_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[s]);await rOe.update(i)}catch(s){xb.error("Get remote config encountered an error updating system info for node:",e.node_name,s)}return xb.trace("getRemoteSourceConfig response:",n),new K6(V6.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,n)}catch(t){xb.error(t);let r=t.message?t.message:t;return new K6(V6.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(nOe,"getRemoteSourceConfig");function sOe(e,t,r,n){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=n}a(sOe,"ConfigResponseObject")});var J6=v((P1e,Q6)=>{"use strict";E_();var z6=ae();z6.initSync();var j6=Ht(),a_=J(),fm=(H(),M(W)),Gv=pt(),iOe=x6(),oOe=$6(),aOe=W6(),cOe=i_(),{encode:lOe,decode:uOe}=require("msgpackr"),dOe=Ei(),fOe=dc(),mOe=require("util"),pOe=(H(),M(W)),{isMainThread:hOe,parentPort:EOe}=require("worker_threads");tt();var _Oe=mOe.promisify(dOe.setSchemaDataToGlobal),$v=z6.get(fm.CONFIG_PARAMS.CLUSTERING_NODENAME);Q6.exports=gOe;async function gOe(){try{a_.notify("Starting reply service."),await _Oe();let e=await j6.getConnection(),t=`${$v}.__request__`,r=e.subscribe(t,{queue:$v});await SOe(r)}catch(e){a_.error(e)}}a(gOe,"initialize");async function SOe(e){for await(let t of e){let r=uOe(t.data),n;switch(r.operation){case fm.OPERATIONS_ENUM.ADD_NODE:case fm.OPERATIONS_ENUM.UPDATE_NODE:n=await iOe(r);break;case fm.OPERATIONS_ENUM.REMOVE_NODE:n=await oOe(r);break;case fm.OPERATIONS_ENUM.CLUSTER_STATUS:n=await aOe(r);break;case fm.OPERATIONS_ENUM.DESCRIBE_ALL:n=await TOe();break;default:let s=`node '${$v}' reply service received unrecognized request operation`;a_.error(s),n=new cOe(Gv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,s)}a_.trace(n),t.respond(lOe(n))}}a(SOe,"handleRequest");async function TOe(){try{return{status:Gv.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await fOe.describeAll({bypass_auth:!0})}}catch(e){return a_.error(e),{status:Gv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(TOe,"getRemoteDescribeAll");hOe||EOe.on("message",async e=>{let{type:t}=e;t===pOe.ITC_EVENT_TYPES.SHUTDOWN&&j6.closeConnection()})});var yOe=J6();(async()=>{try{await yOe()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|